-
Collectors.groupingBy可用于分组统计,如按部门统计员工数量:Map<String,Long>countByDept=employees.stream().collect(Collectors.groupingBy(Employee::getDepartment,Collectors.counting()));
-
Java内置的javax.xml.parsers默认遵循XML规范,对合法但可疑的字符(如孤立>)不报错;若需检测非规范结构(如</tag>>),必须在解析后主动校验内容,无法仅靠配置提升“严格性”。
-
Java构造方法名必须与类名大小写严格一致,无返回类型(包括void),不可在接口、抽象类或枚举中定义;可重载但不可重写;显式定义任一构造后默认无参构造即消失。
-
getOrDefault能避开NullPointerException,因为它在key不存在时直接返回指定默认值而非null,避免后续调用空对象方法触发异常;但需注意key为null、泛型擦除导致的类型不匹配及默认值语义歧义等问题。
-
Files.lines()流式读取大文件更简洁且默认UTF-8,但须try-with-resources防句柄泄漏;需处理编码探测、NUL截断、大小写匹配、滑动窗口上下文、正则预编译、行号控制及高亮安全替换。
-
本文详解如何正确处理JSON字符串中嵌套JSON(即JSON内容以转义字符串形式存在)的反序列化难题,重点解决Jackson因未正确转义导致的解析异常,并提供可落地的代码示例与最佳实践。
-
continue用于for循环中跳过当前迭代,需在if内使用以跳过特定i值,仅作用于当前循环;Java不支持带标签的continue。
-
通过修改server.xml的appBase属性或使用独立context.xml文件可自定义Tomcat部署路径,结合IDE配置实现热部署,提升开发效率;生产环境应关闭自动部署、隔离部署目录并限制权限以保障安全。
-
非静态同步方法锁this对象,静态同步方法锁类的Class对象;锁对象不一致会导致线程安全失效,应统一锁粒度并避免误用字符串或公共常量作锁。
-
LinkedBlockingQueue的“增加方法”包括add(失败抛IllegalStateException)、offer(失败返回false)、put(满则阻塞)和带超时的offer(超时返回false),均线程安全,默认无界。
-
JDK6的substring共享原字符串char[],导致内存泄漏;JDK7u6+改为复制新数组,彻底解耦。可通过检查value.length是否等于原数组长度判断是否安全,兼容方案是newString(s.substring(start,end))。
-
CountDownLatch构造参数必须为正整数,因内部volatileint计数器要求非负,负数抛IllegalArgumentException;0虽合法但导致await立即返回,易误判任务完成。
-
Arrays.asList返回的List不可修改,底层为固定大小的Arrays$ArrayList,调用add/remove抛UnsupportedOperationException;需可变列表应显式拷贝为newArrayList(Arrays.asList(...))或使用Arrays.stream().collect(Collectors.toList())。
-
i++与++i字节码差异在于栈操作:i++需暂存旧值(iload→iinc→istore/dup),++i直接取新值(iload→iinc→iload),赋值结果取决于“旧值/新值”被赋给左边,且禁止单表达式多次自增。
-
成员变量属于对象,静态变量属于类本身;前者各对象独立副本、堆内存分配、需实例访问、可被子类隐藏;后者所有对象共享、方法区分配、可类名访问、仅能被隐藏、静态方法不可直接访问。