#字节# #字节跳动# 吐槽一下,字节这次面试难度是我实习秋招以来面试难度最大的,心态有点崩
1.介绍一下AQS和Sychronized底层实现的联系和区别,我答得是AQS内部使用lookSupport和CAS机制,而Sychronized依赖于操作系统的Monitor机制,然后他让我讲一讲操作系统的monitor是什么结构,怎么运作的
2.如果要你使用AQS设计countDownLatch工具类,该如何设计,AQS我很久之前看的,忘的差不多了,答得很不好
4.讲讲looksupport在操作系统层面的底层实现
5.讲讲NIO,讲讲Java的NIO是如何调用操作系统的NIO服务的
6.如果要你基于Tcp协议搭建服务器,该如何搭建?(没搞懂啥意思)
7.讲讲操作系统对NIO是如何封装的,底层的数据结构是什么,我答得select,poll,epoll原理,他说不是要我回答这个
8.你刚才说NIO的socket连接是一种系统资源是吧,那讲讲操作系统中NIO的socket连接数量有没有什么限制,如果有,和什么有关。(我支支吾吾的说了select的连接数限制,他说不是这个)
9.讲讲在高并发场景下,该如何优化NIO连接,如何配置
10.讲讲Redis分片
11.Redis的冗余和分片是同时存在的,该如何进行集群配置
12.我看你使用了Netty,那请你讲一讲如果让你实现一个netty框架,该如何设计
13.讲讲Netty为啥并发量大(我说NIO的优点,以及Netty将原生Java的水平触发改为边缘触发,他说这个没啥影响)
13.我看你在项目里提到了webSocket,那请问websocket建立连接的过程是什么,服务端做了哪一些处理。
14.你说websocket使用在聊天场景中,那你这里做了群聊实现了么?听说过写扩散和读扩散么?解释一下
算法:一道字符串dp,我用的dfs,当时心态有点崩,卡了十分钟才写出来,面试官说分析一下复杂度,说复杂度太高,于是跳过,过了一会意识到没有进行记忆化操作。。。。
....
还是我太菜了,以后还需要打磨打磨基础吧
反问,我从您问的问题里面感觉字节对操作系统的基础很重视吧,那您对学习这些有关操作系统的知识有什么技巧
面试官回答我说要注重在实践中学习,比如NIO和socket这块多学习抓包,学会跟踪调用。有时候只看一些技术博客学一些理论是没有多深的理解的。
还有一些记不住了,上面的大部分我都答得不怎么样
#秋招#