字节跳动 杭州飞书后端开发提前批 北京教育后端开发
飞书很早就面了,然后一面就挂了......投的java结果一个java没问
后面被北京hr捞了,现在两个都发一下.
飞书-后端开发(6.23)
一面
讲讲你的项目都是干啥的(用啥语言,用啥数据库,你干啥)
聊聊redis,问了基本数据类型(我就答了那五个)
你们项目用redis做什么(只用过springboo简单写两个注解)
redis有序集跟hash的区别(不知道怎么答,一个集合一个map)
用redis做热度排名选什么类型,没答上来,只说记得有个rangByScore
redis快照(没怎么了解,就随便讲了讲rdb,平常也就dump)
再讲讲mysql,怎么加快插入速度(不知道)
mysql索引,聚簇 非聚簇区别
讲讲B+树,聚簇索引B+树里有什么东西(叶子节点存行记录)
非聚簇B+树有什么东西(叶子节点存指针)
刚刚提到了页,聊聊操作系统分段 分页
分段大小不定,段的每部分是有意义的,例如代码段,数据段.分页大小固定,但是没有具体意义.然后基本往断页式管理那边靠吧,我有点忘了没答上来.复习的时候建议顺便opt,lru,lfu都复习了
操作系统线程模型(没听过)
用户态 内核态区别(只说了权限,面试官还是要追着问,再往后不知道了)
聊聊信号
就linux的sigint,sigquit那些,我只说了上课讲的C语言编程捕捉信号就不会了.面试官就追问了很多很多,比如信号背后的原理,还要我讲讲中断与信号的关联,估计是提醒我信号实现的原理跟中断有关,可惜我不会
你发送一个信号,操作系统做了什么,结合中断来说说(接着上面那点问的,不会)
聊聊网络,如果A向B请求简历TCP,但B没开启服务,是连接超时还是连接失败(没开服务会超时)
同上,如果B机器坏了,无法开机,是超时还是服务.
无服务,因为ip都没有,可以结合osi模型讲讲,下层会返回icmp报文,好像是不可达,可惜当时我没答上来.当时我说的是Tomcat没开启,你访问localhost:8080会显示404
- 做道算法题,找波峰,优化一下到Log(n),用二分.(很经典的题,各大oj网站,搜索引擎搜搜就有了)
总结一下就是硬怼数据库,操作系统,计网,一句java没问.凉的透彻,第二天睡醒就感谢信了.
北京教育后端开发(7.25)
一面
聊一个你最拿得出手的项目,你干了啥,最大的难点,然后具体针对项目再问问你问题,比如实现某功能的流程.
用的数据库(mysql),讲讲acid,默认隔离级别(可重复读),幻读是什么,可重复读能防止幻读吗(不能)?
要你写个sql,再问他的执行过程
我就说一般都是先执行where,这里没有where就先执行group,因为你必须先group才能聚合,但是好像还不够,面试官就换着问:如果你设计sql,你觉得应该怎么执行.可惜忘记了数据库上课讲的那些关系代数和执行引擎这些,可以考虑从这方面回答
Users表结构 columnName | columnType UserId | int UserName | varchar City | varchar 获取人数最多的三个城市名 select City form Users group by City order by count(UserId) limit 0,3
- 问个操作系统,进程通信方式,挑了个共享内存问是咋回事
有七个:有名管道,匿名管道,共享内存,信号,信号量,socket,消息队列.答了五个剩下两个一时半伙记不起面试官说可以了.
多个线程共享一块内存,然后一个线程写其他线程读,特点是快,然后需要自己管理并发,比如用互斥量
- 问个网络,TCP和UDP区别(有无连接,是否可靠),TCP怎么确保可靠
讲了滑动窗口,如果窗口前端在3,而5的报文到了,先将5放到缓存.如果3超时了,则要求重传3,4,5
- 微信扫码登录端的流程你觉得是怎样?或者你自己开发个扫码功能,你怎么实现
二维码就是信息的载体,你扫描二维码扫描出来一个url,然后用你手机里存储的账户信息去post这个url,微信里就是openId.
接下来是一个难点,扫完码之后怎么通知电脑web端跳转.我回答的是,服务器将每个web的socket与二维码做个映射,某个二维码被扫了之后去查找对应socket然后发一条消息通知web端跳转.
这题就是自由发挥了,面试官主要看你思路.我觉得也可以让web不断去请求服务器,可能每秒一次.因为从需求上分析,同一时刻有大量用户扫码的情况是非常少见的,所以即使请求多次也不会太大负担.
然后这里你可以延伸一下,比如多久请求一次比较好?一般二维码出现后,到我们拿起手机扫码这几秒内,可以少请求几次.再比如服务器怎么快速判断你扫没扫码?我想到的是布隆过滤器.这里纯粹个人瞎想,反正这题应该是考察你的项目逻辑,自由发挥就好
- cookie和session区别(服务器,客户端),如果窃取了你得cookie能伪造你的身份吗?
答得不是很好,最后根据上网经历觉得应该不能.其实应该是能,但是现在大家都防范了所以我们感觉不出来.然后下一问就是怎么防范,我就说走jwt那套流程
问个java,GC机制(先讲了jvm五个分区,然后说gc一般发生在新生代,标记-整理/清除/复制讲完就过了)
算法题,买股票,给你一个int数组代表每日股票价格,一日买一日出,我写完dp就行了,其实这就是求最大差值,都不用花O(n)空间来做dp,但是我怕他出个变式就讲的dp.比如下面这题
https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/
一面完面试官直接跟我说过了,然后hr打电话立马约二面.
二面
1.自我介绍
2.同一面,讲项目,跟你聊项目某些技术点,开发某个功能的流程.
3.数据库,在Innodb中,告诉你表结构,主键,索引.给你几条sql,让你回答那几条快,主要考察最左前缀,覆盖索引,辅助索引.大概这样
table t (id,a,b,c) pk(id) index(a,b) 下面哪些sql快 select a,b from t where b=xxx and a=xxx select a,c from t where a=xxx and b=xxx select a,b from t where b=xxx 第三条不符合最左前缀,索引失效,所以慢. 第二条查询了字段c,还需要回表一次,所以也慢. 第一条mysql会帮你将a b互换位置,这样满足最左前缀,且查询的字段覆盖索引,不需要回表,所以快. select a,b from t where b=xxx and a=xxx order by a select a,b from t where b=xxx and a=xxx order by c 第二条由于需要c排序,所以还是要回表,故第一条快.
- 网络,http跟https区别(一个明文一个加密),https加密流程.剩下还是tcp跟udp区别,一般用udp干啥.tcp谁time wait,等待多久,作用什么
图片来自网络,侵删
udp可以打游戏,因为玩某些东西需要udp代理.
客户端time_wait 2msl.还问了我msl什么意思,忘了.maximum segment lifetime 最大分节生命期.
功能这点我看网上有人对这个有争议,我觉得两点:防止阻塞报文在连接关闭后抵达和保证客户端发送的最后一个ack报文段能够到达服务器
- HashMap底层数据结构(数组+链表),插入元素是头插还是尾插,扩容机制,以及ConcurrentHashMap怎么实现并发控制的
1.8之前头插 1.8是尾插
默认扩容因子0.75,链表过长时转换为红黑树,扩容之后还需重新计算旧元素的Hash并重新分布.
ConcurrentHashMap内部使用synchronized关键字上锁.1.8降低了锁的粒度,抛弃了对segment上锁的做法,只对HashEntry上锁.
- 算法题1:盗贼入室偷东西问题,不能偷相邻房子(很经典的dp).
进阶:如果房子首尾相连怎么办
我说可能是尝试把dp[0]初始化改成最后一个房子的钱?还不确定,需要用纸笔推导一下.如果不行我还有另外一个思路就是反过来,假设村子里没有房子,我们去建房子这样的思路,然后放我过了.前两天刷题碰到个有点点类似的:https://leetcode-cn.com/problems/burst-balloons/
- 给你一个数组,再给你一个数m,从数组中删除m个数,剩下的数组组成的十进制数最多是多少?
例如:数组;[3,4,2,1,6] m:1,删除3后得到4216最大.我的思路找波谷,没写完他说可以了.
先将数组首尾插入一个Integer.MAX_VALUE.(为了做图方便,下面的图我就用9表示MAX_VALUE)
第一个波谷是3,删除3之后得到42169为最大值.
第二个波谷是1,删除1之后得到4269为最大值.
算法这么做背后的原理我之后试着证明一下,或者大佬评论区留言个更好的办法.
插入两个Integer.MAX_VALUE是为了防止找不到波谷.例如递增和递减情况
可以验证此时结果也是正确的.
#面经##校招##字节跳动##Java工程师#