查看原文
其他

快扛不住了,小红书问的贼细!

小林coding 小林coding 2024-01-01

图解学习网站:xiaolincoding.com

大家好,我是小林。

今天分享一篇小红书 2 年社招 Java 后端一面的面经,面试的风格是从一个知识一层一层深入问到底层。

从 Java IO,问到 socket 底层。从 Java 内存,问到操作系统内存。所以学习知识的时候,不要只看八股文,还是需要从点到面一层层去掌握, 才能比较好应对这类的面试场景。

问题记录

  1. 自我介绍
  2. 讲一下BIO,NIO,AIO的区别
    1. 回答:IO分为两个阶段:数据准备阶段和数据拷贝阶段;BIO需要等待数据准备和数据拷贝;NIO会轮询数据是否准备完成,需要等待数据拷贝;AIO会在数据准备完成和数据拷贝完成后收到通知,然后执行异步处理逻辑
  3. 了解Ngnix原理吗,Ngnix IO模型是什么
    1. Review:Reactor模型包含单Reactor单进程/线程,单Reactor多进程/多线程,多Reactor多进程/多线程
    2. 回答:这块讲得比较乱,讲了一下Reactor模型,把多Reactor和多进程搞混了
    3. 追问:Reactor和NIO的关系
    4. 回答:。。。
    5. 追问:为什么netty要拆成boss和worker,把accept和read/write分开的好处是什么
    6. 回答:对于单线程模型,read事件需要等待IO,会阻塞后续连接的建立;
    7. 追问:A进程建立连接后怎么交给B进程去读写
    8. 回答:讲了一些进程间通信的方式,管道,共享内存,信号量;对于socket,A进程建立好连接后,把socket的引用传递给B进程,B进程根据这个socket引用去拿到socket对象
    9. 追问:能否让主进程不创建连接,让子进程去创建连接
    10. 回答:讲了一下半连接队列和全连接队列
    11. 追问:能让子进程去负责创建连接,和各自的数据读写,知道惊群效应吗
    12. 回答:不了解
  4. java是怎么做内存分配的,堆区怎么做内存管理的
    1. 回答:堆内存会分成young区和old区,young区又分成eden区和两个surviver,new对象时,会分配在eden区,对象经过gc后分代年龄增加,达到阈值进入old区
    2. 追问:操作系统是怎么做内存管理的
    3. 回答:了解过jemalloc,内存会被分成不同大小的块,比如16KB,32KB,64KB等;用户申请内存时,会找到比申请内存大小大的第一个2次幂KB,如果对应内存大小的没有空闲块,会找更大的块,并进行拆分
    4. 追问:怎么向操作系统申请内存空间
    5. 回答:brk和mmap系统调用,brk申请堆内存,mmap分配文件映射区和匿名映射区
    6. 追问:jvm分代内存管理和操作系统内存管理的区别
    7. 回答:操作系统需要具备各种需求的内存分配,具备更细致的内存分配;JVM的内存管理是为java应用服务的,不需要像操作系统那样进行过于细致的内存管理
  5. 事务的隔离级别有哪些
    1. 回答:读未提交,读已提交,可重复读和序列化
    2. 追问:MVCC在哪个级别
    3. 回答:可重复读
    4. 追问:MVCC实现原理
    5. 回答:利用Read View结构和数据记录中的txn_id和roll_pointer,在事务开启时,记录Read View,并通过其中的数据找到可见的数据版本
    6. 追问:undo_log和redo_log的功能
    7. 回答:undo_log是用来做事务回滚,redo_log是用来做数据恢复
    8. 追问:了解MySQL多机高可用方案
    9. 回答:针对读多写少的场景,主机器负责写操作,从机器负责读操作,数据由主机器同步到从机器;针对写多读少的场景,可以进行分库分表
  6. 编程:有序数组循环位移之后,查找target数字的索引,不存在返回-1
历史好文:
这个月,太多惊喜了!!!
上岸字节了!分享一些 idea
阿里问的相当基础!
腾讯面试体验倍儿好
感觉被榨干了,被美团拷打一小时!
百度不问我项目,全程基础拷打,真扎心!
继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存