-
Collectors.groupingBy可用于分组统计,如按部门统计员工数量:Map<String,Long>countByDept=employees.stream().collect(Collectors.groupingBy(Employee::getDepartment,Collectors.counting()));
-
Java中byte数组转String必须显式指定编码(如UTF-8)以防乱码,而char数组转String无需编码、是安全的内存复制;反向转换时同样需注意编码一致性与Unicode代理对处理。
-
多态指同一操作作用于不同对象表现出不同行为,通过继承与方法重写实现,父类引用调用子类方法体现多态性;接口定义行为规范,类实现接口提供具体逻辑,接口引用指向实现类对象,实现多态;建议面向接口编程,方法参数使用接口类型,结合工厂模式提升扩展性,使代码更灵活、易维护。
-
答案:Java中Stream.reduce有三种形式,分别用于非空流归约、指定初始值的归约和并行流归约;通过累加器函数实现求和、拼接等操作,结合Optional处理空流,利用combiner支持并行合并,需注意初始值选择与结合律要求。
-
for循环中声明的变量作用域仅限于该for语句块内,循环结束后变量不可访问,这是Java语言规范明确规定的声明作用域规则。
-
Stream.min()报NullPointerException是因比较器访问null字段所致,应使用Comparator.nullsFirst()/nullsLast()安全处理;空流返回Optional,须用orElse()等方法避免NoSuchElementException。
-
使用BigDecimal可避免浮点精度问题,推荐字符串构造如newBigDecimal("0.1"),运算通过add、subtract等方法实现,除法需指定精度和舍入模式,比较应使用compareTo而非equals或==。
-
Phaser更适合动态增减线程数或多轮多阶段同步场景,支持运行时注册/注销参与者,且每阶段可灵活控制参与方;而CountDownLatch不可重置、CyclicBarrier要求固定线程数。
-
线程上下文切换是多线程必然开销,每秒数万次即成性能瓶颈;常见于线程数远超CPU核心数、频繁阻塞(如synchronized争抢、BIO读写)或线程池配置不当,导致CPU空转切换而非执行业务。
-
Java的Math类是java.lang包下的静态工具类,提供绝对值、最值、符号判断、幂运算、开方、指数对数、多种舍入、三角函数及随机数等数学功能,所有方法均无需实例化且遵循IEEE754标准。
-
重写方法必须具有相同的方法签名:方法名、参数列表(类型、数量、顺序)完全一致;返回类型支持协变(子类返回类型为父类返回类型的子类型),但基本类型和void不支持;访问修饰符不能更严格;不能重写final、static、private方法;检查异常声明只能缩小或不变。
-
==比较内存地址,equals()比较内容。String等类重写equals()后可比较逻辑相等性,自定义类需重写equals()和hashCode(),避免null调用,包装类型慎用==。
-
Redis连接池不生效需显式配置LettuceClientConfigurationBuilder并传入poolConfig;entryTtl失效多因序列化器不一致或未启用key前缀;云Redis需用rediss://协议并删除URI路径,推荐分项配置SSL与地址。
-
Ubuntu上安装JDK应避免aptinstalldefault-jdk,因其提供Canonical定制的OpenJDK(如Ubuntu-122.04.1),与Temurin/Zulu等生产推荐版本存在兼容性差异;推荐使用SDKMAN!安装EclipseTemurin或手动解压官方tar.gz包,并确保JAVA_HOME正确指向且被所有服务识别。
-
在Quarkus中,@ConfigProperty无法在字段上直接注入后用于构造函数参数初始化(因字段注入发生在构造之后),正确做法是将配置属性作为@Inject构造函数的参数,由CDI容器自动解析并传入。