面试官:今天咱们来聊聊Java核心知识。
第一轮提问
- 面试官:说说Java的跨平台原理?
- 谢飞机:靠JVM,把字节码转成机器码!
- 面试官:那JVM内存模型怎么划分?
- 谢飞机:方法区、堆、栈、程序计数器...
- 面试官:HashMap线程不安全怎么解决?
- 谢飞机:用Collections.synchronizedMap包装!
第二轮提问
- 面试官:Spring的IoC和AOP怎么理解?
- 谢飞机:IoC是让Spring管理对象,AOP是切面编程...
- 面试官:Redis支持哪些数据类型?
- 谢飞机:String、List、Set、Hash...
- 面试官:MySQL索引失效场景有哪些?
- 谢飞机:模糊查询前缀%...(答错)
第三轮提问
- 面试官:Docker和虚拟机的区别?
- 谢飞机:Docker更轻量,直接共享系统内核!
- 面试官:说说工厂模式和策略模式的区别?
- 谢飞机:工厂创建对象,策略动态切换算法...
- 面试官:最后回家等通知吧。
答案详解
- JVM跨平台:Java代码编译为字节码,JVM通过解释器将字节码转为本地机器码,实现跨平台。
- JVM内存模型:分为方法区(存储类信息)、堆(对象实例)、栈(方法调用)、程序计数器(记录行号)、本地方法栈(Native方法)。
- HashMap线程安全:可使用ConcurrentHashMap(分段锁)或Collections.synchronizedMap(外部加锁)。
- Spring IoC:通过容器管理对象生命周期和依赖关系,避免硬编码耦合。
- Redis数据类型:String、List、Set、Hash、ZSet(有序集合)等,适用于不同业务场景。
- MySQL索引失效:模糊查询以%开头、使用函数操作字段、类型转换等场景会导致索引失效。
- Docker原理:基于Linux容器技术,共享主机内核,实现轻量级虚拟化,相比虚拟机更高效。
- 设计模式:工厂模式关注对象创建,策略模式关注算法动态替换,两者解决不同问题。