-
主线程未捕获非受检异常时会终止并打印堆栈,若无其他非守护线程则JVM退出;子线程异常不影响主线程,可通过Future或异常处理器传递;程序稳定性需靠try-catch和默认异常处理机制保障。
-
JDBC驱动类型主要包括四类,适用场景各不相同。1.Type1(JDBC-ODBC桥接驱动)适用于旧系统或测试环境,依赖本地库,跨平台差,性能较差,现已不推荐使用;2.Type2(本地API部分Java驱动)适合利用数据库原生API的场景,性能优于Type1,但仍依赖本地库,常见如Oracle的OCI驱动;3.Type3(纯Java客户机协议驱动)适用于三层架构企业应用,具备良好跨平台能力,但需部署中间层服务;4.Type4(纯Java直接协议驱动)是主流选择,广泛用于现代应用,具备高性能、跨平台、无需中
-
Dijkstra算法适用于无负权边的单源最短路径问题,通过优先队列优化实现O(ElogV)时间复杂度,使用邻接表存储稀疏图更高效;若存在负权边则需采用Bellman-Ford算法,其能检测负环但时间复杂度为O(V*E);而Floyd-Warshall算法用于多源最短路径,基于动态规划思想,时间复杂度O(V^3),适合节点数较少的图。
-
应避免用异常控制流程,频繁抛出异常会因栈追踪导致性能下降。推荐预判条件代替try-catch校验,如用正则或NumberUtils判断数字格式;自定义异常可重写fillInStackTrace返回this以减少开销;捕获时应优先具体异常,合理使用multi-catch合并处理;延迟构建异常信息,避免无谓的字符串拼接,提升性能。
-
多态允许父类引用接收子类对象,实现通用方法调用。例如playSound(Animalanimal)可接受Dog、Cat等子类对象,运行时自动执行对应重写方法,提升代码复用性与扩展性,符合开闭原则;结合集合可批量处理不同子类,广泛应用于图形绘制、事件处理、支付系统等场景,体现“编译看左边,运行看右边”的动态绑定机制。
-
Iterator是Java中遍历集合的标准方式,提供hasNext()、next()和remove()方法实现安全遍历与删除;其为增强for循环的底层实现,但删除元素时需显式使用Iterator的remove()方法避免ConcurrentModificationException。
-
Collections.frequency用于统计集合中某元素出现次数,接收集合与目标元素,基于equals方法比较,返回int型频次,适用于List、Set等Collection接口实现类。
-
ThreadPoolExecutor是Java线程池核心类,通过构造函数配置核心线程数、最大线程数、存活时间、任务队列、线程工厂和拒绝策略;选用有界队列如ArrayBlockingQueue防资源耗尽,自定义ThreadFactory提升线程识别度,设置CallerRunsPolicy等拒绝策略保障系统稳定,结合业务需求调整参数并监控队列状态以优化性能。
-
秒杀系统核心技术挑战包括瞬时流量洪峰、库存原子性与一致性、用户体验与公平性、系统容错与降级、风控与反作弊。1.瞬时流量洪峰导致数据库连接池耗尽、锁竞争严重;2.库存操作需保证不超卖且最终一致,传统数据库性能瓶颈明显;3.需设计排队机制、快速响应及防刷策略提升用户体验;4.系统局部故障不能影响整体可用性;5.需识别拦截恶意请求确保公平。Redis通过库存预热、原子操作、Lua脚本、分布式锁、消息队列、布隆过滤器等手段有效应对上述挑战。
-
JVM是运行Java程序的核心,提供跨平台能力,由类加载器、运行时数据区、执行引擎组成;内存分为堆、方法区、虚拟机栈、本地方法栈和程序计数器;堆用于存储对象,是GC主要区域,分新生代和老年代;方法区存储类信息、常量等,JDK8后元空间替代永久代;虚拟机栈管理方法调用,本地方法栈服务native方法,程序计数器记录指令地址;垃圾回收基于可达性分析,判断对象存活,通过Serial、Parallel、CMS、G1等收集器回收堆和方法区内存;合理配置-Xms、-Xmx等参数可优化性能;常见问题有内存泄漏、频繁GC
-
增强型for循环是Java中的语法糖,底层对集合使用Iterator、对数组使用索引遍历,简化了代码并提升可读性与安全性;它适用于只读遍历场景,但在需修改集合、获取索引或逆序遍历时存在局限,此时应使用传统for循环或Iterator。
-
Java中的Stream.map用于将流元素按规则转换并返回新流,属于中间操作。它接收Function函数式接口实现类型转换、属性提取等一对一操作,如字符串转大写、提取对象字段、数值解析等,常见示例如map(String::toUpperCase)、map(Person::getName)、map(Integer::parseInt),转换后元素数量不变,不修改原集合,需避免副作用以保证流处理纯净性。
-
Set通过equals和hashCode方法判断元素存在性,HashSet利用hashCode定位再用equals比较,TreeSet通过排序比较,须保证equals与hashCode一致以确保contains正确。
-
Set接口用于存储不重复元素,主要实现类有HashSet、LinkedHashSet和TreeSet;HashSet基于HashMap实现,添加重复元素时忽略操作,不抛异常,元素无序且最多一个null;使用时需重写hashCode()和equals()方法以确保正确去重。
-
异常传递机制指Java中未捕获的异常沿调用栈向上传播,直至被处理或程序终止。1.方法内抛出异常后,若无匹配catch块,则自动向上抛;2.受检异常需显式try-catch或throws声明;3.可通过异常链包装底层异常,保留原始信息;4.finally块始终执行,但其抛出的异常会覆盖原异常,建议避免在其中抛异常。掌握该机制有助于提升代码健壮性与可维护性。