-
Java多线程面试重在实战经验而非背诵;wait()必须在synchronized块中调用,否则抛IllegalMonitorStateException;ConcurrentHashMapJDK8用CAS+单桶锁替代分段锁;线程池拒绝策略中CallerRunsPolicy更防雪崩;ThreadLocal内存泄漏因key弱引用而value强引用未及时清理。
-
Java递归抛出StackOverflowError是因为线程栈空间耗尽:每层递归压入栈帧,超过JVM默认栈容量(如1MB)即崩溃,与逻辑正确性无关,常见于树遍历、嵌套JSON解析等场景。
-
Java环境搭建后系统变慢主因是配置不当。一、JVM内存设置不合理致频繁GC,应合理设定-Xms与-Xmx;二、后台Java服务如更新程序占用资源,需禁用非必要启动项;三、开发工具如IDE高耗资源,应调优其配置并减少自动构建;四、低配硬件或机械硬盘加剧卡顿,建议使用SSD并匹配64位JDK。通过优化参数、关闭冗余进程、监控资源使用,可有效控制性能影响。
-
增强型switch是表达式,必须产出值,故不能用return而需yield;yield专用于提供分支结果,须显式写出且每分支仅一个;混用break会编译错误;仅Java15+支持,低版本运行会抛VerifyError。
-
绝大多数情况下catch块必须记录日志,但仅限真正处理并终结异常传播路径时;业务异常用warn,系统异常用error并保留完整堆栈;避免重复记录、截断堆栈及异步场景日志丢失。
-
NullPointerException最常见,由对null引用调用方法或访问字段引发,须靠预防而非try-catch:用@NonNull、Objects.requireNonNull、Optional及IDE空值分析。
-
URLEncoder仅对URL查询参数值进行application/x-www-form-urlencoded编码,空格转+、中文转%xx,必须指定"UTF-8",不可用于路径或完整URL编码。
-
本文详解在Java中正确移除ArrayList中null元素的多种方法,重点剖析正向遍历删除导致漏删的根本原因,并提供反向遍历、迭代器、StreamAPI等专业级解决方案,附可运行示例与关键注意事项。
-
Java多线程共享数据无标准解,需依读写关系与一致性要求选volatile(仅单写多读简单状态)、AtomicXXX(无锁原子操作)、synchronized/ReentrantLock(复杂临界区)或避免共享(ThreadLocal、不可变对象)。
-
NavigableMap和NavigableSet是Java中支持有序检索的接口,分别扩展自SortedMap和SortedSet,提供lower、floor、ceiling、higher等方法实现邻近元素查找,常用实现类为TreeMap和TreeSet,适用于时间序列、排行榜、范围查询等需高效查找最近匹配项的场景。
-
答案:该联系人分组管理系统基于Java的ArrayList和面向对象设计,包含Contact、ContactGroup和ContactManager三个核心类,实现分组创建、联系人增删改查、按分组或姓名搜索等功能,通过控制台菜单交互,结构清晰,便于扩展文件操作与数据校验等进阶功能。
-
ConcurrentSkipListMap提供线程安全的有序集合,基于跳跃表实现高效并发访问,支持自然或自定义排序,适用于高并发下需保持键序的场景,如优先队列与有序缓存,不支持null键值,迭代器弱一致,性能优于同步包装的TreeMap。
-
MessageDigest不能加密,只生成不可逆的固定长度摘要;SHA-256是推荐算法,MD5和SHA-1已不安全;需注意线程不安全、编码一致性和digest()自动重置状态等关键细节。
-
重量级锁是线程被操作系统挂起并用MutexLock排队的锁机制,触发用户态到内核态切换,开销达数百纳秒至微秒级;表现为jstack中大量BLOCKED线程停在ObjectMonitor::enter或park,且CPU低、吞吐骤降。
-
AudioSystem无法直接播放网络电台URL,因其仅支持WAV/AU/AIFF等本地格式,不解析HTTP也不内置MP3/AAC解码器;MP3流无标准文件头且ICY流含元数据块,需JLayer+手动处理icy-metaint才能稳定播放。