技术

《Head First java》
《effective Java》
《Java 编程思想》
《Java 编程核心技术》
《深入理解 JVM 虚拟街》,内存分配, 类加载, 内存模型和多线程部分。这三部分可以重点看。

  1. 《JAVA 并发编程实战》
    《JAVA 高并发编程》
    《Java 并发编程的艺术》
    《Java 并发编程之美》
  2. 《分布式中间件技术实战(JAVA 版)》
  3. 《分布式消息中间件实践》
  4. 《深入理解 ElasticSearch》
  5. 《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》
  6. 《从 Paxos 到 zookeeper 分布式一致性原理与实践》
  7. 《EffectiveJava 中文版第 2 版》
  8. 《Spring boot 实战派让开发像搭积木一样简单》
  9. 《Spring 5 核心原理与 30 个类手写实战》, 我这个看完也跟一遍手写实现 spring 的一些功能
  10. 《设计模式就该这样学基于经典框架源码和真实业务场景》《Netty 4 核心原理与手写 RPC 框架实战》
  11. 《Spring Cloud Alibaba 微服务原理与实战》这本书看完,后面在公司实际项目开发中开始用上了 dubbo 和 zookeeper。
  12. 《微服务设计》
    其他:《大型网站技术架构核心原理与案例分析》

源码阅读:JUC,集合类,常见类(String 等),

  • T3: 分布式系统,zookeeper,微服务,socket 编程,Netty,nginx,等
    这些内容一般不作实战要求。有兴趣有时间可以了解学习一下。我就只是做了一个最初步的了解。但是 Redis,MySQL 都会涉及到主从分离之类的分布式系统,可以了解一下它的设计和过程。Git 虽然不要求,但是系统地学习会给自己带来很大的便利。

Java 并发

索引 - 随笔分类 - 如果天空不死 - 博客园
java 并发编程实战
ifeve 并发编程网
infoq
JMM 内存模型

SpringBoot

Spring Boot 基础教程 | 程序猿 DD
<spring 技术内幕>
彻底征服 Spring AOP 之 理论篇 - SegmentFault 思否
《Spring boot 实战派让开发像搭积木一样简单》

Java 进阶

Java 技术栈

  • 计算机基础:操作系统 / 计算机网络 / 数据结构与算法 / 设计模式
  • 语言:Java 基础 / Java 容器 / Java 并发 / JVM
  • 数据库:MySQL
  • 框架:Spring 家族(Spring / SpringMVC / MyBatis / SpringBoot / SpringCloud)
  • 中间件:Redis / Dubbo / 消息队列(RocketMQ / RabbitMQ 等) / ElasticSearch
  • 其它:Zookeeper / Netty / Tomcat / 系统设计(分布式 / 高并发)

SSM 框架(Spring、SpringMVC、Mybatis)、MySQL 数据库、Redis、Nginx、zookeeper、dubbo、Eureka、ElasticSearch、Tomcat、消息队列 MQ,Linux 基本指令、shell 脚本、Git 的使用等,

  1. java 基础,很精通了,面试题能流畅背诵。
  2. java 虚拟机,面试题能流畅背诵。
  3. 设计模式,很精通了,面试题能流畅背诵,平时代码都按照设计模式来写。
  4. JUC 并发编程,能背诵面试题,并且写并发代码(阿里 2 面笔试就是考的并发编程)。
  5. 操作系统,面试题能流畅背诵。
  6. 计算机网络,面试题能流畅背诵。
  7. Mysql 可以说是很精通了。
  8. Mongodb 可以说是比较熟练了,精通还不至于,字节二面的时候 mongodb 这块被问倒了。
  9. 分布式事务 seata,原理精通,demo 玩过。
  10. 分库分表 mycat,很熟练了,源码看过,原理精通,demo 玩过。
  11. Elasticsearch 搜索引擎,平时项目开发一直用的这个做搜索,很精通了。
  12. ELK 日志系统,之前公司的 ELK 就是我自己搭建的。
  13. redis 缓存,可以说是很精通的,从底层数据结构到分布式实现,全都掌握。
  14. SpringBoot+Mybatis
  15. SpringCloud 系列: config 配置中心、bus 给配置中心发送消息的(还要配置消息队列,不太好用)、eureka 注册中心、hystrix 熔断限流、sleuth 链路监控、security 安全、ribbon 请求分发、OpenFeign 服务调用、gateway 网关。源码都看过一些,原理基本上全都掌握了,有 demo 调用玩过。
  16. SpringCloud Alibaba 系列:nacos 注册中心,seata 分布式事务,dubbo + zookeeper rpc 通信,sentinel 熔断限流,源码都看过一些,原理基本上全都掌握了,有 demo 调用玩过。。
  17. 分布式任务调度 elastic-job,xxl-job。源码都看过一些,原理基本上全都掌握了,demo 调用过。消息队列 rabbitmq,kafka,rocketmq,源码都看过一些,原理基本上全都掌握了,有 demo 调用玩过。

