面经(第二期) 22/04/27

字节跳动-国际化电商

一面

1.自我介绍:做过什么项目,或者实习期间负责的任务说一下
2.实习工作的一些问题
(1)角标的计算过程?
(2)当时角标出现显示错误是怎么解决的?
(3)长连接组是怎么时时进行角标计算的?
3.操作系统的基础知识
(1)线程和进程的区别
(2)进程的头字段知道吗?
(3)你觉得复制和粘贴在操作系统层面进行了什么工作
4.MySQL的基础知识
(1)你了解Innodb吗,他和MyISAM的区别
(2)Innodb的数据结构是什么
(3)B+树的结构特点?和B树的区别
(4)B+树,平衡二叉树,哈希表查找的时间复杂度
(5)mysql查找数据的过程?
(6)mysql的访盘过程
5.计算机网络的基础知识
(1)TCP和UDP的区别
这里我说了一下,视频通话用的是UDP
(2)为什么视频通话用UDP
(3)TCP的滑动窗口?
(4)介绍一下TCP的慢开始和快重传
(5)网络通信会发生死锁吗
(6)TCP的三次握手过程?能变成两次握手吗?为什么
6.智力题(给我人整傻了)
(1)蒙提霍尔悖论(三门问题)
参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门是否会增加参赛者赢得汽车的机率

答案是会。不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3

我答的换不换几率都是1/2

(2)甲、乙两人轮流往一个圆桌面上放同样大小的硬币。规则是:每人每次只能放一枚,硬币不许重叠,谁放完最后一枚硬币而使对方再也无处可放,谁就获胜。如果甲先放,那么他怎样放才能取胜

圆是关于圆心对称的图形,若A是圆内除圆心外的任意一点,则圆内一定有一点B与A关于圆心对称(见右图,其中AO=OB)。
所以,圆内除圆心外,任意一点都有一个(关于圆心的)对称点。
由此可以想到,只要甲把第一枚硬币放在圆桌面的圆心处,以后无论乙将硬币放在何处,甲一定能找到与之对称的点放置硬币。
所以只要第一枚硬币放在圆心,甲必赢

我答的从中间往外开始放,但不知道怎么解释

7.算法题
(1)隔k个节点翻转一次链表

写了半个小时,写的怪怪的

8.闲聊
问了一下平时学习会写博客吗,有的话发给他,然后他那边帮我更新一下简历

突然感觉面试官人不错

9.总结
怎么说呢,整个面试更加注重基础,而不是java语言和技术,一道java的题目都没有更别提spring和redis之类的了。
可能是因为一面,所以注重点不一样吧,二面三面可能才是项目面?

B站java开发工程师

一面22/3/28 45min

1.自我介绍
2.MySQL的索引了解吗?
(1)为什么用B+树,不用B树,哈希表或者红黑树?
(2)你实习的时候表中一般怎么建索引,编写sql的时候一般注意什么?
(3)sql用explain分析的时候主要的type你知道有哪些
3.MySQL数据库的隔离级别?怎么实现的?
4.mysql中innodb执行一条sql的过程(原理不难,应该去补)
5.框架相关的内容
(1)spring的IOC和AOP怎么理解?
(2)单例是怎么实现的?
答了DCL和静态内部类两种
(3)对象创建的过程,单例是为了哪一步不出错而使用的DCL
(4)mybatis介绍一下,底层怎么实现?
(5)sql注入了解吗?
6.中间件及服务器
(1)tomcat介绍一下
(2)Redis介绍一下?有哪几种数据类型?
(3)你们在开发中用的那种消息中间件?
7.java基础知识
(1)你了解JUC那问你一下,高并发你怎么看的?实际开发中有用过线程安全类吗
(2)volatile关键字怎么实现的?怎么保证可见性?
(3)java的内存虚拟机了解吗?能介绍一下类的加载过程吗?
(4)常见的垃圾回收算法有哪些?
(5)现在用的比较多的垃圾回收器是哪个?介绍一下G1垃圾回收器
8.计算机网络
(1)TCP的三次握手和四次挥手介绍一下,为什么需要三次握手或者四次挥手
9.其它
(1)如果线上出现bug,像OOM这种错误,你怎么处理?

