-
Java线程有六种状态:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED;它们是Thread类中可直接通过getState()读取的真实枚举值,反映线程在JVM和操作系统调度下的真实行为。
-
InputStreamReader是字节流到字符流的解码桥,仅在需将InputStream按字符处理时使用;必须显式指定编码(如StandardCharsets.UTF_8)并套BufferedReader以避免乱码和性能问题。
-
必须在main方法第一行调用System.setOut(),早于SpringApplication.run(),否则Banner、Actuator等组件及静态块中的System.out::println已固化输出流,重定向失效。
-
当需元素唯一且按插入顺序遍历时应选LinkedHashSet;它用哈希表+双向链表实现,遍历稳定O(n),顺序可预测,而HashSet无序、TreeSet按自然序排序。
-
Record类是Java16为DTO场景设计的不可变扁平数据载体,自动生成字段、构造器、getter、equals、hashCode和toString;组件名即访问器名(无get前缀);仅支持紧凑构造器校验,不支持继承。
-
普通ThreadLocal无法在父子线程间传递值是因为其值仅绑定当前线程的ThreadLocalMap,子线程为新实例且不复制父线程值;InheritableThreadLocal通过重写createInheritedMap()和childValue(),在子线程init时浅拷贝父线程值,但仅限直接创建的子线程,不适用于线程池等复用场景。
-
完成Java基础后应通过项目实践巩固知识,学生信息管理系统涵盖面向对象、集合与异常处理;2.系统功能包括增删改查学生信息;3.设计Student类封装属性并重写toString方法;4.使用ArrayList存储学生数据,Scanner接收用户输入;5.主逻辑在StudentManager中实现菜单循环与功能分支;6.添加学生时创建对象并存入列表;7.删除学生需遍历列表匹配学号并移除;8.修改与查询均基于学号定位目标对象;9.项目帮助理解代码真实运行流程,强化知识点串联。
-
JOL无法稳定捕捉锁升级全过程,因其仅解析Java堆内结构,而重量级锁指针在C++堆、轻量级锁地址在栈帧且易被JIT优化,偏向撤销时MarkWord可能被置零或全1;需禁用逃逸分析与JIT优化,单线程内分步新建对象并即时抓取布局,结合jstack验证重量级锁。
-
VectorAPI在JDK17中仍为孵化器模块,必须显式启用:运行时需添加--add-modulesjdk.incubator.vector,否则抛NoClassDefFoundError;SPECIES_PREFERRED返回平台推荐向量长度,但非绝对最优,应结合数据规模与硬件指令集(如AVX2/AVX-512)合理选用。
-
SimpleDateFormat非线程安全,多线程复用会导致结果错乱,应局部新建、加锁或改用DateTimeFormatter;parse()抛ParseException主因是字符串与模式不匹配,如时区缺失、月份超限、yy解析四位年份等;安全格式化需用局部变量指定模式及时区;DateTimeFormatter不可变、线程安全、API清晰,是Java8+推荐替代方案。
-
UUID.randomUUID()是最常用也最容易出错的起点Java里生成唯一ID,UUID.randomUUID()是第一反应,但它生成的是128位随机UUID(version4),不是递增、不带时间信息、字符串长度固定36字符(含4个短横线)。很多人直接用它当数据库主键,结果发现索引性能差、存储冗余、排查日志时还得手动去掉短横线。别在高频插入场景(比如订单流水表)直接用UUID.randomUUID().toString()作主键——B+树索引会因随机写导致页分裂严
-
Java中OOP是强制范式,class为唯一类型定义单元,所有对象(除基本类型)均为Object子类;构造器须封装初始化约束,private字段+构造注入优于public裸露,setter需业务校验,集合返回应不可变或副本,继承需严格方法签名一致与@Override,优先组合而非继承。
-
while循环适用于循环次数不确定、依赖运行时条件判断的场景,如读取用户输入直到合法、处理流式数据至结束标记、轮询状态是否就绪等。
-
答案:Java集合框架非线程安全,可通过Collections.synchronized包装、并发集合类或同步代码块实现线程安全;如ConcurrentHashMap适用于高并发读写,CopyOnWriteArrayList适合读多写少场景,复合操作需额外加锁。
-
Optional仅适用于方法返回值,禁用于实体字段、构造参数和setter入参;避免多层flatMap链式调用;优先使用orElseGet而非orElse以防性能隐患;禁用get()和isPresent()+get()反模式;注意第三方库对Optional支持有限。