2020-09-02字节2面(填坑)

这篇博客主要记录了字节跳动Java面试中的部分问题,包括进程间的通信方式(如管道、FIFO、消息队列、信号和共享内存)、TCP的三次握手详细解释、Redis速度快的原因以及IO复用模型等技术知识点。还讨论了Redis的zset底层实现为跳跃表,以及面对算法题目的思路。
摘要由CSDN通过智能技术生成

字节2面 (Java) (填坑)

今天稍微有点空… 我来补一下 之前的坑.

这里我会给上我认为挺全面的答案… 如果有更加全面的答案 欢迎来弥补

2面过了…等待3面~… 祈祷 来几个java的问题

  1. 进程通讯的方式

    管道 . FIFO . 消息队列 . 信号 . 共享内存

  2. 共享内存这种方式底层是如何实现的

    1. 创建虚拟内存空间, 在物理内存上开辟空间
    2. 进程将共享内存映射到自己的虚拟地址上 (可能使用一个mmap 的函数实现)
    3. 对这片内存进行操作. (可以绕开内核的管理, 所以 共享内存这种方式是在ipc里最快的一种)
    4. 不用了之后, 由其中一个进程来对这片内存进行释放
  3. tcp的3次握手来讲一下

    第一次 , 客户端 发送一个 SYN 和 seq . 发起建立连接的要求

    服务器收到消息后, (确定自己的接收功能) , 同时发送 ack = seq + 1的包 , 以及 ACK , seq 的包 , 第二次握手

    第三次 , 客户端收到这个包(确定自己的收发都没有问题 ) , 同时发送 一个 ack = seq + 1 , ACK的应答包… 进入稳定连接状态

  4. time_wait 状态了解吗

    这个状态是在四次挥手里面的 , 最后一次挥手. 由客户端发起了最后一次挥手之后, 客户端进入了 time_wait状态

  5. 为什么需要time_wait

    因为要确保 服务器 收到最后一次挥手

    如果 服务器 没有收到最后一次挥手, 那么服务器因为超时 , 会进行重新发送 这条挥手请求

    所以time_wait 需要等待 2MSL 的时间, 来确保服务器收到了

  6. redis为什么这么快

    2个原因, 1是基于IO复用模型, 提供了 redis虽然是单线程的, 但是能够高效的对多个指令进行反应

    2是它的存储主要是在内存中, 而且结构大多简单, 操作起来十分的快速

  7. io复用模型是怎么样的

    io复用模型主要的作用是让 单线程 同时去响应多个请求…

    它具有2个阶段… 第一个阶段 是select 出就绪的通道, 第二个阶段是得到这个通道中的数据

    第一个阶段是不阻塞的, 可以使用 select , poll , epoll的方式实现. 前俩者 使用的是轮询, epoll 使用的是一个基于事件的回调 , 把on复杂度的轮询 , 降低到了o1

  8. **补充 : ** 什么是 IO , IO的过程 (漏了这个问题)

    IO 主要是2个过程, 第一个过程是内核通过一些方式得到数据的过程 , 这个过程 , 调用者根据会不会陷入阻塞, 分为阻塞的还是非阻塞的

    第二个过程是内核中的数据拿到用户态中来, 这个过程 , 调用者根据会不会等待完成, 分为同步, 和异步

  9. 什么是阻塞和非阻塞, 什么是同步和异步

    同8

  10. io复用模型是阻塞的吗

    这个问题我入坑了… 我当初好像看到 select的过程是阻塞的- -… 一直在说我认为是阻塞的… 被面试官怼了…

    io复用模型…是非阻塞的… 而且大多时候 也是使用非阻塞的…

  11. 谈谈select和epoll

    select … 一种轮询的机制, 通过轮询 寻找就绪的通道

    epoll … 基于事件. 通过回调事件处理器, 就绪的通道,会把自己放入到就绪队列中, 等待被接收

  12. redis的zset如何实现的底层

    zset使用的是一种跳跃表的形式. 它有多层的结构 . 单单看一层的结构, 它类一个双向链表的样子

    每当插入一个值, 它会使用类似一个随机的函数, 长高. 越高层的 , 节点越少. 每移动一格… 就会跳跃掉好多节点…所以叫跳跃表

    (这里我觉得稍微有点没有讲清楚- … 跳跃表是真的难描述)

  13. zset插入一次的时间复杂度是多少? 为什么是 O(logn) 有依据吗

    我答的是 logn … 我说是和 长高的 那个随机函数有关… 我学习到的是 … 跳跃表的性能 是接近红黑树的… 而且实现起来比红黑稍微简单一些, 在并发量足够大的情况下, 因为 它自身调节很少… 可以比红黑更加高效…

    至于要说依据… 我是真的不知道- -… 应该和那个随机长高的函数有关…

  14. tcp中…如果3次握手完成了, 客户端宕机了…怎么办

    这个我没答出来… 当时一开始说…服务端会发送数据…给客户端… 一直没响应会重发…重发失败多次就会断开连接…

    但是面试官后来说 … 如果服务器不发送数据呢… (这就尴尬了- -… 还真没想过- -…)

    好像可以使用类似心跳的约定…如果客户端和服务器 多久没有发送心跳了… 就断开连接…

  15. 算法题 … 给定一个数组 和 一个 sum . 任取 数组中的几个. 和为sum 的不同组合有多少种

    样例: [5,5,10,2,3] , sum = 15 . 输出 4

    使用map 或者 dp 都可以… 这里就不给出了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值