本文共 2680 字,大约阅读时间需要 8 分钟。
作为一名技术面试官,我在面试中收集并整理了大量的面试题目。这些题目涵盖了Java基础、多线程、Spring、Redis、MySQL、Kafka、Zookeeper等多个技术领域。希望这些内容能帮助准备面试。
JDK 和 JRE 的区别
JDK(Java Development Kit)是开发工具套装,包含JRE(Java Runtime Environment)和开发工具如IDE、编译器等。JRE是运行时环境,负责执行Java程序。== vs equals()
== 比较对象的引用地址,equals() 比较对象的值,!= 用于不等式判断。hashCode() 和 equals() 的关系
hashCode() 用于计算对象的哈希值,equals() 判断两个对象是否相等。两个对象的 hashCode() 相同并不意味着 equals() 一定为 true,但如果 equals() 为 true, hashCode() 必须相同。final 的作用
final 可以修饰类、方法或变量,分别具有不同的作用。Math.round(-1.5)
返回-1,因为round函数会将-1.5向下取整到最近的整数。String 属于基础数据类型吗?
String 不是基础数据类型,属于对象类型。Java中操作字符串的类
StringBuffer 和 StringBuilder 用于 mutable 操作,String 用于 immutable。String 对比
String str1 = "i"; String str2 = new String("i"); 两个对象不同,str1 == str2 为 false,但 str1.equals(str2) 为 true。如何反转字符串
可以通过new StringBuilder(str).reverse().toString()。String 常用方法
length(), charAt(), substring(), replace(), toUpperCase() 等。抽象类特点
必须声明至少一个抽象方法。抽象类和普通类的区别
抽象类没有具体实现,普通类可以是 concrete 或 abstract。抽象类是否可以使用 final
不能,final 类不能继承。接口和抽象类的区别
接口中的方法没有实现,抽象类有抽象方法。IO流类型
Java IO 包括FileInputStream、BufferedReader、PrintWriter 等。JVM组成
包括类加载器(Class Loader)、方法区、虚拟机栈、程序计数器、值类型堆、本地方法堆等。运行时数据区
包括虚拟机栈(method stack)、程序计数器(PC)、值类型堆(operand stack)、方法区(constant pool)、变量值表(variable value table)。堆栈区别
堆用于对象分配,栈用于方法调用和变量存储。队列与栈
栈先进后出,队列先进先出。双亲委派
JVM加载类时,首先检查父类 loader,如果找不到再委派给 super loader。类加载过程
垃圾回收算法
标记-清除、复制算法、标记-整理。垃圾回收器
CMS(并发标记-清除)、G1(垃圾第一)、新生代收集器。jvm 调优工具
jconsole、jvisualvm、gclog 等。并行与并发
并行是指程序在同一时间内执行多个任务,依赖关系较少。并发是指程序在同一时间内执行多个任务,依赖关系紧密。线程与进程
线程是进程的子任务,进程是资源分配的单位。守护线程
用于长时间运行的应用,释放资源或关闭应用。创建线程的方式
new Thread(), Thread.start(), Executor 等。Spring 的优势
解耦业务逻辑和技术实现,简化配置,提高可维护性。AOP 和 IOC
AOP(面向切面编程)用于日志、事务等横切关注点,IOC(控制反转)用于依赖注入。Spring注入方式
@Autowired、@Inject、@Component 等。Bean的线程安全性
单例 bean 线程安全, prototypes 是不线程安全的。Bean作用域
singleton、prototype、request、session、global session。自动装配方式
XML、注解、注件检测(@Component)。Redis是什么
开源键值数据库,支持高性能、持久化、分布式。Redis功能
支持字符串、列表、哈希、集合、有序集合等数据结构。Redis与Memcached的区别
Redis支持事务、持久化、复制、分布式锁等,Memcached仅为缓存层。缓存穿透解决方案
布隆过滤器、数据库缓存层。三范式
自增表问题
假设表id 自增,删除两个记录后重启数据库,插入新数据,id 依次递增。获取数据库版本
执行SHOW VARIABLES LIKE 'version%'。ACID
原子性(一系列操作不可逆),一致性(事务中的操作一致),独立性(事务与其他操作无关),持久性(持久化)。Kafka脱离Zookeeper
从Kafka 0.9及以后版本支持单独运行,不再依赖Zookeeper。Kafka数据保留策略
配置log.retention policies,例如删除超过 7 天或 10 GB 的数据。Kafka性能瓶颈
消息生产速度受broker数量和分区影响,消费速度受partition和消费者数量影响。Zookeeper作用
提供分布式的配置管理、命名服务、路径共享。集群部署
可以采用单机部署、伪节点部署、成熟节点部署等。Zookeeper节点类型
主节点、副节点、读节点。Zookeeper故障恢复
集群中一个节点故障后,业务会在其他节点上继续运行。以上是我的面试准备内容,涵盖了Java技术栈的多个方面。如果需要进一步补充或具体问题,请随时告知!
转载地址:http://fvksz.baihongyu.com/