-
泛型在编译期提供类型安全,通过类型参数提升代码复用性;定义泛型类如Box<T>后需指定具体类型如Box<String>来调用;泛型方法可自动推断类型,也可显式指定;由于类型擦除,无法直接实例化T,需借助Class对象或Supplier工厂;禁止创建泛型数组如newBox<String>[],建议用ArrayList替代;核心是编译期检查与合理使用通配符、边界。
-
对象状态一致性要求成员变量满足约束条件,如余额非负、时间有序等,确保方法执行前后对象处于合法状态,通过封装控制访问并结合异常处理防止非法修改,同时在多线程环境下利用同步机制保障复合操作的原子性,从而维护程序的可靠性与数据安全。
-
G1的RSet只记录老年代→年轻代引用,因年轻代对象生命周期短,其引用老年代对象不影响后者的存活判定;而年轻代回收需避免扫描全老年代,故必须记录反向引用以保障安全回收。
-
短路特性使&&和||返回最后一个被求值的操作数,且仅右侧操作数可被跳过;应将轻量、高失败率(&&)或高成功率(||)条件置左,耗时操作置右,并警惕隐式转换与副作用。
-
join()是最直接可靠的线程串行执行方式,通过阻塞等待前一线程终止来确保顺序,无需锁或共享变量,且必须在start()后调用;sleep()不可靠,wait()/notify()和CountDownLatch属过度设计;真实项目中推荐单线程池+Future。
-
JavaScript中constructor非必须,class不写时自动提供空默认构造函数;继承时子类constructor必须首行调用super(),否则报错;赋值方式影响属性特性,公有字段声明优先于constructor内赋值;new操作符返回值受constructor显式return影响。
-
<p>反射调用重载方法必须显式指定参数类型,Java和C#均不支持自动匹配:Java需用getDeclaredMethod/getMethod配合Class类型数组,C#需GetMethod配合Type[]和BindingFlags,且基本类型与包装类、父子类间无自动转换。</p>
-
本文详解JavaSocket实现HTTPHEAD请求时因请求头格式不规范(缺少空行、换行符不统一)引发“HTTP/1.1400BadRequest”错误的根本原因及三种可靠修复方法。本文详解JavaSocket实现HTTPHEAD请求时因请求头格式不规范(缺少空行、换行符不统一)引发“HTTP/1.1400BadRequest”错误的根本原因及三种可靠修复方法。HTTP协议对请求报文的格式有严格要求:请求行+请求头+空行(CRL
-
基本数据类型传递实际值,包装类传递引用副本,因不可变性和null导致行为差异。
-
InterruptedException是线程被中断时抛出的检查异常,需恢复中断状态或向上抛出,不可吞掉;它表示协作式中断通知,非线程终止信号。
-
Java数组赋值有静态初始化、动态初始化、数组间引用赋值及工具类赋值四种方式:静态初始化直接指定元素并推断长度;动态初始化先定长再逐个赋值,默认值自动填充;数组间赋值为引用传递,需用Arrays.copyOf()等复制副本;Arrays.fill()可批量设相同值。
-
投票系统应选用ConcurrentHashMap存储票数、ConcurrentHashMap.newKeySet()记录已投ID、动态锁对象保障原子性、流式排序生成实时有序视图。
-
Python中没有trim(),只有strip()及其变体;strip()默认删除首尾空白字符且不修改原字符串,加参数时按字符集合而非子串匹配,安全用法是不加参数。
-
Java线程协调核心是控制等待与通知机制,常用方式包括synchronized+wait/notify、Lock+Condition、CountDownLatch、CyclicBarrier、Semaphore和BlockingQueue;其中BlockingQueue最实用,CountDownLatch适用于一次性等待,Condition适合多条件精确控制,wait/notify需配合while循环和synchronized使用。
-
应提取方法而非深层嵌套——三层以上if需警觉;优先用卫语句+提前返回,封装校验为boolean方法;避免Boolean包装类空指针与==比较;输入统一用nextLine()+try-catch解析。