从阿里到字节,8月最新字节一面面经与答案解析
前言
金九银十临近,想要涨薪就看这一波了~最近看到阿里频繁上热搜,对这个公司的某些文化还是不敢苟同,所以我最后还是去了字节,去的是Java研发部门,现在已经拿到offer了,趁着入职之前有时间过来给大家讲一下我遇到的一些面试题及答案,要是觉得回答的不好,可以留言告诉我。文末也整理一些Java学习资料给大家,记得领取!
计网
1.HTTP下层用的什么协议?
- HTTP只定义了应用层的东西,下层的可靠性要传输层来保证,可以用TCP,但没有说一定要用TCP ,只要是可以保证可靠性传输层协议都可以承载http,也可以基于sctp的http实现。
- 当然HTTP也不是不能通过udp承载,但是是非标准的。
- 校验和 通过校验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错就会直接丢弃TCP段,重新发送。(总共计算三部分:伪首部、TCP报头、TCP数据)
- 序列号/确认应答 应答机制,发送端发送信息给接收端,接收端会回应一个包,这个包就是应答包。发送端传输一个包,接收包没有回应确认包(ACK包),就会重发。或者接收端的应答包,发送端没有收到也会重发数据。这就可以保证数据的完整性。
- 超时重传 指发送出去数据包到接收到数据包之间的时间,如果超过了这个时间会认为丢包了,需要重传。假如一个包经过多次重发都没有收到对应确认包,会认为接收端异常,强制关闭连接。并通知应用通信异常强行终止。
- 最大消息长度 在建立TCP连接的时候,双方约定一个最大的长度(MSS)作为发送的单位,重传的时候也是以这个单位来重传。理想情况下该长度数据刚好不被网络层分块。
- 滑动窗口控制 超时重传机制存在效率低下的问题。窗口的大小实在无需等待确认包的情况下,发送端还能发送的最大数据量。
- 拥塞控制:窗口控制可能带来网络拥堵问题。为此TCP引入慢启动机制,先发少量数据探路。此处引入拥塞窗口:开始时定义拥塞窗口大小为1;每收到一个ACK应答,拥塞窗口加1。(复习四种拥塞控制算法)
- 用途不同:get用于请求;post一般用于表单提交
- 安全性不同:get明文传输,不安全,请求信息直接跟在URL后;post安全,信息放在请求body中
- 数据长度限制:get对传输的数据长度有限制;post没有限制,因为请求信息都放在body消息体中
- 是否自动缓存:get请求会被浏览器自动缓存;post需要手动设置缓存
- 反复操作:get反复请求/回退是无害的;post回退后需要重新提交表单
- TCP数据报:get发送过程中产生一个TCP数据报(浏览器会将http header+data 一起发送过去,服务器响应200,返回请求的数据);post会发送两个TCP数据报(浏览器先发送header,等待服务器响应100 continue,在发送form,服务器响应200 ok)
4.Cookie和Session的区别?Cookie通过在客户端记录信息确定用户身份;Session通过在服务器端记录信息确定用户身份
6.为什么用InnoDB? 因为支持事务
7.项目中哪里用到事务了,需要来支持事务呢? Java 8. HashMap是怎么解决哈希冲突的? 数组+链表
9. 是怎么优化的呢? 当链表容量达到8(默认)时,先检查此时数组容量是否达到了64,小于64的话先对数组进行扩容,而不是转换成红黑树,达到64了再转换成红黑树
10. 那红黑树会成为一颗很大的树吗? 11. 并发存在哪些问题?怎么解决这些问题的? 12. 有哪些锁,这些锁有什么区别? 13. 操作系统内存置换策略?
虚拟内存很重要的一个概念就是页面置换算法。
- 最佳页面置换算法:永久不再使用的页面
- 先进先出页面置换算法:即在内存中驻留最久的页面被淘汰
- 最近未使用页面置换算法:最近时间内未使用的页面
- 最少使用页面置换算法:最少被使用到的页面
14. 平衡二叉树是什么? - 二叉树
a. n=n0+n1+n2
b. n=n1+2n2+1(n=分支数+1、分支数=n1+2n2)
c. n0=n2+1(由以上两式可得) - 满二叉树:深度为k ,且含有2k?1个节点的二叉树
- 完全二叉树:深度为k,n个节点,当且仅当其每个节点与深度为k的满二叉树一一对应时,其为完全二叉树。
a. 其特点:i.叶子结点只可能在层次最大的两层上出现; ii.对任一个节点,其右子树下的子孙最大层次为l ,则其左子树下的子孙的最大层次必为l 或l+1 。
b. 具有n个节点的完全二叉树的深度:k=?log2n?+1 - 二叉查找树/二叉排序树:左子树(如果不为空)上的结点值小于根结点的值;右子树(如果不为空)上的结点值大于根结点的值。
- 平衡二叉树(AVL树) :一种特殊的二叉排序树,希望二叉排序树的高度尽可能小。
a. 平衡二叉树是具有如下特征的二叉排序树:i. 左右子树深度之差绝对值不超过1;ii. 其左右子树也是平衡二叉树。
注意:平衡二叉树的平衡调整方法
15. 稳定的O(nlogn)排序算法?2
16. 什么是稳定?17. 算法:剑指 Offer II 046. 二叉树的右侧视图 https://leetcode-cn.com/probl...
class Solution {
public List rightSideView(TreeNode root) {
// 面试中打算使用两个参数递归,发现做不出来
// 上午刚复习的BFS,也没想到用,还是做题太少
List result = new LinkedList<>();
if(root == null) return result;
Queue q = new LinkedList<>();
q.offer(root);
while(!q.isEmpty()) {
int sz = q.size();
for (int i=0;
i
学习资料 Java核心知识点总结
文章图片
大厂面试真题
文章图片
书籍资料
【从阿里到字节,8月最新字节一面面经与答案解析】
文章图片
推荐阅读
- 2018-02-06第三天|2018-02-06第三天 不能再了,反思到位就差改变
- 一个小故事,我的思考。
- Docker应用:容器间通信与Mariadb数据库主从复制
- 第三节|第三节 快乐和幸福(12)
- 你到家了吗
- 一个人的碎碎念
- 遇到一哭二闹三打滚的孩子,怎么办┃山伯教育
- 死结。
- 我从来不做坏事
- 赢在人生六项精进二阶Day3复盘