-
Collections.sort()要求List元素实现Comparable或传入Comparator,仅支持List且不返回新集合;Stream.sorted()创建新集合;TreeSet/TreeMap天然有序但相等性依赖compareTo而非equals。
-
Math.abs()、Math.max()/min()对负零、NaN、无穷大有特殊行为;Math.round()非银行家舍入,仅加0.5后取整;Math.pow()/sqrt()处理负数直接返回NaN;Math.random()线程不安全且精度有限,推荐ThreadLocalRandom。
-
掌握Java开发需选合适工具:先装JDK实现编译运行,初学者可用文本编辑器配命令行熟悉流程,进阶者推荐IntelliJIDEA等IDE提升效率,复杂项目则依赖Maven或Gradle自动化管理构建。
-
接口签名校验需统一算法与参数处理流程,含时间戳、nonce防重放,服务端用Filter/Interceptor校验,参数排序拼接后加secretKey哈希,安全比对签名并防范时序攻击。
-
Java方法参数传递只有值传递,基本类型传递数值副本,引用类型传递地址副本,修改参数不影响原变量或原引用指向。
-
在Java泛型中,若需声明一个可接受所有实现特定接口(如ISomething)的类的Class引用,应使用通配符上界语法Class<?extendsISomething>,而非Class——后者表示“ISomething接口自身的Class对象”,而前者才表示“任何ISomething子类型(包括实现类、子类)的Class对象”。
-
构造器链是Java中通过this()或super()实现的构造器调用链条。当创建对象时,若构造器中使用this()调用本类其他构造器,或super()调用父类构造器,便会形成自下而上的初始化链,确保各层级正确初始化。this()用于本类构造器间重用,减少重复代码;super()确保父类先被初始化,若未显式调用且父类无无参构造器则会编译失败。执行顺序为:子类构造器→super()→父类构造器→...→Object,再逐级返回。每个构造器最多调用一次this()或super(),且必须位于首行。理解构造器链有
-
Java数组声明时直接初始化最常用且安全,支持显式写法(如int[]arr1=newint[]{1,2,3})和简化写法(如int[]arr2={1,2,3},仅限声明同时赋值);动态长度需用new创建并设默认值;Arrays.fill()可批量赋相同值;注意ArrayStoreException及泛型转数组陷阱。
-
标记-清除算法适合老年代对象存活率高、回收频率低的场景,因其不移动对象导致内存碎片,易因无法分配大对象而触发FullGC或OOM。
-
多行注释使用/开始、/结束,可跨多行且编译器忽略其内容,适用于解释复杂逻辑或临时屏蔽代码块,但不可嵌套。
-
多态通过继承和方法重写实现,允许父类引用调用子类方法,提升代码扩展性与维护性;示例中Animal父类引用指向Dog和Cat子类对象,调用makeSound()时输出各自重写后的声音;集合遍历和方法参数通用化是多态典型应用场景;属性不支持多态,父类引用无法直接访问子类特有方法,需强制转型并配合instanceof确保安全;核心原则是“编译看左边,运行看右边”。
-
注解是Java中为代码添加元数据的标签机制,用于描述程序元素的额外信息,如@Override确保方法重写正确,@Deprecated标记过时代码。编译器或框架可读取这些信息执行相应操作,例如Spring通过@Controller、@Autowired等注解实现依赖注入和控制器注册,替代繁琐的XML配置。开发者还可自定义注解并结合反射在运行时动态处理,实现日志、权限校验等功能。注解的生命周期由@Retention策略控制,其中RetentionPolicy.RUNTIME保留至运行时,支持反射访问,是框架实
-
通过suspendCancellableCoroutine将基于回调的异步API安全地封装为挂起函数,使协程能自然等待结果返回,避免阻塞线程,同时保证后续代码严格在结果就绪后执行。
-
在SpringBoot的GraphQL服务中,需通过Kotlin的可空类型(如Int?)或Java的包装类(如Integer)来安全接收可选参数,避免因缺失字段导致的解析异常。
-
受检异常必须显式处理,否则编译不通过;运行时异常继承自RuntimeException,编译器不检查;Error代表JVM严重问题,一般不捕获。