-
Java文件未声明package时归入默认包,但会导致命名包无法引用、模块系统不兼容、构建工具支持弱等问题;应始终显式声明非空package。
-
工厂模式解决对象创建的耦合问题,通过工厂统一生成实例,符合开闭原则;策略模式封装可变的行为算法,实现运行时动态切换,避免冗长条件判断。两者结合时,常由工厂创建具体策略对象,既解耦创建过程,又灵活替换行为,提升代码可维护性与扩展性。
-
饿汉式单例天然线程安全,因static字段在类加载阶段由JVM同步初始化,确保INSTANCE唯一且无竞态;但存在提前创建、无法传参等问题。
-
MyBatis批量更新有三种常用方式。1.利用<foreach>动态构建SQL,适用于中小批量数据和复杂更新逻辑,实现简单但受SQL长度限制;2.使用ExecutorType.BATCH模式,适合大批量数据和统一更新逻辑,性能最优但需手动管理SqlSession;3.利用数据库的ONDUPLICATEKEYUPDATE实现UPSERT操作,适用于数据同步和合并场景,依赖数据库特性但不具备跨数据库通用性。选择时应根据数据量、更新逻辑、数据库类型及错误处理需求综合权衡。
-
Java初学者只需装JDK17(LTS)、IntelliJIDEACommunity和按需启用MavenWrapper;避免JDK21/22或8,禁用IDE插件市场,确保java/javac版本一致、文件名与public类名严格匹配、运行时选对main方法。
-
Java中实现“记住密码”需设setHttpOnly(false)、setMaxAge(604800)、setPath("/"),存服务端签发的绑定设备/IP的token而非密码明文,并同步清理数据库与前端Cookie。
-
Java反射调用私有方法抛IllegalAccessException,主因是Java9+模块系统强化封装,需setAccessible(true)且配合--add-opens等JVM参数才能跨模块访问。
-
replace()按字面值匹配且仅替换首次出现的子串;replace("a","b")非全局替换,全量字面替换需用replaceAll(Pattern.quote("a"),"b")或循环replace()。
-
继承为多态提供基础,通过父类引用指向子类对象实现统一接口多种行为。例如Animal父类被Dog和Cat继承并重写makeSound方法,运行时调用实际对象的重写方法,体现动态绑定;结合抽象类Shape定义area规范,Circle和Rectangle分别实现,新增图形无需修改原有代码,符合开闭原则;实践中应避免过度继承,优先组合,注意构造函数中不调用可重写方法,确保正确使用@Override注解,将“统一接口,多种实现”融入设计以提升扩展性与维护性。
-
本文详解如何在SpringBoot的BeanValidation中,通过自定义注解与约束验证器,将字段名(如email)、校验参数(如min=8)动态注入messages.properties消息模板,实现高复用、可配置的国际化错误提示。
-
使用JWT实现Java后端身份认证需生成、传递、解析和验证Token。首先添加jjwt依赖,登录成功后用Jwts.builder()生成含用户信息和过期时间的Token,并通过密钥签名;前端请求时在Authorization头携带BearerToken;服务端通过JwtFilter拦截请求,解析并验证Token合法性,可结合SpringBoot配置Filter或集成SpringSecurity进行权限控制。密钥应从配置文件读取,避免硬编码,确保安全。
-
Java中对象组合是强拥有关系,体现“整体-部分”生命周期绑定:部分由整体创建、管理并随整体销毁,通过私有成员+构造创建+不暴露引用来实现。
-
Maven允许在多模块项目中构建层级化的嵌套模块结构(如architecture_utils下再定义多个子模块),只需确保父POM正确声明<modules>并遵循聚合与继承分离原则,即可实现高内聚、低耦合的工程组织。
-
Java内部类编译后生成Outer$Inner.class文件,因JVM规范要求二进制名用$连接内外层类名,类加载器按此名称查找同包路径下的.class文件。
-
答案:Java多线程中异常处理需主动捕获并记录,避免静默失败。通过设置UncaughtExceptionHandler处理未捕获异常,在run方法中使用try-catch捕获Runnable异常,Callable异常通过Future.get()获取并处理ExecutionException,结合MDC记录线程上下文信息便于追踪,线程池可通过重写afterExecute统一处理异常,确保异常可见、可追踪、可恢复。