京东、腾讯、美团、阿里、携程、字节跳动面经汇总
面试的过程十分坎坷和艰难,从去年1月份学校毕业开题答辩后,决定准备2021春招实习,假期没回家一直在补知识,从3月中旬开始投递简历,经历了n多场笔试面试,终于在4月末把我搞崩溃了,感觉答得都还可以,但是进二面就挂,心态有些失衡,于是决定回老家玩一圈。
就在回老家的前一天收到京东发来的面试邀请,当时的心情十分复杂,被BAT等重重打击,我有点丧失信心,把面试推到了五一假期之后,抱着随缘的心态,出去玩了一周之后,终于上岸了。
非常感谢京东给我这个机会,面了很多大厂,感觉招的不是实习生了,也可能是现在卷的不行了,要求掌握的技能跟正常秋招正式员工的水平差不多(我只是想实个习-_-)。
总结一下各个厂的面试体验吧。
京东:
- 整体的面试体验就挺好的,一面问了两个项目和基础知识,有些知识点和技术没答上来的,当时以为也是凉凉,但还是给机会了(这才像是招实习生的公司啊!)
- 二面也是项目的加深,和基础的加深。
- 流程太快了,从面试到offer,只用了5天,还有2天是休息日。
- 简历筛的有点慢,可能是我本身的学校并不是很好,等了一个半月吧,才有面试,给我机会我就很满足了!
腾讯:
- 第一次面试邀请是腾讯发来的,但是这个操作就非常迷了,我投的java岗,结果c++提前把我捞了,然而他没有在校招系统里走流程(直接打电话面的),以至于我把java岗发的面试拒了(系统点换了个时间,但是流程直接终止),因为我不知道他是c++的岗,这是第一次吃亏吧。
- 然后就开启了反复捞,反复挂的状态,腾讯面的最多,加起来得四五次。腾讯面试内部应该是有记录的,因为后面不同部门的面试都已经不问基础知识了,直接肝项目。
美团:
- 美团面了一次java后台,一面挂,可能是当时有些知识掌握的还是不好,面试官在过程中会给我解答我答不上来的问题
- 被测开捞的,两轮技术面感觉难度确实比java后台简单,侧重项目,但是为啥挂我也想不明白(可能还是太菜了)。
阿里:
- 阿里都是电话面,问的问题中规中矩,可能是我答的不全面或者有些答的模糊了,都是挂掉了,进二面的一次让我生生白等了四五个小时。。
- 要求还是挺高的,毕竟厂大。
携程:
- 携程非常神奇,在携程内推群里,十个人面试可能会有一半人遇到面试官迟到的情况,都在群里找HR。
- 整体问题感觉不难,回答的也还行啊,挂的也挺彻底的,成功成为携程的人才库一员。
百度:
- 百度也面了一次,但是面经没写,忘了录音,也有点久远了
- 面试体验还算不错的,有些问题答不上面试官给我讲,一面后到现在就没消息了(我觉得我还有戏?别做梦了。。)。
字节跳动:
- 说什么好呢,投日常实习->秒挂(流程终止),投暑期有反应,过了不知道多久,来了面试
- 这次面试是体验最差的一次,进房间就跟面试官反应,面试官说话听不清,结果也没调好,全程靠我猜问题+面试官重复问题。
- 挂是肯定会挂的,字节是一开始最早投的简历,自我感觉就进不去(竞争太大了,三餐免费呢,日薪400-500)
零零散散整理的面经,有些有我自己整理的答案(不准确,不全面,不可信,曾经被牛客一大佬怼了,大家看看问题就好),基本是按时间线整理的,有些有二面的放在一起了。
感谢牛客,提供了这么宝贵的地方供我们学习!上岸还愿加分享,愿大家都能找到心意的工作!
1、3.11腾讯后台一面凉经(C++岗)
自我介绍
字节序
STL容器
vector、list区别
vector内存超了怎么办,申请多大内存
内存分配函数malloc
宏定义
TCP三次挥手四次握手过程,及状态
超过2MSL怎么办,这时候客户端、服务端处于什么状态
- 查的答案:在TIME_WAIT状态下,客户端发出ACK以后需要等待2个MSL的时间。假如ACK在传输中丢失,服务端会重新发送FIN,客户端收到以后会重新发ACK。假如在2MSL时间中客户端都没有收到服务端重发的FIN,那么认为服务端已经收到了客户端发送的ACK。此时客户端可以安全断开连接。
补充:
为什么客户端在TIME-WAIT状态必须等待2MSL的时间?
1)为了保证客户端发送的最后一个ACK报文段能够达到服务器。 这个ACK报文段可能丢失,因而使处在LAST-ACK状态的服务器收不到确认。服务器会超时重传FIN+ACK报文段,客户端就能在2MSL时间内收到这个重传的FIN+ACK报文段,接着客户端重传一次确认,重启计时器。最好,客户端和服务器都正常进入到CLOSED状态。如果客户端在TIME-WAIT状态不等待一段时间,而是再发送完ACK报文后立即释放连接,那么就无法收到服务器重传的FIN+ACK报文段,因而也不会再发送一次确认报文。这样,服务器就无法按照正常步骤进入CLOSED状态 。
2)防止已失效的连接请求报文段出现在本连接中。客户端在发送完最后一个ACK确认报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。IO多路复用,epoll和……
同步、异步;阻塞、非阻塞;区别
实现memcpy
两个有序数组,找中位数
2、3.15阿里飞猪Java后台-电话面(40min)已凉
自我介绍
- 本硕就读院校,参加过的竞赛、项目
C语言和Java语言的核心区别,有什么特点?
- C面向过程,Java面向对象
- C需要自己管理内存,Java自动实现(挖了个坑)
- C不能跨平台,Java可以跨平台
Java资源(内存)管理是怎么管理的?
Java的内存管理就是对象的分配和释放问题。(两部分)
分配 :内存的分配是由程序完成的,程序员需要通过关键字new 为每个对象申请内存空间 (基本类型除外),所有的对象都在堆 (Heap)中分配空间。
释放 :对象的释放是由垃圾回收机制决定和执行的,这样做确实简化了程序员的工作。但同时,它也加重了JVM的工作。因为,GC为了能够正确释放对象,GC必须监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等,GC都需要进行监控。
Java跨平台的核心是什么?
- Java虚拟机
数据结构中的常见排序算法
- 冒泡、快排、直接插入排序、归并排序、堆排序、选择排序(时间复杂度、稳定性)
假如机器内存500M,比较大的文件超过500M,文件中放的整数,对整数找出N个最小的,怎么做?
- 用堆排序,大顶堆和小顶堆,能找到前N个
- 追问:内存有限的话怎么办?(没答上来...)
- 将文件分割,用归并排序
Java里的接口和抽象类的区别?
- 抽象类中可以有抽象方法,也可以有非抽象方法共存
- 接口,jdk1.8之前只能有抽象方法,jdk1.8之后可以存在一个默认default方法
- 抽象类只能单继承,接口可以实现多个父接口
- 抽象类可以存在普通成员变量,接口只能存在static final的变量,必须初始化
final关键字定义一个变量或对象,不可变是什么不可变?
- 问懵了,没答上,答了个地址不可变
C中有指针,指向地址,java定义对象的这个存储结构是不是这样?
- 答了JVM中的方法区、堆、栈
补充
Java内存划分为5个部分:
1、栈:存的都是方法中的局部变量,方法的运行一定要在栈当中。
局部变量:方法的参数,或者是方法内部的变量
作用域:一旦超出作用域,立刻从栈内存消失
2、堆:凡是new出来的东西,都在堆中
堆内存里面的东西都有一个地址值:16进制
3、方法区:存储.class相关信息,包含方法的信息
4、本地方法栈:与操作系统相关
5、寄存器:与CPU相关
Java中的集合,哪些线程安全,哪些不安全?
- 说了Map、Collection(List、Set)
- HashMap、Hashtable、HashSet等
- HashMap不安全、Hashtable安全、ConcurrentHashMap安全、ArrayList不安全、Vector安全(弃用)
线程安全是底层什么在起作用?
- 回答了同步
- 追问:同步是指用锁还是别的什么?
- 回答了加锁可以实现,在就没问了
HashMap和ConcurrentHashMap底层有哪些不一样的?
- HashMap:数组+链表(jdk1.7)+红黑树(jdk1.8)
- ConcurrentHashMap:Segement+HashEntry(jdk1.7),数组+链表+红黑树(jdk1.8)
想追问红黑树、B+、B、平衡二叉树之类的
- 抽了,说了个没有太深入了解,以为会问一些东西,结果直接过了
Java多线程里创建线程池,提供哪些接口?
- 说了个ThreadPoolExecutor........
补充
- newCachedThreadPool 创建一个可缓存的线程池,如果线程池长度超过处理需求,可灵活回收空闲线程,若无可回收,则新建线程
- newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待
- newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行
- newSingleThreadExecutor 创建一个单线程化的线程池,它只会唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO,优先级)执行
使用线程池的时候,最关心的是什么,线程池会导致内存溢出,怎么防止?
- 创建一个无限队列,会出现内存溢出么,怎么解决?
- 设置核心参数,设置线程数
- 代码上做清除(答了些啥...)
- 最大线程数100,在重复的加入任务,造成阻塞,一直加会导致内存溢出么,有什么方法防止一直加?
- 答:排队策略,超过限制,被拒绝。
- 超过线程池大小直接屏蔽么?
- ........
- 创建一个无限队列,会出现内存溢出么,怎么解决?
项目问题,哪个项目遇到技术挑战的,怎么解决的?
- 最后唠了15多分钟
3、3.18美团到店事业部面试java后台(50min)
自我介绍
两道算法题
合并两个有序数组(好久不写了,暴力的)
二叉树的右视节点
5 / \ 1 2 / \ / 4 6 3 \ 7 输出:[5,2,3,7] 没写出来,讲了思路(类似层序遍历,右孩子先入队,设标记记录深度……),面试官说思路是对的,试着写写吧,但是么写粗来。 写树的类还写错了。。 写了个public class Tree{}。。
重载和重写
HashMap、TreeMap区别
- 追问:HashMap能不能根据添加的顺序进行遍历?
- 回不能,追问:能不能从底层实现原理解释一下,蒙的……说了一堆hash冲突的问题
- 追问:HashMap能不能根据添加的顺序进行遍历?
HashMap为什么用红黑树,查找效率是多少
Java异常
- 答Exception和Error
- 追问:Exception分几种
- 答:编译时、运行时
Java里的锁
答:Synchronized、Volatile、ReentrantLock
追问:ReentrantLock和Synchronized的区别
补充
两者的共同点:- 都是用来协调多线程对共享对象、变量的访问
- 都是可重入锁,同一线程可以多次获得同一个锁
- 都保证了可见性和互斥性
两者的不同点: - ReentrantLock 显示的获得、释放锁,synchronized 隐式获得释放锁
- ReentrantLock 可响应中断、可轮回,synchronized 是不可以响应中断的,为处理锁的不可用性提供了更高的灵活性
- ReentrantLock 是 API 级别的,synchronized 是 JVM 级别的
- ReentrantLock 可以实现公平锁
- ReentrantLock 通过 Condition 可以绑定多个条件
- 底层实现不一样, synchronized 是同步阻塞,使用的是悲观并发策略,lock 是同步非阻塞,采用的是乐观并发策略
- Lock 是一个接口,而 synchronized 是 Java 中的关键字,synchronized 是内置的语言实现。
- synchronized 在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;
而 Lock 在发生异常时,如果没有主动通过 unLock()去释放锁,则很可能造成死锁现象,
因此使用 Lock 时需要在 finally 块中释放锁。 - Lock 可以让等待锁的线程响应中断,而 synchronized 却不行,使用 synchronized 时,
等待的线程会一直等待下去,不能够响应中断。 - 通过 Lock 可以知道有没有成功获取锁,而 synchronized 却无法办到。
- Lock 可以提高多个线程进行读操作的效率,既就是实现读写锁等
如果希望加锁的时候,超过一段时间没有得到,会自动放弃,应该用哪种?(ReentrantLock)
ArrayList是线程安全的么?多线程操作下会发生什么?
- 多线程并发情况下出现ConcurrentModificationException并发修改异常,应该是这个!
- 答了个读写不一致...
线程安全的List有哪些?
- Vector、Collections.synchronized()、CopyOnWriteArrayList
== 和 equals() 区别
1亿个数,找到前k小的数
- 答反了啊wc!应该是大顶堆。
- 进阶:分治,得到N个最小K个数,再N*K找K个小
- 最后,堆排序的时间复杂度
TCP三次握手
TCP的端口号是解决什么问题的?
- 第一次遇这个题,有点懵,答:建立连接要发送一些包,为了知道哪里来到哪里去……保证建立连接
MySQL的隔离级别
MySQL锁分类
可重复读的情况下,能不能解决幻读?
- 回:不能。。。
- 追问了间隙锁(GAP锁),这个就能解决可重复读的幻读问题!
反问
- 哪里需要加强的
- 整体还不错,算法需要加强,Java基础多看看
- 一共有几面?
- 两轮技术面
- 哪里需要加强的
4、3.23携程国际事业部一面(Java)
- 自我介绍
- 项目介绍
- mysql存储引擎
- Innodb索引数据结构,有几类索引?
- 假设要查一个非主键索引,是怎么查的?
- mysql联合索引,假设建了(a,b,c)联合索引,查a>1,b=1,c=1会用到什么索引?
- Mybatis中mapper文件中,解决sql注入?
- Mybatis插入时得到主键id?
- useGeneratekey参数 true
- javaHashMap实现
- ConcurrentHashMap线程安全,为什么?
- 用什么方法实现并发安全?
- 单例模式为什么有synchronized还要加入volatile一起用?
- Lock内部实现原理
- 多线程线程池设置参数,有任务来了,怎么运作的?
- ……还是线程,问的太乱了
- 【1,1,2,2,3】,找唯一出现一次的。
- 未排序的数组找到第k大。
腾讯3.20,3.25分别一次应用开发一面,运营开发一面
都忘了录音,反正就是面的时间很短,反复捞,反复挂。。
5、3.26腾讯运营二面(Java)
自我介绍
工作地点有没有要求
项目介绍
SpringIOC容器启动过程
1)创建IoC配置文件的抽象资源,这个抽象资源包含了BeanDefinition的定义信息.
2)创建一个BeanFactory,比如常用的DefaultListableBeanFactory。
3)创建一个载入BeanDefinition的读取器,比如XmlBeanDefinitionReader来载入XML文件形式的BeanDefinition,通过一个回调配置给BeanFactory。
4)从定义好的资源位置读入配置信息,具体的解析过程由XmlBeanDefinitionReader来完成。完成整个载入和注册Bean定义之后,需要的IoC容器就建立起来了。这个时候就可以直接使用IoC容器了。
Mybatis注册bean的过程
Spring怎么解决循环依赖的
简单说明spring如何解决循环依赖:
我们先实例化A,实例化好后,调用addSingletonFactory放入三级缓冲池中,然后此时我们设置属性的时候会发现我们还依赖B,于是我们就先去实例化B后并为进行属性赋值,而当我们进行赋值的时发现B也依赖A,但是之前已经把A存放在singletonFactories,那么B会将其取出并装配自己,实例化以后把自己放入单例池中,然后A也就可以继续进行属性赋值了,最后A 实例好以后,将自己也放入单例池中,这样Spring就解决了循环依赖。ConcurrentHashMap底层原理
HashMap扩容
Volatile、怎么保证可见性的
6、4.6阿里本地生活物流研发一面(Java)1小时30分钟
- 自我介绍
- 项目介绍(主要负责工作)
- 面向对象的理解
- int、Integer区别(包装类、基本数据类型的区别)
- JVM相关
- 保证class重复加载问题,是JVM实现的还是谁实现的
- 有什么方法能实现同一个类加载两次
- 双亲委派机制和打破双亲委派机制的方法
- ==和equals,hashcode()
- hash用在哪些场景
- 重载重写的区别
- spring最核心的是什么(IOC、AOP)
- spring里面用到的设计模式
- 动态代理的实现
- cglib和动态代理的区别
- 其他的代理模式(静态代理)
- 哪些东西交给spring容器
- spring作用域
- spring生命周期
- DDD 领域驱动设计(不知道是啥)
- 线程和进程
- 上下文是什么
- 线程是怎么调度的
- mysql事务
- 隔离级别
- 算法题:最大子序列和【leetcode 53】https://leetcode-cn.com/problems/maximum-subarray/
7、4.9阿里本地生活物流研发二面(Java)50分钟
写在前面,本来约的4.8晚上6:30,等了15分钟面试官没进,找到hr说面试官开会,然后我就等,等等等,等到10点半,我走了,回宿舍路上快11点了,大佬来电话,约了第二天的,我真是不知道说什么好,不如直接给我说换个时间.........结果第二天还是迟到,又找hr,等了小20分钟吧,才面上,我醉了。
- 自我介绍,参与的项目,完成什么功能,在什么场景下使用,以及自己参与了什么任务
- 数据挖掘项目中异常数据怎么处理的
- 有没有碰到过join的时候,就是两张表关联的情况。。
- 数据量级
- MapReduce有涉及、了解、应用和研究么(并没有)
- java项目中收获了什么
- spring中bean的生命周期是怎么管理的
- springAop,拦截器和过滤器的区别,使用场景上的区别
- redis数据类型,数据类型的使用场景
- redis中字符串的底层是怎么实现的(数据结构)
- java中高级特性的应用,比如事务、并发
- JUC里面用过什么工具类,实现什么场景下的什么功能
- 悲观锁、乐观锁的区别,使用场景
- JUC里用了哪些锁
- 读写锁和可重入锁的区别
- 项目中遇到的困难
- 坚持比较久的事情(感觉问了这个的都凉了,是因为没啥问的了么。。)
- 最后,面完官网流程秒挂,这大佬是个大大佬,太喜欢问场景题了,我只想面个实习生.......
8、4.6腾讯测开一面(20min)
- 自我介绍
- 接口和抽象类的区别
- 什么是多态
- redis缓存雪崩、缓存击穿、缓存穿透
- 堆排序
- java内存泄漏
- 可能是我太菜了,面试官感觉我很差,前面回答的问题都说我回答的不对,仓促结束
9、4.7字节新业务后台开发(Java),体验最差!(1h)
从进面试房间,不止一次给面试官说,您那边声音听不清(他带了一个耳朵的无线耳机,啥都听不见),也不知道调没调整,全程回答问题靠我猜+反问
- 自我介绍
- java拆箱装箱
- 有几种线程池(参数)
- synchonized关键字应用场景
- 多线程下volatile会出现什么问题
- springmvc spring reactor异步响应
- springmvc的架构
- model怎么绑定视图
- mysql查询优化(慢查询排查步骤)
- mysql索引,普通索引唯一索引
- 联合索引(a,b) select * from a where b = c% 索引是否会生效
- 数据库事务和隔离级别及产生的问题(脏读幻读可重复读)
- 数据库死锁的场景
- 算法题,行列均有序的二维数组,找目标值
10、4.7美团到家事业群质量效能部测试开发一面(50min)
- 看简历是java后台,之前面过其他岗位么?
- 自我介绍
- 项目介绍(问了20min左右。。。)
- 哪里人...对工作地点的要求
- 编程语言掌握哪些
- 反问
- 算法题,二叉树前序遍历
11、4.13美团到家事业群质量效能部测试开发二面(50min)
同样是面试官开会,但是好就好在,hr提前联系我更改时间。
忘了录音,问了好多项目相关的,技术上倒没问啥太难的,全程聊的其实很开心,算法也撕出来了,最后也聊到入职时间之类的,but,面完一周没结果,美团公众号问了几次,最后给的反馈是岗位不匹配,就是凉,不知道为啥。
12、5.8京东零售java开发实习一面(1h30min)
本来约的是4.26,但是时间不方便,当时面了那么多,都挂了,真是想放弃了,没放在心上,寻思玩一圈回来再好好搞。
- 自我介绍
- 实习时间
- 微服务、分布式了解吗(不了解,在学)
- 机器学习、神经网络是课程学的么
- 介绍一下数据挖掘的项目,详细说一下
- 数据处理和特征工程做了什么
- 决策树、随机森林,GBDT、XGBoost之间的区别
- gini系数和信息熵的区别
- 随机森林和XGBoost有什么区别
- java集合框架,ConcurrentHashMap和HashMap的区别
- hash冲突的相关问题
- ThreadLocal了解么,底层实现
- 并发中的锁
- synchronized锁普通方法和静态方法之间的区别,用的时候会互斥么
- JVM了解么
- 对象从新生代转到老年代有哪些情况
- 哪些对象该回收,哪些不回收
- 哪些工具可以查看JVM情况、调优命令
- 创建线程时有哪些参数可以配置
- spring做事务控制的常见方式
- spring、xml中用到的注解
- 事务传播机制有哪些
- 动态代理和cglib的区别
- springIOC依赖注入底层实现
- Java反射机制
- 设计模式(模板、策略、代理、工厂、适配器、装饰器)
- 策略模式和模板模式的区别
- Mysql联合索引,只用后面的字段去查询,联合索引会生效么
- Mysql索引的数据结构
- B+树的叶子节点是连起来的么,会把所有的数据都存在叶子节点上么
- redis了解分布式锁么(没用过,只是简单的用过redis)
- redis部署,主从复制
- 除了简历上写的,还有哪些我没问,感觉掌握的还好的,像消息队列……(有过概念了解, 没有实战和应用经验)
- 了解过哪些算法,dp、、分治、贪心、二分、排序……
- 给了个dp,最大公共子字符串的长度(写的比较快,被问到是不是刷过题,hhhhh,以至于二面又写了两道........)
- 反问环节,问了今天的回答哪些不足回去再看看,和部门
- 面试官给的评价:有些比较可以,有些不深入,可能是因为没有实际经验,总的来说,你不是非常优秀,但也不是很差
13、5.11京东零售java开发实习二面(1h)
- 自我介绍
- 问的多的还是数据挖掘机器学习的项目
- 为什么一开始用线性回归,又为什么后面用神经网络、树模型
- 用随机森林的作用是为什么
- 准确率高你觉得是过拟合的问题么
- 自己学习机器学习学了多久
- 有看过java的开源框架么(Spring)
- 现在侧重点,再看java哪些方面
- jdk1.8的新特性
- Lambda表达式,有啥优点,设计理念有什么改变(写法的设计方面的改变)
- JUC包,CountDownLatch
- AQS体系有哪些相关的类
- 线程的代码题:A、B线程交替打印
- 撕算法:堆排序+讲过程+复杂度分析(时间、空间)
- 最后聊天,哪里人,面试过其他公司么,多久来实习,能实习多久
- 多久能适应团队的开发节奏
- 对java感兴趣一些,还是机器学习,还是都可以
- 反问:业务中用到的技术、流程最快什么时候有结果
上午面完,下午二面面试官给的电话说二面通过了,后续会HR面试
14、5.12京东零售java开发实习HR面(15-20min)
- 自我介绍
- 项目介绍
- 遇到的问题,怎么解决的
- 全程我说的多一些
- 最后HR说和面试官交流一下给结果
5.13,收到录用邮件,后续的offer审批都很快
终于等到你,还好我没放弃。
最后祝愿大家,眼里都有星辰大海,生活都有诗和远方,手里都有大把offer!
#面经##校招##阿里巴巴##腾讯##携程##美团##Java工程师#