-
ReadOnlyBufferException是java.nio.Buffer子类主动抛出的,当在只读缓冲区上调用put()、compact()等修改方法时触发;判断只读性唯一可靠方式是isReadOnly();无法解除只读,只能拷贝可写副本。
-
String.intern()仅在加载大量重复配置键名或枚举字面量、以及高频字符串等值判断且统一intern流程时才省内存;循环中对动态拼接字符串调用反而加剧内存压力。
-
合理使用三元运算符、逻辑运算符、Optional和switch表达式可简化Java条件判断。例如,用?:替代简单if-else赋值,如Stringresult=(num>0)?"正数":"非正数";;通过&&、||合并条件并利用短路特性避免空指针,如if(user!=null&&user.isActive()&&!user.isLocked());将复杂条件提取为布尔变量提升可读性;使用Optional.ofNu
-
Java写简单爬虫核心是发请求→取响应→解析→存数据:用HttpURLConnection或HttpClient发请求并设User-Agent、超时等;用Jsoup解析HTML提取内容;存本地文件并去重;遵守robots.txt、控制频率、处理异常。
-
AQS中独占模式靠tryAcquire/tryRelease控制锁获取与释放,共享模式靠tryAcquireShared(返回负数失败、0成功不传播、正数成功并传播)和releaseShared实现唤醒传播,二者共用队列但行为不同,需严格区分模式使用。
-
Java反射调用私有方法抛IllegalAccessException,主因是Java9+模块系统强化封装,需setAccessible(true)且配合--add-opens等JVM参数才能跨模块访问。
-
Runnable接口用于定义线程任务,通过实现run()方法封装执行逻辑,不返回结果且不能抛出受检异常;可直接传给Thread实例启动线程,也可用Lambda表达式简化代码;推荐结合ExecutorService线程池使用,提升资源利用率;需注意无返回值、异常处理在内部完成、共享变量线程安全等问题。
-
偏向锁默认延迟4秒生效,由-XX:BiasedLockingStartupDelay=4000控制,旨在避开JVM启动期高竞争阶段;JDK15+已彻底移除该功能。
-
EnumMap比HashMap快在跳过哈希计算、避免冲突、省键引用,以ordinal直接数组寻址;但受限于枚举类型、不支持null、非线程安全、序列化困难且类加载器敏感。
-
Java八种基本数据类型为byte、short、int、long、float、double、char、boolean,分属整数、浮点、字符、布尔四类,各有固定内存大小、取值范围及默认值,不随平台变化。
-
本文介绍一种高效、安全的方法:将字符串转为字符数组,遍历并原地修改相邻重复字符(如将第二个连续的'a'替换为'z'),最后重构字符串,避免String.replace()的全局匹配陷阱。
-
Java类加载过程包括加载、验证、准备、解析、初始化5个阶段:加载从字节流生成Class对象;验证确保字节码合规;准备为静态变量设默认值;解析将符号引用转为直接引用;初始化执行<clinit>方法赋值和静态块。
-
Java8引入默认方法解决接口演进问题,允许在接口中提供默认实现,避免破坏现有实现类。例如Iterable新增forEach默认方法,使ArrayList等集合无需修改即可使用新功能。
-
对象初始化顺序为:静态成员最先执行且仅一次,随后父类实例成员初始化,再子类实例成员初始化。1.静态变量和静态代码块按书写顺序在类加载时初始化;2.创建对象时,先初始化父类的实例变量和实例代码块,再执行父类构造函数;3.然后初始化子类的实例变量和实例代码块,最后执行子类构造函数。该顺序确保继承链自上而下正确初始化,避免因成员未初始化导致的错误。
-
答案:Java中配置数据库连接需引入JDBC驱动,如MySQL在Maven中添加对应依赖;通过DriverManager或连接池(如HikariCP)获取Connection,使用try-with-resources管理资源;建议将连接参数存入properties文件,并处理常见问题如驱动加载、权限、超时等,生产环境应使用连接池以提升性能和稳定性。