面试复盘|字节 客户端 等HR面
一面:
TCP 与 UDP 的区别、三次握手、四次挥手?
2MSL 是什么?为什么要有 2MSL ?
HTTP 怎么发起请求?(我觉得是想问输入网址后发生的一系列事情)
HTTPS 怎么解决 HTTP 存在的问题?
对称加密和非对称加密有什么区别?各了解什么相关的加密算法?挑一个细讲
讲讲虚拟存储器?页的大小如果太大有什么影响?太小呢?
Java GC 怎么判定对象可回收?了解什么垃圾收集器?垃圾回收算法?
二面:
线程调度算法有哪些?
时间片如果设置得太大或者太小会有什么影响?
进程和线程的区别?进程中哪些资源是线程共享的,哪些是线程私有的?详细说说(................)
Java 如何实现线程安全的 i++?有多少种方式?
volatile 是什么?有什么应用场景?
synchronized 和 ReentrantLock 有什么区别?
ReentrantLock 具体怎么实现线程同步?AQS?
可重入锁是什么?ReentrantLock的应用场景有哪些?
synchronized 修饰静态方法和非静态方法有什么区别?
Java 的线程池除了核心线程数之外还有什么哪些重要的影响因素?(这块复习的不熟,死亡.........)
线程池的整个运行过程讲一下?(磕磕绊绊,哎)
Java 四大引用?分别的应用场景是哪些?
三面:
了解一下个人情况
是否可以提前实习
算法题1:复杂一点的两数之和
给定一个正整数数组和一个整数 target,寻找数组中两个之和可以等于 target 的数的下标,并且要求返回所有可能组合的数的下标,其中正整数数组的元素有可能重复。
楼主思考的时候,考虑到几种测试用例:
①[1,2,4,8,9,1,2],target=3
②[1,2,4,8,9,1,3],target=3
③[2,2,2,2,2,2],target=4
④[3,1,2,4,2],target=9
⑤[4,3,7,5,9],target=2
⑥[1,2,6,8,3,5],target=7
牛客的大佬们如果有什么好思路来切入这道题,恳请在评论区留下你的思路或者代码,一起学习进步!
算法题2:互换礼物
假如班里有n个同学,每个同学都要提供一份礼物,然后对所有的礼物重新分配给每一位同学,有以下要求:
①每个同学提供的礼物最后不能分配给自己 ②每个同学只拿一份礼物
③例如:
0->6
1->4
2->1
···········
n-1->8
设计一个分配算法,使得分配的方案能够符合以上要求
我的理解:是将 0~n-1 这 n 个数进行分配,输出一个这 n 个数乱序的数组,并且每个数组元素不等于它的下标,但是考虑的方法始终有些瑕疵、欠缺。如果有什么更好的解决这道题的方法或者思路,恳请能在评论区留下你的思路或者代码,一起学习进步!
继续了解一下个人情况,然后开始问一些计算机基础问题
Spring IOC、依赖注入讲一下(简历上的东西一定要会啊.....)
数据库了解什么,讲一下索引的作用,聚簇索引,B树和B+树有什么区别,索引还可以用什么数据结构来承担
了解什么设计模式,单例模式你经常怎么写
volatile 为什么可以保证重排序,哪几步重排序会出现问题,两次检验会有什么效果?
对 MVC 有什么了解?有没有了解过 MVVM、MVP 这些开发模式
反问
面试总结:整个流程下来,一二三面的难度是 基础和进阶的比例在变小,问的问题越来越注重深度与自己的思考,在三面的算法题中面试官更是希望候选人能够尽可能地思考得全面,没有说一定要个最优解法,但在这个过程中就是希望你能够想得周全,边界什么的要搞清楚。字节的面试体验感觉很好,面试官更像是一个同学在讨论面试问题。
讨论:三面的算法题我依然没有能够思考到比较全面的思路,看看牛客的大佬们有没有更加完善一些的解决思路,欢迎你在评论区留言展示你的想法或者代码!