携程后端开发实习面试题汇总
《面试题目》
1、Java有哪几种基础数据类型,其中哪些有对应的包装类。 2、JVM的内存模型? 3、Integer a=1存在哪部分,Integer a=1和Integer a=100有什么区别吗? 4、讲一下有哪些垃圾回收算法及其原理。 5、有哪些垃圾回收器? 6、新生代复制几次会进入老年代? 7、访问Redis为什么快?什么是I/O多路复用? 8、Redis有哪些数据类型?Zset的底层数据结构,跳表的原理。 9、Redis存储时内存不够了怎么办? 10、怎么使用Redis实现分布式锁,Redisson实现了哪些功能和原理(看门狗、可重入)? 11、讲一下Redis的持久化(AOF、RDB及其混合模式)。 12、数据库索引的数据结构,对比B树和B+树。 13、索引失效的场景,隐式类型转换对索引的影响。 14、数据库调优,索引优化。 15、讲一下数据库的undo log,redo log,binlog。创建记录时先写哪一个? 16、手撕Hot100:最长回文子串。
《参考解析》
- Integer常量池:Integer在-128到127之间会使用缓存,超出范围则会new新对象。存储在堆内存的常量池中。
- Redis分布式锁:Redisson通过Lua脚本保证原子性,看门狗(Watchdog)机制用于自动续期,防止业务执行时间过长导致锁过期。
- B+树优势:B+树非叶子节点不存数据,磁盘IO更少;叶子节点形成双向链表,适合范围查询。
- MySQL日志顺序:先写undo log(保证原子性),再写redo log(保证持久性)。
- 索引失效:字段类型不匹配会触发隐式转换,导致索引失效。字符串与数字比较时,通常会将字符串转为数字进行比较。