-
LocalDate和LocalTime是Java8新增的不带时区的日期时间类,分别用于处理年月日和时分秒纳秒,具有不可变性,支持创建、运算、比较及格式化解析,适用于生日、打卡等场景,但跨时区需使用ZonedDateTime或OffsetDateTime。
-
一个类应只承担一项职责,通过单一职责原则(SRP)划分明确边界,如UserRepository负责数据存取、UserService专注业务流程、UserValidator处理校验,避免将数据库操作、校验、日志等混合到同一类中;采用分层架构分离关注点,表现层处理请求、业务层封装规则、数据访问层管理持久化、工具类提供通用支持,各层通过接口解耦;共通逻辑如邮箱校验应提取至独立组件如EmailValidator;避免“上帝对象”,使用组合方式让主类委托Validator、Notifier等小对象完成具体任务,保持
-
substring的两个参数是索引位置,beginIndex为起始保留位置(含),endIndex为首个不保留位置(不含),区间为左闭右开。
-
字符串拼接性能差的根源是对象不可变导致频繁内存分配:Python中+=产生O(N²)开销,应改用list+join;Go推荐strings.Builder(预估容量),Java需显式设置StringBuilder初始容量。
-
ThreadLocalMap中Entry的key使用WeakReference是为了避免ThreadLocal对象因线程长期存活而无法被GC回收;但value仍为强引用,若不调用remove(),会导致内存泄漏。
-
super用于调用父类成员,1.可在子类中通过super.方法名()调用被重写的父类方法,实现逻辑扩展;2.子类构造器必须首行通过super()调用父类构造器,否则需确保父类有无参构造器;3.实际开发中常先调用super.method()执行基础逻辑,再添加子类特有行为;4.注意super不能在静态上下文中使用,super()必须是构造器第一条语句,且应避免过度依赖继承,优先使用组合。正确使用super能提升代码复用性与可维护性。
-
根本区别在于锁的处理:sleep()不释放锁且无需同步上下文,wait()必须在synchronized块中调用并立即释放锁。
-
Java类常量(staticfinal基本类型或字符串字面量)在编译期内联为ldc指令,不触发字段访问;修改值后若未重编译依赖类,旧值仍生效;仅编译期确定的常量被内联,非编译期常量(如System.currentTimeMillis())走getstatic。
-
Java使用Scanner读取数值时若输入非法类型(如字符串),会抛出InputMismatchException而非NumberFormatException,而错误的catch语句导致异常未被捕获,程序崩溃退出。
-
WebSocket连接后收不到弹幕,主因是Session被意外关闭;需检查isOpen()、避免异步未发送、禁用轮询改用SimpMessagingTemplate;弹幕时间应服务端归一化为offsetMs;高并发广播改用CopyOnWriteArraySet;XSS防护须后端白名单过滤。
-
do-while循环至少执行一次,因条件判断在循环体之后;适用于先执行后判断的场景,如用户输入校验、重试逻辑;不适用于需跳过首次执行的计数循环。
-
推荐用apt安装OpenJDK(如openjdk-17-jdk),系统自动配置update-alternatives和JAVA_HOME;避免手动解压tar.gz,否则易引发版本不一致、IDE识别失败及构建错误。
-
for循环三部分执行顺序为:①初始化语句(如inti=0)仅执行一次;②每次循环前先判断条件;③每次循环体执行完后执行迭代语句。
-
parallelStream仅在数据量大、单个元素处理耗时明显(如I/O或复杂计算)时才比stream快;小集合(如size<1000)、轻量操作(如String::toUpperCase)、非RandomAccess集合(如LinkedList)、共享可变状态等场景下反而更慢或出错。
-
静态初始化适用于已知元素值的场景,如int[]arr={1,2,3};2.动态初始化用于运行时确定长度,如int[]arr=newint[5];3.声明与初始化可分离,提升灵活性;4.多维数组支持规则与不规则结构,如int[][]matrix={{1,2},{3,4}}或动态分配行列。