跳至主要內容

本科读者小公司一年工作经验社招拿下阿里美团头条京东滴滴等 offer✌️

日常加油站求职面试优质面经约 6442 字大约 21 分钟

大家好,我是二哥呀!

最近有个读者面试了几家互联网公司,陆续通过了阿里、头条、美团、滴滴、京东的面试,我觉得还是挺牛逼的,于是就邀请他做了个分享。

读者的基本情况:19 届本科,目前在一家小公司,后端开发。

面试准备

1)简历,重点放在专业技能和项目经验这两块。

第一,你的简历就是你给面试官提供的考点,简历上的东西必须自己得 Hold 住,万一自己写的东西被问住了,会很尴尬,给面试官留下的印象也不好,所以就是会啥写啥。

第二,技术栈最好不要写精通,你敢写面试官就敢问,被问到了答不上来就很尴尬,写熟悉,了解就行。

第三,我建议你找人内推,这样简历通过的概率大些,如果找不到,可以试试脉脉(请打钱来)。我就是从脉脉投的简历,把状态改成寻找机会就行,会有很多人找你的。

推荐一个简历制作模版——极简简历,我一直用的:

https://www.polebrief.com/indexopen in new window

2)算法,这个该刷还是得刷,别偷懒,个人感觉刷完下面一些就够了,大家可以根据自己的情况选择。

3)复习,我主要以看书为主,推荐一些我看过的书籍和资料:

  • 并发编程:《Java并发编程的艺术》、《Java发编程实战》
  • JVM:《深入理解Java虚拟机》
  • Redis:《Redis设计与实现》、Redis开发与运维》
  • MySQL:《高性能MySQL》、MySQL技术内幕》
  • SpringBoot和SpringCloud:https://blog.didispace.com/
  • Kafka:《Apache Kafka实战》
  • 设计模式:《大话设计模式》、《设计模式之禅》
  • 分布式:《从Paxos到Zookeeper分布式一致性原理与实践》

项目经验

社招面试项目经验很重要,不光是你项目本身的技术复杂度,还有业务复杂度,你本身在项目中担任的什么角色,遇到过什么问题,瓶颈在哪,怎么解决的,这几个问题是非常重要的,很多公司到最后基本上都是围绕着你的项目在问,给面试官讲明白你的项目是必须具备的能力。

总结下社招面试中关于项目经验这块的主要问题:

  • 你项目为什么这么设计,你这样设计有什么好处,解决了什么问题,会产生什么问题,还有什么可以优化的
  • 这么设计有什么瓶颈吗,遇到了什么问题,有什么改善的方案
  • 项目遇到的难点,技术挑战,你是怎么解决的,为什么用这种方式解决,还有更好的方式么
  • 根据你简历上提到的具体功能去扣细节

面试技巧

  1. 面试得自信且谦虚,声音自信,面试表现谦虚,得给面试官一种你啥都会,很稳的感觉(实际内心慌的一笔),然后语言表达流畅,吐字清晰,回答问题也要有逻辑性,不能支支吾吾半天说不明白,面试官都听不懂就很尴尬了,这个可以自己多练习一下。
  2. 面试本质是一个自我优势展示的过程,不要让面试官问一句自己回答一句,主动抛出一些可能的点让面试官来主动问你,还有就是不会的问题就说不会,这个没关系的,千万别瞎说。
  3. 不要眼高手低,不少小伙伴看面经觉得自己啥都会,但是会与面试过程中能清晰有层次的说出来是两回事,费曼学习法可以了解一下,举个例子:

比如sychronized的原理,能不能说出点面试官眼前一亮的东西,这还是不容易的,其实面试主要是证明你比别人更有技术的深度、广度,不然都是背八股文,那面试官看不出你有什么不一样的,这个面试过的概率就大大降低了。

个人建议,面试没准备好,不要随便面试,一些大厂都会有面试评价记录,太多差评影响以后的面试,同时面完之后要多总结,复盘,整理知识点,查漏补缺。

面试总结

阿里的面试更倾向于实用性,基本是从各种场景出发,给你一个场景,让你来解决实际的问题,那么在解决问题的过程中,对于各种知识的应用就是亮点了。

头条更看重计算机基础,算法,以及对各种中间件的了解。

面试也有不少的运气成分的,毕竟每个面试官的侧重点可能不一样,大家放平心态就好。

