Files
logseq/pages/面试准备.md

36 lines
5.7 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
- 《Java编程思想》
- 《深入理解JVM》
- 《Java并发编程实战》
- 《算法第四版》
- ## 数据结构与算法
- LeetCode
- 剑指offer
- ## 计算机组成原理
基础课程比如内存缓存CPUIO严格来说都是计组的知识。然而后面的比如并发数据库网络很多知识都会围绕这些展开。不系统学习的话至少建议把经常出现的整体学习一边。否则像我当时就是知道是计算机上的一块东西不是很理解用到的时候一头雾水。**如果时间充裕的话,建议好好学一学计组。**
- **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消息中间件RocketMQKafka网络中间件Tomcat。用处都十分大尤其缓存中间件Redis面试问的巨多建议一定好好学一学。
- **设计模式**
如何优化代码让代码更加SOILID单一原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则建议通过源码来学习23种设计模式不要求全都记住不过常见常用的比如单例模式基本面试必问常见的一定要会。
- **大数据和空间限制**
这里一般和实际结合起来找到100 亿个URL 中重复的URL 搜索词汇的top K 问题。特点就是数据量很大,普通方法和单机一般无法完成。那么这里就是需要用到一些高级数据结构,一些分布式高可用的策略,并行计算等,这部分面试的问题比较灵活,但是不算特别多。但是需要你自己拥有很多前置知识,等前面学的差不多,面试前好好整理总结就好了。(后续争取更新一篇)
- **项目经验**
体现实战能力运用自己学过的东西进行具体的实现看着自己的代码可以从0跑起来到一个实际能看到的成果是一个很激动人心的事情。面试项目面试也是必有流程比如每年都烂大街的秒杀项目这里可以做一些有新意的不过最重要的还是对技术的理解如果没有项目的话就会狂怼你基础知识这些是很容易遗忘的而且很多基础知识相当深奥想想就头痛。