字节提前批 tiktok 客户端 一二三面 (已oc)
一面 8/1 1h20min
上来面试官说面试分成四大块:自我介绍,项目经历,计算机基础,算法·
前面两个不说了
网络:
七层模型介绍一下 每层哪些协议 TLS如何工作
TCP建立连接的过程 在linux内核中如何实现的?
SYN队列?Accept队列?SYN攻击?如何解决?
应用程序在Accept队列中取出socket后如何管理这些fd --> IO多路复用 (redis默认LT,nginx默认ET)
那你讲一下IO多路复用(select poll epoll) 各自特点大概讲一下
epoll_create epoll_ctl epoll_wait
os:
死锁要素 如何解决 项目开发过程中有没有遇到过死锁 怎么解决
虚拟内存
JVM
Java内存模型 GCRoot 了解的 GC 和 GC算法 CMS特点 如何实现的并行垃圾回收 CMS完全可靠吗?
简历提到设计模式 项目用到的设计模式
现场出了一个类 要求使用策略模式解耦 使其满足开闭原则,题目大概是这样:就是按照入参调用对应的service
class ExampleService{ private AService aService; private BService bService; private CService cService; public void doBusiness(String serviceType){ if(serviceType == "A"){ aService.doABusiness(); }else if(serviceType == "B"){ bService.doBBusiness(); }else if(serviceType == "C"){ cService.doCBusiness(); }else{ throw new IllegalArgumentException("type error!"); } } }
然后面试官还提醒每一个策略还可以用单例模式优化
单元测试 Junit Mockito PowerMock
集成测试 回归测试
做题:
做题:
因为做过所以思路很明确,我就一步步写,知道我写过他也没让我写完,就说可以了再来一题
这个题不难,一个简单的dp题,但是还是想了一会儿,自己写了几个测试用例都ok,面试官看了说不错,然后说如果是最大长方形该如何实现
然后后面的时间就一直想怎么写,反正死活想不出来,面试官说没事,然后反问。后来复盘发现这个题是:
好吧,确实想不出
一面过程感觉自己嘴皮子飞快,基础知识都是比较常规的八股文,觉得设计模式那个比较有意思。
30min后hr打电话来说一面过了约了二面时间
二面 8/4 1h20min
前面还是自我介绍+聊简历
网络:
TCP建立连接为什么需要三次握手而不是两次或是更多次 假如不需要数据传送四次挥手能不能合并成三次
FIN_WAIT2状态会一直等待吗 TIME_WAIT 状态2MSL的意义
TCP滑动窗口 目的? 如何实现?
拥塞控制 为什么需要拥塞控制
HTTP状态码 301 302区别 304有什么用(缓存协商)
HTTP1.1 HTTP2 Stream 多路复用 什么复用什么 解决了什么问题
HTTP3 解决了什么问题 TCP接受方队头阻塞
QUIC了解吗(不 那你认为在传输层已经使用了UDP的基础上 QUIC应该实现什么(我就照着TCP实现了什么乱说了一通)
IP协议已经能够分段 为什么还需要TCP去分段
os:
linux 文件系统 inode 说一下通过文件名读文件到块设备的全过程
linux IO pagecache 零拷贝?mmap sendfile
Java基础:
泛型擦除?为什么要泛型擦除?然后给了几个带泛型的case问我编译能否通过
HashMap ConcurrentHashMap
原子类用过吗?原理volatile CAS
讲一下volatile 快速写一下线程安全懒汉单例 不加volatile会发生什么(另一个线程会拿到尚未完全初始化的对象
AQS了解吗(略知一二,源码没有深入看过)什么类使用了AQS?ReentrantLock CountDownLatch 其它我没怎么用过
ReentrantLock和synchronized
synchronized锁升级 重量级锁流程大概说一下(WaitSet EntryList)大概说了一下
MarkWord对象头说一下(有点记不清,大概还有印象
数据库:
关系型数据库几个范式1NF 2NF 3NF BCNF
Mysql (我就说我只了解InnoDB)
索引 B+树 为什么不用B树 索引失效 索引下推 索引覆盖
事务 ACID 隔离级别 RC和RR MVCC 锁(记录锁和临键锁) 当前读快照读 没深入问)
redolog和binlog区别 为什么要保证他俩一致 不一致会怎么样 怎么保证他俩一样(两阶段提交)
分布式系统:
了解分布式系统?(稍微看过一点相关的视频和博客)
知道些什么东西?讲了讲CAP
replication sharding
paxos?(不大会) raft大概描述了一下过程
到这里已经快一个小时了,二面面试官就一直不停在问,但也很热情,也不停在记东西,本以为要结束了没有算法题,结果还是逃不掉QAQ。
他开始没限制实现,我看了看不是把数组元素丢HashSet,然后从1开始遍历就解决了吗,然后他非要说这样不行有反例,然后他也没举出来反例,然后就说不能用额外空间,他就说能不能自己实现一个hash,我就有点一头雾水,然后他就开始旁敲侧击说应该让数字到它应该在的位置。然后我想了大概15min写出来了。
反问
好像做什么的都有 有安卓开发 有ios 有跨平台react native 好像还有后台开发、infra什么的(我也不太懂)
面试官说我非常不错 (开心qwq)
面完当天约了三面
三面 leader 8/10 1h
有一说一,我都不想重听一遍这面的录音,真的问的东西很怪,没问八股也没有算法题,答得也有点紧张,面的时候心里一直想要挂在这面了...
面我的是部门的leader,感觉凶凶的,介绍完自我介绍和实习,提到了实习的时候用过kafka,实现过一个请求合并器:具体功能就是在接口并发量较高的时候把请求先放到一个阻塞队列里,等队列中请求数量到一定数量或者没到数量(并发量低的情况下队列打不满也不能让用户一直等)但触发定时器超时再把这些请求参数打包一起去访问DB,目的就是减少对DB的访问。
没想到之后的所有话题全是围绕这个东西的,基本等于让我从白板重头写一个了,但是这个东西是好几个月之前写的,很多细节都已经忘了,而且基本都用的公司内部的很多模块的代码,让我从白板写确实还挺无奈的。
他问的方式比较宽泛,反馈给的不多,只是一直在记,全程也是我在推动话题的发展。
当即我就想着一定要简化这个问题,不然太复杂了。
我就把接口的需求简化了 这个接口就是取id从 n1到n2的数据 所有用户请求我这个接口都会传两个参数 n1和n2
首先他问怎么个打包法:
比如有三个请求:请求A需要[10,70]的数据 请求B需要[50,100]的数据 请求C需要[120,200]的数据
这些请求被打包后变成了一个二维数组[[10,70],[50,100],[120,200]]
然后请求A和B可以合并 变成[[10,100],[120,200]]
本质上就变成了一道算法题:
那在sql层面就大概会变成
select * from data
where id > 10 and id < 100
or id > 120 and id < 200
把所有需要的数据一起查回来后,再在内存层面让每个线程去拿自己需要的数据,比如请求A取[10,70],请求B取[50,100],这样肯定比每个请求都各自去访问DB要快..
他说了句ok,就换了另一个白板,让我实现阻塞队列,并满足我上面说的「达到一定数量一并取出」和「定时器超时」功能,然后我就懵逼了,不知道怎么写,他也没给什么提示直接闭麦了。。。
当时觉得就不能什么也不写,不写肯定挂了,写点伪代码也行,就硬着头皮写,反正多线程也跑不了,大胆讲出自己的思路就行了。大体框架和这道题差不多:
因为没法调定时任务框架,定时器什么的就开始乱扯了,什么取当前时间戳和上次访问的时间戳减一减啦,减到0就打包发出去啦...
然后他说ok就没什么要问的了,开始反问。
总之三面leader全程冷漠,一直都是我在讲,八股是一个不问,挺离谱的。
面完感觉挂了,因为确实感觉面试官态度不是很好,之前面B站也是这样就挂了,面完晚上翻来覆去睡不着觉得自己很倒霉总是被kpi,难受的要命。
没想到第二天hr说我三面过了,而且面评很好。。。(所以三面面试官是傲娇吗,还是压力面啥的qwq)
总之提了offer审批。等了一周oc了。
总结一下:本人真的很菜,小小的211大三和牛客上大佬的学历经历都没法比,可能从开始学习前后端技术到现在可能差不多有一年多点的时间,也是因为朋友的引路才选择了就业这条路。上海疫情三个月都封在家里,实习也没法去线下,真的非常焦虑不知道就业该怎么办,转正形势也不明朗,就边摸鱼边刷题边背八股。提前批压根没指望,果不其然提前批简历没有一家是过的,投的后端全部挂掉,最后字节tt的hr小姐姐把我捞了起来qwq,说客户端正好有hc要不要来试一试,那我肯定不能错过这个机会,虽然不是后端,但我也足够满意了。今年大家都很不容易哇QAQ。。。
现在回想起来还是很感慨,去年这个时候可以说自己会的东西还很少,能写两个接口了不起了。这一年真的学了很多东西,题也刷了四五百道(虽然记住的可能不多...)。去年看到牛客各位大佬的面经都清一色的高并发,分布式真的想想自己tm什么都不会可能没什么机会了,但还是不甘心翘课去实习去刷题去背八股(不建议学我)。事实证明机会还是给有准备的人的哇。
最后希望看到这篇文章的同学共勉,祝大家都能收获满意的offer~