From 9d55d3b63477024902084aec6a335ceb8392c35c Mon Sep 17 00:00:00 2001 From: Guide Date: Mon, 22 May 2023 10:13:07 +0800 Subject: [PATCH] =?UTF-8?q?[docs=20add]=E9=A3=9F=E7=94=A8=E5=BB=BA?= =?UTF-8?q?=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + docs/.vuepress/sidebar/index.ts | 2 +- docs/database/redis/redis-questions-01.md | 2 +- docs/database/redis/redis-questions-02.md | 14 +++++++----- docs/database/sql/sql-questions-01.md | 9 ++++---- docs/home.md | 1 + docs/javaguide/intro.md | 6 +---- docs/javaguide/use-suggestion.md | 27 +++++++++++++++++++++++ 8 files changed, 46 insertions(+), 16 deletions(-) create mode 100644 docs/javaguide/use-suggestion.md diff --git a/README.md b/README.md index aff6a1d4..36532391 100755 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ > 1. **面试专版**:准备面试的小伙伴可以考虑面试专版:[《Java 面试指北 》](https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html) (质量很高,专为面试打造,配合 JavaGuide 食用)。 > 1. **知识星球**:专属面试小册/一对一交流/简历修改/专属求职指南,欢迎加入 [JavaGuide 知识星球](https://javaguide.cn/about-the-author/zhishixingqiu-two-years.html)(点击链接即可查看星球的详细介绍,一定一定一定确定自己真的需要再加入,一定一定要看完详细介绍之后再加我)。 +> 1. **学习建议** :有水平的面试官都是顺着项目经历挖掘问题。一定不要死记硬背技术八股文! > 1. **转载须知**:以下所有文章如非文首说明为转载皆为我(Guide)的原创,转载在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!
diff --git a/docs/.vuepress/sidebar/index.ts b/docs/.vuepress/sidebar/index.ts index 5cb00567..f187a927 100644 --- a/docs/.vuepress/sidebar/index.ts +++ b/docs/.vuepress/sidebar/index.ts @@ -23,7 +23,7 @@ export default sidebar({ icon: "star", collapsible: true, prefix: "javaguide/", - children: ["intro", "contribution-guideline", "faq"], + children: ["intro", "use-suggestion", "contribution-guideline", "faq"], }, { text: "面试准备", diff --git a/docs/database/redis/redis-questions-01.md b/docs/database/redis/redis-questions-01.md index 2bfe0e77..eb343ca2 100644 --- a/docs/database/redis/redis-questions-01.md +++ b/docs/database/redis/redis-questions-01.md @@ -392,7 +392,7 @@ PFCOUNT PAGE_1:UV ## Redis 持久化机制(重要) -Redis 持久化机制(RDB 持久化、AOF 持久化、RDB 和 AOF 的混合持久化) 相关的问题比较多,也比较重要,于是我单独抽了一篇文章来总结 Redis 持久化机制相关的知识点和问题:[Redis 持久化机制详解](./redis-persistence.md) 。 +Redis 持久化机制(RDB 持久化、AOF 持久化、RDB 和 AOF 的混合持久化) 相关的问题比较多,也比较重要,于是我单独抽了一篇文章来总结 Redis 持久化机制相关的知识点和问题:[Redis 持久化机制详解](https://javaguide.cn/database/redis/redis-persistence.html) 。 ## Redis 线程模型(重要) diff --git a/docs/database/redis/redis-questions-02.md b/docs/database/redis/redis-questions-02.md index 75adaa15..f3de9764 100644 --- a/docs/database/redis/redis-questions-02.md +++ b/docs/database/redis/redis-questions-02.md @@ -189,7 +189,7 @@ Redis 从 2.6 版本开始支持执行 Lua 脚本,它的功能和事务非常 除了下面介绍的内容之外,再推荐两篇不错的文章: - [你的 Redis 真的变慢了吗?性能优化如何做 - 阿里开发者](https://mp.weixin.qq.com/s/nNEuYw0NlYGhuKKKKoWfcQ) -- [Redis 常见阻塞原因总结 - JavaGuide](./redis-common-blocking-problems-summary.md) +- [Redis 常见阻塞原因总结 - JavaGuide](https://javaguide.cn/database/redis/redis-common-blocking-problems-summary.html) ### 使用批量操作减少网络传输 @@ -316,7 +316,9 @@ Biggest string found '"ballcat:oauth:refresh_auth:f6cdb384-9a9d-4f2f-af01-dc3f28 0 zsets with 0 members (00.00% of keys, avg size 0.00 ``` -从这个命令的运行结果,我们可以看出:这个命令会扫描(Scan) Redis 中的所有 key ,会对 Redis 的性能有一点影响。并且,这种方式只能找出每种数据结构 top 1 bigkey(占用内存最大的 string 数据类型,包含元素最多的复合数据类型)。 +从这个命令的运行结果,我们可以看出:这个命令会扫描(Scan) Redis 中的所有 key ,会对 Redis 的性能有一点影响。并且,这种方式只能找出每种数据结构 top 1 bigkey(占用内存最大的 string 数据类型,包含元素最多的复合数据类型)。然而,一个 key 的元素多并不代表占用内存也多,需要我们根据具体的业务情况来进一步判断。 + +在线上执行该命令时,为了降低对 Redis 的影响,需要指定 `-i` 参数控制扫描的频率。`redis-cli -p 6379 --bigkeys -i 3` 表示扫描过程中每次扫描后休息的时间间隔为 3 秒。 **2、借助开源工具分析 RDB 文件。** @@ -342,6 +344,7 @@ bigkey 的常见处理以及优化办法如下(这些方法可以配合起来 - **分割 bigkey**:将一个 bigkey 分割为多个小 key。这种方式需要修改业务层的代码,一般不推荐这样做。 - **手动清理**:Redis 4.0+ 可以使用 `UNLINK` 命令来异步删除一个或多个指定的 key。Redis 4.0 以下可以考虑使用 `SCAN` 命令结合 `DEL` 命令来分批次删除。 - **采用合适的数据结构**:比如使用 HyperLogLog 统计页面 UV。 +- **开启 lazy-free(惰性删除/延迟释放)** :lazy-free 特性是 Redis 4.0 开始引入的,指的是让 Redis 采用异步方式延迟释放 key 使用的内存,将该操作交给单独的子线程处理,避免阻塞主线程。 ### Redis hotkey(热 Key) @@ -377,8 +380,8 @@ Error: ERR An LFU maxmemory policy is not selected, access frequency not tracked Redis 中有两种 LFU 算法: -- **volatile-lru(least recently used)**:从已设置过期时间的数据集(`server.db[i].expires`)中挑选最近最少使用的数据淘汰。 -- **allkeys-lru(least recently used)**:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key(这个是最常用的)。 +1. **volatile-lfu(least frequently used)**:从已设置过期时间的数据集(`server.db[i].expires`)中挑选最不经常使用的数据淘汰。 +2. **allkeys-lfu(least frequently used)**:当内存不足以容纳新写入数据时,在键空间中,移除最不经常使用的 key。 以下是配置文件 `redis.conf` 中的示例: @@ -701,7 +704,7 @@ Cache Aside Pattern 中遇到写请求是这样的:更新 DB,然后直接删 ### 哪些情况可能会导致 Redis 阻塞? -单独抽了一篇文章来总结可能会导致 Redis 阻塞的情况:[Redis 常见阻塞原因总结](./redis-memory-fragmentation.md)。 +单独抽了一篇文章来总结可能会导致 Redis 阻塞的情况:[Redis 常见阻塞原因总结](https://javaguide.cn/database/redis/redis-common-blocking-problems-summary.html)。 ## Redis 集群 @@ -748,3 +751,4 @@ Cache Aside Pattern 中遇到写请求是这样的:更新 DB,然后直接删 - Redis Transactions : - What is Redis Pipeline: - 一文详解 Redis 中 BigKey、HotKey 的发现与处理: +- Redis延迟问题全面排障指南:https://mp.weixin.qq.com/s/mIc6a9mfEGdaNDD3MmfFsg diff --git a/docs/database/sql/sql-questions-01.md b/docs/database/sql/sql-questions-01.md index c8b2cd2c..068487d7 100644 --- a/docs/database/sql/sql-questions-01.md +++ b/docs/database/sql/sql-questions-01.md @@ -50,11 +50,11 @@ FROM Customers 答案: ```sql -SELECT distinct prod_id +SELECT DISTINCT prod_id FROM OrderItems ``` -知识点:`distinct` 用于返回列中的唯一不同值。 +知识点:`DISTINCT` 用于返回列中的唯一不同值。 ### 检索所有列 @@ -287,9 +287,10 @@ ORDER BY prod_price 答案: ```sql -SELECT DISTINCT order_num +SELECT order_num FROM OrderItems -WHERE quantity >= 100 +GROUP BY order_num +HAVING SUM(quantity) >= 100 ``` ## 高级数据过滤 diff --git a/docs/home.md b/docs/home.md index 7c2407e9..ac1e7aa2 100644 --- a/docs/home.md +++ b/docs/home.md @@ -7,6 +7,7 @@ title: JavaGuide(Java学习&&面试指南) - **面试专版**:准备 Java 面试的小伙伴可以考虑面试专版:**[《Java 面试指北 》](./zhuanlan/java-mian-shi-zhi-bei.md)** (质量很高,专为面试打造,配合 JavaGuide 食用)。 - **知识星球**:专属面试小册/一对一交流/简历修改/专属求职指南,欢迎加入 **[JavaGuide 知识星球](./about-the-author/zhishixingqiu-two-years.md)**(点击链接即可查看星球的详细介绍,一定确定自己真的需要再加入)。 +- **学习建议** :有水平的面试官都是顺着项目经历挖掘问题。一定不要死记硬背技术八股文! - **转载须知**:以下所有文章如非文首说明为转载皆为 JavaGuide 原创,转载在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境! ::: diff --git a/docs/javaguide/intro.md b/docs/javaguide/intro.md index 58e95ea4..9eadc8a8 100644 --- a/docs/javaguide/intro.md +++ b/docs/javaguide/intro.md @@ -21,11 +21,7 @@ icon: about 加油!奥利给! -## 学习建议 - -JavaGuide 整体目录规划已经非常清晰了,你可以从头开始学习,也可以根据自身情况来选择性地学习。 - -## 知识星球 +## 官方知识星球 对于准备面试的同学来说,强烈推荐我创建的一个纯粹的[Java 面试知识星球](../about-the-author/zhishixingqiu-two-years.md),干货非常多,学习氛围也很不错! diff --git a/docs/javaguide/use-suggestion.md b/docs/javaguide/use-suggestion.md new file mode 100644 index 00000000..29146a23 --- /dev/null +++ b/docs/javaguide/use-suggestion.md @@ -0,0 +1,27 @@ +--- +title: 食用建议 +category: 走近项目 +icon: star +--- + +**对于不准备面试的同学来说** ,本文档倾向于给你提供一个比较详细的学习路径,目录清晰,让你对于 Java 整体的知识体系有一个清晰认识。你可以跟着视频、书籍或者官方文档学习完某个知识点之后,然后来这里找对应的总结,帮助你更好地掌握对应的知识点。甚至说,你在有编程基础的情况下,想要学习某个知识点的话,可以直接看我的总结,这样学习效率会非常高。 + +**对于准备面试的同学来说** ,本文档涵盖 Java 程序员所需要掌握的核心知识的常见面试问题总结。 + +大部分人看 JavaGuide 应该都是为了准备技术八股文。**那如何才能更高效地准备技术八股文?** + +对于技术八股文来说,尽量不要死记硬背,这种方式非常枯燥且对自身能力提升有限!但是!想要一点不背是不太现实的,只是说要结合实际应用场景和实战来理解记忆。 + +我一直觉得面试八股文最好是和实际应用场景和实战相结合。很多同学现在的方向都错了,上来就是直接背八股文,硬生生学成了文科,那当然无趣了。 + +举个例子:你的项目中需要用到 Redis 来做缓存,你对照着官网简单了解并实践了简单使用 Redis 之后,你去看了 Redis 对应的八股文。你发现 Redis 可以用来做限流、分布式锁,于是你去在项目中实践了一下并掌握了对应的八股文。紧接着,你又发现 Redis 内存不够用的情况下,还能使用 Redis Cluster 来解决,于是你就又去实践了一下并掌握了对应的八股文。 + +而且, **面试中有水平的面试官都是根据你的项目经历来顺带着问一些技术八股文** 。 + +举个例子:你的项目用到了消息队列,那面试官可能就会问你:为什么使用消息队列?项目中什么模块用到了消息队列?如何保证消息不丢失?如何保证消息的顺序性?(结合你使用的具体的消息队列来准备)......。 + +**一定要记住你的主要目标是理解和记关键词,而不是像背课文一样一字一句地记下来!** + +另外,记录博客或者用自己的理解把对应的知识点讲给别人听也是一个不错的选择。 + +最后,准备技术面试的同学一定要定期复习(自测的方式非常好),不然确实会遗忘的。 \ No newline at end of file