-
Deque接口支持双端操作,提供addFirst/offerFirst、addLast/offerLast、removeFirst/pollFirst、removeLast/pollLast等方法,推荐使用offer和poll系列避免异常;可高效模拟栈行为,通过push、pop、peek实现后进先出,适用于表达式解析、括号匹配、DFS等场景;在滑动窗口问题中维护单调队列,利用下标存储与队尾比较保持单调性,将时间复杂度从O(nk)优化至O(n);遍历时可使用iterator()或descendingIter
-
Set通过equals和hashCode方法判断元素存在性,HashSet利用hashCode定位再用equals比较,TreeSet通过排序比较,须保证equals与hashCode一致以确保contains正确。
-
应优先用sudopkginstallopenjdk17安装Java,避免ports编译;配置JAVA_HOME为/usr/local/openjdk17,修改/etc/login.conf设置环境变量与ulimit,并执行cap_mkdb生效。
-
Gradle是通用构建工具,Java版本需通过启用java插件并设置sourceCompatibility与targetCompatibility指定;编译不依赖JAVA_HOME,而是由Gradle自行管理JDK;implementation与compileOnly分别控制依赖的传递性与编译期可见性。
-
首先安装JDK确保javac可用,再用update-alternatives管理多版本,最后设置JAVA_HOME提升工具兼容性与环境一致性。
-
单元测试和Mock技术是保障Java代码质量的核心手段,首先通过针对最小可测试单元编写测试用例验证其行为,其次使用Mock技术隔离外部依赖以确保测试独立性;编写有效单元测试需遵循测试独立性、覆盖分支与边界情况、使用恰当断言、保持可读性,并结合Mockito等工具模拟依赖;推荐采用JUnit或TestNG等框架,结合TDD原则驱动开发;尽管单元测试无法覆盖并发、性能等问题,仍需集成测试等补充,但其在提升代码健壮性、可维护性和作为代码文档方面具有不可替代的作用。
-
Java中读取配置文件最常用、最轻量的方式是使用java.util.Properties类,它原生支持键值对格式的加载、修改和保存,无需额外依赖;可通过类路径、文件路径、URL或字符串加载,需注意编码(推荐UTF-8)及生产环境写入风险。
-
Java中的StreamAPI通过函数式编程提升集合处理的简洁性与可读性,支持并行计算。首先从集合或数组创建流,如names.stream(),再进行链式操作:filter筛选、map转换、forEach遍历等。中间操作返回新流,终端操作如collect、count触发执行并关闭流,故不可复用。推荐使用Collectors.toList()、groupingBy、partitioningBy高效收集结果。优化性能需尽早filter、避免复杂map计算,大数据量可选parallelStream但注意线程安全
-
@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三命令验证生效。
-
学生类应私有字段+getter/setter+构造器约束必填项;id用Long/String避免0误判;name校验非空;年级等用enum;集合依查询方式选HashMap(按ID查)或ArrayList(遍历展示);控制台输入统一用nextLine()转类型并校验;增删改查需处理重复、空值、不存在等边界。
-
Calendar.get(WEEK_OF_YEAR)不可靠,因依赖Locale的首日和最小天数;正确做法是锚定日期推算周一/周六;SimpleDateFormat解析会清空时分秒;set后须调getTime()刷新;Java8+推荐用LocalDate+TemporalAdjusters。