-
对象创建需经历类加载检查、内存分配和初始化三阶段。首先JVM检查类是否已加载,确保类结构合法并完成静态资源准备;随后在堆中为对象分配内存,采用指针碰撞或空闲列表方式,并通过TLAB或CAS解决并发问题;最后进行初始化,先将内存置零,设置对象头信息,再执行构造器完成实例化。类加载是前提,保障类型安全与结构定义,内存分配面临并发与碎片挑战,依赖TLAB、CAS、分代回收等策略优化,初始化则确保对象状态明确,包含零值初始化、对象头设置及构造器执行,整体流程体现JVM在性能与安全间的精妙平衡。
-
Java强制类型转换的风险在于运行时错误:向下转型引发ClassCastException,基本类型转换导致静默溢出或截断,自动拆箱触发NullPointerException,泛型擦除造成“假安全”转型。
-
一个类应只承担一项职责,通过单一职责原则(SRP)划分明确边界,如UserRepository负责数据存取、UserService专注业务流程、UserValidator处理校验,避免将数据库操作、校验、日志等混合到同一类中;采用分层架构分离关注点,表现层处理请求、业务层封装规则、数据访问层管理持久化、工具类提供通用支持,各层通过接口解耦;共通逻辑如邮箱校验应提取至独立组件如EmailValidator;避免“上帝对象”,使用组合方式让主类委托Validator、Notifier等小对象完成具体任务,保持
-
substring的两个参数是索引位置,beginIndex为起始保留位置(含),endIndex为首个不保留位置(不含),区间为左闭右开。
-
静态初始化适用于已知元素值的场景,如int[]arr={1,2,3};2.动态初始化用于运行时确定长度,如int[]arr=newint[5];3.声明与初始化可分离,提升灵活性;4.多维数组支持规则与不规则结构,如int[][]matrix={{1,2},{3,4}}或动态分配行列。
-
三元运算符仅适用于有明确返回值的单表达式分支,正确写法为condition?exprIfTrue:exprIfFalse(JS)或value_if_trueifconditionelsevalue_if_false(Python),Go则明确拒绝引入。
-
Java线程协调核心是控制等待与通知机制,常用方式包括synchronized+wait/notify、Lock+Condition、CountDownLatch、CyclicBarrier、Semaphore和BlockingQueue;其中BlockingQueue最实用,CountDownLatch适用于一次性等待,Condition适合多条件精确控制,wait/notify需配合while循环和synchronized使用。
-
工作窃取是让空闲线程从其他线程队列尾部窃取任务的智能调度机制,核心是提升CPU利用率;采用双端队列实现本地LIFO执行与外部FIFO窃取,降低竞争并优化缓存;适用于可递归拆分的计算密集型任务,不适用于含阻塞I/O或强顺序依赖的任务。
-
仅靠volatile变量无法正确实现线程安全的ReadWriteLock,因其缺乏原子性与内存顺序保障;但结合Peterson算法思想并严格约束执行模型(如双线程、无抢占调度),可在理论极限下构造简化版本;实践中必须搭配Atomic类或显式同步机制。
-
静态方法中不能使用this,因为this指向具体对象实例,而静态方法属于类本身、无需实例即可调用,其字节码签名不含this参数,编译期即被禁止。
-
自定义锁卡死或抛异常的主因是未正确实现AQS契约:tryAcquire必须原子返回true/false,state需按语义精确使用,shouldParkAfterFailedAcquire不可出错,且不可在其中抛异常或阻塞。
-
FixedThreadPool适合CPU密集型任务,线程数固定且资源可控,但遇IO阻塞易导致队列堆积和拒绝异常;CachedThreadPool适合短平快异步任务,但高并发下易OOM;SingleThreadExecutor仅保证串行执行,不保证线程安全;ScheduledThreadPoolExecutor是唯一可靠的定时方案,需注意任务幂等性和延时策略选择。
-
确认内存泄漏需观察老年代使用率“只涨不跌”、FGC频次激增且回收无效、OOM频繁复现、特定类实例持续增长;jmap加live可导出纯净堆快照;MAT中通过PathtoGCRoots查强引用链,DominatorTree定位真正内存支配者。
-
do-while是唯一能天然保证探测至少执行一次的循环结构,因其语义明确分离初始化、重试与退出逻辑,避免资源泄漏、EINTR处理错误及维护性问题。
-
throws是Java中声明受检异常的强制语法,仅对继承Exception而非RuntimeException的异常(如IOException、SQLException)生效,用于明确告知调用者需处理异常,而非逃避责任。