-
绝大多数业务场景下不该自定义CheckedException,应统一使用RuntimeException子类;仅IO等强契约场景才继承Exception;异常命名需体现具体失败场景,构造器须支持errorCode、message、cause全参数,并实现Serializable。
-
Java中通过String类的toLowerCase()和toUpperCase()方法实现字符串大小写转换,返回新字符串而不改变原串。示例:str.toLowerCase()转小写,str.toUpperCase()转大写。单个字符可用Character类的toLowerCase()和toUpperCase()方法。注意大小写转换受Locale影响,建议明确指定如Locale.ENGLISH以避免语言环境差异导致的问题。常用于统一用户输入、字符串比较前处理及格式化输出等场景。
-
JavaJIT通过回边与调用计数器识别热点循环,自动执行展开、向量化和范围检查消除;需避免反射、大循环体、异常等干扰,并用诊断参数验证优化效果。
-
Java接口的核心作用是定义行为契约,实现统一使用、自由替换与组合扩展;其不可替代性在于描述“能做什么”,支持多实现、无状态、高内聚,命名须为能力型形容词,方法应简单明确、避免实现细节,且需保障无感替换与向后兼容。
-
使用File类可基础遍历目录,通过listFiles()获取子项并判断类型输出;2.推荐使用NIO.2的Files.list()或Files.walk()结合Stream实现高效、安全的目录浏览,支持流式处理与异常管理。
-
JavaPattern/Matcher在处理含Unicode字符(如℃、Ω)的字符串时,若正则表达式未正确覆盖目标字符大小写或编码语义,会导致find()误判成功但group()返回空或null,且start()位置偏移——根本原因常是正则逻辑缺陷,而非Unicode编码问题。
-
removeIf方法通过传入Predicate实现条件删除,如删除偶数或年龄小于18的用户,需注意集合可变性、线程安全及原集合被修改的问题。
-
通过封装、多态和职责分离将业务逻辑与代码结构对齐,用领域对象替代贫血模型,以Order.pay()为例实现内聚校验,利用DiscountStrategy多态消除条件分支,拆分大Service为小聚合如UserRegistration,通过方法名validateEligibilityForPromotion等表达业务意图,使代码具备可读性与扩展性。
-
Java反射是JVM提供的标准能力,通过Class对象动态获取类型信息并调用成员,但存在性能开销与安全限制;获取Class有三种方式,访问成员需区分getDeclaredXXX与getXXX,invoke()调用有三处易错点,且反射影响JIT优化。
-
答案:Java中通过staticfinal声明类常量,final声明局部常量,命名全大写加下划线,提高可读性、便于维护、避免魔法数字,注意必须初始化且引用类型仅地址不可变。
-
Arrays.binarySearch搜不到明明存在的元素是因为它仅对已排序数组有效;未排序或降序数组(未配对应Comparator)会导致结果不可靠,返回负数表示插入点编码而非简单“未找到”。
-
ScheduledThreadPoolExecutor不能替代synchronized,因其仅负责任务调度,不提供线程安全;并发问题需靠任务内部同步机制(如锁、ConcurrentHashMap)解决,而非调度时机。
-
happens-before是什么:不是执行顺序,而是可见性契约它不是说「A一定在B前面CPU执行」,而是向程序员承诺:如果Ahappens-beforeB,那么A对共享变量的修改,对B一定是可见的;且B不能看到A之前某个中间态(比如只写了一半的long值)。这个保证由JVM在编译期插内存屏障、运行时配合CPU指令(如lockxchg或mfence)共同实现。常见误解:把happens-before当作「时间先后」——错。两个操作即使A在
-
使用双缓冲机制可高效实现线程安全,核心是通过两个缓冲区分离读写操作。用volatile标志位控制缓冲区切换,确保读线程访问稳定数据,写线程完成写入后原子更新标志位,避免锁竞争。对于复杂写入,配合ReentrantLock保证写入完整性;高并发场景可用AtomicReference结合CAS实现无锁切换,提升性能。方案选择需权衡读写频率、数据大小与一致性要求。
-
答案:Java转义字符以反斜杠开头,用于表示特殊字符如换行符\n、制表符\t,在字符串中正确使用可避免编译错误;处理路径时需双反斜杠\\,正则表达式中需双重转义如\\.匹配点号;Java15+可用三重引号"""定义文本块,简化多行字符串和引号处理。