-
首先安装JDK并配置JAVA_HOME及Path,验证java-version;接着配置Maven环境变量并运行mvn-v确认;然后通过SpringInitializr生成项目,选择构建工具、语言和依赖;最后导入IDE运行主类,访问localhost:8080验证服务。
-
SynchronousQueue不存储元素,生产者放入数据必须等待消费者取出,实现线程间直接交接。其容量为0,不支持null值,可选公平与非公平模式,默认使用Treiber栈实现。常用于需要精确任务协作的场景,如newCachedThreadPool线程池,确保任务不排队、直接传递。使用时需配对put与take操作,避免阻塞,推荐结合超时机制提升健壮性。
-
Arrays.fill可高效填充数组,支持全量或部分填充,如Arrays.fill(arr,0,10,-1)初始化前10个元素为-1,注意fromIndex≥0且toIndex≤数组长度。
-
在SpringBoot中,应保持正常响应(ApiResponse)与错误响应(ErrorResponse)分离,通过HTTP状态码区分语义;前端依据status判断解析逻辑,而非强行合并两类DTO,从而兼顾REST规范性、可维护性与前后端协作效率。
-
构造器在Java等主流面向对象语言中完全不能被重写,因其不参与继承体系,既不被继承也不具备多态性;super()调用仅是初始化链中的显式委托,而非重写。
-
return语句必须严格匹配方法声明的返回类型,且非void方法的每条执行路径都需有return、throw或异常;return后代码不可达(finally除外);返回null易引发空指针,应优先用Optional或空集合替代。
-
Java反射无法获取List的String类型是因类型擦除,运行时泛型信息丢失;需用TypeToken匿名子类保留泛型,如newTypeToken<List<User>>(){},并根据框架需求选择getType()或getRawType()。
-
左移<<等价于乘2的幂但需防溢出,右移>>算术右移保留符号位,>>>无符号右移补0,位移量对类型长度取模,运算符优先级低于加减需加括号。
-
@Override报错是因为方法签名未严格匹配父类或接口:方法名、参数类型/顺序、返回类型(协变除外)、异常声明须一致;常见于参数类型不等价、访问权限降级、误覆写static方法或泛型擦除导致的签名不匹配。
-
必须用synchronized而非volatile的场景是需保证复合操作原子性时,如i++、多变量协同更新(如银行转账),因volatile不保证原子性,而synchronized可锁住整个临界区确保串行执行。
-
使用ConcurrentHashMap、Future+Callable、ReadWriteLock或Caffeine等方案可实现Java线程安全缓存。1.ConcurrentHashMap适用于高并发读写场景,通过分段锁或CAS保证线程安全;2.Future方案结合原子操作避免多线程重复计算,提升性能;3.ReadWriteLock提供读写锁分离,适用于强一致性要求的批量更新;4.推荐使用Caffeine或GuavaCache等成熟库,内置线程安全与自动加载机制,简化开发。核心是避免竞态条件并控制读写互斥
-
PermGen在JDK7及之前会OOM是因为其大小固定且与堆共享内存,类加载过多(如热部署、动态代理)时无法扩容,GC回收弱,ClassLoader泄漏导致元数据持续累积。
-
本文介绍一种高效计算偶数元素位移量的方法:不实际移动数组,而是通过统计每个偶数前的奇数个数,直接得出其在重排后的位置偏移量,时间复杂度O(n),空间最优且逻辑清晰。
-
Date构造器年份参数是距1900年的偏移量,如newDate(2024,0,1)实际为2924年;月份从0开始;该构造器已弃用,应改用LocalDateTime或Calendar;SimpleDateFormat非线程安全;Calendar.DAY_OF_WEEK与日常认知不一致,建议用LocalDateTime.getDayOfWeek();set()惰性设置,add()立即计算;时区易出错,推荐用toInstant()或Instant过渡。
-
首先定义Student类封装学生信息与成绩,通过ArrayList存储学生数据,利用Collections.sort()按总分降序排序并输出排名,可扩展平均分、最高分、及格率等统计功能。