java相关 xxx娱先完成再完美1.java python的区别Java 统治企业级后端Spring 生态Python 统治 AI 和运维脚本2.aop用过吗将那些与业务无关却为业务模块共同调用的逻辑如日志记录、事务管理、权限校验封装起来减少重复代码。基于动态代理。如果目标对象实现了接口默认使用JDK 动态代理。如果目标对象没有实现接口使用CGLIB 代理生成子类。3.多线程与线程池场景CompletableFuture异步调用主线程 HTTP 长链接SSE/Emitter非阻塞。线程池参数确定核心考点核心线程数 (corePoolSize)怎么定CPU 密集型计算多CPU 核数 1减少上下文切换。IO 密集型查库、调接口多CPU 核数 * 2或更多因为线程大部分时间在等待 IO需要更多线程来跑满 CPU。其他参数队列长度有界队列防止 OOM、最大线程数、拒绝策略通常用 CallerRuns 或自定义策略。4.多态抽象类了解吗多态同一个接口使用不同的实例执行不同的操作分为编译时多态重载和运行时多态重写方法重载和方法重写接口与实现5.spring特性了解IOC (控制反转)将对象的创建和依赖关系的管理交给 Spring 容器通过DI (依赖注入)实现解耦代码。AOP (面向切面编程)如上所述处理横切逻辑。声明式事务通过Transactional注解管理数据库事务。MVC 架构清晰的分层结构Controller, Service, Dao。springboot约定大于配置6.int Integer 在jvm存储引用7.不停的new对象怎么解决代码细节上如果是循环内的临时对象如 StringBuilder我会将其移出循环并复用或者重置状态。设计模式上如果是全局唯一的工具类使用单例模式如果是数据库连接等重量级资源使用对象池如 HikariCP如果是大量相似的小对象考虑享元模式。JVM 层面利用 JVM 的分代回收机制让短生命周期的对象在新生代被快速回收Minor GC避免过早晋升到老年代导致 Full GC。”1. 为什么要在新生代快速回收Minor GC 很快JVM 把内存分成了新生代和老年代。新生代Young Gen专门存放刚new出来的对象。特点绝大多数对象都是“朝生夕死”的比如循环里的临时变量。回收机制Minor GC因为新生代里 99% 的对象都是垃圾只有 1% 存活。JVM 使用复制算法只需要把那 1% 活着的对象复制到另一边剩下的全部清空。结果速度极快停顿时间通常只有几毫秒用户几乎无感知。2. 什么是“过早晋升到老年代”这是我们要避免的晋升Promotion如果一个对象在新生代里经历了多次 GC 还没死比如被缓存引用了或者生命周期本来就长JVM 就会觉得它“老了”把它移动到老年代。过早晋升如果你不停地new对象且这些对象没有被及时回收比如被放进了一个静态的全局 List 里它们很快就会填满新生代。新生代装不下了JVM 被迫提前把它们送进老年代。3. 为什么会导致Full GC这是灾难性的一旦对象进入了老年代情况就变了老年代Old Gen存放长期存活的对象。特点对象存活率高大部分都不是垃圾。回收机制Full GC当老年代空间不足时比如被那些“过早晋升”的对象填满了JVM 必须触发Full GC。Full GC 会扫描整个堆内存新生代老年代。它通常使用标记-整理或标记-清除算法需要分析所有对象的引用关系。后果速度非常慢可能会造成Stop-The-World (STW)即系统暂停所有业务线程几百毫秒甚至几秒。在高并发场景下如抢票这会导致接口超时、系统卡顿甚至雪崩。8.垃圾回收算法新生代复制算法存活率低老年代标记-清除 标记-整理算法对象存活率高复制成本高
实习面经记录(十三)
发布时间:2026/6/3 7:38:09
java相关 xxx娱先完成再完美1.java python的区别Java 统治企业级后端Spring 生态Python 统治 AI 和运维脚本2.aop用过吗将那些与业务无关却为业务模块共同调用的逻辑如日志记录、事务管理、权限校验封装起来减少重复代码。基于动态代理。如果目标对象实现了接口默认使用JDK 动态代理。如果目标对象没有实现接口使用CGLIB 代理生成子类。3.多线程与线程池场景CompletableFuture异步调用主线程 HTTP 长链接SSE/Emitter非阻塞。线程池参数确定核心考点核心线程数 (corePoolSize)怎么定CPU 密集型计算多CPU 核数 1减少上下文切换。IO 密集型查库、调接口多CPU 核数 * 2或更多因为线程大部分时间在等待 IO需要更多线程来跑满 CPU。其他参数队列长度有界队列防止 OOM、最大线程数、拒绝策略通常用 CallerRuns 或自定义策略。4.多态抽象类了解吗多态同一个接口使用不同的实例执行不同的操作分为编译时多态重载和运行时多态重写方法重载和方法重写接口与实现5.spring特性了解IOC (控制反转)将对象的创建和依赖关系的管理交给 Spring 容器通过DI (依赖注入)实现解耦代码。AOP (面向切面编程)如上所述处理横切逻辑。声明式事务通过Transactional注解管理数据库事务。MVC 架构清晰的分层结构Controller, Service, Dao。springboot约定大于配置6.int Integer 在jvm存储引用7.不停的new对象怎么解决代码细节上如果是循环内的临时对象如 StringBuilder我会将其移出循环并复用或者重置状态。设计模式上如果是全局唯一的工具类使用单例模式如果是数据库连接等重量级资源使用对象池如 HikariCP如果是大量相似的小对象考虑享元模式。JVM 层面利用 JVM 的分代回收机制让短生命周期的对象在新生代被快速回收Minor GC避免过早晋升到老年代导致 Full GC。”1. 为什么要在新生代快速回收Minor GC 很快JVM 把内存分成了新生代和老年代。新生代Young Gen专门存放刚new出来的对象。特点绝大多数对象都是“朝生夕死”的比如循环里的临时变量。回收机制Minor GC因为新生代里 99% 的对象都是垃圾只有 1% 存活。JVM 使用复制算法只需要把那 1% 活着的对象复制到另一边剩下的全部清空。结果速度极快停顿时间通常只有几毫秒用户几乎无感知。2. 什么是“过早晋升到老年代”这是我们要避免的晋升Promotion如果一个对象在新生代里经历了多次 GC 还没死比如被缓存引用了或者生命周期本来就长JVM 就会觉得它“老了”把它移动到老年代。过早晋升如果你不停地new对象且这些对象没有被及时回收比如被放进了一个静态的全局 List 里它们很快就会填满新生代。新生代装不下了JVM 被迫提前把它们送进老年代。3. 为什么会导致Full GC这是灾难性的一旦对象进入了老年代情况就变了老年代Old Gen存放长期存活的对象。特点对象存活率高大部分都不是垃圾。回收机制Full GC当老年代空间不足时比如被那些“过早晋升”的对象填满了JVM 必须触发Full GC。Full GC 会扫描整个堆内存新生代老年代。它通常使用标记-整理或标记-清除算法需要分析所有对象的引用关系。后果速度非常慢可能会造成Stop-The-World (STW)即系统暂停所有业务线程几百毫秒甚至几秒。在高并发场景下如抢票这会导致接口超时、系统卡顿甚至雪崩。8.垃圾回收算法新生代复制算法存活率低老年代标记-清除 标记-整理算法对象存活率高复制成本高