转载声明:文章来源https://www.nowcoder.com/discuss/970793
5-20 官网投递(无内推),5-20 当天简历挂,5-30 接到电话说被另一个部门捞了,约面,当天下午又打电话来说面试官有事,推迟一周......
6-6 15:00 一面(65min)
面试官上来介绍部门,介绍面试流程,无异议,开始面试。
1.介绍项目。
这里面试官了解到我项目都是学习项目后貌似不感兴趣,就没问了。
2.计算机网络模型。
5层 & 7层,介绍各层协议及功能。
3.详细介绍下 TCP 和 UDP?用在啥地方呢?
这里介绍的比较详细,讲了差不多 10 分钟,面试官反馈也还不错。
4.场景题,类似 LOL 这种游戏用 UDP 还是 TCP 好?
处于对延迟的厌恶,我秒回答 UDP...
5.你说用 UDP,那我万一放一个技能丢包了怎么办?
考虑不周,在应用层做封装,实现可靠的 UDP 协议。
6.如何实现可靠的 UDP?
参考 TCP,对 UDP 编号,在应用层做超时重传机制,然后连接管理和拥塞控制可以不用管,重点是超时重传机制,实现性能与可靠的折中。(UU 们有啥想法呀,可以讨论下)
7.IP 协议是做什么的?链路层呢?应用层协议了解吗?http 状态码?
路由表匹配,决定下一跳地址,然后用 ARP 找到下一跳 MAC,起到路由作用,链路层主要就是封装成帧、透明传输、差错检验,说了说 MAC 协议和 ARP 协议。
8.线程与进程间的关系。
9.进程有独立的虚拟地址空间是吧,那虚拟地址空间内有哪些东西呢?
问你有哪些程序段了。
10.程之间共享哪些数据?
这里回答错了呜呜呜,我说了堆和动态链接库。
答案是共享整个进程空间的所有数据,即使是线程内的独立栈,如果有一个指向该栈的指针,另一个线程也是可以访问的,所以任何数据都是可以共享的...
11.程序与进程间的关系?
进程是程序的正在运行时,程序是进程的资源集合。
12.它们之间一一对应吗?
不太清楚,我回答应该是一个程序可以多个进程。
13.说说 Java 泛型的原理?
编译期的语法糖,编译期强制转换,运行时向上转型,谈了谈为什么这么设计,主要是兼容旧版本。
14.如下代码是否能运行,如果不能,会报什么错误?
public static void main(String[] args) throws Exception {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add("123");
Method add = list.getClass().getMethod("add");
add.invoke(list, "321");
String str = list.get(1);
System.out.println(list);
System.out.println(str);
}
15.synchronized 的原理,详细讲讲他为什么是可重入的?其他可重入锁了解吗?
从偏向锁、轻量级锁、重量级锁 分别解释重入原因。
ReentrantLock,原理 AQS。
16.如下代码哪些方法是冲突的,为什么?
比较简单,就是考你 synchronized 用法。
17.Java 的类加载机制。
18.代码题,字符串匹配,字符串允许乱序,例如 "abcd",在文本串 "ucwdbaccwjab" 中第一次匹配到的位置是下标 3,则输出 3,
太紧张了,代码题烂掉了,写了 20 分钟没写出来。
一开始以为就是字符串匹配,本来想写 kmp,然后面试官让我写暴力,然后就写了个暴力匹配,,然后面试官提示可以乱序,这时候超级紧张。
然后我以为我懂了,我以为是最小覆盖字串,呜呜呜,又理解错题目了,写完了才发现写错啦,浪费了好多时间。
这里大脑已经空白了,停止转动了,知道面试官提示已经过去 1 小时了...想哭
19.反问
面完真的想哭,我算法没那么烂的,力扣 500+,周赛 2150 分,真没那么烂的,现在想着都有点难受,结束后三分钟滑动窗口秒了......
6-6 19:00 问卷调查,收到问卷以为凉了。
6-7 19:35 约二面,收到邮件我是蒙蔽的,先是不敢相信,然后就是傻笑,傻笑了好久...可能是真缺人吧,只能感慨运气好,感谢面试官,感谢字节跳动,有时候你离成功就差了点运气......
6-9 16:00 二面(45min)
这一面貌似是 Leader 面,面试官比较老成,反问时还说会给我发 offer。
1.对一面做一个自我评价,你认为那里表现好,哪里表现不好。
这里注意不好的地方一定得说一下你会做哪些改变。
这里我还提了一句说我计算机基础不错,然后就悲催了......
2.你是怎么认为你计算机基础不错呢?
3.为什么经常总结就能反应你基础不错呢?
4.你善于思考能说明基础不错吗?
麻了,最后说了我课程成绩都满绩,总算没问了。
5.平时不会的怎么学习呢?
6.多久能入职?实习多久?大三怎么办?
7.介绍一下常见的排序算法,复杂度,稳定性?
8.链表排序用什么排序呢?
归并排序、快速排序。
9.面试官似乎不知道怎么快速排序,于是:算法题:链表快速排序。
我都说了,能不会写吗,秒了。
10.谈谈你对设计模式的理解?
这题压力好大,我说了很多面试官一直没反馈,等我继续说,说了 7-8 分钟,直到我两大眼瞪小眼,面试官才继续了问。
11.适配器模式和代理模式的区别?装饰器模式呢?
谈了谈相同之处,都是增强,可扩展性号,从 UML 类图说明了不同之处,举了举几个例子。
12.OS 中的死锁了解吗?
这里说了很多,死锁必要条件,死锁预防,死锁检测,银行家算法。
13.算法题:死锁检测
拓扑排序秒了。
14.反问
面试官说我表现不错,会把 offer 发给我,当时贼开心。
6-9 20:00 问卷调查,6-10 10:35 三面预约,白开心了,还以为直接发 offer 了,面试官说话不算话(虽然结果还是 offer 了,似乎也没赖?)。
6-13 18:00 三面(55min)
字节面试基本不会重复,考察也挺全面的,第一面考察基础,OS + 计网,第二面考察算法与数据结构,还有点 hr 面的意思,三面主要考察项目。
1.自我介绍
2.介绍一下数据库项目,有什么难点,怎么解决的?
3.详细讲讲崩溃恢复,以及项目中检查点机制是如何加速崩溃恢复的。
看我了解的还不错,就没问数据库了。
4.介绍一下 RPC 项目,有什么难点,怎么解决的?
5.介绍一下 RPC 的过程,以及你对 RPC 的理解?
6.RPC 用了序列化协议?
kyro。
7.为什么使用 kyro,算法原理是什么,相比原生序列化,xml,json以及谷歌的 protobuf?
8.小程序前后端都是自己写的吗?后端用什么语言写的?
9.Java 中数组是对象吗?为什么?
是,同样经历类加载的5大步骤,符合对象的声明周期,面试时说错了,我说数组没有继承 Object,事实上是继承了的,晕...
10.Java 中文编码几个字节?
说 unicode 2 个,然后扯了扯 utf-8 变长编码。
11.utf-8 编码原理,怎么变长?
12.平时怎么学习的,个人优点缺点?
碰到这种非技术性问题,使劲扯,能拖一会时间是一会(狗头),我这里扯了十多分钟。
13.平时有自己学习什么框架吗?
redis,mq,spring 全家桶。
14.来讲讲 SpringBoot 吧,我没用过 SpringBoot,现在你得讲的让我理解它是干嘛用的?
好难啊,讲的好乱,反问时面试官让我别背答案,可以多思考技术产生背景,问题背后原因等。
15.算法题:树的子结构
16.算法题:爬楼梯,这里是个变种版,一次能爬 1阶、2阶和 5 阶。
简单题秒了。
之后面试官让优化空间复杂度,我代码是这样的:
public static void main(String[] args) throws Exception {
int n = 9;
int[] nums = new int[]{5, 3, 2, 1, 1};
for (int i = 5; i <= n; i++) {
int newVal = nums[0] + nums[1] + nums[4];
for (int j = 4; j > 0; j--) {
nums[j] = nums[j - 1];
}
nums[0] = newVal;
}
System.out.println(nums[0]);
}
面试官说不行,这样不是引入了额外的时间复杂度吗?如果把跳 5 阶改成跳 1000 阶你不是额外循环 1000 次?
当时没想出来要怎么做,因为在枚举完 i 后 dp[i - 5] 肯定要变成 dp[i - 4],如果不赋值的话要怎么做的?因为时间关系面试官就没让我想了,回去之后想了想是不是可以用双端循环队列做,这样就可以达到 O(1)的移动了,不知道大家有啥想法?
17.反问
6-14 10:00 问卷调查
6-15 14:00 Offer,无 HR 面(感觉面试官把 HR 该问的都问过了...)
总的而言我不觉得我自己实力有多强,面试官知道我是大二的都问的挺基础的,运气占很大原因把,写写面经反馈一下社区,积攒一下运气,希望大家都能拿到自己想要的 offer,共勉!
收藏从未停止,学习从未开始
这几个问题答好了面试基本稳了吧