记七月六号字节广告部门一面面经

一、前言

个人觉得,只记录问题,不记录回答的面经都是耍流氓(狗头),记录问题和回答,这样无论过没过都才能最大的给大家一个参考。话不多说,直接上面经。

二、背景

之前找同学内推过一次字节,但是挂在2面,已经过去了20天左右,这次的应该是在牛客上找的内推(投过的简历太多,记不清楚了),然后base是上海,部门是广告部门下的创意中心。

三、面试

牛客网视频面试,全程1小时20分钟
1.自我介绍
2.项目(没啥项目经验,在网上跟了一个视频教程,然后写上去了,很水,但是面试官说实习不是很看重项目,可能是项目普遍比较low)

linux部分

3.linux查看文件的命令
答:(有点慌了,linux不是很会,而且简历上也没写linux)用过的就是cat、vi和vim命令。

4.如果是大文件呢
答:还是用vi(瞎说了一个,搜了一下,应该是用less命令,然而基本上没用过)

5.vi如何跳转到行尾
答:不是很了解(搜了一下,应该是下面的方法)

![image.png](http://116.62.53.133:8090/upload/2020/07/image-70c84bdd672a4b908f8b95a0cfedc9b3.png)

6.vi命令如何跳转到指定行
答:vi后面加行号(其实也是猜的,vi命令是真的不熟,搜了下答案)

![image.png](http://116.62.53.133:8090/upload/2020/07/image-10887026acd2433cbca93195fb9bf811.png)

7.linux如何查看系统状态
答:(并不知道面试官说的是什么,但是我知道有个查看进程状态的命令,于是问了面试官是不是查看系统进程,然后面试官就改问查看进程的命令了)一般我用的是ps命令

8.如何查看哪个进程对cpu的占用最大
答:(还是不会,但是不能直接说不会)可能是用 ps -ef吧。(后来面试官说了使用top命令)

计算机网络

9.tcp和udp的区别
答:tcp是面向连接的,udp不面向连接;tcp是一对一的,udp可以是一对一、一对多、多对一和多对多;tcp面向字节流提供服务,udp面向报文提供服务;tcp是安全的,udp不安全

10.tcp和upd的使用场景
答:tcp一般用于传输文件,对数据准确性要求比较高;udp一般用来即时通信,比如现在我和您(面试官)之间的视频连线,偶然丢一两个数据帧,有一些卡顿,还是可以接受的。

11.tcp协议和ip协议的联系
答:(没太明白面试官问的是什么,按照自己的理解回答了一波)tcp是传输层协议,ip是网络层协议,都是为报文在网络的传输提供服务。

12.http用的是tcp还是udp
答:用的是tcp,但是也有用udp的,叫httpu

13.说一下https
答:http用的是对称加密,https用的是非对称加密和对称加密,https是建立在ssl协议上的http

14.https跟http的性能上的对比
答:https多了一次非对称加密过程,所以性能上不如http


mysql

15.索引了解吗(简历上写的是事务和sql语句)
答:了解一点。

16.说一下索引
答:InnoDB用的主要是B+树来做索引。

17.MyISAM用什么做索引
答:好像是hash表吧(想抽自己一耳光,InnoDB和MyISAM用的都是B+树做索引,脑子发懵居然说错了)

18.InnoDB可以用hash表来做索引吗
答:应该也可以吧,但是数据量大的时候哈希冲突问题不好解决(不知道面试官想问啥,也不知道自己回答的是个啥......)

19.可以用二叉搜索树来做索引吗
答:应该可以,但是如果数据量大的话树的高度会很高(为什么不用红黑树做索引也是这个原因)

20.介绍一下B+树
答:B+树是一棵多路平衡查找树,可以解决数据量过大时树的高度过高的问题

21.为什么用B+树做索引
答:(内心os:等你这问题等半天了)
(1)B+树的数据都存储在叶子节点上,而且叶子节点是用指针连接起来的,形成一个单链表的结构,这样方便扫库,只需要遍历一遍叶子节点即可。
(2)B+树的查询效率更稳定,每一次查询都是从根节点到叶子节点,走过的路径长度是一致的。
(3)B+树的数据只存储在叶子节点中,分支节点存放索引,而B树分支节点也会存放数据,所以B+树的内部节点大小更小,这样的话对于同一个磁盘块,可以存放更多的B+树内部节点,当把这个内存块读到磁盘中时,包含的关键字就更多,io次数就更少。

22.两张表,一张学生表,存放id、性别、姓名,另外一张成绩表,存放学生id和成绩,求成绩最大的学生姓名
答:(很久没写过sql语句,差点没写出来,哭了)
select name,max(score) from student left join grade on id = stu_id
(这里我故意写了个左连接,等着面试官问我左连接和内连接的区别,可是他不跳坑,无奈)

redis

23.redis了解吗
答:自己在学习的过程中看过一些redis的知识,但是没有用过

24.redis为什么这么快?
答:redis是基于内存操作的,速度本身就很快;然后redis又是单线程的,没有切换线程的开销;redis内部是基于一个文件事件处理器操作的,采用的是多路非阻塞io复用机制

25.redis可以并发吗
答:不可以吧,单线程怎么并发?(redis是可以并发的,但是我可能没有答到点子上去)

26.如果有两个redis命令,第一个命令要读取很大的文件,第二个要读取很小的文件,那么第二个命令会被阻塞住吗
答:(不知道会不会,瞎猜的)不会。(面试官后来说是应该是会阻塞的,让我下去好好看看redis的操作,我哭了)

JVM

27.说一说java内存模型
答:(问的是JMM而不是JVM内存结构,这一定要分清楚)为了优化程序执行,在多线程的情况下,对于共享变量的读写,线程有时候会去自己的缓存而不是共享内存中进行操作,这样就会导致数据不一致的问题(可见性)

28.怎么解决数据不一致的问题
答:用volatile关键字。volatile关键字修饰的变量,线程对它的读写操作都会去主存中进行。

29.CMS和G1的区别
答:CMS更加注重垃圾收集的停顿时间(即用户体验),G1在注重用户体验的基础上,还注重高吞吐量(感觉没有回答到点子上去...)

30.java用的是什么垃圾收集器
答:CMS(瞎猜的,后面查了一下,应该是Parallel Scavenge + Parallel Old)

## 数据结构和算法
31.Java默认用的是什么排序
答:冒泡排序(也是瞎猜的,后面查了一下用的是 TimSort,没有听说过)

32.了解ConcurrentHashMap吗,如何保证并发问题
答:JDK1.7以前用的是分段锁+数据;JDK1.8以后用的是CAS+synchronized操作,底层数据结构是数据+链表+红黑树,对数据的每个节点加锁,并发度提成到了数组长度的级别。

算法

33.给一个数组和一个整数k,输出数组中元素出现次数为前k个的元素,例如[1,1,1,2,2,3]、k=2,1出现3次,2出现2次,3出现1次,最后输出[1,2]

一开始的时候理解错了,以为是输出数组中出现次数大于等于k的,后来面试官说是出现次数为前k个的元素,感觉是个TOP K的问题,我用优先级队列做了一下,时间复杂度是O(NlogN),后面面试官要求O(N)的时间复杂度,大概说了下思路,没做出来,并且面试官还跟我说代码里的优先级队列不是这么用的(贼尴尬,对优先级队列还是不熟悉),后面差不多就结束了。


四、总结

总的感觉这次面试体验还是很好的,面试官全程也是一直在引导,期待能有二面。
#字节跳动日常实习##字节跳动##校招##Java工程师##面经#
全部评论
26和31还有算法题知道答案的老铁麻烦评论区说一下吧😅
点赞 回复
分享
发布于 2020-07-06 17:09
提前批不是只能投递一次吗 挂掉了怎么还能再次投递呢?
点赞 回复
分享
发布于 2020-07-06 17:11
阅文集团
校招火热招聘中
官网直投
算法应该是哈希表吧,主要是怎么处理出现次数前2这个,我没想明白😅
点赞 回复
分享
发布于 2020-07-06 17:33
算法题,如果数组大小不会很大的话,可以用桶排序实现O(n)的时间复杂度
点赞 回复
分享
发布于 2020-07-06 19:39
算法题是leetcode347,然后Java里面Arrays的排序里面方法太多了,其他的不清楚,对于简单的排序整数数组的话sort(int[]),如果数组长度比较小,用插入排序,数组长度大,看看数组是不是基本有序,基本有序用归并排序,基本无序,用快排
点赞 回复
分享
发布于 2020-07-06 20:09
m一下
点赞 回复
分享
发布于 2020-07-06 20:12

相关推荐

6 41 评论
分享
牛客网
牛客企业服务