-
Collections.sort()要求List元素实现Comparable或传入Comparator,仅支持List且不返回新集合;Stream.sorted()创建新集合;TreeSet/TreeMap天然有序但相等性依赖compareTo而非equals。
-
Collections.singleton()内存占用极小,因其返回内部静态类Collections$SingletonSet实例,仅持一个引用字段、无容量/哈希表/扩容机制,对象约16字节,不复制元素、无size字段、无同步开销。
-
ATM类设计需保证线程安全:账户余额用AtomicInteger或synchronized保护;Account与ATM解耦;余额操作返回boolean;避免在getter/toString中做业务判断;withdraw需严格参数校验。
-
InputStream.read()会阻塞是因为它是同步阻塞调用,需等待有数据可读、流被关闭或到达末尾才返回;在TCP或串口等无明确EOF的场景中,若对端不关闭输出,read()将一直挂起。
-
invokespecial指令用于调用实例初始化方法、私有方法及父类实例方法,采用静态绑定且不遵循多态;构造器中必须以此调用<init>,私有方法仅限本类内调用,super.调用强制绑定父类版本,不涉及字段访问。
-
corePoolSize和maximumPoolSize应依任务类型设定:IO密集型用公式计算,CPU密集型≈CPU核数;maximumPoolSize仅在有界队列下有效,LinkedBlockingQueue默认无界致其失效;keepAliveTime建议60秒,过短增调度压力,过长占资源;拒绝策略应自定义日志告警而非直接使用JDK默认策略。
-
HttpClient.SendAsync不会阻塞线程,它基于异步I/O机制实现;但误用.Wait()或.Result会导致死锁。应始终await调用,复用HttpClient实例推荐使用IHttpClientFactory,响应读取需在作用域内完成,超时与重试需协同配置。
-
PriorityQueue默认按自然顺序或Comparator排序,仅保证poll()/peek()获取最高优先级元素,遍历结果无序因其底层为堆结构;可靠有序需反复poll()或改用TreeSet。
-
Class.getResourceAsStream()以当前类包为根解析相对路径,加"/"则从classpath根查找;ClassLoader.getResourceAsStream()始终从classpath根查找,忽略前导"/"。
-
TenantLineInnerInterceptor是MyBatis-Plus唯一推荐的多租户实现方式,需正确实现TenantLineHandler:getTenantId()返回Expression并处理null,getTenantIdColumn()严格匹配字段名,ignoreTable显式排除公共表;INSERT自动注入依赖实体类中@TableField(fill=FieldFill.INSERT)声明tenant_id字段;租户ID必须通过ThreadLocal绑定请求生命周期,由Web过滤器或拦
-
Java不支持类的多重继承,仅允许单继承以避免菱形继承等问题,但通过接口(含default方法)、组合、委托、内部类及抽象类与接口组合等机制实现多源行为复用与灵活建模。
-
当需元素唯一且按插入顺序遍历时应选LinkedHashSet;它用哈希表+双向链表实现,遍历稳定O(n),顺序可预测,而HashSet无序、TreeSet按自然序排序。
-
<p>Runnable+Lambda是最轻量的线程启动方式,只需一行代码newThread(()->{/dosomething/}).start()即可;须调用start()而非run(),且外部变量需为final或effectivelyfinal;适合短小任务,耗时操作应改用ExecutorService。</p>
-
标记整理算法是老年代碎片整理的标准实现路径,通过标记存活对象、计算新地址、移动并更新引用三步闭环,将存活对象紧凑排列至堆一端,生成连续空闲空间,从而高效支持大对象分配。
-
ReentrantLock提供比synchronized更灵活的锁控制,支持手动加锁释放、可重入、公平锁、tryLock及中断响应机制,需始终在finally中unlock避免死锁。