Java 后端开发。感谢牛客网,我之前是在这里看面经巩固知识,本文算是回馈牛客网了。🤣
本人毕业后在家乡(二线城市)某小公司呆了三年。今年发现自己与同时期的同学薪资差距太大了,而家乡没有任何大厂甚至中厂,于是决定去外闯荡。
由于在杭州有朋友在工作,所以本人只面试了杭州的一些公司。
最终入职杭州阿里p6,薪资是原来的三倍🤣
如何投简历与面试技巧
哪里投递简历?(信息差)
找工作的过程其实信息差的存在是很关键的因素,你了解的越多,越有机会找到合适的岗位。没有必须要求某一个岗位的话,推荐找内推。
找你身边可以内推的朋友,能避免被某些 hr 的 kpi 干扰,白白浪费时间。同时内推可以清晰看到流程进展到哪一步了。
最重要的是内推可以看到该岗位招多少人,招的人多的岗位因为缺人,面试会容易不少。不了解情况,投递了一个只招聘一个人的岗位,这就是面试的运气因素。
如果你没有合适的朋友,阿里、蚂蚁、菜鸟内推可以找我,见本文最下方。
简历怎么写
社招的话,个人信息部分要填写好自己的邮箱(据说用 qq 邮箱会被鄙视,我用的谷歌邮箱)。
学校经历少写,主要写之前的工作内容以及做了哪些事,擅长哪些技术栈。
不要说自己精通,用「熟悉」、「了解」这两个档位即可。
简历上要刻意写自己会的东西,不会的不要写。面试官问了你了解的技术,结果你不了解,那给人的感觉就不对了。
面试技巧
自信一些,做到说话不要哆嗦。给面试官讲原理时,要讲清晰,能让人听懂。
遇到不会的问题,就说不会,没什么关系😄,不要卡住半天结果整场面试都没问几个题。要展示出你擅长的技术以及深度。
重要的一点,引导面试官问你最熟悉的内容。面试官是为了知道你会什么,发掘人才来工作,不是难为你来的。一定要在自我介绍时,结合项目经验讲明白自己擅长什么。
结尾面试官一般会让问一个问题,可以问问自己有没有下一轮的机会。
心态与学习经验
本人面试了字节、网易、阿里等,还有一些小公司,其实问的都差不多,只要这几块主要知识 ok 就能通过面试,不要害怕。
一定要有针对性的复习,而不是啥都想会。有很多同学会在复习的过程中扣知识点细节扣到死,觉得这个会的不够多,实际上没用,只是浪费时间。后面我会讲看什么。
推荐看书学习。
在线复习资料的话,推荐 GitHub 上的 「JavaGuide」
会啥才能进大厂?大厂能要我吗?
不同大厂面试的侧重点是不同的。以我的经验:
字节由于后端使用 golang,所以 Java 基本上不怎么问,更多的考算法、计算机网络、操作系统、数据库等基础知识。会让写算法题。
网易问八股文,还有你对做过项目技术的理解。算法 写一道或者不写。
阿里主要是考察 Java 技术栈的掌握程度,还有就是场景设计-基于你做过的项目分析可提高的地方。
其他一些小公司基本就是八股文,相对更容易些。
不会八股文必挂!!!
一定要有自己的特点或者优势,比如学历好、曾经就职其他著名互联网公司、对技术理解深刻、做过的项目与需求匹配等。如果各方面条件都比较一般,就要在技术理解上做到深刻。
下面讲下各个知识点的重点,以及都需要会什么。
JVM
JVM 看周志明的《深入理解 Java 虚拟机》。看 2,3,4,6,7章就 ok。
需要知道:
- JVM 内存划分为哪些区
- 垃圾收集原理、常见垃圾收集器的回收过程。
- 线上出现 oom 等异常,如何排查问题。常见工具的使用(jmap、jvisualvm等)。
- 类文件结构(了解即可,这背不下来)。
- 类加载过程。
根据我的面试经验,JVM 只有一次面试问了我「JVM 内存划分为哪些区」,其他一概没问过。
Java 并发编程
《Java 并发编程的艺术》。此书比较容易看完,晚上看,一周就能看完。
需要了解:
- 线程上下文切换是什么
- volatile 与 sychronized 的原理与区别,要深入理解
- 线程的几种状态
- aqs 的原理,以及它是怎么应用来实现公平锁与非公平锁的。
- java.util.concurrent 包下面的常用工具类,ConcurrentHashMap、ReentrantLock、Semaphore、CountDownLatch
- 线程池的七个参数,必会。这个不会基本代表你都没用过多线程……
MySQL
《高性能 MySQL》这本书是经典。另推荐极客时间的《MySQL 实战 45 讲》。
- 索引原理,索引优化
- 一条 sql 的执行,具体的内部细节
- 事务原理,隔离机制,脏读、幻读,表锁、行锁、间隙锁。binlog、redolog 的写入时机。
- 主从复制原理
- 分库分表怎么做
Redis
《Redis 开发与运维》整本推荐看完,极好的一本原理+实战。《Redis 设计与实现》第一章讲数据类型底层实现。
- Redis 常见数据类型,以及他们的底层实现。
- 持久化:RDB、AOF,区别与具体原理,要深入了解。
- 主从复制原理:全量复制、部分复制
- 集群原理:普通主从、哨兵模式、Cluster
- 缓存应用场景:击穿、穿透、雪崩,如何与 DB 实现数据一致性
消息队列
我之前用 Kafka,所以看的是《深入理解 Kafka》。
其实消息队列有一些共性的,以 Kafka 为例:
- Kafka 的基本构成,broker、topic、副本、消费者组之间的关系
- Kafka 的实际使用,如何避免消息的丢失与重复发送
- Kafka 的磁盘存储,页缓冲。(Mysql、Redis 其实也有用到相关技术,要在学习过程中发现举一反三)
算法
LeetCode top100。社招算法的考察并不太多,在整体学习时间中不应占太大比例。如果之前一点没刷过而且时间来不及了,就网上找一些重点题看看吧。
Zookeeper
《从 Paxos 到 Zookeeper 分布式一致性原理与实践》
- Zookeeper 的基本原理,node、临时 node、顺序 node
- 分布式锁的实现方式
- 领导者选举
- paxos 算法(略深,加分题)
上述内容基本上都是必会的,有不会的需要用功学会。除了这些以外的,要靠平时的积累了。
面经!
由于好多题都是重复的,这里我直接归纳总结了,不写明具体是哪个公司问的。
- concurrentHashMap 的原理,怎么实现并发加锁的?阻塞队列的原理(ArrayBlockingList)?
- 并发工具包。cas 是怎么回事?线程之间可以通过哪些工具同步(CountDownLatch、CyclicBarrier、Semaphore)?
- mysql 事务隔离级别四种?读提交、可重复读区别?间隙锁怎么回事,锁哪里?undolog如何实现mvcc?高低水位问题。mysql 为什么会不走索引,问索引设计相关
- springmvc 的过程原理?
- spring 源码有了解吗?讲讲看过的(我只看过三级缓存池)
- redis 分布式锁在你业务中怎么用的?还有什么可以实现分布式锁(zookeeper)?
- zookeeper 有了解吗?临时节点有什么用?Paxos 算法?节点间消息同步过程?
- 一致性hash算法怎么回事?用代码写的话你怎么做?(比如用treemap)
- redis 常用数据类型有什么?他们底层是怎么实现的知道吗,说几个?提到zset使用跳表,跳表是怎么回事?
- bio nio区别,io多路复用,select poll epoll
- tcp 四次挥手过程,最后客户端等待2倍消息最长丢弃时间的原因
- mysql死锁是什么情况下发生的?你了解的 mysql 都有什么锁?(全局锁、表锁、行锁)聚簇索引、非聚簇索引是怎么回事,有什么区别?基于b+树的结构上,两者有什么区别?delete会锁表吗?如果长期使用delete会有什么问题(页空洞)?
- 讲讲kafka集群的负载均衡
- redis 分布式锁怎么实现?能做成可重入锁吗?分布式锁可重入,什么业务会用到?
- redis 主从同步的原理?全量复制和部分复制。redis分布式锁,如何哨兵模式下使用?
- java的 ReentrantLock 是怎么实现的?讲了AQS。如何使用AQS实现公平锁与非公平锁?怎么实现的可重入?可重入锁怎么释放的?AQS内部是什么结构原理?自旋的好处是什么(使线程一直处于runnable状态,不会有线程上下文切换的资源消耗)?
- redis 分布式锁是怎么实现的?(setnx 过期时间+lua脚本原子解锁。)说到过期时间,redis 是怎么淘汰时间过期的 key?(两种过期 key 淘汰策略。)你说的这两种方案还是无法消除所有过期 key,如果有很多过期 key,redis 内存是不是就满了?(8种内存淘汰策略)
- redis 雪崩讲一讲?如果每一个 key 都加分布式锁来确保只有一个请求访问到数据库,但是此时有 10000 个 key 过期,还是会导致大量请求瞬时打入数据库,怎么办?(限流,10000个请求只让1000个进来,其他的返回错误信息,客户端多试几次,就有机会访问成功。)
- 提到分库分表,讲讲这是怎么做的?(取模运算)如果是已经分表了,数据又在这基础上增长了 10 倍,该怎么重新分表?
- 分布式事务有了解吗?(两阶段提交、TCC、本地消息表、消息事务、最大努力通知)你自己怎么实现一个两阶段提交方案?commit 阶段(第二阶段提交)有一个事务失败了,其他事务都成功了,这个怎么解决?
- Java 里面的 sychronized 关键字和 ReentrantLock 有什么区别?使用方法和实现原理上?sync 关键字怎么实现加锁的?锁膨胀讲一下?sync 是可重入的吗?
- Redis 一致性 hash 算法讲一下?有节点挂了,怎么处理?(转移数据到下一个在 hash 环上比它大的节点)如果说只有 3 个节点,但是总共有 10 亿条数据在三个点里面,有一个挂了,就要有 3 亿数据转移,这显然不合理,Redis 怎么处理这个情况?(讲 Redis cluster 原理,虚拟槽 slot)
- 讲解下 Redis cluster 原理?(16384 个虚拟槽)为什么是 16384?(作者在他的 GitHub 回复,是因为集群中 ping 消息结构体中有个数组大小是虚拟槽数量的八分之一,够用就行,虚拟槽设置太多了造成数据包变大)哨兵模式是怎么回事?主从切换过程?(主观、客观下线)raft 算法和 zookeeper 的算法有什么区别?
- Redis 主从复制过程中,一个从节点挂了,之后又恢复了,怎么回复同步进度?(部分复制原理)Redis 的持久化讲一下,RDB、AOF 的比较?
- Mysql 脏读、幻读是什么情况下发生?(脏读-读未提交,幻读-读未提交、读已提交)幻读在可重复读时候不会发生?(不会发生,网上很多说会的实际是错的,书上明确写不会)间隙锁怎么回事?(讲解下锁间隙,跟行锁一同构成 next-key lock,避免幻读的发生)
- Redis 如何查询出所有以 ABC 为开头的 key?(scan)有什么问题?(会有跟上次遍历重复的数据)?怎么导致的?(底层数据结构原理)
- 算法题,单链表,删除倒数第n个node
- 算法题,LRU
资料与内推
本文提到的所有书籍 pdf 可以找我要。 阿里、菜鸟、蚂蚁都可以内推,可以分享详细 jd,招聘人数、招聘职级等,找到适合的岗位。
字节、涂鸦智能、得物也有同学在,有需要的我可以帮忙问问。
wx 搜「Java知识树」,关注回复「书」获得书籍资料,回复「内推」找我看简历与内推。
祝大家都能入职心仪岗位,努力从不会被辜负!
全部评论
(5) 回帖