前言
作为一个Java程序员,平时总是陷在业务开发里,每天噼里啪啦忙敲着代码,上到系统开发,下到Bug修改,感觉自己无所不能。然而偶尔的一次聚会,听说和自己一起出道的同学早已经年薪60万,而自己却囊中羞涩。于是也想看看新机会,找个新平台,好好发展。
于是恶补了下Redis、MySQL、K8S、Nginx、Kafka、Docker还有算法,当时恶补算法完全是因为在阿里的一位朋友的说法:
现在大厂面试时都在问算法,尤其是应届生问的更多,未来找工作算法肯定是刚需,有时间你一定要好好学下算法,我这有左程云左神的《程序员代码面试指南》你回头看看吧
谁知后来刚好收到字节跳动的面试邀请,这就有点戏剧性了(左神的算法书没白啃),抱着试试看的心态参加了面试,拿到了28*16薪的offer,虽然最后因为某些原因,没去吧~~
下面分享下面试的大致过程
一面:
hashmap,怎么扩容,怎么处理数据冲突?怎么高效率的实现数据迁移?
Linux的共享内存如何实现,大概说了一下。
socket网络编程,说一下TCP的三次握手和四次挥手
同步IO和异步IO的区别?
JavaGC机制?GCRoots有哪些?
红黑树讲一下,五个特性,插入删除操作,时间复杂度?
快排的时间复杂度,最坏情况呢,最好情况呢,堆排序的时间复杂度呢,建堆的复杂度是多少
二面:
自我介绍,主要讲讲做了什么和擅长什么
设计模式了解哪些?
AtomicInteger怎么实现原子修改的?
ConcurrentHashMap在Java7和Java8中的区别?为什么Java8并发效率更好?什么情况下用HashMap,什么情况用ConcurrentHashMap?
redis数据结构?
redis数据淘汰机制?
三面(约五十分钟):
mysql实现事务的原理(MVCC)
mysql数据主从同步是如何实现的?
mysql索引的实现,innodb的索引,b+树索引是怎么实现的,为什么用b+树做索引节点,一个节点存了多少数据,怎么规定大小,与磁盘页对应。
如果redis有1亿个key,使用keys命令是否会影响线上服务?
redis的持久化方式,aod和rdb,具体怎么实现,追加日志和备份文件,底层实现原理的话知道么?
遇到最大困难是什么?怎么克服?
未来的规划是什么?
你想问我什么?
最终给我的offer薪资也还是高了,不过咱不是只看薪资的人。谈薪资的时候要注意,如果你们有什么补贴比如说饭补(或者包吃啥的),直接说道你的薪资里面,不要算补贴,这样最后你可以在这个基础上加工资。比如你薪资20K然后有1K饭补,那你直接和面试官说你的薪资16K,不要说15K有1K的饭补,这样别人在20K的基础上给你加薪,而不是在16K。
针对面试总结的面试提纲(思维导图+面试宝典+笔记)
面试复盘
以下是我在面试前恶补的一些Redis、MySQL、K8S、Nginx、Kafka、Docker的实战书籍,觉得颇有作用,如果大家喜欢的话可以转发