-
Semaphore是控制同时访问资源的线程数量的并发工具,而synchronized保证同一时刻仅一个线程进入临界区;前者是限流闸机,后者是单人通道。
-
Reader和Writer是字符流的输入/输出端,方向相反、不可互换;Reader.read()返回int表示字符或EOF,Writer.write()只取低16位;必须注意编码一致、使用缓冲及追加模式需显式指定。
-
环境搭建是首次接触Java运行机制的实操门槛,需正确配置JAVA_HOME指向JDK根目录、PATH包含其bin路径,并确保javac与java版本一致,否则将导致编译或运行失败。
-
核心类结构必须包含Book、BorrowRecord、Member三个类:Book含isbn、title、author和enum型status;Member含memberId和name;BorrowRecord关联二者并记录借还日期;ID统一用String,关系通过BorrowRecord维护而非Book持有Member引用。
-
Java构造方法由new隐式触发,必须与类名完全一致且无返回类型;this()委托须首行唯一;父类无参构造缺失时子类须显式调用super(...);构造器中可return;但不可返回值;严禁泄露未完成初始化的this。
-
JavaWeb项目需JDK、Servlet容器及类路径隔离三者缺一不可:JDK版本须匹配框架要求(如SpringBoot3.x需JDK17),必须部署于Tomcat/Jetty/Undertow等Servlet容器,Maven的provided作用域确保servlet-api等由容器提供,IDE运行≠环境正确,最终应通过mvnpackage后手动部署验证。
-
JPA默认使用@GeneratedValue会强制生成新ID,导致手动设置的UUID被忽略;只需移除该注解,并确保ID字段可为空(即不加@GeneratedValue),即可让JPA尊重你显式赋值的UUID。
-
super用于子类访问父类成员,可调用父类构造方法、方法和属性。调用构造方法时必须位于子类构造方法首行,支持无参或带参形式;若未显式调用,系统默认插入super()。当子类重写父类方法时,可通过super.方法名()保留并扩展父类逻辑,实现功能增强而非完全覆盖。若子类定义了与父类同名字段,需通过super.字段名访问父类属性,避免命名冲突。合理使用super有助于安全复用父类功能,强化继承机制下的代码组织与维护。
-
Checked异常并非必须存在,但其设计意图是强制在编译期显式处理可恢复的外部依赖错误(如IO、DB、网络),核心价值在于将“可能失败”显性化,避免静默失败,关键在于合理使用而非摒弃。
-
Java线程优先级不会影响实际执行顺序。setPriority()仅向操作系统传递建议值,JVM不保证遵循;LinuxCFS完全忽略,Windows仅微调且受限于进程优先级类;映射关系不可移植,依赖它会导致不可预测行为,应使用PriorityBlockingQueue等显式调度机制替代。
-
活锁是线程持续响应冲突、反复退让却无法推进;饥饿是线程可运行但因调度或资源分配不公平而长期得不到执行;死锁是线程互相等待对方释放锁而永久阻塞。
-
final修饰变量时锁住的是引用指向而非对象内容;final方法不能被重写但可重载;final类禁止继承以保障语义封闭;final字段确保构造完成时对其他线程可见。
-
常见原因是用户输入非数字内容(如“95分”或直接回车)而程序用nextInt()强行读取,导致InputMismatchException;应改用nextLine()读整行并用Integer.parseInt()转换,配合try-catch处理,并注意消费换行符。
-
Iterator是Java中定义遍历集合契约的接口,提供hasNext()、next()、remove()三个方法;必须先调用hasNext()判断再调用next(),否则越界时抛NoSuchElementException。
-
答案是使用Scanner类获取用户输入。需导入java.util.Scanner,创建Scanner对象关联System.in,调用nextLine()、nextInt()等方法读取字符串、整数等数据,注意处理换行符残留和异常,最后关闭Scanner释放资源。