-
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判断小于关系。
-
魔数须为4字节固定int型(如0x12345678)以区分非法连接,版本字段占1字节便于平滑升级;长度字段紧随其后且定长4字节,表示消息体字节数并校验上限;消息体首选Protobuf,避免嵌套过深,不加应用层分隔符。
-
用sdkman管理JDK最省心:Linux/macOS执行curl安装后,用sdklist/install/use/default切换版本;Windows推荐choco安装+IDE或.tool-version文件指定版本,避免JAVA_HOME错误导致编译失败。
-
Java二维数组传参传递的是外层数组对象的引用,修改元素或某行引用会影响原数组,但重赋值参数变量无效;需深拷贝才能隔离修改。
-
Java聊天室核心是用ServerSocket配合多线程实现并发连接:accept()后立即启新线程处理客户端,避免阻塞;广播消息需异步、容错、不阻塞;客户端须分离读写线程;严格按行协议处理TCP粘包。
-
Maven项目中的依赖并非无条件加入运行时类路径,其实际行为取决于打包类型、作用域(scope)及所用插件——编译期默认包含compile和provided依赖,而运行时是否包含则由构建目标(如JAR/WAR/SpringBoot可执行包)决定。
-
try-catch后代码是否继续执行取决于异常是否被捕获及catch块内操作:未捕获或主动throw则终止,否则继续执行后续语句;finally几乎总执行,但System.exit()或JVM强制终止会跳过;多catch须子类在前、父类在后;空catch极危险,应记录日志或明确注释。
-
@SneakyThrows通过编译期字节码操作将受检异常强制转为RuntimeException抛出,绕过javac检查;需正确配置Lombok、作用于具体方法且匹配异常类型,避免滥用破坏API契约与异常可追溯性。
-
spring.autoconfigure.exclude配置项必须写在application.properties或application.yml中,用于启动早期全局排除自动配置类,会覆盖@SpringBootApplication的exclude参数。
-
Java对象内存布局由对象头(MarkWord和ClassPointer)、实例数据区(字段重排序)和对齐填充三部分组成;数组对象额外包含4字节length字段;对象大小需满足8字节对齐,最小为16字节。
-
内部类是定义在类内部的类,能访问外部类所有成员,主要用于封装辅助逻辑、提升代码组织性。1.成员内部类用于与外部类强关联的场景;2.局部内部类封装方法内的复杂逻辑;3.匿名内部类常用于事件监听等临时实例;4.静态嵌套类适用于无需外部实例绑定的逻辑。通过private修饰可隐藏实现细节,增强封装性。典型应用如ArrayList的Itr类实现迭代器模式,直接访问内部数据,保证安全高效。内部类是解决类与辅助逻辑组织的有效手段,使代码更清晰、安全、易维护。
-
包装类用于将基本类型转为对象,支持自动装箱拆箱、字符串与数值转换及类型间转换。Java为每种基本类型提供对应包装类,如Integer、Double等,位于java.lang包。自动装箱允许基本类型直接赋值给包装类变量,反之则为拆箱。字符串转基本类型用parseXxx()方法,如Integer.parseInt("123");转包装类对象可用valueOf(),该方法对-128~127的Integer值有缓存优化。基本类型转字符串可通过String.valueOf()或toString()方法。数值类型间转