-
Java的extends仅支持单继承,可链式继承但不允许多类继承;继承public/protected及包内default成员,不可见private成员;构造器不被继承,static成员可继承但不可重写。
-
MavenSitePlugin默认忽略settings.xml中配置的私有仓库,导致构建时仍尝试从repo.maven.apache.org下载依赖;根本解决方法是在settings.xml中配置通配镜像(<mirrorOf>*</mirrorOf>),强制所有远程仓库请求重定向至企业私有仓库。
-
引用变量存放在栈中(局部变量)或堆中(成员变量)或方法区(static字段),其指向的对象实例均在堆中;System.gc()仅是建议,不保证触发FullGC;WeakReference在任意GC时回收,SoftReference在内存不足时按LRU回收。
-
Java并发中内存可见性问题必须通过volatile、synchronized、Lock或java.util.concurrent工具类显式保障,因CPU缓存、重排序和JIT优化会导致线程间修改不可见;普通变量无同步语义,即使加Thread.sleep也无法保证可见性。
-
应根据场景选择List实现:ArrayList适合随机访问和尾部操作;LinkedList适合头尾增删;CopyOnWriteArrayList适合读多写少的并发场景;Vector已不推荐,synchronizedList需手动同步复合操作。
-
Throwable的printStackTrace()输出栈轨迹的本质是:先在构造时通过native的fillInStackTrace()采集调用链并存入stackTrace数组,再由printStackTrace()遍历该数组格式化输出。
-
答案:Java多线程资源池通过阻塞队列管理资源复用,封装acquire/release接口控制并发访问,结合线程池调度任务,实现初始化、获取、归还和健康检查机制,避免频繁创建销毁资源,提升性能。
-
绝大多数场景应优先选用HashMap,因其平均时间复杂度O(1)、支持null键值且无序特性契合多数业务;仅当需key自然排序或范围查询时才用TreeMap。
-
本文解析LeetCode「填充每个节点的下一个右侧节点指针」题中BFS实现里curr==null的成因:根本原因是输入根节点可能为null(空树),而非子队列误入空值;正确做法是在入口处统一判空,而非在循环内临时拦截。
-
HTTP/2多路复用需正确组合Http2FrameCodec与Http2MultiplexHandler:前者必须前置解析帧,后者依赖其触发stream创建;ALPN协商失败或配置错误会导致降级至HTTP/1.1;子channel生命周期绑定stream,非TCP连接级;h2c需通过Upgrade流程动态注入编解码器。
-
适合做「有真实并发痛点」的中小型业务系统,而非纯玩具项目;伙伴匹配系统因天然存在抢人、跨表写入、Redis非原子操作、定时任务与前台竞争等典型并发问题,比用户中心更适合作为练手项目。
-
限制字段可变性可提升程序稳定性、可维护性和线程安全性。通过使用final关键字、私有访问控制和不可变类型,能有效防止对象状态被随意修改,避免多线程竞争和状态混乱。例如,将字段声明为privatefinal并提供getter方法,可确保封装性;对可变引用类型(如Date、集合)返回防御性拷贝,防止外部直接修改内部状态。不可变对象天然线程安全,有助于降低并发编程复杂度。合理设计字段可变性,有利于构建清晰、可靠的对象模型。
-
Java方法是可重复使用的代码块,用于完成具体任务;由修饰符、返回类型、方法名、参数列表和方法体组成;void表示无返回值,非void需每条路径return对应类型值;参数为局部变量,基本类型传值、对象传引用;static属类、无需实例即可调用,非static属实例、须通过对象调用;重载同名异参(编译期绑定),重写同签名子类覆盖父类(运行期动态绑定)。
-
必须子类异常在前、父类在后,因为异常匹配从上到下逐个检查,父类若在前会提前捕获所有子类实例,导致后续子类catch块不可达而编译失败。
-
是的,但仅限于类中未定义任何构造器时;一旦定义了任意构造器,编译器便不再生成默认无参构造函数,且其访问修饰符与类一致,等价于publicA(){super();}。