字节跳动-飞书企业应用

一面22/04/26

1.自我介绍
2.java中的相关知识
(1)object中的常见方法?
(2)finalize()方法了解吗
(3)hashmap底层的数据结构
(4)为什么hashmap底层的数组长度一定要是2的n次方

集度汽车-java/go开发工程师

一面22/04/25 20min

1.自我介绍
2.实习相关内容
其实就是问一下实习过程中有没有遇到什么困难,当时怎么解决的
3.我们用java开100个线程去对一个int i = 0,进行i++操作,最后结果的范围是多少?
答:1~100,极端情况最少也会有1个加加操作成功,最多100个都成功
4.算法题:合并两个有序数组A和B,不能创建辅助数组,直接将B合并到A里

这里直接从后往前操作就行
当时面试的时候傻了,从前往后做的,还要移动元素
感觉时间复杂度有点高

二面22/04/25 34min

1.自我介绍
2.实习的相关内容
(1)实习期间你们开发的一个总体流程是怎么样的?

答:从需求提出->接口文档->测试->上线

(2)你们需求上线前测试会进行一个灰度测试之类的吗
(3)上线过程你是怎么操作的?

答:先上线一台服务器查看日志,如果没问题才会把其他机子上了,如果有问题进行回滚

(4)你们先上线的那一台服务器会进行一个小流量控制之类的操作吗,上线的docker会打tag标签吗
(5)你在实际过程中是否有接触过线上排查JVM错误的相关经历?
3.mysql的相关知识
(1)MySQL你在建立表和索引时会考虑哪些因素
(2)MySQL我们是怎么判断某个sql语句是否有用上索引的呢
(3)explain分析中有一个extra列,有一种情况是file sort文件排序你了解吗
4.java相关知识
(1)java中的集合类你有看过源码吗
(2)说一下hashmap的一个创建和扩容的过程
(3)为什么hashmap使用的倍增,或者说为什么hashmap的数组长度一定要是2的n次方
(4)ArrayList和vector的区别
5.redis的相关知识
(1)redis中有一个数据类型是zset,这个数据类型底层是什么结构?
(2)java中有一个类TreeSet也是有序集合,底层的数据结构是什么?

TreeSet底层是用的红黑树,不需要额外存储多链表,但是调整操作比跳表麻烦
当然java中也存在底层是跳表的有序集合ConcurrentSkipListMap
需要结合业务场景来选择哪一个来用:
如果你只在乎随机查询效率那就是HashMap,如果要求线程安全那就是ConcurrentHashMap;
如果要求排序,范围查询那就是ConcurrentSkipListMap

(3)为什么java中的有序集合用的红黑树,而redis中用跳表?

1、跳表的实现更加简单,不用旋转节点,相对效率更高,但是需要额外空间存储,空间换时间
2、跳表在范围查询的时候的效率是高于红黑树的,因为跳表是从上层往下层查找的,上层的区域范围更广,可以快速定位到查询的范围
3、平衡树的插入和删除操作可能引发子树的调整、逻辑复杂,而跳表只需要维护相邻节点即可
4、查找单个key,跳表和平衡树时间复杂度都是O(logN)
思考:
从redis本身出发,redis是一个单线程的服务,它更加追求查询速度
redis本身是基于内存的,所以它的性能瓶颈在于内存和网络带宽,而不在于CPU。
红黑树本身的实现比较复杂,每次新增、修改都要维护节点的旋转、变色,相对而言更加消耗内存
而跳表修改元素只需要维护前后两个节点即可。所以在保障查询速度的前提,内存消耗更小的更适合redis

6.算法题
O(logn)时间复杂度求平方根
用二分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值