-
Java服务器中可通过jstat、jinfo、jstack及JMX/HTTP端点查看JVM信息:jstat实时监控GC与内存,jinfo查看并动态修改启动参数,jstack分析线程与锁,JMX或Actuator提供结构化指标用于监控告警。
-
IllegalStateException是程序逻辑进入非法状态时抛出的运行时异常,如Iterator未调用hasNext()就调用next()、已关闭的Scanner再读取、重复start()已启动线程等,需通过前置状态校验而非捕获来避免。
-
Java类加载器无法卸载类,热更新实为用新ClassLoader加载同名类并让旧类被GC回收;需确保旧类实例彻底不可达、使用独立URLClassLoader、避免静态引用;常见陷阱包括static字段未清理、线程未终止及JNI资源泄漏。
-
JavaStreamAPI要求明确区分中间操作(如filter、map)与终止操作(如collect、forEach),因Stream惰性求值,仅当中间操作后接终止操作才会执行;collect需配合Collectors使用,forEach与peek用途不同,findFirst返回Optional须判空,且同一Stream不可重复使用。
-
使用top-H-p<pid>定位高CPUJava线程,将十进制LWPPID转十六进制后在jstack输出中匹配nid,重点分析RUNNABLE状态线程栈,区分业务逻辑、JIT编译或GC等根因。
-
HashMap通过扰动函数hash()(高16位异或低16位)优化哈希分布,再用(n-1)&hash定位桶;扩容时利用位运算特性实现高效迁移;链表转红黑树需同时满足容量≥64且链表长度≥8;get返回null不表示键不存在,因value可为null;非线程安全,多线程下可能出现数据丢失、可见性问题等。
-
Micrometer依赖需同时引入spring-boot-starter-actuator和对应registry(如micrometer-registry-prometheus),并配置management.endpoints.web.exposure.include显式暴露端点;Prometheus的scrape_config中metrics_path必须设为/actuator/prometheus;@Timed依赖SpringAOP代理,须确保方法由容器注入且为public;自定义指标应规范使用Tag
-
do-while循环是“先执行后判断”的直到型循环,循环体至少执行一次;语法为do{...}while(布尔表达式);,末尾分号不可省略;适用于用户输入验证、游戏主循环等需至少执行一次的场景。
-
Java线程的6种状态不是并列关系,而是有明确进入/退出条件Java线程状态(Thread.State)共6种:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。它们不是靠“设置”切换的,而是JVM根据线程实际执行行为自动变更——你调用wait(),线程就进WAITING;锁被占着又想进同步块,就卡在BLOCKED;线程跑完run()方法,自然变成TERMINATED。常见误解是以为能用代码“强制设为RUNNABLE”,其实没有thread.s
-
选RecursiveTask还是RecursiveAction取决于是否有返回值:有结果用RecursiveTask(需指定泛型并return值),无结果用RecursiveAction(compute()返回void);二者均为ForkJoinTask子类,不可直接实例化抽象父类。
-
LockSupport是Java中用于线程阻塞与唤醒的核心工具类,位于java.util.concurrent.locks包下,其核心方法为park()和unpark(Threadthread)。park()使当前线程阻塞,直到其他线程调用该线程的unpark方法或线程被中断;unpark()则向指定线程发放许可,允许其继续执行,且可先于park()调用生效。相比wait/notify机制,LockSupport更灵活安全,不依赖synchronized关键字,也不会因顺序问题导致死锁。它基于单一许可机制
-
HandlerInterceptor的preHandle不生效主因是未注册到SpringMVC拦截器链,需用@Component标记并实现WebMvcConfigurer重写addInterceptors方法显式注册。
-
百度翻译API需实名认证后在fanyi-api.baidu.com创建“通用”类型应用获取APP_ID和SECRET_KEY;签名须用MD5(APP_ID+q+salt+SECRET_KEY)生成,q要URL编码,salt每次随机;请求用POST、设UTF-8头,语言代码如"jp";注意52001超时、54000缺参、空q导致trans_result为空;限流2QPS,密钥勿硬编码。
-
魔术数字是指未解释、无来源、突然出现且反复复用的字面量,如if(status==3),导致修改困难、易出错、理解成本高;应按语义位置、上下文命名、类型安全(优先枚举)三原则替换为常量,并聚焦HTTP码、业务规则值、协议字符串等高风险项。
-
compareTo返回负数表示当前字符串字典序小,0表示相等,正数表示字典序大;具体值为首个不同字符Unicode码点之差,不可用==-1判断小于关系。