Java中级开发必背面试题(一)

createh52周前 (04-15)技术教程5

一、Java基础核心

  1. 1. 面向对象特性
    o 封装:隐藏对象内部细节(如私有属性),通过公有方法操作数据。例如用private限制字段访问,提供getter/setter方法。
    o 继承:子类复用父类属性和方法(extends关键字),但Java不支持多继承,可通过接口实现。
    o 多态:同一方法在不同对象中有不同实现,如方法重写(子类覆盖父类方法)和接口实现。
    o 常见问题:重载(Overload)与重写(Override)区别?抽象类与接口的应用场景?
  2. 2. 集合框架
    o ListArrayList基于动态数组实现,查询快但增删慢;LinkedList基于双向链表,增删快但查询慢。
    o Map
    o HashMap:非线程安全,允许null键值,通过链表+红黑树解决哈希冲突。
    o ConcurrentHashMap:分段锁(JDK7)或CAS+synchronized(JDK8)实现线程安全。
    o 常见问题:HashMap扩容机制?HashTable与ConcurrentHashMap区别?
  3. 3. 多线程与并发
    o 线程创建:继承Thread类或实现Runnable接口,后者更灵活(可避免单继承限制)。
    o 线程安全
    o synchronized:锁对象或方法,保证原子性但可能引发阻塞。
    o volatile:保证可见性,但不保证原子性(如计数需配合CAS)。
    o 线程池:通过ThreadPoolExecutor配置核心线程数、队列类型等,避免频繁创建线程的开销。
    o 常见问题:线程生命周期状态?死锁的四个必要条件?

二、JVM与内存管理

  1. 1. 内存结构
    o :存放对象实例,分为新生代(Eden、Survivor区)和老年代。
    o 方法区:存储类信息、常量池(JDK8后由元空间实现)。
    o :存放方法调用的局部变量和操作数栈。
  2. 2. 垃圾回收
    o GC算法:标记-清除(内存碎片)、复制算法(年轻代)、标记-整理(老年代)。
    o GC Roots:包括虚拟机栈引用的对象、静态变量、常量等。
  3. 3. 类加载机制
    o 双亲委派模型:类加载请求先由父类加载器处理,避免重复加载(如自定义String类无法覆盖JDK的)。
    o 加载过程:加载→验证→准备→解析→初始化。
  4. 4. 常见问题
    o OOM(内存溢出)如何排查?
    o 强引用、软引用、弱引用、虚引用的区别?

三、数据库与SQL优化

  1. 1. 事务与隔离级别
    o ACID特性:原子性、一致性、隔离性、持久性。
    o 隔离级别:读未提交→读已提交→可重复读→串行化(MySQL默认可重复读)。
  2. 2. 索引优化
    o B+树索引:适合范围查询,InnoDB引擎的聚簇索引按主键顺序存储数据。
    o 覆盖索引:查询字段全部在索引中,避免回表操作。
  3. 3. 分库分表
    o 水平分表:按时间或哈希将数据拆分到多张表(如订单表按月拆分)。
    o Sharding策略:一致性哈希算法减少数据迁移影响。
  4. 4. 常见问题
    o SQL执行慢如何排查?(EXPLAIN分析执行计划)
    o MyBatis中#{}${}的区别?

四、框架与设计模式

  1. 1. Spring框架
    o IoC容器:通过XML或注解管理Bean的生命周期和依赖注入(如@Autowired)。
    o AOP原理:动态代理(JDK Proxy或CGLIB)实现日志、事务等横切关注点。
  2. 2. 设计模式
    o 单例模式:双重检查锁实现线程安全(需加volatile防止指令重排序)。
    o 工厂模式:通过Factory类解耦对象创建(如Spring的BeanFactory)。
  3. 3. 常见问题
    o Spring事务传播行为有哪些?(如REQUIRED、REQUIRES_NEW)
    o MyBatis一级缓存和二级缓存的区别?

五、分布式与微服务

  1. 1. 分布式锁
    o Redis实现:通过SETNX命令和超时机制防止死锁。
    o Zookeeper实现:基于临时有序节点监听机制。
  2. 2. 消息队列
    o 消息重复消费:通过幂等性设计(如数据库唯一索引)或业务状态判断解决。
  3. 3. 常见问题
    o CAP理论如何理解?(一致性、可用性、分区容忍性三选二)
    o 服务熔断与降级的区别?

六、项目经验与系统设计

  1. 1. 项目描述
    o STAR法则:描述项目背景(Situation)、任务(Task)、行动(Action)、结果(Result)。
    o 技术亮点:如使用线程池优化接口响应时间、通过Redis缓存降低数据库压力。
  2. 2. 系统设计
    o 高并发设计:限流(令牌桶算法)、降级(返回默认数据)、异步处理(消息队列)。
  3. 3. 常见问题
    o 如何设计一个秒杀系统?
    o 遇到过的技术难点及解决方案?

相关文章

学习java没规划?2020最新路线图,大堆资源秒变大神

为什么编程就跟数学一样弯下头捡铅笔从此就听不懂?为什么学完之后感觉简单,刷题却像刷人生?为什么这个规划图这么受欢迎,这么多人看?为什么这个小图能在我们官网占据这么重要的位置?请观看本文《黑马程序员——...

Java面试高频问题大揭秘

Java面试高频问题大揭秘各位小伙伴,今天咱们来聊聊Java面试那些事儿!作为一个经常被问及的热门话题,本文将为大家全面梳理Java面试中的高频问题,从基础到高级,力求让你在求职路上稳操胜券。准备好了...

面试官, 你Java项目是如何实现读写分离的?Java代码实战

面试官, 你Java项目是如何实现读写分离的?Java代码实战首先,我需要回忆一下读写分离的基本概念和应用场景。读写分离主要是为了提升数据库的扩展性,通过将读操作和写操作分发到不同的数据库节点,减轻主...

关于Java 工程师面试,这几个点注意了,offer拿到手软

很多朋友经常发私信,跟我吐槽 Java 面试时遇到的问题(我选了几个经典的问题):Java 技术能力自以为还不错,但是到了面试的时候就凉凉;对面试官提出的问题感觉很懵,不知道面试官要问啥;有的面试官,...

javaweb学习路线

javaweb,一定要学会看源码代码,了解别人的项目,虽然不是你自己的,你只要能把你需要的技术从项目中抠出来就是你的本事。没有谁说,没有一点相似的项目,不存在的。多收集素材,多见点新东西,别用的时候,...