转载声明:文章来源https://zhuanlan.zhihu.com/p/354314938
背景:参加2021届秋招,无实习经历,6月开始刷题准备秋招,到国庆节结束。
offer:拼多多、华为、阿里巴巴、百度、美团、农行研发中心等。
最近帮实验室学弟梳理秋招知识点,理了下面的大纲,分享出来供大家参考。
知识点总结
专业课(计算机网络,数据结构,操作系统,数据库) + Java基础(语法基础,多线程) + Java进阶(Jvm) + 手撕代码 + 加分项(分布式基础,中间件) + 实习and项目
专业课-计网
如果只是粗略的看,或者有考研基础的话,是不需要再看书的。计网虽然面试必问,但基本是套路问题,主要问tcp/ip相关,tcp三次握手四次挥手等问题。把面经题里的准备一下基本足够。
有时候会问到一些进阶问题,比如TCP如何处理粘包、如何处理重连、I/O多路复用技术(select/poll/epoll)等,面经里基本也总结到了的,这些问题在《UNIX网络编程》里都有提到,讲的比较透彻,可以看看。
专业课-数据结构
数据结构比较重要,主要在机试、手撕算法中考察到,以及语言里容器的实现原理,比如Java里的HashMap使用的Hash表,链表的实现等等。
专业课-操作系统
操作系统有必要看看书,主要看一下内存管理,进程管理,文件系统,这三部分比较重要,面试高频题。推荐两本书,《现代操作系统》、《UNIX环境高级编程》 ,现代操作系统讲概念,Unix环境高级编程讲到了unix的具体实现,理解起来更深刻。
专业课-数据库
数据库面试主要是考察Mysql数据库,很少会要求写sql语句。
推荐书:《Mysql技术内幕-Innodb引擎》,问的最多的是索引和事务两章,偶尔会问日志相关,这本书内容很多,挑我说的重点章节看。
Java基础-语法基础
看《Java核心基础卷一》就够了,完全足够,容器这一章,最好自己在ide里看一下源码实现,链表数组HashMap基本都是必问。
Java基础-多线程
并发编程属于必问知识点,主要考察点是:
volatile关键字的概念与实现。
可见性、禁止指令重排、原子性的概念与实现原理。
synchronized关键字概念和实现。
ReentrantLock底层实现(关于AQS的实现)。
乐观锁、悲观锁、互斥锁、共享锁、可重入锁、偏向锁、轻量级锁、CAS与自旋锁,这些锁的概念。
Java并发编程的相关类,Thread,Callable,Runnable这些,要有点印象。
推荐书籍:《Java并发编程的艺术》和《Java并发编程实战》。推荐先看前者,讲的比较通俗易懂。
Java进阶-Jvm
首先是jvm的总体构成,比如类加载器、内存管理(包括具体的堆区虚拟机栈、方法区等)、执行引擎等,这些部分的主要功能。
内存区域是重点,每个区域的具体作用,可以结合一段具体的Java代码分析理解。
内存区域还有一个重点就是垃圾回收相关,这个看看就行了,没多少内容。
类加载相关的就是类加载过程,背一背,类加载的双亲委派模型了解一下。还有一个对象的创建和对象存放。
Java内存模型
推荐书籍:《深入理解Java虚拟机》。
加分项-分布式中间件
1.首先就是缓存中间件redis,这个应该是必须要了解的,问的比较多的是redis的基础数据格式以及底层数据结构实现,常用指令,redis集群的几种方式,持久化方法。推荐书籍:《Redis设计与实现》。
2.集群管理中间件zookeeper,异步通讯框架netty。
3.消息中间件Kafka,推荐书籍《Kafka权威指南》
手撕代码
机试和面试基本都会涉及到算法题,大部分情况都是在牛客网的在线平台上编辑。
机试的算法题难度会高一些,可以在自己的IDE中调试运行。
面试的算法题难度会低一些,但一般都不允许跳转自己的IDE运行,所以调试会难一点。
练习方法:《剑指offer》、《程序员代码面试指南》、LeetCode。
LeetCode主要刷数据结构专题、公司专题等, 200-300道题就基本足够应付了。
项目
这个就要看自己的经历了,选择一两个自认为还不错的,主要是和面试官有话聊,最好是有一些特别的思考。
面试中面试官提出项目中存在的问题都要记录下来,面试完要思考一下答案,如果面试官直接给出了解决方案那就更好了。在之后的面试中,如果被问到自己对于项目的思考或者有没有想过项目存在的问题?就可以假装思考一下,然后把之前记录的东西讲出来。
这是我秋招时看的书,大部分都在这。
高频面试题(转载)
这部分是我秋招时从别人面经里复制下来的,自己也补充了一部分。
一.Java语言
1.HashMap底层原理(源码必看!!!必看!!!必看!!!)扩展:jdk1.7和1.8有什么改进?为什么长度大于8转换成红黑树?这个8怎么来的?
2.ArrayList底层原理,ArrayList和Vector的区别,LinkedList和ArrayList的区别
3.String,StringBuffer,StringBuilder的区别 扩展:String不可变有什么好处?
4.迭代器是做什么的?迭代器的fail-fast机制了解吗?主要为了解决什么问题?
5.ConcurrentHashMap的底层数据结构(要掌握put,get的全过程,如果能对rehash有深入的理解就更好了)扩展:为什么1.8放弃了分段锁,分段锁的优缺点以及1.8的改进
6.synchronized和lock分别在什么情况下使用,使用的理由?扩展:synchronized锁升级过程
7.java中各种锁的实现和使用场景
8.面向对象的七个基本原则,能说出分别的目的吗?扩展:结合Spring框架谈面向对象设计的原则
9.java中的一些类的设计是如何体现设计模式的
10.什么是CAS算法?CAS底层做了什么?CAS可能产生什么问题?
11.知道AQS框架吗?说一下AQS的底层原理吧(重点掌握AQS对于线程排队的过程和存储线程的数据结构)
12.如果一个线程要在其他几个线程运行完之后运行,有什么办法?(CountDownLatch或Phaser,重点掌握底层数据结构)
13.多线程在运行过程中抛出异常怎么捕获?(Future或回调函数)
14.如果想把两个线程的结果拿到进行下一步操作怎么做(可以采用CompletableFuture,1.8的新API,可以看下如何使用)
15.年轻代出现OOM怎么处理?老年代出现OOM怎么处理?方法区出现OOM怎么处理?本地方法栈出现OOM怎么处理?(反向思考,如何让这些分区OOM)扩展:线上OOM怎么排查问题
16.ThreadLocal可以解决什么问题?具体的应用场景?(可以用ThreadLocal存储当前线程的数据库连接,分布式链路追踪中可以存放当前线程对应的链路信息)
17.ReenTrantLock中的condition有什么作用?condition的await和signal和Object的wait和notify有什么区别?
18.volatile主要解决了什么问题?(总线嗅探,高速缓存一致性协议,防止指令冲排序)扩展:指令重排序带来的问题
19.类的加载过程?如何保证我的类被指定的类加载器加载?相同的类被不同的类加载器加载了,这两个类相同吗?
20.jvm的内存模型和各种垃圾回收算法和垃圾回收器(重点掌握CMS和G1垃圾收集器)
21.jvm内存模型 扩展:各个jdk版本的内存模型有什么变化
22.jvm的类加载机制,反射的原理以及反射的应用 扩展:如何提升反射的性能
23.java的四种引用类型?jvm如何判断这个对象可回收?finalize方法的作用?
二.计算机网络
1.三次握手和四次挥手的过程?每次发送的包的内容,客户端和服务端的状态?
2.ICMP协议的应用?(ping命令和traceRoute等)
3.TCP如何保证可靠性?(校验和,分片,超时重传,ARQ协议,滑动窗口等等)
4.如何实现UDP的可靠传输?(考虑在应用层实现,可以了解下http3.0协议)
5.https的请求过程?(如何建立ssl)
6.一次RPC调用的整个链路?(考虑三次握手负载均衡等)
7.http + restful 和 RPC的区别?各自适用的场景?
8.DNS协议用到了什么传输层协议?(一台新电脑如何获取到有效的网关地址)
9.在浏览器中输入一个url,敲下回车之后发生的事情(考虑DNS解析,负载均衡,建立连接等等)
10.服务端出现大量timewait是什么原因导致的?(具体的解决方案)
11.http的报文结构?TCP的?IP的?
12.http协议的发展历程(1.0,1.1,2.0,3.0)
三.操作系统
1.虚拟内存解决了什么问题?(分页,分段,段页的区别)
2.进程间通信的七种方式(实现原理,具体应用场景)
3.死锁产生的必要条件?如何解决死锁的问题?
4.linux的各种IO模型?(重点掌握epoll,底层结构红黑树 + 链表,能够说出为什么在管理数百万连接的过程效率还好,以及ET模式和LT模式)
5.可以学习一下shell编程
6.内核态和用户态的区别以及转换?(什么情况会转化:中断,各种中断进行分类)
7.linux底层的零拷贝技术(经历4次 -》3次 -》2次拷贝的优化历程)
8.操作系统大内核和微内核之间的区别以及各自的好处?
9.僵尸进程和孤儿进程产生的原因以及解决方式?
10.操作系统的各自调度方式
四.数据库
1.数据库的四个特性?四个隔离机制?
2.数据库索引数据结构?各种索引失效的情况?最左匹配原则
3.MySQL主从复制的原理?
4.MySQL的如何保证事务
5.MVCC底层实现
6.MySQL和Redis的区别(各自使用的场景以及原因)
7.Innodb和MyISAM的区别
8.redis的数据结构?
9.redis为什么快?(io模型 + 基于内存 + 线程模型)
10.一条sql语句的查询流程
五.Spring以及分布式中间件的知识
1.Spring和Springboot的区别
2.IOC和AOP的理解
3.AOP的底层实现
4.Spring中事务传播的各种情况
5.Spring如何解决循环依赖
6.SpringCloud的各种组建
7.Spring启动流程
8.SpringBoot的SPI机制是如何实现的
9.Springboot启动流程
10.SpringMVC的工作流程
11.负载均衡如何实现(考虑非网关的方式实现)
12.服务注册中心的工作流程
请问测开均价是多少k呢?