面试的话, 一天面完3面, 效率很高, 三天之后就发了offer
字节邮件里面也说了不能泄露面试题, 那我就把我秋招参与美团,字节,腾讯,阿里面试被问到的全部问题总结着写出来了, 这其实是我每一轮面试完之后我都会总结哪里答对了, 哪里没有答对, 总结了一大堆问题出来. 答案未必正确, 我只是给自己写了个简单的一句话概括, 可能不够完善, 建议看官自行回答一下这些问题
二本非科班, 暑假在字节实习过, 不过不是tiktok部门, 因此秋招就没啥时间准备面试了, 只投了几个大厂, 顺便也在字节跨部门转正, 被问到了很多问题, 面试体验最好的是字节, 最烂的是阿里, 阿里总给我一种高高在上问我的感觉, 而字节面试更像是在聊天.
其实因为是校招嘛, 问的也都不是特别难, 因为懂一点字节码插桩以及热修复技术, 还了解一点点性能优化, 就和面试官聊的非常开心, 也就过的很顺利
操作系统/计网
进程和线程? 线程的轻量级的体现在哪里?
: 一个进程可以有多个线程, 线程是CPU调度的最小单位, 进程是资源分配的最小单位. 轻量级的话, 进程是静态的只用来分配资源的, 线程是动态的用来执行指令的.线程crash进程会不会crash
: 在Java语言的话, 线程crash并不会导致进程crash, 不过进程内不同线程之间的内存是共享的, 一个线程的crash可能导致其他线程用到的内存访问到不正确的数据, 然后导致其他线程出现crash死锁了解吗? 说一下死锁产生的四个必要条件?有什么算法能避免死锁吗
(银行家算法): 四个必要条件: 互斥(一个资源一次只能分配给一个线程使用), 不可剥夺(一个线程不能强行占有其他线程已经占有的), 请求和保持(一个线程在等待其他进程释放资源的同时,继续占有已经拥有的资源), 循环等待条件(A等B等C等A)操作系统中cpu调度算法有哪些? 你觉得其中最好的一种是?
: 首先是分为抢占和非抢占, 具体有:先进先执行FCFS/最短优先SJF/优先权***转法(隔一段时间被迫交出CPU)...操作系统IO模型
: 同步阻塞/同步非阻塞(轮询:隔一会儿瞄一眼进度条/IO多路复用:poll&epoll机制:Handler?)/异步非阻塞(回调式)/异步阻塞(Kotlin协程suspend底层原理利用了Continuation实现了CPS转换,回调地狱应该算异步阻塞)- 同步阻塞: 从开始阻塞到结束.
- 同步非阻塞: 开始到资源就绪轮询,资源拷贝阻塞.
- IO多路复用: 开始到资源阻塞, 资源拷贝阻塞, 两段分别阻塞.
进程通信方式
: 管道(只能在有亲缘关系进程间单向流动), 有名管道(允许无亲缘关系进程间单向流动), 消息队列, 共享内存, 信号量(控制多个进程对共享资源的访问,常用于文件锁), 套接字(可用于网络), 信号(通知进程某个事件已经发生)解释性语言
: Java编译成class, 在不同平台使用不同虚拟机解释执行. 编译型语言: c语言编译成二进制文件, 不同平台可执行的二进制文件不同.架构? MVVM/MVP 区别
:(MVC: View触发事件传递给Controller通知Model数据变化刷新View. MVP: MV彻底解耦, Presenter持有两者的接口进行操作. MVVM: MV彻底解耦, VM实现数据双向绑定, 比如Google的Databinding, 这时我们其实还需要写BindAdapter)https与http的区别, 数字签名?
: 多了一层 TLS/SSL, 数字签名将服务器发来的密文用签发机构的公钥解密, 然后和服务器的信息的hash值进行对比DNS解析怎么做的? DNS劫持如何避免
: DNS解析就是根据指定的域名, 记录类型(A,AAAA,CNAME,MX,NS), 记录值找到指定的服务器或跳转到其他域名. 避免DNS劫持可以在OkHttpClient中自定义自己的dnshttp状态码
: 100/102continue, 206分段内容, 301永久/301临时重定向/304 NotModified, 401未授权/403Forbidden服务器拒绝请求/404NotFound, 500服务器内部错误/502网关错误/503服务暂时不可用http2多路复用
: 基于二进制分帧层, HTTP消息被分解为独立的帧并行发送出去, 最后在另一端根据流ID重新组合http几个版本的不同
: 1.1: 多条连接承载多个请求, 2.0: 单条连接多路复用, 3.0: 基于QUIC实现快速可靠的UDP连接get与post请求的区别? get与post携带数据的区别
: get往往使用FormUrlEncoded这种方式将请求参数编码在url中, post往往会在body中包含数据. 且get请求一般带有缓存, post没有. get发送一次, post会先发送一次header, 服务端响应100 continue, 然后再发送真实数据, 响应 200浏览器输入url发生了什么
: 构建请求/DNS解析/发起TCP连接/发送HTTP请求/服务端响应HTTP请求/客户端处理请求TCP原理
,如何实现可靠传输, 除了三次握手和四次挥手还有哪些机制?
: ACK(服务端返回收到的最后一次正确的seq+1), 流量控制, 拥塞控制为什么要三次握手/四次挥手
:- 三次握手: SYN->SYN+ACK->ACK, 如果变成两次握手, 如果第一次SYN包发送出去但是暂未成功建立连接, 而在客户端重试之后原来失效的连接又被成功发到了服务器使得服务器又使用原来的SYN包建立起了连接, 不符合预期.
- 四次挥手: FIN->ACK,FIN->ACK, 其中一方通知关闭之后另一方回应收到, 然后等待成功关闭后回应FIN包, 然后另一端回应ACK, 连接结束.
tcp长连接和http长连接区别
: HTTP header(Connection: keep-alive), 指的是一个连接会保持一段时间, 而不是传输完数据就直接断开. TCP长连接指的是TCP保活计时器, HTTP的长连接本质上是TCP的长连接, TCP的长连接通过心跳包建立.UDP如何实现可靠传输
: QUIC: 基于UDP,减少了握手时间/避免队头阻塞的多路复用怎么优化首页加载速度(从数据传输方面)
:(使