2020 年底 java 后端面试小结

技术面试分享

结构:一轮通用 + 一轮综合设计 + 一轮 leader 问项目经验

主要通用技术问题:计组的基本问题,计算机网络(tcp-http 为主),数据库,缓存,消息中间件,java 并发,spring,分布式等知识。有一个非常好用的 csnotes 开源项目,以此为大纲完全 ok:http://cyc2018.gitee.io/cs-notes/ (gitee 或 github 搜索 csnotes)

主要设计问题:这个就比较多变了,不管是设计什么评论系统、朋友圈系统还是什么热点文章系统,有些就用 redis 的一些数据结构,有些用到消息中间件,一般来说一年经验的不会问太复杂的分布式系统设计。

leader 面的主要问题就是曾经项目中主要负责的内容,最大的技术挑战,和其他部门合作时的挑战,个人对某些中间件技术的理解等等。都是比较大范畴的问题,需要有一定的抽象高度+实际细节的证实,这部分最好提前准备一下,即曾经项目的亮点、怎么解决其中最大困难的。

至于算法题,哪怕是比较看重算法的头条,其实项目和技术聊得好的话也会给放水,基本都是给中等难度。如果给出 hard、你做对了还给挂,那大概率两个原因:1. hr 坑你;2. 项目或者技术没聊到位。其实如果沟通好,哪怕真给一个一下做不出来的 hard 也会提示你怎么做的,而且不一定跑通,思路对都可以。其实如果把剑指 offer 的算法题刷明白了,是完全够用的。

不过微软、shopee 之类的外企,可能更看重一点算法能力,有时会在白板进行编程,而且要求比较快的、有思路的、高可读性地做出来,大概需要刷力扣高频题 400 道左右,并且重复两三遍。

值得一提的是,各类排序还是有必要刷明白的,不光是数组排序,还有链表排序,以快排、归并为主,堆排的话没有遇到过。

hr 环节分享

字节、快手之类的厂,不同部门的差异还是蛮大的。字节简历是猎头有快速推荐通道,可以很快约到面试,但一年只有一次,之后就只能走内推通道或者等他们不同部门捞你的简历。这里有个很大的坑:很多岗位并不匹配也给捞,在几次反复后俺意识到情况不太对劲,原来每次被拒都会留有痕迹,多次被拒后,短时间内就不太可能进。所以那些约了好多次(甚至有十几二十次的)的老哥,基本就是 hr 在拿候选人当工具人使。如果两三次都没进去,就等下份工作再尝试吧。

字节、美团、滴滴、拼多多的 hr 在联系时会直接问能不能接受加班,有时候面试时候也会冷不丁问你一下,如果表现的犹豫之类的就别找他们面试了,不接受加班就别考虑这些互联网公司了……犹豫就会挂掉

在谈薪环节,像一些大厂里的 hr,有时会仗着平台和一点福利贬低小厂 offer,很不体面。“这可是阿里/腾讯/字节/网易/快手啊”,诸如此类非常败好感。所以能力不够,名声来凑?

结果

拿到快手(北京,主app业务架构,k2b)与 pdd(上海,物流算法引擎)的口头 offer,最终去了上海的比心(游戏社交事业线,sp)。

如何内推

内推渠道除了脉脉,还有牛客网之类。比较 amazing 的是,闲鱼之类的居然有卖的(一分钱左右)各大厂内推名额??我还看到过字节内推,就在闲鱼,免费帮改简历(内推成功给 1w,你说呢)etc.

福利 - 常见问题

线程进程概念,进程线程通信, I/O 模型。微服务 spring cloud,dubbo,注册中心,服务降级原理,分布式事务的实现思路,redis、mysql 和消息中间件数据一致性。http 1.0 与 1.1 区别,长连接,http 与 https 的区别,xss 攻击,跨域问题。java 数据类型与范围,集合,java string/string builder/string buffer,hash map与 concurrent hash map 在不同 jdk 下几种实现原理,resize机制,红黑树(2-3树),乐观锁与悲观锁的实现模式,Lock 与 AQS ,可重入锁原理,atomic 类(如 AtomicReference ),并发容器,线程,线程生命周期,线程池,线程池核心参数(怎么设计线程池),volatile 与 synchronize 关键字原理,读写屏障,类加载机制,双亲委派,JMM 内存模型,GC(CMS,G1,ZGC),jdk8 的 stream 新特性与性能问题。spring 的 ioc,aop,bean生命周期。mysql 存储引擎类型与特性(myisam、innodb、memory、federate),B-树与 B+树,索引,锁与并发,ACID,隔离级别与原理,mvcc 与间隙锁怎么 RR 解决幻读,如何提高性能(范式与反范式、sql优化、索引等),覆盖查询,回表查询,最左匹配原则。redis 数据结构,string 存储原理,zset 跳表原理与复杂度,哨兵机制,主从复制(全量、增量),持久化机制, aof的rewrite机制(怎么保证一致性),渐进式哈希,缓存击穿/雪崩等,分布式锁,setnx 与 expire 合并成原子操作。mq 拓扑,不同 mq 举例与差异,集群逻辑等。其他就可能问问 CI/CD 的理解,Jenkins 、 gitlab-runner、docker、h8s 等等。怎么对推送的视频进行去重(user id 和 video id)数据量很大了怎么办(布隆过滤器);怎么保证扩容的并发性能且保证操作原子性;rpc 与消息队列的区别(怎么理解);设计一个统计某用户聊天人数与聊天数的系统(set);设计一个抢红包系统(rpush&lpop);http 与 redis 通信方式(RESP)差异;为什么 redis 不用 http;http 数据包的格式;mysql 和 redis 的高可用与数据分表;redis 数据槽之间数据怎么迁移;类似朋友圈系统的设计;如果有大 V 网红怎么处理(使用热点数据池)。