小红书|Java实习|一面
一面(22年1月20日)
-
介绍项目(问了我最重要的项目之后,问实习做了什么和技术栈,我说实习做的业务比较多,就没展开讲)
-
介绍一下Spring的循环依赖是怎么解决的(高频面试题Spring在实例化一个bean的时候,首先递归的实例化其所依赖的所有bean,直到某个bean没有依赖其他bean,此时就会将该实例返回,然后反递归的将获取到的bean设置为各个上层bean的属性。)
-
Redis是内存数据库,如果断电或者宕机数据怎么恢复
-
AoF和RDB的具体流程
-
AoF和RDB是先写日志还是先写内存
-
RDBfork子进程去写日志的时候,如果宕机了是不是有数据就丢失了(面试官说虽然可能会有丢失,但是也有保证不丢失的解决方案)
-
如果单key过热怎么处理(查了一下是经典面试题,可惜没看过qaq)
-
并发编程中我们可以进行无锁编程,其中juc包中有一些封装好的类可以使用,你对哪些类比较了解?(答了原子更新基本类型、原子更新引用类型,比如AtomicInteger。)
-
AtomicInteger是怎么更新保证原子性的?(答原理是CAS,具体调用的是 unsafe 实例的 getAndAddInt 方法实现原子更新)
-
讲一下CAS的操作过程(新值,旧值,内存值,讲概念)
-
怎么解决CAS时可能出现的ABA问题(使用一个计数器每次进行更新时递增)
-
JVM:如果频繁出现Full GC该怎么排查(不知道怎么答,想出来一个看jvm内存状态)
-
面试官问Full GC会收集的是那些对象,(大对象,年龄大)
-
面试官提醒解决Full GC,我们可以减少对象的频繁创建,那么有一个我们接请求需求创建对象的场景,可以怎么优化?(我想的是创建一个类似单例,面试官说不能用一个对象,因为每次对象的内容都不一样)
-
没想出来,面试官说可以用池化思想,然后问还有哪些利用了池化思想(线程池、数据库连接池)
-
IO多路复用,介绍一下(select、poll、epoll的区别),基于epoll的NIO和基于NIO的Netty
-
写个题(全排列)
-
gRPC,diRPC(滴滴自研)、Thrift和Dubbo各有什么优缺点,如何选型