5.7 KiB
5.7 KiB
- 《Java编程思想》
- 《深入理解JVM》
- 《Java并发编程实战》
- 《算法第四版》
-
数据结构与算法
- LeetCode
- 剑指offer
-
计算机组成原理
基础课程,比如内存,缓存,CPU,IO,严格来说都是计组的知识。然而后面的比如并发,数据库,网络,很多知识都会围绕这些展开。不系统学习的话,至少建议把经常出现的,整体学习一边。否则像我当时就是知道是计算机上的一块东西,不是很理解,用到的时候一头雾水。如果时间充裕的话,建议好好学一学计组。 - Java基础 学习一门语言当然要了解语言特性,这个是必须会的,建议找书或者教程,边打代码边去理解,不要手懒。推荐书籍如《Java编程思想》。理解较深之后,可以配合源码进行理解,但是不要死磕,结合已有的博客进行阅读,可能事半功倍。
- Java虚拟机 先理解为什么有这个东西,再思考代码是怎么在JVM上进行实现的。我们需要把代转换成CPU能理解的机器码来执行,所以Java 这样使用虚拟机的语言,则是由虚拟机对编译出来的中间代码进行解释,或者即时编译成为机器码来最终执行。理解为什么有JVM,是怎么实现Java的一些特性的。推荐阅读《深入理解Java虚拟机》,一本就够!
- 并发编程 这里有时候涉及对操作系统的理解,有时候又涉及一点硬件知识。这里逻辑上讲,先了解问题背后的本质、问题的起源,同时站在理论、模型的角度学习Java 并发。具体知识点如并发存在的原因。以及并发bug的源头。锁,管程模型,线程状态转换。JUC包,线程池等,推荐书籍《Java并发编程之美》,《Java并发编程实战》
- 数据库 web后端开发必备,用来存储数据和构造关系映射,不可或缺。 数据库的学习建议理论和实战相结合,多做实验,通过背后原理思考为什么这样实现。面试对一些实现原理问的很深。推荐《SQL必知必会》、《高性能MySQL》。做项目时候,手写SQL语句,关注数据库表的设计。
- 计算机网络 网络部分记忆的部分很多,坑也比较多,当然这里记忆的部分是逃不掉的,理清整体逻辑之后,就开始背吧。另外这里建议做项目时候,结合实际场景进行学习,用wireshark抓包看一下,用postman进行接口测试,自然就理解了。任何知识经过实战的检验才会更加扎实,正所谓纸上得来终觉浅嘛~ 具体知识点如:五层/七层协议、TCP 和 UDP 的区别、TCP 三次握手和四次挥手、HTTP 的特点、HTTP 与 HTTPS 的区别、HTTP2.0、HTTP3.0等等。推荐《图解HTTP》、《计算机网络》
- 操作系统 Linux操作系统在我们实际的开发过程中是必备的,因此熟练掌握Linux系统的使用以及其底层原理尤为重要。比较后悔没有提前系统学过,后来恶补了一波,目前也在逐渐学习的过程中。 Linux常见操作不过多赘述了,想说一点就是,各种Linux命令一定要先查清楚他的英文单词,就会理解每条命令的意思了,死记硬背是记不住的。关于底层原理,一般是Linux内核资源调度,进程管理,内存管理,网络系统,这些能掌握已经很不错了。推荐《鸟哥的Linux私房菜》
- 框架: Web框架和ORM框架。 以Java为例,Web框架就是Spring全家桶,ORM框架就是MyBatis,从事Java后端开发的同学都知道,Spring已经成为了业内公认的后端开发框架,整个Java生态也离不开Spring,。Spring大家族从最初的Spring Framework到Spring Boot再到Spring Cloud,生态已经越来越完善。因此作为Java后端工程师,一定要具备Spring相关技术栈。 学习过程中,建议先理解为什么有这些框架,找个实战项目入手,明白web后端开发流程。细节上,比如对一些Spring概念的理解,比如Spring Bean的生命周期,DI容器,AOP。(吐槽一下,学完Spring后,会发现Golang和Python是有多么简洁)
- 中间件: 锦上添花的一些技术,比如缓存中中间件Redis,消息中间件RocketMQ,Kafka,网络中间件Tomcat。用处都十分大,尤其缓存中间件Redis面试问的巨多,建议一定好好学一学。
- 设计模式 如何优化代码,让代码更加SOILID(单一原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则)建议通过源码来学习,23种设计模式不要求全都记住,不过常见常用的,比如单例模式,基本面试必问,常见的一定要会。
- 大数据和空间限制 这里一般和实际结合起来,找到100 亿个URL 中重复的URL ,搜索词汇的top K 问题。特点就是数据量很大,普通方法和单机一般无法完成。那么这里就是需要用到一些高级数据结构,一些分布式高可用的策略,并行计算等,这部分面试的问题比较灵活,但是不算特别多。但是需要你自己拥有很多前置知识,等前面学的差不多,面试前好好整理总结就好了。(后续争取更新一篇)
- 项目经验 体现实战能力,运用自己学过的东西进行具体的实现,看着自己的代码可以从0跑起来到一个实际能看到的成果,是一个很激动人心的事情。面试项目面试也是必有流程,比如每年都烂大街的秒杀项目,这里可以做一些有新意的,不过最重要的还是对技术的理解,如果没有项目的话就会狂怼你基础知识,这些是很容易遗忘的,而且很多基础知识相当深奥,想想就头痛。