下面是热乎乎的面经,有些面试的题目比较少,因为有些面试题因为会被多个公司重复问 ,就不重复写了。

美团

一面

  1. 线程安全的类有哪些,平时有使用么,用来解决什么问题
  2. mysql日志文件有哪些,分别介绍下作用
  3. 你们项目为什么用redis,快在哪,怎么保证高性能,高并发的
  4. redis字典结构,hash冲突怎么办,rehash,负载因子
  5. jvm了解哪些参数,用过哪些指令
  6. zookeeper的基本原理,数据模型,znode类型,应用场景有哪些
  7. 一个热榜功能怎么设计,怎么设计缓存,如何保证缓存和数据库的一致性
  8. 容器化技术了解么,主要解决什么问题,原理是什么
  9. 对于一个字符串,计算其中最长回文子串的长度
  10. 项目介绍

一面虽然通过了,但我投的部门没有名额了,就给我推荐到其他部门了,大厂的名额还是挺紧张的。下面是美团另外一个部门的面经。

一面

  1. redis集群,为什么是16384,哨兵模式,选举过程,会有脑裂问题么,raft算法,优缺点
  2. jvm类加载器,自定义类加载器,双亲委派机制,优缺点,tomcat类加载机制
  3. tomcat热部署,热加载了解么,怎么做到的
  4. cms收集器过程,g1收集器原理,怎么实现可预测停顿的,region的大小,结构
  5. 内存溢出,内存泄漏遇到过么,什么场景产生的,怎么解决的
  6. 锁升级过程,轻量锁可以变成偏向锁么,偏向锁可以变成无锁么,自旋锁,对象头结构,锁状态变化过程
  7. kafka重平衡,重启服务怎么保证kafka不发生重平衡,有什么方案
  8. 怎么理解分布式和微服务,为什么要拆分服务,会产生什么问题,怎么解决这些问题
  9. 你们用的什么消息中间件,kafka,为什么用kafka,高吞吐量,怎么保证高吞吐量的,设计模型,零拷贝
  10. 给定一个长度为N的整形数组arr,其中有N个互不相等的自然数1-N,请实现arr的排序,但是不要把下标0∼N−1位置上的数通过直接赋值的方式替换成1∼N
  11. 判断一个树是否是平衡二叉树

二面

  1. Innodb的结构了解么,磁盘页和缓存区是怎么配合,以及查找的,缓冲区和磁盘数据不一致怎么办,mysql突然宕机了会出现数据丢失么
  2. redis字符串实现,sds和c区别,空间预分配
  3. redis有序集合怎么实现的,跳表是什么,往跳表添加一个元素的过程,添加和获取元素,获取分数的时间复杂度,为什么不用红黑树,红黑树有什么特点,左旋右旋操作
  4. io模型了解么,多路复用,selete,poll,epoll,epoll的结构,怎么注册事件,et和lt模式
  5. 怎么理解高可用,如何保证高可用,有什么弊端,熔断机制,怎么实现
  6. 对于高并发怎么看,怎么算高并发,你们项目有么,如果有会产生什么问题,怎么解决
  7. 项目介绍
  8. 给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少,这个路径的开始节点和结束节点可以是二叉树中的任意节点

三面

  • 项目介绍
  • 算法:求一个float数的立方根,牛顿迭代法
  • 什么时候能入职,你对岗位的期望是什么
  • 你还在面其他公司么,目前是一个什么流程

阿里

一面

  1. synchronized原理,怎么保证可重入性,可见性,抛异常怎么办,和lock锁的区别,2个线程同时访问synchronized的静态方法,2个线程同时访问一个synchronized静态方法和非静态方法,分别怎么进行
  2. volatile作用,原理,怎么保证可见性的,内存屏障
  3. 你了解那些锁,乐观锁和悲观锁,为什么读要加锁,乐观锁为什么适合读场景,写场景不行么,会有什么问题,cas原理
  4. 什么情况下产生死锁,怎么排查,怎么解决
  5. 一致性hash原理,解决什么问题,数据倾斜,为什么是2的32次方,20次方可以么
  6. redis缓存穿透,布隆过滤器,怎么使用,有什么问题,怎么解决这个问题
  7. redis分布式锁,过期时间怎么定的,如果一个业务执行时间比较长,锁过期了怎么办,怎么保证释放锁的一个原子性,你们redis是集群的么,讲讲redlock算法
  8. mysql事务,acid,实现原理,脏读,脏写,隔离级别,实现原理,mvcc,幻读,间隙锁原理,什么情况下会使用间隙锁,锁失效怎么办,其他锁了解么,行锁,表锁
  9. mysql索引左前缀原理,怎么优化,哪些字段适合建索引,索引有什么优缺点
  10. 线上遇到过慢查询么,怎么定位,优化的,explain,using filesort表示什么意思,产生原因,怎么解决
  11. 怎么理解幂等性,有遇到过实际场景么,怎么解决的,为什么用redis,redis过期了或者数据没了怎么办

