-
CAS是Compare-And-Swap的缩写,即比较并交换,是CPU提供的原子指令,Java通过Unsafe类封装并由atomic包暴露API;其执行需V(变量地址)、E(预期值)、N(新值)三参数,原子判断V是否等于E,相等则更新为N并返回true,否则返回false;它基于乐观并发策略,失败后自旋重试,避免锁开销,适用于高并发低冲突场景,但存在ABA问题和自旋开销。
-
Java集合统一用size()方法获取长度,返回int型元素个数,时间复杂度O(1);注意null调用抛NPE、并发集合size()可能不准、Stream无size()需用count()。
-
绝大多数业务场景下不该自定义CheckedException,应统一使用RuntimeException子类;仅IO等强契约场景才继承Exception;异常命名需体现具体失败场景,构造器须支持errorCode、message、cause全参数,并实现Serializable。
-
final不是实现不可变的银弹,它仅保证引用不被重赋值,不阻止对象内部状态改变;需配合不可变类型、防御性拷贝、final类/方法及完整封装才能真正实现不可变。
-
Math类提供静态数学方法,位于java.lang包。1.基本运算:Math.abs(-5)返回5;Math.max(3,7)返回7;Math.min(3,7)返回3;Math.round(4.6)返回5L。2.幂与开方:Math.pow(2,3)返回8.0;Math.sqrt(16)返回4.0;Math.cbrt(27)返回3.0。3.三角函数:参数为弧度,Math.toRadians(180)返回π;Math.toDegrees(Math.PI)返回180.0。4.常量与随机:Math.PI≈3.14
-
Java版本与JDK必须严格匹配项目需求,否则触发UnsupportedClassVersionError;需统一配置JAVA_HOME、PATH、IDESDK及项目语言级别,并通过Maven/Gradle管理依赖避免classpath错误。
-
增强型for循环是Java中的语法糖,底层对集合使用Iterator、对数组使用索引遍历,简化了代码并提升可读性与安全性;它适用于只读遍历场景,但在需修改集合、获取索引或逆序遍历时存在局限,此时应使用传统for循环或Iterator。
-
Collections.addAll()是Java中用于将数组或多个元素批量添加到集合的静态方法,简化了初始化和批量操作。它定义于java.util.Collections类中,方法签名为publicstatic<T>booleanaddAll(Collection<?superT>c,T...elements),接收目标集合c和可变数量的元素(或数组)。该方法适用于所有Collection实现类,如ArrayList、HashSet、LinkedList等,能显著提升代码简洁性与
-
活锁是线程持续响应冲突、反复退让却无法推进;饥饿是线程可运行但因调度或资源分配不公平而长期得不到执行;死锁是线程互相等待对方释放锁而永久阻塞。
-
购物流程需实现从浏览到下单的闭环。1.流程包括商品浏览、加购、结算、创建订单、支付与确认,关键点为购物车结构设计、订单原子性与幂等性控制。2.购物车用RedisHash存储,支持未登录临时保存,登录后合并数据,提供增删改查接口并提示价格变动。3.订单创建时校验商品有效性,冻结库存,生成主子表信息,使用@Transactional保证事务,订单号采用雪花算法或时间+用户ID规则。4.支付对接支付宝/微信,设计订单状态机,处理异步回调签名验证与幂等,通过延迟队列实现超时关闭。系统需结合缓存、消息队列与事务保障
-
new关键字创建对象时先触发类加载五阶段,待<clinit>执行完毕才分配内存并调用<init>;对象内存布局含对象头、实例数据、对齐填充;finalize已废弃,推荐Cleaner;GCRoots包括栈变量、静态属性、常量、JNI引用及被锁对象。
-
ThreadLocal是为每个线程提供独立副本的变量工具,其值存储在各线程的threadLocals(ThreadLocalMap)中,key为弱引用,value为强引用。
-
Objects.equals()更安全因其先判空再委托,避免空指针异常;Objects.requireNonNull()用于明确拒绝null并抛出带提示的异常;nonNull/isNull适合条件判断;toString()支持默认值且无副作用。
-
应记录可预期但不可控的外部异常(如IOException、SQLException),而非NullPointerException等逻辑错误;RuntimeException除非可恢复,否则应抛出并保留异常链;日志仅在全局处理器中记录一次,级别依业务影响而定,且需配置%ex输出堆栈。
-
ArrayList比LinkedList更适合联系人管理,因其支持O(1)随机访问,适合遍历、分页和索引查询;高频头插删场景除外。