【面经】百度+字节+滴滴+虾皮
今天申请了离职,周四正式离职。突然不想学习了,也不想搬砖了,那就分享下最近面的几家公司的面经吧。
本人非科班,两段校企合作项目,两段实习经历。所以面试基本上都是项目为主,然后再问问基础知识。大部分问题都是根据项目扩展出来的,不具备参考性。而且很多都是现场或者连续面,所以只记录了还记得的问题,仅供大家参考。
目前滴滴和虾皮的 sp 专场已挂,百度口头 offer,字节等面试结果。发面试经验求字节 oc。
一、滴滴 【sp专场】
一面:
1、网络协议:A往B发一个消息:从五层网络架构分析下这个过程;
2、TCP 能有多少个连接,TCP 三次握手;
3、vachar 字段非常大,数据库怎么进行优化存储
4、数据库的架构
5、数据库事务的隔离级别
6、项目:多线程并发查询、分布式事务怎么实现的、自己做的事情、难点
二面:
1、自我介绍 + 项目
2、类加载器有哪些?
3、怎么实现自定义类加载器?需要注意什么事项?
4、Java 内存数据区
5、public static final 分配在哪
6、垃圾回收策略
7、CSM 和 G1
8、UDP 和 TCP 的区别
9、HTTP 的过程:输入一个地址访问后的过程
10、HTTPS 的过程、服务端伪造怎么处理,怎么知道是不是真正的服务端?CA证书行不行?
11、锁:悲观锁和乐观锁:有什么区别
12、设计模式:宽泛的说了下知道哪些
13、实现多线程的几种方式
14、怎么实现固定大小数目的线程池?
15、线程池的7个参数、饱和策略
16、HashMap、HashTable、ConcurrentHashMap 的区别
17、怎么实现动态***?
18、Java 中序列化是什么?描述下一台机器将一个对象插入数据库,另一台机器读这条数据,这个过程中用到的序列化和反序列化的API
19、Java 中的 IO 流:简单介绍了字节流和字符流
20、父线程怎么收集子线程的信息
21、ThreadLocal
写代码:
Java最快的方式读写文件:快速的读取一个文件中的内容,再输出到另外一个文件
扩展:
设计一个高并发、大数据量的系统,会从哪几个方面入手
二、虾皮 【sp 专场】
1、算法题:说思路 --> 怎么找到一个数组中的最小值?
2、手写算法题:两个为 String 类型的数组相加?
3、HTTP 简单说下:说了方法、状态码
4、HTTPS 加密的过程,对称加密和非对称加密
5、TCP 有什么特点
6、操作系统内存管理
7、进程和线程的区别 各有什么优点?
8、Java 中的 ConcurrentHashMap 的实现?
9、加锁会有什么问题?--> 死锁 怎么解决死锁? --> 顺序性
10、volatile 的实现,有什么作用?内存屏障怎么实现的?读内存屏障和写内存屏障有什么区别?
11、数据库的索引有什么用?怎么实现的?
12、数据库的事务,分别问了脏读、幻读、不可重读对应的场景
二面:
1、自我介绍
2、项目:做了什么
3、volatile 怎么实现内存可见?为什么没有volatile就不可见,操作系统层面是怎么实现的?
4、HTTPS和HTTP的区别、HTTPS的加密过程,加密算法
5、逻辑题:100个苹果分到7个篮子里,随便输入一个数(1-100)都可以是若干个篮子中苹果的数量和【贪心算法】
可能是逻辑题说的不好,面试官开始闲扯:
6、老师和同学对你的评价?优缺点?
7、对虾皮的认识
8、对未来公司的定位
三、百度【现场面】
一面:
1、自我介绍
2、怼项目:问项目细节、项目扩展:redis 、kafka
3、线程与进程
4、HTTPS 的流程、加密算法
5、主线程怎么收集子线程执行的结果
6、手写代码:二叉树的序列化和反序列化
二面:
1、自我介绍
2、项目介绍、可靠消息实习分布式事务
3、垃圾回收:运行时数据区、垃圾回收算法、垃圾回收策略
4、手写代码:二分查找、KMP
5、线程池参数、线程数的设置
6、HashMap的扩容过程
7、ConcurrentHashMap 的实现原理
三面:
1、自我介绍
2、各阶段项目描述+项目扩展问题
3、最有成就感的一个项目,为什么?
4、浏览器实现 url 提示的数据结构
5、Trie 树和二叉树的区别
6、TCP 和 UDP 的区别
7、TCP 怎么保证可靠传输
8、后面进入HR模式,各种优缺点、未来选择问题
四、字节面【牛客视频】
一面:
1、进程与线程的区别?进程更耗费资源,具体指的是哪些资源?
2、有哪些情况下可能发生死锁?
3、线程间通信方式?进程间通信方式?
4、手写代码:连续子数组最大和问题(边界问题:大数,结果使用 double)
5、说一下对 HTTP 协议的理解
6、怼项目
二面:
1、UDP 和 TCP 的区别
2、数组建堆的过程
3、手写代码:二叉树的层序遍历,每一行对应一层(记录当前层和下一层的节点数量)
4、MQ 和 Redis:Kafak RabbitMQ 宽泛的自己讲一讲,在什么场景下会使用到
5、垃圾回收:自己讲 、类加载
6、怼项目
7、自己怎么实现一个 HashMap
8、三次握手、四次挥手(为什么需要四次:双工)
三面:
1、重载和重写的区别
2、数组和链表的区别
3、HTTP 的状态码,304具体是什么错误( https://blog.csdn.net/huwei2003/article/details/70139062)
4、手写代码:单例模式(双重校验锁+静态内部类)
5、项目:分布式事务,可靠消息
6、Linux 的命令 lsof( 列出当前系统打开文件的工具)、问了一堆不会的指令
6、目前 offer 情况
7、自己的优缺点