-
Runtime.gc()不会强制触发垃圾回收,仅是向JVM发出建议,实际执行与否由JVM决定;生产环境中调用基本无效,还可能干扰GC策略。
-
Java要求局部变量在使用前必须明确初始化;若仅用独立if语句而无else覆盖所有可能取值,编译器无法保证变量一定被赋值,从而报错。正确做法是用if-elseif-else结构或直接初始化默认值。
-
StructuredTaskScope是防止孤儿线程的唯一有效边界,它通过作用域契约绑定子任务生命周期,要求必须用try-with-resources配合ShutdownOnFailure/ShutdownOnSuccess,并确保子任务响应中断。
-
Arrays.setAll()是Java8提供的函数式数组填充方法,通过IntUnaryOperator或IntFunction按索引动态生成元素,要求数组预先创建且非null,不支持依赖前项的递推逻辑。
-
字符串常量池是堆中固定大小的StringTable哈希表(JDK1.8+默认容量60013),存储堆中字符串对象的引用;双引号创建时通过哈希定位、equals比对实现复用,newString()强制新建堆对象且不自动复用,运行时拼接字符串需显式调用intern()才可能入池。
-
File.mkdirs()能递归创建多级目录,自动补全所有不存在的中间目录;它线程安全、跨平台处理路径分隔符,但仅通过返回值判断成败,不抛异常。
-
Arrays.parallelPrefix()是Java8提供的并行前缀累积工具,就地执行、支持自定义二元操作,要求操作满足结合律,适用于前缀和、积、积分近似等场景。
-
Java中~对整数执行按位取反,结果解释为有符号补码值(如~2==-3),其数值含义由数据类型(如int)的符号性决定,而非比特模式本身;机器不“自动识别”正负,而是由指令语义和类型系统共同约定解释方式。
-
共享Random会拖慢高并发服务,因多线程竞争更新同一AtomicLongseed导致CAS自旋耗CPU;ThreadLocalRandom必须每次调用current(),不可static缓存;推荐用nextInt(origin,bound)明确边界且性能更优。
-
密封类通过permits白名单授权继承,要求显式列出同模块同包的允许子类,子类须用final/sealed/non-sealed明确策略,配合switch实现编译期穷尽检查,跨模块需模块系统协同导出与依赖声明。
-
是的,Java泛型在编译后被擦除,字节码中仅保留原始类型,类型参数全部替换为Object或上界,运行时无法获取泛型信息,仅通过Class元数据中的Signature属性供反射等有限使用。
-
ConcurrentSkipListMap是Java中基于跳表实现的并发有序映射,支持高效线程安全操作。1.默认按键自然排序,也可自定义Comparator;2.提供O(logn)插入、删除、查找性能;3.适用于多线程下需保持顺序的场景,如定时任务、排行榜等;4.迭代器弱一致,不抛ConcurrentModificationException;5.size()为O(n),频繁调用影响性能,非排序场景建议用ConcurrentHashMap。
-
Windows安装Java开发环境需安装JDK(如JDK17/21)并正确配置JAVA_HOME与Path变量,路径须无中文和空格,验证java-version和javac-version均有效。
-
Collections.synchronizedList通过同步代理确保单个操作线程安全,使用实例锁保护add、get等方法;2.迭代需手动加锁防止ConcurrentModificationException;3.复合操作如检查再添加必须显式同步;4.适用于低并发,高并发推荐CopyOnWriteArrayList。
-
Java二维数组初始化有静态和动态两种:静态用{{}}直接赋值,支持不规则数组;动态用new指定行列数,可创建规则或不规则数组,再通过循环等填充数据。