-
@Valid不生效的首要原因是未引入spring-boot-starter-validation依赖;其次需确保@Valid修饰参数且紧跟BindingResult,注意@Validated与@Valid在分组和嵌套校验中的差异,自定义注解须匹配泛型类型及Jakarta命名空间。
-
mapUnderscoreToCamelCase只对自动映射生效,即未定义resultMap、未用@Column/@TableField显式绑定、未在@Select中指定resultMap时才起作用;SpringBoot需在application.yml中配置mybatis.configuration.map-underscore-to-camel-case:true,且resultMap须设autoMapping="true"才能兼顾手动与自动映射。
-
Collections.reverse()原地反转可变列表,不返回新列表;传入null抛NPE,空列表静默处理;Arrays.asList()结果不可修改,需先转ArrayList;非按元素排序,与Stream.sorted(reverseOrder())本质不同。
-
最直接有效的统一封装方式是@ControllerAdvice+@ExceptionHandler,仅拦截控制器层异常,需确保类被Spring扫描;推荐按BusinessException、RuntimeException、Exception分层处理,自定义异常应继承RuntimeException并携带code、HttpStatus等字段,避免newException随意抛出;ResponseStatusException适合简单状态码映射但不支持自定义字段;日志应在@ExceptionHandler中统
-
需先用uname-m确认系统架构(x86_64/aarch64/i686),再下载匹配的JDK17+tar.gz包;解压至/opt/后,正确配置JAVA_HOME和PATH($JAVA_HOME/bin必须前置),source/etc/profile,并用which、readlink-f、echo三命令验证生效。
-
答案:使用Mockito可创建mock对象并验证行为。首先添加依赖,通过@Mock或Mockito.mock()创建mock对象,用when().thenReturn()设定返回值,verify()验证方法调用次数及方式,结合JUnit注解初始化提升效率。
-
Stream.filter不改变原List,因返回新Stream且惰性求值;必须collect才能落地结果,toList()返回不可变列表,需可变时用toCollection(ArrayList::new);filter不自动处理null,应显式检查。
-
InterruptedException是线程收到中断请求的信号,需正确处理以保证程序可取消性;常见场景包括sleep、wait、join时被interrupt()打断;应捕获后恢复中断状态、清理资源退出或抛出异常,避免忽略或仅打印日志。
-
观察者模式是一种行为设计模式,用于处理对象间的一对多依赖关系。其核心在于当被观察者状态改变时,所有观察者都会自动收到通知并更新,从而实现组件间的松耦合。1.它适用于事件驱动系统、数据变化通知、消息队列或订阅系统等场景;2.Java中可通过自定义观察者接口和被观察者类来实现,包括注册、移除和通知观察者的方法;3.使用时需注意内存泄漏、线程安全及通知顺序等问题。
-
ArrayList随机访问为O(1),LinkedList为O(n),因前者基于数组后者为链表;频繁索引遍历时ArrayList快3–10倍;仅头部/中间高频增删且无随机访问需求时才选LinkedList。
-
AtomicInteger通过CAS机制实现线程安全的整数操作,避免synchronized开销,适用于高并发计数、状态控制等场景,典型方法包括incrementAndGet、compareAndSet等,配合volatile与Unsafe类保证原子性,常用于请求计数、限流控制和状态标记,但高竞争下可能因自旋导致性能下降,极端场景可考虑LongAdder替代。
-
Java并发问题多源于线程安全、内存可见性与锁机制理解偏差:共享变量未同步致数据竞争;volatile不保证复合操作原子性;应优先用AtomicInteger或synchronized/ReentrantLock;避免暴露可变共享对象;锁粒度、锁对象选择需谨慎;须重视happens-before规则与内存可见性;线程池需依场景选队列、设拒绝策略并处理异常。
-
首先安装JDK并配置JAVA_HOME环境变量,然后下载安装IntelliJIDEA社区版,创建项目时正确设置ProjectSDK路径,最后编写测试代码验证运行;若出现“Cannotresolvesymbol'java'”错误需检查JDK配置。
-
学生类应私有字段+getter/setter+构造器约束必填项;id用Long/String避免0误判;name校验非空;年级等用enum;集合依查询方式选HashMap(按ID查)或ArrayList(遍历展示);控制台输入统一用nextLine()转类型并校验;增删改查需处理重复、空值、不存在等边界。
-
Calendar.get(WEEK_OF_YEAR)不可靠,因依赖Locale的首日和最小天数;正确做法是锚定日期推算周一/周六;SimpleDateFormat解析会清空时分秒;set后须调getTime()刷新;Java8+推荐用LocalDate+TemporalAdjusters。