-
ArrayDeque基于数组实现,性能高、内存紧凑,适合两端操作和栈结构;LinkedList基于链表,支持中间高效插入删除及null值,适用于频繁增删和需List功能的场景。
-
Java开发需先配置JDK环境:JAVA_HOME指向JDK根目录,PATH包含$JAVA_HOME/bin;验证用java-version和javac-version;HelloWorld需文件名、类名一致,编译javacHello.java,运行javaHello;依赖用-cp指定jar路径;常见错误包括命令未找到、类名文件名不匹配、NoClassDefFoundError等。
-
Future是异步结果的凭证而非执行器,仅支持查状态、取结果(须用带超时的get)、取消任务;无回调、不支持链式编排,复杂场景应升级CompletableFuture。
-
初学者应选用JDK17(LTS)+IntelliJIDEACommunity版,5分钟内可运行HelloWorld;避免JDK8(过旧)和JDK21(兼容问题多),安装后验证java-version,IDE自动识别SDK并支持一键运行,配合pom.xml启用Maven管理依赖。
-
newLinkedBlockingQueue()线程安全因其内部使用ReentrantLock和两个Condition(notEmpty、notFull)对所有关键操作加锁,无需额外同步;但迭代器弱一致,遍历时修改会抛ConcurrentModificationException。
-
CAS是Compare-And-Swap的缩写,即比较并交换,是CPU提供的原子指令,Java通过Unsafe类封装并由atomic包暴露API;其执行需V(变量地址)、E(预期值)、N(新值)三参数,原子判断V是否等于E,相等则更新为N并返回true,否则返回false;它基于乐观并发策略,失败后自旋重试,避免锁开销,适用于高并发低冲突场景,但存在ABA问题和自旋开销。
-
抽象类与接口应互补使用:抽象类定义共通逻辑,接口声明行为契约。通过模板方法固定流程,接口扩展功能,结合默认方法复用基础实现,横切关注点抽离为接口,提升模块化与可维护性。
-
finally块用于确保关键代码始终执行,常用于资源释放、状态重置等场景;其典型应用包括关闭文件流、数据库连接,且需注意避免在其中抛出异常或使用return语句,否则可能掩盖异常或改变返回值;现代Java推荐优先使用try-with-resources替代手动资源管理,以提升代码安全性和可读性。
-
接口隔离原则强调客户端不应依赖不需要的接口。通过将大接口拆分为小而专的接口,如员工系统、设备驱动、GUI事件和游戏角色中按需实现,提升灵活性与可维护性。
-
先设计BankAccount类封装余额和交易记录,再实现存取款及记录功能。1.创建类包含balance和ArrayList类型的transactionHistory;2.构造方法初始化余额为0并记录初始操作;3.deposit方法校验金额大于0后增加余额并记录存款信息;4.withdraw方法判断金额有效且不超过余额后扣款并记录取款信息;5.添加showTransactionHistory方法遍历输出所有交易记录;6.getBalance方法返回当前余额;7.在main方法中创建对象并测试多次存取款操作;
-
接口是公开、抽象、可组合的行为契约,表达“能力”而非“身份”,支持多实现与向后兼容演进;abstractclass表达纵向类型继承,仅单继承。
-
Future.get()默认阻塞,需用超时重载或isDone()判断;抛出InterruptedException、ExecutionException、TimeoutException须分别处理;禁在UI/Servlet主线程调用;cancel()不保证资源清理,任务需自行响应中断。
-
Java中抛出异常的核心是:用throw抛出异常实例,用throws声明受检异常;未捕获的受检异常必须声明,否则编译失败;运行时异常无需声明。
-
Java类型转换分自动(小→大,安全)和强制(大→小,需显式,有丢失风险);含引用类型转换、装箱拆箱(注意缓存与空指针)及字符串手动转换(parseXxx/valueOf)。
-
Java中if-else需防坑:必加花括号{}、字符串判空用"str".equals()或Objects.equals()、多条件按null检查→无副作用→高开销顺序排列、elseif链须加finalelse并日志或抛异常。