二面

  1. hashmap原理,put和get,为什么是8转红黑树,红黑树节点添加过程,什么时候扩容,为什么是0.75,扩容步骤,为什么分高低位,1.7到1.8有什么优化,hash算法做了哪些优化,头插法有什么问题,为什么线程不安全
  2. arraylist原理,为什么数组加transient,add和get时间复杂度,扩容原理,和linkedlist区别,原理,分别在什么场景下使用,为什么
  3. 了解哪些并发工具类
  4. reentrantlock的实现原理,加锁和释放锁的一个过程,aqs,公平和非公平,可重入,可中断怎么实现的
  5. concurrenthashmap原理,put,get,size,扩容,怎么保证线程安全的,1.7和1.8的区别,为什么用synchronized,分段锁有什么问题,hash算法做了哪些优化
  6. threadlocal用过么,什么场景下使用的,原理,hash冲突怎么办,扩容实现,会有线程安全问题么,内存泄漏产生原因,怎么解决
  7. 垃圾收集算法,各有什么优缺点,gc roots有哪些,什么情况下会发生full gc
  8. 了解哪些设计模式,工厂,策略,装饰者,桥接模式讲讲,单例模式会有什么问题
  9. 对spring aop的理解,解决什么问题,实现原理,jdk动态代理,cglib区别,优缺点,怎么实现方法的调用的
  10. mysql中有一个索引(a,b,c),有一条sql,where a = 1 and b > 1 and c =1;可以用到索引么,为什么没用到,B+树的结构,为什么不用红黑树,B树,一千万的数据大概多少次io
  11. mysql聚簇索引,覆盖索引,底层结构,主键索引,没有主键怎么办,会自己生成主键为什么还要自定义主键,自动生成的主键有什么问题
  12. redis线程模型,单线程有什么优缺点,为什么单线程能保证高性能,什么情况下会出现阻塞,怎么解决
  13. kafka是怎么保证高可用性的,讲讲它的设计架构,为什么读写都在主分区,这样有什么优缺点
  • 了解DDD么,不是很了解
  • 你平时是怎么学习的
  • 项目介绍

三面

  1. 线程有哪些状态,等待状态怎么产生,死锁状态的变化过程,中止状态,interrupt()方法
  2. 你怎么理解线程安全,哪些场景会产生线程安全问题,有什么解决办法
  3. mysql多事务执行会产生哪些问题,怎么解决这些问题
  4. 分库分表做过么,怎么做到不停机扩容,双写数据丢失怎么办,跨库事务怎么解决
  5. 你们用的redis集群么,扩容的过程,各个节点间怎么通信的
  6. 对象一定分配在堆上么,JIT,分层编译,逃逸分析
  7. es的写入,查询过程,底层实现,为什么这么设计
  8. es集群,脑裂问题,怎么产生的,如何解决
  9. while(true)里面一直new thread().start()会有什么问题
  10. socket了解么,tcp和udp的实现区别,不了解,用的不多
  11. 设计一个秒杀系统能承受千万级并发,如果redis也扛不住了怎么办
  12. 项目介绍

四面

  1. 讲讲你最熟悉的技术,jvm,mysql,redis,具体哪方面
  2. new Object[100]对象大小,它的一个对象引用大小,对象头结构
  3. mysql主从复制,主从延时怎么解决
  4. 怎么保证redis和mysql的一致性,redis网络原因执行超时了会执行成功么,那不成功怎么保证数据一致性
  5. redis持久化过程,aof持久化会出现阻塞么,一般什么情况下使用rdb,aof
  6. 线上有遇到大流量的情况么,产生了什么问题,为什么数据库2000qps就撑不住了,有想过原因么,你们当时怎么处理的
  7. 限流怎么做,如果让你设计一个限流系统,怎么实现
  8. dubbo和spring cloud区别,具体区别,分别什么场景使用
  9. 给了几个场景解决分布式事务问题
  10. 项目介绍
  11. 你觉得你们的业务对公司有什么实际价值,体现在哪,有什么数据指标么

