-
应避免使用SimpleDateFormat.parse()处理时间戳,正确做法是用newDate(long)构造再format();需显式设置时区防止偏移;因其线程不安全,推荐每次new、ThreadLocal封装或升级到Java8的DateTimeFormatter。
-
BufferedReader缓冲区大小重要但非越大越好,默认8KB适合多数场景;读取日志等小文件保持默认,批量处理大文本可设64KB并配合mark/reset;需显式指定字符集、避免流重复关闭、优先用try-with-resources管理生命周期。
-
策略模式核心价值在于对“行为”的抽象和封装,通过定义一系列可相互替换的算法,使其独立于使用它的客户端而变化。1.策略接口定义算法抽象;2.具体策略类实现不同算法;3.上下文持有策略引用并委托执行。它避免了复杂的if-else逻辑,提高系统灵活性和可维护性,适用于多变的业务规则如折扣计算、数据解析等场景。
-
Java项目配置GradleWrapper的核心是自带可执行Gradle分发包以保证构建一致性,通过gradlewrapper命令生成脚本及配置文件,所有构建须用./gradlew触发,并确保相关文件纳入版本控制。
-
Object.clone()默认浅拷贝:基本类型值复制,引用类型只复制地址;String和包装类因不可变性表现类似深拷贝;基础类型本身无引用,故深/浅拷贝无区别。
-
Java中的switch语句默认采用贯穿执行(fall-through)行为:一旦匹配到某个case,将从该case开始顺序执行后续所有语句,直到遇到break、return、throw或switch结束为止。
-
null表示数组未初始化,length==0表示已创建但无元素;必须先判null再判length,推荐用Objects.nonNull(arr)&&arr.length==0确保安全。
-
Java带参数方法需显式声明类型和名称,如voidprintName(Stringname);多参数用逗号分隔;基本类型性能优,包装类支持null和泛型;可变参数String...须置末位;改private前须确认调用范围。
-
throw是实际抛出异常对象,throws是声明可能抛出的异常类型;throw后接new创建的异常实例,throws后接异常类名;一个方法可多处throw,但throws只在方法签名中声明一次。
-
AnnotationFormatError是类加载期错误,非运行时异常,源于字节码中注解结构违反JVM规范,常见于构建工具增量编译、混淆或JDK升级后,需通过javap反编译定位常量池异常。
-
应使用BufferedReader包裹System.in进行控制台输入,因其readLine()总读完整行、行为确定;写日记用Files.write()配合APPEND/CREATE和UTF-8编码;读日记用Files.readAllLines()但需捕获NoSuchFileException并判空;路径应封装为静态常量并优先使用用户主目录。
-
Java工具类必须私有化构造方法并抛出UnsupportedOperationException异常,以彻底禁止直接实例化和反射创建对象,同时类需声明为final防止继承,二者缺一不可。
-
Java对象分配位置取决于GC算法、对象大小、TLAB开关及内存连续性:小对象优先TLAB,大对象可能直入老年代或G1的Humongous区;指针碰撞需内存规整且无碎片,否则回退空闲列表。
-
绝大多数情况下catch块必须记录日志,但仅限真正处理并终结异常传播路径时;业务异常用warn,系统异常用error并保留完整堆栈;避免重复记录、截断堆栈及异步场景日志丢失。
-
MyBatis插件必须实现Interceptor接口,仅能拦截Executor、StatementHandler、ParameterHandler、ResultSetHandler四大对象;优先选StatementHandler修改SQL,用MetaObject而非字符串拼接;需Plugin.wrap注册,XML中写全限定名;分页参数须通过ThreadLocal传递,Executor拦截适合统计总数,SQL重写需按数据库方言分支处理。