-
适合做「有真实并发痛点」的中小型业务系统,而非纯玩具项目;伙伴匹配系统因天然存在抢人、跨表写入、Redis非原子操作、定时任务与前台竞争等典型并发问题,比用户中心更适合作为练手项目。
-
答案:Java中类型转换分自动和强制两种,自动转换从小到大类型安全提升,强制转换需显式声明但可能丢失精度;基本类型与引用类型通过包装类实现装箱拆箱;字符串与数值转换常用parseInt、valueOf等方法。
-
本文详解如何在Jackson中使用@JsonTypeInfo和@JsonSubTypes实现基于字段(如"method")的多态反序列化,尤其解决泛型List<T>在外部类型标识(As.EXTERNAL_PROPERTY)下无法正确绑定的典型问题。
-
不能。增强for循环仅支持数组和实现了Iterable接口的类型,对基本类型数组(如int[])和引用类型数组(如String[])有效,但不支持未实现Iterable的自定义类(如MyArray),否则编译报错“canonlyiterateoveranarrayoraninstanceofjava.lang.Iterable”。
-
应使用ArrayList替代数组存储员工对象,重写Employee的equals()和hashCode(),用Stream过滤查询,Iterator安全删除,HashMap按部门索引,Comparator链式排序,CSV文本持久化并异常兜底。
-
Java转义字符的核心作用是让编译器将特殊字符视为普通字符或插入控制字符,均以单个反斜杠\开头;基础有\n、\t、\r、\b、\f、\"、\'、\\八种;需在字符串、字符字面量、正则、路径等场景规避语法冲突;还可通过\uXXXX和\ddd编码表示任意字符;使用时须注意转义层级与上下文。
-
实现SpringBoot多语言国际化核心在于配置MessageSource和LocaleResolver。1.创建以messages开头、按语言区分的.properties资源文件,如messages_en.properties、messages_zh.properties等,存放键值对文本;2.配置MessageSourceBean指定资源文件路径及编码方式,确保系统能正确加载对应语言内容;3.使用LocaleResolver(如SessionLocaleResolver或CookieLocaleRes
-
Stream.distinct()不保证顺序,仅在有序流中保留首次出现元素;并行流下顺序失控,需用LinkedHashSet手动去重或Collectors.toMap按字段去重。
-
Java只支持值传递。基本类型传递值副本,方法内修改不影响原变量;引用类型传递地址副本,可修改对象状态但无法改变原引用指向,String等不可变类重新赋值仅改变局部引用。
-
静态分派在编译期根据引用变量声明类型选择重载方法,动态分派在运行时依据实际对象类型查找重写方法;invokestatic/invokespecial指令不查表,invokevirtual指令触发虚方法表查找。
-
ForkJoinPool的工作窃取算法通过双端队列实现“自己从尾取、别人从头偷”,提升CPU利用率;需继承RecursiveTask/Action并合理拆分任务、设置阈值;应避免阻塞,善用统计方法调优。
-
拦截StatementHandler.prepare是最稳切入点,因其在SQL解析完成、参数未绑定、未预编译时可安全修改表名;需用正则精准提取from/join/update后首个标识符,结合白名单校验;通过反射修改BoundSql私有sql字段并及时恢复访问限制;分片键须由ThreadLocal传递且务必clear()。
-
StackWalker是Java9引入的轻量级堆栈快照工具,专为降低GC压力、避免StackTraceElement大量分配而设计,不替代getStackTrace(),而是适用于高频日志、AOP、监控等场景。
-
IllegalStateException在Java中用于表示对象处于不合法状态时的方法调用,常见于迭代器、流操作、数据库连接及自定义状态机等场景。例如,未调用hasNext()就调用next()、对已关闭的流进行读写、或在播放器已播放时再次调用play()。该异常属于运行时异常,无需强制捕获,但建议在关键路径中通过逻辑判断预防,如使用hasNext()控制循环而非依赖try-catch。最佳实践包括:方法内校验状态并主动抛出带清晰信息的异常、提供isConnected()类状态查询方法、文档注明可能抛出
-
Stack类是Vector的子类,实现LIFO栈结构,提供push、pop、peek、empty和search方法;尽管其线程安全,但现代Java推荐使用ArrayDeque替代以获得更好性能。