-
StringBuilder比+拼接快,因其内部维护可变char数组,append()复用内存,仅扩容时新建数组;而String不可变,每次+都生成新对象,增加GC压力。
-
安全捕获异常关键变量需在异常发生现场提取:优先用自定义异常构造参数传入业务ID;避免反射、toString()等高危操作;集合只记size和前3元素;时间转ISO格式;MDC存简单类型上下文并及时清理。
-
peek是Stream的中间操作,用于调试时查看中间元素而不改变数据流。与map不同,peek不转换元素;与forEach不同,forEach是终止操作。常见误区是忽略Stream惰性求值,缺少终止操作时peek不会执行。使用peek可打印每步流转的元素,如过滤、映射前后的值,帮助定位问题。处理对象时可通过自定义输出关键字段提升可读性。注意事项:仅用于调试,避免修改状态,确保有终止操作,不依赖并行流中顺序。推荐结合日志框架使用,合理利用peek能显著提升Stream链式调用的可观察性与调试效率。
-
CMS、G1、ZGC性能演进聚焦停顿可控性、大堆适应性、碎片治理:CMS“尽量少停”但碎片致FullGC不可控;G1实现“可设上限”停顿;ZGC迈向“几乎不停”。
-
公平锁按线程等待时间顺序分配锁,非公平锁允许插队;2.公平锁通过newReentrantLock(true)创建,保证FIFO,避免饥饿但性能较低;3.非公平锁为默认方式,直接尝试CAS获取锁,吞吐量高但可能引发线程饥饿;4.synchronized是非公平锁;5.非公平锁因高效成为默认推荐,选择取决于公平性与性能权衡。
-
不能只用instanceof判断类型,因其破坏equals对称性;应使用getClass()确保同一具体类;ID为null时须用Objects.equals安全比较;忽略其他字段需严格依据业务契约;equals与hashCode必须一致且仅基于id。
-
ArrayBlockingQueue是线程安全的有界阻塞队列,基于数组实现,使用ReentrantLock保证同步,创建时需指定容量且不可变,支持公平与非公平策略;提供add、offer、put等入队方法,其中put在队列满时阻塞,适合生产者;提供poll、take、peek等出队方法,其中take在队列空时阻塞,适合消费者;常用于生产者-消费者模型,如任务调度与线程池,需注意合理设置容量与处理中断异常。
-
System.currentTimeMillis()返回自1970-01-0100:00:00UTC起的毫秒数,是无时区信息的Unix时间戳,非日历时间;它轻量高效但易因时区、分布式时钟漂移引发错误。
-
在web.xml中配置404和500跳转页面需将<error-page>作为<web-app>直接子元素,配合<error-code>和<location>(路径以/开头、相对于Web根目录);SpringBoot中应使用ErrorController替代web.xml,避免JSP路径错误、容器禁用JSP或SpringMVC拦截导致失效。
-
Map.merge(word,1,Integer::sum)是词频统计的正确用法,它原子性地实现“有则叠、无则建”,避免NPE和并发丢失;勿用get+put组合或错误lambda,慎混用compute。
-
Java中“常量”实为publicstaticfinal字段,需同时满足public、static、final;final仅保证引用不可变,不保证对象内容不可变;多值常量优先用enum。
-
<p>Java注释不会被编译进class文件;//和//在编译时被javac完全丢弃,仅Javadoc注释(/*/)供javadoc工具提取生成API文档,而注解是否进入字节码取决于@Retention策略。</p>
-
<p>-Xlog:gc是JDK9+替代-XX:+PrintGCDetails的标准做法,支持可控、可过滤、可重定向的GC日志,需显式指定输出路径与时间精度标签,生产环境推荐配置为-Xlog:gc:file=/data/logs/gc.log:time,uptime,level,tags:filecount=32,filesize=64m。</p>
-
size()方法返回集合当前元素个数,类型为int;它不表示容量或内存大小,时间复杂度O(1),并发集合弱一致,数组无该方法而用length字段。
-
答案是掌握Java循环结构需理解for、while和do-while的执行逻辑,for适用于已知次数的循环,其初始化、条件判断和更新操作集中,结构清晰。