diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..21c5183 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,101 @@ + + + + + + + + + + { + "lastFilter": { + "state": "OPEN", + "assignee": "AobingJava" + } +} + { + "selectedUrlAndAccountId": { + "url": "https://github.com/AobingJava/JavaFamily.git", + "accountId": "db293c56-b1d4-4a65-bc7c-ff15bdc7754a" + } +} + { + "associatedIndex": 2 +} + + + + + { + "keyToString": { + "RunOnceActivity.ShowReadmeOnStart": "true", + "git-widget-placeholder": "master", + "kotlin-language-version-configured": "true", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "vue.rearranger.settings.migration": "true" + } +} + + + + + + + + + + + + + + + + + + + + + 1720708986075 + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index 8a67148..2f51ec1 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,81 @@ -作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚(**请允许我使用一下夸张的修辞手法**)。 -在一个寂寞难耐的夜晚,我痛定思痛,决定开始写《**吊打面试官**》系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂**Offer**! -我会从下图中的知识点去写这个系列,很多细节的点,可能想得不是很完善,大家可以去[【公众号】](#公众号)获取或者加我[【微信】](#微信)提意见。 +我会从下图中的知识点去写这个系列,很多细节的点,可能想得不是很完善,大家可以去[【公众号】](#公众号)获取或者加我[【微信】](#微信)提意见(别忘记**Star**哟)。 + +原创文章每周最少两篇,公众号首发文章,[【B站】](https://space.bilibili.com/130763764)首发视频,比博客早一到两篇。 +

- - - + + +

+ +

- 阅读 - 微信群 - 公众号 - 公众号 - 投稿 - 投稿 + 微信群 + 公众号 + 投稿 + 公众号 + 投稿 + 投稿

-![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8vdvnnqz4j30u029349w.jpg) -目录 + + + +# 目录(善用Ctrl+F) + +**ps : 没链接的是还没写(耐心等待更哟)** + + +#### [后端面试点合集](https://mp.weixin.qq.com/s/gBr3UfC1HRcw4U-ZMmtRaQ) + +#### [脑图在线编辑地址](https://www.processon.com/view/5e86b713e4b0bf3ebcf4e376) + +- [学习路线](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF.md) - Java基础核心串讲 - - 计算机操作系统与Linux - - 计算机网络 - - 7种常见的设计模式和使用场景 - - Java必会基础与新版本特性 + - [Java基础知识](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%9F%BA%E7%A1%80%E6%A0%B8%E5%BF%83/java%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md) + - [计算机操作系统](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%9F%BA%E7%A1%80%E6%A0%B8%E5%BF%83/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md) + - [IO](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%9F%BA%E7%A1%80%E6%A0%B8%E5%BF%83/io.md) + - [Linux](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%9F%BA%E7%A1%80%E6%A0%B8%E5%BF%83/linux.md) + - [计算机网络](https://github.com/AobingJava/JavaFamily/tree/master/docs/all/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C) + + - [HTTP/HTTPS](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/HTTP/HTTPS.md) + - [TCP/IP](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/TCP/IP.md) + + - [7种常见的设计模式和使用场景](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E5%92%8C%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF.md) + - [Java必会基础与新版本特性](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/Java%E5%BF%85%E4%BC%9A%E5%9F%BA%E7%A1%80%E4%B8%8E%E6%96%B0%E7%89%88%E6%9C%AC%E7%89%B9%E6%80%A7.md) + - [线上问题排查](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E7%BA%BF%E4%B8%8A%E9%97%AE%E9%A2%98%E6%8E%92%E6%9F%A5.md) + + +- 集合框架 + - [HashMap](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9B%86%E5%90%88%E6%A1%86%E6%9E%B6/HashMap.md) + - [ConcurrentHashMap](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9B%86%E5%90%88%E6%A1%86%E6%9E%B6/ConcurrentHashMap.md) + - [ArrayList](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9B%86%E5%90%88%E6%A1%86%E6%9E%B6/ArrayList.md) + - [Vector](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9B%86%E5%90%88%E6%A1%86%E6%9E%B6/Vector.md) + + + + - 深入浅出JVM - - JVM内存模型 - - 性能调优、线上问题排查 - - 类加载机制详解 - - 垃圾回收机制 - - 垃圾回收器、垃圾回收算法 + - [JVM内存模型](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/jvm/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BAJVM.md) + - [性能调优、线上问题排查](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/jvm/%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98%E3%80%81%E7%BA%BF%E4%B8%8A%E9%97%AE%E9%A2%98%E6%8E%92%E6%9F%A5.md) + - [类加载机制详解](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/jvm/%E7%B1%BB%E5%8A%A0%E8%BD%BD%E6%9C%BA%E5%88%B6%E8%AF%A6%E8%A7%A3.md) + - [垃圾回收机制](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/jvm/%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%E6%9C%BA%E5%88%B6.md) + - [垃圾回收器、垃圾回收算法](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/jvm/%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%E5%99%A8%E3%80%81%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%E7%AE%97%E6%B3%95.md) - 并发与多线程 - - 线程状态转换与通信机制 - - 线程同步与互斥 - - 线程池知识点 - - 常见的JUC工具类 + - [多线程基础知识](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%B9%B6%E5%8F%91%E4%B8%8E%E5%A4%9A%E7%BA%BF%E7%A8%8B/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md) + - [常见关键字](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%B9%B6%E5%8F%91%E4%B8%8E%E5%A4%9A%E7%BA%BF%E7%A8%8B/%E5%B8%B8%E8%A7%81%E5%85%B3%E9%94%AE%E5%AD%97.md) + - [多线程锁机制](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%B9%B6%E5%8F%91%E4%B8%8E%E5%A4%9A%E7%BA%BF%E7%A8%8B/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E9%94%81%E6%9C%BA%E5%88%B6.md) + - [线程池知识点](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%B9%B6%E5%8F%91%E4%B8%8E%E5%A4%9A%E7%BA%BF%E7%A8%8B/%E7%BA%BF%E7%A8%8B%E6%B1%A0%E7%9F%A5%E8%AF%86%E7%82%B9.md) + - [常见的JUC工具类](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%B9%B6%E5%8F%91%E4%B8%8E%E5%A4%9A%E7%BA%BF%E7%A8%8B/%E5%B8%B8%E8%A7%81%E7%9A%84JUC%E5%B7%A5%E5%85%B7%E7%B1%BB.md) + - [多线程经典面试题](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%B9%B6%E5%8F%91%E4%B8%8E%E5%A4%9A%E7%BA%BF%E7%A8%8B/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%BB%8F%E5%85%B8%E9%9D%A2%E8%AF%95%E9%A2%98.md) - 常用工具集 @@ -55,127 +90,190 @@ - 从二叉搜索树到B+树 - 经典问题之字符串 - 经典问题之TOPK - + - [最大公共子串](https://mp.weixin.qq.com/s/Yx3uRVGFYikx8gm-oi-0vg) + - [动态规划](https://mp.weixin.qq.com/s/1dG8Dk7nZeIGHQ0Hp8gq7Q) + - [大厂面试爱问的「调度算法」,20 张图一举拿下](https://mp.weixin.qq.com/s/B9MVq1617YgtgBtwvhVg-Q) + - [图解红黑树](https://mp.weixin.qq.com/s/-8JFh5iLr88XA4AJ9mMf6g) + - [面试必备 | 不可不会的反转链表](https://mp.weixin.qq.com/s/_DJgsdhY4drJyEPN9xZX6Q) + - [红黑树【图解】](https://mp.weixin.qq.com/s/sPIE54UmvNgINZIATQKyew) + - [算法学习工具网站](https://mp.weixin.qq.com/s/pWXxg9O5BwcC9Zi68PT3TQ) - 必会框架 - - Spring全家桶以及源码分析 + - [Spring全家桶以及源码分析](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%BF%85%E4%BC%9A%E6%A1%86%E6%9E%B6/spring.md) + - [SpringCloud](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%BF%85%E4%BC%9A%E6%A1%86%E6%9E%B6/SpringCloud.md) - - 高性能NIO框架-Netty + - 分布式框架基石-RPC - - ORM框架Mybatis源码分析 - -- [高并发架构基石-缓存](https://github.com/AobingJava/JavaFamily/tree/master/docs/redis) - - - Redis基础 - - - 缓存击穿、雪崩、穿透 - - 集群高可用、哨兵、持久化、LRU - - 分布式锁、并发竞争、双写一致性 + - [Dubbo](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%BF%85%E4%BC%9A%E6%A1%86%E6%9E%B6/RPC/Dubbo.md) + - [RPC实践](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%BF%85%E4%BC%9A%E6%A1%86%E6%9E%B6/RPC/RPC%E5%AE%9E%E8%B7%B5.md) + - [Netty](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%BF%85%E4%BC%9A%E6%A1%86%E6%9E%B6/RPC/Netty.md) + - ORM框架Mybatis源码分析 + - [Zookeeper](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%BF%85%E4%BC%9A%E6%A1%86%E6%9E%B6/Zookeeper.md) + + +- 高并发架构基石-缓存 + + - [Redis数据结构、基础知识](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E7%BC%93%E5%AD%98/Redis%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E3%80%81%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md) + - [Redis常见线上故障及其解决方案](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E7%BC%93%E5%AD%98/Redis%E5%B8%B8%E8%A7%81%E7%BA%BF%E4%B8%8A%E6%95%85%E9%9A%9C%E5%8F%8A%E5%85%B6%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88.md) + - [Redis常见面试题](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E7%BC%93%E5%AD%98/Redis%E5%B8%B8%E8%A7%81%E9%9D%A2%E8%AF%95%E9%A2%98.md) + - [知识点之外的缓存之路](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E7%BC%93%E5%AD%98/%E7%9F%A5%E8%AF%86%E7%82%B9%E4%B9%8B%E5%A4%96%E7%9A%84%E7%BC%93%E5%AD%98%E4%B9%8B%E8%B7%AF.md) + + + - 消息队列 + - [消息队列基础知识](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/mq/%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97%E5%9F%BA%E7%A1%80.md) + - [Kafka](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/mq/kafka.md) + - [RocketMQ](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/mq/RocketMQ.md) + - [消息队列面试题](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/mq/%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97%E9%9D%A2%E8%AF%95%E9%A2%98.md) - - Kafka架构与原理 - - - RocketMQ - - 分布式事务 - + - 数据库 - - MySQL - - 索引、锁机制 - - 事务特性、隔离级别 - - MySQL调优与最佳实践 + - [MySQL基础知识](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/db/MySQL%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md) + - [索引、锁机制](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/db/%E7%B4%A2%E5%BC%95%E3%80%81%E9%94%81%E6%9C%BA%E5%88%B6.md) + - [事务特性、隔离级别、数据安全](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/db/%E4%BA%8B%E5%8A%A1%E7%89%B9%E6%80%A7%E3%80%81%E9%9A%94%E7%A6%BB%E7%BA%A7%E5%88%AB%E3%80%81%E6%95%B0%E6%8D%AE%E5%AE%89%E5%85%A8.md) + - [数据库性能调优](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/db/%E6%95%B0%E6%8D%AE%E5%BA%93%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98.md) + - [分库分表](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/db/%E5%88%86%E5%BA%93%E5%88%86%E8%A1%A8.md) + - [数据库面试题](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/db/%E6%95%B0%E6%8D%AE%E5%BA%93%E9%9D%A2%E8%AF%95%E9%A2%98.md) + - [OceanBase 4.3 发版|实时分析 AP 的里程碑版本](https://github.com/oceanbase) - 大数据 - + - [大数据体系](https://mp.weixin.qq.com/s/7rW9eHxdRXtWJExVupcZZQ) - ODPS离线分析 - - 搜索引擎组合 ElasticSearch、Canal、Kibana - Hive + - Spark + - Hadoop + - Hbase + - HDFS + - [Flink](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%A4%A7%E6%95%B0%E6%8D%AE/Flink.md) + + +- 搜索引擎 + + - [ElasticSearch](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/es.md) + - Canal + - Kibana + - Lucene + - Logstash + +- [优秀开源框架推荐](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%BC%80%E6%BA%90/%E5%BC%80%E6%BA%90%E6%A1%86%E6%9E%B6.md) + + - 架构演进之路 - 从All in one 到微服务 - - 互联网架构之路 - - 怎么设计一个能顶住双十一的系统? + - [互联网架构之路](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E6%9E%B6%E6%9E%84%E6%BC%94%E8%BF%9B%E4%B9%8B%E8%B7%AF/%E4%BA%92%E8%81%94%E7%BD%91%E6%9E%B6%E6%9E%84%E4%B9%8B%E8%B7%AF.md) + - [怎么设计一个能顶住双十一的系统?](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E6%9E%B6%E6%9E%84%E6%BC%94%E8%BF%9B%E4%B9%8B%E8%B7%AF/%E6%80%8E%E4%B9%88%E8%AE%BE%E8%AE%A1%E4%B8%80%E4%B8%AA%E8%83%BD%E9%A1%B6%E4%BD%8F%E5%8F%8C%E5%8D%81%E4%B8%80%E7%9A%84%E7%B3%BB%E7%BB%9F.md) + - [分布式&分布式事务](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E6%9E%B6%E6%9E%84%E6%BC%94%E8%BF%9B%E4%B9%8B%E8%B7%AF/%E5%88%86%E5%B8%83%E5%BC%8F%26%E5%88%86%E5%B8%83%E5%BC%8F%E4%BA%8B%E5%8A%A1.md) - 互联网前沿技术 - 容器化:Docker与k8s详解 - 面试技巧 + + - [简历](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E6%8A%80%E5%B7%A7/%E7%AE%80%E5%8E%86.md) + - [语言组织](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E6%8A%80%E5%B7%A7/%E8%AF%AD%E8%A8%80%E7%BB%84%E7%BB%87.md) + - [加分项](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E6%8A%80%E5%B7%A7/%E5%8A%A0%E5%88%86%E9%A1%B9.md) + - [面试流程](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E6%8A%80%E5%B7%A7/%E9%9D%A2%E8%AF%95%E6%B5%81%E7%A8%8B.md) - - 简历 - - 语言组织 - - 加分项 - - 扬长避短 - # 联系我 -添加我的微信备注"git", 即可加入人才交流群,里面的都是人才,各个说话都好听,回到这里就像回到家一样。 -我有空也会跟大家一起交流每期写作的思路,以及倾听大家意见. +- 研发规范 + + - [阿里巴巴技术规范](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E7%A0%94%E5%8F%91%E8%A7%84%E8%8C%83/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E6%8A%80%E6%9C%AF%E8%A7%84%E8%8C%83.md) + - [开源漏洞](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E7%A0%94%E5%8F%91%E8%A7%84%E8%8C%83/%E5%BC%80%E6%BA%90%E6%BC%8F%E6%B4%9E.md) + - [大厂技术研发规范](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E7%A0%94%E5%8F%91%E8%A7%84%E8%8C%83/%E5%A4%A7%E5%8E%82%E6%8A%80%E6%9C%AF%E7%A0%94%E5%8F%91%E8%A7%84%E8%8C%83.md) -![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8wk8deq0oj30dw0i0gml.jpg) +- [各地互联网公司盘点](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E5%90%84%E5%9C%B0%E4%BA%92%E8%81%94%E7%BD%91%E5%85%AC%E5%8F%B8%E7%9B%98%E7%82%B9.md) + +- 面试真题&面经分享 + + - [阿里巴巴](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%26%E9%9D%A2%E7%BB%8F%E5%88%86%E4%BA%AB/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E9%9D%A2%E8%AF%95%E9%A2%98.md) + - [字节跳动](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%26%E9%9D%A2%E7%BB%8F%E5%88%86%E4%BA%AB/%E5%AD%97%E8%8A%82%E8%B7%B3%E5%8A%A8%E9%9D%A2%E8%AF%95%E9%A2%98.md) + - [拼多多](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%26%E9%9D%A2%E7%BB%8F%E5%88%86%E4%BA%AB/%E6%8B%BC%E5%A4%9A%E5%A4%9A%E9%9D%A2%E8%AF%95%E9%A2%98.md) + - [哔哩哔哩](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%26%E9%9D%A2%E7%BB%8F%E5%88%86%E4%BA%AB/bilibili.md) + - [小红书](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%26%E9%9D%A2%E7%BB%8F%E5%88%86%E4%BA%AB/%E5%B0%8F%E7%BA%A2%E4%B9%A6.md) + - [京东](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%26%E9%9D%A2%E7%BB%8F%E5%88%86%E4%BA%AB/%E4%BA%AC%E4%B8%9C.md) + - [百度](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%26%E9%9D%A2%E7%BB%8F%E5%88%86%E4%BA%AB/%E7%99%BE%E5%BA%A6.md) + - [美团](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%26%E9%9D%A2%E7%BB%8F%E5%88%86%E4%BA%AB/%E7%BE%8E%E5%9B%A2.md) + - [网易](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%26%E9%9D%A2%E7%BB%8F%E5%88%86%E4%BA%AB/%E7%BD%91%E6%98%93.md) + - [腾讯](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%26%E9%9D%A2%E7%BB%8F%E5%88%86%E4%BA%AB/%E8%85%BE%E8%AE%AF%E9%9D%A2%E8%AF%95%E9%A2%98.md) + - [国企](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%26%E9%9D%A2%E7%BB%8F%E5%88%86%E4%BA%AB/%E5%9B%BD%E4%BC%81.md) + - [外企](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%26%E9%9D%A2%E7%BB%8F%E5%88%86%E4%BA%AB/%E5%A4%96%E4%BC%81.md) + - [校招](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%26%E9%9D%A2%E7%BB%8F%E5%88%86%E4%BA%AB/%E6%A0%A1%E6%8B%9B%E9%9D%A2%E8%AF%95%E9%A2%98.md) + - 社招 + - [其他](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E9%9D%A2%E8%AF%95%E7%9C%9F%E9%A2%98%26%E9%9D%A2%E7%BB%8F%E5%88%86%E4%BA%AB/%E5%85%B6%E4%BB%96.md) -# 赞赏码 +- 职场杂谈 -关注我的人比较小众,没啥创作收入,觉得有很大帮助的朋友可以赏杯咖啡(**不接受学生赞赏**),赏了一定要加我微信跟我说!!! + +- 程序人生系列 + + - [成长经历](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E7%A8%8B%E5%BA%8F%E4%BA%BA%E7%94%9F/%E6%88%90%E9%95%BF%E7%BB%8F%E5%8E%86.md) + - [职场经历](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E7%A8%8B%E5%BA%8F%E4%BA%BA%E7%94%9F/%E8%81%8C%E5%9C%BA%E7%BB%8F%E5%8E%86.md) + - [自媒体经历](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E7%A8%8B%E5%BA%8F%E4%BA%BA%E7%94%9F/%E8%87%AA%E5%AA%92%E4%BD%93%E7%BB%8F%E5%8E%86.md) + - [生活趣事](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E7%A8%8B%E5%BA%8F%E4%BA%BA%E7%94%9F/%E7%94%9F%E6%B4%BB%E8%B6%A3%E4%BA%8B.md) + - [读者经历](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E7%A8%8B%E5%BA%8F%E4%BA%BA%E7%94%9F/%E8%AF%BB%E8%80%85%E7%BB%8F%E5%8E%86.md) + - [过年特辑](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E7%A8%8B%E5%BA%8F%E4%BA%BA%E7%94%9F/%E8%BF%87%E5%B9%B4%E7%89%B9%E8%BE%91.md) -![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8wk8ypv5oj30dw0dwgly.jpg) + +- [科普](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E7%A7%91%E6%99%AE.md) -# 鸣谢列表 + +- [人物&杂谈](https://github.com/AobingJava/JavaFamily/blob/master/docs/all/%E4%BA%BA%E7%89%A9%26%E6%9D%82%E8%B0%88.md) -以下排名不分先后! - - - - - - - - - - - - - - - - - - - - - - - - - - -" - - - - - - - - - - - - - - - - - - - - +- [AI工具](https://juejin.cn/post/7389069052436217896#comment) + + + +- **福利** + + - [Java/后端学习路线](https://mp.weixin.qq.com/s/5QpuDtXAalR-pz59B5t27g) + - [Java/后端学习路线 2.0优化版本](https://mp.weixin.qq.com/s/QrRVMp6z7HjZA4trsga_cg) + - [整理的书单(附个人喜欢的文学书)](https://mp.weixin.qq.com/s/Wod2cGjGkGeB0iLVAqpksQ) + - [敖丙大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了](https://mp.weixin.qq.com/s/7NS452k5hVPW0dUQ-oTi-A) + - [整理好用的工具集](https://mp.weixin.qq.com/s/WYiXHVJ-p1sZAf4jb5gIXg) + - [通用的学习方法](https://mp.weixin.qq.com/s/JX72OoiNrZ9R0DTuOOtcoA) + - [IDEA破解(请勿传播)](https://github.com/AobingJava/JavaFamily/blob/master/docs/idea/idea.md) + - [电子书(请勿传播)](https://github.com/AobingJava/JavaFamily/blob/master/docs/idea/%E7%94%B5%E5%AD%90%E4%B9%A6.md) + - [面试资料(持续更新)](https://github.com/AobingJava/JavaFamily/blob/master/docs/idea/%E8%B5%84%E6%96%99.md) + - [简历模板(欢迎补充)](https://github.com/AobingJava/JavaFamily/blob/master/docs/idea/%E8%B5%84%E6%96%99.md) + - [概要设计模板](https://github.com/AobingJava/JavaFamily/blob/master/docs/idea/%E8%B5%84%E6%96%99.md) + - [5分钟白嫖敖丙常用的免费效率软件/工具!](https://mp.weixin.qq.com/s/2_hM5Z9IMLIRQ2QEPTABcQ) + +所有文章pdf版本 : 链接:https://pan.baidu.com/s/1PKO0LDspwJPNqT6qwqNorQ 密码:f654 + + + +### 阿里、字节、快手、腾讯、美团、滴滴内推 + +ao_bing@foxmail.com + + + + + + ![](https://tva1.sinaimg.cn/large/00831rSTly1gck2pplt8ej315u0u0k1b.jpg) + +## Star History + + + + + + Star History Chart + - # 公众号 -如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号(比博客更新早一到两篇)。 -关注我的人少,写作没啥收入来源,公众号文章下方的广告每次阅读的时候,方便就点一下然后退出来就好了(一下就好了),就当给我投币了,谢谢。 -![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8p9gftfchj30p00dwjuj.jpg) \ No newline at end of file +# 祝福 + +希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。 + +如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。 + +敖丙在工作中发现我身边的人真的就是实力越强的越努力,**最高级的自律,享受孤独**。 + diff --git "a/docs/all/Java\345\277\205\344\274\232\345\237\272\347\241\200\344\270\216\346\226\260\347\211\210\346\234\254\347\211\271\346\200\247.md" "b/docs/all/Java\345\277\205\344\274\232\345\237\272\347\241\200\344\270\216\346\226\260\347\211\210\346\234\254\347\211\271\346\200\247.md" new file mode 100644 index 0000000..f228e5d --- /dev/null +++ "b/docs/all/Java\345\277\205\344\274\232\345\237\272\347\241\200\344\270\216\346\226\260\347\211\210\346\234\254\347\211\271\346\200\247.md" @@ -0,0 +1,7 @@ +[枚举](https://mp.weixin.qq.com/s/U5FkL9zyzr0PkAp8MJJ8BQ) + +[从String中移除空白字符的多种方式!?差别竟然这么大!](https://mp.weixin.qq.com/s/Du2huBEkI7IR3noPeK_67g) + +[双亲委派原则](https://mp.weixin.qq.com/s/6nJ-6cDLW6TfysWV5ZB3Iw) + +[Java 16 新特征,真香!](https://mp.weixin.qq.com/s/-NQoKpBTXwGUxd2hUbCU2Q) \ No newline at end of file diff --git "a/docs/all/db/MySQL\345\237\272\347\241\200\347\237\245\350\257\206.md" "b/docs/all/db/MySQL\345\237\272\347\241\200\347\237\245\350\257\206.md" new file mode 100644 index 0000000..95ebf1b --- /dev/null +++ "b/docs/all/db/MySQL\345\237\272\347\241\200\347\237\245\350\257\206.md" @@ -0,0 +1,23 @@ + [国庆肝了8天整整2W字的数据库知识点](https://mp.weixin.qq.com/s/J3kCOJwyv2nzvI0_X0tlnA) + + [MySQL大表怎么DDL变更](https://mp.weixin.qq.com/s/pinOFeF09orQCnIp4L6XyA) + + [MySql主从复制,从原理到实践!](https://mp.weixin.qq.com/s/eEWMSTAUF1H-gFBx26jujw) + + [MySQL查询缓存](https://mp.weixin.qq.com/s/LZBctWNWi3qehb-dgUCmxQ) + + [MySQL 的 InnoDB 存储引擎是怎么设计的?](https://mp.weixin.qq.com/s/wr2gJGQSA8QH_lmPh1XOkw) + + [你怎么连模糊匹配like %%怎么优化都不知道](https://mp.weixin.qq.com/s/ygvuP35B_sJAlBHuuEJhfg) + + [数据库基础知识](https://mp.weixin.qq.com/s/NDL1Q6nqdPq5oMBWSpq4ug) + + [MySQL面试夺命20问](https://mp.weixin.qq.com/s/vwHkXGNCdRdx8k7BeBMy9w) + + [mysql 的一行记录是怎么存储的?](https://mp.weixin.qq.com/s/3d66-yXVZoDFRG1wyRw7kA) + + [MySQL的性能到底有多强?](https://mp.weixin.qq.com/s/Chsfldp_BUNOFFCoCPN-ZQ) + + [MySql 35卷](https://mp.weixin.qq.com/s/MaVYENapeJcLNpYcR7tqBQ) + + [为什么 MySQL 喜欢 B+ 树?](https://mp.weixin.qq.com/s/AoPq8poENF9T4mVS1fDFPw) \ No newline at end of file diff --git "a/docs/all/db/\344\272\213\345\212\241\347\211\271\346\200\247\343\200\201\351\232\224\347\246\273\347\272\247\345\210\253\343\200\201\346\225\260\346\215\256\345\256\211\345\205\250.md" "b/docs/all/db/\344\272\213\345\212\241\347\211\271\346\200\247\343\200\201\351\232\224\347\246\273\347\272\247\345\210\253\343\200\201\346\225\260\346\215\256\345\256\211\345\205\250.md" new file mode 100644 index 0000000..2b7c276 --- /dev/null +++ "b/docs/all/db/\344\272\213\345\212\241\347\211\271\346\200\247\343\200\201\351\232\224\347\246\273\347\272\247\345\210\253\343\200\201\346\225\260\346\215\256\345\256\211\345\205\250.md" @@ -0,0 +1,15 @@ + [MySQL安全方案](https://mp.weixin.qq.com/s/rQDitOOnLpLEoj8M11NHwg) + + [数据库连接池到底应该设多大?这篇文章可能会颠覆你的认知](https://mp.weixin.qq.com/s/dQFSrXEmgBMh1PW835rlwQ) + + [数据库设计](https://mp.weixin.qq.com/s/yo_LJ6IwGnjiBXSA7ZHdOA) + + [漫话:如何给女朋友解释什么是撞库、脱库和洗库?](https://mp.weixin.qq.com/s/L0XUMHInnwN9gSYGH2nzdg) + + [MVCC和事务隔离级别的关系](https://mp.weixin.qq.com/s/0-YEqTMd0OaIhW99WqavgQ) + + [MySQL事务与MVCC如何实现的隔离级别](https://mp.weixin.qq.com/s/CZHuGT4sKs_QHD_bv3BfAQ) + + [数据库事务](https://mp.weixin.qq.com/s/iFmvvt4DJ-_qFeb0XUh6QA) + + [MySQL 默认隔离级别是RR,为什么阿里等大厂会改成RC?](https://mp.weixin.qq.com/s/mIz0T0v68_dvUgCrj-qdug) \ No newline at end of file diff --git "a/docs/all/db/\345\210\206\345\272\223\345\210\206\350\241\250.md" "b/docs/all/db/\345\210\206\345\272\223\345\210\206\350\241\250.md" new file mode 100644 index 0000000..848ed83 --- /dev/null +++ "b/docs/all/db/\345\210\206\345\272\223\345\210\206\350\241\250.md" @@ -0,0 +1,3 @@ +[我们为什么要分库分表?](https://mp.weixin.qq.com/s/-Jipxjwe-jAax4hJSe-9Jg) + +[分库分表方案](https://mp.weixin.qq.com/s/dMqXBW6W8DeqfAPvko3ViQ) \ No newline at end of file diff --git "a/docs/all/db/\346\225\260\346\215\256\345\272\223\346\200\247\350\203\275\350\260\203\344\274\230.md" "b/docs/all/db/\346\225\260\346\215\256\345\272\223\346\200\247\350\203\275\350\260\203\344\274\230.md" new file mode 100644 index 0000000..d6be30f --- /dev/null +++ "b/docs/all/db/\346\225\260\346\215\256\345\272\223\346\200\247\350\203\275\350\260\203\344\274\230.md" @@ -0,0 +1,11 @@ + [为什么MySQL不建议使用delete删除数据?](https://mp.weixin.qq.com/s/7dpNkLaglIyb_9DKdH43eQ) + + [工作以来总结的大厂SQL调优姿势](https://mp.weixin.qq.com/s/nEmN4S9JOTVGj5IHyfNtCw) + + [为啥阿里巴巴不建议MySQL使用Text类型?](https://mp.weixin.qq.com/s/oVjm_iLvbkximBjHv9d8ig) + + [用对了这些场景下的索引,技术总监夸我棒](https://mp.weixin.qq.com/s/-gmAPfiKMNJgHhIZqR2C4A) + + [MySQL索引凭什么让查询效率提高这么多?](https://mp.weixin.qq.com/s/qESZSzHoxUKQRJhb1EQA_Q) + + [MySQL调优](https://mp.weixin.qq.com/s/e0CqJG2-PCDgKLjQfh02tw) \ No newline at end of file diff --git "a/docs/all/db/\346\225\260\346\215\256\345\272\223\351\235\242\350\257\225\351\242\230.md" "b/docs/all/db/\346\225\260\346\215\256\345\272\223\351\235\242\350\257\225\351\242\230.md" new file mode 100644 index 0000000..0751635 --- /dev/null +++ "b/docs/all/db/\346\225\260\346\215\256\345\272\223\351\235\242\350\257\225\351\242\230.md" @@ -0,0 +1,17 @@ + [innodb是如何插入数据的?](https://mp.weixin.qq.com/s/SqSPxSRslkjUcDasBHGRSQ) + + [数据库自增ID用完了会怎么样?](https://mp.weixin.qq.com/s/qEA1pC2pfh3xz9HuM8iIBg) + + [阿里面试:说说一致性读实现原理?](https://mp.weixin.qq.com/s/qHzb6oPrrbAPoIlfLJVNAg) + + [我说 SELECT COUNT(*) 会造成全表扫描,面试官让我回去等通知](https://mp.weixin.qq.com/s/SNRvdmyS57oWS_CyYKVvSA) + + [原来MySQL面试还会问这些(undo log)](https://mp.weixin.qq.com/s/Lx4TNPLQzYaknR7D3gmOmQ) + + [explain](https://mp.weixin.qq.com/s/izOKK9Ft5wLts8hWIo4ODQ) + + [你说说一条更新SQL的执行过程?](https://mp.weixin.qq.com/s/-5N6eg1yMBUvDMbJOXp0eg) + + [一条SQL语句执行得很慢的原因有哪些?](https://mp.weixin.qq.com/s/YKmFEtHcZPBn1S9so0kxYw) + + [数据库的锁,到底锁的是什么?](https://mp.weixin.qq.com/s/mvG0wVr2kpbM8iqfZnimiQ) \ No newline at end of file diff --git "a/docs/all/db/\347\264\242\345\274\225\343\200\201\351\224\201\346\234\272\345\210\266.md" "b/docs/all/db/\347\264\242\345\274\225\343\200\201\351\224\201\346\234\272\345\210\266.md" new file mode 100644 index 0000000..03cce13 --- /dev/null +++ "b/docs/all/db/\347\264\242\345\274\225\343\200\201\351\224\201\346\234\272\345\210\266.md" @@ -0,0 +1,13 @@ + [数据库索引](https://mp.weixin.qq.com/s/_9rDde9wRYoZeh07EASNQQ) + + [一口气搞懂MySQL索引所有知识点](https://mp.weixin.qq.com/s/faOaXRQM8p0kwseSHaMCbg) + + [你都是如何设计索引的?](https://mp.weixin.qq.com/s/fShA7jxjshKyHEHfVDrLVA) + + [MySQL的索引是怎么加速查询的?](https://mp.weixin.qq.com/s/7TPVOT7sloDUKmhldf9uvg) + + [索引下推](https://mp.weixin.qq.com/s/87qsrj-_hG54uxcOlFr35Q) + + [MySQL 的全局锁、表锁和行锁](https://mp.weixin.qq.com/s/1LGJjbx_n_cvZndjM3R8mQ) + + [聊聊索引失效?](https://mp.weixin.qq.com/s/WnO_4SoEL6jugkxPHW4KCg) \ No newline at end of file diff --git "a/docs/all/jvm/\345\236\203\345\234\276\345\233\236\346\224\266\345\231\250\343\200\201\345\236\203\345\234\276\345\233\236\346\224\266\347\256\227\346\263\225.md" "b/docs/all/jvm/\345\236\203\345\234\276\345\233\236\346\224\266\345\231\250\343\200\201\345\236\203\345\234\276\345\233\236\346\224\266\347\256\227\346\263\225.md" new file mode 100644 index 0000000..8357b1c --- /dev/null +++ "b/docs/all/jvm/\345\236\203\345\234\276\345\233\236\346\224\266\345\231\250\343\200\201\345\236\203\345\234\276\345\233\236\346\224\266\347\256\227\346\263\225.md" @@ -0,0 +1 @@ +[垃圾回收底层原理](https://mp.weixin.qq.com/s/nY6vL5MlUXY1lfnIvNHMnw) \ No newline at end of file diff --git "a/docs/all/jvm/\345\236\203\345\234\276\345\233\236\346\224\266\346\234\272\345\210\266.md" "b/docs/all/jvm/\345\236\203\345\234\276\345\233\236\346\224\266\346\234\272\345\210\266.md" new file mode 100644 index 0000000..e30c133 --- /dev/null +++ "b/docs/all/jvm/\345\236\203\345\234\276\345\233\236\346\224\266\346\234\272\345\210\266.md" @@ -0,0 +1 @@ + [看完这篇垃圾回收,和面试官扯皮没问题了](https://mp.weixin.qq.com/s/_AKQs-xXDHlk84HbwKUzOw) \ No newline at end of file diff --git "a/docs/all/jvm/\346\200\247\350\203\275\350\260\203\344\274\230\343\200\201\347\272\277\344\270\212\351\227\256\351\242\230\346\216\222\346\237\245.md" "b/docs/all/jvm/\346\200\247\350\203\275\350\260\203\344\274\230\343\200\201\347\272\277\344\270\212\351\227\256\351\242\230\346\216\222\346\237\245.md" new file mode 100644 index 0000000..b3db0f1 --- /dev/null +++ "b/docs/all/jvm/\346\200\247\350\203\275\350\260\203\344\274\230\343\200\201\347\272\277\344\270\212\351\227\256\351\242\230\346\216\222\346\237\245.md" @@ -0,0 +1,11 @@ + [线上服务的FGC问题排查,看这篇就够了!](https://mp.weixin.qq.com/s/P8s3kuceBNovUP5adXpFCQ) + + [记一次大促期间JVM堆外内存泄漏故障排查记录](https://mp.weixin.qq.com/s/yutHXOi6Xl3-Qn91Pvg9wA) + + [怎么排查堆内存溢出啊?](https://mp.weixin.qq.com/s/7XGD-Z3wrThv5HyoK3B8AQ) + + [CPU100%,排查](https://mp.weixin.qq.com/s/roEMz-5tzBZvGxbjq8NhOQ) + + [排查YGC问题](https://mp.weixin.qq.com/s/LRx9tLtx1tficWPvUWUTuQ) + + [CPU飙高排查](https://mp.weixin.qq.com/s/nWghy4McYx6Ix3QPSLSmkQ) \ No newline at end of file diff --git "a/docs/all/jvm/\346\267\261\345\205\245\346\265\205\345\207\272JVM.md" "b/docs/all/jvm/\346\267\261\345\205\245\346\265\205\345\207\272JVM.md" new file mode 100644 index 0000000..443e9a3 --- /dev/null +++ "b/docs/all/jvm/\346\267\261\345\205\245\346\265\205\345\207\272JVM.md" @@ -0,0 +1,7 @@ +[【JVM故事】了解JVM的结构,好在面试时吹牛](https://mp.weixin.qq.com/s/fit90VdZUa2pG9lbET0i7w) + +[Java堆内存是线程共享的!面试官:你确定吗?](https://mp.weixin.qq.com/s/Wws24Fhg1nH4dHvtcFYi2g) + +[JVM](https://mp.weixin.qq.com/s/0XqhneKz7F5A-PE9CdzyoA) + +[面试系列重启:JVM篇](https://mp.weixin.qq.com/s/FEPtidbx7WKz6LbhoerRcA) \ No newline at end of file diff --git "a/docs/all/jvm/\347\261\273\345\212\240\350\275\275\346\234\272\345\210\266\350\257\246\350\247\243.md" "b/docs/all/jvm/\347\261\273\345\212\240\350\275\275\346\234\272\345\210\266\350\257\246\350\247\243.md" new file mode 100644 index 0000000..2c4b59b --- /dev/null +++ "b/docs/all/jvm/\347\261\273\345\212\240\350\275\275\346\234\272\345\210\266\350\257\246\350\247\243.md" @@ -0,0 +1 @@ + [JVM必问知识点:类加载过程](https://mp.weixin.qq.com/s/eHqFONXXNc-LD4ugaKM6UA) \ No newline at end of file diff --git a/docs/all/line.md b/docs/all/line.md new file mode 100644 index 0000000..f857db5 --- /dev/null +++ b/docs/all/line.md @@ -0,0 +1,2 @@ +![](https://tva1.sinaimg.cn/large/0082zybply1gcb2u3keh9j30p02j4h2r.jpg) +![](https://tva1.sinaimg.cn/large/007S8ZIlgy1gf8flovpg1j30u07l7hdx.jpg) \ No newline at end of file diff --git a/docs/all/mq/RocketMQ.md b/docs/all/mq/RocketMQ.md new file mode 100644 index 0000000..d401c98 --- /dev/null +++ b/docs/all/mq/RocketMQ.md @@ -0,0 +1 @@ + [RocketMQ](https://mp.weixin.qq.com/s/y-4TVwbc7AFGEA7q-_OkYw) \ No newline at end of file diff --git a/docs/all/mq/kafka.md b/docs/all/mq/kafka.md new file mode 100644 index 0000000..2788086 --- /dev/null +++ b/docs/all/mq/kafka.md @@ -0,0 +1,11 @@ +[Kafka架构与原理](https://mp.weixin.qq.com/s/-IPfWPS1WQMEgcIu0Ak2VQ) + +[Kafka 架构设计](https://mp.weixin.qq.com/s/8wfZEsNDpeLr-_uu2CawFw) + +[Kafka性能篇:为何Kafka这么"快"?](https://mp.weixin.qq.com/s/kMIhPW2uLdy-mgS9sF6agw) + +[Kafka 精妙的高性能设计(上篇)](https://mp.weixin.qq.com/s/kImrkVLE4dtpVnb-Yp479Q) + +[Kafka 精妙的高性能设计(下篇)](https://mp.weixin.qq.com/s/YJFltTP4J5si1Z5SbuMUJw) + +[kafka夺命连环11问](https://mp.weixin.qq.com/s/sFUvgaQUXSA8b4hshhbwOQ) \ No newline at end of file diff --git "a/docs/all/mq/\346\266\210\346\201\257\351\230\237\345\210\227\345\237\272\347\241\200.md" "b/docs/all/mq/\346\266\210\346\201\257\351\230\237\345\210\227\345\237\272\347\241\200.md" new file mode 100644 index 0000000..f971c07 --- /dev/null +++ "b/docs/all/mq/\346\266\210\346\201\257\351\230\237\345\210\227\345\237\272\347\241\200.md" @@ -0,0 +1,5 @@ +[消息队列基础知识](https://mp.weixin.qq.com/s/Qhw4oS0OeN1N7uT1z6rbqg) + +[用通俗的语言介绍 RPC 框架的架构原理](https://mp.weixin.qq.com/s/jKr_ZDPww8A9huLAMBPEIQ) + +[消息重复消费、分布式事务、顺序消费](https://mp.weixin.qq.com/s/OKon95MRUqDc9IwtEqPSjQ) \ No newline at end of file diff --git "a/docs/all/mq/\346\266\210\346\201\257\351\230\237\345\210\227\351\235\242\350\257\225\351\242\230.md" "b/docs/all/mq/\346\266\210\346\201\257\351\230\237\345\210\227\351\235\242\350\257\225\351\242\230.md" new file mode 100644 index 0000000..5ed7187 --- /dev/null +++ "b/docs/all/mq/\346\266\210\346\201\257\351\230\237\345\210\227\351\235\242\350\257\225\351\242\230.md" @@ -0,0 +1,7 @@ + [面试题:如何保证消息不丢失?处理重复消息?消息有序性?消息堆积处理?](https://mp.weixin.qq.com/s/1r1x-Irbatvzdc90haaecA) + + [面试官:你对Kafka比较熟? 那说说kafka日志段如何读写的吧?](https://mp.weixin.qq.com/s/68XX9qnEvDTCOw8gYLNBxQ) + + [师兄大厂面试遇到面试官的 Kafka 暴击三连问,快面哭了!](https://mp.weixin.qq.com/s/ejZBAGI7qLE_QYSe-AqipA) + + [消息队列之推还是拉,RocketMQ 和 Kafka是如何做的?](https://mp.weixin.qq.com/s/S_0YCwUtyQqeBml02jPYqg) \ No newline at end of file diff --git "a/docs/all/mq/\351\207\215\345\244\215\346\266\210\350\264\271\343\200\201\351\241\272\345\272\217\346\266\210\350\264\271\343\200\201\345\210\206\345\270\203\345\274\217\344\272\213\345\212\241.md" "b/docs/all/mq/\351\207\215\345\244\215\346\266\210\350\264\271\343\200\201\351\241\272\345\272\217\346\266\210\350\264\271\343\200\201\345\210\206\345\270\203\345\274\217\344\272\213\345\212\241.md" new file mode 100644 index 0000000..38b759a --- /dev/null +++ "b/docs/all/mq/\351\207\215\345\244\215\346\266\210\350\264\271\343\200\201\351\241\272\345\272\217\346\266\210\350\264\271\343\200\201\345\210\206\345\270\203\345\274\217\344\272\213\345\212\241.md" @@ -0,0 +1,324 @@ +> 你知道的越多,你不知道的越多 + +> 点赞再看,养成习惯 + +> **GitHub**上已经开源 [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 + +## 前言 + +**消息队列**在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在**消息队列**的使用和原理方面对小伙伴们进行360°的刁难。 + +作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚(**请允许我使用一下夸张的修辞手法**)。 + +于是在一个寂寞难耐的夜晚,**暖男**我痛定思痛,决定开始写**《吊打面试官》**系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂Offer! + +## 捞一下 + +上一期,简单的介绍了一下**消息队列**的基础知识,里面有消息队列的应用场景,以及使用之后可能带来的问题,但是上期没对怎么解决这些问题做回答,因为要控制篇幅嘛(明明是自己觉得MQ写不了多少期,要多怼一期出来!渣男) + +咳咳,我们言归正传,没看的朋友去看一下,有助于这期的阅读: + +[《吊打面试官》系列-消息队列基础](https://juejin.im/post/5dd3ff85e51d453fe34dfcc5) + +## 面试开始 + +>一个风度翩翩,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向你走来,看着铮亮的头,心想着肯定是尼玛顶级架构师吧!但是我们看过暖男敖丙的系列,腹有诗书气自华,虚都不虚。 + +![](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1573833391430&di=f71f2ee36285f2bd553423b29d9a9ff9&imgtype=0&src=http%3A%2F%2Fpic4.zhimg.com%2Fv2-f698be82de32b998da130d425287b797_b.jpg) + +### 没错小伙子还是我,上次话说一半你就溜了,这次我非得好好的问问你。 + +好的面试官,因为上次着急,敖丙的系列更新了所以赶回家去看了! + +### 我信你个鬼,我们开始吧,上次说到了消息队列的消息重复消费,你能跟我介绍这是怎么样子的场景么? + +消息**重复消费**是使用消息队列之后,必须考虑的一个问题,也是比较严重和常见的问题,**帅丙**我在开发过程中,但凡用到了消息队列,我第一时间考虑的就是**重复消费**的问题。 + +就比如有这样的一个场景,用户下单成功后我需要去一个活动页面给他加**GMV**(销售总额),最后根据他的GMV去给他发奖励,这是电商活动很常见的玩法。 + +类似累计下单金额到哪个梯度给你返回什么梯度的奖励这样。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g98cyh5oboj30a00jgqba.jpg) + +我只能告诉你这样的活动页面**10000%**是用**异步**去加的(别问我为什么,因为这个活动的后端是敖丙我做的😂),不然你想,你一个用户下一单就给他加一下,那就意味着对那张表就要操作一下,你考虑下双十一当天多少次对这个表的操作?这数据库或者缓存都顶不住吧。 + +而且大家应该也有这样的体会,你下单了马上去看一些活动页面,有时候马上就有了,有时候却延迟有很久,为啥?这个速度**取决于消息队列的消费速度**,消费慢堵塞了就迟点看到呗。 + +你下个单**支付成功**你就发个消息出去,我们上面那个活动的开发人员就**监听**你的**支付成功消息**,我监听到你这个订单成功支付的消息,那我就去我活动GMV表里给你加上去,听到这里大家可能**觉得顺理成章**。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g982pptuarj30hz0cwmxs.jpg) + +**但是**我告诉大家一般消息队列的使用,我们都是有**重试机制**的,就是说我下游的业务发生异常了,我会抛出异常并且要求你**重新发一次**。 + +我这个活动这里发生错误,你要求重发肯定没问题。但是大家**仔细想一下**问题在哪里? + +是的,不止你一个人监听这个消息啊,**还有别的服务也在监听**,他们也会失败啊,他一失败他也要求重发,但是你这里其实是成功的,重发了,你的钱不就加了两次了? + +**对不对???是不是这个道理???** + +还不理解?看下面 **↓** + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g982ss9ku2j30ir0gcjs7.jpg) + +就好比上面的这样,我们的**积分系统处理失败**了,他这个系统肯定要求你**重新发送**一次这个消息对吧,积分的系统重新接收并且处理成功了,但是别人的活动,优惠券等等服务**也监听了这个消息**呀,那不就可能出现活动系统给他加GMV加两次,优惠券扣两次这种情况么? + +真实的情况其实重试是很正常的,服务的**网络抖动**,**开发人员代码Bug**,还有**数据问题**等都可能处理失败要求重发的。 + +### 嗯小伙子分析得很仔细嘛,那你在开发过程中是怎么去保证的呀? + +一般我们叫这样的处理叫接口**幂等**。 + +> **幂等(idempotent、idempotence)**是一个数学与计算机学概念,常见于抽象代数中。 +> +> 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。 +> +> 幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。 +> +> 例如,“setTrue()”函数就是一个幂等函数,**无论多次执行,其结果都是一样的.**更复杂的操作幂等保证是利用唯一交易号(流水号)实现. + +通俗了讲就是你**同样的参数调用我这个接口,调用多少次结果都是一个**,你加GMV同一个订单号你加一次是多少钱,你加N次都还是多少钱。 + +但是如果**不做幂等**,你一个订单调用多次钱不就加多次嘛,同理你退款调用多次钱也就减多次了。 + +大致处理流程如下: + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9831ucfapj309e0j5dgs.jpg) + +### 那怎么保证呢? + +一般**帅丙**我是这么回答的: + +帅气面试官您好,一般**幂等**,我会**分场景去考虑**,看是**强校验**还是**弱校验**,比如跟金钱相关的场景那就很关键呀,就做强校验,别不是很重要的场景做弱校验。 + +#### 强校验: + +比如你监听到用户支付成功的消息,你监听到了去加GMV是不是要调用加钱的接口,那加钱接口下面再调用一个加流水的接口,**两个放在一个事务,成功一起成功失败一起失败**。 + +每次消息过来都要拿着**订单号+业务场景这样的唯一标识**(比如天猫双十一活动)去流水表查,看看有没有这条流水,有就直接return不要走下面的流程了,没有就执行后面的逻辑。 + +之所以用**流水表**,是因为涉及到金钱这样的活动,有啥问题后面也可以去流水表**对账**,还有就是帮助开发人员定位问题。 + +有的小伙伴可能还是有点懵,然后**人才交流群**的小伙伴也说有些例子可以放一点伪代码,那这期开始能用代码将的我也写点。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g983n2pvocj30lp0fp417.jpg) + +**Tip**:**GItHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 上有进群方式和个人联系方式,说实话在这个群,哪怕您不说话,光看聊天记录,都能学到东西(美团王炸,三歪(Java3y),并夕夕等的大佬都在)。 + +#### 弱校验: + +这个简单,一些不重要的场景,比如给谁发短信啥的,我就把这个id+场景唯一标识作为**Redis**的key,放到缓存里面失效时间看你场景,**一定时间内**的这个消息就去Redis判断。 + +用KV就算消息丢了可能这样的场景也没关系,反正丢条**无关痛痒**的通知短信嘛(你敢说你没验证码短信丢失的情况?)。 + + +还有很多公司的弱校验用**token**啊什么的,反正花样很多,但是**重要的场景一定要强校验**,真正查问题的时候没有在磁盘持久化的数据,心里还是空空的,就像你和女朋友分开的时候的心里状态一样。(我单身的怎么知道这种感觉?猜的) + +### 你们有接触过消息顺序消费这样的场景么?你怎么保证的? + +没有!over! + +乖,你肯定不能说没有啊,就是算真的没有,你看过**敖帅丙**的文章都要说有! + +**Tip**:但是说实话**顺序消费**这里很难介绍,我上周到这周问了很多身边的师兄开发过程中这样的场景不多,我跟三歪也讨论了几次,网上更多的都是介绍binlog的同步,好像更多的场景就没了。 + +一般都是**同个业务场景下不同几个操作的消息同时过去**,本身顺序是对的,但是你发出去的时候同时发出去了,消费的时候却乱掉了,这样就有问题了。 + +我之前做电商活动也是有这样的例子,我们都知道数据量大的时候数据同步压力还是很大的,有时候数据量大的表需要同步几个亿的数据。(并不是主从同步,主从延迟大的话会有问题,可能是从数据库或者主数据库同步到**备库**) + +这种情况我们都是怼到队列里面去,然后慢慢消费的,那问题就来了呀,我们在数据库同时对一个Id的数据进行了增、改、删三个操作,但是你消息发过去消费的时候变成了改,删、增,这样数据就不对了。 + +本来一条数据应该删掉了,结果在你那却还在,这不是**出大问题**! + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g91aa7fdi0j30fl093aaa.jpg) + +两者的结果是不是完全不一样了 **↑** + +### 那你怎么解决呢? + +我简单的说一下我们使用的**RocketMQ**里面的一个简单实现吧。 + +**Tip**:为啥用**RocketMQ**举例呢,这玩意是阿里开源的,我问了下身边的朋友很多公司都有使用,所以读者大概率是这个的话我就用这个举例吧,具体的细节我后面会在**RocketMQ**和**Kafka**各自章节说到。 + +生产者消费者一般需要保证顺序消息的话,可能就是一个业务场景下的,比如订单的创建、支付、发货、收货。 + +那这些东西是不是一个订单号呢?一个订单的肯定是一个订单号的说,那简单了呀。 + +**一个topic下有多个队列**,为了保证发送有序,**RocketMQ**提供了**MessageQueueSelector**队列选择机制,他有三种实现: + +![](https://img-blog.csdnimg.cn/20181128124324615.png) + +我们可使用**Hash取模法**,让同一个订单发送到同一个队列中,再使用同步发送,只有同个订单的创建消息发送成功,再发送支付消息。这样,我们保证了发送有序。 + +**RocketMQ**的topic内的队列机制,可以保证存储满足**FIFO**(First Input First Output 简单说就是指先进先出),剩下的只需要消费者顺序消费即可。 + +**RocketMQ**仅保证顺序发送,顺序消费由消费者业务保证!!! + +这里很好理解,一个订单你发送的时候放到一个队列里面去,你同一个的订单号Hash一下是不是还是一样的结果,那肯定是一个消费者消费,那顺序是不是就保证了? + +真正的顺序消费不同的中间件都有自己的不同实现我这里就举个例子,大家思路理解下。 + +**Tip**:我写到这点的时候人才群里也有人问我,一个队列有序出去,一个消费者消费不就好了,我想说的是**消费者是多线程**的,你消息是有序的给他的,你能保证他是有序的处理的?还是一个消费成功了再发下一个**稳妥**。 + +### 你能跟我聊一下分布式事务么? + +**分布式事务**在现在遍地都是分布式部署的系统中几乎是必要的。 + +我们先聊一下啥是**事务**? + +**分布式事务**、**事务隔离级别**、**ACID**我相信大家这些东西都耳熟能详了,那什么是事务呢? + +#### 概念: + +> **一般是指要做的或所做的事情。** +> +> 在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。 +> +> 事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序用户程序的执行所引起,并用形如**begin transaction**和**end transaction**语句(或函数调用)来界定。 +> +> 事务由事务开始(**begin transaction**)和事务结束(**end transaction**)之间执行的全体操作组成。 + +#### 特性: + +> 事务是恢复和并发控制的基本单位。 +> +> 事务应该具有4个属性:**原子性、一致性、隔离性、持久性**。这四个属性通常称为**ACID特性**。 +> +> **原子性(atomicity)**:一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。 +> +> **一致性(consistency)**:事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 +> +> **隔离性(isolation)**:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 +> +> **持久性(durability)**:**持久性也称永久性(permanence)**,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。 + +那有同学还是不理解,敖丙我总结了一下就是:**事务就是一系列操作,要么同时成功,要么同时失败。**然后会从事务的 **ACID** 特性**(原子性、一致性、隔离性、持久性)展开叙述**。 + +事务就是为了保证一系列操作可以正常执行,它必须同时满足 **ACID** 特性。 + +### 那什么是分布式事务呢? + +大家可以想一下,你下单流程可能涉及到10多个环节,你下单付钱都成功了,但是你优惠券扣减失败了,积分新增失败了,前者公司会被薅羊毛,后者用户会不开心,但是**这些都在不同的服务怎么保证大家都成功呢**? + +聪明,**分布式事务**,你看你都会抢答了! + +**Tip**:真实的应用场景可能比我介绍的场景复杂数倍,我只是为了举例方便一下大家理解所以用了很简单的例子。 + +我接触和了解到的分布式事务大概分为: + +- 2pc(两段式提交) +- 3pc(三段式提交) +- TCC(Try、Confirm、Cancel) +- 最大努力通知 +- XA +- 本地消息表(ebay研发出的) +- 半消息/最终一致性(RocketMQ) + +这里我就介绍下最简单的**2pc(两段式)**,以及大家以后可能比较常用的**半消息事务**也就是**最终一致性**,目的是让大家理解下分布式事务里面**消息中间件的作用**,别的事务都大同小异,都有很多优点。 + +当然也都有**种种弊端**: + +例如**长时间锁定数据库资源**,导致系统的**响应不快**,**并发上不去**。 + +网络抖动出现**脑裂**情况,导致事物参与者,不能很好地执行协调者的指令,导致**数据不一致**。 + +**单点故障**:例如事物协调者,在某一时刻宕机,虽然可以通过选举机制产生新的Leader,但是这过程中,必然出现问题,而TCC,只有强悍的技术团队,才能支持开发,**成本太高**。 + +不多BB了,我们开始介绍这个两个事物吧。 + +**2pc(两段式提交)** : + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g98xqtg1ibj30l40in400.jpg) + +**2pc(两段式提交)**可以说是分布式事务的最开始的样子了,像极了**媒婆**,就是通过消息中间件协调多个系统,在两个系统操作事务的时候都锁定资源但是不提交事务,等两者都准备好了,告诉消息中间件,然后再分别提交事务。 + +**但是我不知道大家看到问题所在没有?** + +是的你可能已经发现了,如果A系统事务提交成功了,但是B系统在提交的时候网络波动或者各种原因提交失败了,其实还是会失败的。 + +**最终一致性**: + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g98a8jg8ipj31ds0oiaff.jpg) + +整个流程中,我们能保证是: + +- 业务主动方本地事务提交失败,业务被动方不会收到消息的投递。 + +- 只要业务主动方本地事务执行成功,那么消息服务一定会投递消息给下游的业务被动方,并最终保证业务被动方一定能成功消费该消息(消费成功或失败,即最终一定会有一个最终态)。 + +不过呢技术就是这样,**各种极端的情况我们都需要考虑**,也很难有完美的方案,所以才会有这么多的方案**三段式**、**TCC**、**最大努力通知**等等分布式事务方案,大家只需要知道为啥要做,做了有啥好处,有啥坏处,在实际开发的时候都注意下就好好了,**系统都是根据业务场景设计出来的,离开业务的技术没有意义,离开技术的业务没有底气**。 + +还是那句话:**没有最完美的系统,只有最适合的系统。** + +##面试结束 + +### 小伙子看不出来啊,还是有点东西的嘛,这几个点都回答的不错,明天你能跟我聊一下RocketMQ么? + +敖丙这章花了这么多时间,不确定他写不写的完,心疼他。好想给他**点赞**啊,**消息回溯**也在单独介绍消息中间件的时候介绍吧,这章篇幅有点长了。 + +## 总结 + +这章其实我写的时间**比之前的秒杀还要久**,因为**顺序消息这个场景**我不知道怎么讲出来大家容易懂一点,最后就参考了网上的,顺序消息的实际应用场景没别的那么广泛,跟3y也聊了好几次,最后定了这个binlog的场景。 + +总之就是**这期创作源泉有点枯竭**,这章是真的难写,包括分布式事务在实际开发过程中也是很复杂的环节,需要用的时候光是做设计都要很久,反正我的流程图长得一匹。 + +我每次都想着写得**通俗易懂**一点,这篇即使是这样我觉得还是不够通俗易懂,但是消息的场景就是这样,还有大家加我也不要一上来就问我很多扣细节的点,**自己多点思考我觉得可能帮助比我告诉你答案好很多吧**? + +## 絮叨 + +敖丙我呀,这周**有牌面**哟,上了**CSDN**的原力计划榜单,而且奖金高达50块!!! + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g98aiqhe8yj30ul01maa5.jpg) + +钱不多但是很开心,跟老妈聊到她也觉得我出息了,刚好她生日,以前我们这一家人就是那种不过生日的,不过呀今年我工作了,而且**有牌面**的我拿了的奖金就很关键,偷偷叫表弟悄悄去给她买了蛋糕和礼物🎁,嘻嘻,开心。🎂 + +### DISS + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8zza7rjn5j30o902lwes.jpg) + +这是**博客园的一个网友**在我文章下面的评论,说实话不知道**大家怎么看**的,我只想说:呵呵!傻* + +我不知道这个多年的经验到底是怎么样子的多年的经验,我本来其实不准备说出来的,因为我发现我群里很多都是还没毕业的**大学生**或者**应届生**,那就假设我读者还有很多这样的学生,他们都**没社会经验**我怕他们被这样的人给误导了。 + +我记得我在群里说过: + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g98b32sxw3j30vw0gw0vv.jpg) + +我可以80%肯定的告诉大家他这个观点就是扯淡,还有那20%我是**认同他的谦虚那个观点**,但是**谦虚难道不应该是我们对待事物最基本的态度嘛?** + +但是**面试装傻**这个观点?还有什么**不会要比你强的人**这个观点?技术人我相信也有面试官也在看我的文章,你们在面试的时候,我想遇到厉害的人巴不得招入麾下,为自己冲锋陷阵吧。 + +而且**正常面试**的时候你是1-3年的经验,面试你的基本上都是3年以上的,然后依次顺推,当然也有很多很厉害的Leader(我前东家Leader95年的,字节跳动某产品线很强的Leader96的等等)等大家工作了你就会发现有些东西**没有时间积累**是学不到的,你要做的只是一步一个脚印踏实走好就好了。 + +那些人不管年轻与否能坐在那面试你**肯定有他的原因**,那你有什么才华,你**尽情施展**,他没那个度量包容你的优秀,这样的公司不去也罢,但是技术人这样的真的很少,程序员是一群很崇拜能力的人。 + +所以**面试你有啥都秀出来,把你的才华尽情的展示出来,风就在那,你只管飞翔。** + +## 鸣谢 + +涉及到分布式事务的环节我参考了前大神同事:**鲁班**(花名)的技术分享,很感谢他的文章给的思路,还有问题的解析! + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g98uvqyf90j30xa0gstcx.jpg) + +每次写我都会在群里问大家,下次大家都在我的交流群里面也可以多给我点意见,谢谢了。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g98uw3kh4kj30vo0l0wjt.jpg) + +看到没,就很民主。(敖丙你个渣男,呸,自己不会就不写!) + +**Tip**: **GItHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 上有进群方式和个人联系方式,说实话在这个群,哪怕您不说话,光看聊天记录,都能学到东西(美团王炸,三歪(Java3y),并夕夕等的大佬都在)。 + +## 日常求赞 + +好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是**人才**。 + +我每周都会更新几篇《吊打面试官》系列和互联网常用技术栈相关的文章,非常感谢**人才**们能看到这里,如果这个文章写得还不错,觉得「敖丙」我**有点东西**的话 **求点赞👍** **求关注❤️** **求分享👥** 对暖男我来说真的 **非常有用**!!! + +创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见! + +敖丙 | 文 【原创】【转载请联系本人】 如果本篇博客有任何错误,请批评指教,不胜感激 ! + +------ + +> 《吊打面试官》系列每周持续更新,可以关注我的公众号「 **JavaFamily** 」第一时间阅读和催更(公众号比博客早一到两篇哟),本文**GitHub**上已经收录[https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily),有一线大厂面试点思维导图,欢迎Star和完善,里面也有我个人联系方式有什么问题也可以直接找我,也有人才交流群,我们一起有点东西。 + +![](https://user-gold-cdn.xitu.io/2019/11/16/16e7340546a49ea9?w=900&h=500&f=png&s=201521) \ No newline at end of file diff --git "a/docs/all/\344\272\272\347\211\251&\346\235\202\350\260\210.md" "b/docs/all/\344\272\272\347\211\251&\346\235\202\350\260\210.md" new file mode 100644 index 0000000..35c89d5 --- /dev/null +++ "b/docs/all/\344\272\272\347\211\251&\346\235\202\350\260\210.md" @@ -0,0 +1,15 @@ +[罗永浩](https://mp.weixin.qq.com/s/FUbxHFAQeUgV59Zhp7Fe0w) + +[俞敏洪](https://mp.weixin.qq.com/s/Udd3B4L-94hH9ggEtOcJAw) + +[远方是门票机酒,前方是山川大海](https://mp.weixin.qq.com/s/RasTw7_XpxZoDP5k2bpz0w) + +[门户前浪退市,从此只做“新浪”](https://mp.weixin.qq.com/s/lt_RxXC_OAl7aezCkmSyyg) + +[“小破站”二次上市 - ( ゜- ゜)つロ 乾杯~](https://mp.weixin.qq.com/s/a4CzPbx5Bim6mFzzqq0vrA) + +[我们在努力成为恒星](https://mp.weixin.qq.com/s/s2xcFud-8IJq7MpgO1QSHA) + +[苏宁张近东:三十年沉沉浮浮,零售史上不为人知的秘密](https://mp.weixin.qq.com/s/bTWTgiQInITy9Dv5BJ-Dgg) + +[陈欧,带货网红鼻祖的起起落落落落落落创业路](https://mp.weixin.qq.com/s/LyWW3tXSNMGY6MNi-HnNOg) \ No newline at end of file diff --git "a/docs/all/\345\220\204\345\234\260\344\272\222\350\201\224\347\275\221\345\205\254\345\217\270\347\233\230\347\202\271.md" "b/docs/all/\345\220\204\345\234\260\344\272\222\350\201\224\347\275\221\345\205\254\345\217\270\347\233\230\347\202\271.md" new file mode 100644 index 0000000..5a37a8e --- /dev/null +++ "b/docs/all/\345\220\204\345\234\260\344\272\222\350\201\224\347\275\221\345\205\254\345\217\270\347\233\230\347\202\271.md" @@ -0,0 +1,9 @@ + [北京有哪些牛逼的互联网公司](https://mp.weixin.qq.com/s/OcVumzBwGjX9GIkS-lGMoA) + + [武汉有哪些不错的互联网公司?](https://mp.weixin.qq.com/s/fhMkMMqTrAe-8Af6Jk4XAg) + + [杭州有哪些牛批的互联网公司](https://mp.weixin.qq.com/s/35YoYTQkehqSi_tOj1XZAg) + + [上海有哪些不错的互联网公司?](https://mp.weixin.qq.com/s/oBUoRuMvbhQJI5n2keIa1Q) + + [成都有哪些牛批的互联网公司](https://mp.weixin.qq.com/s/POFAsVr5bNz6zu-IVYVA8g) \ No newline at end of file diff --git "a/docs/all/\345\237\272\347\241\200\346\240\270\345\277\203/io.md" "b/docs/all/\345\237\272\347\241\200\346\240\270\345\277\203/io.md" new file mode 100644 index 0000000..d185a7e --- /dev/null +++ "b/docs/all/\345\237\272\347\241\200\346\240\270\345\277\203/io.md" @@ -0,0 +1,15 @@ +[迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)](https://mp.weixin.qq.com/s/EVequWGVMWV5Ki2llFzdHg) + +[原来 8 张图,就能学废 Reactor 和 Proactor](https://mp.weixin.qq.com/s/px6-YnPEUCEqYIp_YHhDzg) + +[敖丙说了这么多次 I/O,可你知道其中的原理么?](https://mp.weixin.qq.com/s/TJghsMRqkzBIsoHjGiEwFw) + +[「网络IO套路」当时就靠它追到女友](https://mp.weixin.qq.com/s/x-AZQO5uiuu5svIvScotzA) + +[IO 多路复用](https://mp.weixin.qq.com/s/CMWlDywI1zbgJSoeGTBmuw) + +[一次相亲经历,我彻底搞懂了什么叫阻塞非阻塞,同步异步](https://mp.weixin.qq.com/s/DEd0VY3dhR6B0hjQSEtB7Q) + +[让我们,从头到尾,通透I/O模型](https://mp.weixin.qq.com/s/Gb6tZl_7B3IwLYdR6Au6-w) + +[为什么网络 I/O 会被阻塞?](https://mp.weixin.qq.com/s/RTJRzM1R7t344w5whESYmg) \ No newline at end of file diff --git "a/docs/all/\345\237\272\347\241\200\346\240\270\345\277\203/java\345\237\272\347\241\200\347\237\245\350\257\206.md" "b/docs/all/\345\237\272\347\241\200\346\240\270\345\277\203/java\345\237\272\347\241\200\347\237\245\350\257\206.md" new file mode 100644 index 0000000..177445f --- /dev/null +++ "b/docs/all/\345\237\272\347\241\200\346\240\270\345\277\203/java\345\237\272\347\241\200\347\237\245\350\257\206.md" @@ -0,0 +1,10 @@ + +[Java基础面试16问](https://mp.weixin.qq.com/s/-xFSHf7Gz3FUcafTJUIGWQ) + +[零拷贝](https://mp.weixin.qq.com/s/FgBCop2zFfcX5ZszE0NoCQ) + +[面试官:详细说说你对序列化的理解](https://mp.weixin.qq.com/s/nzFBPuUGSSIGZaBbE-FkTg) + +[同事:你能跟我聊聊class文件么?](https://mp.weixin.qq.com/s/QgC65Ld5UCXo11xXgQ_6UA) + +[JAVA代码编译流程是怎样的?](https://mp.weixin.qq.com/s/q4q-jr-6NDXxkXuC2ZegJQ) \ No newline at end of file diff --git "a/docs/all/\345\237\272\347\241\200\346\240\270\345\277\203/linux.md" "b/docs/all/\345\237\272\347\241\200\346\240\270\345\277\203/linux.md" new file mode 100644 index 0000000..b641474 --- /dev/null +++ "b/docs/all/\345\237\272\347\241\200\346\240\270\345\277\203/linux.md" @@ -0,0 +1,13 @@ +[52图初探Linux通用知识](https://mp.weixin.qq.com/s/dP8AJbvGgvYIXDy3zeXCRg) + +[大厂面试Linux就这5个问题](https://mp.weixin.qq.com/s/24vBHgtw5efC9V9yYqknNg) + +[Linux 内核 vs Windows 内核](https://mp.weixin.qq.com/s/7iQ5jO_qfYbwKdM21qywYg) + +[学习linux命令,看这篇2w多字的命令详解就够了](https://mp.weixin.qq.com/s/7bSwKiPmtJbs7FtRWZZqpA) + +[Linux IO 模型](https://mp.weixin.qq.com/s/TbIPlBtkK_zCyt54cCX8dw) + +[Linux命令](https://mp.weixin.qq.com/s/T6try9YIKh8gTLG2lyKKOQ) + +[3万字Linux总结](https://mp.weixin.qq.com/s/kG1g7ghTkOMzyEoZ6tQMHQ) \ No newline at end of file diff --git "a/docs/all/\345\237\272\347\241\200\346\240\270\345\277\203/\350\256\241\347\256\227\346\234\272\346\223\215\344\275\234\347\263\273\347\273\237.md" "b/docs/all/\345\237\272\347\241\200\346\240\270\345\277\203/\350\256\241\347\256\227\346\234\272\346\223\215\344\275\234\347\263\273\347\273\237.md" new file mode 100644 index 0000000..42209f8 --- /dev/null +++ "b/docs/all/\345\237\272\347\241\200\346\240\270\345\277\203/\350\256\241\347\256\227\346\234\272\346\223\215\344\275\234\347\263\273\347\273\237.md" @@ -0,0 +1,30 @@ + +[图解 | 计算机文件系统](https://mp.weixin.qq.com/s/j2msue1Hjcwd9z1U2p0TDQ) + +[浏览器的秘密藏在这31张图里](https://mp.weixin.qq.com/s/11MRrxmiyZybTUbjRDRubQ) + +[带宽、延时、吞吐率、PPS 这些都是啥?](https://mp.weixin.qq.com/s/eWHQ8co0jF_a26Xz8ZQLjg) + +[进程和线程基础知识全家桶,30 张图一套带走](https://mp.weixin.qq.com/s/FaHKGRI69TqDj0AJtNiVoA) + +[20 张图揭开内存管理的迷雾](https://mp.weixin.qq.com/s/oexktPKDULqcZQeplrFunQ) + +[看完这篇操作系统,和面试官扯皮就没问题了。](https://mp.weixin.qq.com/s/59xyIj1nIFp2TtkKFYnR-g) + +[计算机内存管理基础知识](https://mp.weixin.qq.com/s/OGRMAJeDw8wuO7UW5PjoVQ) + +[用动图的方式,理解 CPU 缓存一致性协议!](https://mp.weixin.qq.com/s/cyI2VAP4dqkStbsNMDWhDQ) + +[进程间通信](https://mp.weixin.qq.com/s/mblyh6XrLj1bCwL0Evs-Vg) + +[进程之间究竟有哪些通信方式?](https://mp.weixin.qq.com/s/CGqy0j5WvarN6mTmYB8vSA) + +[键盘敲入 A 字母时,操作系统期间发生了什么...](https://mp.weixin.qq.com/s/fKHOf_CzG8HYXHlg54V_rg) + +[一口气搞懂「文件系统」,就靠这 25 张图了](https://mp.weixin.qq.com/s/UT2JrfpkA5OUC9fJJ_MirQ) + +[10 张图打开 CPU 缓存一致性的大门](https://mp.weixin.qq.com/s/hjywA21UrvZSzdgvAr6fQA) + +[2.5w字 + 36 张图+一周时间:爆肝操作系统面试题](https://mp.weixin.qq.com/s/ws6bgcv6dKIIJDwYYliMAg) + +[计算机时间到底是怎么来的?](https://mp.weixin.qq.com/s/uM1ZNT8UwfvhqoscK8FJiQ) \ No newline at end of file diff --git "a/docs/all/\345\244\247\346\225\260\346\215\256/Flink.md" "b/docs/all/\345\244\247\346\225\260\346\215\256/Flink.md" new file mode 100644 index 0000000..4134421 --- /dev/null +++ "b/docs/all/\345\244\247\346\225\260\346\215\256/Flink.md" @@ -0,0 +1,9 @@ + + + [Flink入门教程](https://mp.weixin.qq.com/s/xa2iGrmyoXq3FtZeU9GU-w) + + [Flink的CheckPoint机制](https://mp.weixin.qq.com/s/-OY0VGDWUoOMgKg-xKjZRQ) + + [Flink背压](https://mp.weixin.qq.com/s/Ttm9lCYxu7Wx0oE-LsjRlw) + + [Flink入门](https://mp.weixin.qq.com/s/Ey-oWpGO_QDo4DixiccVGg) \ No newline at end of file diff --git "a/docs/all/\345\255\246\344\271\240\350\267\257\347\272\277.md" "b/docs/all/\345\255\246\344\271\240\350\267\257\347\272\277.md" new file mode 100644 index 0000000..e0d17e9 --- /dev/null +++ "b/docs/all/\345\255\246\344\271\240\350\267\257\347\272\277.md" @@ -0,0 +1,11 @@ + +[后端技术学些啥](https://mp.weixin.qq.com/s/co6ZiALBCUHxc-8SpcKxPw) + + [从毕业到技术专家我做了啥](https://mp.weixin.qq.com/s/mYfVAo8-jkPFwhbqDZyQzw) + +[秒杀系统设计](https://mp.weixin.qq.com/s/z2S1EjWQDwKm5Ud36IenNw) + +[全栈秒杀系统设计](https://mp.weixin.qq.com/s/RRHN8t017ofOvb4nvlCStg) + + [秒杀系统2.0](https://mp.weixin.qq.com/s/KWb3POodisbOEsQVblsoGw) + \ No newline at end of file diff --git "a/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\345\244\232\347\272\277\347\250\213\345\237\272\347\241\200\347\237\245\350\257\206.md" "b/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\345\244\232\347\272\277\347\250\213\345\237\272\347\241\200\347\237\245\350\257\206.md" new file mode 100644 index 0000000..9242adc --- /dev/null +++ "b/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\345\244\232\347\272\277\347\250\213\345\237\272\347\241\200\347\237\245\350\257\206.md" @@ -0,0 +1,9 @@ +[可重入锁](https://mp.weixin.qq.com/s/GDno-X1N8zc98h9MZ8_KoA) + +[(并发问题的根源到底是什么?)](https://mp.weixin.qq.com/s/TsENp5ygFdE0_REgz5Y3Ew) + +[敖丙稳住了多线程翻车的现场](https://mp.weixin.qq.com/s/g_eWT05_38AURchMIvNSnA) + +[2w字 + 40张图带你参透并发编程!](https://mp.weixin.qq.com/s/NZAJWBiFvGzCZXjr0KC9Dw) + +[图解Java中那18 把锁](https://mp.weixin.qq.com/s/XCR93HSm_E0c3KDcmZk3cA) \ No newline at end of file diff --git "a/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\345\244\232\347\272\277\347\250\213\347\273\217\345\205\270\351\235\242\350\257\225\351\242\230.md" "b/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\345\244\232\347\272\277\347\250\213\347\273\217\345\205\270\351\235\242\350\257\225\351\242\230.md" new file mode 100644 index 0000000..7cc59f9 --- /dev/null +++ "b/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\345\244\232\347\272\277\347\250\213\347\273\217\345\205\270\351\235\242\350\257\225\351\242\230.md" @@ -0,0 +1,5 @@ + [【面试】如果把线程当作一个人来对待,所有问题都瞬间明白了](https://mp.weixin.qq.com/s/PrUa0tFyu3UZllP2FRDyVA) + + [Java 并发进阶常见面试题总结](https://mp.weixin.qq.com/s/cdHfTTvMpH60SwG2bjTMBw) + + [如果你这样回答“什么是线程安全”,面试官都会对你刮目相看(建议珍藏)](https://mp.weixin.qq.com/s/WDeewsvWUEBIuabvVVhweA) \ No newline at end of file diff --git "a/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\345\244\232\347\272\277\347\250\213\351\224\201\346\234\272\345\210\266.md" "b/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\345\244\232\347\272\277\347\250\213\351\224\201\346\234\272\345\210\266.md" new file mode 100644 index 0000000..26607b8 --- /dev/null +++ "b/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\345\244\232\347\272\277\347\250\213\351\224\201\346\234\272\345\210\266.md" @@ -0,0 +1,3 @@ + [乐观锁、悲观锁](https://mp.weixin.qq.com/s/WtAdXvaRuBZ-SXayIKu1mA) + + [互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景](https://mp.weixin.qq.com/s/6QrQ0TZVqSQq26Rms0_mvA) \ No newline at end of file diff --git "a/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\345\270\270\350\247\201\345\205\263\351\224\256\345\255\227.md" "b/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\345\270\270\350\247\201\345\205\263\351\224\256\345\255\227.md" new file mode 100644 index 0000000..4681c38 --- /dev/null +++ "b/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\345\270\270\350\247\201\345\205\263\351\224\256\345\255\227.md" @@ -0,0 +1,5 @@ + [死磕Synchronized源码](https://mp.weixin.qq.com/s/2ka1cDTRyjsAGk_-ii4ngw) + + [当Synchronized遇到这玩意儿,有个大坑,要注意!](https://mp.weixin.qq.com/s/0oUXYFxpsi6Q9MfR5NKtLQ) + + [面试官想到,一个Volatile,敖丙都能吹半小时](https://mp.weixin.qq.com/s/Oa3tcfAFO9IgsbE22C5TEg) \ No newline at end of file diff --git "a/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\345\270\270\350\247\201\347\232\204JUC\345\267\245\345\205\267\347\261\273.md" "b/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\345\270\270\350\247\201\347\232\204JUC\345\267\245\345\205\267\347\261\273.md" new file mode 100644 index 0000000..8516d06 --- /dev/null +++ "b/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\345\270\270\350\247\201\347\232\204JUC\345\267\245\345\205\267\347\261\273.md" @@ -0,0 +1,13 @@ +[AQS](https://mp.weixin.qq.com/s/hB5ncpe7_tVovQj1sNlDRA) + +[我画了35张图就是为了让你深入 AQS](https://mp.weixin.qq.com/s/trsjgUFRrz40Simq2VKxTA) + +[1.5w字,30图带你彻底掌握 AQS!](https://mp.weixin.qq.com/s/iNz6sTen2CSOdLE0j7qu9A) + +[TheadLocal 引起的内存泄露故障分析](https://mp.weixin.qq.com/s/Gf4MiHPz8DynY80UmwH04Q) + +[终于有人把 CountDownLatch,CyclicBarrier,Semaphore 说明白了!](https://mp.weixin.qq.com/s/TDw7GnzDw5FK3RWwkIzzZA) + +[Java面试必问:ThreadLocal](https://mp.weixin.qq.com/s/LzkZXPtLW2dqPoz3kh3pBQ) + +[StampedLock](https://mp.weixin.qq.com/s/gjfeayR36vDAr3FAVd4w4g) \ No newline at end of file diff --git "a/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\347\272\277\347\250\213\346\261\240\347\237\245\350\257\206\347\202\271.md" "b/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\347\272\277\347\250\213\346\261\240\347\237\245\350\257\206\347\202\271.md" new file mode 100644 index 0000000..9385e08 --- /dev/null +++ "b/docs/all/\345\271\266\345\217\221\344\270\216\345\244\232\347\272\277\347\250\213/\347\272\277\347\250\213\346\261\240\347\237\245\350\257\206\347\202\271.md" @@ -0,0 +1,3 @@ +[记一次线程池引发的故障 排查下来是三歪的锅](https://mp.weixin.qq.com/s/TQGtNpPiTypeKd5kUnfxEw) + +[深入线程池,连环17问](https://mp.weixin.qq.com/s/NDOx94yY06OnHjrYq2lVYw) \ No newline at end of file diff --git "a/docs/all/\345\274\200\346\272\220/\345\274\200\346\272\220\346\241\206\346\236\266.md" "b/docs/all/\345\274\200\346\272\220/\345\274\200\346\272\220\346\241\206\346\236\266.md" new file mode 100644 index 0000000..b379d34 --- /dev/null +++ "b/docs/all/\345\274\200\346\272\220/\345\274\200\346\272\220\346\241\206\346\236\266.md" @@ -0,0 +1,3 @@ +[阿里巴巴开源限流系统 Sentinel 全解析](https://mp.weixin.qq.com/s/NgS9tL4IVwGZrssz7fURpA) + +[支付宝的架构到底有多牛逼?还没看完我就跪了!](https://mp.weixin.qq.com/s/d4K9hJHzZ5IAd2aarsdQrw) \ No newline at end of file diff --git "a/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/RPC/Dubbo.md" "b/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/RPC/Dubbo.md" new file mode 100644 index 0000000..2fb599b --- /dev/null +++ "b/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/RPC/Dubbo.md" @@ -0,0 +1,15 @@ +[Dubbo基础](https://mp.weixin.qq.com/s/FPbu8rFOHyTGROIV8XJeTA) + +[Dubbo的服务暴露过程](https://mp.weixin.qq.com/s/ISiN06QynyE2pPtX3cGQ9w) + +[Dubbo的服务引用过程](https://mp.weixin.qq.com/s/9oDy1OPcfDaEhKD4eNUdOA) + +[Dubbo服务调用过程](https://mp.weixin.qq.com/s/oNR9v_ID2oAlEvDI93hRcw) + +[Dubbo的SPI机制是啥?](https://mp.weixin.qq.com/s/gwWOsdQGEN0t2GJVMQQexw) + +[Dubbo集群容错负载均衡](https://mp.weixin.qq.com/s/-IkHNAM4B0R_j50LkQunig) + +[Dubbo面试题](https://mp.weixin.qq.com/s/FwL6qArqYc2ENymXk1eZFQ) + +[1w+字的 Dubbo 面试题/知识点总结!(2021 最新版)](https://mp.weixin.qq.com/s/2qSA6aJn6KRXrATVE44k0w) \ No newline at end of file diff --git "a/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/RPC/Netty.md" "b/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/RPC/Netty.md" new file mode 100644 index 0000000..54e4974 --- /dev/null +++ "b/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/RPC/Netty.md" @@ -0,0 +1,3 @@ + [高性能NIO框架-Netty](https://mp.weixin.qq.com/s/I9PGsWo7-ykGf2diKklGtA) + + [Netty常见面试题总结](https://mp.weixin.qq.com/s/eJ-dAtOYsxylGL7pBv7VVA) \ No newline at end of file diff --git "a/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/RPC/RPC\345\256\236\350\267\265.md" "b/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/RPC/RPC\345\256\236\350\267\265.md" new file mode 100644 index 0000000..3a5f107 --- /dev/null +++ "b/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/RPC/RPC\345\256\236\350\267\265.md" @@ -0,0 +1,3 @@ +[敖丙RPC的超时设置,一不小心搞了线上事故](https://mp.weixin.qq.com/s/pkWkD1VhMxhZPRrybLcQjA) + + [敖丙找出Dubbo源码BUG,三歪夸了我一天](https://mp.weixin.qq.com/s/_5YMfQK1tmYbmRMldBPlaQ) \ No newline at end of file diff --git "a/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/SpringCloud.md" "b/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/SpringCloud.md" new file mode 100644 index 0000000..3a0ab76 --- /dev/null +++ "b/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/SpringCloud.md" @@ -0,0 +1,3 @@ + [外行人都能看懂的SpringCloud,错过了血亏!](https://mp.weixin.qq.com/s/MJrahcDXwxgDr5zBdO3XWw) + +[20000 字的 Spring Cloud 总结](https://mp.weixin.qq.com/s/pGSx8eKFH3YnUos3SM2ITw) \ No newline at end of file diff --git "a/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/Zookeeper.md" "b/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/Zookeeper.md" new file mode 100644 index 0000000..8e45aea --- /dev/null +++ "b/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/Zookeeper.md" @@ -0,0 +1,5 @@ + [什么是Zookeeper](https://mp.weixin.qq.com/s/gphDLJMO3QcRoN3zkco4EA) + + [分布式锁之Zookeeper](https://mp.weixin.qq.com/s/ZqQHWLfVD1Rz1agmH3LWrg) + [Zookeeper之ZAB协议](https://mp.weixin.qq.com/s/k0zAExTvMsrugCaNJxs7hQ) + [Zookeeper夺命连环9问](https://mp.weixin.qq.com/s/YawG0GqznDHaiHXZuTsCjA) \ No newline at end of file diff --git "a/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/spring.md" "b/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/spring.md" new file mode 100644 index 0000000..928ac14 --- /dev/null +++ "b/docs/all/\345\277\205\344\274\232\346\241\206\346\236\266/spring.md" @@ -0,0 +1,31 @@ +[一分钟带你玩转 Spring IoC](https://mp.weixin.qq.com/s/WpRSitDqtgOuU9GnI1-HDw) + +[AOP 面试造火箭事件始末](https://mp.weixin.qq.com/s/NXZp8a3n-ssnC6Y1Hy9lzw) + +[SpringAOP面试题](https://mp.weixin.qq.com/s/qlAvW10TRNVak1oJyHO39Q) + +[Spring事务传播行为](https://mp.weixin.qq.com/s/IglQITCkmx7Lpz60QOW7HA) + +[什么是 Spring 循环依赖?](https://mp.weixin.qq.com/s/5mwkgJB7GyLdKDgzijyvXw) + +[Spring常见问题总结(补充版)](https://mp.weixin.qq.com/s/wcK2qsZxKDJTLIGqEIyaNg) + +[15个经典的Spring面试常见问题](https://mp.weixin.qq.com/s/OMlwHHnGcN7iZ8lerUvW7w) + +[敖丙说精通字符串,面试官竟然问Java中的String有没有长度限制!](https://mp.weixin.qq.com/s/6YhpbuhdTX9BM_OimoW8MA) + +[Spring中的循环依赖](https://mp.weixin.qq.com/s/kS0K5P4FdF3v-fiIjGIvvQ) + +[Spring容器启动流程](https://mp.weixin.qq.com/s/ut3mRwhfqXNjrBtTmI0oWg) + +[Spring循环依赖](https://mp.weixin.qq.com/s/u29hMRkfTj_1RHNSukDtEw) + +[我是如何在面试别人Spring事务时“套路”对方的](https://mp.weixin.qq.com/s/JcHt99SAbNIlY063rmylpA) + +[SpringIOC 面试题(下)](https://mp.weixin.qq.com/s/4z9V4-k2Whqiz69gXy5iMQ) + +[SpringIOC 面试题(上)](https://mp.weixin.qq.com/s/SH4laewpIsio66MUJFLTyg) + +[深入浅出Spring架构设计](https://mp.weixin.qq.com/s/wXkgudY0ThIRLFxUmohJog) + +[Spring](https://mp.weixin.qq.com/s/liWn2Dn91cmuiqHSxVO_fA) \ No newline at end of file diff --git "a/docs/all/\346\220\234\347\264\242\345\274\225\346\223\216/es.md" "b/docs/all/\346\220\234\347\264\242\345\274\225\346\223\216/es.md" new file mode 100644 index 0000000..6d6967e --- /dev/null +++ "b/docs/all/\346\220\234\347\264\242\345\274\225\346\223\216/es.md" @@ -0,0 +1,3 @@ +[Elasticsearch入门](https://mp.weixin.qq.com/s/AjGiMikSVgCk6INyf-m8hA) + +[记一次害敖丙差点丢工作的线上P0事故](https://mp.weixin.qq.com/s/F8BsSg6R9LHxKt-gbH_JKQ) \ No newline at end of file diff --git "a/docs/all/\346\236\266\346\236\204\346\274\224\350\277\233\344\271\213\350\267\257/\344\272\222\350\201\224\347\275\221\346\236\266\346\236\204\344\271\213\350\267\257.md" "b/docs/all/\346\236\266\346\236\204\346\274\224\350\277\233\344\271\213\350\267\257/\344\272\222\350\201\224\347\275\221\346\236\266\346\236\204\344\271\213\350\267\257.md" new file mode 100644 index 0000000..276f235 --- /dev/null +++ "b/docs/all/\346\236\266\346\236\204\346\274\224\350\277\233\344\271\213\350\267\257/\344\272\222\350\201\224\347\275\221\346\236\266\346\236\204\344\271\213\350\267\257.md" @@ -0,0 +1 @@ +[我难道天生就是个架构师?这可是100k并发啊](https://mp.weixin.qq.com/s/Pi_fHXhSf17l8q5CZ_U5UA) \ No newline at end of file diff --git "a/docs/all/\346\236\266\346\236\204\346\274\224\350\277\233\344\271\213\350\267\257/\345\210\206\345\270\203\345\274\217&\345\210\206\345\270\203\345\274\217\344\272\213\345\212\241.md" "b/docs/all/\346\236\266\346\236\204\346\274\224\350\277\233\344\271\213\350\267\257/\345\210\206\345\270\203\345\274\217&\345\210\206\345\270\203\345\274\217\344\272\213\345\212\241.md" new file mode 100644 index 0000000..66f76e3 --- /dev/null +++ "b/docs/all/\346\236\266\346\236\204\346\274\224\350\277\233\344\271\213\350\267\257/\345\210\206\345\270\203\345\274\217&\345\210\206\345\270\203\345\274\217\344\272\213\345\212\241.md" @@ -0,0 +1,9 @@ + [分布式架构由来](https://mp.weixin.qq.com/s/uv9xYgYrHWqM5acXQYFegA) + + [分布式事务](https://mp.weixin.qq.com/s/XknegP66mnYboiBx556Kzw) + + [1.4 w字,25 张图让你彻底掌握分布式事务原理](https://mp.weixin.qq.com/s/ujRRtdLOeKEHsHrtDRNXGA) + + [什么是分布式配置中心?](https://mp.weixin.qq.com/s/NY7_z7SpiHy7IMJglPUoMw) + + [几种大厂分布式ID设计方案](https://mp.weixin.qq.com/s/pT2m_xqzcJkpV3Ql0o6dMw) \ No newline at end of file diff --git "a/docs/all/\346\236\266\346\236\204\346\274\224\350\277\233\344\271\213\350\267\257/\346\200\216\344\271\210\350\256\276\350\256\241\344\270\200\344\270\252\350\203\275\351\241\266\344\275\217\345\217\214\345\215\201\344\270\200\347\232\204\347\263\273\347\273\237.md" "b/docs/all/\346\236\266\346\236\204\346\274\224\350\277\233\344\271\213\350\267\257/\346\200\216\344\271\210\350\256\276\350\256\241\344\270\200\344\270\252\350\203\275\351\241\266\344\275\217\345\217\214\345\215\201\344\270\200\347\232\204\347\263\273\347\273\237.md" new file mode 100644 index 0000000..ffdad0a --- /dev/null +++ "b/docs/all/\346\236\266\346\236\204\346\274\224\350\277\233\344\271\213\350\267\257/\346\200\216\344\271\210\350\256\276\350\256\241\344\270\200\344\270\252\350\203\275\351\241\266\344\275\217\345\217\214\345\215\201\344\270\200\347\232\204\347\263\273\347\273\237.md" @@ -0,0 +1,3 @@ +[压测都做些什么?](https://mp.weixin.qq.com/s/RzJkQuMAszkC8jw8hF-k1w) + +[千万级、亿级流量怎么处理?](https://mp.weixin.qq.com/s/CxqnaB9cUemvCcWkw2nUcw) \ No newline at end of file diff --git "a/docs/all/\347\240\224\345\217\221\350\247\204\350\214\203/\345\244\247\345\216\202\346\212\200\346\234\257\347\240\224\345\217\221\350\247\204\350\214\203.md" "b/docs/all/\347\240\224\345\217\221\350\247\204\350\214\203/\345\244\247\345\216\202\346\212\200\346\234\257\347\240\224\345\217\221\350\247\204\350\214\203.md" new file mode 100644 index 0000000..8053e83 --- /dev/null +++ "b/docs/all/\347\240\224\345\217\221\350\247\204\350\214\203/\345\244\247\345\216\202\346\212\200\346\234\257\347\240\224\345\217\221\350\247\204\350\214\203.md" @@ -0,0 +1,5 @@ + [大厂是如何设计接口的?](https://mp.weixin.qq.com/s/ROMzeipOwWZWNrVGdVwisg) + + [不要再在对外接口中使用枚举类型了!](https://mp.weixin.qq.com/s/ynYi_dMlP2Y9GnQXzQxa3Q) + + [谁在用isXxx形式定义布尔类型年后不用来了](https://mp.weixin.qq.com/s/bhCMqJnms3Q84kVvh_cd4g) \ No newline at end of file diff --git "a/docs/all/\347\240\224\345\217\221\350\247\204\350\214\203/\345\274\200\346\272\220\346\274\217\346\264\236.md" "b/docs/all/\347\240\224\345\217\221\350\247\204\350\214\203/\345\274\200\346\272\220\346\274\217\346\264\236.md" new file mode 100644 index 0000000..0f0437c --- /dev/null +++ "b/docs/all/\347\240\224\345\217\221\350\247\204\350\214\203/\345\274\200\346\272\220\346\274\217\346\264\236.md" @@ -0,0 +1 @@ +[fastjson到底做错了什么?为什么会被频繁爆出漏洞?](https://mp.weixin.qq.com/s/iV9DbX3LhbBkNiaKLL7PxA) \ No newline at end of file diff --git "a/docs/all/\347\240\224\345\217\221\350\247\204\350\214\203/\351\230\277\351\207\214\345\267\264\345\267\264\346\212\200\346\234\257\350\247\204\350\214\203.md" "b/docs/all/\347\240\224\345\217\221\350\247\204\350\214\203/\351\230\277\351\207\214\345\267\264\345\267\264\346\212\200\346\234\257\350\247\204\350\214\203.md" new file mode 100644 index 0000000..68a2ab8 --- /dev/null +++ "b/docs/all/\347\240\224\345\217\221\350\247\204\350\214\203/\351\230\277\351\207\214\345\267\264\345\267\264\346\212\200\346\234\257\350\247\204\350\214\203.md" @@ -0,0 +1,11 @@ + [为什么阿里巴巴禁止使用Apache Beanutils进行属性的copy?](https://mp.weixin.qq.com/s/3XX-Lu1KrKEc3IfB9Iqz5A) + + [为什么阿里巴巴禁止开发人员使用isSuccess作为变量名?](https://mp.weixin.qq.com/s/xvTCaBXkRc7e6dGCUJxRPQ) + + [为什么阿里巴巴要求谨慎使用ArrayList中的subList方法](https://mp.weixin.qq.com/s/9y89Hy-YnpPjXpcmXpy_GQ) + + [为什么阿里巴巴不建议在for循环中使用"+"进行字符串拼接](https://mp.weixin.qq.com/s/fLUf8V0Qahe8piNrRp1UVQ) + + [为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较?](https://mp.weixin.qq.com/s/JduY7OAeywOlVLbLiX3Xnw) + + [为什么阿里巴巴强制要求使用包装类型定义属性?](https://mp.weixin.qq.com/s/O_jCxZWtTTkFZ9FlaZgOCg) \ No newline at end of file diff --git "a/docs/all/\347\247\221\346\231\256.md" "b/docs/all/\347\247\221\346\231\256.md" new file mode 100644 index 0000000..83c9bf2 --- /dev/null +++ "b/docs/all/\347\247\221\346\231\256.md" @@ -0,0 +1,5 @@ + [你知道程序是怎么处理时区问题的么?](https://mp.weixin.qq.com/s/WszidUcoV_cYeDf26EkAcA) + + [聊一聊理财](https://mp.weixin.qq.com/s/BMttkFZsKu0qmxSz-MqAlw) + + [Swagger 官方 Starter 配上这个增强方案是真的香!](https://mp.weixin.qq.com/s/13ls90r8hWbzW4J1kuVzrQ) \ No newline at end of file diff --git "a/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\346\210\220\351\225\277\347\273\217\345\216\206.md" "b/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\346\210\220\351\225\277\347\273\217\345\216\206.md" new file mode 100644 index 0000000..7588a43 --- /dev/null +++ "b/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\346\210\220\351\225\277\347\273\217\345\216\206.md" @@ -0,0 +1,19 @@ + [嗯,读书就是我们唯一的出路](https://mp.weixin.qq.com/s/IM6ksfs4bWnOljB0EbsyxQ) + + [大学个人经历 | 如诗的青春](https://mp.weixin.qq.com/s/FJC2uEg9o56dqCPijgizFA) + + [人生如水,由溪入海](https://mp.weixin.qq.com/s/417im7XPERSMzGiHnNaiEQ) + + [2019年个人经历](https://mp.weixin.qq.com/s/66ZDj60KPEfohHg0g8Cggw) + + [昂,我24岁了](https://mp.weixin.qq.com/s/_HCBjYI9bcNy-zBHu58l7g) + + [24岁我全款买了人生的第一辆车](https://mp.weixin.qq.com/s/aK6ASJO6G1q4mY3TUShCqQ) + + [2020个人经历](https://mp.weixin.qq.com/s/H88XxwF3GCwc_cL4rGKu8g) + + [我的青春结束了](https://mp.weixin.qq.com/s/matyTWXuZ_qs9hGfAl9_NQ) + + [鲜衣怒马少年时,一日看尽长安花](https://mp.weixin.qq.com/s/oY3CxB2Dk82mBs4W77Zrcw) + + [敖丙离职了](https://mp.weixin.qq.com/s/WPY13Px6OeGssBkZVOL7Aw) \ No newline at end of file diff --git "a/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\347\224\237\346\264\273\350\266\243\344\272\213.md" "b/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\347\224\237\346\264\273\350\266\243\344\272\213.md" new file mode 100644 index 0000000..ad6e4dc --- /dev/null +++ "b/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\347\224\237\346\264\273\350\266\243\344\272\213.md" @@ -0,0 +1,17 @@ + [敖丙的第一次相亲,还没开始,就已经结束了。](https://mp.weixin.qq.com/s/mLLbpnI1pVnlUzL7H3EuNQ) + + [我第一次相亲就被大三岁的姐姐看上](https://mp.weixin.qq.com/s/bM7xtVDwAA82d42UrhEx2g) + + [敖丙参加了一场温州游资的婚礼](https://mp.weixin.qq.com/s/sM3hJe5z3_pCH-8GWs0iOA) + + [敖丙枯燥无味的假期,一直在吃狗粮](https://mp.weixin.qq.com/s/1jQnRCXdrUQzZInQmzABvA) + + [请照顾好自己,周末病魔差点一套带走我。](https://mp.weixin.qq.com/s/5C4UjGtHoZVu8uI4yP5wRg) + + [曾经我们并肩作战,敬未来一杯,敬资本一杯](https://mp.weixin.qq.com/s/s9HPYYi9VfYMt7UGCTqWVw) + + [敖丙我写了一个新手都写不出的低级bug,被骂惨了。](https://mp.weixin.qq.com/s/yB9s771gDz6oMKZsUnJuyg) + + [程序员删库跑路,判刑十个月](https://mp.weixin.qq.com/s/xmhMU17fSCd9aYBkozNVUg) + + [我是没想到老家的出租车师傅连我都敢宰,我给他上了一课](https://mp.weixin.qq.com/s/Djlxil-pt6Kn5SDqt1A_5A) \ No newline at end of file diff --git "a/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\350\201\214\345\234\272\347\273\217\345\216\206.md" "b/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\350\201\214\345\234\272\347\273\217\345\216\206.md" new file mode 100644 index 0000000..51e04f4 --- /dev/null +++ "b/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\350\201\214\345\234\272\347\273\217\345\216\206.md" @@ -0,0 +1,21 @@ + [蘑菇街裁员说明 海阔凭鱼跃,天高任鸟飞](https://mp.weixin.qq.com/s/JB6CT4SfOg8e9lhkiWwZNg) + + [入职一周年,我眼中的蘑菇街](https://mp.weixin.qq.com/s/LjFfDwT62usphaock5pU8Q) + + [在美女如云的蘑菇街工作是怎样的体验?](https://mp.weixin.qq.com/s/_zK6ovSynkcmZ-iwzFHHMA) + + [【互联网寒冬】经历裁员,拿20W被迫去大厂](https://mp.weixin.qq.com/s/0WurpFJlZQtjjdleGPK0Cw) + + [再见了,蘑菇街最帅的男人](https://mp.weixin.qq.com/s/dzxUtvI1m9uO1OpkkcDq0g) + + [敖丙用20行代码拿了比赛冠军](https://mp.weixin.qq.com/s/br7Ak88kA5GkZ26hxwKUiw) + + [敖丙我参加了蘑菇街年会,流了一晚上鼻血](https://mp.weixin.qq.com/s/fkByjmdaqdw0TELDzdm5mQ) + + [时间刺客--敖丙](https://mp.weixin.qq.com/s/wlfurOBpxeaf6iy7CtHRlA) + + [送别了好友,敖丙跟你聊聊【离职】这个话题](https://mp.weixin.qq.com/s/pHcgkDvKfElRIVZGd4Kzng) + + [再见,三歪](https://mp.weixin.qq.com/s/7t2-L7ZYAYXrp0CTbYpAUg) + + [阿里入职培训](https://mp.weixin.qq.com/s/MijvXeWtsJOJIzxcpJdRhA) \ No newline at end of file diff --git "a/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\350\207\252\345\252\222\344\275\223\347\273\217\345\216\206.md" "b/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\350\207\252\345\252\222\344\275\223\347\273\217\345\216\206.md" new file mode 100644 index 0000000..06afde4 --- /dev/null +++ "b/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\350\207\252\345\252\222\344\275\223\347\273\217\345\216\206.md" @@ -0,0 +1,11 @@ + [写作一个月的感受](https://mp.weixin.qq.com/s/g6SQ6nqjKrqjlzaGuLHpYA) + + [我知道互联网不相信眼泪,但是敖丙今天还是没忍住](https://mp.weixin.qq.com/s/UC6NsEFlNfqMdEkzvHxKRA) + + [50天全网2W粉,感谢坚持!](https://mp.weixin.qq.com/s/_5tVdE9oFPBUK3Z0gKH26g) + + [华为现场和百万粉博主线下面基,敖丙c位出道](https://mp.weixin.qq.com/s/SBnev4kAzsqpA9l-unt4dw) + + [敖丙第一次见到一个亿...](https://mp.weixin.qq.com/s/KB7Gkdu4S13mQnlHGAUHfQ) + + [敖丙入职腾讯了](https://mp.weixin.qq.com/s/LvgziYKKE7lLIxag1v3R1A) diff --git "a/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\350\257\273\350\200\205\347\273\217\345\216\206.md" "b/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\350\257\273\350\200\205\347\273\217\345\216\206.md" new file mode 100644 index 0000000..a29c04d --- /dev/null +++ "b/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\350\257\273\350\200\205\347\273\217\345\216\206.md" @@ -0,0 +1,9 @@ + [从网瘾少年逆袭拿到微软 、字节等offer(上)](https://mp.weixin.qq.com/s/irjvJkIRknxasM0D1v3FOw) + + [从网瘾少年逆袭拿到微软 、字节等offer(下)](https://mp.weixin.qq.com/s/CTpY8oxxjdvleTotjrpAsA) + + [我新浪学妹的北京日常](https://mp.weixin.qq.com/s/oSKKUOG-JO0PLMun13gi0A) + + [朋友被裁员之后的工行、华为外包工作经历分享](https://mp.weixin.qq.com/s/cMZN_T7Ar1skWyyx8iHI5g) + + [和华为的一位学长聊了很久,优秀的人果然都有过人之处](https://mp.weixin.qq.com/s/Bg0Qejvxd6nQMuG4gXFzLw) \ No newline at end of file diff --git "a/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\350\277\207\345\271\264\347\211\271\350\276\221.md" "b/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\350\277\207\345\271\264\347\211\271\350\276\221.md" new file mode 100644 index 0000000..300470e --- /dev/null +++ "b/docs/all/\347\250\213\345\272\217\344\272\272\347\224\237/\350\277\207\345\271\264\347\211\271\350\276\221.md" @@ -0,0 +1,8 @@ + + [贵州打工仔回家过年,遭遇流感,被隔离,偶遇读者,偶遇直播同行...](https://mp.weixin.qq.com/s/MXSWBVQyVD4OW0tjy5UO8Q) + + [敖丙回家过年,外婆说没带女朋友别回来了?喝了老爸89年的酒,当场反目。](https://mp.weixin.qq.com/s/pQrepZAbgP59gmj42Z1kdA) + + [书房翻杂物,看到初恋的信件,看到奖牌,看到梅西、力宏,帅丙的眼角又湿了.....](https://mp.weixin.qq.com/s/VECNJbVV0Bz8PKlG8pYwVw) + + [疫情之下,从一座空城,到另一座空城,贵州小伙带你看不一样的杭州](https://mp.weixin.qq.com/s/8blBtbBLJtVvpnrJ7tmh_g) diff --git "a/docs/all/\347\272\277\344\270\212\351\227\256\351\242\230\346\216\222\346\237\245.md" "b/docs/all/\347\272\277\344\270\212\351\227\256\351\242\230\346\216\222\346\237\245.md" new file mode 100644 index 0000000..6f51e3a --- /dev/null +++ "b/docs/all/\347\272\277\344\270\212\351\227\256\351\242\230\346\216\222\346\237\245.md" @@ -0,0 +1,5 @@ + [线上问题如何排查?](https://mp.weixin.qq.com/s/8YBJn8x7Sf9dai9jNkX6Tg) + + [RT 过长,排查思路](https://mp.weixin.qq.com/s/TnLl2OW9XJLSZihcpgP7VQ) + + [线上问题排查](https://mp.weixin.qq.com/s/fA860wCu9PZW3eQTwdbGWQ) diff --git "a/docs/all/\347\274\223\345\255\230/Redis\345\270\270\350\247\201\347\272\277\344\270\212\346\225\205\351\232\234\345\217\212\345\205\266\350\247\243\345\206\263\346\226\271\346\241\210.md" "b/docs/all/\347\274\223\345\255\230/Redis\345\270\270\350\247\201\347\272\277\344\270\212\346\225\205\351\232\234\345\217\212\345\205\266\350\247\243\345\206\263\346\226\271\346\241\210.md" new file mode 100644 index 0000000..42d4821 --- /dev/null +++ "b/docs/all/\347\274\223\345\255\230/Redis\345\270\270\350\247\201\347\272\277\344\270\212\346\225\205\351\232\234\345\217\212\345\205\266\350\247\243\345\206\263\346\226\271\346\241\210.md" @@ -0,0 +1,5 @@ + [缓存击穿、雪崩、穿透](https://mp.weixin.qq.com/s/knz-j-m8bTg5GnKc7oeZLg) + + [布隆过滤器实战【防止缓存击穿】](https://mp.weixin.qq.com/s/BdwZViiAqnFhCde4ZsxwPg) + + [分布式锁、并发竞争、双写一致性](https://mp.weixin.qq.com/s/2hTgP3MRTVDxmmoUFhOaGw) \ No newline at end of file diff --git "a/docs/all/\347\274\223\345\255\230/Redis\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.md" "b/docs/all/\347\274\223\345\255\230/Redis\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.md" new file mode 100644 index 0000000..c96ee3f --- /dev/null +++ "b/docs/all/\347\274\223\345\255\230/Redis\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.md" @@ -0,0 +1,13 @@ + [Redis面试题](https://mp.weixin.qq.com/s/LkIcGS9kFTXNLFlxASPYUA) + + [Redis常见面试题](https://mp.weixin.qq.com/s/R1TJMo2IbPUUMox9OAAafQ) + + [Redis为什么变慢了?一文讲透如何排查Redis性能问题](https://mp.weixin.qq.com/s/rw42cFbJXwPtsGiqkFErfw) + + [Redis不是一直号称单线程效率也很高吗,为什么又采用多线程了?](https://mp.weixin.qq.com/s/mscKInWNAuhCbg183Um9_g) + + [缓存一致性问题怎么解决?](https://mp.weixin.qq.com/s/dYvM8_6SQnYRB6KjPsprbw) + + [内存耗尽后Redis会发生什么?](https://mp.weixin.qq.com/s/-caMTrOXQu-o0O44e6I9dQ) + + [妈妈再也不担心我面试被Redis问得脸都绿了](https://mp.weixin.qq.com/s/vXBFscXqDcXS_VaIERplMQ) \ No newline at end of file diff --git "a/docs/all/\347\274\223\345\255\230/Redis\346\225\260\346\215\256\347\273\223\346\236\204\343\200\201\345\237\272\347\241\200\347\237\245\350\257\206.md" "b/docs/all/\347\274\223\345\255\230/Redis\346\225\260\346\215\256\347\273\223\346\236\204\343\200\201\345\237\272\347\241\200\347\237\245\350\257\206.md" new file mode 100644 index 0000000..819d38a --- /dev/null +++ "b/docs/all/\347\274\223\345\255\230/Redis\346\225\260\346\215\256\347\273\223\346\236\204\343\200\201\345\237\272\347\241\200\347\237\245\350\257\206.md" @@ -0,0 +1,33 @@ +[Redis基础知识](https://mp.weixin.qq.com/s/aOiadiWG2nNaZowmoDQPMQ) + +[图解 Redis 数据结构](https://mp.weixin.qq.com/s/qptE172slg_6Tl1yuzdbfw) + +[Redis为什么这么快?](https://mp.weixin.qq.com/s/KtzvawDnQQwhfjnCoXpcMQ) + +[集群高可用、哨兵、持久化、LRU](https://mp.weixin.qq.com/s/EjDeypra_d9Tfsn-WkJZdw) + +[布隆过滤器(BloomFilter)](https://github.com/AobingJava/JavaFamily/blob/master/docs/redis/%E5%B8%83%E9%9A%86%E8%BF%87%E6%BB%A4%E5%99%A8(BloomFilter).md) + +[Redis—分布式锁深入探究](https://mp.weixin.qq.com/s/49hgH3COla3wU0rgyiUVgg) + +[Redis—跳跃表](https://mp.weixin.qq.com/s/NOsXdrMrWwq4NTm180a6vw) + +[Redis—5种基本数据结构](https://mp.weixin.qq.com/s/MT1tB2_7f5RuOxKhuEm1vQ) + +[Redis—持久化](https://mp.weixin.qq.com/s/O_qDco6-Dasu3RomWIK_Ig) + +[Reids—神奇的HyperLoglog解决统计问题](https://mp.weixin.qq.com/s/9dtGe3d_mbbxW5FpVPDNow) + +[Redis分布式锁](https://mp.weixin.qq.com/s/Z_xriP-jc2Bnmdcm0l5xzg) + +[Redis数据结构底层系列-SDS](https://mp.weixin.qq.com/s/VY31lBOSggOHvVf54GzvYw) + +[短小精悍之 Redis 命令行工具有趣的罕见用法](https://mp.weixin.qq.com/s/eSx4aL7iaMZlW0cPZswghA) + +[Redis分布式锁(全)](https://mp.weixin.qq.com/s/RnSokJxYxYDeenOP_JE3fQ) + +[Redis源码之BitMap](https://mp.weixin.qq.com/s/LavkCpqMTled_1m9CpJQ6w) + +[Redis源码之SDS](https://mp.weixin.qq.com/s/uYUQ1P8Dq1Cdknxif7lF-g) + +[读懂Redis源码,我总结了这7点心得](https://mp.weixin.qq.com/s/h-OEbiUUmKvUZqxmjfmgtg) \ No newline at end of file diff --git "a/docs/all/\347\274\223\345\255\230/redis/Redis\345\237\272\347\241\200.md" "b/docs/all/\347\274\223\345\255\230/redis/Redis\345\237\272\347\241\200.md" new file mode 100644 index 0000000..635a36d --- /dev/null +++ "b/docs/all/\347\274\223\345\255\230/redis/Redis\345\237\272\347\241\200.md" @@ -0,0 +1,146 @@ + >你知道的越多,你不知道的越多 + + >点赞再看,养成习惯 + ## 前言 + **Redis**在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在**Redis**的使用和原理方面对小伙伴们进行360°的刁难。作为一个在互联网公司面一次拿一次offer的面霸(**请允许我使用一下夸张的修辞手法**),打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚,在一个寂寞难耐的夜晚,我痛定思痛,决定开始写《吊打面试官》系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚铩羽而归,疯狂收割大厂offer! + + ### 面试开始 + >一个大腹便便,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向你走来,看着快秃顶的头发,心想着肯定是尼玛顶级架构师吧!但是我们腹有诗书气自华,虚都不虚。 + + ![](https://user-gold-cdn.xitu.io/2019/10/31/16e1ff35c9dc4843?w=500&h=320&f=png&s=236215) + + ### 小伙子您好,看你简历上写了你项目里面用到了Redis,你们为啥用Redis? + + 心里忍不住暗骂,这叫啥问题,大家不都是用的这个嘛,但是你不能说出来。 + + 认真回答道:**帅气迷人的面试官您好**,因为传统的关系型数据库如Mysql已经不能适用所有的场景了,比如秒杀的库存扣减,APP首页的访问流量高峰等等,都很容易把数据库打崩,所以引入了缓存中间件,目前市面上比较常用的缓存中间件有Redis 和 Memcached 不过中和考虑了他们的优缺点,最后选择了Redis。 + + **至于更细节的对比朋友们记得查阅Redis 和 Memcached 的区别,比如两者的优缺点对比和各自的场景,后续我有时间也会写出来。** + + ### 那小伙子,我再问你,Redis有哪些数据结构呀? + + 字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。 + + **这里我相信99%的读者都能回答上来Redis的5个基本数据类型。如果回答不出来的小伙伴我们就要加油补课哟,大家知道五种类型最适合的场景更好。** + + 但是,如果你是Redis中高级用户,而且你要在这次面试中突出你和其他候选人的不同,还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub。 + + 如果你还想加分,那你说还玩过Redis Module,像BloomFilter,RedisSearch,Redis-ML,这个时候面试官得眼睛就开始发亮了,心想这个小伙子**有点东西啊**。 + + ******注:本人在面试回答到Redis相关的问题的时候,经常提到BloomFilter(布隆过滤器)这玩意的使用场景是真的多,而且用起来是真的香,原理也好理解,看一下文章就可以在面试官面前侃侃而谈了,不香么?下方传送门 ↓****** + + [避免缓存穿透的利器之BloomFilter](https://juejin.im/post/5db69365518825645656c0de) + + ### 如果有大量的key需要设置同一时间过期,一般需要注意什么? + + 如果大量的key过期时间设置的过于集中,到过期的那个时间点,redis可能会出现短暂的卡顿现象。严重的话会出现缓存雪崩,我们一般需要在时间上加一个随机值,使得过期时间分散一些。 + + **电商首页经常会使用定时任务刷新缓存,可能大量的数据失效时间都十分集中,如果失效时间一样,又刚好在失效的时间点大量用户涌入,就有可能造成缓存雪崩** + + ### 那你使用过Redis分布式锁么,它是什么回事? + + 先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。 + + ### 这时候对方会告诉你说你回答得不错,然后接着问如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样? + + 这时候你要给予惊讶的反馈:唉,是喔,这个锁就永远得不到释放了。紧接着你需要**抓一抓自己得脑袋,故作思考片刻**,好像接下来的结果是你主动思考出来的,然后回答:我记得set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的! + + ### 对方这时会显露笑容,心里开始默念:嗯,这小子还不错,开始有点意思了。 + + ### 假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来? + + 使用**keys**指令可以扫出指定模式的key列表。 + + ### 对方接着追问:如果这个redis正在给线上的业务提供服务,那使用keys指令会有什么问题? + + 这个时候你要回答redis关键的一个特性:redis的单线程的。keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时候可以使用**scan**指令,**scan**指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用keys指令长。 + + **不过,增量式迭代命令也不是没有缺点的: 举个例子, 使用 SMEMBERS 命令可以返回集合键当前包含的所有元素, 但是对于 SCAN 这类增量式迭代命令来说, 因为在对键进行增量式迭代的过程中, 键可能会被修改, 所以增量式迭代命令只能对被返回的元素提供有限的保证 。** + + + ### 使用过Redis做异步队列么,你是怎么用的? + + 一般使用list结构作为队列,**rpush**生产消息,**lpop**消费消息。当lpop没有消息的时候,要适当sleep一会再重试。 + + ### 如果对方追问可不可以不用sleep呢? + + list还有个指令叫**blpop**,在没有消息的时候,它会阻塞住直到消息到来。 + + + ### 如果对方接着追问能不能生产一次消费多次呢? + + 使用pub/sub主题订阅者模式,可以实现 1:N 的消息队列。 + + ### 如果对方继续追问 pub/su b有什么缺点? + + 在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如**RocketMQ**等。 + + ### 如果对方究极TM追问Redis如何实现延时队列? + + 这一套连招下来,我估计现在你很想把面试官一棒打死(**面试官自己都想打死自己了怎么问了这么多自己都不知道的**),如果你手上有一根棒球棍的话,但是你很克制。平复一下激动的内心,然后神态自若的回答道:使用sortedset,拿时间戳作为score,消息内容作为key调用zadd来生产消息,消费者用**zrangebyscore**指令获取N秒之前的数据轮询进行处理。 + + **到这里,面试官暗地里已经对你竖起了大拇指。并且已经默默给了你A+,但是他不知道的是此刻你却竖起了中指,在椅子背后。** + + ### Redis是怎么持久化的?服务主从数据怎么交互的? + + RDB做镜像全量持久化,AOF做增量持久化。因为RDB会耗费较长时间,不够实时,在停机的时候会导致大量丢失数据,所以需要AOF来配合使用。在redis实例重启时,会使用RDB持久化文件重新构建内存,再使用AOF重放近期的操作指令来实现完整恢复重启之前的状态。 + + **这里很好理解,把RDB理解为一整个表全量的数据,AOF理解为每次操作的日志就好了,服务器重启的时候先把表的数据全部搞进去,但是他可能不完整,你再回放一下日志,数据不就完整了嘛。不过Redis本身的机制是 AOF持久化开启且存在AOF文件时,优先加载AOF文件;AOF关闭或者AOF文件不存在时,加载RDB文件;加载AOF/RDB文件城后,Redis启动成功; AOF/RDB文件存在错误时,Redis启动失败并打印错误信息** + + ### 对方追问那如果突然机器掉电会怎样? + 取决于AOF日志sync属性的配置,如果不要求性能,在每条写指令时都sync一下磁盘,就不会丢失数据。但是在高性能的要求下每次都sync是不现实的,一般都使用定时sync,比如1s1次,这个时候最多就会丢失1s的数据。 + + ### 对方追问RDB的原理是什么? + 你给出两个词汇就可以了,fork和cow。fork是指redis通过创建子进程来进行RDB操作,cow指的是copy on write,子进程创建后,父子进程共享数据段,父进程继续提供读写服务,写脏的页面数据会逐渐和子进程分离开来。 + + ******注:回答这个问题的时候,如果你还能说出AOF和RDB的优缺点,我觉得我是面试官在这个问题上我会给你点赞,两者其实区别还是很大的,而且涉及到Redis集群的数据同步问题等等。想了解的伙伴也可以留言,我会专门写一篇来介绍的。 ****** + + + ### Pipeline有什么好处,为什么要用pipeline? + + 可以将多次IO往返的时间缩减为一次,前提是pipeline执行的指令之间没有因果相关性。使用redis-benchmark进行压测的时候可以发现影响redis的QPS峰值的一个重要因素是pipeline批次指令的数目。 + + ### Redis的同步机制了解么? + + Redis可以使用主从同步,从从同步。第一次同步时,主节点做一次bgsave,并同时将后续修改操作记录到内存buffer,待完成后将RDB文件全量同步到复制节点,复制节点接受完成后将RDB镜像加载到内存。加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。后续的增量数据通过AOF日志同步即可,有点类似数据库的binlog。 + + ### 是否使用过Redis集群,集群的高可用怎么保证,集群的原理是什么? + + Redis Sentinal着眼于高可用,在master宕机时会自动将slave提升为master,继续提供服务。 + + Redis Cluster着眼于扩展性,在单个redis内存不足时,使用Cluster进行分片存储。 + + ## 面试结束 + ### 小伙子你可以的,什么时候有时间来上班啊,要不明天就来吧? + 你强装镇定,这么急啊我还需要租房,要不下礼拜一吧。 + ### 好的 心想这小子这么NB是不是很多Offer在手上,不行我得叫hr给他加钱。 + 能撑到最后,你自己都忍不住自己给自己点个赞了! + + (**暗示点赞,每次都看了不点赞,你们想白嫖我么?你们好坏喲,不过我喜欢**)。 + + ## 总结 + + **在技术面试的时候,不管是Redis还是什么问题,如果你能举出实际的例子,或者是直接说自己开发过程的问题和收获会给面试官的印象分会加很多,回答逻辑性也要强一点,不要东一点西一点,容易把自己都绕晕的。** + + **还有一点就是我问你为啥用Redis你不要一上来就直接回答问题了,你可以这样回答:** + + **帅气的面试官您好**,首先我们的项目DB遇到了瓶颈,特别是秒杀和热点数据这样的场景DB基本上就扛不住了,那就需要缓存中间件的加入了,目前市面上有的缓存中间件有 Redis 和 Memcached ,他们的优缺点......,综合这些然后再结合我们项目特点,最后我们在技术选型的时候选了谁。 + + 如果你这样有条不紊,有理有据的回答了我的问题而且还说出这么多我问题外的知识点,我会觉得你不只是一个会写代码的人,你逻辑清晰,你对技术选型,对中间件对项目都有自己的理解和思考,说白了就是你的offer有戏了。 + + 好了 以上就是这篇文章的全部内容了,我后面会不断更新《吊打面试官》系列和Java技术栈相关的文章。如果你有什么想知道的,也可以**留言**给我,我一有时间就会写出来,我们共同进步。 + + 非常感谢您能看到这里,如果这个文章写得还不错的话 **求点赞** **求关注** **求分享** **求留言** 各位的支持和认可,就是我创作的最大动力,OK各位我们下期见! + + 敖丙 | 文 + + ---- + + + >后面会持续更新《吊打面试官》系列可以关注我的公众号第一时间阅读,也会有朋友一线大厂的内推机会不定期推出(字节跳动,阿里,网易,PDD,滴滴,蘑菇街等),就业上有什么问题也可以直接微信滴滴我,我也是个新人,不过不影响我们一起进步,作为渣男,我给不了你工作,还给不了你温暖嘛? + + ![](https://user-gold-cdn.xitu.io/2019/11/1/16e25fd86ba8a0db?w=900&h=500&f=png&s=185595) + + + + \ No newline at end of file diff --git "a/docs/redis/Redis\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.md" "b/docs/all/\347\274\223\345\255\230/redis/Redis\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.md" similarity index 95% rename from "docs/redis/Redis\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.md" rename to "docs/all/\347\274\223\345\255\230/redis/Redis\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.md" index a4edfec..3b3b961 100644 --- "a/docs/redis/Redis\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.md" +++ "b/docs/all/\347\274\223\345\255\230/redis/Redis\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230.md" @@ -477,17 +477,7 @@ M1所在的机器挂了,哨兵还有两个,两个人一看他不是挂了嘛 **知乎、简书、思否、慕课手记**没人看不知道为啥,懂行的老铁可以跟我说一下。 -我只想说你们想看的肯定都在我开头和**[GITHub](https://github.com/AobingJava/JavaFamily)**那个图里吧,问题不大,后面都会写的。 - -现在双十一过去了,我服务器的广告也没法打来赚钱了,唯一写作的来源可能就是我微信公众号文章下面的广告位,大家可以点了退出来,微信按点击给我广告费,钱不多也算对我的一点支持吧哈哈!不过白嫖也没事。 - -喏我写文章到现在才3块钱,不过关注我公众号的人也不多,总之拜托了。 - -![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8vqp1sl31j30b409kdg9.jpg) - -就是点文章下面的这个广告,点他等于给我投币了👇 - -![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8vqpja5qbj30b40b3dgp.jpg) +我只想说你们想看的肯定都在我开头和[GITHub](https://github.com/AobingJava/JavaFamily)那个图里吧,问题不大,后面都会写的。 ## 鸣谢 @@ -505,7 +495,7 @@ M1所在的机器挂了,哨兵还有两个,两个人一看他不是挂了嘛 我后面会每周都更新几篇《**吊打面试官**》系列和**互联网常用技术栈**相关的文章。如果你有什么想知道的,也可以留言给我,我一有时间就会写出来,我们共同进步。 -非常感谢**人才**们能看到这里,如果这个文章写得还不错,觉得**「敖丙」**我**有点东西**的话 **求点赞👍** **求关注❤️** **求分享👥** **求留言💬** 对暖男我来说 **非常有用**!!! +非常感谢**人才**们能看到这里,如果这个文章写得还不错,觉得「敖丙」我**有点东西**的话 **求点赞👍** **求关注❤️** **求分享👥** **求留言💬** 对暖男我来说 **非常有用**!!! 各位的支持和认可,就是我创作的最大动力,我们下篇文章见! @@ -513,6 +503,6 @@ M1所在的机器挂了,哨兵还有两个,两个人一看他不是挂了嘛 ------ -> **《吊打面试官》**系列每周持续更新,可以关注我的公众号[JavaFamily](https://github.com/AobingJava/JavaFamily#%E5%85%AC%E4%BC%97%E5%8F%B7)第一时间阅读和催更(**公众号比博客早一到两天哟**),[**GitHub**](https://github.com/AobingJava/JavaFamily)上已经开源[https://github.com/Java...](https://github.com/AobingJava/JavaFamily),有面试点思维导图,欢迎[**Star**](https://github.com/AobingJava/JavaFamily)和[**完善**](https://github.com/AobingJava/JavaFamily)里面也有我个人微信有什么问题也可以直接滴滴我,我们一起进步。 +> 《吊打面试官》系列每周持续更新,可以关注我的公众号[JavaFamily](https://github.com/AobingJava/JavaFamily#%E5%85%AC%E4%BC%97%E5%8F%B7)第一时间阅读和催更(**公众号比博客早一到两天哟**),[**GitHub**](https://github.com/AobingJava/JavaFamily)上已经开源[https://github.com/Java...](https://github.com/AobingJava/JavaFamily),有面试点思维导图,欢迎[**Star**](https://github.com/AobingJava/JavaFamily)和[**完善**](https://github.com/AobingJava/JavaFamily)里面也有我个人微信有什么问题也可以直接滴滴我,我们一起进步。 ![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8p9gftfchj30p00dwjuj.jpg) \ No newline at end of file diff --git "a/docs/redis/Redis\347\273\210\347\253\240-\345\207\233\345\206\254\345\260\206\350\207\263 FPX-\346\226\260\347\216\213\347\231\273\345\237\272.md" "b/docs/all/\347\274\223\345\255\230/redis/\345\210\206\345\270\203\345\274\217\351\224\201\343\200\201\345\271\266\345\217\221\347\253\236\344\272\211\343\200\201\345\217\214\345\206\231\344\270\200\350\207\264\346\200\247.md" similarity index 96% rename from "docs/redis/Redis\347\273\210\347\253\240-\345\207\233\345\206\254\345\260\206\350\207\263 FPX-\346\226\260\347\216\213\347\231\273\345\237\272.md" rename to "docs/all/\347\274\223\345\255\230/redis/\345\210\206\345\270\203\345\274\217\351\224\201\343\200\201\345\271\266\345\217\221\347\253\236\344\272\211\343\200\201\345\217\214\345\206\231\344\270\200\350\207\264\346\200\247.md" index fd118ff..c0ab28a 100644 --- "a/docs/redis/Redis\347\273\210\347\253\240-\345\207\233\345\206\254\345\260\206\350\207\263 FPX-\346\226\260\347\216\213\347\231\273\345\237\272.md" +++ "b/docs/all/\347\274\223\345\255\230/redis/\345\210\206\345\270\203\345\274\217\351\224\201\343\200\201\345\271\266\345\217\221\347\253\236\344\272\211\343\200\201\345\217\214\345\206\231\344\270\200\350\207\264\346\200\247.md" @@ -269,22 +269,6 @@ Tip:其实面试官这么问,是想看你知道为啥用这个技术栈么 其实学习技术是个**反哺**的过程,学习的时候可能你只是感觉知识广度、深度上去了,一个知识点你这样,两个、三个知识点你都这样,最后你发现你的技术已经跟身边一样P6的仔不一样了,这样你可能在团队重大项目的贡献都上去了,那P7的晋升几率是不是大了,钱是不是上去了,女朋友是不是好看了,房子是不是大了。 -### 墙裂安利 - -双十一最后一天,我在帮阿里云服务器推广**【86一年 229三年】**说实话有点香,**最后一天!!!** - -现在买可以去公众号加我微信**返10元现金**! - -技术人,辛苦一年,买来送自己的礼物🎁,用来学习搭建项目,中间件熟悉,面试的时候直接给面试官展示你的项目多香啊。 - -**[购买链接](https://www.aliyun.com/1111/2019/group-buying-share?ptCode=9C36CDC5F956AD0477AF1A3D19D3C328647C88CF896EF535&userCode=tybhsgp5&share_source=copy_link)** - -二维码购买 - -![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8p9gg764oj302s02sgli.jpg) - -![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8tgag7ns3j30mw0g6jzs.jpg) - ## End 好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是**人才**,我后面会每周都更新几篇《**吊打面试官**》系列和**Java技术栈**相关的文章。如果你有什么想知道的,也可以留言给我,或者去公众号加我微信,我一有时间就会写出来,我们共同进步。 diff --git "a/docs/redis/\351\201\277\345\205\215\347\274\223\345\255\230\345\207\273\347\251\277\347\232\204\345\210\251\345\231\250\344\271\213BloomFilter.md" "b/docs/all/\347\274\223\345\255\230/redis/\345\270\203\351\232\206\350\277\207\346\273\244\345\231\250(BloomFilter).md" similarity index 99% rename from "docs/redis/\351\201\277\345\205\215\347\274\223\345\255\230\345\207\273\347\251\277\347\232\204\345\210\251\345\231\250\344\271\213BloomFilter.md" rename to "docs/all/\347\274\223\345\255\230/redis/\345\270\203\351\232\206\350\277\207\346\273\244\345\231\250(BloomFilter).md" index 507e09e..f7884de 100644 --- "a/docs/redis/\351\201\277\345\205\215\347\274\223\345\255\230\345\207\273\347\251\277\347\232\204\345\210\251\345\231\250\344\271\213BloomFilter.md" +++ "b/docs/all/\347\274\223\345\255\230/redis/\345\270\203\351\232\206\350\277\207\346\273\244\345\231\250(BloomFilter).md" @@ -4,7 +4,7 @@ 布隆过滤器(英语:Bloom Filter)是1970年由一个叫布隆的小伙子提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 -***面试关联:一般都会在回答缓存击穿,或者海量数据去重这个时候引出来,加分项哟*** +***面试关联:一般都会在回答缓存穿透,或者海量数据去重这个时候引出来,加分项哟*** # Bloom Filter 原理 diff --git "a/docs/all/\347\274\223\345\255\230/redis/\347\247\222\346\235\200\347\263\273\347\273\237\350\256\276\350\256\241.md" "b/docs/all/\347\274\223\345\255\230/redis/\347\247\222\346\235\200\347\263\273\347\273\237\350\256\276\350\256\241.md" new file mode 100644 index 0000000..6f2e552 --- /dev/null +++ "b/docs/all/\347\274\223\345\255\230/redis/\347\247\222\346\235\200\347\263\273\347\273\237\350\256\276\350\256\241.md" @@ -0,0 +1,288 @@ +> 你知道的越多,你不知道的越多 + +> 点赞再看,养成习惯 + +> **GitHub**上已经开源 [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 + +## 前言 + +**Redis**在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在**Redis**的使用和原理方面对小伙伴们进行360°的刁难。 + +作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚(**请允许我使用一下夸张的修辞手法**)。 + +于是在一个寂寞难耐的夜晚,我痛定思痛,决定开始写**《吊打面试官》**系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂Offer! + +## 絮叨 + +之前写了很多**Redis**相关的知识点,我又大概回头看了下,除了比较底层的东西没写很深之外,我基本上的点都提到过了,我相信如果只是为了应付面试应该是够了的,但是如果你想把它们真正的吸收纳为己用,还是需要**大量的知识积累**,和**很多实际操作**的。 + +就我自己而言**Redis**在开发过程中实在用得太普遍了,热点数据的存储啊,整体性能的提升啊都会用到,但是就像我说的**技术就是一把双刃剑**,使用它们随之而来的问题也会很多的,我在老东家双十二就遇到**缓存雪崩**问题让整体服务宕机3分钟,相必大家都知道阿里今年的双十一数据了,那三分钟在这种时候到底值多少钱?真的不敢想象。 + +**Redis**的普遍我就拿掘金我自己的认知举例,不知道对不对,但是目测是对的。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g92g1h1g46j30dw0f1dix.jpg) + +**大家看到问题所在了么?**是的热门的赞的数据不是最新的,我盲猜一波上面的热门文章是缓存。失效时间应该是几十分钟的,为啥这么做呢? + +热门文章是大家共同都会看到的,也就是**热点数据**,在那做缓存,他是不需要那么高的**实时性**的,那下面的文章列表是最新发布的文章,有高实时性的特点,大家访问多的放在缓存还可以给DB减少压力,我也不知道掘金是不是这么做的哈,反正道理是这么个道理了。 + +那什么场景是使用**Redis比较复杂的场景**,而且需要**大量中间件**和**业务逻辑**去配合的呢? + +**秒杀**!是的就是今天的主题秒杀,我就用我自己的思路带大家一起看一下,设计一个秒杀从前到后,从内到外到底要技术人员做多少准备。 + +## 捞一下 + +上一期吊打系列我们提到了**Redis**相关的一些知识,还没看的小伙伴可以回顾一下 ,这**对于这期的阅读很有帮助**,涉及到主从同步、读写分离、持久化这样的知识点。 + +- **[《吊打面试官》系列-Redis基础](https://juejin.im/post/5db66ed9e51d452a2f15d833)** +- **[《吊打面试官》系列-缓存雪崩、击穿、穿透](https://juejin.im/post/5dbef8306fb9a0203f6fa3e2)** +- **[《吊打面试官》系列-Redis哨兵、持久化、主从、手撕LRU](https://juejin.im/post/5dc3a9fbf265da4d3c072eab)** +- **[《吊打面试官》系列-Redis终章凛冬将至、FPX新王登基](https://juejin.im/post/5dc850b4e51d452c2308ee27)** +- **[《吊打面试官》系列-Redis常见面试题(带答案)](https://juejin.im/post/5dcaebea518825571f5c4ab0)** + +打好基础才可以写出更好的代码哟!不然就等着产品测试怼你吧。 + +## 正文 + +首先设计一个系统之前,我们需要先确认我们的业务场景是怎么样子的,我就**带着大家一起假设一个场景**好吧。 + +### 场景 + +我们现场要卖100件下面这个**婴儿纸尿裤**,然后我们根据以往这样秒杀活动的数据经验来看,目测来抢这100件纸尿裤的人足足有10万人。(南极人打钱!) + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g92ddsedbrj308z0jg759.jpg) + +你一听,完了呀,这我们的服务器哪里顶得住啊!说真的直接打DB肯定挂。但是别急嘛,有**暖男**敖丙在,我们在开始之前应该先思考下**会出现哪些问题**? + +### 问题 + +#### 高并发: + +是的**高并发**这个是我们想都不用想的一个点,一瞬间这么多人进来这不是高并发什么时候是呢? + +是吧,秒杀的特点就是这样**时间极短**、 **瞬间用户量大**。 + +正常的店铺营销都是用极低的价格配合上短信、APP的精准推送,吸引特别多的用户来参与这场秒杀,**爽了商家苦了开发呀**。 + +秒杀大家都知道如果真的营销到位,价格诱人,几十万的流量我觉得完全不是问题,那单机的**Redis**我感觉3-4W的QPS还是能顶得住的,但是再高了就没办法了,那这个数据随便搞个热销商品的秒杀可能都不止了。 + +大量的请求进来,我们需要考虑的点就很多了,**缓存雪崩**,**缓存击穿**,**缓存穿透**这些我之前提到的点都是有可能发生的,出现问题打挂DB那就很难受了,活动失败用户体验差,活动人气没了,最后背锅的还是**开发**。 + + + +#### 超卖: + +但凡是个秒杀,都怕**超卖**,我这里举例的只是尿不湿,要是换成100个华为MatePro30,商家的预算经费卖100个可以赚点还可以造势,结果你写错程序多卖出去200个,你不发货用户**投诉你**,平台**封你店**,你发货就**血亏**,你怎么办? +(没事看了敖丙的文章直接不怕) + +那最后只能**杀个开发祭天**解气了,秒杀的价格本来就低了,基本上都是不怎么赚钱的,超卖了就恐怖了呀,所以超卖也是很关键的一个点。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g90qmwe0jaj308y0b2jyk.jpg) + +#### 恶意请求: + +你这么低的价格,假如我抢到了,我转手卖掉我不是**血赚**?就算我不卖我也不亏啊,那用户知道,你知道,别的别有用心的人(黑客、黄牛...)肯定也知道的。 + +那简单啊,我知道你什么时候抢,我搞个几十台机器搞点脚本,我也模拟出来十几万个人左右的请求,那我是不是意味着我基本上有80%的成功率了。 + +真实情况可能远远不止,因为机器请求的速度比人的手速往往快太多了,在贵州的敖丙我每年回家抢高铁票都是**秒光**的,我也不知道有没有黄牛的功劳,我要Diss你,黄牛。杰伦演唱会门票抢不到,我也Diss你。 + +Tip:科普下,小道消息了解到的,黄牛的抢票系统,比国内很多小公司的系统还吊很多,架构设计都是顶级的,我用**顶配的服务**加上**顶配的架构设计**,你还想看演唱会?还想回家? + +不过不用黄牛我回家都难,我们云贵川跟我一样要回家过年的仔太多了555! + +#### 链接暴露: + +前面几个问题大家可能都很好理解,一看到这个有的小伙伴可能会比较疑惑,啥是**链接暴露**呀? + + + +相信是个开发同学都对这个画面一点都不陌生吧,懂点行的仔都可以打开谷歌的**开发者模式**,然后看看你的网页代码,有的就有URL,但是我写VUE的时候是事件触发然后去调用文件里面的接口看源码看不到,但是我可以点击一下**查看你的请求地址**啊,不过你好像可以对按钮在秒杀前置灰。 + +不管怎么样子都有危险,撇开外面的所有的东西你都挡住了,你卖这个东西实在便宜得过分,有诱惑力,你能保证**开发不动心**?开发知道地址,在秒杀的时候自己提前请求。。。(开发:怎么TM又是我) + + +![](https://tvax4.sinaimg.cn/large/006Xzox4gy1g7wdbt5o06j308505h745.jpg) + +#### 数据库: + +每秒上万甚至十几万的**QPS**(每秒请求数)直接打到**数据库**,基本上都要把库打挂掉,而且你服务不单单是做秒杀的还涉及其他的业务,你没做**降级、限流、熔断**啥的,别的一起挂,小公司的话可能**全站崩溃404**。 + +反正不管你秒杀怎么挂,你别把别的搞挂了对吧,搞挂了就不是杀一个程序员能搞定的。 + +程序员:我TM好难啊! + +### 问题都列出来了,那怎么设计,怎么解决这些问题就是接下去要考虑的了,我们对症下药。 + +#### 服务单一职责: + +设计个能抗住高并发的系统,我觉得还是得**单一职责**。 + +什么意思呢,大家都知道现在设计都是**微服务的设计思想**,然后再用**分布式的部署方式** + +也就是我们下单是有个订单服务,用户登录管理等有个用户服务等等,那为啥我们不给秒杀也开个服务,我们把秒杀的代码业务逻辑放一起。 + +单独给他建立一个数据库,现在的互联网架构部署都是**分库**的,一样的就是订单服务对应订单库,秒杀我们也给他建立自己的秒杀库。 + +至于表就看大家怎么设计了,该设置索引的地方还是要设置索引的,建完后记得用**explain**看看**SQL**的执行计划。(不了解的小伙伴也没事,MySQL章节我会说的) + +单一职责的好处就是就算秒杀没抗住,秒杀库崩了,服务挂了,也不会影响到其他的服务。(强行高可用) + +#### 秒杀链接加盐: + +我们上面说了链接要是提前暴露出去可能有人直接访问url就提前秒杀了,那又有小伙伴要说了我做个时间的校验就好了呀,那我告诉你,知道链接的地址比起页面人工点击的还是有**很大优势**。 + +我知道url了,那我通过程序不断获取最新的北京时间,可以达到**毫秒级别**的,我就在00毫秒的时候请求,我敢说绝对比你人工点的成功率大太多了,而且我可以一毫秒发送N次请求,搞不好你卖100个产品我全拿了。 + + + +**那这种情况怎么避免?** + +简单,把**URL动态化**,就连写代码的人都不知道,你就通过MD5之类的加密算法加密随机的字符串去做url,然后通过前端代码获取url后台校验才能通过。 + +暖男我呢,又准备了一个简单的url加密给大家尝尝鲜,还不**点个赞**? + + + +#### Redis集群: + +之前不是说单机的**Redis**顶不住嘛,那简单多找几个兄弟啊,秒杀本来就是读多写少,那你们是不是瞬间想起来我之前跟你们提到过的,**Redis集群**,**主从同步**、**读写分离**,我们还搞点**哨兵**,开启**持久化**直接无敌高可用! + + + +#### Nginx: + +**Nginx**大家想必都不陌生了吧,这玩意是**高性能的web服务器**,并发也随便顶几万不是梦,但是我们的**Tomcat**只能顶几百的并发呀,那简单呀**负载均衡**嘛,一台服务几百,那就多搞点,在秒杀的时候多租点**流量机**。 + +Tip:据我所知国内某大厂就是在去年春节活动期间租光了亚洲所有的服务器,小公司也很喜欢在双十一期间买流量机来顶住压力。 + + + +**这样一对比是不是觉得你的集群能顶很多了。** + +**恶意请求拦截**也需要用到它,一般单个用户请求次数太夸张,不像人为的请求在网关那一层就得拦截掉了,不然请求多了他抢不抢得到是一回事,服务器压力上去了,可能占用网络带宽或者把**服务器打崩、缓存击穿**等等。 + +#### 资源静态化: + +秒杀一般都是特定的商品还有页面模板,现在一般都是前后端分离的,所以页面一般都是不会经过后端的,但是前端也要自己的服务器啊,那就把能提前放入**cdn服务器**的东西都放进去,反正把所有能提升效率的步骤都做一下,减少真正秒杀时候服务器的压力。 + +#### 按钮控制: + +大家有没有发现没到秒杀前,一般按钮都是**置灰**的,只有时间到了,才能点击。 + +这是因为怕大家在时间快到的最后几秒秒疯狂请求服务器,然后还没到秒杀的时候基本上服务器就挂了。 + +这个时候就需要前端的配合,定时去请求你的后端服务器,获取最新的北京时间,到时间点再给按钮可用状态。 + +按钮可以点击之后也得给他置灰几秒,不然他一样在开始之后一直点的。**你敢说你们秒杀的时候不是这样的?** + + + +#### 限流: + +限流这里我觉得应该分为**前端限流**和**后端限流**。 + +**前端限流**:这个很简单,一般秒杀不会让你一直点的,一般都是点击一下或者两下然后几秒之后才可以继续点击,这也是保护服务器的一种手段。 + +**后端限流**:秒杀的时候肯定是涉及到后续的订单生成和支付等操作,但是都只是成功的幸运儿才会走到那一步,那一旦100个产品卖光了,return了一个false,前端直接秒杀结束,然后你后端也关闭后续无效请求的介入了。 + +Tip:真正的限流还会有限流组件的加入例如:阿里的Sentinel、Hystrix等。我这里就不展开了,就说一下物理的限流。 + +#### 库存预热: + +**秒杀的本质,就是对库存的抢夺**,每个秒杀的用户来你都去数据库查询库存校验库存,然后扣减库存,撇开性能因数,你不觉得这样好繁琐,对业务开发人员都不友好,而且数据库顶不住啊。 + +**开发:你tm总算为我着想一次了。** + +![](https://i02piccdn.sogoucdn.com/4a437aff2bada6e1) + +#### 那怎么办? + +我们都知道数据库顶不住但是他的兄弟非关系型的数据库**Redis**能顶啊! + +那不简单了,我们要开始秒杀前你通过定时任务或者运维同学**提前把商品的库存加载到Redis中**去,让整个流程都在Redis里面去做,然后等秒杀介绍了,再异步的去修改库存就好了。 + +但是用了Redis就有一个问题了,我们上面说了我们采用**主从**,就是我们会去读取库存然后再判断然后有库存才去减库存,正常情况没问题,但是高并发的情况问题就很大了。 + +这里我就不画图了,我本来想画图的,想了半天我觉得语言可能更好表达一点。 + +**多品几遍!!!**就比如现在库存只剩下1个了,我们高并发嘛,4个服务器一起查询了发现都是还有1个,那大家都觉得是自己抢到了,就都去扣库存,那结果就变成了-3,是的只有一个是真的抢到了,别的都是超卖的。咋办? + +### Lua: + +之前的文章就简单的提到了他,我今天就多一定点篇幅说一下吧。 + +> **Lua** 脚本功能是 Reids在 2.6 版本的最大亮点, 通过内嵌对 Lua 环境的支持, Redis 解决了长久以来不能高效地处理 **CAS** (check-and-set)命令的缺点, 并且可以通过组合使用多个命令, 轻松实现以前很难实现或者不能高效实现的模式。 + +**Lua脚本是类似Redis事务,有一定的原子性,不会被其他命令插队,可以完成一些Redis事务性的操作。**这点是关键。 + +知道原理了,我们就写一个脚本把判断库存扣减库存的操作都写在一个脚本丢给Redis去做,那到0了后面的都Return False了是吧,一个失败了你修改一个开关,直接挡住所有的请求,然后再做后面的事情嘛。 + +#### 限流&降级&熔断&隔离: + +这个为啥要做呢,不怕一万就怕万一,万一你真的顶不住了,**限流**,顶不住就挡一部分出去但是不能说不行,**降级**,降级了还是被打挂了,**熔断**,至少不要影响别的系统,**隔离**,你本身就独立的,但是你会调用其他的系统嘛,你快不行了你别拖累兄弟们啊。 + +![](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1573745703045&di=af0071ba36eace57ad770eca350b5b68&imgtype=0&src=http%3A%2F%2Fimg.bqatj.com%2Fimg%2F8bb02435ae40b2f2.jpg) + +#### 削峰填谷: + +一说到这个名词,很多小伙伴就知道了,对的**MQ**,你买东西少了你直接100个请求改库我觉得没问题,但是万一秒杀一万个,10万个呢?服务器挂了,**程序员又要背锅的**。 + +Tip:**可能小伙伴说我们业务达不到这个量级,没必要。但是我想说我们写代码,就不应该写出有逻辑漏洞的代码,至少以后公司体量上去了,别人一看居然不用改代码,一看代码作者是敖丙?有点东西!** + +你可以把它放消息队列,然后一点点消费去改库存就好了嘛,不过单个商品其实一次修改就够了,我这里说的是**某个点多个商品**一起秒杀的场景,像极了双十一零点。 + +## 总结 + +到这里我想我已经基本上把该考虑的点还有对应的解决方案也都说了一下,不知道还有没有没考虑到的,但是就算没考虑到我想我这个设计,应该也能撑住一个完整的秒杀流程。 + +(有大佬的话给敖丙点多的思路,去GitHub [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 上给我提,也有我的联系) + +最后我就画个完整的流程图给大家收个尾吧! + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g92dbyzsm7j30u80tqq4t.jpg) +Tip:这个链路还是比较简单的,很多细节的点全部画出来就太复杂了,我上面已经提到了所有的注意点了,大家都看看,真正的秒杀有比我这个简单的,也有比我这个复杂N倍的,之前的电商老东家就做的很高级,有机会也可以跟你们探讨,不过是面试嘛,我就给思路,让你理解比较关键的点。 + +秒杀这章我脑细胞死了很多,考虑了很多个点,最后还是出来了,忍不住给自己**点赞**! + +(**这章是真的不要白嫖,每次都看了不点赞,你们想白嫖我么?你们好坏喲,不过我好喜欢**) + +## 总结 + +我们玩归玩,闹归闹,别拿面试开玩笑。 + +秒杀不一定是每个同学都会问到的,至少肯定没**Redis基础**那样常问,但是一旦问到,大家一定要回答到点上。 + +至少你得说出**可能出现的情况**,**需要注意的情况**,以及对于的**解决思路和方案**。 + +最后就是需要对整个链路比较熟悉,注意是一个完整的链路,前端怎么设计的呀,网关的作用呀,怎么**解决Redis的并发竞争**啊,**数据的同步方式**呀,**MQ的作用**啊。 + +(提到MQ又是一整条的知识链路,什么异步、削峰、解耦等等,所以面试,我们还是不打没有把握的胜仗) + +### 流着泪说再见 + +**Redis系列**到此是真的要跟大家说再见了,写了7篇文章,其实很多大佬的思路和片段真心赞,其实大家看出来了我的文章个人风格色彩特别浓厚,我个人在生活中就是这么说话的,也希望用这种风格把原本枯燥乏味的知识点让大家都像看小说一样津津有味的看下去,不知道大家什么感受,好的不好的都请给我留言。 + +我这个系列的我会写到我**GitHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 图中所有的知识点,以后就麻烦大家多多关照了,我写作的时间都是业余时间,基本上周末和晚上的时间都贡献出来了,我也是个新人很多点也没接触到,也要看书看资料才能写出来,所以有时候还是希望大家多多包涵。 + +那我们下期见! + +下期写________________? + +不告诉你,哈哈! + +## 日常求赞 + +好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是**人才**。 + +我后面会每周都更新几篇《吊打面试官》系列和互联网常用技术栈相关的文章,非常感谢**人才**们能看到这里,如果这个文章写得还不错,觉得「敖丙」我**有点东西**的话 **求点赞👍** **求关注❤️** **求分享👥** 对暖男我来说真的 **非常有用**!!! + +创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见! + +敖丙 | 文 【原创】【转载请联系本人】 如果本篇博客有任何错误,请批评指教,不胜感激 ! + +------ + +> 《吊打面试官》系列每周持续更新,可以关注我的公众号「**JavaFamily**」第一时间阅读和催更(公众号比博客早一到两篇哟),本文**GitHub**上已经收录[https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily),有一线大厂面试点思维导图,欢迎Star和完善,里面也有我个人联系方式有什么问题也可以直接找我,也有人才交流群,我们一起有点东西。 + +![](https://user-gold-cdn.xitu.io/2019/11/16/16e7340546a49ea9?w=900&h=500&f=png&s=201521) \ No newline at end of file diff --git "a/docs/all/\347\274\223\345\255\230/redis/\347\274\223\345\255\230\345\207\273\347\251\277\343\200\201\351\233\252\345\264\251\343\200\201\347\251\277\351\200\217.md" "b/docs/all/\347\274\223\345\255\230/redis/\347\274\223\345\255\230\345\207\273\347\251\277\343\200\201\351\233\252\345\264\251\343\200\201\347\251\277\351\200\217.md" new file mode 100644 index 0000000..37913f8 --- /dev/null +++ "b/docs/all/\347\274\223\345\255\230/redis/\347\274\223\345\255\230\345\207\273\347\251\277\343\200\201\351\233\252\345\264\251\343\200\201\347\251\277\351\200\217.md" @@ -0,0 +1,150 @@ + > 你知道的越多,你不知道的越多 + + > 点赞再看,养成习惯 + + ## 前言 + + **Redis**在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在**Redis**的使用和原理方面对小伙伴们进行360°的刁难。作为一个在互联网公司面一次拿一次offer的面霸(**请允许我使用一下夸张的修辞手法**),打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚,在一个寂寞难耐的夜晚,我痛定思痛,决定开始写**《吊打面试官》**系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂offer! + + ## 一点感慨 + + 本来都把稿子放到公众号保存了,洗澡的时候想了一下晚上的比赛,觉得还是打开电脑写点东西,跟文章内容没关系,只是一点个人的感慨,不知道多少小伙伴看了昨天**SKT VS G2**的比赛,又不知道多少小伙伴还记得**Faker**手抖的那一幕。 + + ![](https://pic.rmb.bdstatic.com/0def24612fc43cb8cd7e83ff068644934595.gif) + + 不知道你们看了是什么感受,我看到他手抖的时候我内心也抖了,世界赛我支持的都是**LPL**的队伍,但是我喜欢李哥这个人,那种对胜利的执著,这么多年了那种坚持自己的坚持,这么多利益诱惑在面前却只想要胜利,这样的人我好喜欢啊,我想很多人也喜欢。 + + ![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8m0agafxfj307v0e0glv.jpg) + + 可能就像很多网友说的那样,英雄迟暮,但是我觉得他还是有点东西,就像很多人说我们程序员只能吃年轻饭一样,但是如果你坚持自己的坚持,做个腹有诗书气自华的仔,我想最后肯定会得到自己的得到。 + + 好了我也不煽情了,我们开始讲技术吧。 + + ## 正文 + + 上一期吊打系列我们提到了Redis的基础知识,还没看的小伙伴可以回顾一下 + + [《吊打面试官》系列-Redis基础](https://juejin.im/post/5db66ed9e51d452a2f15d833) + + 那提到**Redis**我相信各位在面试,或者实际开发过程中对缓存**雪崩**,**穿透**,**击穿**也不陌生吧,就算没遇到过但是你肯定听过,那三者到底有什么区别,我们又应该怎么去防止这样的情况发生呢,我们有请下一位受害者。 + + ## 面试开始 + + > 一个大腹便便,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向你走来,看着快秃顶的头发,心想着肯定是尼玛顶级架构师吧!但是我们腹有诗书气自华,虚都不虚。 + + ![](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1572684195247&di=028e6f6a8788bb3cee016bdb86254945&imgtype=0&src=http%3A%2F%2Fgss0.baidu.com%2F9vo3dSag_xI4khGko9WTAnF6hhy%2Fzhidao%2Fwh%3D800%2C450%2Fsign%3D2708ae14db160924dc70aa13e43719ce%2Ff11f3a292df5e0fe08d04043576034a85fdf72ac.jpg) + + ### 小伙子我看你的简历上写到了Redis,那么我们直接开门见山,直接怼常见的几个大问题,Redis雪崩了解么? + + 帅气迷人的面试官您好,我了解的,目前电商首页以及热点数据都会去做缓存 ,一般缓存都是定时任务去刷新,或者是查不到之后去更新的,定时任务刷新就有一个问题。 + + **举个简单的例子**:如果所有首页的Key失效时间都是12小时,中午12点刷新的,我零点有个秒杀活动大量用户涌入,假设当时每秒 6000 个请求,本来缓存在可以扛住每秒 5000 个请求,但是缓存当时所有的Key都失效了。此时 1 秒 6000 个请求全部落数据库,数据库必然扛不住,它会报一下警,真实情况可能DBA都没反应过来就直接挂了。此时,如果没用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。这就是我理解的缓存雪崩。 + + **我刻意看了下我做过的项目感觉再吊的都不允许这么大的QPS直接打DB去,不过没慢SQL加上分库,大表分表可能还还算能顶,但是跟用了Redis的差距还是很大** + + ![](https://user-gold-cdn.xitu.io/2019/11/3/16e30d2c5e17899c?w=574&h=500&f=png&s=38474) + + **同一时间大面积失效,那一瞬间Redis跟没有一样,那这个数量级别的请求直接打到数据库几乎是灾难性的,你想想如果打挂的是一个用户服务的库,那其他依赖他的库所有的接口几乎都会报错,如果没做熔断等策略基本上就是瞬间挂一片的节奏,你怎么重启用户都会把你打挂,等你能重启的时候,用户早就睡觉去了,并且对你的产品失去了信心,什么垃圾产品。** + + ### 面试官摸了摸自己的头发,嗯还不错,那这种情况咋整?你都是怎么去应对的? + + 处理缓存雪崩简单,在批量往**Redis**存数据的时候,把每个Key的失效时间都加个随机值就好了,这样可以保证数据不会在同一时间大面积失效,我相信,Redis这点流量还是顶得住的。 + + ```java + setRedis(Key,value,time + Math.random() * 10000); + ``` + + 如果**Redis**是集群部署,将热点数据均匀分布在不同的**Redis**库中也能避免全部失效的问题,不过本渣我在生产环境中操作集群的时候,单个服务都是对应的单个**Redis**分片,是为了方便数据的管理,但是也同样有了可能会失效这样的弊端,失效时间随机是个好策略。 + + 或者设置热点数据永远不过期,有更新操作就更新缓存就好了(比如运维更新了首页商品,那你刷下缓存就完事了,不要设置过期时间),电商首页的数据也可以用这个操作,保险。 + + ### 那你了解缓存穿透和击穿么,可以说说他们跟雪崩的区别么? + + 嗯,了解,我先说一下缓存穿透吧,缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,我们数据库的 id 都是1开始自增上去的,如发起为id值为 -1 的数据或 id 为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大,严重会击垮数据库。 + + **小点的单机系统,基本上用postman就能搞死,比如我自己买的阿里云服务** + + ![](https://user-gold-cdn.xitu.io/2019/11/3/16e30d1847df0faf?w=458&h=480&f=png&s=30569) + + **像这种你如果不对参数做校验,数据库id都是大于0的,我一直用小于0的参数去请求你,每次都能绕开Redis直接打到数据库,数据库也查不到,每次都这样,并发高点就容易崩掉了。** + + 至于**缓存击穿**嘛,这个跟**缓存雪崩**有点像,但是又有一点不一样,缓存雪崩是因为大面积的缓存失效,打崩了DB,而缓存击穿不同的是**缓存击穿**是指一个Key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个Key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个完好无损的桶上凿开了一个洞。 + + ![](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1572683877606&di=abb0c6a9d0acca45a729b7ab516c6e20&imgtype=0&src=http%3A%2F%2Fimg.juimg.com%2Ftuku%2Fyulantu%2F110214%2F6462-11021411045623.jpg) + + ### 面试官露出欣慰的眼光,那他们分别怎么解决 + + **缓存穿透**我会在接口层增加校验,比如用户鉴权校验,参数做校验,不合法的参数直接代码Return,比如:id 做基础校验,id <=0的直接拦截等。 + + **这里我想提的一点就是,我们在开发程序的时候都要有一颗“不信任”的心,就是不要相信任何调用方,比如你提供了API接口出去,你有这几个参数,那我觉得作为被调用方,任何可能的参数情况都应该被考虑到,做校验,因为你不相信调用你的人,你不知道他会传什么参数给你。** + + **举个简单的例子,你这个接口是分页查询的,但是你没对分页参数的大小做限制,调用的人万一一口气查 Integer.MAX_VALUE 一次请求就要你几秒,多几个并发你不就挂了么?是公司同事调用还好大不了发现了改掉,但是如果是黑客或者竞争对手呢?在你双十一当天就调你这个接口会发生什么,就不用我说了吧。这是之前的Leader跟我说的,我觉得大家也都应该了解下。** + + 从缓存取不到的数据,在数据库中也没有取到,这时也可以将对应Key的Value对写为null、位置错误、稍后重试这样的值具体取啥问产品,或者看具体的场景,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。 + + 这样可以防止攻击用户反复用同一个id暴力攻击,但是我们要知道正常用户是不会在单秒内发起这么多次请求的,那网关层**Nginx**本渣我也记得有配置项,可以让运维大大对单个IP每秒访问次数超出阈值的IP都拉黑。 + + ### 那你还有别的办法么? + + 还有我记得**Redis**还有一个高级用法**布隆过滤器(Bloom Filter)**这个也能很好的防止缓存穿透的发生,他的原理也很简单就是利用高效的数据结构和算法快速判断出你这个Key是否在数据库中存在,不存在你return就好了,存在你就去查了DB刷新KV再return。 + + 那又有小伙伴说了如果黑客有很多个IP同时发起攻击呢?这点我一直也不是很想得通,但是一般级别的黑客没这么多肉鸡,再者正常级别的**Redis**集群都能抗住这种级别的访问的,小公司我想他们不会感兴趣的。把系统的高可用做好了,集群还是很能顶的。 + + **缓存击穿**的话,设置热点数据永远不过期。或者加上互斥锁就能搞定了 + + **作为暖男,代码我肯定帮你们准备好了** + + ![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8mg8yjuyqj30ug0u0guk.jpg) + + + + ##面试结束 + + ### 嗯嗯还不错,三个点都回答得很好,今天也不早了,面试就先到这里,明天你再过来二面我继续问一下你关于Redis集群高可用,主从同步,哨兵等知识点的问题。 + + 晕居然还有下一轮面试!(强行下一期的伏笔哈哈)但是为了offer还是得舔,嗯嗯,好的帅气面试官。 + + 能回答得这么全面这么细节还是忍不住点赞 + + (**暗示点赞,每次都看了不点赞,你们想白嫖我么?你们好坏喲,不过我喜欢**) + + ## 总结 + + + + 我们玩归玩,闹归闹,别拿面试开玩笑。 + + 本文简单的介绍了,**Redis**的**雪崩**,**击穿**,**穿透**,三者其实都差不多,但是又有一些区别,在面试中其实这是问到缓存必问的,大家不要把三者搞混了,因为缓存雪崩、穿透和击穿,是缓存最大的问题,要么不出现,一旦出现就是致命性的问题,所以面试官一定会问你。 + + 大家一定要理解是**怎么发生的**,以及是怎么去**避免**的,发生之后又怎么去**抢救**,你可以不是知道很深入,但是你不能一点都不去想,面试有时候不一定是对知识面的拷问,或许是对你的态度的拷问,如果你思路清晰,然后**知其然还知其所以然**那就很赞,还知道怎么预防那来上班吧。 + + ### 最后暖男我继续给你们做个小的技术总结: + + 一般避免以上情况发生我们从三个时间段去分析下: + + - 事前:**Redis** 高可用,主从+哨兵,**Redis cluster**,避免全盘崩溃。 + - 事中:本地 **ehcache** 缓存 + **Hystrix** 限流+降级,避免** MySQL** 被打死。 + + - 事后:**Redis** 持久化 **RDB**+**AOF**,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。 + + 上面的几点我会在吊打系列Redis篇全部讲一下这个月应该可以吧Redis更完,限流组件,可以设置每秒的请求,有多少能通过组件,剩余的未通过的请求,怎么办?**走降级**!可以返回一些默认的值,或者友情提示,或者空白的值。 + + **好处:** + + 数据库绝对不会死,限流组件确保了每秒只有多少个请求能通过。 只要数据库不死,就是说,对用户来说,3/5 的请求都是可以被处理的。 只要有 3/5 的请求可以被处理,就意味着你的系统没死,对用户来说,可能就是点击几次刷不出来页面,但是多点几次,就可以刷出来一次。 + + **这个在目前主流的互联网大厂里面是最常见的,你是不是好奇,某明星爆出什么事情,你发现你去微博怎么刷都空白界面,但是有的人又直接进了,你多刷几次也出来了,现在知道了吧,那是做了降级,牺牲部分用户的体验换来服务器的安全,可还行?** + + + 好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是**人才**,我后面会每周都更新几篇《**吊打面试官**》系列和Java技术栈相关的文章。如果你有什么想知道的,也可以留言给我,我一有时间就会写出来,我们共同进步。 + + 非常感谢**靓仔/靓女**您能看到这里,如果这个文章写得还不错的话 **求点赞** **求关注** **求分享** **求留言** **(对我非常有用)**各位的支持和认可,就是我创作的最大动力,我们下篇文章见,拜了个拜! + + 敖丙 | 文 【原创】 + + ------ + +> 每周都会持续更新《吊打面试官》系列可以关注我的公众号第一时间阅读和催更,也可以在公众号回复【人才】加入人才交流群一起讨论面试题,就业和工作上有什么问题也可以直接滴滴我,我也是个新人,不过不影响我们一起进步,作为渣男,我给不了你工作,还给不了你温暖嘛? + +![](https://user-gold-cdn.xitu.io/2019/11/1/16e25fd86ba8a0db?w=900&h=500&f=png&s=185595) + \ No newline at end of file diff --git "a/docs/all/\347\274\223\345\255\230/redis/\350\257\276\344\273\243\350\241\250\346\200\273\347\273\223.md" "b/docs/all/\347\274\223\345\255\230/redis/\350\257\276\344\273\243\350\241\250\346\200\273\347\273\223.md" new file mode 100644 index 0000000..278dd85 --- /dev/null +++ "b/docs/all/\347\274\223\345\255\230/redis/\350\257\276\344\273\243\350\241\250\346\200\273\347\273\223.md" @@ -0,0 +1,63 @@ +> +> +> 你知道的越多,你不知道的越多 + +> 点赞再看,养成习惯 + +> **GitHub**上已经开源 [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和指教 + +## 絮叨 + +本来是没这期的,按道理更新也应该是在周一更新**消息队列**的幂等,分布式事务相关的文章,但是这篇**暖男**我**实在忍不住了**,不是发自己的文章,是帮**课代表**发一下,她本科是**北京交通大学**,也是**电子科技大学**的研究生。 + +**她**看了我的系列,做了个**笔记**📒,我一看,**偶买噶 !**。 + +**这是什么仙女啊**,这是我**第一次**有这种感觉,这笔记有着前**所未有的新鲜感**,细节的勾勒,让整个笔记更显出**奥妙.**...有些**不太成熟的话语**,跟我文章的**骚气**十分搭配,将**Redis**的性能衬托的更为出色,这才呈现出完美的**课代表笔记**。 + +这也是我第一次看到看个渣男的文章都做笔记的,这笔记让我有了初恋的味道,这我以后可得好好写了,不然**辜负**了**课代表这样认真的妹子**,到时候到杭州来找我:敖丙你个**渣男**乱写,害我没拿Offer! **我要杀了你**! + +我也不多BB了不影响大家食用了,**课代表**说了以后我写的**其他技术栈的笔记**一样会贡献出来,代价就是要嫁给我,呸呸呸,代价就是我以后帮他介绍大厂朋友内推下,看看简历呀,解答下职场问题啊什么的。(根本就是举手之劳啊,我血赚?) + +我一听我不能忍啊,我**气得拍桌子**,不行你以后不懂的知识点我包了,我也不懂的咳咳我看完书再包? + +哈哈开玩笑的,总之**课代表的精神**大家包括我都应该好好学学,这种人活该她拿**SSP**的Offer。 + +**Tip**:SSP (Special Offer 优秀生源Offer渠道 ) + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g94ru45jrfj30u01hob29.jpg) + +能总结得这么全面连我都忍不住**点赞**了! + +## 总结 + +里面很多细节的点还是需要完善的,课代表最近上课很忙帅丙我呢除了周末也没时间,不过会不断完善到GIt的,大家也可以去公众号回复「**课代表**」获取思维导图原稿。 + +其实我真的很欣赏课代表这样的精神的,她这样的举动**触动了我**,想想自己大学时候的样子,我忍不住给了自己两嘴巴子,我但凡有课代表一半的努力都不至于沦落到今天这样,等我冷静下来,走到了窗边,眺望头上若影若现的月亮,**我的眼角又湿了**! + +## 花絮 + +人才群里的人才真的都是**人才**,一周两更**高产似母猪**了我都,还天天**催更**不过我也认了,**课代表**进去差点把人家吓走,**这么好的课代表**吓走了我哪里找第二个? + +**GitHub**上有我联系方式和入群方式 [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g94qkzpjvnj30b40atjs9.jpg) + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g94qlkm935j30b40aojry.jpg) + +## 日常求赞 + +这期本来不想求赞的,但是我一想是**课代表**写的大家是给她赞,不是给我赞呀。 + +好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是**人才**。 + +我后面会每周都更新几篇《吊打面试官》系列和互联网常用技术栈相关的文章,非常感谢**人才**们能看到这里,如果这个文章写得还不错,觉得「课代表」**有点东西**的话 **求点赞👍** **求关注❤️** **求分享👥** 对暖男我来说真的 **非常有用**!!! + +创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见! + +敖丙&**课代表** | 文 【原创】【转载请联系本人】 如果本篇博客有任何错误,请批评指教,不胜感激 ! + +------ + +> 《吊打面试官》系列每周持续更新,可以关注我的公众号「 **JavaFamily** 」第一时间阅读和催更(公众号比博客早一到两篇哟),本文**GitHub**上已经收录[https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily),有一线大厂面试点思维导图,欢迎Star和完善,里面也有我个人联系方式有什么问题也可以直接找我,也有人才交流群,我们一起有点东西。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g92gbyipnjj30p00dw79c.jpg) \ No newline at end of file diff --git "a/docs/redis/Redis\351\233\206\347\276\244\351\253\230\345\217\257\347\224\250 \344\270\273\344\273\216 \345\223\250\345\205\265 \346\214\201\344\271\205\345\214\226.md" "b/docs/all/\347\274\223\345\255\230/redis/\351\233\206\347\276\244\351\253\230\345\217\257\347\224\250\343\200\201\345\223\250\345\205\265\343\200\201\346\214\201\344\271\205\345\214\226\343\200\201LRU.md" similarity index 93% rename from "docs/redis/Redis\351\233\206\347\276\244\351\253\230\345\217\257\347\224\250 \344\270\273\344\273\216 \345\223\250\345\205\265 \346\214\201\344\271\205\345\214\226.md" rename to "docs/all/\347\274\223\345\255\230/redis/\351\233\206\347\276\244\351\253\230\345\217\257\347\224\250\343\200\201\345\223\250\345\205\265\343\200\201\346\214\201\344\271\205\345\214\226\343\200\201LRU.md" index c45440e..ced4b03 100644 --- "a/docs/redis/Redis\351\233\206\347\276\244\351\253\230\345\217\257\347\224\250 \344\270\273\344\273\216 \345\223\250\345\205\265 \346\214\201\344\271\205\345\214\226.md" +++ "b/docs/all/\347\274\223\345\255\230/redis/\351\233\206\347\276\244\351\253\230\345\217\257\347\224\250\343\200\201\345\223\250\345\205\265\343\200\201\346\214\201\344\271\205\345\214\226\343\200\201LRU.md" @@ -277,21 +277,6 @@ M1所在的机器挂了,哨兵还有两个,两个人一看他不是挂了嘛 不出意外的话这是Redis的倒数第二期,最后一期不知道写啥还没想好,我得好好想想,加上最近不是双十一嘛得加加班,**你看看开头的我,多可怜,那还不点个赞?买个服务器**?不确定下一期多久出,想早点看到更新的小伙伴可以去公众号**催更**,公众号提前一到两天更新。 -### 实用推荐 - -对了,顺带推荐下近期很**超值**的**云服务器**,初学者或者大牛都可以买来学习,搭建项目啊,服务器的各种操作呀啥的,你总不能拿公司服务器练手吧,**rm-rf**一用所有人都会叫你大牛的,用我的链接买最低**80多一年,200三年**,说实话真香,这个钱不就是白*嘛,我直接用用老妈的号怼了个三年的。 - -(服务器搭建装**Mysql**,**Tomcat**啥的在公众号我转载我基友**Java3y**的文章[《手把手教你使用云服务器》](https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&tempkey=MTAzM19iOEQ3bC9oaHUyMSs0b1NvLVVrM0V4ZEhTME5TWVZ6aG1veUJKaFZGTGdkRW1fZjViSkVJYWVQZlY2VUhfMFVhNE1idk9GZVVTV2dwVXZiYVY1RzdiMF8yZTVMTVpyWFVnVy1zU2NKUGNzTUJFakp6VnV5Z3p6dWlxdDctNngxTTJqb1RMdDdVOGVEMEd5dG95OXN3bnpxS2Q1UHpBVDI2Q0pmYUJRfn4%3D&chksm=0cf2d7053b855e1386c6676607784f9ebdc784986b7962e9acc94737dd3aa7f623f5c234ad74&scene=0&xtrack=1&previewkey=tN%252BOLRtjEf42WJ4V%252BRz%252BzMNS9bJajjJKzz%252F0By7ITJA%253D#wechat_redirect)中有)! - -![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8p9gfjvgmj314f0u0n5d.jpg) - -[ 链接购买](https://www.aliyun.com/1111/2019/group-buying-share?ptCode=9C36CDC5F956AD0477AF1A3D19D3C328647C88CF896EF535&userCode=tybhsgp5&share_source=copy_link) **通过我的链接购买,新用户专享价,如果不是新用户的可以用家里人的账号购买** - -二维码购买 - -![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8p9gg764oj302s02sgli.jpg) - - ### END diff --git "a/docs/all/\347\274\223\345\255\230/\347\237\245\350\257\206\347\202\271\344\271\213\345\244\226\347\232\204\347\274\223\345\255\230\344\271\213\350\267\257.md" "b/docs/all/\347\274\223\345\255\230/\347\237\245\350\257\206\347\202\271\344\271\213\345\244\226\347\232\204\347\274\223\345\255\230\344\271\213\350\267\257.md" new file mode 100644 index 0000000..a7b5c2c --- /dev/null +++ "b/docs/all/\347\274\223\345\255\230/\347\237\245\350\257\206\347\202\271\344\271\213\345\244\226\347\232\204\347\274\223\345\255\230\344\271\213\350\267\257.md" @@ -0,0 +1,17 @@ + [缓存和数据库一致性问题](https://mp.weixin.qq.com/s/D4Ik6lTA_ySBOyD3waNj1w) + + [一个架构师的缓存修炼之路](https://mp.weixin.qq.com/s/Ls-Bld0Q6OQ1VD_az3iqbg) + + [再见了Antirez我永远的神](https://mp.weixin.qq.com/s/u3Ws1FGhJVIJdpM8IHI7OQ) + + [敖丙在蘑菇街的redis技术分享](https://mp.weixin.qq.com/s/xS2dqi5IG10AF7cHbzguAA) + + [课代表总结](https://mp.weixin.qq.com/s/lLTbL5YW0gIJu9Yx2T2OtA) + + [Redis最佳实践:7个维度+43条使用规范,带你彻底玩转Redis](https://mp.weixin.qq.com/s/8EN9vrZMhCK-40o_OdnOlg) + + [布隆过滤器过时了,未来属于布谷鸟过滤器?](https://mp.weixin.qq.com/s/XxY3b5FoVXCvHJWMxQH29g) + + [什么鬼,面试官竟然让敖丙用Redis实现一个消息队列!!?](https://mp.weixin.qq.com/s/5NOTLJ6AM3QJfhvXMSR-MA) + + [我最爱用的一款 Redis 可视化管理工具!好用到爆!!!](https://mp.weixin.qq.com/s/LDkcDO75gsivs04XXNLzTA) \ No newline at end of file diff --git "a/docs/all/\350\201\214\345\234\272\346\235\202\350\260\210.md" "b/docs/all/\350\201\214\345\234\272\346\235\202\350\260\210.md" new file mode 100644 index 0000000..26d26a9 --- /dev/null +++ "b/docs/all/\350\201\214\345\234\272\346\235\202\350\260\210.md" @@ -0,0 +1,49 @@ +[提离职,涨薪 走,别回头](https://mp.weixin.qq.com/s/1rUYxXbb0PaVOkmDQAxHpg) + + [我对外包的看法](https://mp.weixin.qq.com/s/lC6F1HVmAGQzXsFbpZz9Qw) + + [阿里五年老员工有什么话想对大家说?](https://mp.weixin.qq.com/s/9vPZd1q1vpKuE2qZazLQmA) + + [读研or工作?](https://mp.weixin.qq.com/s/Sn7_FcNW7Sq3WVm_LgwVrA) + + [敖丙的前前前同事因为几行代码坐牢了](https://mp.weixin.qq.com/s/UJVD7o-8-Oy0bWeceo7bcA) + + [应届毕业生工作7个月小结](https://mp.weixin.qq.com/s/XcrBvdlh1At_V42qfQZ9Kw) + + [蘑菇街被裁员工自述:若是有缘,江湖再见](https://mp.weixin.qq.com/s/WsMS30S1qDZCs-r5KaYmGA) + + [蘑菇街又裁员了](https://mp.weixin.qq.com/s/-axhH958qOS8daWULP11zA) + + [麻了,我的爱豆也塌房了](https://mp.weixin.qq.com/s/otVb5k76z5ejTAQZSXNpzg) + + [在国企里面当程序猿是一种怎样的体验?](https://mp.weixin.qq.com/s/HJ9wzgW6TAc6Cf6B8oZEdw) + + [跳槽季,应不应该跳,怎么跳?](https://mp.weixin.qq.com/s/enq_fh0hq2gMSgeXfunP6Q) + + [让你自制力提升300%的学习方法](https://mp.weixin.qq.com/s/vseVDxl3BjESeZsdKLd1eA) + + [教你在服务器搭建个人面试项目](https://mp.weixin.qq.com/s/D0bxHiXJKU64SinO1mh7Mw) + + [程序员只能吃青春饭?30岁后出路在何方?](https://mp.weixin.qq.com/s/MvA12XM_ZzOG_7ygTmzIfA) + + [学历对程序员重要么?](https://mp.weixin.qq.com/s/HafYjNNoBwuau-MI6W8EnQ) + + [有哪些事情是你成为程序员之后才知道的?](https://mp.weixin.qq.com/s/UIbINxc-lEktnXLJhLceZQ) + + [天天加班却不受重用,老板到底喜欢什么样的员工?](https://mp.weixin.qq.com/s/3VDS3tku0ZYZ4M_v760TEQ) + + [纵使社会虐我千百遍,我依然待它如初恋](https://mp.weixin.qq.com/s/RcL3Y6BZNSBQZJq8V3LCyw) + + [国家何时整治程序员的高薪现象?](https://mp.weixin.qq.com/s/10DvwjXysmGzLa6AoSsXNw) + + [大学毕业是去大城市好还是回小城市好?](https://mp.weixin.qq.com/s/-bva0Cako549qUqK5BIHkw) + + [大二那年,我发现学生思维在职场行不通](https://mp.weixin.qq.com/s/lr6qlbB6loJ1DMbdV-_Avw) + + [B站崩了,如何防止类似事故的出现?](https://mp.weixin.qq.com/s/UZyUclzkKIRhUM-8vioxvg) + + [每日灵魂拷问:“工作=有钱=快乐?”](https://mp.weixin.qq.com/s/QW8a0ULgSo9uNyswril3Fg) + + [比渣男pua更可怕的,是职场pua](https://mp.weixin.qq.com/s/zv3hhsjCSrzrFIe3rEZRYQ) + + [你热爱编程么?我先来:爱过](https://mp.weixin.qq.com/s/MFtq7jEqnhfi-3OnTCuY5g) \ No newline at end of file diff --git "a/docs/all/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/HTTP/HTTPS.md" "b/docs/all/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/HTTP/HTTPS.md" new file mode 100644 index 0000000..b0d51fd --- /dev/null +++ "b/docs/all/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/HTTP/HTTPS.md" @@ -0,0 +1,12 @@ +[图解HTTP协议](https://mp.weixin.qq.com/s/AK1Pb9rx0q5Hf8dq6HNOhw) + +[全网最透彻HTTPS(面试常问)](https://mp.weixin.qq.com/s/21JaXwdfSjItj5SgOwhapg) + + +[一文领略 HTTP 的前世今生](https://mp.weixin.qq.com/s/ljtDM1d2KgtxAAhwUFSHkg) + +[硬核!30 张图解 HTTP 常见的面试题](https://mp.weixin.qq.com/s/amOya0M00LwpL5kCS96Y6w) + +[面试 HTTP ,99% 的面试官都爱问这些问题](https://mp.weixin.qq.com/s/t7ZYT6wBBbFYVBPOSztpRg) + +[中间人攻击](https://mp.weixin.qq.com/s/Mi3zM-oyMoxxdzSlSnHpQQ) \ No newline at end of file diff --git "a/docs/all/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/TCP/IP.md" "b/docs/all/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/TCP/IP.md" new file mode 100644 index 0000000..46ef343 --- /dev/null +++ "b/docs/all/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/TCP/IP.md" @@ -0,0 +1,21 @@ + [万字长文 | 23 个问题 TCP 疑难杂症全解析](https://mp.weixin.qq.com/s/LUtk6u_zv0w8g8GIGWEuCw) + + [实战!敖丙用“大白鲨”让你看见 TCP](https://mp.weixin.qq.com/s/jTDU-zxP1INTYLpGLypjXQ) + + [面试官:换人!他连 TCP 这几个参数都不懂](https://mp.weixin.qq.com/s/ytV7RZSyFXyvPW_lKhv8hw) + + [TCP/IP 基础知识总结](https://mp.weixin.qq.com/s/lkX2Mb2aCj8ugOaRmVVBqw) + + [TCP 半连接队列和全连接队列满了会发生什么?又该如何应对?](https://mp.weixin.qq.com/s/tRXlq1hErqKQLMMLcxoXvg) + + [跟着动画学习TCP三次握手和四次挥手](https://mp.weixin.qq.com/s/NL7Jzh0lYoA395yzaGxBHw) + + [敖丙用近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题](https://mp.weixin.qq.com/s/rX3A_FA19n4pI9HicIEsXg) + + [你还在为 TCP 重传、滑动窗口、流量控制、拥塞控制发愁吗?看完图解就不愁了](https://mp.weixin.qq.com/s/HjOUsKn8eLfDogbBX3hPnA) + + [IP 基础知识“全家桶”,敖丙45 张图一套带走你](https://mp.weixin.qq.com/s/p9oA9YTZLoXVooUOSNQCMg) + + [敖丙听说你 ping 用的很 6 ?给我图解一下 ping 的工作原理!](https://mp.weixin.qq.com/s/3KF0IxLum8EOtcF0ZNIiPA) + + [一文搞定 UDP 和 TCP 高频面试题!](https://mp.weixin.qq.com/s/BK2H7JQIo6zOrXYg9RcbeA) \ No newline at end of file diff --git "a/docs/all/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\347\275\221\347\273\234\345\237\272\347\241\200.md" "b/docs/all/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\347\275\221\347\273\234\345\237\272\347\241\200.md" new file mode 100644 index 0000000..e12443c --- /dev/null +++ "b/docs/all/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234/\347\275\221\347\273\234\345\237\272\347\241\200.md" @@ -0,0 +1,9 @@ +[计算机网络](https://mp.weixin.qq.com/s/WfcozFAdXbOJ0EIcZEfLVg) + +[拔掉网线后, 原本的 TCP 连接还存在吗?](https://mp.weixin.qq.com/s/0YFsUWL6e9r_aDrCZeTK3w) + +[熬夜整理的20道计算机网络面试题](https://mp.weixin.qq.com/s/3FTuMZaUrT9Vw-ZScJkQbg) + +[什么是单点登录(SSO)](https://mp.weixin.qq.com/s/drPVkRbCsDIlX6Ls2pDmqA) + +[键入网址后,期间发生了什么?](https://mp.weixin.qq.com/s/I6BLwbIpfGEJnxjDcPXc1A) \ No newline at end of file diff --git "a/docs/all/\350\256\276\350\256\241\346\250\241\345\274\217\345\222\214\344\275\277\347\224\250\345\234\272\346\231\257.md" "b/docs/all/\350\256\276\350\256\241\346\250\241\345\274\217\345\222\214\344\275\277\347\224\250\345\234\272\346\231\257.md" new file mode 100644 index 0000000..5ba96fa --- /dev/null +++ "b/docs/all/\350\256\276\350\256\241\346\250\241\345\274\217\345\222\214\344\275\277\347\224\250\345\234\272\346\231\257.md" @@ -0,0 +1,30 @@ + +[单例模式](https://mp.weixin.qq.com/s/dW0L-PoBeTFHhD29HJO0BQ) + +[工厂模式](https://mp.weixin.qq.com/s/j42vn-A_rdWZP3aixXB8Ag) + +[流程引擎](https://mp.weixin.qq.com/s/b8xa3o4fKDme2438oJTakw) + +[建造者模式](https://mp.weixin.qq.com/s/h7iEyxgN34FPn191S8qUpA) + +[原型模式](https://mp.weixin.qq.com/s/fORmbucHuPVMS2z3q-mV3A) + +[责任链模式](https://mp.weixin.qq.com/s/l9EdvpAMukIDOgaN7x3b4w) + +[观察者模式](https://mp.weixin.qq.com/s/_hVGgJxefoVXFHFNXC-U6A) + +[策略模式](https://mp.weixin.qq.com/s/AFbt7VJMASenD2S8KbPKJQ) + +[策略模式2.0](https://mp.weixin.qq.com/s/HOnQf-S-w6A19tGnoIXBrg) + +[模板方法](https://mp.weixin.qq.com/s/oGm4ET-NDp4BSVi0p2MZxA) + +[迭代器模式](https://mp.weixin.qq.com/s/QHgg4CcU6VlA0gtzzQ_JLQ) + +[命令模式&中介者模式](https://mp.weixin.qq.com/s/dtmeTLsML6TYM8F8ch2FGQ) + +[对象池模式&解释器模式](https://mp.weixin.qq.com/s/a1kVL71OlUwZJrsyCE0I-A) + +[代理模式](https://mp.weixin.qq.com/s/lNw1yjn_xMOLpzbunaS10A) + +[使用Java8改造后的模板方法模式真的是yyds](https://mp.weixin.qq.com/s/O0sIOyE2rgTPyj54_QRx_g) \ No newline at end of file diff --git "a/docs/all/\351\233\206\345\220\210\346\241\206\346\236\266/ArrayList.md" "b/docs/all/\351\233\206\345\220\210\346\241\206\346\236\266/ArrayList.md" new file mode 100644 index 0000000..9137e80 --- /dev/null +++ "b/docs/all/\351\233\206\345\220\210\346\241\206\346\236\266/ArrayList.md" @@ -0,0 +1,3 @@ +[ArrayList](https://mp.weixin.qq.com/s/WoGclm7SsbURGigI3Mwr3w) + +[ArrayList源码解析,老哥,来一起复习一哈?](https://mp.weixin.qq.com/s/3PNWmtS-bEZgZjd9wyMiDA) \ No newline at end of file diff --git "a/docs/all/\351\233\206\345\220\210\346\241\206\346\236\266/ConcurrentHashMap.md" "b/docs/all/\351\233\206\345\220\210\346\241\206\346\236\266/ConcurrentHashMap.md" new file mode 100644 index 0000000..7d55468 --- /dev/null +++ "b/docs/all/\351\233\206\345\220\210\346\241\206\346\236\266/ConcurrentHashMap.md" @@ -0,0 +1,3 @@ +[ConcurrentHashMap & Hashtable(文末送书)](https://mp.weixin.qq.com/s/AixdbEiXf3KfE724kg2YIw) + +[我就知道面试官接下来要问我 ConcurrentHashMap 底层原理了](https://mp.weixin.qq.com/s/My4P_BBXDnAGX1gh630ZKw) \ No newline at end of file diff --git "a/docs/all/\351\233\206\345\220\210\346\241\206\346\236\266/HashMap.md" "b/docs/all/\351\233\206\345\220\210\346\241\206\346\236\266/HashMap.md" new file mode 100644 index 0000000..d90ae93 --- /dev/null +++ "b/docs/all/\351\233\206\345\220\210\346\241\206\346\236\266/HashMap.md" @@ -0,0 +1,6 @@ +[HashMap](https://mp.weixin.qq.com/s/0Gf2DzuzgEx0i3mHVvhKNQ) + + +[面试官:HashMap 为什么线程不安全?](https://mp.weixin.qq.com/s/VtIpj-uuxFj5Bf6TmTJMTw) + +[万万没想到,HashMap默认容量的选择,竟然背后有这么多思考!?](https://mp.weixin.qq.com/s/ktre8-C-cP_2HZxVW5fomQ) \ No newline at end of file diff --git "a/docs/all/\351\233\206\345\220\210\346\241\206\346\236\266/Vector.md" "b/docs/all/\351\233\206\345\220\210\346\241\206\346\236\266/Vector.md" new file mode 100644 index 0000000..0d52cd5 --- /dev/null +++ "b/docs/all/\351\233\206\345\220\210\346\241\206\346\236\266/Vector.md" @@ -0,0 +1 @@ + [面试官问我同步容器(如Vector)的所有操作一定是线程安全的吗?我懵了!](https://mp.weixin.qq.com/s/0cMrE87iUxLBw_qTBMYMgA) \ No newline at end of file diff --git "a/docs/all/\351\233\206\345\220\210\346\241\206\346\236\266/\345\237\272\347\241\200.md" "b/docs/all/\351\233\206\345\220\210\346\241\206\346\236\266/\345\237\272\347\241\200.md" new file mode 100644 index 0000000..2286a09 --- /dev/null +++ "b/docs/all/\351\233\206\345\220\210\346\241\206\346\236\266/\345\237\272\347\241\200.md" @@ -0,0 +1,5 @@ +[Java 集合框架看这一篇就够了](https://mp.weixin.qq.com/s/bVOSat47L0Hskfx9akAN6Q) + +[Java 集合中「堆」是啥?](https://mp.weixin.qq.com/s/eSCVJclB-IaJYkPKsWSkRA) + +[别这样创建集合了,非常容易内存泄露](https://mp.weixin.qq.com/s/pFnme5EPWNtfKspI4Y1W-w) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\346\212\200\345\267\247/\345\212\240\345\210\206\351\241\271.md" "b/docs/all/\351\235\242\350\257\225\346\212\200\345\267\247/\345\212\240\345\210\206\351\241\271.md" new file mode 100644 index 0000000..8e0fee9 --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\346\212\200\345\267\247/\345\212\240\345\210\206\351\241\271.md" @@ -0,0 +1 @@ + [面试官喜欢怎样的人](https://mp.weixin.qq.com/s/2mdcZnlTWCDYejGkZCdNOQ) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\346\212\200\345\267\247/\347\256\200\345\216\206.md" "b/docs/all/\351\235\242\350\257\225\346\212\200\345\267\247/\347\256\200\345\216\206.md" new file mode 100644 index 0000000..1faf4a8 --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\346\212\200\345\267\247/\347\256\200\345\216\206.md" @@ -0,0 +1,13 @@ + [简历怎么写?](https://mp.weixin.qq.com/s/0pNv6pMnenKn1A9PE61VnQ) + + [能不能好好写简历?](https://mp.weixin.qq.com/s/LxVeT49GMKu72PZJ-rDHpA) + + + [简历这样写,技术人都不直男了!](https://mp.weixin.qq.com/s/tl4DpsQPVh-bvlFzNsrzvw) + + [10个简历小技巧,成为面试战神](https://mp.weixin.qq.com/s/NyJ2gLDLIomlgkIFYWVvJg) + + [简历制作](https://mp.weixin.qq.com/s/1TPh2mEnSgZ2ZfccVUWicg) + + + [敖丙迟早被你们气死](https://mp.weixin.qq.com/s/KeIJDrHbMH_BRUKLnCqExw) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\346\212\200\345\267\247/\350\257\255\350\250\200\347\273\204\347\273\207.md" "b/docs/all/\351\235\242\350\257\225\346\212\200\345\267\247/\350\257\255\350\250\200\347\273\204\347\273\207.md" new file mode 100644 index 0000000..b5c9c03 --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\346\212\200\345\267\247/\350\257\255\350\250\200\347\273\204\347\273\207.md" @@ -0,0 +1,3 @@ + [自我介绍](https://mp.weixin.qq.com/s/br7Ak88kA5GkZ26hxwKUiw) + + [面试官希望你做怎样的自我介绍?](https://mp.weixin.qq.com/s/Pyi-lbocEr_vFeGxUkSl8A) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\346\212\200\345\267\247/\351\235\242\350\257\225\346\265\201\347\250\213.md" "b/docs/all/\351\235\242\350\257\225\346\212\200\345\267\247/\351\235\242\350\257\225\346\265\201\347\250\213.md" new file mode 100644 index 0000000..950f8d9 --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\346\212\200\345\267\247/\351\235\242\350\257\225\346\265\201\347\250\213.md" @@ -0,0 +1,3 @@ + [互联网公司面试流程 注意事项 加分点 防骗指南](https://mp.weixin.qq.com/s/jhmpG2bBb4aXoUJzahC0Rg) + + [互联网公司面试流程&加分点,别跟敖丙一样被无良HR坑了](https://mp.weixin.qq.com/s/7Rq8QR58Adi5WGHRlnhDeQ) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/bilibili.md" "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/bilibili.md" new file mode 100644 index 0000000..fd7af8b --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/bilibili.md" @@ -0,0 +1,3 @@ +[B站五面面经](https://mp.weixin.qq.com/s/tMPwanTRC3pj3X4Rx4SeTQ) + + [「面经」不小心拿到了B站意向书](https://mp.weixin.qq.com/s/VOVUQ2cbYX5UXrrWLIHFXQ) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\344\272\254\344\270\234.md" "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\344\272\254\344\270\234.md" new file mode 100644 index 0000000..82d7578 --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\344\272\254\344\270\234.md" @@ -0,0 +1 @@ + [京东二面:为什么需要分布式ID?你项目中是怎么做的?](https://mp.weixin.qq.com/s/-04X2NS165vedIGb85q7QQ) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\345\205\266\344\273\226.md" "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\345\205\266\344\273\226.md" new file mode 100644 index 0000000..c82d7bf --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\345\205\266\344\273\226.md" @@ -0,0 +1,7 @@ +[Java后端实习面经,电子科大大三读者投稿!看了之后感触颇深!很开心!](https://mp.weixin.qq.com/s/ttKI82_CQdMmxoBw8TS92g) + +[敖丙8年经验读者,疫情期间面20家大厂总结](https://mp.weixin.qq.com/s/AQvDX0n8wBBaWl2OmcpnrA) + +[被裁一个月面试的面经和经验分享](https://mp.weixin.qq.com/s/MkjSYc0JA1-VErX3lJzPmQ) + +[上岸哈工大!!](https://mp.weixin.qq.com/s/MNm3k1s8CrrI6vF-47cvcg) diff --git "a/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\345\233\275\344\274\201.md" "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\345\233\275\344\274\201.md" new file mode 100644 index 0000000..bd36247 --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\345\233\275\344\274\201.md" @@ -0,0 +1 @@ + [怎么面国企或银行?](https://mp.weixin.qq.com/s/d4OewL8-gCm_IkqDqufvsQ) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\345\244\226\344\274\201.md" "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\345\244\226\344\274\201.md" new file mode 100644 index 0000000..5831474 --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\345\244\226\344\274\201.md" @@ -0,0 +1,3 @@ + [Bigo的Java面试,我挂在了第三轮技术面上......](https://mp.weixin.qq.com/s/3_HnVzGm16zU2zhk7BnwFw) + + [我经历的7轮Google面试](https://mp.weixin.qq.com/s/yYy5YUeA3VAAQMtnMhaFUQ) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\345\255\227\350\212\202\350\267\263\345\212\250\351\235\242\350\257\225\351\242\230.md" "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\345\255\227\350\212\202\350\267\263\345\212\250\351\235\242\350\257\225\351\242\230.md" new file mode 100644 index 0000000..fd22252 --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\345\255\227\350\212\202\350\267\263\345\212\250\351\235\242\350\257\225\351\242\230.md" @@ -0,0 +1,17 @@ + [读者字节、滴滴面经(已拿offer)](https://mp.weixin.qq.com/s/sWtI7M8K1iajreEo3LtwIw) + + [敖丙读者只复习了半年,怒拿字节跳动Offer](https://mp.weixin.qq.com/s/g6qFbEWfJeahzuzjECuvDg) + + [春招字节跳动、蘑菇街四轮面试,分别问了啥?](https://mp.weixin.qq.com/s/xBC1IRr6v8hmIJ9lqCp5pQ) + + [蚂蚁金服2019实习生面经总结(已拿口头offer)](https://mp.weixin.qq.com/s/0opKiGbKjAfJkRVeVHzpZg) + + [2020 字节跳动后端面经分享!已拿 offer!](https://mp.weixin.qq.com/s/hr2pDs2wsiHQuDzW7jmOow) + + [百度、字节跳动等后台面经,已拿Offer!](https://mp.weixin.qq.com/s/BiaXzNw5rp69CPPNBRii3g) + + [学妹字节、蘑菇街、阿里、莉莉丝...面经](https://mp.weixin.qq.com/s/WOIkWLsA7fyyoHPyNT7HdQ) + + [双非本科逆袭 拿下ACM金牌、字节和旷视offer、保研985!](https://mp.weixin.qq.com/s/P2lTpC7yQ7VD8if_rMUcPg) + + [字节一面:“为什么网络要分层?每一层的职责、包含哪些协议?”](https://mp.weixin.qq.com/s/QNqbUI1jxOhlGQvGyssK2w) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\345\260\217\347\272\242\344\271\246.md" "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\345\260\217\347\272\242\344\271\246.md" new file mode 100644 index 0000000..c996b51 --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\345\260\217\347\272\242\344\271\246.md" @@ -0,0 +1 @@ +[小红书](https://mp.weixin.qq.com/s/3OTwlqCpJHEwtUvSQn1xmw) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\346\213\274\345\244\232\345\244\232\351\235\242\350\257\225\351\242\230.md" "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\346\213\274\345\244\232\345\244\232\351\235\242\350\257\225\351\242\230.md" new file mode 100644 index 0000000..bfa7cfd --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\346\213\274\345\244\232\345\244\232\351\235\242\350\257\225\351\242\230.md" @@ -0,0 +1 @@ + [读者一个月拿到阿里字节拼多多offer](https://mp.weixin.qq.com/s/kSiLvSrAMwrHLwxvesyjBw) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\346\240\241\346\213\233\351\235\242\350\257\225\351\242\230.md" "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\346\240\241\346\213\233\351\235\242\350\257\225\351\242\230.md" new file mode 100644 index 0000000..78d6ee2 --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\346\240\241\346\213\233\351\235\242\350\257\225\351\242\230.md" @@ -0,0 +1 @@ +[十道校招常见的面试题](https://mp.weixin.qq.com/s/wTKSvziyEXrSyf21iMjhZQ) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\347\231\276\345\272\246.md" "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\347\231\276\345\272\246.md" new file mode 100644 index 0000000..9987885 --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\347\231\276\345\272\246.md" @@ -0,0 +1,3 @@ + [二本读者实习遭领导歧视,逆袭进百度!](https://mp.weixin.qq.com/s/el7wBmABxzsUng_QLdUtaQ) + +[京东+百度一面,不小心都拿了Offer](https://mp.weixin.qq.com/s/VVonP6MgGRUnBnWa2ukkyw) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\347\275\221\346\230\223.md" "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\347\275\221\346\230\223.md" new file mode 100644 index 0000000..27e4386 --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\347\275\221\346\230\223.md" @@ -0,0 +1 @@ + [双非院校非科班的学弟,刚刚拿到了腾讯、网易、美团等大厂Offer](https://mp.weixin.qq.com/s/TzaV0dfbWw2zHiF55vq_kA) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\347\276\216\345\233\242.md" "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\347\276\216\345\233\242.md" new file mode 100644 index 0000000..54baa3f --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\347\276\216\345\233\242.md" @@ -0,0 +1,3 @@ + [美团面经](https://mp.weixin.qq.com/s/gSG_ZzZN7Ek2HEGtdi_Nkg) + + [3 年经验的 Java 后端妹子,横扫阿里、滴滴、美团,看完面经我觉得敖丙是垃圾!](https://mp.weixin.qq.com/s/oAnGGBkre7Z4VkhME-TgzQ) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\350\205\276\350\256\257\351\235\242\350\257\225\351\242\230.md" "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\350\205\276\350\256\257\351\235\242\350\257\225\351\242\230.md" new file mode 100644 index 0000000..39975f0 --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\350\205\276\350\256\257\351\235\242\350\257\225\351\242\230.md" @@ -0,0 +1,7 @@ + [苦修月余,斩获bigo、腾讯offer,面经奉上!](https://mp.weixin.qq.com/s/EOQafymh7xVtxblstTbQUA) + + [来自朋友最近阿里、腾讯、美团等P7岗位面试题](https://mp.weixin.qq.com/s/yb6MtKMrCl2rAUZVLIfJow) + + [研二师弟拿下微信 offer](https://mp.weixin.qq.com/s/0XJHz2seZAw4bDEA2i_i2Q) + + [腾讯二面:大白你了解共享内存吗?](https://mp.weixin.qq.com/s/BvV5HnwEOATPDFQoI4TYZA) \ No newline at end of file diff --git "a/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\351\230\277\351\207\214\345\267\264\345\267\264\351\235\242\350\257\225\351\242\230.md" "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\351\230\277\351\207\214\345\267\264\345\267\264\351\235\242\350\257\225\351\242\230.md" new file mode 100644 index 0000000..0e07548 --- /dev/null +++ "b/docs/all/\351\235\242\350\257\225\347\234\237\351\242\230&\351\235\242\347\273\217\345\210\206\344\272\253/\351\230\277\351\207\214\345\267\264\345\267\264\351\235\242\350\257\225\351\242\230.md" @@ -0,0 +1,25 @@ + [淘宝|蚂蚁|菜鸟|盒马|嘀嘀|饿了么面经(已拿多个offer)](https://mp.weixin.qq.com/s/oEGSxv5KuNI9BsCxpdi82A) + + [互联网寒冬,敖丙挚友7面阿里,终获Offer](https://mp.weixin.qq.com/s/gYpZCSYK3YYEvGFFeHdFJQ) + + [一道蚂蚁金服笔试题,还行,中等难度](https://mp.weixin.qq.com/s/16cZLY9_uJwhi50RJXknIg) + + [上岸腾讯 PCG 和阿里云!](https://mp.weixin.qq.com/s/zpdLHtqJN5H3iO0VMSzMJw) + + [一份还热乎的蚂蚁金服面经(已拿Offer)!附答案!!](https://mp.weixin.qq.com/s/HtLwChoLzqhbM4pKldLDng) + + [我和阿里面试官的一次“邂逅”(附问题详解)](https://mp.weixin.qq.com/s/-DZj158-LOQmnCayf1_n3A) + + [二本 两年经验读者 阿里P6面经](https://mp.weixin.qq.com/s/WOS6HMdt1-mAGuLiC30_-Q) + + [小姐姐面试蚂蚁金服被虐经历,心疼...](https://mp.weixin.qq.com/s/nzvg3e-RgM59zs9WSeUpLg) + + [一位读者小姐姐的阿里面经分享,快被问哭了!(附部分问题详解)](https://mp.weixin.qq.com/s/jnegDdp4OMSKynZl8OBIpw) + + [朋友怎样刚拿饿了么P7 offer,然后途虎一轮游的](https://mp.weixin.qq.com/s/e6MpOuxeZ53fAatNBhiC9A) + + [朋友离职了,一周面了 20 多场,新鲜面经奉上](https://mp.weixin.qq.com/s/muXoICVmoXxm3XNiNHB5lg) + + [阿里云二面:zookeeper一致性算法](https://mp.weixin.qq.com/s/J2is0iapoxn5ZuQySX9SKw) + +[敖丙读者一个月面试近20家大中小厂,在互联网寒冬突破重围,成功上岸阿里云 !](https://mp.weixin.qq.com/s/F2TiFw-LYFXMRj_hsD-TIw) \ No newline at end of file diff --git a/docs/basics/HashMap.md b/docs/basics/HashMap.md new file mode 100644 index 0000000..91908a9 --- /dev/null +++ b/docs/basics/HashMap.md @@ -0,0 +1,314 @@ + + +> 你知道的越多,你不知道的越多 + +> 点赞再看,养成习惯 + +> 本文 **GitHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 上已经收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 + +## 前言 + +作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚(**请允许我使用一下夸张的修辞手法**)。 + +于是在一个寂寞难耐的夜晚,我痛定思痛,决定开始写互联网技术栈面试相关的文章,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂Offer! + +所有文章的名字只是我的噱头,我们应该有一颗谦逊的心,所以希望大家怀着空杯心态好好学,一起进步。 + +### 正文 + +> 一个婀娜多姿,穿着衬衣的小姐姐,拿着一个精致的小笔记本,径直走过来坐在我的面前。 +> +> 看着眼前这个美丽的女人,心想这不会就是Java基础系列的面试官吧,真香。 +> +> 不过看样子这么年轻应该问不出什么深度的吧,嘻嘻。(哦?是么😏) + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pbe6ko1mj30hk0dedmn.jpg) + +> 小伙子,听前面的面试官说了,你Redis和消息队列都回答得不错,看来还是有点东西。 + +美丽迷人的面试官您好,您见笑了,全靠看了敖丙的《吊打面试官》系列,不然我还真的回答不上很多原本的知识盲区,他真的有点东西。 + +> 面试官心想:哦,吊打面试官是么,那今天我就让你知道,吊打这两个字怎么写的吧,年轻人啊,提前为你感到惋惜。 +> +> 嗯嗯小帅比,虽然前面的技术栈没啥太大的瑕疵,不过未来很长的一段时间我会用一期期的基础教你做人的,你要准备好哟! +> +> 好了我们开始今天的面试吧,小伙子你了解数据结构中的HashMap么?能跟我聊聊他的结构和底层原理么? + +切,这也太看不起我了吧,居然问这种低级问题,不过还是要好好回答。 + +嗯嗯面试官,我知道HashMap是我们非常常用的数据结构,由**数组和链表组合构成**的数据结构。 + +大概如下,数组里面每个地方都存了Key-Value这样的实例,在Java7叫Entry在Java8中叫Node。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pchhbrp3j30ez02ngli.jpg) + +因为他本身所有的位置都为null,在put插入的时候会根据key的hash去计算一个index值。 + +就比如我put(”帅丙“,520),我插入了为”帅丙“的元素,这个时候我们会通过哈希函数计算出插入的位置,计算出来index是2那结果如下。 + +> hash(“帅丙”)= 2 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pcqyo35ij30et03d0sq.jpg) + +> 你提到了还有链表,为啥需要链表,链表又是怎么样子的呢? + +我们都知道数组长度是有限的,在有限的长度里面我们使用哈希,哈希本身就存在概率性,就是”帅丙“和”丙帅“我们都去hash有一定的概率会一样,就像上面的情况我再次哈希”丙帅“极端情况也会hash到一个值上,那就形成了链表。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pd6ckj3dj30eq06mmx8.jpg) + +每一个节点都会保存自身的hash、key、value、以及下个节点,我看看Node的源码。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pcz67kemj30fv097759.jpg) + +> 说到链表我想问一下,你知道新的Entry节点在插入链表的时候,是怎么插入的么? + +**java8之前是头插法**,就是说新来的值会取代原有的值,原有的值就顺推到链表中去,就像上面的例子一样,因为写这个代码的作者认为后来的值被查找的可能性更大一点,提升查找的效率。 + +但是,**在java8之后,都是所用尾部插入了。** + +> 为啥改为尾部插入呢? + +这!!!这个问题,面试官可真会问!!!还好我饱读诗书,不然死定了! + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9qv6ra54qj3073073dfs.jpg) + +有人认为是作者随性而为,没啥luan用,其实不然,其中暗藏玄机 + +首先我们看下HashMap的扩容机制: + +帅丙提到过了,数组容量是有限的,数据多次插入的,到达一定的数量就会进行扩容,也就是resize。 + +> 什么时候resize呢? + +有两个因素: + +- Capacity:HashMap当前长度。 +- LoadFactor:负载因子,默认值0.75f。![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pdw39rwjj30xi056wf3.jpg) + +怎么理解呢,就比如当前的容量大小为100,当你存进第76个的时候,判断发现需要进行resize了,那就进行扩容,但是HashMap的扩容也不是简单的扩大点容量这么简单的。 + +> 扩容?它是怎么扩容的呢? + +分为两步 + +- 扩容:创建一个新的Entry空数组,长度是原数组的2倍。 +- ReHash:遍历原Entry数组,把所有的Entry重新Hash到新数组。 + +> 为什么要重新Hash呢,直接复制过去不香么? + +卧槽这个问题!有点知识盲区呀! + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9qv87tgslj306y05h74b.jpg) + +1x1得 1 1x2 得 2 .... 有了,我想起来敖丙那天晚上在我耳边的话了:假如我年少有为不自卑,懂得什么是珍贵,那些美梦没给你,我一生有愧....什么鬼! + +小姐姐:是因为长度扩大以后,Hash的规则也随之改变。 + +Hash的公式---> index = HashCode(Key) & (Length - 1) + +原来长度(Length)是8你位运算出来的值是2 ,新的长度是16你位运算出来的值明显不一样了。 + +扩容前: + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pe8mz5zvj30en05jq30.jpg) + +扩容后: ![](https://tva1.sinaimg.cn/large/006tNbRwly1g9ped28o4xj30m003jq2y.jpg) + +> 说完扩容机制我们言归正传,为啥之前用头插法,java8之后改成尾插了呢? + +卧槽,我以为她忘记了!居然还是被问到了! + +我先举个例子吧,我们现在往一个容量大小为2的put两个值,负载因子是0.75是不是我们在put第二个的时候就会进行resize? + +2*0.75 = 1 所以插入第二个就要resize了 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pgqt9dmvj30zy01i74i.jpg) + +现在我们要在容量为2的容器里面**用不同线程**插入A,B,C,假如我们在resize之前打个短点,那意味着数据都插入了但是还没resize那扩容前可能是这样的。 + +我们可以看到链表的指向A->B->C + +**Tip:A的下一个指针是指向B的** + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pkaxgg5ij305007odfr.jpg) + +因为resize的赋值方式,也就是使用了**单链表的头插入方式,同一位置上新元素总会被放在链表的头部位置**,在旧数组中同一条Entry链上的元素,通过重新计算索引位置后,有可能被放到了新数组的不同位置上。 + +就可能出现下面的情况,大家发现问题没有? + +B的下一个指针指向了A + + + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9phcpl968j309j054747.jpg) + +一旦几个线程都调整完成,就可能出现环形链表 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pkh8omjyj30al06pmx4.jpg) + +如果这个时候去取值,悲剧就出现了——Infinite Loop。 + + + +> 诶卧槽,小伙子难不倒他呀! +> +> ![](https://tva1.sinaimg.cn/large/006tNbRwly1g9qvbtqdxbg305k05ka9y.gif) +> +> 小伙子有点东西呀,但是你都都说了头插是JDK1.7的那1.8的尾插是怎么样的呢? + +因为**java8之后链表有红黑树**的部分,大家可以看到代码已经多了很多if else的逻辑判断了,红黑树的引入巧妙的将原本O(n)的时间复杂度降低到了O(logn)。 + +**Tip**:红黑树的知识点同样很重要,还是那句话**不打没把握的仗**,限于篇幅原因,我就不在这里过多描述了,以后写到数据结构再说吧,不过要面试的仔,还是要准备好,反正我是经常问到的。 + +**使用头插**会改变链表的上的顺序,但是如果**使用尾插**,在扩容时会保持链表元素原本的顺序,就不会出现链表成环的问题了。 + +就是说原本是A->B,在扩容后那个链表还是A->B + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9plftqim3j309f04y0sn.jpg) + +Java7在多线程操作HashMap时可能引起死循环,原因是扩容转移后前后链表顺序倒置,在转移过程中修改了原来链表中节点的引用关系。 + +Java8在同样的前提下并不会引起死循环,原因是扩容转移后前后链表顺序不变,保持之前节点的引用关系。 + +> 那是不是意味着Java8就可以把HashMap用在多线程中呢? + +我认为即使不会出现死循环,但是通过源码看到put/get方法都没有加同步锁,多线程情况最容易出现的就是:无法保证上一秒put的值,下一秒get的时候还是原值,所以线程安全还是无法保证。 + +> 小伙子回答得很好嘛,这都被你回答道了,面试这么多人都不知道头插和尾插,还是被你说出来了,可以可以。 + +面试官谬赞啊,要不是你这样**美若天仙**的面试官面试我,我估计是想不起来了。 + +> 我*,你套近乎? +> +> 小姐姐抿嘴一笑,小子你offer有了,耶稣都带不走你,我说的! +> +> ![](https://tva1.sinaimg.cn/large/006tNbRwly1g9qvf9i9lcj308o08k3yh.jpg) +> +> 那我问你HashMap的默认初始化长度是多少? + +我记得我在看源码的时候初始化大小是16 + +> 你那知道为啥是16么? + +卧*,这叫什么问题啊?他为啥是16我怎么知道???你确定你没逗我? + +我努力回忆源码,不知道有没有漏掉什么细节,以前在学校熬夜看源码的一幕幕在脑海里闪过,想起那个晚上在操场上,**跟我好了半个月的小绿**拉着我的手说:你就要当爸爸了。 + +等等,这都是什么鬼,哦哦哦,想起来了!!! + +**在JDK1.8的 236 行有1<<4就是16**,为啥用位运算呢?直接写16不好么? + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9plqfeg1pj3174054jsb.jpg) + +我再次陷入沉思,疯狂脑暴,叮! + +有了! + +面试官您好,我们在创建HashMap的时候,阿里巴巴规范插件会提醒我们最好赋初值,而且最好是2的幂。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pluoz10nj30py052gma.jpg) + +这样是为了位运算的方便,**位与运算比算数计算的效率高了很多**,之所以选择16,是为了服务将Key映射到index的算法。 + +我前面说了所有的key我们都会拿到他的hash,但是我们怎么尽可能的得到一个均匀分布的hash呢? + +是的我们通过Key的HashCode值去做位运算。 + +我打个比方,key为”帅丙“的十进制为766132那二进制就是 10111011000010110100 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pm4zheo1j30hc03yaac.jpg) + +我们再看下index的计算公式:index = HashCode(Key) & (Length- 1) + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pmcjsou4j30ca01mjrd.jpg) + +15的的二进制是1111,那10111011000010110100 &1111 十进制就是4 + +之所以用位与运算效果与取模一样,性能也提高了不少! + +> 那为啥用16不用别的呢? + +因为在使用不是2的幂的数字的时候,Length-1的值是所有二进制位全为1,这种情况下,index的结果等同于HashCode后几位的值。 + +只要输入的HashCode本身分布均匀,Hash算法的结果就是均匀的。 + +这是为了**实现均匀分布**。 + +> 哟小家伙,知道的确实很多,那我问你个问题,为啥我们重写equals方法的时候需要重写hashCode方法呢? +> +> 你能用HashMap给我举个例子么? + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9qvh4jpagj305i058745.jpg) + +这都能被他问到,还好我看了敖丙的系列呀,不然真的完了!!! + +但是我想拖延点时间,只能**故做沉思**,仰望天空片刻,45°仰望天空的样子,说实话,我看到面试官都流口水了!可惜我是他永远得不到的男人,好了不装逼了。 + +我想起来了面试官! + +因为在java中,所有的对象都是继承于Object类。Object类中有两个方法equals、hashCode,这两个方法都是用来比较两个对象是否相等的。 + +在未重写equals方法我们是继承了object的equals方法,**那里的 equals是比较两个对象的内存地址**,显然我们new了2个对象内存地址肯定不一样 + +- 对于值对象,==比较的是两个对象的值 +- 对于引用对象,比较的是两个对象的地址 + +大家是否还记得我说的HashMap是通过key的hashCode去寻找index的,那index一样就形成链表了,也就是说”帅丙“和”丙帅“的index都可能是2,在一个链表上的。 + +我们去get的时候,他就是根据key去hash然后计算出index,找到了2,那我怎么找到具体的”帅丙“还是”丙帅“呢? + +**equals**!是的,所以如果我们对equals方法进行了重写,建议一定要对hashCode方法重写,以保证相同的对象返回相同的hash值,不同的对象返回不同的hash值。 + +不然一个链表的对象,你哪里知道你要找的是哪个,到时候发现hashCode都一样,这不是完犊子嘛。 + +> 可以可以小伙子,我记得你上面说过他是线程不安全的,那你能跟我聊聊你们是怎么处理HashMap在线程安全的场景么? + +面试官,在这样的场景,我们一般都会使用**HashTable**或者**ConcurrentHashMap**,但是因为前者的**并发度**的原因基本上没啥使用场景了,所以存在线程不安全的场景我们都使用的是ConcurrentHashMap。 + +HashTable我看过他的源码,很简单粗暴,直接在方法上锁,并发度很低,最多同时允许一个线程访问,ConcurrentHashMap就好很多了,1.7和1.8有较大的不同,不过并发度都比前者好太多了。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9qwe91q6lj30zo0e440r.jpg) + +> 那你能跟我聊聊ConcurrentHashMap么? + +好呀,不过今天天色已晚,我觉得我们要不改天再约? + +再说最近敖丙好像双十二比较忙,一次怎么能怼这么多呢? + +> 好吧好吧,小伙子还挺会为别人着想,而且还喜欢这么优秀的作者,你我觉得来日可期,那我们改日再约,今天表现很好,希望下次能保持住! + +### 总结 + +**HashMap绝对是最常问的集合之一**,基本上所有点都要**烂熟于心**的那种,篇幅和时间的关系,我就不多介绍了,核心的点我基本上都讲到了,不过像红黑树这样的就没怎么聊了,但是不代表不重要。 + +篇幅和精力的原因我就介绍到了一部分的主要知识点,我总结了一些关于HashMap常见的面试题,大家问下自己能不能回答上来,不能的话要去查清楚哟。 + +HashMap常见面试题: + +- HashMap的底层数据结构? +- HashMap的存取原理? +- Java7和Java8的区别? +- 为啥会线程不安全? +- 有什么线程安全的类代替么? +- 默认初始化大小是多少?为啥是这么多?为啥大小都是2的幂? +- HashMap的扩容方式?负载因子是多少?为什是这么多? + +- HashMap的主要参数都有哪些? +- HashMap是怎么处理hash碰撞的? +- hash的计算规则? + +## 点关注,不迷路 + +好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是**人才**。 + +我后面会每周都更新几篇一线互联网大厂面试和常用技术栈相关的文章,非常感谢**人才**们能看到这里,如果这个文章写得还不错,觉得「敖丙」我**有点东西**的话 **求点赞👍** **求关注❤️** **求分享👥** 对暖男我来说真的 **非常有用**!!! + +创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见! + +敖丙 | 文 【原创】 + +如果本篇博客有任何错误,请批评指教,不胜感激 ! + +------ + +> 文章每周持续更新,可以微信搜索「 **三太子敖丙** 」第一时间阅读和催更(比博客早一到两篇哟),本文 **GitHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 已经收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 diff --git "a/docs/coderLife/\345\206\231\344\275\234\344\270\200\344\270\252\346\234\210\345\234\250\346\204\237\346\201\251\350\212\202\345\257\271\345\244\247\345\256\266\350\257\264\347\232\204\350\257\235.md" "b/docs/coderLife/\345\206\231\344\275\234\344\270\200\344\270\252\346\234\210\345\234\250\346\204\237\346\201\251\350\212\202\345\257\271\345\244\247\345\256\266\350\257\264\347\232\204\350\257\235.md" new file mode 100644 index 0000000..0e97424 --- /dev/null +++ "b/docs/coderLife/\345\206\231\344\275\234\344\270\200\344\270\252\346\234\210\345\234\250\346\204\237\346\201\251\350\212\202\345\257\271\345\244\247\345\256\266\350\257\264\347\232\204\350\257\235.md" @@ -0,0 +1,95 @@ + + +> 所谓活着并不是单纯的呼吸,心脏跳动,也不是脑电波,而是在这个世界上留下痕迹。 +> +> 要能看见自己一路走来的脚印,并确信那些都是自己留下的印记,这才叫活着。 +> +> +> +> 东野圭吾 《变身》 +> +> ![插画来自丑丑](https://tva1.sinaimg.cn/large/006y8mN6ly1g9cl6q9o9zj309o0b3q5i.jpg) +> +> + + + +本来今天是没文章的,RocketMQ周末写了60%发不出来,但是感觉日子特殊嘛我就熬夜写一下。 + +今天敖丙我不写技术,不知道在看我文章的你知道今天是什么节日嘛? + +上个月的今天我发了我在博客的第一篇文章,同时今天也是【感恩节】 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9cve67y0oj305n01bq2u.jpg) + +我身边熟悉的我人都知道,其实帅丙我是不过西方节日的,但是最近家里出了一些事嘛,而且也是自己工作第一年的结束,晚上上班的时候就多了很多感慨,走在路上思绪转的飞快想了很多(虽然公司走到家里我只用1分钟)。 + +回到家跟爸妈都发了很长很长的语音,看了看窗边,外面的风在肆虐着空气,凝望着天空。 + +想了很多东西说就准备在这样的节日跟大家闲聊一下。 + +老妈他们本来在越南工作的嘛,因为外婆身体突然不好,然后回老家去了,外婆身体一切ok的,后来老妈又说要动手术,而且老爸说检查要一个周,刚得知这个消息的我其实很爆炸,因为别人手术前检查几天就好了,但是老妈为啥要一礼拜。 + +我没跟老爸他们说我的担心,只是在地铁站接了电话出来后,在杭师大的操场上渡步,鼻子酸酸的,是的一个大男人哭了说出来真的很丢人。 + +这是我在杭州第三次哭泣了,像个弱者,第一次是因为实习交不起押一付三的房租,第二次是因为代码写太差和一些压力。 + +这一段我删了撤回,删了撤回,觉得丢人,但是最后大家还是看到了,反正男人嘛无所谓的。 + +回归主题嘛,今天是感恩节嘛,虽然我才毕业一年,但是这是我来杭州的第三年了,感慨还是很多的。 + +先说说家庭吧,我家条件就这样,平平淡淡,贵州的小山村嘛,经常跟群里的调侃,过年发不了文章不是我不发是没网,是的还是2g泪目。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9dghpyv9mj31400u0qv5.jpg) + +以前觉得父亲在同龄人中太平庸了,但是后来的我才知道,他付出了多少才撑起这个家,让自己读完大学,健康成长到现在。 + +母亲身体一直不好那种,但是她对家庭的付出跟老爸一样多,忍耐着父亲的脾气,我的幼稚,勤俭持家才有了现在的我回老家居住的环境,和我的一切。 + +其实在这样公开的平台说着这样的话,我觉得挺不好意思的,不过我想也没啥,我就是我,无可厚非,你就是你,也是我的朋友,不是嘛。 + +我就借助这样的日子把对煽情的话都说了吧哈哈,反正让我当面跟爸妈说也说不出口。 + +明早发了赶紧转发给他们哈哈。 + +友情提示:天冷了,大家记得也问候一下家人,一句话可能就让他暖得不行。 + +说一下我为啥写文章吧。 + +因为三歪的一句话吧:你真的很适合写文章。 + +记得是某段时间他对我经常说的,那时候回到家一直在纠结,就有了后来的系列。 + +其实他不说我现在应该是个B站up主吧哈哈,其实我装备都买了,视频都拍了一个了,但是没人看嘛。 + +因为我没啥时间拍摄,还有我上班也枯燥,剪辑也很一般般那种,就反正没人看,所以大家发现我文章里面的视频元素了么? + +开头的点赞在看养成习惯,结尾的求赞,求关注,求转发,还有文章里面我会融入很多自己风格的元素,其实是相当于写文章圆了自己up主的梦吧。 + +还好我写了文章没继续拍下去,不然现在应该还是那个关注只有7个的小敖丙吧。 + +再说一下写文章一个月以来的感受吧,其实有人喷过我,有人怼过我,但是都是少数,我性格就这样怼我,表面上我也就这样吧,其实还算在意,所有有时候三歪隔着桌子看我骂空气傻*。 + +不过说实话谢谢大家,更多的都是鼓励我,夸奖我的,有时候我都被你们夸奖得有点飘了,觉得我是那么回事了,但是我呢这个人能经常冷静下来,我还是我,那个刚毕业一年的我,那个23岁不大不小的我。 + +《吊打面试官》是我最开始就定的名字,但是很多读者就问我看了是不是就能吊打面试官了,看了是不是就无敌了。 + +不能,不是! + +我取很多标题都是为了噱头,我甚至多次想改掉了,不过写了也不少了,就没改,但是我想让大家认知正确,我刚开始学软件,我的姐就告诉我要有空杯心态,我希望大家也是一样,用一颗谦逊的心,对待每个未知事物。 + +面试官能面试你,肯定有人家的原因的,或许你的知识广度够但是你确定你有他深度?又或者你深度够,你能有他广度?有些东西是必须时间积累的,慢慢你们会明白的。 + +各个平台收获了不少粉丝,有开心也有烦恼,很多东西我可能比大家接触多点,因为电商嘛场景本身就很丰富,但是大家也不要忘记我也没工作多久,我好多技术栈的深度也不够,所以很多人的问题其实我也不是很懂,那问题就来了,我怎么做到文章的技术栈都有深度呢? + +臣妾做不到。 + +是的短期我想我做不到,没长时间的积累我想我还是不敢写很深的东西给大家看,只能把我已知的只是点展示给大家看,写知识扫盲,趣味学东西为主的文章,这也是为啥每期我会让阿里系或者身边的大佬朋友review一遍的原因。 + +所以文章里面那句我们一起进步,并不是我的自谦,是我的自我认知。 + +Tip:这篇文章啥干货都没,所以没前言,没正文,没求赞,甚至没排版。 + +接下去到年底的日子,会有双十二,双旦,年会Vlog视频等一大堆事情,我有拖更的预感了,别怪我没提醒你们哟。 + +最后也在这样的节日,感谢大家,谢谢你们看我的文章,夜深了,我们下篇文 diff --git "a/docs/creative/\344\273\243\347\240\201\345\210\233\346\204\217\345\244\247\350\265\233.md" "b/docs/coderLife/\346\225\226\344\270\231\347\224\25020\350\241\214\344\273\243\347\240\201\346\213\277\344\272\206\346\257\224\350\265\233\345\206\240\345\206\233.md" similarity index 99% rename from "docs/creative/\344\273\243\347\240\201\345\210\233\346\204\217\345\244\247\350\265\233.md" rename to "docs/coderLife/\346\225\226\344\270\231\347\224\25020\350\241\214\344\273\243\347\240\201\346\213\277\344\272\206\346\257\224\350\265\233\345\206\240\345\206\233.md" index 856d75b..0b2bbeb 100644 --- "a/docs/creative/\344\273\243\347\240\201\345\210\233\346\204\217\345\244\247\350\265\233.md" +++ "b/docs/coderLife/\346\225\226\344\270\231\347\224\25020\350\241\214\344\273\243\347\240\201\346\213\277\344\272\206\346\257\224\350\265\233\345\206\240\345\206\233.md" @@ -246,5 +246,3 @@ ------ > **《吊打面试官》**系列每周持续更新,可以关注我的公众号**JavaFamily**第一时间阅读和催更(**公众号比博客早一到两天哟**),里面也有我个人微信有什么问题也可以直接滴滴我,我们一起进步。 - -![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8p9gftfchj30p00dwjuj.jpg) \ No newline at end of file diff --git "a/docs/coderLife/\346\225\231\344\275\240\345\234\250\346\234\215\345\212\241\345\231\250\346\220\255\345\273\272\344\270\252\344\272\272\351\235\242\350\257\225\351\241\271\347\233\256.md" "b/docs/coderLife/\346\225\231\344\275\240\345\234\250\346\234\215\345\212\241\345\231\250\346\220\255\345\273\272\344\270\252\344\272\272\351\235\242\350\257\225\351\241\271\347\233\256.md" new file mode 100644 index 0000000..3c156bd --- /dev/null +++ "b/docs/coderLife/\346\225\231\344\275\240\345\234\250\346\234\215\345\212\241\345\231\250\346\220\255\345\273\272\344\270\252\344\272\272\351\235\242\350\257\225\351\241\271\347\233\256.md" @@ -0,0 +1,279 @@ +> 你知道的越多,你不知道的越多 + +> 点赞再看,养成习惯 + +> **GitHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily)上已经收录有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和指教 + +## 前言 + +群里不知道多少次大家说自己的**项目没亮点**,在大学没项目出去后**怕找不到工作**,问敖丙我实习的时候是怎么拿的华为Offer。 + +其实大学的项目很简单不需要太大的难度,因为面试官知道你也没啥经验,不会很在意这个,但是你得有项目这是必要条件,再不济**增删改查你要比别人6**吧,不然找个0经验的人进去,不是给他自己挖坑? + +而且如果你有个还不错的履历,或者你的项目还有一些**亮点**,那完美了,你的Offer率会拉开同行的仔一大截的。 + +丙帅我呢大学做过几个项目,前些天问了问学妹,还在学校稳定运行着,说实话我有点小骄傲了。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9jxc2d5p6j306y06y0ss.jpg) + +但是说实话,我拿华为Offer跟这些项目关系不大,大学时候完成的项目完全是兴趣使然,想起当初自己一个人在室友还没起床的时候去图书馆,在室友都睡觉的时候还没回去的时光,我的眼角又湿了。 + +**Tip**:怎么拿的Offer我会在《程序人生》系列写,过年前或者后面出个我大学到现在的心路历程哈哈。 + +当时在电子阅览室当管理员,甚至多次为了赶进度,在图书馆通宵达旦,好在最后还是完成了那个项目,自己一个人从前端到服务端,从研发到部署上线。 + +大家都知道学校选课用选课系统的时候,很多学校给第三方公司做的系统都很卡,敖丙做的项目就不卡,因为那个时候我就用到Redis了,现在想想设计思想还算前卫。 + +好了吹了这么多,其实就是为了引出今天的主题,**如何从0到1搭建一个可以外网访问的项目**。 + +很多小伙伴看到最后要说了,丙丙我要学的是**分布式**,才不要学垃圾的单机系统。 + +分布式不就是一个单机的服务构成的,你多起几个进行RPC通信不就好了? + +## 正文 + +双十二阿里服务器推广,不买的小伙伴直接跳过这段,不过用来学习真的香,**比学生的9.9每月还便宜**。 + +**[我帮阿里云推广服务器89/年,229/3年,买来送自己,送女朋友马上过年再合适不过了,买了搭建个项目给面试官看也香,还可以熟悉技术栈,我明天会出一个服务器搭建个人项目的教程(老用户用家人的购买,我用我妈的😂)。扫码或者点击购买](https://www.aliyun.com/minisite/goods?userCode=tybhsgp5&share_source=copy_link)** + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9jmxonfwfj302s02sgld.jpg) + +我就用自己的服务器给大家举例,怎么从0到1搭建一个学生和新手可以用来面试的项目,老手也可以回忆一下自己逝去的青春。 + +可能有小伙伴疑惑,丙丙为啥要服务器,本地不行么? + +可以,当然不是为了推广服务器哈,大家可以不买,我只是阐述一下自己的观点,因为大家以后出去难免遇到自己操作服务器的情况,有些公司没有集成发布系统,那就需要你亲自去机器上操作了。 + +然后你rm -rf ,好了去财务室领下工资吧,年底了,提前回家过年可还行? + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9jwfn0qucg308c056nix.gif) + +开玩笑的哈,只是很多操作大家不经常熟悉其实会都不知道,真正去操作或者面试官问你,熟悉各种操作么,你说不熟悉,好的回去等消息。 + +作为面试官,面试没多少经验的你,他更看重你思考的思路,还有你有没有实操过,务实么? + +帅丙我大学的项目就是经常操作,所以后面很长一段时间的服务器操作,还有Linux命令啥的都还是不错的,技术栈搭建起来也是很熟悉,不过最近都是用的公司的工具,命令忘了好多了,需要反省一下了。 + +服务器在激活的时候会让你选系统,这个时候敖丙我个人建议,**有点基础**已经**熟悉安装过程和环境配置**的同学可以直接选择镜像,镜像市场里面有很多很适合的镜像,我选的就是带JDK8,Tomcat8,MySQL的镜像。 + +没搞过的同学可以尝试着选个空白机,然后下好这些东西,一步步去尝试,我想收获还是会有的,**跟你在自己电脑搭建的区别你会马上体会到**,这就是为啥建议大家去服务器操作的原因之一。 + +### 镜像选择 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9h35s5lulj30p10baq4b.jpg) + +镜像**记得选不要钱的**,一般都是免费的。 + +![镜像市场](https://tva1.sinaimg.cn/large/006tNbRwly1g9h3664wnqj30pi0h1426.jpg) + +选完你在**实例**就可以看到自己的服务器了,下面就是帅丙的服务器,居然跟我一样帅,天呐。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9h37h8hrsj31hb0eidij.jpg) + +上面都是新搭建的小伙伴,已经有服务器的小伙伴,但是又想换成镜像怎么办? + +大家**先把服务停掉**然后点击右边的**更换操作系统**就好了,会让你去镜像市场选的,之前你选了什么系统都可以换。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9jqvjvpxrj30bp0c3wf8.jpg) + +### 登录服务器 + +可以直接在管理界面网页登录服务器远程链接,也可以自己本地用对应的控制台工具连接。 + +个人推荐本地的控制台连接会好点,每次要登录服务器都要去网页很麻烦的。 + +![网页端查看](https://tva1.sinaimg.cn/large/006tNbRwly1g9h38pgln7j31ha0co0tl.jpg) + +远程链接的代码,记住是大家的公网ip,管理界面看得到的,要记得你购买的时候配置的密码,因为这个时候要输入。 + +> ssh root@123.14.123.8 -p 22 (后面的22是个端口,后面我介绍到) + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9jsgz4fy9j30m607p3zb.jpg) + +![本地直连](https://tva1.sinaimg.cn/large/006tNbRwly1g9h39violrj30js04iaa3.jpg) + +到这一步的时候,很多小伙伴直接登录成功,但是之前就已经有服务器的朋友是不发现,出现下面这个页面了? + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9h3aia50bj310w0dejtx.jpg) + 会出现这些信息是因为,第一次SSH连接时,会生成一个认证,储存在客户端(也就是用SSH连线其他电脑的那个,自己操作的那个)中的known_hosts,但是如果服务器验证过了,认证资讯当然也会更改,服务器端与客户端不同时,就会跳出错误啦~因此,只要把电脑中的认证资讯删除,连线时重新生成,就一切完美啦~要删除很简单,只要在客户端输入一个指令 + +> ssh-keygen -R +输入服务器的IP + + 接下来再次连接一次,会出现 + +> Are you sure you want to continue connecting (yes/no)? + + 输入yes! + 就完成连接啦!同时,新的认证也生成了。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9h3brnwi2j30ri07gdgl.jpg) + +进去后如果是镜像的小伙伴会发现本身他准备好的东西都在了,环境都搭建起来了,大家只管直接使用就好了。 + +但是如果没有选择镜像的朋友,就需要自己搭建一个FTP或者使用传输命令去把你下载好的Tomcat、MySQL等传输进来安装好。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9h3cnassnj30v20m8mzp.jpg) + +大家可以看到还**有一个默认密码文件夹**,里面就有MySQL和FTP的账号密码什么的,不同的镜像可能有差异。 + +这个在之后大家自己的服务写代码的时候,配置连接本地的MySQL就是需要这个的。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9h3oaeztjj30og0dkjsq.jpg) + +### 博客网站 + +这次教大家搭建的项目说大不大,说小吧他啥都有,反正小白和学生肯定很适合,是个个人博客网站。 + +我们先看看博客的效果,看看大家作为大学的项目到底合格么? + +我大学做的那个项目比起这个就差点意思了,当时要是有这么好的UI就很香了! + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9jrwgmxxkj30n60cwmzj.jpg) + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9jrwoy9w2j30n40csgqo.jpg) + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9jrx2exzaj30mu0cr7ap.jpg) + +### 项目代码 + +以我这种直男审美都觉得UI很不错,你以为只是UI可以?那我们看看项目! + +项目的Git地址 https://github.com/halo-dev/halo.git 大家克隆一下就好了。 + +这个项目本身是**Gradle**的,很多小伙伴就要说了,啊帅丙我不要,我就要**Maven**项目的。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9jxqgsd1tj306y04xa9x.jpg) + +我只想告诉大家,**技多不压身**,目前很多大厂都是Maven项目Gradle项目都占有很高的比重,你怎么知道你去的公司会用啥? + +你会用进去**减少多少学习的成本**啊,Leader在旁边暗自给你比一个大拇指,暗自感叹:**帅丙的读者,有点东西**。 + +Mac很多小伙伴安装的时候发现没有**Homebrew** 就没办法用很方便的命令行去下载安装Gradle,那简单我们安装一下,用下面的命令。(Windows的朋友直接官网下载一个就好了 [https://gradle.org/install](https://gradle.org/install/)) + +```java +/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" +``` + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9js171tr5j30uy0h00w9.jpg) + +这个安装好了,我们再用下面的命令就可以就把Gradle安装好了,是不是比你去下载方便很多? + +```java +$ brew install gradle +``` + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9js3ouolkj30v0062q43.jpg) + +接下来去项目中设置下Gradle地址,这里介绍的是IDEA的设置 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9js7gqmmwj319w0bmtal.jpg) + +### 为啥推荐个人博客项目? + +很多人问我为啥推荐这个项目,这个项目看过次代码了,**没有啥语法错误**,**项目结构**完全**标准**的项目,**注释也很齐全**,**代码的风格挺不错**的,还是 **用了很多新语法和注解**。 + +而且他也**不难理解**,**结构很简单**,前端后端都很简单,大家看看代码,看看前后的接口,很快就能适应这个项目了。 + +![后端](https://tva1.sinaimg.cn/large/006tNbRwly1g9js917q9kj31c00u0dw6.jpg) + +![前端](https://tva1.sinaimg.cn/large/006tNbRwly1g9jsajq5ilj31c00u07j6.jpg) + +接下来我们可以用项目去打个包,或者直接下载敖丙打包好的。(jar包还有war包随意) + +### 用命令行下载最新的 Halo 安装包 + +``` +curl -L https://github.com/halo-dev/halo/releases/download/v1.1.1/halo-1.1.1.jar --output halo-latest.jar +``` + +或者 + +``` +wget https://github.com/halo-dev/halo/releases/download/v1.1.1/halo-1.1.1.jar -O halo-latest.jar +``` + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9hab3je2aj31580u047k.jpg) + +文件传输呢,帅丙我习惯命令行了,FTP这样的工具还是不适应,我就发下命令行是怎么把jar包从本地传输到服务器的。 +``` +scp -P 22 /Java/program.war root@123.456.789.987:/usr/server/tomcat7/webapps/ +``` +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9hciidvt6j30w007o755.jpg) + +我们进入机器去看一下,文件已经传输进来了。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9hbw2lkelj30p203smye.jpg) + +因为是一个SpringBoot项目,你只要有JDK直接就能跑起来了。 + +```bash +java -jar halo-latest.jar +``` + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9hbxrpa1bj322m0u0k5x.jpg) + +然后大家访问下自己的 ip+端口(8090)就能看到项目了 + +然后很多小伙伴说,渣男,我的怎么不行? + +稍等稍等,敖丙啊还正准备说呢,大家的端口默认就开通了 22 、-1、3389 + +22是不是很熟悉,就是开头我们链接的端口号→ ssh root@123.14.123.8 -p **22** 也是因为厂商默认给我们开通了,我们才可以直接链接的。 + +但是我们要访问别的端口,那就去开通嘛,**记得入口出口一样都要开通哟**! + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9jshoa2lvj305t07s74e.jpg) + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9jsi75jjpj31ao0bi413.jpg) + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9jsieug2rj305501lt8k.jpg) + +然后重启下机器,重新启动项目,是不是!!!可以访问了???我们先注册一下 + +![注册](https://tva1.sinaimg.cn/large/006tNbRwly1g9hcmha8v9j312c0nign3.jpg) + +然后再登录进去。 + +![登录](https://tva1.sinaimg.cn/large/006tNbRwly1g9hcm3scw2j30yt0kxgms.jpg)可以看到校验的异常什么的都直接日志抛出的,项目我觉得对于学生和新手来说很香,里面的代码风格大家也多适应一下。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9hco94fd6j31sc0men5k.jpg) + +登录进去我们可以发现,功能很全,博客网站基本的结构都在了。 + +有个不成熟的猜想,还没毕业设计的朋友。。。。😂 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9hdfdpmcyj31g30orjtr.jpg) + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9hdi14hb9j31b30oldi8.jpg) + +## 絮叨 + +看到这里很多小伙伴可能会说你就是为了推广服务器才写的吧,我说实话有一定的成分,但是更多是因为我自己的群里,经常有很多小伙伴对**项目的整个搭建流程不是很熟悉**,所以才出这样的一篇文章的。 + +这里只是一个单机的项目,大家真正部署的时候要体验别的技术栈可以去Git上下载下来部署上去,体验他整个部署流程,**中间肯定很多不顺利的地方**相信我,100000%不会一次成功,但是你慢慢摸索的过程就是你学习的收获的过程。 + +大家经常问我那些大佬怎么成长上去的,**踩坑和付出大量实践上去的**,别无他法。 + +我老东家的Leader 95年的,是我们之前公司前端后端的Leader,技术深度广度,业务深度都领人发指,怎么做到的? + +简单,**不断踩坑学习**咯,每天都是凌晨回去,白天开会,晚上写代码,甚至还要挤出时间学习新的业务,技术栈也是不断自己去摸索。 + +之前他一手带的我,我跟他太熟悉了,买了早餐刚坐下就去开会讨论业务,晚上6点回来就说:诶鸡蛋豆浆都冷了啊,然后丢垃圾桶。 + +学习是一条令人时而喜极若狂、时而郁郁寡欢的道路。 + +成长路上我们一起共勉。 + +## 日常求赞 + +好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是**人才**。 + +我后面会每周都更新几篇一线互联网大厂面试和常用技术栈相关的文章,非常感谢**人才**们能看到这里,如果这个文章写得还不错,觉得「敖丙」我**有点东西**的话 **求点赞👍** **求关注❤️** **求分享👥** 对暖男我来说真的 **非常有用**!!! + +创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见! + +敖丙 | 文 【原创】【转载请联系本人】 如果本篇博客有任何错误,请批评指教,不胜感激 ! + +------ + +> 文章每周持续更新,可以关注我的公众号「 **JavaFamily** 」第一时间阅读和催更(公众号比博客早一到两篇哟),本文**GitHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 上已经收录,有一线大厂面试点思维导图,欢迎Star和完善,里面也有我个人联系方式有什么问题也可以直接找我,也有**技术交流群**,我们一起有点东西。 diff --git "a/docs/coderLife/\350\256\260\344\270\200\346\254\241\345\267\256\347\202\271\345\256\263\346\225\226\344\270\231\344\270\242\345\267\245\344\275\234\347\232\204\347\232\204\347\272\277\344\270\212P0\344\272\213\346\225\205.md" "b/docs/coderLife/\350\256\260\344\270\200\346\254\241\345\267\256\347\202\271\345\256\263\346\225\226\344\270\231\344\270\242\345\267\245\344\275\234\347\232\204\347\232\204\347\272\277\344\270\212P0\344\272\213\346\225\205.md" new file mode 100644 index 0000000..317248d --- /dev/null +++ "b/docs/coderLife/\350\256\260\344\270\200\346\254\241\345\267\256\347\202\271\345\256\263\346\225\226\344\270\231\344\270\242\345\267\245\344\275\234\347\232\204\347\232\204\347\272\277\344\270\212P0\344\272\213\346\225\205.md" @@ -0,0 +1,389 @@ +> 你知道的越多,你不知道的越多 + +> 点赞再看,养成习惯 + +> **GitHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily)上已经收录有一线大厂面试点脑图、个人联系方式和技术交流群,欢迎Star和指教 + +## 前言 + +这是帅丙真实事件,大家都知道很多公司都是有故障等级这么一说的,这就是敖丙在公司背的P0级故障,敖丙差点因此**被解雇**,事情经过**十分惊心动魄**,我的**心脏病都差点复发**。 + +> 事故等级主要针对生产环境,划分依据类似于bug等级。 +> +> P0属于最高级别事故,比如崩溃,页面无法访问,主流程不通,主功能未实现,或者在影响面上影响很大(即使bug本身不严重)。 +> +> P1事故属于高级别事故,一般属于主功能上的分支,支线流程,核心次功能等,后面还有P2,P3等,主要根据企业实际情况划分。 + + + +### 正文 + +敖丙之前也负责公司的商品搜索业务,因为业务体量增速太快了,商品表中的商品数据也很快跃入千万级别,查询的RT(response time 响应时间)也越来越高了,而且产品说需要根据**更多维度去查询商品**。 + +因为之前我们都是根据商品的名称去查询的,但是电商其实都会根据很多个维度去查询商品。 + +就比如大家去淘宝的查询的时候就会发现,你搜商品名称、颜色、标签等等多个维度都可以找到这个商品,就比如下图的搜索,我只是搜了【**帅丙**】你会发现,名字里面也没有连续的帅丙两个字,有帅和丙的出来了 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9ksvacqjpj30jg0hv12w.jpg) + +大家知道的传统的关系型数据库都是用什么 name like %帅丙% 这样的方式查询的,而且查询出来的结果肯定只能是name里面带帅丙的对吧。 + +那你还想搜别的字段比如什么尺寸、关键词、价格等等,都能搜到帅丙,这相当于是多个维度的了,传统的关系型数据库做不到呀。 + +做技术选型的时候,帅丙第一时间想到了搜索引擎。 + +当时市面是比较流行的有:**Apache Lucene**、**Elasticsearch**、**Solr** + +搜索引擎我后面会讲**ELK(Elasticsearch、Logstash、Kibana)**和**Canal**,我呀真的是太宠你们了,这样会不会把你们惯坏了。 + +帅丙我呀,噼里啪啦一顿操作,最后得出结论: + +> 相对来讲,如果考虑静态搜索,Sorl相对更合适。 +> +> 如果考虑实时,涉及到分布式,Elasticsearch相对合适。 + +那我们商品还是要实时的呀,你后台改了价格啥的,是不是都要实时同步出去,不然不是炸了嘛。 + +看到这,我想**可爱的你**和帅丙心中都有了答案:Elasticsearch这是个神一样的引擎。 + +我这里就做一个简单的介绍就好了,细节的点我们后面去他的章节讲,啥都写了,敖丙哪里有这么多素材写文章? + +> ElasticSearch是一个基于Lucene的搜索服务器。 +> +> 它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。 +> +> Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。 +> +> ElasticSearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。 +> +> 根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。 + +看过敖丙之前文章的朋友都知道,我们做技术选型之前,要做什么呀,**设计**! + +我们要去了解这玩意的**好处**、**坏处**、**常见的坑**、**出了问题的应急预案**等等,还有他的**数据同步机制**啊,**持久化机制啥**的,就是高可用嘛。 + +同样的我不大篇幅介绍了,以后都会写的嘛,我就给大家看看我当时做的设计吧。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9kxzcemyyj31170u0qbo.jpg) + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9lix2yggbj30dw0mvaig.jpg) + +**这个只是最初的demo,详细的终稿我就不给大家看了,因为有很多公司内部的逻辑。** + +**不过大家还是可以看到敖丙真的考虑了很多,还是那句话,不打没把握的仗!** + +设计做好敖丙就**卡卡卡**的用起来了。 + +说实话,**真香**,这玩意真的好用,学习成本也很低,查询语句分分钟掌握了,官网文档把功能介绍得清晰无比。 + +> https://www.elastic.co/cn/ + +用着用着重头戏来了,你们都知道敖丙我是做电商活动的,都是什么很高的流量打进来这样,还是如往常一样上线了一个活动。 + +**这是一个月飞风高的夜晚,丝丝凉风迎面吹来,敖丙悠闲的坐在椅子上,手里拿着破旧的茶杯,喝着外婆炒的苦荆茶,享受着这惬意的时光。** + +突然,说时迟那时快,运维打来了紧急电话ES集群CPU打到了99%要挂了,**我的心蓦然一痛**,心里还在庆幸还是集群没崩。 + +然后他接着说了一句,不好集群挂了! + +敖丙卒,本篇完.... + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9ky95a8s2g308c08c3ze.gif) + +开玩笑的哈,不过当时敖丙真的**要死的心真的都要有了**,就在崩掉的1分钟内,就有用户反馈搜索未响应,我第一时间想到的就是重启,于是我一个健步冲出去,开启电脑,进机器,输入了重启命令。 + +好了,是的好了,还好有惊无险,不过只过了10秒,集群又99%了,呐呢? + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9kycthq28j30la0aa0xc.jpg) + +我又只能重启了,这次没挂,过了很久很久,直到活动结束,还是没挂。 + +### 查找问题 + +但是这次影响到线上,3分钟的搜索未响应,我想我估计明天是要去财务领工资,提前回家过年了。 + +**还好Leader说没事**,先找到问题,把他修复掉。 + +你们都知道敖丙天才来的,我第一时间想到的就是看日志,我登上去看es没报错,再看本身的服务,除了超时的错误啥都没有,卧槽,是的当时我脑袋嗡嗡响。 + +不过我继续想为啥是我的搜索挂了,**会不会是有人搜了什么奇怪的东西?** + +我打开了我的搜索日志!!! + +卧槽这不是吧,哪个坑爹玩意搜这么长的一串中文,差不多250个字吧。 + +但是我一想,搜这么长也不应该打挂服务啊,**会不会是我写了bug**! + +我脸颊流下一滴汗水💦,我看了看周围,发现没人注意到我的紧张,我**故作镇定**的把它擦掉。 + +我仔细一想,别人查询虽然长,就算查数据库也没事啊,为啥es就报错了?会不会? + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9kysgpgumj308c06mt8s.jpg) + + + +**Es有Bug!没错肯定是Es的锅。** + +那为啥会这样呢,我直接跟老大这样解释也好像不行啊,**还是要被开除的吧!** + +于是我去看看看代码,我在关键词使用了通配符,我当时是为了匹配更多内容才这么做的,类似数据库的like,Es的通配符就是: * 帅丙 * 这样**在关键词前后加“*”号去查询**。 + +后面我发现就是通配符的锅,那**柯南丙**就说一下为啥会这样的问题出现。 + +许多有RDBMS/SQL背景的开发者,在初次踏入ElasticSearch世界的时候,很容易就想到使用通配符(Wildcard Query)来实现模糊查询(比如用户输入补全),因为这是和SQL里like操作最相似的查询方式,用起来感觉非常舒适。 + +然而帅丙的故障就揭示了,**滥用Wildcard query可能带来灾难性的后果**。 + +我当时首先复现了问题 + +### 复现方法 + +1. 创建一个只有一条文档的索引 + +> POST test_index/type1/?refresh=true +> +> { +> +> "foo": "bar" +> +> } + + 2.使用wildcard query执行一个首尾带有通配符*的长字符串查询 + +> POST /test_index/_search +> +> { +> +> "query": { +> +> "wildcard": { +> +> "foo": { +> +> ​ "value": "轻轻的我走了,正如我轻轻的来;我轻轻的招手,作别西天的云彩。那河畔的金柳,是夕阳中的新娘;波光里的艳影,在我的心头荡漾。软泥上的青荇,油油的在水底招摇;在康河的柔波里,我甘心做一条水草!那榆荫下的一潭,不是清泉,是天上虹;揉碎在浮藻间,沉淀着彩虹似的梦。寻梦?撑一支长篙,向青草更青处漫溯;满载一船星辉,在星辉斑斓里放歌。但我不能放歌,悄悄是别离的笙箫;夏虫也为我沉默,沉默是今晚的康桥!悄悄的我走了,正如我悄悄的来;我挥一挥衣袖,不带走一片云彩。" +> +> } +> +> } +> +> } +> +> } + +3. 查看结果 + +> { +> +> "took": 3445, +> +> "timed_out": false, +> +> "_shards": { +> +> "total": 5, +> +> "successful": 5, +> +> "failed": 0 +> +> }, +> +> "hits": { +> +> "total": 0, +> +> "max_score": null, +> +> "hits": +> +> } +> +> } + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9lio9m1vcj31eg0lmh57.jpg) + +**即使no hits**,耗时却是惊人的3.4秒 (测试机是macbook pro, i7 CPU),并且执行过程中,CPU有一个很高的尖峰。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9lipoweu5j31e80guwod.jpg) + +**线上的查询比我这个范例要复杂得多**,会同时查几个字段,实际测试下来,一个查询可能会执行十几秒钟。 + +再有比较多长字符串查询的时候,集群可能就DOS了。 + +### 探查深层次根源 + +为什么对只有一条数据的索引做这个查询开销这么高? 直觉上应该是瞬间返回结果才对! + +回答这个问题前,可以再做个测试,如果继续加大查询字符串的长度,到了一定长度后,ES直接抛异常了,服务器ES里异常给出的cause如下: + +> Caused by: org.apache.lucene.util.automaton.TooComplexToDeterminizeException: Determinizing automaton with 22082 states and 34182 transitions would result in more than 10000 states. at org.apache.lucene.util.automaton.Operations.determinize(Operations.java:741) ~[lucene-core-6.4.1.jar:6.4.1 + +解释:该异常来自org.apache.lucene.util.automaton这个包,异常原因的字面含义是说“**自动机过于复杂而无法确定状态: 由于状态和转换太多,确定一个自动机需要生成的状态超过10000个上限**" + +**柯南丙**网上查找了大量资料后,终于搞清楚了问题的来龙去脉。 + +为了加速通配符和正则表达式的匹配速度,Lucene4.0开始会将输入的字符串模式构建成一个DFA (Deterministic Finite Automaton),带有通配符的pattern构造出来的DFA可能会很复杂,**开销很大**。 + +比如a*bc构造出来的DFA就像下面这个图一样: + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9kzf4mkxmj30em08474m.jpg) + +### Lucene构造DFA的实现 + +看了一下Lucene的里相关的代码,构建过程大致如下: + +1. org.apache.lucene.search.WildcardQuery里的toAutomaton方法,遍历输入的通配符pattern,将每个字符变成一个自动机(automaton),然后将每个字符的自动机链接起来生成一个新的自动机。 + +```java +public static Automaton toAutomaton(Term wildcardquery) { + List automata = new ArrayList<>(); + String wildcardText = wildcardquery.text(); + for (int i = 0; i < wildcardText.length();) { + final int c = wildcardText.codePointAt(i); + int length = Character.charCount(c); + switch(c) { + case WILDCARD_STRING: + automata.add(Automata.makeAnyString()); + break; + case WILDCARD_CHAR: + automata.add(Automata.makeAnyChar()); + break; + case WILDCARD_ESCAPE: + // add the next codepoint instead, if it exists + if (i + length < wildcardText.length()) { + final int nextChar = wildcardText.codePointAt(i + length); + length += Character.charCount(nextChar); + automata.add(Automata.makeChar(nextChar)); + break; + } // else fallthru, lenient parsing with a trailing \ + default: + automata.add(Automata.makeChar(c)); + } + i += length; + } + return Operations.concatenate(automata); + } +``` + +2. 此时生成的状态机是不确定状态机,也就是Non-deterministic Finite Automaton(NFA)。 + +3. org.apache.lucene.util.automaton.Operations类里的determinize方法则会将NFA转换为DFA + +```java +/** + \* Determinizes the given automaton. + \*

+ \* Worst case complexity: exponential in number of states. + \* @param maxDeterminizedStates Maximum number of states created when + \* determinizing. Higher numbers allow this operation to consume more + \* memory but allow more complex automatons. Use + \* DEFAULT_MAX_DETERMINIZED_STATES as a decent default if you don't know + \* how many to allow. + \* @throws TooComplexToDeterminizeException if determinizing a creates an + \* automaton with more than maxDeterminizedStates + */ +``` + +代码注释里说这个过程的时间复杂度最差情况下是状态数量的指数级别! + +为防止产生的状态过多,消耗过多的内存和CPU,类里面对最大状态数量做了限制 + +```java + /** + * Default maximum number of states that {@link Operations#determinize} should create. + */ + public static final int DEFAULT_MAX_DETERMINIZED_STATES = 10000; +``` + +在有首尾通配符,并且字符串很长的情况下,这个determinize过程会产生大量的state,甚至会超过上限。 + +至于NFA和DFA的区别是什么? 如何相互转换? + +网上有很多数学层面的资料和论文,限于帅丙算法方面有限的知识,无精力去深入探究。 + +但是一个粗浅的理解是: NFA在输入一个条件的情况下,可以从一个状态转移到多种状态,而DFA只会有一个确定的状态可以转移,因此DFA在字符串匹配时速度更快。 + +**DFA虽然搜索的时候快,但是构造方面的时间复杂度可能比较高,特别是带有首部通配符+长字符串的时候。** + +回想Elasticsearch官方文档里对于Wildcard query有特别说明,**要避免使用通配符开头的term**。 + +> " Note that this query can be slow, as it needs to iterate over many terms. In order to prevent extremely slow wildcard queries, a wildcard term should not start with one of the wildcards * or ?." + +结合对上面Wildcard query底层实现的探究,也就不难理解这句话的含义了! + +**小结: Wildcard query应杜绝使用通配符打头,实在不得已要这么做,就一定需要限制用户输入的字符串长度。** + +最好换一种实现方式,通过在index time做文章,选用合适的分词器,比如nGram tokenizer预处理数据,然后使用更廉价的term query来实现同等的模糊搜索功能。 + +对于部分输入即提示的应用场景,可以考虑优先使用completion suggester, phrase/term suggeter一类性能更好,模糊程度略差的方式查询,待suggester没有匹配结果的时候,再fall back到更模糊但性能较差的wildcard, regex, fuzzy一类的查询。 + +**补充**: 有同学问regex, fuzzy query是否有同样的问题,答案是有,原因在于他们底层和wildcard一样,都是通过将pattern构造成DFA来加速字符串匹配速度的。 + +**回忆**:为啥之前挂了一次重启恢复了,马上又挂了?用户搜了两次。。。 + +### 解决方案 + +其实解决这种问题很简单,既然知道关键词长了会有问题,我就**做限制**嘛,大家可以去看看搜索引擎某度、某宝啥的,是不是都做了长度限制? + +我复制了很长的一段汉字进去百度就是这个结果咯,某宝过长都返回**默认页面**了。 + + + +![image-20191204205715057](https://tva1.sinaimg.cn/large/006tNbRwly1g9kzk65eauj30fw04o3z3.jpg) + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9kzmp624jj30su06ftah.jpg) + +如果你的产品一定要给用户一点东西,简单,找出一些热词分析出来就好了,或者给点热搜商品**兜底**。 + +我怎么做的呢?判断字符串长度大于50我就直接返回空数组了,这样对用户体验好点,你返回个参数错误或者默认错误别人还**以为你有Bug**呢对吧。 + +### 总结 + +其实敖丙我啥事故等级都没背哈哈,这个算是事故,但是敖丙我这么可爱,领导也心疼我啊,肯定不会怪我的拉,主要是我设计都考虑了很多方案和场景了,没想到有这个坑。(yy:敖丙你个渣男,又是标题党,人家还以为你没工作了要养你呢!) + +大家也可以通过这次事故体会到,技术选型的时候,**方案的重要性**了吧,就算你考虑不全,但是不至于真正的问题来了手足无措啊,并不是所有的事故都可以像这次这样重启就搞定了,**不要存有侥幸心理,心存敬畏**。 + +### 絮叨 + +敖丙啊,又有牌面了,得到**阿里云消息中间件团队**小伙伴的认可,并且发现居然是我学姐-**风云**(花名)!!! + +她是个好学的小姐姐,大家多多像优秀的仔学习,学姐不是做技术的,但是都在不断学习,说实话我的眼角又湿了。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9l48ouvc1j30jg0idacq.jpg) + +### 别跑,投票!!! + +我准备把我的公众号**JavaFamily** 这个名字改了,这个名字还是差点意思,但是又不能叫敖丙了,被注册商标了,我就问了下群里的人才,目前有两个我比较喜欢的 + +- **帅丙** +- **三太子敖丙** +- 其他给我留言 + +因为这个可能会陪伴我很久,甚至直到死去,希望大家都给点建议哈哈。 + +别问我为啥要跟敖丙这个名字相关,**再问自杀**! + +我花名就叫这个,所以😂 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9l023nupwj306y099mxr.jpg) + + + +## 日常求赞 + +好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是**人才**。 + +我后面会每周都更新几篇一线互联网大厂面试和常用技术栈相关的文章,非常感谢**人才**们能看到这里,如果这个文章写得还不错,觉得「敖丙」我**有点东西**的话 **求点赞👍** **求关注❤️** **求分享👥** 对暖男我来说真的 **非常有用**!!! + +创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见! + +敖丙 | 文 【原创】【转载请联系本人】 如果本篇博客有任何错误,请批评指教,不胜感激 ! + +------ + +> 文章每周持续更新,可以关注我的公众号「 **JavaFamily** 」第一时间阅读和催更(公众号比博客早一到两篇哟),本文**GitHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 上已经收录,有一线大厂面试点思维导图,欢迎Star和完善,里面也有我个人联系方式有什么问题也可以直接找我,也有**技术交流群**,我们一起有点东西。 + + +书三千,吾全取。 + +人千万,独暖你。 ---暖男敖丙 \ No newline at end of file diff --git "a/docs/coderLife/\351\243\216\351\233\250\345\215\201\345\271\264\344\273\216\346\257\225\344\270\232\345\210\260\346\212\200\346\234\257\344\270\223\345\256\266\346\210\221\345\201\232\344\272\206\345\225\245.md" "b/docs/coderLife/\351\243\216\351\233\250\345\215\201\345\271\264\344\273\216\346\257\225\344\270\232\345\210\260\346\212\200\346\234\257\344\270\223\345\256\266\346\210\221\345\201\232\344\272\206\345\225\245.md" new file mode 100644 index 0000000..8b452f3 --- /dev/null +++ "b/docs/coderLife/\351\243\216\351\233\250\345\215\201\345\271\264\344\273\216\346\257\225\344\270\232\345\210\260\346\212\200\346\234\257\344\270\223\345\256\266\346\210\221\345\201\232\344\272\206\345\225\245.md" @@ -0,0 +1,259 @@ +> 你知道的越多,你不知道的越多 + +> 点赞再看,养成习惯 + +> 本文 **GitHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 上已经收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 + +### 前言 + +你们都知道的,帅丙我本身肯定是达不到技术专家的地步的。 + +呸,敖丙你个渣男,又标题党 ! + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9ppc3lx7hj307m06na9y.jpg) + +我不是但是我身边很多人是呀,字节跳动,PDD,阿里等等的大佬我认识很多,所以以下是我问了他们的成长路径的总结,还是具有一定的代表性。 + +身边这些朋友都是在互联网领域多年的大牛了,因为生活和个人习惯的原因,很多都没有写博客的习惯,或者没有公开出来,但是他们却遇到了帅丙,**我骚啊,我可以帮他们整理出来啊**。 + +目的是为了让很多跟我一样的新人,对一条完整的职业规划之路有一个清晰的认知,**青铜到王者要经历些什么**? + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9gbkb1bmpj30dw08pt99.jpg) + +### 青铜-万恶之源 + +**《计算机基础》**,这是所有读者大学最开始都会上的课吧,我问了群里的仔,他们都说是的,我想大家也是。 + +在计算机基础中我们会学到计算机的历史、计算机的特点、进制转换、内存管理、线性数据结构、网络请求协议等等。 + +计算机基础真心很重要,无比重要,究极重要,为啥我这么说呢,里面涉及的计算机知识还有很多网络协议的知识,大家以后一定会用到,我可以负责的告诉你,面试也一定会问,什么Http、Https、Tcp/Ip、三次握手、四次挥手面试不要太常问。 + +**Tip**:这里有个小插曲就是我身边那个架构师团队Leader这周面试阿里p8岗位的时候,我以为问的都是什么源码,中间件的究极操作,我想大家跟我想的一样,但是大家错了,反而问的很多计算机的基础知识。 + +​ 我聊天大概问了一下面试内容,有什么求二叉树的镜像,内核态和用户态的理解,计算机的缓存页等。 + +​ 大家是不是惊了,这他*不是我校招的题目么?怎么P8级别的大佬还问这个?其实很好理解,大家想一下到了一定的工作年限技术的广度深度都有一定的造诣了,你写代码就这样了没办法优化了,机器配置也是最好的了,那还能优化啥? + +​ **底层**,我们都知道所有语言到最后要运行都是变成机器语言的,最后归根究底都是要去跟机器交互的,那计算机的底层是不是最后还是要关注的东西了? + +**福利**:他这周会来我们公司面试,届时我会详细问一下具体的面试内容,如果大家想看我可以到时候整理一下写出来,看看那种级别的强者的世界到底是怎么样的。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9gc2jxcaij308c08c0sz.jpg) + +学完计算机基础你基本上对计算机的整个知识体系都一知半解了,对于编程或许还是很懵懂,但是你现在已经要踏入编程的门了。 + +#### 白银-编程第一课 + +计算机基础学了,后面就要编程的入门课程了。 + +想必看我这篇文章有99%的小伙伴都是以下面这段代码开始的自己的程序人生的吧: + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9g5yk1a93j30eh097ab2.jpg) + +我还记得**帅丙**我就是大一开始学习的C语言,《C语言程序设计》谭浩强老师的课本,在第27页就是第一章,**HelloWord**,现在回忆起来还历历在目,老师在黑板上写下这两个庄严的单词,同桌的她和我露出无限的求知欲...... + +我想所有的语言都是语法基础开始的,而且编程语言的基础语法也都是大同小异的。 + +If、For、While等关键字,List、Set、Map等集合,Int、float、Double等基础类型,大家第一次学的时候我想也不会知道,这些关键字将会陪伴我们走完各自的程序生涯吧? + +接下去就难一点比如JDBC、IO、文件流啊什么的,帅丙依稀的记得当时还是**代码里面写SQL**然后查询,也不知道记错没有。 + +学到这里,你可能觉得你**JavaSE**无敌,出去可以找工作了,反正当时的帅丙,觉得自己可以闯出一片天了,不知天高地厚,四处炫技。 + +但是幼稚的我根本不知道,**未知的前方还有什么等着我**,我也不知道自己其实才刚入门,但是如果要往WEB方向发展,这些倒是基本足够了。 + +但是你到现在为止学的东西都是服务端的东西呀,怎么让你的服务端东西展示给别人看呢? + +这个时候我们就应该去做个丑不拉几的页面,进行简单的交互了,你这个时候要学**HTML** 、**Servlet**、**MySQL**、 **JavaScript**、**Tomcat**、**CSS**等。 + +目标呢就是写出第一个动态网站,也许只是个登陆功能,只能展示下个人资料,但这是很重要的一步,你要弄清楚的是,一个用户的点击产生的请求,是从哪里发起,哪里接收,哪里处理,哪里返回,你得理解浏览器和服务器的关系和分工,**Cookie**和**Session**,**Request**和**Response**。 + +**Tip**:我记得我刚出来面试就有面试题是这样的,一个Http请求从网页发起到服务端产生数据返回中间经历了些什么,或者Spring做了什么?大家可以思考一下 + +​ 还有有一个自己的项目真心很重要,敖丙我就是在大学期间做了项目,至今在校园内网上稳定运行着,出来实习面试的时候基本上也是一路披荆斩棘,吊打了同行面试的仔,反正大学有个项目贼加分,是读者的大学生记住了么? + +### 黄金-初出茅庐 + +上面的只是WEB开发的学习初级阶段,这都是些JAVA诞生以来最原始的最官方的WEB开发技术,当然现在真正的项目很少直接采用这些技术了,现在都是**前后端分离了**,Vue、Node.js、React等前端的语言更新迭代速度非常快,帅丙我学了一点刚用舒服,前端的朋友告诉我又迭代了......我他*不学了! + +为了不断提高技术的易用性、开发效率和可维护性、可扩展性,无数开源项目都是在这些原始技术的基础上封装、改进。 + +所以这个阶段**不要盲目乐观地跑去找工作或者对实习挑三拣四**,你会被打击到的,又或者找个小公司浑浑噩噩几年过去感觉跟新的技术栈脱节。 + +**有人跟你说小公司学的东西多,他害你的,刚开始能去多大的去多大的,越大越好,你想你去了大的你想去小的分分钟的事情,但是你小的要去大的就相对难了。** + +好,初始阶段完成,开始进入WEB开发的正题,首先是传说中的框架,SSM(Spring SpringMVC Mybatis)成为熟练的增删改查程序员是必须的,在这个阶段你还要理解为什么要用这仨而不是那些Jsp、Servlet、Jdbc,你要体会到写MVC、三层架构的好处。 + +这个阶段不要轻易质疑框架的价值,也许刚开始你会觉得麻烦,觉得他们有时候是多此一举,我最开始这么写的时候发现,真的恶心,什么dao,service,Controller等等,分这么多干嘛。 + +等过一两年后回过头来你会觉得少了这些框架你已经很难干活了,没有分层清晰的系统,你反而开口大骂项目的架构师的。 + +你********* + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9gce550dbj308q078whf.jpg) + +不过要**提醒大家**的是,这个阶段还要避免的心态是,能熟练地增删改查了,就自认为写程序不过如此,然后往简历上填个精通,这也是新手面试被批得体无完肤的原因之一。 + +**浅尝即止,是新手的大忌**,为啥这么写,这么写有啥好处,有啥坏处,多问几个为什么,你**多年后会感谢敖丙**的。 + +如果你学得好,这会应该能熟练地写个博客啊,小论坛啊之类的WEB项目了,也就是达到了就业的基本要求。 + +**Tip**:而且说一下作为一个应届生,你除了基础知识,如果你有自己的技术博客,还有像样的项目能展示给面试官看,是真的很加分,搭建个简单的项目,项目流程你也知道了,技术栈也熟悉了,还可以手机访问网页给面试官现场演示,很加分的。 + +像我身边的朋友**Java3y**,**JavaGuide**,**我没有三颗心脏**等,就是在这个阶段就已经开始写了自己的博客,并且各自都做出了成绩,这些以后都是你面试的议价能力的一部分,也是你的加分项,和你自身的财富。 + +我问了一下他们,都是靠博客就已经得到不少大公司的面试邀约了,反正有项目,有不错的履历,有不错的博客,都会给你加分,如果你什么都没有,现在动手去多学点,少打两局LOL等你到我这个年纪就会发现,**索然无味**。 + +### 铂金-遵义会议 + +这会是程序员生涯的一个**转折点**,把握好了人生起飞,把握不好**全盘皆输**,所以我用在我老家遵义举办的**遵义会议**,作为这阶段的标题,我觉得,**妙啊**! + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9nf6asyshg3078078mz4.gif) + +慢慢的你会发现数据库性能实在不行,出于不甘现状,或者赶时髦,你该去了解**NoSQL**了,**Memcached**、**Redis**、**Mongodb**等非关系型数据库眼花缭乱,没关系,试着用用,能很好地缓解**MySQL**、**Oracle**之类关系数据库的压力。 + +出于公司某些业务需要,你可能会钻研一个特定技术领域,比如全文搜索技术**ElasticSearch**(以下简称Es),那你了解了**Es**,你又要想到数据库的数据怎么同步进**Es**呢? + +你可能会接触到**Logstash**,**Canal**等中间件,然后发现可视化也是个问题,那**Kibana**就应运而生,用的时候发现欧洲人的分词习惯跟我们不一样,那**Ik**中文分词器又得了解啦。 + +使用之后你还会发现他底层的**Lucene**有很多坑要怎避免,时间多你还可以了解**Solr**等等。 + +**总之知识就是一个体系**,我经常跟群里的仔说,形成知识体系,你面试说了**Es**那相关的技术栈你一样要了解的,我题目取了叫《**吊打面试官**》就是噱头,你去面试如果面试官技术深度真的很深,我想被吊打的100%是你。 + +你甚至会开始对系统中一些比较特殊的存在感兴趣,比如**权限系统**,**单点登陆**之类的,又或者某些特定业务领域的**算法研究**,这些是你的加分项。 + +你还发现服务拆分后**Http**通信有诸多弊端,就开始接触优秀的**Rpc框架**还有消息队列中间件了,如**Dubbo**、**RocketMQ**等。 + +再再后来你发现呀,数据量大得一批,表顶不住了,几亿数据查出来要好几秒,那**分库分表**就出来,什么**水平拆分**,**垂直拆分**,还学习了**TDDL**、**Sharding-JDBC**、**DRDS**等这样的分库分表中间件。 + +但是你用了发现全局的唯一id生成又是一个问题,或许中间件有自带的,但是你还是要了解原理,什么**雪花算法**,**uuid**等等也得学。 + +再再再后来呀,你发现分库分表也顶不住了,业务体量爆炸式增长了,你可能就需要了解动态分库分表的解决思路和解决方案了,特别是**FaceBook**开源的一些方案。 + +再再再再后来呀,你发现动态分库分表也不行啊,很多离线的数据也很多啊,每天几个T,公司都要被败光了,那你就要了解大数据场景的离线分析啊,数据缓存啊,数据清洗,数据可视化等等啊什么的。 + +那就需要学什么**ODPS**啊,**Hadoop**、**Hive**、**Hbase**等等中间件或者工具了。 + +再再再再再后来你开始发现你的代码很乱,久了以后自己都看不懂,重复的,难以重用的代码堆积如山,不想维护,BUG百出。 + +于是你要开始重视设计模式,合理地改造下自己的代码习惯,不再被僵化的SSH、MVC三层架构束缚住。 + +再再再再再再.....(敖丙你是不是没玩了?哈哈其实还真有我就不列举了) + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9gi08e7vtj306y06yt8s.jpg) + +到这里不知道你有没有体会到我每篇文章开头那句话的意思?敖丙就是工作之后发现自己越来越无知了,你再品一下下面这句话。 + +> 你知道的越多,你不知道的越多 + +**Google**和各种资料是你进步的动力,极少再遇到必须请教别人才能解决的问题,如果你这个阶段还老是问别人,你的技术生涯也就快到头了。 + +这个阶段,如果你**技术卓越**和**跟敖丙一样能吹**,你的收入将是白领水平,至少接近了,或者大幅领先同龄人了。 + +我觉得多数程序员在工作多年之后都能达到这个水平,有的人只需要一两年,有的人却要用上五六年,在这个阶段落伍的人,有的是出于天赋和思维所限,有的是出于对技术缺乏热情,有的是出于工作内容的制约。 + +**等到年近中年,再也拼不过年轻人,被淘汰出局,只能在自嘲为屌丝和码农的无奈中黯然转行。** + +这是个很重要的分水龄,你能不能继续进步,能不能在30岁以后继续从事技术工作,能不能在公司里**独当一面**,我觉得就看你能不能超越这个阶段了。 + +很多烂公司里工作数年的项目经理,连这个层次都还没达到... + +为了30岁的自己听到裁员完全不虚,为了家里的老母亲不再为了省电费不舍得开灯,为了让自己...... + +我想这个阶段你应该要做好准备,这也是我大篇幅介绍这个阶段的原因。 + +### 砖石-扬帆远航 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9nfce1urnj306y06yaa0.jpg) + +你要读读优秀开源项目的源码,你要搞懂一些当年不懂的基础知识,你开始理解**《thinking in java》**的精髓,你能写一些底层的代码,有时还会觉得自己封装的比某些开源工具更好用更简单。 + +当年看不懂的《**深入分析JVM虚拟机**》现在你已经可以对里面的知识点**如数家珍**,**张口就来**,并且能够将大量知识点带入到项目中优化,并且能够看到实质性的变化(**暗示KPI**)。 + +WEB的难点和重点永远都在于性能、负载能力上,而现在网络的发达造成了数据量和操作密度的大大上升,硬件却没有相应的进步。 + +你得试着更好地运用更多的服务器来协同工作,从WEB端到服务端到数据库,全都需要集群,需要分布式,需要合理的控制数据的流向,掌握好网站上下,一大堆机器的平衡,找出性能的瓶颈,找出稳定性和安全性的瓶颈,硬件出现故障,第三方技术出现错误,将被当成家常便饭融入到你的系统和代码里仔细考虑。 + +你会开始觉得方案无比地重要,**一将无能累死千军**将不断应验,一个不好的设计,一个不好的方案,会让一群优秀的程序员工作成果大打折扣。 + +**你要关注架构知识,不能再满足于SSH三层架构到底。** + +领域驱动设计,面向事件开发,敏捷开发等等一系列的思想在关键时刻能决定你项目的生死,这个阶段不再有标准范例让你照抄,你只知道思想和原理,实践却需要自己不断尝试和改进。 + +多关注各种杂七杂八的开源技术,有些你可能前面已经接触过了,和通信有关的,和集成开发环境有关的,和架构有关的,各个领域你都应该能信口说上几个主流技术,虽然你可能只是听说过,了解。 + +**但关键时刻你得知道如何去选择技术,并快速掌握它。** + +你还会去考虑尝试下别的语言,这里不是说转向什么C++ C#之类的,那和JAVA程序员不相干,我说的是一些**运行于JVM之上的语言**,比如scala和groovy,初识他们时你会觉得Java真的老了。 + +但当你回到一个综合性的大型项目中,又会觉得Java积累下来的整个体系技术是如此完善,就像一个工业化标准一样,你可能发现光是Spring家族的东西你都受用终身,无法完全通读。 + +你能把这个阶段实践好,胜任项目经理,乃至中小公司的技术总监,大厂的小团队Leader都是可以的。 + +### 大师-登峰造极 + +其实写到上面这个阶段的时候我觉得,这是很多人满足的地方了,都是小公司技术总监了,那我图啥? + +但是未知的人生还在那等着你呢,我问了身边顶级的大神,**为啥要走出舒适区**?去像字节、阿里等这些压力大很多的地方呢? + +他们给的回答都不太一样,但是一样的就是**挑战自我**吧,**谁也不知道哪里是自己的终点**,那为啥不多做点尝试,新的环境,新的技术栈,新业务场景挑战新的自我。 + +这个阶段你的一举一动可能都关系一个项目的生死存亡,一个错误或者正确的决策就可能改变整个项目的命运,水能载舟亦能覆舟,我想用在这里也恰到好处。 + +我身边这样级别的大佬凤毛麟角,但不是没有,他们在公司都是核心人物,大型项目或者项目紧要关头都是他们带领团队**冲冲冲**,除了问题也是能最快给出解决思路和方案的。 + +**Tip**:我现在的老大就是这样的人,双十一大家还手忙脚乱去追数据的时候,他上来一套操作,写了几个脚本就搞定了,卧*我们当时周围一群人,**从头到尾的知识盲区**,结束了还没反应过来,只能拍手叫666。 + +**这就是强者的世界,我所向往的世界,当然我知道这样的世界,只有一步一个脚印才能涉足。** + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9ghpuy5g9j306g06imzr.jpg) + +### 王者-泰山之巅 + +最后王者其实我不会写任何内容,能到这个领域的人本身就是屈指可数了,敖丙身边有,但是我觉得大家自己体会吧,一般就是人脉,交际,能力都到了一定的高度了,这个阶段的事情我也体会不到。 + +能想到的就只有先祖的诗句:指点江山,挥斥方遒。 + +算是给大家留下无限遐想的空间吧,未来或许你就是你所在领域的王者也说不定的呢对吧。 + +### 总结 + +不知不觉写了这么多了,以上是我个人眼里的一般向JAVA 程序员的发展线路,限于篇辐也不全面,实际个人成长路线可能因为工作内容的不同差异会很大,有的人偏向了底层研究,有的人偏向了业务需求设计,有的带有浓重的行业色彩,而且技术之外,还有很多知识也很重要,做JAVA没有轻松的方向,但一个对技术抱有兴趣的人,走到这一步时,仍然会对开发抱有热情,想要写出好的项目。 + +**纯为了生计而工作的程序猿是走不到这一步的,这一行来都来了,大家一天都是24小时,为啥有差距,我想你我都明白的,知道为啥那就干出点名堂吧。** + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9nfi2jrwdj307w07w74a.jpg) + +### 敖丙的絮絮叨叨 + +上周还发起了一个投票大家记得么?就是我要修改我公众号的名字,下面是投票的结果 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9naouys86j314l0dcjrx.jpg) + +敖丙也是真男人来的,说改就改了,你们会发现我所有博客平台的广告,也会在周末悄无声息的被我改掉的,以后**三太子敖丙**就取代JavaFamily了。 + +并且也做了个很重要的决定,这一个多月来,公众号文末的广告多多少少都有点积蓄了,但是这个钱说实话我出去恰个火锅都够呛,差不多每天都是这样吧。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9nfnpumowj30dc06ymyd.jpg) + +那我一想这个钱是大家给我的,我最后就还给大家,以后也是一样,每次到月底我就抽个奖,买十几本书送大家。 + +**不知道大家喜欢不喜欢呀!!!** + +还有就是抽小伙伴喝咖啡了,这里好像就杭州的小伙伴我能线下约了,外地的小伙伴我就打20块吧,虽然不多但是是个心意嘛。 + +## 点关注,不迷路 + +好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是**人才**。 + +我后面会每周都更新几篇一线互联网大厂面试和常用技术栈相关的文章,非常感谢**人才**们能看到这里,如果这个文章写得还不错,觉得「敖丙」我**有点东西**的话 **求点赞👍** **求关注❤️** **求分享👥** 对暖男我来说真的 **非常有用**!!! + +创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见! + +敖丙 | 文 【原创】 + +如果本篇博客有任何错误,请批评指教,不胜感激 ! + +------ + +> 文章每周持续更新,微信搜索「 **三太子敖丙** 」第一时间阅读和催更(比博客早一到两篇哟),本文 **GitHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 上已经收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 diff --git "a/docs/creative/\343\200\212\345\220\220\350\241\200\346\225\264\347\220\206\343\200\213\345\215\201\345\271\264\351\243\216\351\233\250\346\212\200\346\234\257\344\272\272\347\232\204\344\271\246\345\215\225\346\225\264\347\220\206.md" "b/docs/creative/\343\200\212\345\220\220\350\241\200\346\225\264\347\220\206\343\200\213\345\215\201\345\271\264\351\243\216\351\233\250\346\212\200\346\234\257\344\272\272\347\232\204\344\271\246\345\215\225\346\225\264\347\220\206.md" new file mode 100644 index 0000000..fae21c8 --- /dev/null +++ "b/docs/creative/\343\200\212\345\220\220\350\241\200\346\225\264\347\220\206\343\200\213\345\215\201\345\271\264\351\243\216\351\233\250\346\212\200\346\234\257\344\272\272\347\232\204\344\271\246\345\215\225\346\225\264\347\220\206.md" @@ -0,0 +1,790 @@ +## 《程序人生》十年风雨技术人的书单整理 + +> 你知道的越多,你不知道的越多 + +> 点赞再看,养成习惯 + +> 给岁月以文明,而不是给文明以岁月 + +> 本文 **GitHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 上已经收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 + +### 前言 + +王潇:格局决定了一个人的梦想,梦想反过来决定行为。 + +那格局是什么呢? + +**格局是你能够看见的深度、广度和密度。** + +王潇认为,格局是一本本书搭建起来的,正如她所言:“**读书让我知道世界很大,然后才知道推开门去看看这个世界。**” + +之前有一篇文章我写到了几乎是一个技术人从0到1的整个生涯了,其实大家发现根本就没有终点。 + +[《程序人生》风雨十年-从大学到技术专家我做了啥?](https://juejin.im/post/5ded1639e51d455830350da5) + +我们的一生其实也基本上都在学习,那提到学习,我第一时间想到的就是读书了。 + +记得帅丙在自己21岁的那个夏天,当时拿到了自己的第一笔实习工资1400块,因为是110块一天嘛,而且入职的第一个月也没上满,但是还是很开心,第一个月师傅就给了一个建议,买本书吧。 + +就这样我买了出社会之后的第一本技术书籍《Java核心卷一》,也是师傅推荐的,如获至宝。 + +到现在我的书架都茫茫当当了,但是这本书还是一直陪伴我左右,也是我印象最深刻的技术书籍,因为那感觉就像是**初恋的味道**,甜甜的。 + +为啥推荐大家读书呢,**书籍的作者都是几年甚至几十年的经验,最后总结为一本书,**那就算里面有错误的点,我想你花几十块,只用几个礼拜甚至几天就可以拜读人家十几年的经验,我觉得怎么算都是血赚? + +## 正文 + +好了扯了这么多只是想要引出今天的主题,我会按照不同的类型把我知道的一些书籍,包括身边朋友推荐的书籍,都在这里列给大家,大家按需自取。 + +我还推荐了很多非技术的书籍,人文地理悬疑情感都会涉及,反正很多书我是真的很喜欢。 + +我上一篇提到的我亦师亦友的阿里技术专家朋友,他就是个很喜欢读书的人,说实话他的**学校背景不好**,刚开始出来也是在外包干活的,但是他有个习惯,就是看书,基本上闲暇时候,都能看到他看书的身影。 + +看他的动态也都是分享各类书籍,**口吐芬芳**,我要是个女人,估计他跑不掉了。 + +反正经常读书的人,你跟他说话,看他谈吐,自然就知道了,我经常说的那句:**腹有诗书气自华** 希望你能懂,不看真像网上的段子那样,看到美好的景色只能:卧* + +下面是我截图的他的几条动态,这种谈吐我爱了❤ + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9ngogekz6j30mq0b4adx.jpg) + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9ngob9s4nj30jw0b441o.jpg) + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9ngo5a0u1j30h90b4div.jpg) + +### Java + +#### Java核心技术·卷 I(原书第10版)| Core Java Volume + +> 讲的很全面,书中的代码示例都很好,很适合Java入门。 +> +> 但是作者不太厚道的是把现在没人用的GUI编程放在了第一卷,基本上10~13章是可以不用读的。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9hbdoqljkj309p0dvdl9.jpg) + + + + + + + +#### Java性能权威指南|Java Performance: The Definitive Guide + +> 市面上介绍Java的书有很多,但专注于Java性能的并不多,能游刃有余地展示Java性能优化难点的更是凤毛麟角,本书即是其中之一。 +> +> 通过使用JVM和Java平台,以及Java语言和应用程序接口,本书详尽讲解了Java性能调优的相关知识,帮助读者深入理解Java平台性能的各个方面,最终使程序如虎添翼。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9hbm4gqmnj309p0d3776.jpg) + +#### 实战Java高并发程序设计|葛一鸣 + +> 由部分段落的行文来看,搬了官方文档。 +> +> 也有一些第一人称的叙述和思考,也能看出作者也是花了一点心思的。胜在比较基础,涉及到的知识点也还很全面(讲到了流水线计算和并发模型这些边边角角的),但是由于是编著,全书整体上不够统一和深入,适合作为学习高并发的第一本工具书。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pawpmidhj307d0a4tbj.jpg) + +#### Java 8实战 + +> 对Java8的新特性讲解的十分到位,尤其是lamdba表达式和流的操作。 +> +> 再者对于Java8并发处理很有独到见解。对于并行数据处理和组合式异步编程还需要更深的思考才能更加掌握。 +> +> 推荐给再用java8但没有去真正了解的人看,有很多你不知道的细节、原理和类库设计者的用心良苦在里面、内容没有很难,抽出几个小时就能看完,花费的时间和收获相比,性价比很高。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p7u5iudbj305h06ztah.jpg) + +#### Java并发编程实战 + +> 先不谈本书的内容如何,光书名就足够吸引不少目光。“并发”这个词在Java世界里往往和“高级、核心”等字眼相联系起来,就冲着这两个字,都将勾起软件工程师们埋藏在心底那种对技术的探索欲和对高级API的驾驭感。 +> +> 程序员嘛,多少都有点职业病。其实Java对“并发”优化从未停止过,从5.0到7.0,几乎每个版本的新特性里,都会针对前一版本在“并发”上有所改进。这种改进包括提供更丰富的API接口、JVM底层性能优化等诸多方面。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9hkzebashj30d30h3ai8.jpg) + +#### Thinking in Java + +> 很美味的一本书,不仅有icecreamm,sundae,sandwich,还有burrito!真是越看越饿啊~ + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p80v6ph4j305406vn00.jpg) + +#### Effective Java中文版(第3版)|Effective Java Third Edition + +> Java 高阶书籍,小白劝退。介绍了关于Java 编程的90个经验技巧。 +> +> 作者功力非常强悍,导致这本书有时知识面迁移很广。总之,非常适合有一定Java开发经验的人阅读提升。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9o0pa3nvrj309z0d0tfd.jpg) + +#### 深入理解Java虚拟机(第3版)| 周志明 + +> 浅显易懂。最重要的是开启一扇理解虚拟机的大门。 +> +> 内存管理机制与Java内存模型、高效并发这三章是特别实用的。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9o0wpiwwtj308d0b3dil.jpg) + + + +#### Java虚拟机规范(Java SE 8版)|爱飞翔、周志明 + +> 整本书就觉得第二章的方法字节码执行流程,第四章的前8节和第五章能看懂一些。其他的过于细致和琐碎了。 +> +> 把Java字节码讲的很清楚了,本质上Java虚拟机就是通过字节码来构建的一套体系罢了。所以字节码说的非常细致深入。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9o11harv8j305807mgn5.jpg) + + + +### 数据&大数据 + +#### 数据结构与算法分析|Data Structures and Algorithm Analysis in Java + +> 数据结构是计算机的核心,这部书以java语言为基础,详细的介绍了基本数据结构、图、以及相关的排序、最短路径、最小生成树等问题。 +> +> 但是有一些高级的数据结构并没有介绍,可以通过《数据结构与算法分析——C语言描述》来增加对这方面的了解。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9hbgso21qj30960dldo5.jpg) + +#### MySQL必知必会 + +> 《MySQL必知必会》MySQL是世界上最受欢迎的数据库管理系统之一。 +> +> 书中从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。通过重点突出的章节,条理清晰、系统而扼要地讲述了读者应该掌握的知识,使他们不经意间立刻功力大增。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9hl0x53imj30940cr43s.jpg) + +#### 数据库系统概念|Datebase System Concepts(Fifth Edition) + +> 从大学读到现在,每次拿起都有新的收获。而且这本书还是对各个数据相关领域的概览,不仅仅是数据库本身。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9hl29c07cj307o0b50yt.jpg) + +#### 高性能MySQL + +> 对于想要了解MySQL性能提升的人来说,这是一本不可多得的书。 +> +> 书中没有各种提升性能的秘籍,而是深入问题的核心,详细的解释了每种提升性能的原理,从而可以使你四两拨千斤。授之于鱼不如授之于渔,这本书做到了。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9o16axv7cj305l06z400.jpg) + +#### 高可用MySQL + +> 很实用的书籍,只可惜公司现有的业务和数据量还没有达到需要实践书中知识的地步。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9o18npb1oj305906xt9q.jpg) + +#### 利用Python进行数据分析|唐学韬 + +> 内容还是跟不上库的发展速度,建议结合里面讲的库的文档来看。 +> +> 内容安排上我觉得还不错,作者是pandas的作者,所以对pandas的讲解和设计思路都讲得很清楚。除此以外,作者也是干过金融数据分析的,所以后面专门讲了时间序列和金融数据的分析。 + +![image-20191207121445898](https://tva1.sinaimg.cn/large/006tNbRwly1g9o1bg9xujj305606x0u4.jpg) + +#### HBase + +> 看完影印版第一遍,开始以为会是大量讲API,实际上除了没有将HBase源代码,该讲的都讲了,CH8,9章留到最后看的,确实有点顿悟的感觉,接下来需要系统的看一遍Client API,然后深入代码,Come ON! + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p7byg8jtj306q090760.jpg) + +#### Programming Hive + +> Hive工具书,Hive高级特性。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p7cxhoe8j305406wzl4.jpg) + +#### Hadoop in Practice| Alex Holmes + +> 感觉比action那本要强 像是cookbook类型的 整个过完以后hadoop生态圈的各种都接触到了 这本书适合当参考手册用。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p7e3axckj305g06pq3z.jpg) + +#### Hadoop技术内幕|董西成 + +> 其实国人能写这样的书,感觉还是不错的,不过感觉很多东西不太深入,感觉在深入之前,和先有整体,带着整体做深入会更好一点, jobclient,jobtracer,tasktracer之间的关系最好能系统化 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p7rcs59oj305c064q3s.jpg) + +#### Learning Spark + +> 很不错,core的原理部分和api用途解释得很清楚,以前看文档和代码理解不了的地方豁然开朗。 +> +> 不足的地方是后几章比较弱,mllib方面没有深入讲实现原理。graphx也没有涉及 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p7g4tl5pj3057070wfv.jpg) + +#### ODPS权威指南 + +> 基本上还算一本不错的入门,虽然细节方面谈的不多,底层也不够深入,但毕竟是少有的ODPS书籍,且覆盖面很全,例子也还行。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p7in91wfj30a20crjtl.jpg) + +#### 数据之巅|徐子沛 + +> 从一个新的视角(数据)切入,写美国历史,统计学的发展贯穿其中,草蛇灰线,伏脉千里,读起来波澜壮阔。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9o1e6dkcaj305706xwh2.jpg) + +### 消息队列&Redis + +#### RabbitMQ实战 + +> 很多年前的书了,书中的例子现在已经不适用了,推荐官方教程。 +> +> 一些基础还是适用,网上也没有太多讲rab的书籍,将就看下也行,我没用过所以.... + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p62utv9aj305s07l0v6.jpg) + +#### Apache Kafka源码剖析|徐郡明 + +> 虽然还没看,但知道应该不差。我是看了作者的mybatis源码分析,再来看这本的,相信作者。 +> +> 作者怎么有这么多时间,把框架研究的这么透彻,佩服,佩服。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p640006rj308a0ax407.jpg) + +#### 深入理解Kafka:核心设计与实践原理|朱忠华 + +> 通俗易懂,图文并茂,用了很多图和示例讲解kafka的架构,从宏观入手,再讲到细节,比较好,值得推荐。 +> +> 深入理解Kafka是市面上讲解Kafka核心原理最透彻的,全书都是挑了kafka最核心的细节在讲比如分区副本选举、分区从分配、kafka数据存储结构、时间轮、我认为是目前kafka相关书籍里最好的一本。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p7pk3qbyj30ag0cvju8.jpg) + +#### Kafka + +> 认真刷了 kafka internal 那章,看了个talk,算是入了个门。 +> +> 系统设计真是门艺术。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p65doei8j306007ztaa.jpg) + +#### RocketMQ实战与原理解析|杨开元 + +> 对RocketMQ的脉络做了一个大概的说明吧,深入细节的东西还是需要自己看代码 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p6723irlj309x0citaz.jpg) + +#### Redis设计与实现|黄健宏 + +> 部分内容写得比较啰嗦,当然往好了说是对新手友好,不厌其烦地分析细节,但也让整本书变厚了😂,个人以为精炼语言可以减少20%的内容。 +> +> 对于有心一窥redis实现原理的读者来说,本书展露了足够丰富的内容和细节,却不至于让冗长的实现代码吓跑读者——伪代码的意义在此。下一步是真正读源码了。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p7jmsinsj309f0d5acg.jpg) + +#### Redis 深度历险:核心原理与应用实践|钱文品 + +> 真心不错,数据结构原理+实际应用+单线程模型+集群(sentinel, codis, redis cluster), 分布式锁等等讲的都十分透彻。 +> +> 一本书的作用不就是系统性梳理,为读者打开一扇窗,读者想了解更多,可以自己通过这扇窗去Google。这本书的一个瑕疵是最后一章吧,写的仓促了。不过瑕不掩瑜。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p7n1yg9qj30860aoace.jpg) + +### 技术综合 + +#### TCP/IP详解 卷1:协议 + +> 读专业性书籍是一件很枯燥的事,我的建议就是把它作为一本手册,先浏览一遍,遇到问题再去详细查,高效。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p75y7qd2j306408kgof.jpg) + +#### Netty in Action + +> 涉及到很多专业名词新概念看英文原版顺畅得多,第十五章 Choosing the right thread model 真是写得太好了。另外结合Ron Hitchens 写的《JAVA NIO》一起看对理解JAVA NIO和Netty还是很有帮助的 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p795bqicj305c06r0ue.jpg) + +#### ZooKeeper + +> 值得使用zookeeper的人员阅读, 对于zookeeper的内部机制及api进行了很详细的讲解, 后半部分深入地讲解了zookeeper中ensemble互相协作的流程, 及group等高级配置, 对zookeeper的高级应用及其它类似系统的设计都很有借鉴意义. + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p7a3ko6uj306d08dgn8.jpg) + +#### 从Paxos到Zookeeper|倪超 + +> 分布式入门鼻祖,开始部分深入阐述cap和base理论,所有的分布式框架都是围绕这个理论的做平衡和取舍,中间 zk的原理、特性、实战也讲的非常清晰,同时讲cap理论在zk中是如何体现,更加深你对cap的理解. + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p7w6kz33j304n06x411.jpg) + +#### 深入理解Nginx(第2版)|陶辉 + +> 云里雾里的快速读了一遍,主要是读不懂,读完后的感受是设计的真好。 +> +> 原本是抱着了解原理进而优化性能的想法来读的,却发现书中的内容都是讲源码,作者对源码的注释超级详细,非常适合开发者,但不适合使用者,给个五星好评是因为不想因为我这种菜鸡而埋没了高质量内容。 +> +> 另外别人的代码写的真好看,即便是过程式语言程序也吊打我写的面向对象语言程序。 +> +> +> 作者是zookeeper的活跃贡献者,而且是很资深的研究员,内容比较严谨而且较好的把握住了zk的精髓。书很薄,但是没有废话,选题是经过深思熟虑的。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9hl5674ysj30940cndi1.jpg) + +#### 深入剖析Tomcat + +> 本书深入剖析Tomcat 4和Tomcat 5中的每个组件,并揭示其内部工作原理。通过学习本书,你将可以自行开发Tomcat组件,或者扩展已有的组件。 Tomcat是目前比较流行的Web服务器之一。作为一个开源和小型的轻量级应用服务器,Tomcat 易于使用,便于部署,但Tomcat本身是一个非常复杂的系统,包含了很多功能模块。这些功能模块构成了Tomcat的核心结构。本书从最基本的HTTP请求开始,直至使用JMX技术管理Tomcat中的应用程序,逐一剖析Tomcat的基本功能模块,并配以示例代码,使读者可以逐步实现自己的Web服务器。 + +![image-20191201222250542](https://tva1.sinaimg.cn/large/006tNbRwly1g9hl6blywnj30a60d5aec.jpg) + +#### 深入理解计算机系统 | 布莱恩特 + +> 无论是内容还是纸张印刷,都是满分。计算机学科的集大成之作。引导你如何练内功的,算是高配版本的计算机导论,目的是釜底抽薪引出来操作系统、组成原理这些专业核心的课程。帮助我们按图索骥,点亮一个一个技能树。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p5go30knj305t07k41h.jpg) + +#### 架构探险分布式服务框架 | 李业兵 + +> 刚看前几章的时候,心里满脑子想得都是这特么贴一整页pom文件代码上来干鸡毛,又是骗稿费的,买亏了买亏了,后来到序列化那章开始,诶?还有那么点意思啊。 +> +> 到服务注册中心和服务通讯,60块钱的书钱已经赚回来了。 +> +> 知识是无价的,如果能花几十块钱帮你扫了几个盲区,那就是赚了。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p5465ts4j30820axmzd.jpg) + +#### 深入分析JavaWeb技术内幕 | 许令波 + +> 与这本书相识大概是四年前是在老家的北方图书城里,当时看到目录的感觉是真的惊艳,对当时刚入行的自己来说,这简直就是为我量身定做的扫盲科普集啊。 +> +> 但是可惜的是,这本书在后来却一直没机会读上。然后经过四年的打怪升级之后,这次的阅读体验依旧很好。 +> +> 其中,java编译原理、 Servlet工作原理、 Tomcat、spring和iBatis这几章的收获很大。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p58vmtbgj305a06xq4a.jpg) + +### 前端 + +#### jQuery 技术内幕| 高云 + +> 非常棒的一本书,大大降低了阅读jquery源码的难度(虽然还是非常难)。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p7t0px2oj305507kgn6.jpg) + +#### Head First HTML与CSS(第2版) + +> 翻了非常久的时间 断断续续 其实从头翻到尾 才发现一点都不难。 +> +> 可我被自己的懒惰和畏难情绪给拖累了 简单说 我成了自己往前探索的负担。网页基础的语法基本都涵盖了 限于文本形态 知识点都没法像做题一样被反复地运用和复习到。通俗易懂 这不知算是多高的评价? +> +> 作为入门真心算不错了 如果更有耐心 在翻完 HTML 后 对 CSS 部分最好是可以迅速过一遍 找案例练习估计更好 纸上得来终觉浅 总是这样。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p82yw9h2j306206umza.jpg) + +#### JavaScript高级程序设计(第3版) + +> JavaScript最基础的书籍,要看认真,慢慢地看,累计接近1000小时吧。而且对象与继承,性能优化,HTML5 api由于没有实践或缺乏代码阅读量导致看的很糊涂,不过以后可以遇到时再翻翻,或者看更专业的书。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p84bb5nzj30a30d1475.jpg) + +#### 深入理解ES6 + +> Zakas的又一部杰作,他的作品最优秀的地方在于只是阐述,很少评价,这在帮助我们夯实基础时十分有意义,我也喜欢这种风格。 +> +> 我是中英文参照阅读的,译本后半部分有一些文字上的纰漏,但是总体来说忠实原文,水平还是相当不错,希望再版时可以修复这些文字问题。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p85sjtt2j305a06sgnh.jpg) + +#### 高性能JavaScript + +> 还是挺不错的。尤其是对初学者。总结了好多程序方面的好习惯。 +> +> 不过对于老手来说,这些常识已经深入骨髓了。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p87g3d26j306706ymy8.jpg) + +#### 深入浅出Node.js|朴灵 + +> 本书是我看到现在对Node.JS技术原理和应用实践阐述的最深入,也最全面的一本书。鉴于作者也是淘宝的一位工程师,在技术总是国外好的大环境下,没有理由不给本书五颗星。 +> +> 作者秉着授人于鱼不如授人于渔的精神,细致入微的从V8虚拟机,内存管理,字符串与Buffer的应用,异步编程的思路和原理这些基础的角度来解释Node.JS是如何工作的,比起市面上众多教你如何安装node,用几个包编写一些示例来比,本书绝对让人受益匪浅。 +> +> 认真看完本书,几乎可以让你从一个Node的外行进阶到专家的水平。赞! + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p8cjo7t8j30a50cy0wx.jpg) + +#### Vue跟React的技术栈的书不多,很多也是官方文档的照搬照抄,我觉得看官网吧哈哈。 + +### 非技术类 + +#### 失踪的孩子 + +> 整本书的能量太密集了,像一个源源不断喷发的火山,读完怅然若失。最后几页,莱农从时间中回望,生命的真相被自己毫不留情的剖白,而即使是这样的时刻,她依然能再次在对莉拉的爱和嫉妒中被激发开始进行她最为重要、最可能留在时间之中的作品的创作,如此的勇气,诚实和坚韧……反正我已经喜欢她了。 +> +> 而莉拉依然是个迷。她和莱农是相反的人,莱农会攫住一切填充自己,去成为,但莉拉对任何事情的投入都不会滋养自身,而是燃烧掉自己的一部分。 +> +> 她的激情,超越一切的理解和视野与她的情绪化,她的恐惧,都让人困惑。莉拉是所有人的镜子,任何人在她面前都不得不面对自己;同时,是不是没有人,或者说莉拉没有允许任何人了解她?因为她在与外界和自己的对抗中也未能真正看见自己? + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9hb6zxcnrj309a0dvdmf.jpg) + + + +#### 人生|路遥 + +> 想着和平凡的世界一个调子,都是乡村,都是文革的尾巴,都是那点家长里短绝对真实。 +> +> 我总觉得那是作者的真实写照,一切都是从自己的记忆中提炼出来的故事。 +> +> 只不过根据高加林我总在思考劳动人民是否应该有文化,有文化了以后就开始痛苦,开始怀春悲秋,开始事逼,开始怨天尤人。 +> +> 知识分子那些臭毛病显露无疑。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p4zwk1hkj304r06o74x.jpg) + + + +#### 丝绸之路 | 彼得·弗兰科潘 + + + +> 书的颜值很高,厚厚的大开本,包装和纸张都不枉自己百元大洋。书名虽叫【丝绸之路】,但是读后发现其实是以中东为针,一路串起亚欧大陆各个文明两千多年间所发生的故事。 +> +> 从史实、文化、宗教、政治、权力、金钱等多方面论述了以中亚和欧洲为主的发展史,信息量非常的大。每个章节的标题都用四个字直接道出当前世界的核心驱动,比如基督之路、铁蹄之路、西欧之路、纳粹之路、争霸之路。 +> +> 视野广阔,大开大合,时间跨度可算是穿越千年中东。美中不足的是,中国作为丝绸之路东段上最为重要的国家,描述的篇幅却很少。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p523axbhj308w0d3gxt.jpg) + +#### 我的天才女友 | 埃莱娜·费兰特 + +> 来自意大利作家的小说,“那不勒斯”四部曲的第1部,讲述了两个女主人公莉拉和埃莱娜的少女时代。 +> +> 相比七月与安生,跨度更大,情节也要丰富很多,但是作为一个男性阅读角度似乎get不到小说所评价那样优秀的点,代入感很好,时间已经过去好久,现在留在记忆中的还是如西西里的美丽传说般暖色调的意大利小镇上有两个小女生在平淡的生活。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p52yzal1j308i0cujvr.jpg) + + + +#### 长安十二时辰 | 马伯庸 + +> 开年第一单,阅读体验非常的好,完全是美国个人主义英雄大片的大唐版,而主人公张小敬身上却有着更多的坚忍和矛盾,中间有个片段,讲檀棋在元宵灯会的街上跟着张小敬,在万千盏灯笼一齐高高烛起,光彩明耀,火树银花中,看张小敬的背影显得很是落寞。 +> +> 读完之后,这一幕仍然记忆犹新,靠整个故事的支撑,这一幕真的完全可以体会到落寞二字。 +> +> 书中很认真的说了一些长安的城建和大唐的民俗,管制,可以看出来为了写出这本书,亲王的确是花费了不少心思的,很佩服。 +> +> 一本非常非常适合改编成电影的小说(事实上也的确正在拍摄),值得推荐。 +> +> ps:2019年同名电视剧已经上线了… + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p55k5ae1j305x088tbb.jpg) + +#### 布谷鸟的呼唤 | J·K·罗琳 + +> 大概三年前买的,今年回家整理新书架的时候发现了它,就带回杭州了。 +> +> 故事情节比不上哈利波特,但是文笔是真的没得说,毕竟是能写出来哈利波特的人。 +> +> 作为推理小说,怕是不及格,但是把它作为犯罪小说之类的非类型小说来看的话,其实阅读体验还是可以的。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p570nyqlj304906c0ut.jpg) + +#### 欧洲:1453年以来的争霸之路 | 布伦丹·西姆斯 + +> 自文艺复兴之后,欧洲开始渐渐的走进地球文明的舞台正中心。 +> +> 读到中间德意志民族的内政被周边国家的各种干涉,感觉德国和我们的兔子一样,是个多难的民族,所以统一之后思想家才会这么多,一战二战的德国,如果用兔子的一句话概括,我们走了一些弯路。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p57r7m8bj305106vab6.jpg) + + + +#### 房思琪的初恋乐园 | 林奕含 + +> 正如文前李银河所说,林奕含属于老天爷赏口饭的那种人,非常有才华的、有灵气的一位年轻作者。我们应当感激,不用亲身经历,就可以看到世界的背面,难以想象出林每次去回忆,然后再去一步一步的描述出当时的心理活动,此间的痛苦。 +> +> 最后,书中的话:忍耐不是美德,把忍耐当成美德是这个伪善的世界维持它扭曲的秩序的方式,生气才是美德。 + +![image-20191208111703561](https://tva1.sinaimg.cn/large/006tNbRwly1g9p59q27ptj308v0d1goe.jpg) + +#### 毛泽东传 | 迪克·威尔逊 + +> 来自英国人的传记,可以当做记事表,而且就算有一些主观评价在里面,作为外国人难免有偏差,也不可信,毛公当称之为我等民族力挽狂澜第一人。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p5a4lrkoj30930cvq6k.jpg) + +#### 半小时漫画世界史 | 陈磊 + +> 和上一本中国史一样,阅读体验很轻松,如果是对这段历史毫无概念的话,真的砸墙推荐。但是如果是要有了一定的知识储备的话,那就没啥意思了,半小时也别指望能讲多深了。 +> +> 巴黎和罗马真的是太值得去一次的了。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p5akzxwcj305q080ju1.jpg) + + + +#### 欧洲现代史:从文艺复兴到现在 | 约翰·梅里曼 + +> 耶鲁大学历史教授的课堂讲义,采用的是国别和编年混合风格,顺着历史发展的脉络逐一展开,又不失相互关联性,而不是简简单单的说几几年发生了什么,几月几日谁谁谁死了这些。 +> +> 5个世纪中葡萄牙西班牙瑞典荷兰法国轮流崛起,俄国西化,德国统一,英国宗教改革,奥地利波兰土耳其相继衰落,文艺复兴,启蒙运动,航海时代,工业革命,世界大战,美苏冷战。 +> +> 维多利亚女王拿破仑一世路易十四彼得大帝叶卡捷琳娜俾斯麦希特勒丘吉尔,当称人类群星闪耀时。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p8gzwznxj308k0cxgur.jpg) + +#### 爱德华•巴纳德的堕落:毛姆短篇小说集1 | 毛姆 + +> 屯了毛姆这么多书,这次才是第一次看。 +> +> 书的纸张倒是很有意思,600多页,却很轻。故事读起来倒像是个老朋友再和你讲故事,叨叨叨的从夏威夷讲到南美洲,又从西海岸讲到东南亚,讲故事的水平非常的高,几乎都是几段字下来,就把人带到了故事场景中。最喜欢的两篇是爱德华•巴纳德的堕落,赴宴之前,和最后的译后记。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p8hfbpmwj30910d3q62.jpg) + +#### 一句顶一万句 | 刘震云 + +> 第八届茅盾文学奖获奖作品,叙事架构犹如一生二二生三三生万物绵绵不绝扩散开来,薄薄三百页,前后一百年,初看时以为《平凡的世界》,结局才发现是《百年孤独》,“生活是过以后,而不是过从前”。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p5f2o019j30880c977w.jpg) + +#### 生活的艺术家 | 李小龙 + +> 来自李小龙的一本散文集,是的,就是那个李小龙。 +> +> 很难想到那个在电影里面喊着啊哒~的他,大学是专修哲学的。书中的文章大都是对于生活和哲学的思考,可以看到那个在大荧幕前面一秒五踢啊哒啊哒的背后,是一个冷静、理性、智慧、通达的李小龙。“我无法教你什么,只能帮助你探求你自己。除此之外,别无他法。” + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p5fhyndzj30960d0jv0.jpg) + +#### 穷查理宝典 | 查理芒格 + +> 查理芒格的思想集和演讲稿编,知识面跨学科,洞察力才能足够深,包括数学、物理、生物、历史、经济等这些硬学科,从而形成一个多学科的思维框架。 +> +> 致富也不只是赚了多少钱那么简单,而是在道德品质、阅读能力和个人生活上全面提升的过程。应该专注于正在做的事情,多阅读,特别是传记,来和“伟人”交朋友,减少物欲,满足自己已经拥有的,不嫉妒别人。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p5g0q0xrj308x0cu790.jpg) + + + + + +#### 汉密尔顿传 | 罗恩·切诺 + +> 我只能说汉密尔顿,这个被印在美元上的人,人生只能用精彩至极来形容了。 +> +> 书中详细介绍了汉密尔顿在独立战争、费城制宪、宪法批准、首届国会以及建国初期等不同历史阶段中发挥的巨大作用,尤其是建国之初,在一切都没有先例的情况下,汉密尔顿为奠定美国联邦的政治体制、经济秩序和金融体系做出了巨大的贡献——建立美国信用体系,建立联邦银行,建立联邦税收体系,建立海关,建立海岸警卫队,以及促进制造业发展等。 +> +> 在这本波澜壮阔的自传的最后,本以为能写上一大段对他的盖棺定论,然而却很平淡随意的用他写给艾丽萨的一封信作为了结尾,可能是不再需要作者去告诉书前的人他该如何评价,历史已经给出了答案。 +> +> “艾丽萨,你治愈了我此生因爱而生的伤痛。” + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p5h41987j308r0d4jxn.jpg) + +#### 百年孤独|加西亚·马尔克斯 + +> 久负盛名的大作,读完只能说,果然只有这种书才配得上诺奖。 +> +> 先前看《霍乱时期的爱情》,印象最深的就是华丽魔幻文笔和细腻的心理活动描写,到这本《百年孤独》,震撼的目瞪口呆,怎么能有人写得出这样的小说。 +> +> 只能说,无论怎么列必读书籍,都绕不开此书。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9payh7k2gj304w06zjtm.jpg) + +#### 月亮与六便士 + +> 毛大爷名气最具盛名的一本书,很易读的文学作品。 +> +> 全篇小说都是从第一人称“我”的角度,对斯特里克兰德进行了主观的描写,从斯特里克兰德开始离家出走开始渐入佳境,毛姆在环球旅行中写作,以至于场景地点的代入感都非常强,带着读者登上塔希提岛上,在酒馆里和众人逐个聊起斯特里克兰德,“我”和读者一起,在一来一去的谈话中,了解到了这个天才最后的经历。后半生穷困潦倒的他在死的时候,肯定不会知道自己在死后的一个世纪,被称之为天才,画作也被收藏在美术馆作为镇馆之宝,流传百年。但他是自由的,没有遗憾的。 +> +> 最后引用一段话,“只要在我的生活中能有变迁——变迁和无法预见的刺激,**我是准备踏上怪石嶙峋的山崖,奔赴暗礁遍布的海滩的**。” + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pazz9ps7j305d08fabf.jpg) + +#### 股票作手回忆录|杰西·利弗莫尔 + +> 被誉为百年美股第一人,杰西·利弗莫尔的自传,五美元起家,到日赚一亿美金的投机之路,可以看到利弗莫尔在小的时候就对数字有着非常人的敏感和对波动线的记忆力,十多岁只身一人远走纽约,更见其杀伐果断之气。全书并没有讲操作细节,但是传主的做事风格很值得研究,时机、独立思考、判断、知错能改、以及鳄鱼般的耐心。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9pb22853bj307h0avjw3.jpg) + +#### 万历十五年 | 黄仁宇 + +> 一本表面上写历史,却涵盖当时的政治、经济、社会民俗、当世思想的大作,对中国历史上诸多王朝暗流下那道潜规则的分析和批判。格局之大,立意之高,实属罕见。 +> +> 读罢全书,我们明白明王朝的覆灭是必然的,而后的满清,只不过是改朝换代,骨子里与前朝无异,灭亡也是迟早的。 +> +> 我们的身上被锁住了一个牢固的枷锁,丢在泥坑,都在挣扎,越来越烂。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p5hlkzacj306q0a678y.jpg) + +#### 第五项修炼| 彼得·圣吉 + +> 前半部分理论,后半部分讲实战。捞干的来说,大局观的系统思考能力、增长极限和转移负担的自我超越能力、正向暗示的心智能力,拓展认知边界建立跨学科的思维架构能力。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9paqbo315j307o0aegq9.jpg) + +#### 海边的卡夫卡|村上春树 + +> 卡夫卡,舒伯特,艾希曼,琼尼沃克,乌鸦少年,短毛猫语,竹筴鱼雨,肠子迷宫,夏目漱石,雨月物语,俄狄浦斯。在这个世界上,不单调的东西让人很快厌倦,不让人厌倦的大多是单调的东西。 +> +> 我的人生可以有把玩单调的时间,但没有忍受厌倦的余地,而大部分人分不出二者的差别。 +> +> 孤独因你本身而千变万化。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p8j94vu8j305l080tau.jpg) + +#### 白夜行|东野圭吾 + +> 把小说写成这样绝对是开挂了吧,除了连番登场的几十号人物,随处雕琢的大时代的背景也让人叹为观止。对人性的挖掘比起吉田修一还是弱一些,就是纯好看,从第一句开始吸住你逐渐往往里掉。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p8lcl2kjj308v0cjta5.jpg) + +#### 嫌疑人X的献身|东野圭吾 + +> 这个社会 每一个人都是时钟上的齿轮,为了自己的意愿,也不该牺牲掉他人,哪怕那是出于爱,一个错误尚且为错,付出更大的努力用更大错误也扭转不了的, +> +> 这毕竟不是数学的负负得正,逻辑之所以没法解决罪恶的问题,只因为最初就规避了人性。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p8mu1j9ij303v05wq3o.jpg) + +#### 追风筝的人|卡勒德·胡赛尼 + +> 为什么忠诚善良的人反而遭到这样的结局,面对阿米尔的污蔑,他和阿里选择离去。 +> +> 当房屋需要他时,他又毅然决然的选择坚守,为了阿米尔能够得到父亲的赞许,哈桑却受到那样的凌辱,换来的却是懦弱的阿米尔的回避,身份,阶级,好可笑的头衔,生命与忠诚在那些虚无的名誉不值一提。 +> +> 犹如草芥浮萍.... + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p8pkbzjzj30890ba449.jpg) + + + +#### 恋情的终结 | 格雷厄姆 + +> 现在看的小说都不多了,而爱情小说更是少之又少,但幸运的是,这本和上一本霍乱时期的爱情一样,都是不可多得的大师之作。 +> +> 小说情节简单来说就是爱上了个有妇之夫,然后阴差阳错私奔失败,接着分道扬镳直到多年之后的偶遇,最后女主患病而亡。 +> +> 但文笔是真的细腻到不敢相信是个男人写的,书里穷尽了爱情中所有狂热的情感,狂热的爱,狂热的恨,狂热的猜疑,狂热的嫉妒,狂热的占有。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p5i3ws6rj308w0cx433.jpg) + +#### 龙族I-IV|江南 + +> 我十六岁的时候,看《缥缈录》,心中念着那个拿着虎牙枪的少年。 +> +> 如今我二十三岁了,看《龙族》,面对一堆白烂中二的吐槽不知所措。 +> +> 就像拿枪的少年穿起了风衣,救美的英雄接受了金币。我看着商业化写作对一个作者的侵蚀和改变,这让我觉得难过极了。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p8rgagdzj307g0afwjl.jpg) + +#### 三体I-Ⅲ|刘慈欣 + +> 《三体》就是那种让你在读完三部之后掩卷抬头,感觉眼中的世界都从此不一样了的书。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p8vyqi5aj306t09s0xq.jpg) + +#### 流浪地球|刘慈欣 + +>觉得文笔胜于三体,且惊觉是三体之前的作品。 +> +>对于其中地球变轨后的生态变化仍存在疑惑,那段地球与木星擦肩表现力强,不错的作品。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p8x4x6grj306o09tn1b.jpg) + +#### 全球通史 + +> 这种时间跨度如此之长的,有之前的《丝绸之路》和《人类简史》,但是无论是整体行文的架构、视野的宽度、以及分析思考的深度上来说,此书都要比这两本要优秀得多,尤其是到一战之前的部分。 +> +> 幸亏之前大量零碎的知识点做背书,再遇此书建立整体体系,穿针引线,才有所体会到书前序中的"思接千载,视通万里"之感。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p5ikz4iqj305d06emyk.jpg) + +#### 程序员的自我修养|俞甲子 / 石凡 / 潘爱民 + +> 讲的不错,将硬件与系统、机器层与实现层整合了起来,有了一个很清晰的视角。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p5yfbt7nj3062081q5e.jpg) + +#### 颈椎病康复指南|董晓俊 + +> 出来打工不容易,大家照顾好自己。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p9d2xa3fj304v06pwgh.jpg) + +#### 活着|余华 + +> 为啥安利这个,大家懂就好了 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p5vdln2rj306a09h0u9.jpg) + +#### 我们一无所有|安东尼·马拉 + +> 艺术让我们不因真实而亡故,结构相当特别,像是在看电影。 +> +> 讲述从苏联联邦到新俄罗斯近80年历史车轮下一些动人心魄的小人物微尘。 +> +> 语言克制、平静,读来却十分疼痛,或是戏谑嘲讽像是苦中求乐,非常喜欢。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p92czed3j30930cxtdg.jpg) + +### 总结 + +其实我觉得在我们现在这个浮躁的社会,大家闲暇时间都是刷抖音,逛淘宝,微博......他们都在一点点吞噬你的碎片时间,如果你尝试着去用碎片的时间看看书,我想时间久了你自然能体会这样的好处。 + +美团技术团队甚至会奖励读完一些书本的人,很多公司都有自己的小图书馆,我觉得挺好的。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p9ws50vbj309w02smx9.jpg) + +我现在也认识很多作者,像程序员小灰,老钱这样的作者,都很不错,如果未来自己能达到写作的条件的话我也想写哈哈。 + +至于我为啥不敢懈怠......三歪(java3y作者)在我对面我真的不敢有丝毫放松,每次闲暇之余我准备拿起手机玩耍的时候,看到他在看书,我默默的放下手机,就是这样的人在不断鞭笞着我。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9p9inda6cj30ci0bk3zp.jpg) + +### 鸣谢 + +自己技术群的小伙伴:很多书籍我没写进去,主要是记录被刷走太多了,我让大家私聊,结果都发群里了,我就懒得整理了,主要是没书评我没看过也不敢写。 + +豆瓣小伙伴:很多我没有的书籍我都是找的豆瓣书评。 + +阿里技术团队的小伙伴:文章有很多书评都是来自他。 + +博文视点:对文末抽奖的赞助 + +**其实很多好书我都没写到,一时想不到,大家有喜欢的也留言让更多朋友看到嘛,我有空会修改文章。** + +**还有就是本文主要的目的不是安利多少书,主要是想大家放下手机翻开你在角落积灰的书籍,你会发现里面有光的。** + +这周双十二有点小忙,年会的事情也紧锣密鼓的筹备着,我下周要是鸽了那...... + +### 抽书!!! + +#### 书名:Java系统性能优化实战 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1g9rvg6ddgyj30b20ey76x.jpg) + +个人推荐理由: + +- 20多个优化技巧:说明Java性能优化的各种方法。 + +- 30多个具有“坏味道”的代码片段:实战演练优化技巧。 + +- 常用的高性能工具:以Caffeine、Jackson、HikariCP为例进行讲解,并对其高性能的原因做一定的源码解析。 + +- 容易阅读的代码:从代码注释、代码分解和面向对象三方面讲解如何编写容易阅读的代码。 + +#### 规则: + +抽两本,公众号「**三太子敖丙**」这个文章下面留言点赞排名前两位送两本,截止本周我发周报之前,公众号和掘金周六我会写周报。 + +觉得概率不大? + +**月底会有一个文章抽30本书**,至于送啥书,贫穷的我得好好想想。 + + + +## 点关注,不迷路 + +好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是**人才**。 + +我后面会每周都更新几篇一线互联网大厂面试和常用技术栈相关的文章,非常感谢**人才**们能看到这里,如果这个文章写得还不错,觉得「敖丙」我**有点东西**的话 **求点赞👍** **求关注❤️** **求分享👥** 对暖男我来说真的 **非常有用**!!! + +创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见! + +敖丙 | 文 【原创】 + +如果本篇博客有任何错误,请批评指教,不胜感激 ! + +------ + +> 文章每周持续更新,可以微信搜索「 **三太子敖丙** 」第一时间阅读和催更(比博客早一到两篇哟),本文 **GitHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 已经收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 diff --git "a/docs/creative/\345\275\251\350\233\213.md" "b/docs/creative/\345\275\251\350\233\213.md" new file mode 100644 index 0000000..2395089 --- /dev/null +++ "b/docs/creative/\345\275\251\350\233\213.md" @@ -0,0 +1,9 @@ +### 我定期收集一些话放在这里,大家一起共勉. + +- 无论面对怎么样的失败,我决定再来一次。 + +- 最高级的自律,享受孤独。 + +- 你要悄悄拔尖,然后惊艳所有人。 + +- 如果父母还那么辛苦,那我们长大有什么用? \ No newline at end of file diff --git "a/docs/creative/\351\241\266\347\272\247\347\250\213\345\272\217\345\221\230\347\232\204\347\231\276\345\256\235\347\256\261.md" "b/docs/creative/\351\241\266\347\272\247\347\250\213\345\272\217\345\221\230\347\232\204\347\231\276\345\256\235\347\256\261.md" new file mode 100644 index 0000000..39e68f9 --- /dev/null +++ "b/docs/creative/\351\241\266\347\272\247\347\250\213\345\272\217\345\221\230\347\232\204\347\231\276\345\256\235\347\256\261.md" @@ -0,0 +1,450 @@ +> +> +> 你知道的越多,你不知道的越多 + +> 点赞再看,养成习惯 + +> **GitHub**上已经开源 [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和指教 + +## 前言 + +这期是被人才群交流里,还有很多之前网友评论强行顶出来的一期,就是让我介绍自己常用的一些工具给他们安利一下,我一听很高兴呀,帅丙我这么乐于奉献的人是吧。 + +主要是能水一篇文章就很开心,不过写下来发现花的时间完全不比写技术少,**点赞**!!! + +千万不要白嫖,**真香警告**⚠️。 + +但是我在构思这篇文章的时候发现我贴个标题,然后发下软件信息会不会太乏味了,于是创作鬼才我呀,准备用一个产品的研发流程,是的就是**用这样的一个思路**去写这个工具集的介绍文章。 + +因为读者很多还是学生,还有很多应届生,对一个需求的研发流程都不是很熟悉,还有可能对于以后自己需要使用到的工具都不是很熟悉,那我就一一罗列一下,帅丙我作为一个还算有点小经验的程序员都使用哪些工具呢? + +那下面就跟随**暖男**的脚步,走进**顶级程序员的百宝箱**吧(我所有的标题都是噱头就为了夸大其词,我是低级程序员,大家看了也不能吊打面试官,笑笑就好了)。 + +**注意**:下面的软件我都是简单的介绍下是干啥的,因为太多了,真正的功能需要大家深挖的,能力允许的朋友下载正版,破解方法去Github [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 加我回复【**软件**】就好了。 + +## 正文 + +既然都说了**帅丙**是要用一个产品的研发流程角度去介绍软件,那我们先看看一个产品有哪些研发流程,帅丙就用自己接触的阿里系的研发流程举例了,这也基本上是互联网大厂的研发流程了,可能细节有出入,但是绝对大同小异。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g99d853pj1j30qj0bxq32.jpg) + +**Tip**:我从开发的视角去介绍的话我就会**跳过一些**软件,比如提出需求这个其实一般都是文档类的,**wiki**呀这样的形式。 + +我就不介绍那种流程工具了,公司很多自研的,大家工作了再去熟悉也很快的。 + +### 概要设计: + +**概要设计**,这个是大厂程序员需求下来之后基本上都会做的一步,不过看需求大小,可能很多小需求直接就**详细设计了**。 + +很多不了解的同学可能会问,需要设计什么呢?为什么要设计呢? + +问得好,经常看我文章的都知道,**技术是把双刃剑**,你用了技术之后你是不是需要**列出他的优点缺点**,出问题之后的**解决方案**,还有**可能出现的问题**,**注意点**等等。 + +这么是为了让你能有把控力,比如你用了个**Es**(**Elasticsearch**)你什么都不管你就是要接入它,你把他开发好了上线了,但是有啥坑你知道么?上线崩了怎么办? + +帅丙我做**Es**设计的时候设计被老大打回N次,不过成长真心大,对**Es**的了解也飞速进步。 + +其实远远不止这些问题,这就是我们做设计的主要原因,也是大家工作里面能成长的途径之一,你以为大佬们的经验是怎么来的? + +##### 工具:Xmind/ProcessOn + +- Xmind官网地址: [https://www.xmind.cn](https://www.xmind.cn/) +- ProcessOn**在线作图**地址:[https://www.processon.com](https://www.processon.com/i/5c349823e4b0db2e592c4847) + +> 我这里列举了两个工具,他们两个都可以做概要设计的脑图,我给大家看看我设计过的一些脑图,都是出自这两个软件。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g99emaijzoj30hr0zhgnq.jpg) + +大家在学习,看书等等的时候做个脑图,我告诉你后面你复习还是干啥都**思路贼清晰**,而且**效率**瞬间**高**很多。 + +### 详细设计 + +小伙伴又要问了啥是详细设计呀**帅丙**? + +诶呀简单,见名知意嘛,概要设计是大概的设计,详细设计是详细的设计。 + +我们研发的时候整个流程往往很复杂,如果你理解不对直接就写代码,最后容易造成返工,延期,加班,被骂,心情差,回家吵架,离家出走。。。 + +**看到不做详细设计的后果了吧**,其实大家花点时间做详细设计很有必要,你思路完全清晰了,写代码那就是分分钟的事情,不是嘛? + +那再看看帅丙的一个小设计吧,之前文章中大量的流程图,时序图都来自它,**主要是这玩意还是在线的,都不用下载很方便啊。** + +详细设计的工具我用的就是**在线**作图神器:**ProcessOn** + +- 在线画图地址:[https://www.processon.com](https://www.processon.com/i/5c349823e4b0db2e592c4847) + +> 总之一句话很香,流程图、思维导图、原型图、UML、网络拓扑图、组织结构图、BPMN等等一应俱全 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9agh6woxsj31h90pfn6k.jpg) + +### Ascilflow + +- 官网地址: [http://asciiflow.com](http://asciiflow.com/) + +> 进入网站后直接开画!网页上端是菜单,自行操作! + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9b8zxdu58j31h70pjmy9.jpg) + + + +### 研发 + +这个关键了:**工欲善其事,必先利其器** + +想必大家都知道这个谚语吧,我就说一下我写代码要用到的软件吧。 + +#### Intellij IDEA + +- 官网地址 : [http://www.jetbrains.com/idea](http://www.jetbrains.com/idea/) + +> 这个我想都不用我介绍了吧,Java的同学都耳熟能详了,有同学问为啥不用eclipse呀,我不作回答,但是我只能告诉你IDEA肯定是效率还有很多方面都要香的。 +> +> 不过看个人习惯的哈,新同学还是推荐IDEA!!! + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9als0bk5ej30pe0hsdr7.jpg) + +#### WebStorm + +- 官网地址 : [http://www.jetbrains.com/webstorm](http://www.jetbrains.com/webstorm/) + +> 有知道同学要问了,帅丙这不是前端的开发工具么,为啥你要用,帅丙我呀全才来的呀,前端偶尔也写点的嘛,主要是js,vue,jq,还有丢丢React,不过最近帮三歪改前端居然是jsx有没有大佬救救我啊。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9alu9ppltj318c0qmk61.jpg) + +### Visual Studio Code + +- 官网地址:[https://code.visualstudio.com](https://code.visualstudio.com/) + +> Visual Studio Code是一个**轻量且强大的跨平台开源**代码编辑器(IDE),支持Windows,OS X和Linux。内置JavaScript、TypeScript和Node.js支持,而且拥有丰富的插件生态系统,可通过安装插件来支持C++、C#、Python、PHP等其他语言。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9b8ss7mr4j30jl0cc0xi.jpg) + +#### PyCharm + +- 官网地址 :[http://www.jetbrains.com/pycharm](http://www.jetbrains.com/pycharm/) + +> 这个是python之前那次还记得我写代码大赛那期嘛,最开始就是用这个写的,平时学的时候也用用。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g99j15dhq6j31c00u0gta.jpg) + +#### Navicat Premium + +- 官网地址 :[https://www.navicat.com.cn](https://www.navicat.com.cn/) + +> 这个呀是数据库的可视化工具很香很好用,不过我们线上的表都是网页操作的,这个只能用来看看本地的开发表了,不过也是很有必要的,你SQL怎么都得本地跑一下没问题,才向DBA申请的嘛。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g99j2ghjzsj31i00u0ttm.jpg) + +#### Postman + +- 官网地址 :[https://www.getpostman.com](https://www.getpostman.com/) + +> 这个是接口调试的神器,单测比较繁琐的你可以试试这个嘛,不过很多接口还是只能写写单测,反正很香。 +> +> 不过这个名字一看就是男生用的,那我们女生用啥呢?往下看 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g99j4v0e29j31gy0u0n4k.jpg) + +#### Postwoman + +- 官网地址 :[https://postwoman.io](https://postwoman.io/) + +> PostMan一听就是男生用的,咋妹子们肯定要用最近开源的Postwoman啊,它是一款开源的 Postman 替代品 +> +> +> +> 开源没多久优点如下: +> +> - 轻盈,可直接在线访问; +> - 简约,采用简约的 UI 设计精心打造; +> - 支持 GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH 方法; +> - 支持验证; +> - 实时,发送请求即可获取响应。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9ahb0a8p6j31h90q440x.jpg) + +#### GIt + +- 官网地址 :[https://git-scm.com](https://git-scm.com/) + +> 代码文档管理工具,版本控制工具,大家之后的代码基本上都是使用git做版本管理 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9afd6lxdvj30w30u0qbk.jpg) + +#### Maven + +- 官网地址 :[http://maven.apache.org](http://maven.apache.org/) + +> 目前帅丙用到Maven的主要功能是:项目构建、项目构建、项目依赖管理、软件项目持续集成、版本管理、项目的站点描述信息管理 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9afdu2hd0j31i40u0tg8.jpg) + +#### Gradle + +- 官网地址 :[https://gradle.org](https://gradle.org/) + +> Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。 +> +> 它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。 +> +> 这个跟Maven功能是一样的,但是两者语法不一样,而且我觉得版本控制的时候没Maven好使,有小坑,胜在语法简洁。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9afep032lj31i40u0wkt.jpg) + +#### Charles + +- 官网地址 :[https://www.charlesproxy.com](https://www.charlesproxy.com/) + +> 这玩意是个HTTP代理服务器,我用它的主要用法就是抓包! +> +> 都知道我是做电商的嘛,很多线上接口线上问题怎么排查呢,抓包看看数据呗。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9afgt3cc9j31fo0u0n68.jpg) + +#### JMeter + +- 官网地址 :[https://jmeter.apache.org](https://jmeter.apache.org/) + +> Apache JMeter是Apache组织开发的基于Java的压力测试工具 +> +> 是的就是用来压测的,你怎么模拟很多请求呀,就用它就对了。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9afla5m32j31400my41b.jpg) + +#### Dash + +- 官网地址 :[https://kapeli.com/dash](https://kapeli.com/dash) + +> Dash for mac是使用与Mac OS平台的软件编程文档管理工具,可以浏览API文档,以及管理代码片段工具。Dash自带了丰富的API文档,涉及各种主流的编程语言和框架。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9aflq534fj310a0j4dig.jpg) + +#### Devdocs + +- 官网地址:[https://devdocs.io](https://devdocs.io) + +> 上面那个的兄弟,但是这个不用下载,在线的 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9b9h6a1pwj31660q6jvu.jpg) + +#### DataGrip + +- 官网地址 :[http://www.jetbrains.com/datagrip](http://www.jetbrains.com/datagrip/) + +> DataGrip是JetBrains公司推出的管理数据库的产品,对于JetBrains公司,开发者肯定都不陌生,IDEA和ReSharper都是这个公司的产品,用户体验非常不错。 +> +> 最开始我用它就单纯看同事在用很酷的界面,后面发现功能也香,高亮文本啥的,很多功能大家可以去挖。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9alsqphykj316k0u04in.jpg) + +#### JVisualVM + +- 官网地址 :[http://visualvm.github.io](http://visualvm.github.io/) + +> VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。 +> +> VisualVM可以根据需要安装不同的插件,每个插件的关注点都不同,有的主要监控GC,有的主要监控内存,有的监控线程等。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9afw3e9wzj31hc0tdaeo.jpg) + +#### Iterm2 + +- 官网地址 :https://www.iterm2.com/ + +> 这个是我做日志排查的客户端工具,也是支持很多配置,直接ssh上跳板机查看线上机器的状态等等,线上问题排查还是很有必要的。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9ahq66wfhj30ou0fjwk0.jpg) + +#### 网*有道词典 + +- 官网地址 :[http://www.youdao.com](http://www.youdao.com/) + +> 有朋友要疑问了帅丙这是什么情况,鬼畜乱入么? +> +> 不是的,我们研发的时候很多单词不认识,或者命名的时候这个词汇的英文不知道还是很有必要查一下的,规范的命名是你成为顶级大牛的第一步,你命名都是A,B,C你代码review的时候,你的Leader会叫hr让你提交前回家过年的,马上过年了大家不要轻易尝试。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g99j6i4dsuj312o0u0aq2.jpg) + +#### Sublime Text + +- 官网地址 :[http://www.sublimetext.com](http://www.sublimetext.com/) + +> 这是个文本记录的工具,也可以用于写代码,但是我们有IDE了那就用来当日常琐事记录的工具,临时文档处理的工具也是可以的,反正还是很好用的。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9agwetpxvj30x30gkq7p.jpg) + + + +### 刚好最近呀人才群里的人才们都叫我安利一下我做笔记还有写博客的工具,说我排版好看。(我飘了) + +安排! + +#### 印象笔记 + +- 官网地址 :[https://www.yinxiang.com](https://www.yinxiang.com/) + +> 这个可以说是陪伴我大学到现在的一个工具了吧,我数了下,上千文件了,我的生活琐事的记录,还有学编程之后的很多东西,我都是收录在里面的。 +> +> 这个东西我就不和别的笔记比较了,因为我最开始就用的这个一直没换过,好不好用我说了不算的,大家下一个看看就知道了。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g99j876vuvj31ia0u0kjl.jpg) + +#### Typora + +- 官网地址 :[https://www.typora.io](https://www.typora.io/) + +> Typora是我一直写Markdown的工具,好用到不行,还可以切换模式你敢信?打字机模式,专注模式,源码模式总有一个你的菜. + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g99j8ii9obj31gy0u0tyo.jpg) + +#### Ipic + +- 官网地址 :[https://ipic.ca](https://ipic.ca/) + +> 图床我是配合Typora一起使用的大家Markdown是不是复制图片进来都是本地的地址,发到网上就会失效的,但是跟Typora搞基的这个工具他可以在你复制进来的时候直接传到网上了,你再去任何平台发表都可以随心所欲了。 + +![](https://ps.toolinbox.net/trluz.png) + +#### Md2All + +- 官网地址 :[http://md.aclickall.com](http://md.aclickall.com/) + +> 大家好奇我的markdown怎么这么好看呀,其实我写了markdown之后还转成了html的,用的也就是上面这个工具。 +> +> 我写完也是在这里面进行排版然后发出去的,排版要花好久,忍不住给帅丙**点赞**。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g99ja7zzqrj31s10u0tor.jpg) + +### 图像处理 + +#### Adobe Photoshop CC 2019 + +- 官网地址 :[https://www.adobe.com/cn/products/photoshop](https://www.adobe.com/cn/products/photoshop.html?promoid=PC1PQQ5T&mv=other) + +> Ps嘛大家都知道的,正常的图片处理啊用这个香,没事帮美女P下图,搞不好能找个女朋友(我又开始YY了) + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9aellqehdj31gy0u07dw.jpg) + + + +#### Adobe Premiere Pro CC 2019 + +- 官网地址 :[https://www.adobe.com/products/premiere](https://www.adobe.com/products/premiere.html?promoid=PQ7SQBYQ&mv=other) + +> 这个可能是大家使用得最多的视频处理软件了吧,很好用!!! +> +> 功能全到无法令人呼吸,缺点就是学习成本有点大,入门很快,想成为大神需要大量时间积累。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8rrp2k72aj31gy0u0b29.jpg) + +#### Adobe After Effects CC 2019 + +- 官网地址 :[https://www.adobe.com/cn/products/aftereffects](https://www.adobe.com/cn/products/aftereffects/free-trial-download.html) + +> 不知道大家视频看得多么,很多视频的特效开场都是这个做的,下面也有一个我的demo。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9aep93470j31gy0u0tqx.jpg) + +## ![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9alplvitqg30mq0ci1ky.gif) + +#### GIPHY CAPTURE + +- 官网地址 :[https://giphy.com/apps/giphycapture](https://giphy.com/apps/giphycapture) + +> 有时候大家文章不想用静态的图画去表达,想录制写代码的Gif动图,那这个软件是真的好使。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9af4nrtraj312v0u0e81.jpg) + +#### 视频播放 KMPlayer + +- 官网地址 :[http://www.kmplayer.com](http://www.kmplayer.com/) + +> 其实帅丙我心中有个播放神器的,快播。 +> +> 可惜了还没用多久,播播就夭折了,我会使用下面这个播放软件去播放我自己的视频。 +> +> 因为很多格式电脑自带的可能不支持,我又喜欢剪辑视频,所以一直用它了。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9af6ekmrzj31940pen0r.jpg) + +#### Iina + +- 官网地址:[https://www.iina.io](https://www.iina.io/) + +> 视频播放 同上 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9bacpyr2aj30j80aujxe.jpg) + +#### DouTu + +- 官网地址 : [https://www.52doutu.cn/maker/1/?order=timedown](https://www.52doutu.cn/maker/1/?order=timedown) + +>大家是不是发现我之前的文章很多表情包,其实都是在线制作的。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9akz3fsduj30ze0qe4qp.jpg) + +#### Carbon + +- 官网地址 :[https://carbon.now.sh/](https://carbon.now.sh/) + +> 帅丙之前的文章里面很多代码的图片都是这个网站生成的,很多样式可以选择,就很好看。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9akzyz0lbj30ss0nm41u.jpg) + +#### CodeLF + +- 官网地址 :[https://unbug.github.io/codelf](https://unbug.github.io/codelf/#帅丙) + +> 这个网站有意思了,写代码不知道单词怎么命名就去这里查,他是GItHub的一个爬虫工具吧,看看大神的命名总是会有思路的吧。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9al2vyo5nj30lv0bydgx.jpg) + +**注意**:上面的软件我都是简单的介绍下是干啥的,因为太多了,真正的功能需要大家深挖的,能力允许的朋友下载正版,破解方法去Github [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 加我回复【**软件**】就好了。 + +## 总结 + +其实比较香的工具还有太多了,我这里就不一一介绍了,其实有个很简单的办法,就是**问**,**学习**,**借鉴**。 + +我就是这样的,我看Leader用的什么工具我就问他这是啥,好用不?怎么用? + +包括我写博客吧,其实才写了20多天,第一天准备写的时候我就直接问**三歪(Java3y)**,你用的什么开发工具呀,怎么用的呀,包括他主要发布的哪些平台呀,发布的时间段呀,我都直接问。 + +他坐我对面,**迫于我的淫威**不得不和盘托出,主要是最近有个需求需要我帮他写代码哈哈。 + +别人都这么多的经验下来了,软件**能差嘛**?而且使用过程中不会的**还可以问一下对方**,不香嘛。 + +## 絮叨 + +先看**人才交流群**的某个人才提的问题: + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g99infjha1j30go0bh0v0.jpg) + +**Tip**: **GItHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 上有进群方式和个人联系方式,说实话在这个群,哪怕您不说话,光看聊天记录,都能学到东西(美团王炸,三歪(Java3y),并夕夕等的大佬都在)。 + +不知道大家是否还记得我之前写的幂等这样的情况? + +就是下图这样的情况,我下单增减GMV先去看看这个流水有么,有就证明加过了,就直接返回,没有才继续下面的流程。 + +![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9831ucfapj309e0j5dgs.jpg) + +他其实提的问题很好,因为我们日常开发都是**主从同步,读写分**离的,就是说我们可能加GMV加了但是我们操作的是主库,他需要将数据同步到从库,但是这个过程中他发生了延迟。 + +那这个时候如果别的系统这个**订单号消息重试**了,你是不是又进来了,你去查询流水你发现没流水你以为没加,你执行加钱的操作,结果那条延迟的也好了,是不是就加了两次。 + +正常开发中确实会有,但是主从延迟这个应该让**DBA**(**数据库管理员 Database Administrator**)去考虑的,但是呢我说过不能写有逻辑漏洞的代码嘛,其实很简单,把他放Redis嘛,设置一个30分钟左右的时间,这期间的重复消费都可以避免,要是延迟超过30分钟了那其实问题已经很大了,DBA会知道的。 + +**这篇是吐血整理,大家好好食用,记得点个赞!👍** + +## 日常求赞 + +好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是**人才**。 + +我后面会每周都更新几篇《吊打面试官》系列和互联网常用技术栈相关的文章,非常感谢**人才**们能看到这里,如果这个文章写得还不错,觉得「敖丙」我**有点东西**的话 **求点赞👍** **求关注❤️** **求分享👥** 对暖男我来说真的 **非常有用**!!! + +创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见! + +敖丙 | 文 【原创】【转载请联系本人】 如果本篇博客有任何错误,请批评指教,不胜感激 ! + +------ + +> 《吊打面试官》系列每周持续更新,可以关注我的公众号「 **JavaFamily** 」第一时间阅读和催更(公众号比博客早一到两篇哟),本文**GitHub**上已经收录[https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily),有一线大厂面试点思维导图,欢迎Star和完善,里面也有我个人联系方式有什么问题也可以直接找我,也有人才交流群,我们一起有点东西。 diff --git a/docs/idea/idea.md b/docs/idea/idea.md new file mode 100644 index 0000000..56673cf --- /dev/null +++ b/docs/idea/idea.md @@ -0,0 +1,149 @@ +> 点赞再看,养成习惯,微信搜索【**三太子敖丙**】我所有文章都在这里,本文 **GitHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 已收录,有一线大厂面试完整考点。 + +昨天群里被的人文怎么破解,晚上洗完澡睡觉正准备睡觉的时候,米豆吵醒了我,说他的idea炸了。 + +![](https://tva1.sinaimg.cn/large/0082zybply1gbrmpzffcrj30xc0cktc0.jpg) + +于是我让他搜我在公司写的破解文档,这个文档已经造福了很多同事了,我痛定思痛,觉得造福一下你们,但是我先说明,大家有能力的还是支持下正版,我只是觉得这个钱拿去洗脚香一点。 + +## 开始破解 + +今天破解的方法很简单,jar包破解的,先下载Jar包。 + +![](https://tva1.sinaimg.cn/large/006tNbRwly1gb36h9dmpfj30ys0emwi2.jpg) + + 破解包使用方法: + + 0. 先下载压缩包解压后得到jetbrains-agent.jar,把它放到你认为合适的文件夹内。 + + 公众号回复【**idea**】获取网盘链接。 + + 1. 启动你的IDE,如果上来就需要注册,选择:试用(Evaluate for free)进入IDE + + 2. 点击你要注册的IDE菜单:"Configure" 或 "Help" -> "Edit Custom VM Options ..." + 如果提示是否要创建文件,请点"Yes"。 + + 3. 在打开的vmoptions编辑窗口末行添加:-javaagent:/absolute/path/to/jetbrains-agent.jar + 一定要自己确认好路径(不要使用中文路径),**填错会导致IDE打不开**!!!最好使用绝对路径。 + 一个vmoptions内只能有一个-javaagent参数。 + + 4. ![](https://tva1.sinaimg.cn/large/006tNbRwly1gb36vup3pcj318i08eaax.jpg)示例: + mac: -javaagent:/Users/neo/jetbrains-agent.jar + linux: -javaagent:/home/neo/jetbrains-agent.jar + windows: -javaagent:C:\Users\neo\jetbrains-agent.jar + + **注**:如果还是填错了,我帮你找到了目录: + + ### Windows + + All the files are located under this directory by default: + + - **Windows Vista, 7, 8, 10:** + + ``` + \Users\\. + ``` + + - **Windows XP:** + + ``` + \Documents and Settings\\. + ``` + + ### Mac OS X + + - **Configuration (idea.config.path):** + + ``` + ~/Library/Preferences/ + ``` + + - **Caches (idea.system.path):** + + ``` + ~/Library/Caches/ + ``` + + - **Plugins (idea.plugins.path):** + + ``` + ~/Library/Application Support/ + ``` + + - **Logs (idea.log.path):** + + ``` + ~/Library/Logs/ + ``` + + 找到对应的系统idea安装目录,我的是mac,直接去这个目录 ~/Library/Preferences/ + + ![](https://tva1.sinaimg.cn/large/006tNbRwly1gb36so0twvj30kg084jsa.jpg) + + 进去就能直接看到那个idea.vmoptions然后简单,vim打开输入正确的地址就好了 + + **暖男提示**:一定要写对,有的路径你看着是对的,有的有空格啥的,三歪就是这样,告诉我路径没错,结果有空格,写错是启动不了的。 + + 5. 重启你的IDE。 + + 6. 点击IDE菜单 "Help" -> "Register..." 或 "Configure" -> "Manage License..." + 支持两种注册方式:License server 和 Activation code: + 1). 选择License server方式,地址填入:http://jetbrains-license-server (应该会自动填上) + 或者点击按钮:"Discover Server"来自动填充地址。 + 2). 选择**Activation code**方式**离线**激活,请使用:ACTIVATION_CODE.txt 内的注册码激活 + 如果激活窗口一直弹出(error 1653219),请去hosts文件里移除jetbrains相关的项目 + 如果你需要自定义License name,请访问:https://zhile.io/custom-license.html + + **注意**:第一种方法偶尔会失效,你用第二种一样的,记得一定要**离线** + + 本项目在最新2019.3上测试通过。 + + IDE升级会从旧版本导入以上设置,导入配置后可能提示未注册(因为刚导入的vmoptions未生效),直接重启IDE即可,无需其他操作。 + +## 知识产权说明 + +中美达成初步“经贸协定”,我国将对知识产权立法更加的严格。 + +在民事诉讼中,知识产权侵权将由原先的“谁主张谁举证”改为“举证责任倒置”,由被告提供自己不构成侵权的证据。 + +在刑事责任中,原先知识产权犯罪为结果犯,造成损失才够罪,经贸协定会让知识产权犯罪变为行为犯,只要有违法行为就可能够罪。 + +行政上,对于销售假冒商品和盗版商品的电子平台,会被吊销经营许可证。 + +## 警告 + + 本项目只做学习研究之用,不得用于商业用途! + + 若资金允许,请点击 [https://www.jetbrains.com/idea/buy/] 购买正版,谢谢合作! + + 学生凭学生证可免费申请 [https://sales.jetbrains.com/hc/zh-cn/articles/207154369-学生授权申请方式] 正版授权! + + 创业公司可5折购买 [https://www.jetbrains.com/shop/eform/startup] 正版授权! + +开源项目也可以去官网申请一年的免费使用,到期续费就好了,我就是用的这个: + +![](https://tva1.sinaimg.cn/large/0082zybply1gbrn1n0mi0j31cq0lkth8.jpg) + +暖不暖你说了算,我们下篇文章见:目测是索引,我还用了新的GIF动图方式,以后可能搭配视频。 + +放个图预告下: + +![](https://tva1.sinaimg.cn/large/0082zybply1gbrn3gpcfwg309m04i43b.gif) + + + +持续更新,未完待续...... + +**白嫖不好,创作不易,**各位的支持和认可(**求点赞**),就是我创作的最大动力,我们下篇文章见! + +敖丙 | 文 【原创】 + +如果本篇博客有任何错误,请批评指教,不胜感激 ! + +------ + +> 文章每周持续更新,可以微信搜索「 **三太子敖丙** 」第一时间阅读和催更(比博客早一到两篇哟),本文 **GitHub** [https://github.com/JavaFamily](https://github.com/AobingJava/JavaFamily) 已经收录,有一线大厂面试完整考点,欢迎Star和完善,我们一起有点东西。 + +![](https://tva1.sinaimg.cn/large/0082zybply1gbs8wjbex8j30m80rkgpi.jpg) + +你知道的越多,你不知道的越多 \ No newline at end of file diff --git "a/docs/idea/\347\224\265\345\255\220\344\271\246.md" "b/docs/idea/\347\224\265\345\255\220\344\271\246.md" new file mode 100644 index 0000000..95eb87f --- /dev/null +++ "b/docs/idea/\347\224\265\345\255\220\344\271\246.md" @@ -0,0 +1,285 @@ +计算机类的书籍那么贵,作为一个几个小时看完一本书且机不离身的程序员,天天买纸质书是不可能的了,所以对电子书的需求量还是挺多的。为了方便广大的小伙伴也能方便找到对应的电子书,我花费洪荒之力收集了几百本常用的电子书,并且为了解决百度云链接容易失效的问题,我把电子书全部下载打包上传,都有哪些电子书呢?请往下看。 + + +> **重要说明**:**如果目录无法跳转的话,直接拉下去就可以了**,这些书籍都是在同一个页面的,我只是方便大家找到对应的,弄了一个**页内目录**,不过有部分读者反馈他跳转不了(手机是绝对跳转不了的了)。 + + + +- [数据结构与算法相关书籍](#数据结构与算法相关书籍) +- [计算机基础](#计算机基础) + - [操作系统](#操作系统) + - [汇编语言](#汇编语言) + - [计算机网络](#计算机网络) + - [计算机组成原理](#计算机组成原理) +- [Python](#python) + - [1、Python基础](#1python基础) + - [2、数据分析与爬虫](#2数据分析与爬虫) +- [Linux](#linux) +- [C语言](#c语言) +- [C ](#c) +- [前端](#前端) +- [人工智能](#人工智能) +- [设计模式](#设计模式) +- [Java](#java) + - [Java 基础](#java-基础) + - [Java进阶](#java进阶) + - [JavaWeb](#javaweb) +- [数据库](#数据库) +- [Go](#go) +- [中间件](#中间件) +- [面试相关](#面试相关) +- [未分类书籍](#未分类书籍) +- [Git](#git) +- [没找到请看这里](#没找到请看这里) +- [免责声明](#免责声明) + + + +# 数据结构与算法相关书籍 + +- 挑战程序设计竞赛 [百度云下载链接](https://pan.baidu.com/s/1diObrFpHKm4r-XyTp4cGAQ) 密码:mxn7 +- Java数据结构和算法 [百度云下载链接](https://pan.baidu.com/s/1vD9CQVwnWMfqSaEmn8Dudw ) 密码:lpym +- 算法图解 [百度云下载链接](https://pan.baidu.com/s/1NFiwO-_Kzt-VxXxxteRCTA) 密码:7osf +- 算法导论 [百度云下载链接](https://pan.baidu.com/s/1WHmnchIdy0FvMWLImPoIhQ) 密码:p2tp +- 算法第四版 [百度云下载链接](https://pan.baidu.com/s/1WEliUJ_hQhl-OzWPtXcFdQ) 密码:rixw +- 数据结构与算法分析C语言描述版 [百度云下载链接](https://pan.baidu.com/s/1v4OsTTCd5SyC4WGarHZdcA) 密码:mn10 +- 数据结构与算法分析Java语言描述版 [百度云下载链接](https://pan.baidu.com/s/1hZGhkErn9Bc17ZnN_ilgAw) 密码:917n +- 数据结构与算法 Python语言描述_裘宗燕 [百度云下载链接](https://pan.baidu.com/s/1VjlQugLPIiN91bmISkJ3xg) 密码:96gw +- 剑指offer [百度云下载链接](https://pan.baidu.com/s/1lUs2fVqxNMK8OOUrVSBCmw) 密码:a4rt +- 计算机程序设计艺术1-3卷 [百度云下载链接](https://pan.baidu.com/s/1rxEqkKAogFpy1aNQnXUyBw) 密码:i3nh +- 大话数据结构 [百度云下载链接](https://pan.baidu.com/s/1fTxelwIZa8pBmdnMW8PFYg) 密码:np2o +- 程序员代码面试指南:IT 名企算法与数据结构题目最优解 [百度云下载链接](https://pan.baidu.com/s/1DhjBLEiORLRTiffpJnJq_g) 密码:20oh +- 编程珠玑 [百度云下载链接](https://pan.baidu.com/s/1ix17W5-CG4r5Wn8bF3erVQ) 密码:4oow +- 编程之美 [百度云下载链接](https://pan.baidu.com/s/1y8SWiLipsKEzCulyxdbgGQ) 密码:4zme +- 啊哈算法 [百度云下载链接](https://pan.baidu.com/s/1S6OTJlQtywaRvu4IA_ogCw) 密码:h4id +- 程序员的算法趣题 [百度云下载链接](https://pan.baidu.com/s/1iIHm0kRlfwck3IQn-BUZZA) 密码:kk84 + +# 计算机基础 + +### 操作系统 + +- 30天填自制操作系统 [百度云下载链接](https://pan.baidu.com/s/1QSIUlat1HpllNFMWY9WBzw) 密码:pxxr +- 操作系统之哲学原理 [百度云下载链接](https://pan.baidu.com/s/1GEfALJhtJ2IJtjtKcLneKg) 密码:hua7 +- 程序是怎样跑起来的 [百度云下载链接](https://pan.baidu.com/s/1i_xDxT8QgA_x4kRHXEmPqg) 密码:pbvh +- 深入理解计算机操作系统 [百度云下载链接](https://pan.baidu.com/s/1xrDC6wGAH7Yv3uuXzVUWxg) 密码:2toh +- 现代操作系统 [百度云下载链接](https://pan.baidu.com/s/1QA0VZ20pA8giW6ax7AHQBA) 密码:huk2 + + + +### 汇编语言 + +- 汇编语言(注:这边是王爽写的,我觉得写的很好,适合入门) [百度云下载链接](https://pan.baidu.com/s/1kZLH0dW6Y37S-WCLNV309A) 密码:qea3 + +### 计算机网络 + +- 计算机网络:自顶向下 [百度云下载链接](https://pan.baidu.com/s/18X_L2RINmtLK9g0Ki2GiFw) 密码:l77d +- 图解HTTP [百度云下载链接](https://pan.baidu.com/s/1NEAK2PH_4JzPY454QvmmsQ) 密码:b42z +- 图解TC/IP [百度云下载链接](https://pan.baidu.com/s/1FJru4ppyxBhx_J3pk8rpvA) 密码:5k3x +- 网络是怎样连接的 [百度云下载链接](https://pan.baidu.com/s/1HhE9MoC4rp5NSvyWOtk_hw) 密码:g983 +- HTTP权威指南 [百度云下载链接](https://pan.baidu.com/s/1b2fIsmdt9ANVMcqU97t6kw) 密码:tqj8 +- UNIX网络编程 [百度云下载链接](https://pan.baidu.com/s/1vXbj7OLsouVFH4DCIMqF3w) 密码:4buy + +### 计算机组成原理 + +- 隐匿在计算机软硬件背后的语言 [百度云下载链接](https://pan.baidu.com/s/1gJCnChBTCZD07mm3IqCRwQ) 密码:6jiq +- 大话计算机 [百度云下载链接](https://pan.baidu.com/s/1AakpZmD8hziokFnV0VSGFA) 密码:6j1o +- 计算机是怎样跑起来的 [百度云下载链接](https://pan.baidu.com/s/1JIq3U8kNYohz0C3xnCk6EA) 密码:er12 + + + + + +# Python + +### 1、Python基础 + +- 编程小白的第一本Python入门书 [百度云下载链接](https://pan.baidu.com/s/128kxkHLrEAidlMt0E80SUg) 密码:s76b +- Python编程初学者指南 [百度云下载链接](https://pan.baidu.com/s/1ytNZt1VMlbyREyc1L7ShYA) 密码:g696 +- Python高级编程 [百度云下载链接](https://pan.baidu.com/s/1-ItrNDj2R9Z-S1ZuEMlf1Q) 密码:qnuf +- Python高性能编程 [百度云下载链接](https://pan.baidu.com/s/10wPoXPM83so2WvdlVnPZTw) 密码:d8s5 +- Python灰帽子 [百度云下载链接](https://pan.baidu.com/s/17hvNff7O5OsdRAB3_mBBcg) 密码:nfkt +- Python开发技术详解 [百度云下载链接](https://pan.baidu.com/s/1cTVhr9BEmy79GbKq41qQ5A) 密码:z0av +- Python开发实战 [百度云下载链接](https://pan.baidu.com/s/1AFgXTjEQyBf6SP2CCniA1A) 密码:ee5x +- Python网络编程基础 [百度云下载链接](https://pan.baidu.com/s/1qBpXTD3Ll6p2KAv0RAkKHQ) 密码:m15q +- Python学习手册 [百度云下载链接](https://pan.baidu.com/s/18DsRhIawELjVGGDSTRvhYA) 密码:0yqf +- 精通Scrapy网络爬虫 + +### 2、数据分析与爬虫 + +- 数据科学入门 [百度云下载链接](https://pan.baidu.com/s/1LBUGeGdjUNhCUUOZRpgbrg) 密码:1hz8 +- 用Python写网络爬虫 [百度云下载链接](https://pan.baidu.com/s/1ENi8Y4vAMqSQviPYNRBMUA) 密码:nlpa +- Python数据处理 [百度云下载链接](https://pan.baidu.com/s/1UOOC1APb6fueaxDyyshMuQ) 密码:8eom +- Python数据分析实战 [百度云下载链接](https://pan.baidu.com/s/13yQ4hvUf4EzgGAuKQUM4ag) 密码:idn1 +- Python数据科学手册 [百度云下载链接](https://pan.baidu.com/s/1Y1KnyILg-0ZWJbIKNzNsmw) 密码:16u0 +- Python数据可视化编程实战 [百度云下载链接](https://pan.baidu.com/s/1BKIzCFI_5CzLXAQpRQCp8Q) 密码:i7hp +- 精通Scrapy网络爬虫 [百度云下载链接](https://pan.baidu.com/s/1FuAE8Kq3YItoO4yNba5ckA) 密码:jb6u + +# Linux + +- 精通正则表达式 [百度云下载链接](https://pan.baidu.com/s/1tt-S2QEye0qZde_3SiG1Eg) 密码:vp94 +- 鸟哥的Linux私房菜基础篇和服务器篇 [百度云下载链接](https://pan.baidu.com/s/1ZvTMk23dKPbQG7siYXyrbg) 密码:ubg2 +- 深入Linux内核架构 [百度云下载链接](https://pan.baidu.com/s/15Vyl69xGDY_RkpQPk5qCCQ) 密码:fnh2 +- Linux宝典 [百度云下载链接](https://pan.baidu.com/s/1cQX4jgG0-7fYFuR5F9G2_g) 密码:nxhe +- Linux常用命令大全 [百度云下载链接](https://pan.baidu.com/s/1WH7DFOzL25mOHsp5orrWmQ) 密码:e0n2 +- Linux防火墙 [百度云下载链接](https://pan.baidu.com/s/1NTMCysm_btHNpek38rBMfg) 密码:sc4u +- Linux高级程序设计 [百度云下载链接](https://pan.baidu.com/s/11y7OBER2c9mcbsCtjTRsrA) 密码:d4wq +- Linux环境编程 [百度云下载链接](https://pan.baidu.com/s/1sl-6GF3onLPRXeJDVedwqA) 密码:xudv +- Linux命令详解词典 [百度云下载链接](https://pan.baidu.com/s/1CSlkxcBRBPsHHRYOrQpfSw) 密码:yxuz +- 汇编语言基于linux环境第3版 [百度云下载链接](https://pan.baidu.com/s/13gwNQvvG5fRYxo83zMb2VA) 密码:yq75 + +# C语言 + +- 经典C程序100例 [百度云下载链接](https://pan.baidu.com/s/1fJnp014zqOCdO8O6gzcDUw) 密码:tls2 +- C Primer Plus [百度云下载链接](https://pan.baidu.com/s/1SuVacfN0q-MGeKs6Z-O2LQ) 密码:5s85 +- C程序设计语言(包括课后答案等) [百度云下载链接](https://pan.baidu.com/s/1ICTaU2avonev25DfykAr-w) 密码:cfj4 +- C和指针 [百度云下载链接](https://pan.baidu.com/s/11zphu-XC2YS57BkkKjAtoQ) 密码:d8a0 +- C语言编程精粹 [百度云下载链接](https://pan.baidu.com/s/1_GmhiP3jL0cQR36uAiZNNw) 密码:6mct +- C语言参考手册 [百度云下载链接](https://pan.baidu.com/s/1hzINX8yDELZ4WF1ALwDsYg) 密码:4hnx +- C语言函数大全 [百度云下载链接](https://pan.baidu.com/s/1_kM7pd1J6K65X6oC38AviA) 密码:xywt +- C语言解析教程 [百度云下载链接](https://pan.baidu.com/s/1Sm-CRO8DzhT7gCgxNJkKfw) 密码:6luf +- C语言深度剖析 [百度云下载链接](https://pan.baidu.com/s/1Dn4csGs7xEdZt9smdBcmbQ) 密码:yu63 +- C专家编程 [百度云下载链接](https://pan.baidu.com/s/1y_Uz1SWi1NikG0D0URqv0w) 密码:xlfm + +# C++ + +- C++ Primer [百度云下载链接](https://pan.baidu.com/s/1OvJd3JfxujySAs6Tqugl9g) 密码:js1a +- C++编程思想 [百度云下载链接](https://pan.baidu.com/s/1p98_fU039F6Er3_CtnmIfQ) 密码:vi02 +- C++对象模型 [百度云下载链接](https://pan.baidu.com/s/1JVnJwxbTXe6HIMDFXlYnbQ) 密码:v90k +- 深入探索C++对象模型 [百度云下载链接](https://pan.baidu.com/s/1NxvGvIBYpKNunjnu5ev_vw) 密码:3xuv +- C++ Templates [百度云下载链接](https://pan.baidu.com/s/1bkQ-aPpFDc_osxqFC9I1Jw) 密码:4rvw +- C++编程规范-101条规则准则与最佳实践 [百度云下载链接](https://pan.baidu.com/s/1PAfapM3g1YDNB2qpZlJnpg) 密码:t43e +- C++沉思录中文第2版 [百度云下载链接](https://pan.baidu.com/s/1ckINRCEKKt3DJ9eg412EtA) 密码:6emr +- C++大学教程 [百度云下载链接](https://pan.baidu.com/s/1OS5iWmRib0QvFOFaRMSpMw) 密码:n6ph +- C++设计新思维-泛型编程与设计之应用 [百度云下载链接](https://pan.baidu.com/s/1zKojQCCfs0NPH_9ORpiBvA) 密码:0el5 +- Effective STL 中文版 [百度云下载链接](https://pan.baidu.com/s/1btF8iWfAXoEUo5A18SYaLw) 密码:u7s1 +- More Effective C++中文版 [百度云下载链接](https://pan.baidu.com/s/1I3uRE2s8n5OZRm_76a1Lag) 密码:xbxv +- STL源码剖析 [百度云下载链接](https://pan.baidu.com/s/1DbnRAJgeAtmXo5tpuhc-rg) 密码:mxsh + +# 前端 + +- 疯狂aJax讲义 [百度云下载链接](https://pan.baidu.com/s/1C1NdOCrYD6LULgbGtRp_Vw) 密码:pce0 +- Bootstrap实战 [百度云下载链接](https://pan.baidu.com/s/1ty1U6-XUDFqnjVS57IrZSA) 密码:rzhm +- HTML5揭秘 [百度云下载链接](https://pan.baidu.com/s/138vuPiKZFIU0Zza80eui_g) 密码:vaam +- HTML5与CSS3基础教程 [百度云下载链接](https://pan.baidu.com/s/1ddq73aQviPIM9ci6xhAt_g) 密码:2wxm +- HTML与CSS入门经典 [百度云下载链接](https://pan.baidu.com/s/1fJaT9zqQOWxIB8Mkn_vQqQ) 密码:tsgm +- JavaScript DOM编程艺术 [百度云下载链接](https://pan.baidu.com/s/1Dx3z3D9DYbWyebr3V86cLA) 密码:gsbt +- JavaScript高级程序设计 [百度云下载链接](https://pan.baidu.com/s/1NYkMExeBSG1SBVfT7nUkWQ) 密码:wbw0 +- JavaScript高效图形编程 [百度云下载链接](https://pan.baidu.com/s/1jLPlJ1tpnF6LOkhhUgcF6w) 密码:tab1 +- jQuery高级编程 [百度云下载链接](https://pan.baidu.com/s/1XSvgFixfnm_9YxytuuSvLA) 密码:qwtr +- jQuery技术内幕 [百度云下载链接](https://pan.baidu.com/s/11sUqBmGJWlHOB29WtZjf2A) 密码:pglf +- jQuery权威指南 [百度云下载链接](https://pan.baidu.com/s/14Iu2h8BQ4oHXsyuKG9k-Qw) 密码:4vrw +- Node.js开发指南 [百度云下载链接](https://pan.baidu.com/s/1cSoqtNHTrmoovTNy7VonqA) 密码:voze + +# 人工智能 + +- 贝叶斯思维统计建模的Python学习法 [百度云下载链接](https://pan.baidu.com/s/1GX6Uqzh8-AzMv0UjO2Ed2A) 密码:ztbe +- 机器学习实战 [百度云下载链接](https://pan.baidu.com/s/1ZDcgp1ht4XZPYH5Wy3I1KQ) 密码:cfqc +- Python机器学习及实践 [百度云下载链接](https://pan.baidu.com/s/1IIUCLptUPsQvLRbUEqJaTA) 密码:qq3q +- Tensorflow实战Google深度学习框架 [百度云下载链接](https://pan.baidu.com/s/1CJIJmNvZHx2rtkUDH-zrIg) 密码:12kj +- TensorFlow实践与智能系统 [百度云下载链接](https://pan.baidu.com/s/1EYFAmV8z9hvTX06Hwf1MsA) 密码:e668 +- 深度学习_中文版 [百度云下载链接](https://pan.baidu.com/s/1FH9vlBBBb-yvB26eFmKjQw) 密码:01xp + +# 设计模式 + +- 图解设计模式 [百度云下载链接](https://pan.baidu.com/s/16Lss7o-zu0_HNio6od4c0Q) 密码:g50a +- 研磨设计模式 [百度云下载链接](https://pan.baidu.com/s/1a5EPImWzDfPGg1DQ4F7EkA) 密码:h5fb +- Head First设计模式 [百度云下载链接](https://pan.baidu.com/s/1-rMyG6AuRHrzFF-dOiaBDw) 密码:pxpq + +# Java + +### Java 基础 + +- 阿里巴巴Java开发手册 [百度云下载链接](https://pan.baidu.com/s/1SoqPq0-x9aZPEaCiggVtUA) 密码:g6lv +- 码出高效 [百度云下载链接](https://pan.baidu.com/s/1ejmKaxyd2ACKbV3lj9Vyvg) 密码:mbt9 +- Head First Java [百度云下载链接](https://pan.baidu.com/s/1AhFSveV6DE3nWMpBUhFcMw) 密码:d5ll +- Java8实战 [百度云下载链接](https://pan.baidu.com/s/1ni-dF2XqmMFwI5pBPo3P2A) 密码:lvmb +- Java编程思想 [百度云下载链接](https://pan.baidu.com/s/1cqF8lcDdMoV3g2OLxQCUKg) 密码:0add +- Java并发编程的艺术 [百度云下载链接](https://pan.baidu.com/s/1N3aSnY8rZxQLTbnUwIk5yQ) 密码:vn74 +- Java并发编程实践 [百度云下载链接](https://pan.baidu.com/s/1Bk47A0tLXUv1wVQjJlxd6Q) 密码:i6w9 +- Java从小白到大牛 [百度云下载链接](https://pan.baidu.com/s/1qDLSzWrkSVu91KcrBN5fKQ) 密码:9auc +- Java核心技术1-2卷 [百度云下载链接](https://pan.baidu.com/s/1t9YFSagCpVC7N4pK6aNuGQ) 密码:tr3s +- 深入理解Java虚拟机 [百度云下载链接](https://pan.baidu.com/s/1qyRd-YANK1Czs51k1tWYWQ) 密码:b6op + +### Java进阶 + +- 代码大全 [百度云下载链接](https://pan.baidu.com/s/1ehGZsgt-Rl47pVnNGUKWWw) 密码:juhq +- 代码整洁之道 [百度云下载链接](https://pan.baidu.com/s/1fQf91LpvIWeJ-HH2QWKVog) 密码:hzn2 +- 敏捷软件开发 [百度云下载链接](https://pan.baidu.com/s/1HveePOP4fOynad9yrHKS_A) 密码:mmi4 +- Effective Java(中文) [百度云下载链接](https://pan.baidu.com/s/1jvaEtd4H-ELdjY-I2uV76A) 密码:4dcx +- Effective Java(英文) [百度云下载链接](https://pan.baidu.com/s/1FOVL661If9yaJSjTpMw22g) 密码:bhu4 +- Java性能优化权威指南 [百度云下载链接](https://pan.baidu.com/s/1XCOWv6W5_rsCUM6Q4YIU9Q) 密码:054x + +### JavaWeb + +- 轻量级JavaEE企业应用实战 [百度云下载链接](https://pan.baidu.com/s/1EjBGj1z6sJ4kDokUZRG2IA) 密码:8j3c +- 深入分析JavaWeb技术内幕 [百度云下载链接](https://pan.baidu.com/s/15Q_ZJZyOtm5gYhhp_D0OFA) 密码:31uu +- 深入剖析Tomcat [百度云下载链接](https://pan.baidu.com/s/1YQXpaveUeRXxid1BdU-nUw) 密码:y1yt +- Head First Servlet and JSP [百度云下载链接](https://pan.baidu.com/s/1036AnuSKhckNC_vqa5qjPw) 密码:v8b8 +- Maven实战 [百度云下载链接](https://pan.baidu.com/s/15DddRDQpR_KAOzg-HuuDvw) 密码:s0q9 +- Spring实战 [百度云下载链接](https://pan.baidu.com/s/1Y9J20oR38qVyQ4Z7Kh9KQw) 密码:40fb +- Camel in Action [百度云下载链接](https://pan.baidu.com/s/1300e_-sgpqAzl_2H1EPlJA) 密码:plyn + +# 数据库 + +- 高性能MySQL [百度云下载链接](https://pan.baidu.com/s/1_vXaan9KbIWAHEnyQnQFlg) 密码:gh5t +- 深入浅出MySQL [百度云下载链接](https://pan.baidu.com/s/1gWJcwszv3CnjIRMzy--_rw) 密码:ju0h +- MongoDB权威指南 [百度云下载链接](https://pan.baidu.com/s/1LO1ACpRDi7n0i9Q7nLooqg) 密码:llvx +- MySQL必知必会 [百度云下载链接](https://pan.baidu.com/s/1IWeqx7IQGc0sY5bJ9WtyMA) 密码:f1v9 +- MySQL技术内幕InnoDB存储引擎 [百度云下载链接](https://pan.baidu.com/s/1fLL3GXn_Hp6DdEnHXcBFJQ) 密码:6g04) +- SQL查询的艺术 [百度云下载链接](https://pan.baidu.com/s/1PfE3oLfmQN8Xtdj-08L--A) 密码:ndcv +- SQLite 权威指南 [百度云下载链接](https://pan.baidu.com/s/1BqFp4W_I0Wwn87fKrCpB8A) 密码:ex3h + +# Go + +- 学习Go语言 [百度云下载链接](https://pan.baidu.com/s/1tNJJ-UNBk7nsZuxILFAy7w) 密码:5tri +- Go语言实战 [百度云下载链接](https://pan.baidu.com/s/1BIGNOG3AfFAVrBnHeemPlQ) 密码:q0x3 +- Go web编程 [百度云下载链接](https://pan.baidu.com/s/1UQU7uWFSZb3ILob6b64ZeA) 密码:pyw3 +- C 程序设计语言第2版 [百度云下载链接](https://pan.baidu.com/s/14NmKpWeBQ-vg6XzyvXTaeg) 密码:3yza + + + +# 中间件 + +* redis实战 [百度云下载链接](https://pan.baidu.com/s/13Y-Uk2HmV1Y5TLec4J20aQ) 密码:ro48 + + + +# 面试相关 + +- 阿里巴巴Java面试问题大全 [百度云下载链接](https://pan.baidu.com/s/1tbd8N88ae-O0xsm6RTJIag) 密码:8xzm +- 程序员面试宝典 [百度云下载链接](https://pan.baidu.com/s/1LilCd-QIcVgZ1uQyFWMaWw) 密码:ko62 +- 大厂面试真题 [百度云下载链接](https://pan.baidu.com/s/1631WVa3Fhf2wOpdZX_ou2g) 密码:gu92 +- Java面试突击 [百度云下载链接](https://pan.baidu.com/s/1bAZS8KiUNF0lOt-R0UBOyg) 密码:h44t + +# 未分类书籍 + +- 黑客与画家 [百度云下载链接](https://pan.baidu.com/s/1lEyXNK8W4a0vStIPHOihiA) 密码:uux2 +- 浪潮之巅 [百度云下载链接](https://pan.baidu.com/s/1NIeoGRy6s1lYB3WdlhA8lQ) 密码:xr66 +- 码农翻身 [百度云下载链接](https://pan.baidu.com/s/1zEmECfVe4rFRsQL8goN4nA) 密码:x0ik +- 奔跑吧,程序员:从零开始打造产品、技术和团队 [百度云下载链接](https://pan.baidu.com/s/1O0QkDLuJMasimr9XZsNSmA) 密码:jxvj + +# Git + +- 快速入门Git [百度云下载链接](https://pan.baidu.com/s/1ka8s2-1h24LLX5ebeeU6WA) 密码:ofdd +- 专业git中文 [百度云下载链接](https://pan.baidu.com/s/1pvgoGleexrvdMhnTgd0VYw) 密码:b3kx +- Git参考手册 [百度云下载链接](https://pan.baidu.com/s/1DC8S-wnLrpanW2HRROizMQ) 密码:axou +- 《Pro Git》中文版 [百度云下载链接](https://pan.baidu.com/s/1TLHL03vKY5gLs1tOjN5KeA) 密码:l05a + + + +# 没找到请看这里 + +别急,我会慢慢更新完善的,可能只是暂时没有而已,,,欢迎持续关注哦 + + + + +# 免责声明 + +书籍全部来源于网络其他人的整理,我这里只是收集整理了他们的链接,如有侵权,马上联系我,我立马删除对应链接。我的邮箱:aobing@mogu.com + + + + + + diff --git "a/docs/idea/\347\237\245\350\257\206\346\230\237\347\220\203.md" "b/docs/idea/\347\237\245\350\257\206\346\230\237\347\220\203.md" new file mode 100644 index 0000000..f9e9e89 --- /dev/null +++ "b/docs/idea/\347\237\245\350\257\206\346\230\237\347\220\203.md" @@ -0,0 +1,46 @@ + +我现在微信群已经超过15个了,我开始上班了,平时太忙了大家@我我基本上会选择忽略,因此我建立了知识星球,我会在里面个人经历、分享经验、技术理财,职业规划都会涉及。 + +有问题也可以在里面问,不敢保证及时回,但是周末或者晚上10点以后看到都会回(**大概率周末**)。 + +建知识星球的目的主要是做知识沉淀,和问题解答,我经常在知乎上看到私我的,有时候实在会疏忽。 + +为此,丙丙创建了这个收费最低的知识星球。 + +先给大家看看长啥样: + +昨天创建的,已经加入了快1400个小伙伴了,也有小伙伴已经开始提问了。 + +![](https://tva1.sinaimg.cn/large/0082zybply1gc21t45skmj30n01dsdxa.jpg) + +可能大家也觉得我自己这个星球没啥说服力,所以我邀请了不少重量级别的嘉宾。 + +![](https://tva1.sinaimg.cn/large/0082zybply1gc21uv9w19j30lk0kaaf3.jpg) + +总的来说,加入到这个星球,你将获得: + +- 面试以及核心知识分享; + +- 学习/工作的常见问题回答和整理,问题答疑,职场问题答疑。 + +- 分享各种不错的开源项目和工具; + +- 简历指导,以及大厂内推机会; + +- 个人经历分享; +- .......... + +我希望所有人都像南橘一样,面进阿里,也可以主动问我很多问题: + +![](https://tva1.sinaimg.cn/large/0082zybply1gc21ywtgj7j30ye0eajuz.jpg) + +因为这是一个互补的过程,问到我不会的也给我扫盲了,或者像我另外一个读者一样,进蘑菇街跟我做同事。 + +说真的,我这个人技术不咋样,面试还是有一套的哈哈,能帮大家就帮大家一下, + +![](https://tva1.sinaimg.cn/large/0082zybply1gc222jy431j30w80t8ahe.jpg) + +这是优惠码,-32,还是比较便宜的,办的好,以后可是要涨价的哈哈,有问题随时提,大家有空的可以回答,我看到基本上都会解答一下。 + +![](https://tva1.sinaimg.cn/large/0082zybply1gc1z2djbejj30g40o9785.jpg) + diff --git "a/docs/idea/\350\265\204\346\226\231.md" "b/docs/idea/\350\265\204\346\226\231.md" new file mode 100644 index 0000000..8b3a7f4 --- /dev/null +++ "b/docs/idea/\350\265\204\346\226\231.md" @@ -0,0 +1,39 @@ +## 这是我准备的一些面试资料(也欢迎大家贡献) + +#### 我会定期更新 星球提供模拟面试和简历修改服务 **[【点击了解详细 领取减32的优惠券】](https://github.com/AobingJava/JavaFamily/blob/master/docs/idea/%E7%9F%A5%E8%AF%86%E6%98%9F%E7%90%83.md)** + +学习路线对应文章: https://www.bilibili.com/read/cv5006822 + +简历模板 链接: https://pan.baidu.com/s/1n-K9CKs_MAlfIIyIFyu7ng 密码:moxs + +概要设计模板: https://pan.baidu.com/s/1X7QUT9c7bHMEgQ4vjI9O8A 密码:3fli + +电子书 : 链接:https://pan.baidu.com/s/1PKO0LDspwJPNqT6qwqNorQ 密码:f654 + +Java高级架构体系资料: https://pan.baidu.com/s/1B83Kvb9n2LTgKSmSvbt_Aw 提取码: msba + +天猫购物车商场项目:https://pan.baidu.com/s/1YAE6rkDw2GCXucEiAXCedw 密码:fpda + +Java8新特性:https://pan.baidu.com/s/1pmiGW5KcuZnzh7DuUpwPzg 密码:5mz4 + +MySQL:链接:https://pan.baidu.com/s/1GvvsGzB1grjzpM9NQFZ9FQ 密码:aftw + +2019牛客网上面试题库java篇(附带解析与答案):https://pan.baidu.com/s/1HBRXiVl0w97EOr_WpRrd-w 密码:71hn + +面试知识点Xmind: 链接:https://pan.baidu.com/s/13g1_P9t-SWZtsbtYDiubGQ 密码:0j2g + +毕向东Java基础教程(适合初学者入门的Java基础视频)http://pan.baidu.com/s/1nvODtSP 密码:h52i + +Java快速入门教程(Java基础班全套教程)链接:https://pan.baidu.com/s/1o9yLBsu 密码:wwd0 + +JavaWeb教程_JavaWeb入门教程 资料:http://pan.baidu.com/s/1bp02SFX 密码:2xfl + +Java教程|Mybatis由浅入深教程 资料:https://pan.baidu.com/s/1pKFaqTH 密码:w00x + +Maven教程_Maven视频教程 资料资料:http://pan.baidu.com/s/1kVsl04v 密码:j5h0 + +大数据hadoop教程入门 资料链接:https://pan.baidu.com/s/1smCTwRj 密码:vp5v + +学习路线 +![](https://tva1.sinaimg.cn/large/00831rSTly1gcbee53k7gj30u0149dov.jpg) + diff --git "a/docs/redis/Redis\345\237\272\347\241\200.md" "b/docs/redis/Redis\345\237\272\347\241\200.md" deleted file mode 100644 index e4396e0..0000000 --- "a/docs/redis/Redis\345\237\272\347\241\200.md" +++ /dev/null @@ -1,146 +0,0 @@ -> >你知道的越多,你不知道的越多 -> -> >点赞再看,养成习惯 -> ## 前言 -> **Redis**在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在**Redis**的使用和原理方面对小伙伴们进行360°的刁难。作为一个在互联网公司面一次拿一次offer的面霸(**请允许我使用一下夸张的修辞手法**),打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚,在一个寂寞难耐的夜晚,我痛定思痛,决定开始写**《吊打面试官》**系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚铩羽而归,疯狂收割大厂offer! -> -> ### 面试开始 -> >一个大腹便便,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向你走来,看着快秃顶的头发,心想着肯定是尼玛顶级架构师吧!但是我们腹有诗书气自华,虚都不虚。 -> -> ![](https://user-gold-cdn.xitu.io/2019/10/31/16e1ff35c9dc4843?w=500&h=320&f=png&s=236215) -> -> ### 小伙子您好,看你简历上写了你项目里面用到了Redis,你们为啥用Redis? -> -> 心里忍不住暗骂,这叫啥问题,大家不都是用的这个嘛,但是你不能说出来。 -> -> 认真回答道:**帅气迷人的面试官您好**,因为传统的关系型数据库如Mysql已经不能适用所有的场景了,比如秒杀的库存扣减,APP首页的访问流量高峰等等,都很容易把数据库打崩,所以引入了缓存中间件,目前市面上比较常用的缓存中间件有Redis 和 Memcached 不过中和考虑了他们的优缺点,最后选择了Redis。 -> -> **至于更细节的对比朋友们记得查阅Redis 和 Memcached 的区别,比如两者的优缺点对比和各自的场景,后续我有时间也会写出来。** -> -> ### 那小伙子,我再问你,Redis有哪些数据结构呀? -> -> 字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。 -> -> **这里我相信99%的读者都能回答上来Redis的5个基本数据类型。如果回答不出来的小伙伴我们就要加油补课哟,大家知道五种类型最适合的场景更好。** -> -> 但是,如果你是Redis中高级用户,而且你要在这次面试中突出你和其他候选人的不同,还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub。 -> -> 如果你还想加分,那你说还玩过Redis Module,像BloomFilter,RedisSearch,Redis-ML,这个时候面试官得眼睛就开始发亮了,心想这个小伙子**有点东西啊**。 -> -> ******注:本人在面试回答到Redis相关的问题的时候,经常提到BloomFilter(布隆过滤器)这玩意的使用场景是真的多,而且用起来是真的香,原理也好理解,看一下文章就可以在面试官面前侃侃而谈了,不香么?下方传送门 ↓****** -> -> [避免缓存击穿的利器之BloomFilter](https://juejin.im/post/5db69365518825645656c0de) -> -> ### 如果有大量的key需要设置同一时间过期,一般需要注意什么? -> -> 如果大量的key过期时间设置的过于集中,到过期的那个时间点,redis可能会出现短暂的卡顿现象。严重的话会出现缓存雪崩,我们一般需要在时间上加一个随机值,使得过期时间分散一些。 -> -> **电商首页经常会使用定时任务刷新缓存,可能大量的数据失效时间都十分集中,如果失效时间一样,又刚好在失效的时间点大量用户涌入,就有可能造成缓存雪崩** -> -> ### 那你使用过Redis分布式锁么,它是什么回事? -> -> 先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。 -> -> ### 这时候对方会告诉你说你回答得不错,然后接着问如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样? -> -> 这时候你要给予惊讶的反馈:唉,是喔,这个锁就永远得不到释放了。紧接着你需要**抓一抓自己得脑袋,故作思考片刻**,好像接下来的结果是你主动思考出来的,然后回答:我记得set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的! -> -> ### 对方这时会显露笑容,心里开始默念:嗯,这小子还不错,开始有点意思了。 -> -> ### 假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来? -> -> 使用**keys**指令可以扫出指定模式的key列表。 -> -> ### 对方接着追问:如果这个redis正在给线上的业务提供服务,那使用keys指令会有什么问题? -> -> 这个时候你要回答redis关键的一个特性:redis的单线程的。keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时候可以使用**scan**指令,**scan**指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用keys指令长。 -> -> **不过,增量式迭代命令也不是没有缺点的: 举个例子, 使用 SMEMBERS 命令可以返回集合键当前包含的所有元素, 但是对于 SCAN 这类增量式迭代命令来说, 因为在对键进行增量式迭代的过程中, 键可能会被修改, 所以增量式迭代命令只能对被返回的元素提供有限的保证 。** -> -> -> ### 使用过Redis做异步队列么,你是怎么用的? -> -> 一般使用list结构作为队列,**rpush**生产消息,**lpop**消费消息。当lpop没有消息的时候,要适当sleep一会再重试。 -> -> ### 如果对方追问可不可以不用sleep呢? -> -> list还有个指令叫**blpop**,在没有消息的时候,它会阻塞住直到消息到来。 -> -> -> ### 如果对方接着追问能不能生产一次消费多次呢? -> -> 使用pub/sub主题订阅者模式,可以实现 1:N 的消息队列。 -> -> ### 如果对方继续追问 pub/su b有什么缺点? -> -> 在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如**RocketMQ**等。 -> -> ### 如果对方究极TM追问Redis如何实现延时队列? -> -> 这一套连招下来,我估计现在你很想把面试官一棒打死(**面试官自己都想打死自己了怎么问了这么多自己都不知道的**),如果你手上有一根棒球棍的话,但是你很克制。平复一下激动的内心,然后神态自若的回答道:使用sortedset,拿时间戳作为score,消息内容作为key调用zadd来生产消息,消费者用**zrangebyscore**指令获取N秒之前的数据轮询进行处理。 -> -> **到这里,面试官暗地里已经对你竖起了大拇指。并且已经默默给了你A+,但是他不知道的是此刻你却竖起了中指,在椅子背后。** -> -> ### Redis是怎么持久化的?服务主从数据怎么交互的? -> -> RDB做镜像全量持久化,AOF做增量持久化。因为RDB会耗费较长时间,不够实时,在停机的时候会导致大量丢失数据,所以需要AOF来配合使用。在redis实例重启时,会使用RDB持久化文件重新构建内存,再使用AOF重放近期的操作指令来实现完整恢复重启之前的状态。 -> -> **这里很好理解,把RDB理解为一整个表全量的数据,AOF理解为每次操作的日志就好了,服务器重启的时候先把表的数据全部搞进去,但是他可能不完整,你再回放一下日志,数据不就完整了嘛。不过Redis本身的机制是 AOF持久化开启且存在AOF文件时,优先加载AOF文件;AOF关闭或者AOF文件不存在时,加载RDB文件;加载AOF/RDB文件城后,Redis启动成功; AOF/RDB文件存在错误时,Redis启动失败并打印错误信息** -> -> ### 对方追问那如果突然机器掉电会怎样? -> 取决于AOF日志sync属性的配置,如果不要求性能,在每条写指令时都sync一下磁盘,就不会丢失数据。但是在高性能的要求下每次都sync是不现实的,一般都使用定时sync,比如1s1次,这个时候最多就会丢失1s的数据。 -> -> ### 对方追问RDB的原理是什么? -> 你给出两个词汇就可以了,fork和cow。fork是指redis通过创建子进程来进行RDB操作,cow指的是copy on write,子进程创建后,父子进程共享数据段,父进程继续提供读写服务,写脏的页面数据会逐渐和子进程分离开来。 -> -> ******注:回答这个问题的时候,如果你还能说出AOF和RDB的优缺点,我觉得我是面试官在这个问题上我会给你点赞,两者其实区别还是很大的,而且涉及到Redis集群的数据同步问题等等。想了解的伙伴也可以留言,我会专门写一篇来介绍的。 ****** -> -> -> ### Pipeline有什么好处,为什么要用pipeline? -> -> 可以将多次IO往返的时间缩减为一次,前提是pipeline执行的指令之间没有因果相关性。使用redis-benchmark进行压测的时候可以发现影响redis的QPS峰值的一个重要因素是pipeline批次指令的数目。 -> -> ### Redis的同步机制了解么? -> -> Redis可以使用主从同步,从从同步。第一次同步时,主节点做一次bgsave,并同时将后续修改操作记录到内存buffer,待完成后将RDB文件全量同步到复制节点,复制节点接受完成后将RDB镜像加载到内存。加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。后续的增量数据通过AOF日志同步即可,有点类似数据库的binlog。 -> -> ### 是否使用过Redis集群,集群的高可用怎么保证,集群的原理是什么? -> -> Redis Sentinal着眼于高可用,在master宕机时会自动将slave提升为master,继续提供服务。 -> -> Redis Cluster着眼于扩展性,在单个redis内存不足时,使用Cluster进行分片存储。 -> -> ## 面试结束 -> ### 小伙子你可以的,什么时候有时间来上班啊,要不明天就来吧? -> 你强装镇定,这么急啊我还需要租房,要不下礼拜一吧。 -> ### 好的 心想这小子这么NB是不是很多Offer在手上,不行我得叫hr给他加钱。 -> 能撑到最后,你自己都忍不住自己给自己点个赞了! -> -> (**暗示点赞,每次都看了不点赞,你们想白嫖我么?你们好坏喲,不过我喜欢**)。 -> -> ## 总结 -> -> **在技术面试的时候,不管是Redis还是什么问题,如果你能举出实际的例子,或者是直接说自己开发过程的问题和收获会给面试官的印象分会加很多,回答逻辑性也要强一点,不要东一点西一点,容易把自己都绕晕的。** -> -> **还有一点就是我问你为啥用Redis你不要一上来就直接回答问题了,你可以这样回答:** -> -> **帅气的面试官您好**,首先我们的项目DB遇到了瓶颈,特别是秒杀和热点数据这样的场景DB基本上就扛不住了,那就需要缓存中间件的加入了,目前市面上有的缓存中间件有 Redis 和 Memcached ,他们的优缺点......,综合这些然后再结合我们项目特点,最后我们在技术选型的时候选了谁。 -> -> 如果你这样有条不紊,有理有据的回答了我的问题而且还说出这么多我问题外的知识点,我会觉得你不只是一个会写代码的人,你逻辑清晰,你对技术选型,对中间件对项目都有自己的理解和思考,说白了就是你的offer有戏了。 -> -> 好了 以上就是这篇文章的全部内容了,我后面会不断更新《吊打面试官》系列和Java技术栈相关的文章。如果你有什么想知道的,也可以**留言**给我,我一有时间就会写出来,我们共同进步。 -> -> 非常感谢您能看到这里,如果这个文章写得还不错的话 **求点赞** **求关注** **求分享** **求留言** 各位的支持和认可,就是我创作的最大动力,OK各位我们下期见! -> -> 敖丙 | 文 -> -> ---- -> -> -> >后面会持续更新《吊打面试官》系列可以关注我的公众号第一时间阅读,也会有朋友一线大厂的内推机会不定期推出(字节跳动,阿里,网易,PDD,滴滴,蘑菇街等),就业上有什么问题也可以直接微信滴滴我,我也是个新人,不过不影响我们一起进步,作为渣男,我给不了你工作,还给不了你温暖嘛? -> -> ![](https://user-gold-cdn.xitu.io/2019/11/1/16e25fd86ba8a0db?w=900&h=500&f=png&s=185595) -> -> -> -> \ No newline at end of file diff --git "a/docs/redis/\347\274\223\345\255\230\351\233\252\345\264\251\347\251\277\351\200\217\345\207\273\347\251\277.md" "b/docs/redis/\347\274\223\345\255\230\351\233\252\345\264\251\347\251\277\351\200\217\345\207\273\347\251\277.md" deleted file mode 100644 index 5e5e8dc..0000000 --- "a/docs/redis/\347\274\223\345\255\230\351\233\252\345\264\251\347\251\277\351\200\217\345\207\273\347\251\277.md" +++ /dev/null @@ -1,157 +0,0 @@ -> > 你知道的越多,你不知道的越多 -> -> > 点赞再看,养成习惯 -> -> ## 前言 -> -> **Redis**在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在**Redis**的使用和原理方面对小伙伴们进行360°的刁难。作为一个在互联网公司面一次拿一次offer的面霸(**请允许我使用一下夸张的修辞手法**),打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚,在一个寂寞难耐的夜晚,我痛定思痛,决定开始写**《吊打面试官》**系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂offer! -> -> ## 一点感慨 -> -> 本来都把稿子放到公众号保存了,洗澡的时候想了一下晚上的比赛,觉得还是打开电脑写点东西,跟文章内容没关系,只是一点个人的感慨,不知道多少小伙伴看了昨天**SKT VS G2**的比赛,又不知道多少小伙伴还记得**Faker**手抖的那一幕。 -> -> ![](https://pic.rmb.bdstatic.com/0def24612fc43cb8cd7e83ff068644934595.gif) -> -> 不知道你们看了是什么感受,我看到他手抖的时候我内心也抖了,世界赛我支持的都是**LPL**的队伍,但是我喜欢李哥这个人,那种对胜利的执著,这么多年了那种坚持自己的坚持,这么多利益诱惑在面前却只想要胜利,这样的人我好喜欢啊,我想很多人也喜欢。 -> -> ![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8m0agafxfj307v0e0glv.jpg) -> -> 可能就像很多网友说的那样,英雄迟暮,但是我觉得他还是有点东西,就像很多人说我们程序员只能吃年轻饭一样,但是如果你坚持自己的坚持,做个腹有诗书气自华的仔,我想最后肯定会得到自己的得到。 -> -> 好了我也不煽情了,我们开始讲技术吧。 -> -> ## 正文 -> -> 上一期吊打系列我们提到了Redis的基础知识,还没看的小伙伴可以回顾一下 -> -> [《吊打面试官》系列-Redis基础](https://juejin.im/post/5db66ed9e51d452a2f15d833) -> -> 那提到**Redis**我相信各位在面试,或者实际开发过程中对缓存**雪崩**,**穿透**,**击穿**也不陌生吧,就算没遇到过但是你肯定听过,那三者到底有什么区别,我们又应该怎么去防止这样的情况发生呢,我们有请下一位受害者。 -> -> ## 面试开始 -> -> > 一个大腹便便,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向你走来,看着快秃顶的头发,心想着肯定是尼玛顶级架构师吧!但是我们腹有诗书气自华,虚都不虚。 -> -> ![](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1572684195247&di=028e6f6a8788bb3cee016bdb86254945&imgtype=0&src=http%3A%2F%2Fgss0.baidu.com%2F9vo3dSag_xI4khGko9WTAnF6hhy%2Fzhidao%2Fwh%3D800%2C450%2Fsign%3D2708ae14db160924dc70aa13e43719ce%2Ff11f3a292df5e0fe08d04043576034a85fdf72ac.jpg) -> -> ### 小伙子我看你的简历上写到了Redis,那么我们直接开门见山,直接怼常见的几个大问题,Redis雪崩了解么? -> -> 帅气迷人的面试官您好,我了解的,目前电商首页以及热点数据都会去做缓存 ,一般缓存都是定时任务去刷新,或者是查不到之后去更新的,定时任务刷新就有一个问题。 -> -> **举个简单的例子**:如果所有首页的Key失效时间都是12小时,中午12点刷新的,我零点有个秒杀活动大量用户涌入,假设当时每秒 6000 个请求,本来缓存在可以扛住每秒 5000 个请求,但是缓存当时所有的Key都失效了。此时 1 秒 6000 个请求全部落数据库,数据库必然扛不住,它会报一下警,真实情况可能DBA都没反应过来就直接挂了。此时,如果没用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。这就是我理解的缓存雪崩。 -> -> **我刻意看了下我做过的项目感觉再吊的都不允许这么大的QPS直接打DB去,不过没慢SQL加上分库,大表分表可能还还算能顶,但是跟用了Redis的差距还是很大** -> -> ![](https://user-gold-cdn.xitu.io/2019/11/3/16e30d2c5e17899c?w=574&h=500&f=png&s=38474) -> -> **同一时间大面积失效,那一瞬间Redis跟没有一样,那这个数量级别的请求直接打到数据库几乎是灾难性的,你想想如果打挂的是一个用户服务的库,那其他依赖他的库所有的接口几乎都会报错,如果没做熔断等策略基本上就是瞬间挂一片的节奏,你怎么重启用户都会把你打挂,等你能重启的时候,用户早就睡觉去了,并且对你的产品失去了信心,什么垃圾产品。** -> -> ### 面试官摸了摸自己的头发,嗯还不错,那这种情况咋整?你都是怎么去应对的? -> -> 处理缓存雪崩简单,在批量往**Redis**存数据的时候,把每个Key的失效时间都加个随机值就好了,这样可以保证数据不会在同一时间大面积失效,我相信,Redis这点流量还是顶得住的。 -> -> ```java -> setRedis(Key,value,time + Math.random() * 10000); -> ``` -> -> 如果**Redis**是集群部署,将热点数据均匀分布在不同的**Redis**库中也能避免全部失效的问题,不过本渣我在生产环境中操作集群的时候,单个服务都是对应的单个**Redis**分片,是为了方便数据的管理,但是也同样有了可能会失效这样的弊端,失效时间随机是个好策略。 -> -> 或者设置热点数据永远不过期,有更新操作就更新缓存就好了(比如运维更新了首页商品,那你刷下缓存就完事了,不要设置过期时间),电商首页的数据也可以用这个操作,保险。 -> -> ### 那你了解缓存穿透和击穿么,可以说说他们跟雪崩的区别么? -> -> 嗯,了解,我先说一下缓存穿透吧,缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,我们数据库的 id 都是1开始自增上去的,如发起为id值为 -1 的数据或 id 为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大,严重会击垮数据库。 -> -> **小点的单机系统,基本上用postman就能搞死,比如我自己买的阿里云服务** -> -> ![](https://user-gold-cdn.xitu.io/2019/11/3/16e30d1847df0faf?w=458&h=480&f=png&s=30569) -> -> **像这种你如果不对参数做校验,数据库id都是大于0的,我一直用小于0的参数去请求你,每次都能绕开Redis直接打到数据库,数据库也查不到,每次都这样,并发高点就容易崩掉了。** -> -> 至于**缓存击穿**嘛,这个跟**缓存雪崩**有点像,但是又有一点不一样,缓存雪崩是因为大面积的缓存失效,打崩了DB,而缓存击穿不同的是**缓存击穿**是指一个Key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个Key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个完好无损的桶上凿开了一个洞。 -> -> ![](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1572683877606&di=abb0c6a9d0acca45a729b7ab516c6e20&imgtype=0&src=http%3A%2F%2Fimg.juimg.com%2Ftuku%2Fyulantu%2F110214%2F6462-11021411045623.jpg) -> -> ### 面试官露出欣慰的眼光,那他们分别怎么解决 -> -> **缓存穿透**我会在接口层增加校验,比如用户鉴权校验,参数做校验,不合法的参数直接代码Return,比如:id 做基础校验,id <=0的直接拦截等。 -> -> **这里我想提的一点就是,我们在开发程序的时候都要有一颗“不信任”的心,就是不要相信任何调用方,比如你提供了API接口出去,你有这几个参数,那我觉得作为被调用方,任何可能的参数情况都应该被考虑到,做校验,因为你不相信调用你的人,你不知道他会传什么参数给你。** -> -> **举个简单的例子,你这个接口是分页查询的,但是你没对分页参数的大小做限制,调用的人万一一口气查 Integer.MAX_VALUE 一次请求就要你几秒,多几个并发你不就挂了么?是公司同事调用还好大不了发现了改掉,但是如果是黑客或者竞争对手呢?在你双十一当天就调你这个接口会发生什么,就不用我说了吧。这是之前的Leader跟我说的,我觉得大家也都应该了解下。** -> -> 从缓存取不到的数据,在数据库中也没有取到,这时也可以将对应Key的Value对写为null、位置错误、稍后重试这样的值具体取啥问产品,或者看具体的场景,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。 -> -> 这样可以防止攻击用户反复用同一个id暴力攻击,但是我们要知道正常用户是不会在单秒内发起这么多次请求的,那网关层**Nginx**本渣我也记得有配置项,可以让运维大大对单个IP每秒访问次数超出阈值的IP都拉黑。 -> -> ### 那你还有别的办法么? -> -> 还有我记得**Redis**还有一个高级用法**布隆过滤器(Bloom Filter)**这个也能很好的防止缓存穿透的发生,他的原理也很简单就是利用高效的数据结构和算法快速判断出你这个Key是否在数据库中存在,不存在你return就好了,存在你就去查了DB刷新KV再return。 -> -> 那又有小伙伴说了如果黑客有很多个IP同时发起攻击呢?这点我一直也不是很想得通,但是一般级别的黑客没这么多肉鸡,再者正常级别的**Redis**集群都能抗住这种级别的访问的,小公司我想他们不会感兴趣的。把系统的高可用做好了,集群还是很能顶的。 -> -> **缓存击穿**的话,设置热点数据永远不过期。或者加上互斥锁就能搞定了 -> -> **作为暖男,代码我肯定帮你们准备好了** -> -> ![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8mg8yjuyqj30ug0u0guk.jpg) -> -> -> -> ##面试结束 -> -> ### 嗯嗯还不错,三个点都回答得很好,今天也不早了,面试就先到这里,明天你再过来二面我继续问一下你关于Redis集群高可用,主从同步,哨兵等知识点的问题。 -> -> 晕居然还有下一轮面试!(强行下一期的伏笔哈哈)但是为了offer还是得舔,嗯嗯,好的帅气面试官。 -> -> 能回答得这么全面这么细节还是忍不住点赞 -> -> (**暗示点赞,每次都看了不点赞,你们想白嫖我么?你们好坏喲,不过我喜欢**) -> -> ## 总结 -> -> -> -> 我们玩归玩,闹归闹,别拿面试开玩笑。 -> -> 本文简单的介绍了,**Redis**的**雪崩**,**击穿**,**穿透**,三者其实都差不多,但是又有一些区别,在面试中其实这是问到缓存必问的,大家不要把三者搞混了,因为缓存雪崩、穿透和击穿,是缓存最大的问题,要么不出现,一旦出现就是致命性的问题,所以面试官一定会问你。 -> -> 大家一定要理解是**怎么发生的**,以及是怎么去**避免**的,发生之后又怎么去**抢救**,你可以不是知道很深入,但是你不能一点都不去想,面试有时候不一定是对知识面的拷问,或许是对你的态度的拷问,如果你思路清晰,然后**知其然还知其所以然**那就很赞,还知道怎么预防那来上班吧。 -> -> ### 最后暖男我继续给你们做个小的技术总结: -> -> 一般避免以上情况发生我们从三个时间段去分析下: -> -> - 事前:**Redis** 高可用,主从+哨兵,**Redis cluster**,避免全盘崩溃。 -> - 事中:本地 **ehcache** 缓存 + **Hystrix** 限流+降级,避免** MySQL** 被打死。 -> -> - 事后:**Redis** 持久化 **RDB**+**AOF**,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。 -> -> 上面的几点我会在吊打系列Redis篇全部讲一下这个月应该可以吧Redis更完,限流组件,可以设置每秒的请求,有多少能通过组件,剩余的未通过的请求,怎么办?**走降级**!可以返回一些默认的值,或者友情提示,或者空白的值。 -> -> **好处:** -> -> 数据库绝对不会死,限流组件确保了每秒只有多少个请求能通过。 只要数据库不死,就是说,对用户来说,3/5 的请求都是可以被处理的。 只要有 3/5 的请求可以被处理,就意味着你的系统没死,对用户来说,可能就是点击几次刷不出来页面,但是多点几次,就可以刷出来一次。 -> -> **这个在目前主流的互联网大厂里面是最常见的,你是不是好奇,某明星爆出什么事情,你发现你去微博怎么刷都空白界面,但是有的人又直接进了,你多刷几次也出来了,现在知道了吧,那是做了降级,牺牲部分用户的体验换来服务器的安全,可还行?** -> -> ## 说到服务器,最近双十一,阿里云的服务器对新用户很有好贼便宜 -> -> ![](https://tva1.sinaimg.cn/large/006y8mN6ly1g8n69mfmhaj314f0u07wh.jpg) -> -> `通过我的链接购买,一年最低仅需86块(新用户专享,如果不是新用户的可以用家里人的账号购买),80一年,200三年我觉得跟白嫖差不多,我直接用老妈账号买了三年的,准备搭建一个小项目玩玩。大家可以买来玩玩,想看服务器文章的朋友留言给我,可以的话我会写一期怎么利用服务器的文章。` -> -> [点我的链接去买有优惠哟](https://www.aliyun.com/1111/2019/group-buying-share?ptCode=9C36CDC5F956AD0477AF1A3D19D3C328647C88CF896EF535&userCode=tybhsgp5&share_source=copy_link) -> -> 好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是**人才**,我后面会每周都更新几篇《**吊打面试官**》系列和Java技术栈相关的文章。如果你有什么想知道的,也可以留言给我,我一有时间就会写出来,我们共同进步。 -> -> 非常感谢**靓仔/靓女**您能看到这里,如果这个文章写得还不错的话 **求点赞** **求关注** **求分享** **求留言** **(对我非常有用)**各位的支持和认可,就是我创作的最大动力,我们下篇文章见,拜了个拜! -> -> 敖丙 | 文 【原创】 -> -> ------ -> ->> 每周都会持续更新《吊打面试官》系列可以关注我的公众号第一时间阅读和催更,也可以在公众号回复【人才】加入人才交流群一起讨论面试题,就业和工作上有什么问题也可以直接滴滴我,我也是个新人,不过不影响我们一起进步,作为渣男,我给不了你工作,还给不了你温暖嘛? -> ->![](https://user-gold-cdn.xitu.io/2019/11/1/16e25fd86ba8a0db?w=900&h=500&f=png&s=185595) -> \ No newline at end of file