五面,hr面完后又来了一面,说是交叉面

  1. 怎么理解用户态,内核态,为什么要分级别,有几种转换的方式,怎么转换的,转换失败怎么办
  2. 怎么理解异常,它的作用是什么,你们工作中是怎么使用的
  3. 你们用redis么,用来做什么,什么场景使用的,遇到过什么问题,怎么解决的
  4. jvm元空间内存结构,永久代有什么问题
  5. 你平时开发中怎么解决问题,假如现在线上有一个告警,你的解决思路,过程
  6. 你们为什么要用mq,遇到过什么问题么,怎么就解决的
  • 你觉得和友商相比,你们的优势在哪
  • 聊天:炒股么,为什么买B站,天天用,看好他

抖音

不怎么问项目,或许是我项目太low了,比较喜欢问计算机基础和中间件知识。

一面

  1. http请求头,expire,cache-control字段,状态码,301,302,401,403
  2. https原理,数字签名,数字证书,非对称加密算法过程,有什么问题
  3. tcp连接client和server有哪些状态,time_wait状态
  4. 虚拟内存,虚拟地址和物理地址怎么转换,内存分段,内存分页,优缺点
  5. linux最多可以建立多少个tcp连接,client端,server端,超过了怎么办
  6. eureka原理,强一致性么,为什么,怎么保证强一致性,多级缓存怎么保证一致性,eureka集群,宕机了服务还能调用么
  7. hystrix原理,半开状态知道么,具体的一个转换过程,它的隔离是怎么实现的
  8. zookeeper一致性保证,zab协议原理,半数原则如果查询到另外一半呢,那zookeeper属于哪种一致性,强一致性么,还是最终一致性
  9. zookeeper选举机制,选举过程有什么问题
  10. 最长不重复的连续子串
  11. 头条为什么用go,对java和go怎么看,愿意转go么

二面

  1. 函数a调用函数b的过程,是怎么传参的
  2. java里面的函数调用有哪些,io流里面有函数调用么
  3. fork函数,父子进程的区别,孤儿进程,僵尸进程会有什么问题,进程有哪些状态,进程间怎么同步,通信,消息队列,管道怎么实现的,进程调度算法,各有什么优缺点
  4. dos攻击,ddos攻击,drdos攻击,怎么解决,syn flood
  5. 自旋锁,线程上下文切换的开销具体是什么,中断,有哪些中断,用户态和内核态切换过程
  6. 一张大表怎么更改表的数据结构,字段,用alter会有什么问题,怎么解决呢,有什么好的方案,双写的话会有什么问题,还有其他方案么
  7. redis管道用过么,用来做什么,它的原理是,保证原子性么,和事务的区别,redis事务保证原子性么
  8. redis强一致性么,怎么保证强一致性,有什么方案
  9. kafka怎么保证消息不丢失的
  10. 找出所有相加之和为 n 的 k 个数的组合,组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字,输入: k = 3, x = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]

三面,感觉面试官很忙,就问了几个电商场景的技术解决方案

算法:一个环上有10个点,编号为0-9,从0点出发,每步可以顺时针到下一个点,也可以逆时针到上一个点,求:经过n步又回到0点有多少种不同的走法

举例:

如果n=1,则从0出发只能到1或者9,不可能回到0,共0种走法 如果n=2,则从0出发有4条路径:0->1->2, 0->1->0, 0->9->8, 0->9->0,其中有两条回到了0点,故一共有2种走法

滴滴

一面

  1. 排序算法了解哪些,快排,快排复杂度,优化,堆排序,建堆过程
  2. 反射了解么,原理是什么
  3. treemap和linkdedhashmap区别,实现原理
  4. jvm类加载的过程讲讲,符号引用是什么,哪些情况会发生初始化
  5. spring的循环依赖,怎么解决的,为什么需要加个三级缓存,二级不行么
  6. springboot有什么特点,相比与spring,了解springboot的自动装配的一个原理么
  7. kafka支持事务么,你们项目中有使用么,它的原理是什么
  8. 怎么统计一亿用户的日活,hyperloglog有什么缺点,bitmap不行么
  9. 求一个环形链表的环的长度

