雨碎江南
搜索

雨碎江南

前端杂谈
发表于2021-01-19|更新于2025-05-14|前端开发|web
为什么js要放在body最下面二css要放在head中?浏览器拿到css就知道该怎么渲染HTML了,如果把css放在body下面则会先按照默认样式进行渲染,当css加载完成的时候会按照css的样式再渲染一遍,即发生了reflow。由于js会阻塞代码执行,所以js一般放在body最下面,还有一个原因:js放在最下面的时候就可以取得页面中所有的元素了。 window.onload和DomContentLoaded有什么区别前者是页面的资源加载完成(包括图片、视频),后者是DOM渲染完即可,此时图片、视频可能还没加载完。 图片懒加载的实现原理先用一张默认的图片代替(这张默认的图片因为使用太频繁,浏览器可能缓存了)然后再更改img的src属性。 跨域可以跨域的3个标签: img:可以用于打点统计,统计网站可能是其他域,使用img标签有一个好处:没有浏览器兼容性问题 link:可以使用CDN script:可以使用CDN,可以JSONP 本地3000端口开启了一个服务: 12345678const http =...
码农翻身有感
发表于2020-11-05|更新于2025-03-18|杂记|设计模式
做技术切记“本末倒置”,我非常痛恨那些采用 bottom-up 方式来讲解技术的资料和文章,一上来就是技术细节、安装步骤、配置丰富,让初学者晕头转向,不知所云,看完以后也不知道为什么要有这个东西、解决了什么问题、它有什么来龙去脉。换句话说,这些资料和文章习惯于讲解 How,而不是 Why,但是在我看来,Why 有时候比 How 更重要。 当你改变不了别人的时候,抱怨也没有用,还是要先改变一下自己。 程序的局部性原理可以从时空两个维度来进行解释。 时间局部性:如果程序中某条指令开始执行,则不久之后该指令可能被再次执行;如果某数据被访问,则不久之后该数据可能被再次访问。空间局部性:一旦程序访问了某个存储单元,则不久之后其附近的存储单元也将被再次访问。 GSM 技术的核心是时分多址(TCDMA),将每个无线电频率按照时间均匀分给 8 (或者 16) 个用户,每个用户交互占用 1/8 的信道时间(人们通话的时候,语音的实际间隔时间其实很长,只要编码合理,就可以多用户公用一个信道)
计算机网络
发表于2020-10-10|更新于2025-04-02|后端开发|网络
ARP网络层和数据链路层的桥梁。 通过IP地址找到MAC地址,只适用于IPv4,不能用于IPv6(可以用ICMPv6替代ARP发送邻居探索消息,融合了IPv4中的ARP,ICMP重定向和ICMP路由选择,甚至还能自动设置IP地址:和DHCPv6结合)。ARP是通过ARP请求和ARP响应两种类型的包来确定MAC地址的。 IPv6中ICMP的作用被放大,如果没有ICMPv6,IPv6无法正常通信。 如上图所示主机A为了获得主机B的MAC地址,要通过广播发送一个ARP请求包,这个包包含了想要了解其MAC地址的主机的IP地址。如果ARP请求包中的目标IP和自己的IP地址一致,那么这个节点就将自己的MAC地址塞入到ARP响应包中返回给主机A。 ARP请求包还有一个作用:将自己的MAC地址告诉对方 TCP中间节点并不承诺提供可靠的连接通道,物资完全可能失序、重复、甚至丢失。所谓可靠完全由两个端点来实现。 TCP要求无论处在何种网络环境下都要提供高性能通信,并且无论网络拥堵情况如何变化,都必须保持这个特性。因此它每次发包都会计算往返时间及其偏差(RTT:Round Trip...
MySQL 优化总结
发表于2020-09-13|更新于2025-04-18|后端开发|MySQL
思路 第一步要做的是确定问题的症结,而不是一上来就看表结构和查询语句。 开启profiling MySQL默认会开启缓存池,本地调试的时候清除缓存的命令是:reset query cache。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950MariaDB [(none)]> show variables like '%profi%'; +------------------------+-------+| Variable_name | Value |+------------------------+-------+| have_profiling | YES || profiling | OFF || profiling_history_size | 15 |+------------------------+-------+3 rows...
面试套路 - 操作系统
发表于2020-09-08|更新于2025-01-19|后端开发|Linux
文件是如何组织的文件系统将硬盘空间以块为单位进行划分,每个文件占据若干个块,然后再通过一个文件控制块 FCB 记录每个文件占据的硬盘数据块。 这个文件控制块在Linux操作系统中就是inode,要想访问文件,就必须获得文件的inode信息,在inode中查找文件数据块索引表,根据索引中记录的硬盘地址信息访问硬盘,读写数据。 inode中记录着文件权限、所有者、修改时间和文件大小等文件属性信息,以及文件数据块硬盘地址索引。 RAID5将数据划分为N-1片,再利用N-1片数据进行位运算,得到一片校验数据,然后将这N片数据写入到N个硬盘。这样任何一块硬盘损坏都可以利用校验片的数据和其他片的数据进行计算得到丢失的那个数据,而硬盘的利用率也达到了N-1 / N。这样兼顾了磁盘利用率、读写速度和数据可用性,实际生产中用的最多。 RAID5中校验位的生成采用的是异或运算。所有数据的bit位,逐位进行异或,得到的就是校验位。如果丢失部分数据,用校验数据和其余数据逐位进行异或运算,可到丢失部分数据。举例,5块磁盘做RAID5,四块磁盘上的bit为:0 1 1 1 ,那么异或计算后,校验位为...
面试套路 - 数据库
发表于2020-08-01|更新于2025-04-17|后端开发|MySQL•MongoDB
辩证唯物主义告诉我们,事物发展轨迹是波浪式前进,螺旋式上升,有的时候似乎重新回到过去,但是却有了本质的区别和进步。 索引为啥索引能加快查询速度 索引其实也是一种空间换时间的思路。 数据库索引使用 B+ 树,B+ 树是一种 N 叉排序树,树的每个节点包含 N 个数据,这些数据按顺序排好,两个数据之间是一个指向子节点的指针,而子节点的数据则在这两个数据大小之间。 如上图所示:B+ 树的节点存储在磁盘上,每个节点存储 1000 多个数据,这样树的深度最多只要 4 层就可以存储数亿的数据。如果将树的根节点缓存在内存中,则最多只需要三次磁盘访问就可检索到需要的索引数据。 B 树和 B+ 树的区别:B 树的每个节点存储了记录的索引信息,而 B+ 树存储的是索引,只有在叶子节点存储的是全量的信息。并且 B+ 树在叶子节点有一个链表的结构,在范围查找的时候横向遍历会非常方便(不需要回溯到父节点再拓展向下)。 B+...
面试套路 - 消息队列
发表于2020-07-28|更新于2025-03-18|后端开发|流处理
...
面试套路 - Web 安全
发表于2020-06-15|更新于2025-05-20|后端开发|网络安全
XSS 利用的是用户对网站的信任,CSRF 利用的是网站对用户的信任。 XSS跨站脚本攻击(Cross Site Scripting)其简称应该是 CSS,但是 CSS 与前端的样式表重叠了,所以改为 XSS,这个 X 其实是 Cross 的通用英文缩写。XSS 攻击的原理是数据变成了脚本,常用的探测方法就是<script>alert(1)</script>这一条如果能注入成功就能以 src 的方式注入外部脚本。 危害在常用的探测脚本中都是alert(1),弹个框能有啥用,还能上天不?答案是真的能上天: 获取页面数据(你看到的东西别人也能看到,偷取网站数据) 获取 Cookies(敏感信息泄露,例如登录态) 劫持前端逻辑(欺骗用户,本来应该做 A 操作的,结果点击按钮执行了 B) 发送请求 因此 XSS 是比较危险的。 分类 反射型:url 参数直接注入(http://example.com/search?q=<script>alert('XSS')</script>) 存储型:存储到 DB...
面试套路 - Redis
发表于2020-06-15|更新于2025-04-20|后端开发|Redis
注意:缓存穿透(Cache Penetration) 和缓存击穿(Cache Breakdown) 的区别。穿透强调大量恶意请求根本不存在的数据,因为这个时候就好像没有缓存层,流量全部到 DB,影响整个系统;击穿就表示有缓存,但是热点 key 失效了,主要是针对的热点数据。穿透-DB无数据,击穿-DB有数据。 缓存穿透访问一个 DB 和缓存中都不存在的 key 时,请求会直接打到 DB 上,并且因为查不到数据,没法建立缓存,下一次请求还会打到 DB 上。这个时候缓存就像被“穿透”了一样,起不到任何作用,每次请求都会打到 DB 就好像没有缓存一样,大量这样的请求可能导致 DB 挂掉。 对于系统,假设一秒 5000 个请求,结果其中 4000 个请求是黑客发出的恶意攻击。黑客发出的那 4000个攻击,缓存中查不到,每次你去数据库里查,也查不到,举个栗子。数据库 id 是从 1 开始的,结果黑客发过来的请求 id...
面试套路 - js 基础
发表于2020-05-12|更新于2025-04-03|后端开发|Node.js•面试
夫大人者,与天地合其德,与日月合其明,与四时合其序,与鬼神合其吉凶。——《周易》 在 JavaScript 中, (a == 1 && a == 2 && a == 3) 是否有可能为 true 参考解决思路:a是一个对象或函数,每次调用取值都不一样,以有序的规律变化就能实现多等 方案1:使用 getter1234567let temp = 1;Object.defineProperty(global, 'a', { get() { return temp++; }});console.log(a === 1 && a === 2 && a === 3); // true 方案2:重写valueOf/toString1234567const a = { value: 1, valueOf() { return this.value++; ...
1234…11
avatar
consoles
野马也,尘埃也,生物之以息相吹也
文章
101
标签
77
分类
13
Follow Me
最新文章
一些想读的书2025-05-25
浅谈架构2025-05-23
mac 中的一些常用操作2025-05-23
一些好用的轮子和工具2025-05-23
面试套路 - Web 安全2025-05-20
分类
  • 人工智能2
  • 前端开发17
  • 区块链1
  • 后端开发45
  • 常用软件1
  • 数据库2
  • 文学1
  • 杂记9
  • 游戏开发1
  • 移动开发1
  • 算法8
  • 管理1
  • 运维12
标签
Node.jsleetcodeMySQLPyTorchpythonTypescript爱情婚姻算法数学归纳法概率论java设计模式数学软件工程canvasjavascripthtml5LinuxdnsDockerDevOpscss大数据数据分析文学函数式编程软件随想录游戏golang高可用nionetty网络编程iosRedisswiftShell信息安全MacAImemcached年终总结性能优化纳兰容若诗词oauth2ajax高并发秒杀sasscompasssparkhadoophivehdfs流处理storm网络安全读书笔记生活webReact.jsNext.jsVue.jsdappeth面试美食http分布式架构网络https管理经济学MongoDB
归档
  • 五月 2025 1
  • 四月 2025 2
  • 三月 2025 4
  • 一月 2025 1
  • 五月 2024 1
  • 十二月 2023 1
  • 九月 2023 1
  • 七月 2022 1
网站信息
文章数目 :
101
运行时间 :
本站访客数 :
本站总浏览量 :
最后更新时间 :
©2016 - 2025 By consoles
框架 Hexo|主题 Butterfly
日拱一卒,功不唐捐
搜索
数据加载中