-
JAXP够用但有局限:作为规范接口层,其默认配置保守,不校验DTD、不防护外部实体、不支持流式写入,小数据量解析可行,安全与性能场景需补充配置或换用SAX/StAX等方案。
-
ClassCastException发生在运行时,当编译通过但实际对象类型与目标类型不兼容时;例如Parentp=newChildA()后执行(ChildB)p会抛出该异常。
-
依赖注入是控制反转的具体实现形式,控制反转是更高层级的设计思想:前者通过构造函数、属性或方法注入依赖,后者将对象生命周期与依赖关系的控制权移交外部容器统一管理。
-
preHandle适合鉴权和参数预处理,postHandle仅在Controller成功执行后调用且不处理异常,afterCompletion无论成败均触发并可捕获异常;路径匹配需用PathPattern风格如/api/**;读取请求体须用ContentCachingRequestWrapper;拦截器必须由Spring容器管理而非new创建。
-
Map接口用于存储键值对,提供put、get、remove等方法进行增删改查;通过keySet、values、entrySet实现遍历操作。
-
Future.get(long,TimeUnit)超时仅终止等待而非任务本身,因任务线程阻塞时不响应中断;cancel(true)是否生效取决于任务是否检查并处理中断信号。
-
Java中Lambda表达式可捕获外部变量实现闭包,但局部变量需为有效final,而实例与静态变量可自由访问,保障线程安全与简洁性。
-
Netty主从Reactor架构通过EventLoop串行化替代线程池实现线程安全,bossGroup仅需1线程负责accept,workerGroup默认CPU×2负责IO处理,Channel绑定固定EventLoop保障无锁。
-
分布式限流算法的选择需根据业务需求和系统特性进行权衡。1.令牌桶允许突发流量,适合短暂高并发场景,通过Redis+Lua实现令牌生成与消耗的原子操作;2.漏桶以恒定速率处理请求,输出平滑但不适用于突发流量,可通过Redis队列模拟实现;3.计数器分为固定窗口和滑动窗口,后者更精确但实现复杂,适合对限流精度要求高的场景;选择时需考虑一致性、性能开销、容错性、突发流量容忍度及实现复杂度;使用Redis时需防范单点故障、网络延迟、Lua脚本复杂度过高等问题,并通过压测评估吞吐量、延迟和资源消耗,结合监控确保限流
-
最轻量Java控制台通讯录用ArrayList<Contact>存数据、Scanner交互,Contact需重写equals/hashCode,输入统一用nextLine().trim()防空格和换行残留,搜索用toLowerCase().contains()支持模糊匹配,退出不保存数据。
-
Java异常处理通过Throwable体系实现,分为Exception和Error;Exception又分检查与非检查异常,前者需显式处理,后者如RuntimeException可不处理。异常由throw抛出,沿调用栈传播,由try-catch捕获,finally确保资源释放,或使用try-with-resources自动管理;JVM负责查找处理器、构建堆栈轨迹,未捕获则终止线程。
-
ThreadLocal内存泄漏的根本原因是其内部的ThreadLocalMap中键为弱引用、值为强引用,当ThreadLocal实例被回收后,值仍无法被释放,导致内存泄漏。1.ThreadLocal的每个线程都有一个私有ThreadLocalMap,其中键是ThreadLocal实例的弱引用,值是强引用;2.当外部对ThreadLocal实例的引用消失时,GC会回收该实例,但值仍存在,形成键为null的无效条目;3.若线程为长生命周期(如线程池中的线程),这些无效条目将持续占用内存,最终引发内存泄漏;4.
-
装饰者模式用组合代替继承,通过实现同一接口并持有被装饰对象引用来动态增强行为;典型案例如JDK中InputStream系列装饰器;常见错误包括错误继承导致ClassCastException、漏写equals/hashCode、空指针、资源未复用等。
-
Comparator接口用于定义外部排序规则,通过compare方法返回负数、0或正数决定元素顺序,支持匿名类、Lambda和方法引用三种写法,并可传入Collections.sort、Arrays.sort或TreeSet等实现灵活多条件排序。
-
怎么看.class文件的魔数和版本号直接用十六进制查看器打开.class文件,前4字节一定是0xCAFEBABE,这是JVM识别类文件的硬性标志;紧接着4字节是版本号,按大端序存储,前2字节为主版本号(minorversion),后2字节为次版本号(majorversion)。实操建议:Linux/macOS下用xxd-c16-l16MyClass.class,看第1行前16字节,cafebabe后面两个字节(第5–6字节)是m