二面

  1. redis的几种数据类型,你们用过哪些,zset有用来做什么
  2. 垃圾收集器,cms垃圾收集过程,为什么停顿时间短,有什么缺点,concurrent mode failure怎么办,内存碎片怎么解决,为什么不用标记整理法
  3. 线程池原理,核心参数,线程数设置,参数动态调整后变化过程,Tomcat线程池原理,常用的线程池,你们一般使用哪种,为什么,会有什么问题,线程抛异常怎么办,阻塞队列原理
  4. 做过分库分表么,为什么要分库分表,会有什么问题,多少数据适合分库分表,跨库,聚合操作怎么做
  5. 项目介绍
  6. 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
  7. 你对自己有什么规划,想学习什么技术,最近在看什么书

三面

  1. nio讲讲,实现原理,优缺点 2.了解netty么,讲讲netty的设计模型,架构,使用场景
  2. zookeeper读写数据过程
  3. 项目介绍

京东

一面

  1. tcp和udp的区别,tcp怎么保证可靠连接的,出现网络拥塞怎么解决
  2. tcp和udp的报文结构了解么
  3. 给了一个业务场景写sql语句
  4. 你们建表会定义自增id么,为什么,自增id用完了怎么办
  5. 一般你们怎么建mysql索引,基于什么原则,遇到过索引失效的情况么,怎么优化的
  6. jvm内存结构,堆结构,栈结构,a+b操作数栈过程,方法返回地址什么时候回收,程序计数器什么时候为空
  7. redis实现分布式锁,还有其他方式么,zookeeper怎么实现,各有什么有缺点,你们为什么用redis实现
  8. 返回一个树的左视图

二面

  1. spring你比较了解哪方面,讲讲,生命周期,bean创建过程
  2. 使用过事务么,遇到过事务失效的情况么,原因是什么
  3. springboot是怎么加载类的,通过什么方式
  4. 什么对象会进入老年代,eden和survivor比例可以调整么,参数是什么,调整后会有什么问题
  5. 微信朋友圈设计,点赞,评论功能实现,拉黑呢,redis数据没了怎么办
  6. 项目介绍
  7. 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
  8. 请你将两个数相加,并以相同形式返回一个表示和的链表

三面,感觉面试官对es很熟悉,一直问es问题

  1. es倒排索引,原理,lucene,分词,分片,副本
  2. es写数据原理,数据实时么,为什么不实时,会丢数据么,segment,cache,buffer,translog关系
  3. es深度分页,优化
  4. 项目介绍
  5. 验证二叉搜索树

分享的最后,二哥简单说两句哈。

如果想社招进大厂,就必须得做到以下四点:

1)夯实基础,基础不牢地动山摇,这一年的准备,基础知识通过查漏补缺提升了很多。但也发现了诸多不足,未来还需继续积累。

2)坚持学习,开发这行内卷太严重了,年轻的时候一定要养成学习的习惯。如果在小公司做的是没挑战的事情,还忙得没时间学习,建议趁早换一份能带来成长的工作。

3)确定目标,做事情一定要定一个目标,只要你信念够强,它就会一直指引着你前进。不然经历过一天疲惫的工作后,下班再继续学习这件事是坚持不下来的。

4)制定计划,两个月啃下一个主流技术栈,1 年下来差不多也能啃完 6 块硬骨头,这将是你未来面试的兵器库,十八般武艺不说样样精通,随便挑几个跟面试官捞一个小时应该不在话下!

我是二哥呀,希望大家都能拿到心仪的 offer!

转载链接:https://mp.weixin.qq.com/s/h2tV6v5Rh6jHdO9x0p63-gopen in new window,出处:月伴飞鱼,整理:沉默王二


GitHub 上标星 10000+ 的开源知识库《二哥的 Java 进阶之路open in new window》第一版 PDF 终于来了!包括Java基础语法、数组&字符串、OOP、集合框架、Java IO、异常处理、Java 新特性、网络编程、NIO、并发编程、JVM等等,共计 32 万余字,500+张手绘图,可以说是通俗易懂、风趣幽默……详情戳:太赞了,GitHub 上标星 10000+ 的 Java 教程open in new window

微信搜 沉默王二 或扫描下方二维码关注二哥的原创公众号沉默王二,回复 222 即可免费领取。