-
安装JDK即可拥有完整Java开发环境,因其包含JRE及开发工具。开发者需下载LTS版本JDK,配置JAVA_HOME与PATH环境变量,并通过java-version和javac-version验证安装,最后以HelloWorld程序测试编译运行功能。
-
首先安装JProfiler并配置-agentpath参数加载Agent,然后通过GUI连接指定端口监控应用性能,远程环境建议使用SSH隧道安全连接。
-
JavaSocket是TCP通信核心类,封装底层协议,通过IP+端口建立连接,利用输入输出流实现全双工通信;支持阻塞I/O、超时设置、缓冲区调优及保活机制,是Netty等框架的底层基础。
-
<p>用Math.random()做权重抽奖总抽不到低概率奖品,因其返回[0,1)导致最后一区间长度缺失;正确做法是预计算前缀和,用Math.random()*totalWeight后二分查找。</p>
-
二进制分发版JDK是官方预编译的.tar.gz或.zip包,解压即用,需手动配置JAVA_HOME和PATH指向根目录,不修改系统路径或注册表,适用于多版本共存、容器部署及生产环境精准控制。
-
ConcurrentModificationException的根本原因是modCount与expectedModCount不一致,触发Java集合的Fail-Fast机制;单线程遍历中调用集合自身remove()等结构性修改方法即会抛出该异常。
-
类和对象是Java中面向对象编程的核心概念。类是模板,定义了属性和方法;对象是类的实例,具有具体的值和行为。类与对象的关系类似于剧本和演员:类是剧本,定义了角色的行为和特征;对象是根据剧本上演的具体演员。
-
DecimalFormat格式化结果为String,不可直接用于数学运算;需参与计算时应优先使用BigDecimal配合setScale和HALF_UP模式确保精度与四舍五入可控。
-
Java中通过throws声明受检异常并由调用者用try-catch处理,底层传递异常、上层捕获并转化业务异常,提升程序健壮性与可维护性。
-
循环依赖指Bean间相互引用导致Spring初始化失败。1.用@Lazy注解延迟加载,创建代理对象;2.改构造器注入为Setter或字段注入,利用Spring三级缓存机制;3.重构代码,提取公共逻辑或使用事件驱动解耦;4.实现ApplicationContextAware手动获取Bean(不推荐)。优先推荐@Lazy结合重构从根本上解决问题。
-
Java里没有回调函数,但可以用接口模拟Java没有像JavaScript那样的function类型或一级函数,所谓“回调”,本质是把行为封装进接口实例,由调用方在合适时机通过接口方法触发。关键不是语法糖,而是谁持有接口引用、谁负责调用。常见错误是定义了回调接口却忘了传入实现类,导致运行时NullPointerException;或者在异步线程中直接操作UI组件(Android)或非线程安全对象,引发崩溃或数据错乱。回调接口必须定义清晰的契约:方法名、参数、是否允许为null、
-
Gradle与Maven核心差异在于约束模型:Maven强制约定优于配置,Gradle支持按需定制;Gradle的resolutionStrategy可运行时干预依赖解析,Maven仅靠声明优先级和exclusions;Gradle对Java模块化支持更早,但Maven插件生态更稳定;CI中Maven冷启动轻量,Gradle依赖守护进程和缓存;buildSrc增强灵活性却增加CI瓶颈风险。
-
Java类加载顺序为:启动类加载器→扩展类加载器→应用类加载器,且遵循双亲委派模型;启动加载JAVA_HOME/jre/lib下核心类,扩展加载lib/ext(JDK9+废弃),应用加载-cp指定路径、CLASSPATH或当前目录,从左到右查找首个匹配类。
-
Locale是Java国际化的基石,用于标识用户所属地理文化区域及表达习惯,如日期、货币、数字格式和文字排序规则,不负责翻译且区别于时区与用户偏好源头。
-
Graylog启动失败主因是MongoDB或Elasticsearch未就绪:需确保4GB空闲内存、调低ES堆内存、用mongo:5.0镜像、配置healthcheck;Java发日志超时需检查GELFUDP绑定地址、防火墙、宿主机IP及字段映射。