现在各大互联网公司, 对 Java 类的校招要求越来越高, 导致很多小伙伴都很迷茫, 今天分享一篇谢照东关于 Java 学习进阶之路, 希望能帮助到一些人
佛说五蕴六毒是妄, 将因果都念作业障, 知乎搜索谢照东
把看过的书罗列一下
java 核心技术: 卷一, 这个是我入门 java 的时候看的, 非常适合新手!
java 设计模式这本书虽然是个外国人写的, 但是感觉不是很好评价一般学习设计模式的时候我一般都看大牛的博客
深入理解 jvm 虚拟机 这本书不用多说, 业界非常非常好的一本书! 多看几遍, 每一遍都有很多收获
深入分析 java web 技术内幕不得不说, 这本说在各个方面都非常优秀, 不愧是偶像写的书! 还求山哥多多照顾嘿嘿
Spring 技术内幕在 spring 源码讲解方面, 个人感觉非常不错能够深入理解内部机制, 但是需要多看几遍
编程之美业界翘楚, 在算法方面终结的非常好, 题目也非常有代表性
剑指 offer 不用多说, 和上面一样, 可以锻炼一些算法能力
java 编程思想传说是 java 行业内的神书, 但是目前表示还处于一知半解状态
Hadoop 技术内幕这个可以 pass 掉, 学习 hadoop 的时候看的
TCP/IP 详解, 卷一: 协议可以对 tcp 有更加深刻的认识
java 网络编程, 不是很好, 将就可以学学 api 还是可以的
分布式 java 应用: 基础与实践这个是毕玄大大写的书, 非常不错哦
how tomcat works 在讲解 tomcat 内部原理方面, 个人觉得是非常不错的书! 等级又要上升一个档次
java 并发编程实战对 java 并发方面, 讲得还算不错的书籍
当然还有一些杂七杂八的书(走了不少弯路, 你懂的!), 我就不列出来了, 上诉都是笔者认为非常不错的书籍
最近正在看算法导论, 和算法, md, 其实我也想成为算法狗
当然, 上面这些书我表示只懂 50%, 惭愧不能完全吸收大牛的精髓啊!
数据结构不用多说, 什么 B 树啊红黑树啊栈队列等等, 至少保证能够清楚的说出来, 说出他们的原理! 具体的应用场景是什么啊!, 当然能写出来更好(手写 btree 会死人, 其实还有一个数据结构叫 skiplist, 逃
算法的话, 建议题目多看看算法题目, 或者把 leetcode 上的算法题目刷一遍 (目前本人只 AC 的几道题, 惭愧知道该资源的时候已经晚了, 现在在努力刷刷刷) 另外可以看看 july 的博客,
数据库就更多了, 索引 (结合 B+tree, 两个引擎的不同之处) 存储过程引擎触发器, SQL 必须是要熟练的, 写 SQL 的时候多考虑考虑效率, 想想还有没有其他的语句能完成这个任务, 在哪方面提高了, 为何呢? 数据库引擎要了解一下, 分布式数据库也是, 什么主从分离啊, 分库分表分区啊, 这些常见的解决方案
操作系统我属于渣渣, 个人就知道一些进程线程一些调度算法之类的~~~~(逃
计算机网络如果是研发岗位得话, TCP/IP 这一张需要好好看看, HTTP 协议不用多说, 常见的状态码等等, 一次 http 请求有哪些过程, 这个要理解透彻
java: 基础非常重要, 当然也要深入理解原理, 什么 JVM,JMM,Classloader, 还有一些常见类的源码, 自己可以试着分析一遍, 现在让你说出 LinkedList 的内部实现你能不能说出来, HashMap 不用多说了, 80% 的面试都会问到还有重要的, 多线程, 并发, 网络, IO 这些都是要看看看看的! 自己多思考! 还有楼主说的那些框架, 说实话, 你要是基础好了, 这些都是能够学得很快的, 很多问题, 看一下源码什么都就懂了! 特别是 spring 的源码要好好看看, 里面的架构设计得非常好! 各种设计模式满天飞!
另外, linux 要了解一下, 至少要回基本命令吧, 脚本语言可以学习一个比如 py! 前端要了解一下.
关于如何看书: 两个字, 思考! 三个字, 不要脸的思考!, 书不在多, 在于精, 选书要慎重! 反正题主一本叫做王者归来的书, 我看见名字我就不想看!
除了这些然后呢: 每天刷几遍 CSDN, 平常可以上上 oj 刷刷题目, 国内的牛客网 (牛客网 - 专业 IT 笔试面试备考平台, 最全求职题库, 全面提升 IT 编程能力) 非常不错, 也可以去 leetcode 上面把题目刷一遍哦关注一些好的社区(我一般混迹在 CSDN 高性能 javaweb 板块), 睡觉之前看微信公众号, 当然是技术方面的! 推送的文章都挺不错的!
做程序员个人觉得眼界很重要, 就算这不是你的领域, 但是你也要知道一点, 所以经常关注其他的新技术是非常重要的! 平常多接触一点开源技术, 多上上 github, 争取能在 github 上面贡献一点自己的东西!
然后, 多看看别人的技术博客思考自己!
关于我的学习方法和面试经验的分享
1 基础
主要看 java 核心技术: 卷一的重点章节
掌握 java 常用技术, io 多线程反射常用集合框架
数据结构看一遍, 作用至少要清楚如 hash 冲突解决办法, 常用排序算法的应用场景和空间 / 时间复杂度等
数据库, 能看懂 ER 关系, 熟悉数据库三大范式, 熟练常用 SQL 语句
可以掌握一点 java 网络编程方面的知识, 对 tcp/ip 有初步的认识
课程不能落下, 专业课程 (计算机网络, 操作系统, 数据结构, 数据库, 计算机组成原理) 要好好学不要挂科
学习 servlet/jsp, 至少能写简单的图书管理系统, 熟悉核心 api
了解前后端交互方式, ajaxjson/xml 至少知道, 会使用 jquery,html,CSS,js 最好
2 提高
学习后端框架, SpringMVC/Struts2MybatisSpring, 熟悉 MVC 模式, 知道三层架构及每一层之间的关系
会用 chrome/firefox 浏览器分析 http 请求, 解决定位问题知道常用 http 状态码, 了解 TCP/IP, 知道一次 http 请求发生了哪些事情
学习设计模式, 23 种设计模式都需要了解一点, 熟悉常用的如: 单例, 工厂, 模板, 适配器, 代理, 责任链, 构造器, 装饰器, 迭代器, 策略, 命令, 观察者, 外观, 享元理解他们的好处, 可以找找在其他框架哪些用了这些设计模式
可以适当的看一些源码, Spring 的源码可以着重的看一下 tomcat 可以从源码的角度看看 tomcat 的整体设计方案, 一次请求 tomcat 如何处理, servlet 在 tomcat 中的加载, 编译过程 tomcat 自定义的 ClassLoader 有什么作用
会设计数据库, 多对多, 一对多, 迭代, 会写复杂的 SQL, 了解 SQL 调优, 会写存储过程, 触发器熟悉索引的使用, 了解视图去了解一些常用 NOSQL, 比如 Redis/mongodb
学习 Linux, 熟悉基本命令, 学习一种脚本语言 (shell/python) 会在 linux 下写脚本开发
3 深入
算法, 可以看看编程之美, 算法导论学习一些算法相关的知识
深入 java: 理解 JVM,JMM,Classloader,GC 算法, GC 收集器学会定位 OOM 问题所在
源码分析, 常用集合类如: Hashmap,Arraylist,linkedList,HashSet,ConcurrentHashmap 等的源码分析, 要非常熟悉 java 集合框架设计
最好能够分析一种框架源码, 比如 Spring
深入数据库, 理解至少两种数据库引擎 (Inndb/Mysiam) 的差异性, 熟悉索引的内部数据结构, 熟悉常见的索引方式(Btree,hash), 和索引类型(unique,full text,normal), 会使用 explain 分析 SQL 语句, 会优化 SQL 语句,
熟悉一种 NOSQL, 知道内部实现原理(内部数据结构, 在算法优化, 内部机制),
掌握分布式数据库的知识, 分表, 分库, 分区, 分布式事务等, 可以学习一个数据库中间件(TDDL/COBAR)
架构设计, 看看大型高流量 / 高并发的网站设计 (CDN, 异步, 前端优化), 了解缓存(分布式 memcached / 常用本地缓存), 搜索引擎(lucene/solr/elasticSearch), 分布式(负载均衡 / 分布式数据库 / 分布式应用集群), 消息队列(ActiveMQ/Rabbitmq) 在大型网站中的作用
还有一些其他的知识, 如 RPC 框架, 分布式服务架构, SOA,REST 架构等等
可以接触一些云计算方面的知识, 如 Hadoop/Storm/Spark 等, 要是再能接触一点机器学习就更棒啦(反正我是没有, 听着就吓人, 跑个 kmeans 算法都要弄死人,
来源: https://juejin.im/post/5aa394116fb9a028b77a6bf6