From 95c14a03bf4ba595d7496bbc8c9a5fed2c7487d6 Mon Sep 17 00:00:00 2001 From: imhuster <14797903831@163.com> Date: Sat, 18 May 2019 11:41:54 +0800 Subject: [PATCH 1/6] =?UTF-8?q?Update=20=E7=BC=93=E5=AD=98.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加了缓存位置及缓存问题相关实例 --- docs/notes/缓存.md | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/docs/notes/缓存.md b/docs/notes/缓存.md index 3e43a32b..6e6a4ac6 100644 --- a/docs/notes/缓存.md +++ b/docs/notes/缓存.md @@ -1,5 +1,5 @@ * [点击阅读面试进阶指南 ](https://github.com/CyC2018/Backend-Interview-Guide) - + * [一、缓存特征](#一缓存特征) * [二、LRU](#二lru) * [三、缓存位置](#三缓存位置) @@ -8,7 +8,7 @@ * [六、数据分布](#六数据分布) * [七、一致性哈希](#七一致性哈希) * [参考资料](#参考资料) - + # 一、缓存特征 @@ -192,6 +192,15 @@ public class LRU implements Iterable { MySQL 等数据库管理系统具有自己的查询缓存机制来提高查询效率。 +## Java 内部的缓存 + +Java 为了优化空间,提高字符串、基本数据类型包装类的创建效率,设计了字符串常量池及Byte、Short、Character、Integer、Long、Boolean这6种包装类缓冲池。 + +## CPU 多级缓存 + +为了解决CPU运算速度与主存IO速度不匹配的问题,引入了多级缓存结构,同时使用MESI等缓存一致性协议来解决多核CPU缓存数据一致性的问题。 + + # 四、CDN 内容分发网络(Content distribution network,CDN)是一种互连的网络系统,它利用更靠近用户的服务器从而更快更可靠地将 HTML、CSS、JavaScript、音乐、图片、视频等静态资源分发给用户。 @@ -238,6 +247,19 @@ CDN 主要有以下优点: 要保证缓存一致性需要付出很大的代价,缓存数据最好是那些对一致性要求不高的数据,允许缓存数据存在一些脏数据。 +## 缓存“无底洞”现象 + +指的是为了满足业务要求添加了大量缓存节点, 但是性能不但没有好转反而下降了的现象。 + +产生原因:缓存系统通常采用hash函数将key映射到对应的缓存节点,随着缓存节点数目的增加,键值分布到更多的节点上,导致客户端一次批量操作会涉及多次网络操作,这意味着批量操作的耗时会随 +着节点数目的增加而不断增大。此外,网络连接数变多,对节点的性能也有一定影响。 + +解决方案: + +- 优化批量数据操作命令; +- 减少网络通信次数; +- 降低接入成本,使用长连/连接池,NIO等。 + # 六、数据分布 ## 哈希分布 From 8abe14ef090e8e33b4be76e220f228d7d625c73a Mon Sep 17 00:00:00 2001 From: imhuster <14797903831@163.com> Date: Sat, 18 May 2019 11:45:03 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E4=BD=8D=E7=BD=AE=E5=8F=8A=E7=BC=93=E5=AD=98=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E7=9B=B8=E5=85=B3=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/notes/缓存.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/notes/缓存.md b/docs/notes/缓存.md index 6e6a4ac6..52e0636d 100644 --- a/docs/notes/缓存.md +++ b/docs/notes/缓存.md @@ -194,11 +194,11 @@ MySQL 等数据库管理系统具有自己的查询缓存机制来提高查询 ## Java 内部的缓存 -Java 为了优化空间,提高字符串、基本数据类型包装类的创建效率,设计了字符串常量池及Byte、Short、Character、Integer、Long、Boolean这6种包装类缓冲池。 +Java 为了优化空间,提高字符串、基本数据类型包装类的创建效率,设计了字符串常量池及 Byte、Short、Character、Integer、Long、Boolean 这六种包装类缓冲池。 ## CPU 多级缓存 -为了解决CPU运算速度与主存IO速度不匹配的问题,引入了多级缓存结构,同时使用MESI等缓存一致性协议来解决多核CPU缓存数据一致性的问题。 +为了解决 CPU 运算速度与主存 IO 速度不匹配的问题,引入了多级缓存结构,同时使用 MESI 等缓存一致性协议来解决多核 CPU 缓存数据一致性的问题。 # 四、CDN @@ -251,14 +251,14 @@ CDN 主要有以下优点: 指的是为了满足业务要求添加了大量缓存节点, 但是性能不但没有好转反而下降了的现象。 -产生原因:缓存系统通常采用hash函数将key映射到对应的缓存节点,随着缓存节点数目的增加,键值分布到更多的节点上,导致客户端一次批量操作会涉及多次网络操作,这意味着批量操作的耗时会随 +产生原因:缓存系统通常采用 hash 函数将 key 映射到对应的缓存节点,随着缓存节点数目的增加,键值分布到更多的节点上,导致客户端一次批量操作会涉及多次网络操作,这意味着批量操作的耗时会随 着节点数目的增加而不断增大。此外,网络连接数变多,对节点的性能也有一定影响。 解决方案: - 优化批量数据操作命令; - 减少网络通信次数; -- 降低接入成本,使用长连/连接池,NIO等。 +- 降低接入成本,使用长连/连接池,NIO 等。 # 六、数据分布 From e4e5c54f2a32011cfa8082a8d15ba4ceb5d661af Mon Sep 17 00:00:00 2001 From: imhuster <14797903831@163.com> Date: Sat, 18 May 2019 11:47:11 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E4=BD=8D=E7=BD=AE=E5=8F=8A=E7=BC=93=E5=AD=98=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E7=9B=B8=E5=85=B3=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/notes/缓存.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notes/缓存.md b/docs/notes/缓存.md index 52e0636d..57e54403 100644 --- a/docs/notes/缓存.md +++ b/docs/notes/缓存.md @@ -198,7 +198,7 @@ Java 为了优化空间,提高字符串、基本数据类型包装类的创建 ## CPU 多级缓存 -为了解决 CPU 运算速度与主存 IO 速度不匹配的问题,引入了多级缓存结构,同时使用 MESI 等缓存一致性协议来解决多核 CPU 缓存数据一致性的问题。 +CPU 为了解决运算速度与主存 IO 速度不匹配的问题,引入了多级缓存结构,同时使用 MESI 等缓存一致性协议来解决多核 CPU 缓存数据一致性的问题。 # 四、CDN From 901d62e0fae33cd8382f3c554f787d13d6799478 Mon Sep 17 00:00:00 2001 From: imhuster <14797903831@163.com> Date: Sat, 18 May 2019 11:54:04 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E4=BD=8D=E7=BD=AE=E5=8F=8A=E7=BC=93=E5=AD=98=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E7=9B=B8=E5=85=B3=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/notes/缓存.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notes/缓存.md b/docs/notes/缓存.md index 57e54403..314176c3 100644 --- a/docs/notes/缓存.md +++ b/docs/notes/缓存.md @@ -258,7 +258,7 @@ CDN 主要有以下优点: - 优化批量数据操作命令; - 减少网络通信次数; -- 降低接入成本,使用长连/连接池,NIO 等。 +- 降低接入成本,使用长连/连接池,NIO 等。 # 六、数据分布 From c5794c99446bd2543406d0f234dc24f09cf4fa20 Mon Sep 17 00:00:00 2001 From: imhuster <14797903831@163.com> Date: Sun, 19 May 2019 10:11:03 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/notes/缓存.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/docs/notes/缓存.md b/docs/notes/缓存.md index 314176c3..9187dba9 100644 --- a/docs/notes/缓存.md +++ b/docs/notes/缓存.md @@ -1,5 +1,4 @@ -* [点击阅读面试进阶指南 ](https://github.com/CyC2018/Backend-Interview-Guide) - + * [一、缓存特征](#一缓存特征) * [二、LRU](#二lru) * [三、缓存位置](#三缓存位置) @@ -8,7 +7,7 @@ * [六、数据分布](#六数据分布) * [七、一致性哈希](#七一致性哈希) * [参考资料](#参考资料) - + # 一、缓存特征 @@ -31,6 +30,8 @@ - LRU(Least Recently Used):最近最久未使用策略,优先淘汰最久未使用的数据,也就是上次被访问时间距离现在最久的数据。该策略可以保证内存中的数据都是热点数据,也就是经常被访问的数据,从而保证缓存命中率。 +- LFU(Least Frequently Used):最不经常使用策略,优先淘汰一段时间内使用次数最少的数据。 + # 二、LRU 以下是基于 双向链表 + HashMap 的 LRU 算法实现,对算法的解释如下: @@ -211,7 +212,7 @@ CDN 主要有以下优点: - 通过部署多台服务器,从而提高系统整体的带宽性能; - 多台服务器可以看成是一种冗余机制,从而具有高可用性。 -

+

# 五、缓存问题 @@ -260,6 +261,8 @@ CDN 主要有以下优点: - 减少网络通信次数; - 降低接入成本,使用长连/连接池,NIO 等。 + + # 六、数据分布 ## 哈希分布 @@ -285,11 +288,11 @@ Distributed Hash Table(DHT) 是一种哈希分布方式,其目的是为了 将哈希空间 [0, 2n-1] 看成一个哈希环,每个服务器节点都配置到哈希环上。每个数据对象通过哈希取模得到哈希值之后,存放到哈希环中顺时针方向第一个大于等于该哈希值的节点上。 -

+

一致性哈希在增加或者删除节点时只会影响到哈希环中相邻的节点,例如下图中新增节点 X,只需要将它前一个节点 C 上的数据重新进行分布即可,对于节点 A、B、D 都没有影响。 -

+

## 虚拟节点 @@ -306,3 +309,9 @@ Distributed Hash Table(DHT) 是一种哈希分布方式,其目的是为了 - [一致性哈希算法](https://my.oschina.net/jayhu/blog/732849) - [内容分发网络](https://zh.wikipedia.org/wiki/%E5%85%A7%E5%AE%B9%E5%82%B3%E9%81%9E%E7%B6%B2%E8%B7%AF) - [How Aspiration CDN helps to improve your website loading speed?](https://www.aspirationhosting.com/aspiration-cdn/) + + + + +
💡

更多精彩内容将发布在公众号 **CyC2018**,公众号提供了该项目的离线阅读版本,后台回复"下载" 即可领取。也提供了一份技术面试复习思维导图,不仅系统整理了面试知识点,而且标注了各个知识点的重要程度,从而帮你理清多而杂的面试知识点,后台回复"资料" 即可领取。我基本是按照这个思维导图来进行复习的,对我拿到了 BAT 头条等 Offer 起到很大的帮助。你们完全可以和我一样根据思维导图上列的知识点来进行复习,就不用看很多不重要的内容,也可以知道哪些内容很重要从而多安排一些复习时间。

+
From dd3bb95ea9b535c9cf614766c493642e1a5b360f Mon Sep 17 00:00:00 2001 From: wangjian <1517@mapgoo.net> Date: Tue, 21 May 2019 09:14:15 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E9=9D=A2=E8=AF=95=E6=AF=8F=E6=97=A53+1=E5=BC=80=E6=BA=90?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- other/前端面试每日3+1.md | 132 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 other/前端面试每日3+1.md diff --git a/other/前端面试每日3+1.md b/other/前端面试每日3+1.md new file mode 100644 index 00000000..0b235d01 --- /dev/null +++ b/other/前端面试每日3+1.md @@ -0,0 +1,132 @@ +[中文](https://github.com/haizlin/fe-interview/blob/master/README.md) | [English](https://github.com/haizlin/fe-interview/blob/master/README-en.md) + +

+ html + css + javascript + skill + Statr +

+ +**非常感谢CS-Notes** +**参与每日面试答题,可以移步到: https://github.com/haizlin/fe-interview** + +# 前端面试每日 **3+1**(每日三问) + +> 《论语》,曾子曰:**“吾日三省吾身”**(我每天多次反省自己)。 +> 前端面试每日3+1,以面试题来驱动学习,每天进步一点! +> 让努力成为一种习惯,让奋斗成为一种享受! +> 相信 **坚持** 的力量!!! + +--- +- 学习不打烊,充电加油只为**遇到更好的自己**,365天无节假日,每天早上5点纯手工发布面试题(**死磕自己,愉悦大家**)。 +- 希望大家在这**浮夸**的前端圈里,保持**冷静**,坚持每天花20分钟来学习与思考。 +- 在这千变万化,类库层出不穷的前端,建议大家不要等到找工作时,才狂刷题,提倡**每日学习**!(**不忘初心**,html、css、javascript才是基石!) +- 欢迎大家到**Issues**交流,鼓励**PR**,感谢**Star**,大家有啥好的建议可以加我微信一起交流讨论! +> 希望大家**每日**去学习与思考,这才达到来这里的目的!!!(不要为了谁而来,要为自己而来!) + +## 今天的面试题 (2019.05.21) —— 第35天 +- [html] [用一个div模拟textarea的实现](https://github.com/haizlin/fe-interview/issues/128) +- [css] [使用flex实现三栏布局,两边固定,中间自适应](https://github.com/haizlin/fe-interview/issues/129) +- [js] [请你解释一个为什么10.toFixed(10)会报错?](https://github.com/haizlin/fe-interview/issues/130) +- [软技能] [谈一谈你知道的前端性能优化方案有哪些?](https://github.com/haizlin/fe-interview/issues/131) + +> 欢迎在 [**Issues**](https://github.com/haizlin/fe-interview/issues) 和朋友们一同讨论学习! + +## 试题分类 +- 分类(3+1) + [html](https://github.com/haizlin/fe-interview/category/html.md) | [css](https://github.com/haizlin/fe-interview/category/css.md) | [js](https://github.com/haizlin/fe-interview/category/js.md) | [软技能](https://github.com/haizlin/fe-interview/category/skill.md) + +- 专题(敬请期待、欢迎PR) + [ES6](https://github.com/haizlin/fe-interview/category/es6.md) | [jQuery](https://github.com/haizlin/fe-interview/lib/jQuery.md) | [Vue](https://github.com/haizlin/fe-interview/lib/Vue.md) | [React](https://github.com/haizlin/fe-interview/lib/React.md) | [AngularJs](https://github.com/haizlin/fe-interview/lib/AngularJs.md) | [小程序](https://github.com/haizlin/fe-interview/lib/wxapp.md) + +- 汇总 + [周](https://github.com/haizlin/fe-interview/category/week.md) + +## 历史面试题 +- **[查看全部](category/history.md)** + +- 第34天 (2019.05.20) + - [html] [Standards模式和Quirks模式有什么区别?](https://github.com/haizlin/fe-interview/issues/122) + - [css] [浏览器是怎样判断元素是否和某个CSS选择器匹配?](https://github.com/haizlin/fe-interview/issues/123) + - [js] [请用canvas写一个关于520浪漫表白的代码](https://github.com/haizlin/fe-interview/issues/124) + - [软技能] [你了解什么是技术债务吗?](https://github.com/haizlin/fe-interview/issues/125) + +- 第33天 (2019.05.19) + - [html] [html和html5有什么区别呢?](https://github.com/haizlin/fe-interview/issues/118) + - [css] [用CSS绘制一个三角形](https://github.com/haizlin/fe-interview/issues/119) + - [js] [说说你对this的理解](https://github.com/haizlin/fe-interview/issues/120) + - [软技能] [你对全栈工程师的理解是什么?](https://github.com/haizlin/fe-interview/issues/121) + +- 第32天 (2019.05.18) + - [html] [说说你对HTML元素的显示优先级的理解](https://github.com/haizlin/fe-interview/issues/114) + - [css] [说下line-height三种赋值方式有何区别?](https://github.com/haizlin/fe-interview/issues/115) + - [js] [造成内存泄漏的操作有哪些?](https://github.com/haizlin/fe-interview/issues/116) + - [软技能] [你在上一家公司工作流程是怎么样的,如何与其他人协作的?是怎样跨部门合作的?](https://github.com/haizlin/fe-interview/issues/117) + +- 第31天 (2019.05.17) + - [html] [DOM和BOM有什么区别?](https://github.com/haizlin/fe-interview/issues/110) + - [css] [让网页的字体变得清晰,变细用CSS怎么做?](https://github.com/haizlin/fe-interview/issues/111) + - [js] [写一个方法把0和1互转(0置1,1置0)](https://github.com/haizlin/fe-interview/issues/112) + - [软技能] [对于有压力时,你是怎么抗压的?](https://github.com/haizlin/fe-interview/issues/113) + +- 第30天 (2019.05.16) + - [html] [网页上的验证码是为了解决什么问题?说说你了解的验证码种类有哪些](https://github.com/haizlin/fe-interview/issues/106) + - [css] [描述下你所了解的图片格式及使用场景](https://github.com/haizlin/fe-interview/issues/107) + - [js] [写一个方法判断字符串是否为回文字符串](https://github.com/haizlin/fe-interview/issues/108) + - [软技能] [解释下CRLF是什么?](https://github.com/haizlin/fe-interview/issues/109) + +- **[查看全部](category/history.md)** + +## 怎样学习 +- 不管题目懂与不懂都要先思考再百度,思考后一定要去写出来 +- 如果是原生js的题,不要依赖第三方库,如jquery等 +- 每天的题目都是独立的,不需要按顺序来,但建议每道题都去答下,有你会的和有你不会的,答了才知道 +- 不懂的题百度后,不要直接复制一大段过来,要用自己的话精简地总结概括出来 + +## 起源 +> 故事起源于离职同事发来的一道求助面试题,然后在部门企业微信群里炸开了,答题完后大家觉得如果要是每天来一题,是不是会更爽呢?**以面代练**,突发其想说干就干,所以就有了这个开源仓库,只为利他利己! + +![起源图](https://github.com/haizlin/fe-interview/raw/master/resource/images/begin.jpg) + +## 特别感谢(排名不分先后) +- [qq674785876](https://github.com/qq674785876) +- [undefinedYu](https://github.com/undefinedYu) +- [qingleizhang123](https://github.com/qingleizhang123) +- [yxkhaha](https://github.com/yxkhaha) + +## 重大事件 +- 2019.04.17 — 来源于一张离职同事发来的求助面试题,然后大家突发其想说干就干 +- 2019.04.25 — 添加了面试题的分类 +- 2019.04.27 — 添加了Issues的模板 +- 2019.04.28 — 每日3题改成每日3+1,即添加了一个软技能题 +- 2019.04.29 — 添加了特别感谢的朋友 +- 2019.04.30 — 添加了QQ讨论群 +- 2019.05.02 — 去除QQ讨论群二维码,添加公众号及个人微信二维码 +- 2019.05.05 — 看到很多网络上的朋友滥用链接,让有需要的朋友找不到最新的试题,特添加了转载说明 +- 2019.05.07 — 为了把开源项目更好的延续下去,帮助更多爱学习的朋友,开通了掘金专栏、知乎专栏和看云 +- 2019.05.07 — 下午star数突破100,看来爱学习的人很多,也为自己的坚持而感到欣慰!利他利已! +- 2019.05.08 — 看到点赞数破100了,但每天答题的人很少很少!我在反思问题出在我身上还是什么原因?所有特加了提示:不要为了谁而来,要为自己而来! +- 2019.05.12 — 与国际接轨,代码与学习无国界,所以添加了英文版本,后续会继续优化,先解决有的问题! +- 2019.05.13 — star数突破300! +- 2019.05.14 — issues题目数量突破100!继续努力前行! +- 2019.05.15 — 加了技能图标,让README更美观,看着更舒服! +- 2019.05.16 — 看到很多朋友直接复制一大段出来文字放到issues里,其实这样是不好的,看后也要用自己的话总结根据出来,所有添加了怎样学习的方法 + +## 在哪可以看到 +- [掘金专栏](https://juejin.im/user/5b5ff865f265da0f6b771700/posts)(每天同步更新) +- [知乎专栏](https://zhuanlan.zhihu.com/fe-interview)(每天同步更新) +- [Gitee](https://gitee.com/haizhilin/fe-interview)(每天同步更新) +- [看云](https://www.kancloud.cn/aya001001/fe-interview)(每周同步更新) +- 「前端剑解」 微信公众号(扫描下方二维码,每天同步更新) + +## 转载说明 +> 近期,看到很多网络上的朋友滥用链接,包装了下就收费了,让有需要的朋友找不到最新的试题,违背了我的初衷,特添加了些声明: + +- 声明 + 1. 可以转载里面的所有面试题用到任何地方,但请添加仓库的地址,因为转载后你们很少会更新了,但此仓库每天都会准时更新。 + 2. 此开源仓库从不收取任何费用,**现在不会,以后也不会**,也不会授权任何人/机构进行收费。 + 3. 大家不需要对此仓库进行爬虫,如有需要什么格式的,可以私聊我,比如本地阅读的PDF,我有时间会做成PDF的,方便大家! + +## License +[![MIT](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/haizlin/fe-interview/blob/master/LICENSE) \ No newline at end of file