百度提前批 Java 一面 60min
项目+八股+算法(简单)
很好奇为什么现在还有提前批的面试,这一次的面试体验就一个字,莽村的莽,全程速通八股背诵(我的语速比较快,答了很多)
项目:主要问了下项目设计,用到的技术栈。没有太多延伸的东西,可以直接化为八股;
八股主要内容:
- Thrift源码,HTTP与Thrift 的区别(说了下IDL,反射调用Client)。
- epoll、poll、select说的是什么(我觉得这个真没必要背每个具体的执行过程,重点要答出IO多路复用,同时监视多个文件描述符,当事件准备就绪时即可进行相应的读写操作)。
- Nginx使用,负载均衡算法(轮询,随机,流量平均,加权,IP哈希),Nginx如何实现自动故障转移。(没答上,只是简单用过做router。实际上Nginx是有默认的超时重试机制的通过proxy_next_upstream参数设置。但是这样会有一个问题,通过超时重试确实最后请求能够被处理,但是每次都会多出一次超时的访问,无法自动摘除。这里可以使用一个由淘宝开发的开源插件nginx_upstream_check_module,可以自动主动心跳检测,进行服务摘除,其实等同于Nacos)
- JUC常用关键字及类,线程池参数(一般顺带说下工作原理)。
- volatile关键字作用。(读写可见,禁止指令重排)
- Spring如何解决循环依赖,三级缓存中存的是什么。(好久没看Spring的八股,这个答得不好,三级缓存分别是完整对象、实例化对象、对象工厂-三级缓存里面实际上是一个Lambda函数。在不涉及循环引用的情况下,二级缓存和三级缓存压根用不到,在doCreateBean当中有个判断当前对象是否已经处于正在创建的流程中了,说明循环创建了,这样就会将三级缓存和二级缓存启用。此时再依赖注入创建其他对象,再再依赖注入的时候就能从三级缓存中找到对应的函数,生成临时对象放在二级缓存中,并且此时会将AOP提前触发。这个核心流程要清晰... 又看了看源码发现跟之前记得差别很大...)
- JVM内存模型,如果一个项目中频繁大量创建寿命短的对象,如何优化JVM。(这个优化策略不太清楚。可以从以下几点回答?对象复用、栈分配、逃逸分析、年轻代垃圾回收器?)
- MySQL执行过程,索引如何优化。(解析-语法树,优化-选择索引,执行器执行)(索引覆盖,前缀索引,联合索引,避免失效和冗余)
算法题:合并k个链表,秒