-
用XSSF-SAX流式解析替代XSSFWorkbook,内存稳定几MB、速度提升3~5倍;关闭公式计算、跳过隐藏表、只读打开;解析后批量入库,1000~5000行flush一次。
-
用jstack-l<pid>可快速发现死锁,输出末尾显示“Found1deadlock.”即确认;它会列出锁持有者与等待者地址,匹配locked<0x...>和waitingtolock<0x...>即可定位。
-
Java异常国际化通过外部资源(如ResourceBundle或SpringMessageSource)动态加载多语言提示,避免硬编码;需配置多语言.properties文件、正确设置Locale、使用MessageFormat处理参数,并注意堆栈信息不国际化。
-
答案:Java通过Locale和ResourceBundle实现多语言支持。首先创建对应语言的Locale对象,如Locale.CHINA;再使用ResourceBundle加载messages_zh_CN.properties等资源文件,根据用户环境动态获取文本;结合MessageFormat处理带占位符的消息,实现国际化显示。需确保资源文件命名规范且位于classpath中,避免MissingResourceException。
-
启动类加载器不是Java类。它是JVM用C/C++实现的底层组件,无ClassLoader实例,不参与Java继承体系,无法被实例化或重写,仅通过-Xbootclasspath等JVM参数配置,Java9+起被模块化机制取代。
-
Collectors.averagingInt()仅计算整型字段算术平均值并返回double,不能直接生成财务报表;它适用于非金额类整数指标(如数量、天数),但不支持空流且存在浮点误差,财务场景应优先用BigDecimal配合自定义收集器。
-
Java死锁需主动预防:统一按System.identityHashCode()升序加锁、用ReentrantLock.tryLock()实现超时与可中断、避免同步块内调用外部方法,同步块仅做数据操作。
-
Java数组声明有int[]a和inta[]两种语法,语义相同但前者更推荐;初始化分静态(如String[]s={"a"})和动态(如newdouble[5]);访问越界抛ArrayIndexOutOfBoundsException,空引用访问抛NullPointerException。
-
JUC并发工具类解决了传统并发编程中synchronized和wait()/notify()的粒度粗、灵活性差、易出错等问题,1.提供ReentrantLock实现更细粒度的锁控制,支持tryLock、lockInterruptibly等特性;2.通过ExecutorService线程池高效管理线程资源,降低创建销毁开销;3.使用Atomic系列原子类实现无锁线程安全操作;4.利用CountDownLatch、CyclicBarrier、Semaphore等同步器协调复杂线程协作;5.引入Conditio
-
工厂模式与抽象工厂模式解决不同层级创建需求:前者解耦单一产品族,后者支持多产品族组合创建;SimpleFactory适合轻量级同类型实例创建,FactoryMethod适用于框架扩展,AbstractFactory强调产品族一致性协同工作。
-
类加载阶段包括加载、链接(验证、准备、解析)、初始化三步;准备阶段赋静态变量默认值,初始化阶段执行static块和显式赋值,且同一类加载器下仅初始化一次。
-
根本原因是CharsetDecoder仅做字节到字符的严格转换,不处理BOM、编码声明或实际编码与声称编码不符的问题;需先确认真实编码、手动处理BOM、显式设置错误策略,并优先使用高层API。
-
Terminated状态是线程自然终结的标志,仅当run()正常结束或抛出未捕获异常时进入;不可强制设置,stop()等暴力方法已废弃,推荐用interrupt()配合isInterrupted()或volatile标志协作退出。
-
Java将类元数据从永久代移至元空间,旨在解决PermGen内存固定、易OOM、GC耦合度高及职责混乱等问题;元空间基于本地内存按需分配、支持动态扩容与即时回收,提升JVM稳定性、可维护性及对动态语言的支持能力。
-
Files.lines()必须用try-with-resources显式关闭,否则文件句柄泄露易致“Toomanyopenfiles”;正确写法是将Stream声明在try括号内,确保异常或正常退出时自动调用close()释放资源。