乐趣区

关于java:从阿里到字节8月最新字节一面面经与答案解析

前言

金九银十邻近,想要涨薪就看这一波了~ 最近看到阿里频繁上热搜,对这个公司的某些文化还是不敢苟同,所以我最初还是去了字节,去的是 Java 研发部门,当初曾经拿到 offer 了,趁着入职之前有工夫过去给大家讲一下我遇到的一些面试题及答案,要是感觉答复的不好,能够留言通知我。文末也整顿一些 Java 学习材料给大家,记得支付!

计网

1.HTTP 上层用的什么协定?

  • HTTP 只定义了应用层的货色,上层的可靠性要传输层来保障,能够用 TCP,但没有说肯定要用 TCP,只有是能够保障可靠性传输层协定都能够承载 http,也能够基于 sctp 的 http 实现。
  • 当然 HTTP 也不是不能通过 udp 承载,然而是非规范的。

2.TCP 是如何保障可靠性的?

TCP 次要提供了校验和、超时重传、序列号 / 确认应答、最大音讯长度、滑动窗口管制等办法实现可靠性传输

  • 校验和 通过校验和的形式,接收端能够检测进去数据是否有过错和异样,如果有过错就会间接抛弃 TCP 段,从新发送。(总共计算三局部:伪首部、TCP 报头、TCP 数据)
  • 序列号 / 确认应答 应答机制,发送端发送信息给接收端,接收端会回应一个包,这个包就是应答包。发送端传输一个包,接管包没有回应确认包(ACK 包),就会重发。或者接收端的应答包,发送端没有收到也会重发数据。这就能够保证数据的完整性。
  • 超时重传 指发送进来数据包到接管到数据包之间的工夫,如果超过了这个工夫会认为丢包了,须要重传。如果一个包通过多次重发都没有收到对应确认包,会认为接收端异样,强制敞开连贯。并告诉利用通信异样强行终止。
  • 最大音讯长度 在建设 TCP 连贯的时候,单方约定一个最大的长度(MSS)作为发送的单位,重传的时候也是以这个单位来重传。现实状况下该长度数据刚好不被网络层分块。
  • 滑动窗口管制 超时重传机制存在效率低下的问题。窗口的大小切实无需期待确认包的状况下,发送端还能发送的最大数据量。
  • 拥塞管制:窗口管制可能带来网络拥挤问题。为此 TCP 引入慢启动机制,先发大量数据探路。此处引入拥塞窗口:开始时定义拥塞窗口大小为 1;每收到一个 ACK 应答,拥塞窗口加 1。(温习四种拥塞控制算法)

3.get 和 post 有什么区别?

get 和 post 的区别能够从以下 6 个方面来讲

  • 用处不同: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 通过在服务器端记录信息确定用户身份

MySQL

5. 你们 MySQL 数据库用的哪个引擎?

InnoDB

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<Integer> rightSideView(TreeNode root) {
        // 面试中打算应用两个参数递归,发现做不进去
        // 上午刚温习的 BFS,也没想到用,还是做题太少
        List<Integer> result = new LinkedList<>();
        if(root == null) return result;

        Queue<TreeNode> q = new LinkedList<>();
        q.offer(root);

        while(!q.isEmpty()) {int sz = q.size();
            for (int i=0; i<sz; i++) {TreeNode cur = q.poll();
                if(i == sz-1) result.add(cur.val);
                if(cur.left != null) q.offer(cur.left);
                if(cur.right != null) q.offer(cur.right);
            }
            
        }
        return result;
    }
}

学习材料

Java 外围知识点总结

大厂面试真题

书籍材料

退出移动版