JavaSE 基础:

数据类型、异常体系、多线程、常用集合类、枚举&注解、IO 流、反射、泛型、Java8/9/10 新特性、Java 虚拟机

核心是面向对象,其中又以对象和接口的概念与用法为重点,至于 IO 流,集合,异常处理,反射等,这些内容可以大概过一遍,到用的时候再细学,初学的时候不要死抠细节,太琐碎和复杂的用法直接跳过,学习最常用的用法。同推荐尚硅谷宋红康的视频。

ssm 框架:

推荐狂神说 java spring,sring mvc,mybatis。重点学习如何写配置文件,跟着视频动手搭一个最简单的项目,熟悉 ssm 框架搭建项目流程。

中间件:

中间件,比如 mq、dubbo 等等,如果你不擅长就最好别说你会 hhh,因为这些东西可以引申出很多实际的场景问题,他们存在的意义也是解决实际问题的

这些中间件的学习结合具体的项目需要,并不一定要完全覆盖上述内容。关于学习深度的问题,我的建议是,以应用为主,弄清使用场景,在充分理解的情况下,再去理解一些底层原理(一般考这种纯属面试官秀技能),同时思考一些技术的替代方案。

优先级计算机基础+java 语言基础 >>> mysql/redis >>> ssm+分布式框架 >>> mq

学习时间安排:

  1. 周一至周五工作日,每天学习 6 小时。(公司是 965 上班制度,我上班期间没事的时候抽一个小时左右时间学习,下班后每天学习到晚上 12 点。
  2. 周六周日休息日,每天学习 10 小时。早上 10-11 点左右起床,早上 12 点到凌晨 12 点,学习 10 小时(吃饭摸鱼、玩游戏占了两个小时。)
  3. 12 月 31 日和 1 月 1 日,给自己放了两天假,基本没怎么学习,只打卡了 leetcode 每日一题。
  4. 春节在假期间,每天学习 10 小时。早上 10-11 点左右起床,早上 12 点到凌晨 12 点,学习 10 小时(吃饭摸鱼、玩游戏占了两个小时。)
  5. 2 月分下旬,在心理压力、学习压力的双重加持下,身体出现极度不适,但那个时候还是强忍着身体咬牙坚持下来了,学习强度保持不变。
  6. 3 月份春招,准备面试那一周字节,上班都在摸鱼学习,全天都在学习,一直学到凌晨 2 点。
  7. 第一周周五字节技术面全过之后,自己信心也上来了,给自己减轻了学习强度。第二周面阿里,就按部就班工作日每天学习 6 小时。

学习方向

  1. 基本上按照阿里 p6 的招聘要求进行学习。这个自行去网上搜索三年工作经验的高级开发工程师招聘要求。可以在牛客网、脉脉、csdn 上搜一下。

项目经验

  1. 自己做了秒杀项目,可以看之前的帖子,这边不占用太长的篇幅描述了。秒杀项目知识源泉来自于《Spring Cloud Alibaba 微服务原理与实战》、《分布式中间件技术实战(JAVA 版)》、《分布式消息中间件实践》、《深入理解 ElasticSearch》,以及 SpringCloud 官方文档。
  2. 除了秒杀,我还在公司的一个小项目里,使用了 dubbo+zookeeper 远程 rpc,所以后面阿里技术终面了也问了我很多 dubbo 相关知识点。他问我为什么项目里要用这个,我说我就是为了学习使用,其实小公司项目的并发量根本不需要 dubbo,我这么做单纯是给自己增加 dubbo 的项目开发经验。

Github 顶级 Java 教程类开源项目

项目

项目经历,我把研究生期间的项目翻出来仔仔细细品味了一番,尤其是准备写到简历上的项目,第一是对项目

每个细节都要了如指掌,运用了什么思想/设计模式/特殊技术都值得仔细整理一番,
对项目要点的思考,对项目不足的思考(当时没做好,经典问题:如果现在做重构,你会考虑重构哪些部分,为什么)

做项目,可以不具体实现,主要是在项目中对于需求的分析思考和设计思路。

  • 一个问题通常会搜到很多博客解读。请相信,如果看不懂一定是博客的问题,不是你的问题。多参考几个博客,提取他们各自的要点,再综合出自己的观点,最好可以加上一段自己如何在实际项目中去应用。

  • 搜索引擎看到的各种博客是最快速有效的学习方式

  • 偶尔在 B 站和知乎看到一些 System design 场景题相关的推荐,也会点进去看看

GitHub - CodingDocs/awesome-cs: 计算机优质书籍搜罗+学习路线推荐!