-
答案:通过Socket编程实现Java群聊功能,服务端用多线程管理客户端连接并广播消息,客户端双线程处理收发,使用线程安全集合存储输出流,确保消息实时同步。
-
thenCombine的触发条件是两个CompletableFuture都正常完成,任一未完成或异常完成则返回的Future保持未完成;合并函数按(本体结果、other结果)顺序执行,且默认同步运行。
-
nav是HTML5语义化导航元素,用于包裹网站级或页面级主要导航链接,提升SEO和无障碍访问;应配合ul/li列表使用,并通过aria-label区分多个nav的用途,样式与交互需由CSS/JS实现。
-
Collections.singletonMap()返回不可变Map,所有修改操作(如put、remove)均抛UnsupportedOperationException;它接受null键值,而Java9+的Map.of()禁止null,且二者实现与序列化特性不同。
-
n&1能判断奇偶是因为二进制最低位决定奇偶性:偶数末位为0,奇数末位为1;该操作在补码下对正负数均可靠,且为单周期硬件指令,比%2更高效。
-
实现轻量级IoC容器自动发现Bean的核心是准确扫描包下所有类:先用线程上下文类加载器获取file/jar资源,解码路径,再分别通过File或JarFile遍历.class文件,过滤内部类/接口/枚举,识别@Component及其派生注解,生成BeanDefinition并注册;最后实例化与依赖注入完成闭环。
-
并行排序核心是分治任务真正并行化,首选归并排序配合ForkJoinPool:按CPU核数设线程数,小规模回退Arrays.sort(),切片拷贝防冲突,合并用新数组,监控CPU、GC及窃取次数验证效果。
-
IllegalStateException用于对象状态不满足方法执行条件时抛出,如未初始化调用、重复关闭资源、迭代器非法操作等,应提供明确错误信息以提升调试效率,区别于参数错误的IllegalArgumentException和空指针异常,常结合状态检查用于资源管理与状态机设计。
-
普通代码块在方法内执行、限于局部作用域;构造代码块在每次创建对象时、构造器前执行,用于实例通用初始化;静态代码块在类加载时仅执行一次,用于类级资源初始化。
-
不能。finally块仅保证执行,不自动关闭资源;需手动在其中用try-catch分别关闭各资源并判空,避免异常中断清理;Java7+推荐try-with-resources,但老代码仍依赖正确编写的finally。
-
数组实现拓扑排序检测依赖环的核心是Kahn算法:用入度数组记录各变量被依赖次数,邻接表数组记录其直接依赖项;通过静态数组模拟队列进行BFS式剥离,最终若处理节点数cnt等于n则无环,否则存在环。
-
JavaIO异常处理需区分检查型异常(如IOException)与运行时异常,优先用try-with-resources自动释放资源,按子类精细化捕获(如FileNotFoundException、SocketTimeoutException),避免空catch或笼统捕获Exception。
-
execute()提交Runnable时异常会直接穿透至线程层面,触发默认UncaughtExceptionHandler打印堆栈并终止工作线程,线程池随后新建线程补位;因Runnable.run()不支持throws,unchecked异常未捕获即导致线程立即终止,这是ThreadPoolExecutor的主动设计而非bug。
-
MemoryLayout默认不按C对齐,因其是声明式描述且不隐含ABI规则;C结构体对齐由编译器依平台和默认对齐数动态计算,而MemoryLayout.structLayout()若未显式调用.withByteAlignment(n)则仅按字段自然大小对齐,忽略结构体总大小需为最大对齐数整数倍的规则,导致字段错位、越界或崩溃。
-
Java中Stack类不推荐使用,因其是JDK1.0遗留类,违背面向对象原则,继承Vector导致语义混乱、同步开销大;官方推荐用Deque接口及ArrayDeque实现替代,性能更优、语义更清晰。