-
Java算术运算符含+、−、*、/、%五种,支持数值计算与字符串拼接(仅+),整数除法截断小数,%余数符号同被除数,++/--分前置后置影响求值顺序。
-
Lock接口需手动获取和释放锁,必须在finally中调用unlock();ReentrantLock支持重入、可中断、超时等特性;tryLock()用于非阻塞或超时获取;默认非公平,公平锁性能较差;锁粒度与持有时间需设计合理。
-
应使用卫语句提前拦截null而非重复判断,JDK版本决定switch用法,布尔条件直接用if(flag)避免冗余和空指针,嵌套过深需拆分职责或改用策略模式。
-
公平模式下SynchronousQueue使用FIFO队列严格按调用顺序匹配put/take线程,通过TransferQueue实现,吞吐较低但顺序确定;非公平模式用LIFO栈(TransferStack)就近配对,吞吐高但可能饿死老线程。
-
StringBuilder.reverse()直接在原char[]上双指针原地交换,时间O(n/2)、空间O(1);String不可变故无reverse()方法;手写需注意left<right循环条件及索引不越界。
-
统计字符频次用HashMap遍历toCharArray()最稳妥,注意大小写和空白符处理;单词统计先清洗标点再split("\s+")并过滤空串;文件读取用Files.lines()防OOM,注意编码和路径;输出用stream排序+String.format对齐。
-
Java集合交集用retainAll会修改原集合,需先复制;并集需根据类型选择addAll或HashSet/Stream;差集a.removeAll(b)对应A−B;三操作均依赖正确实现的equals/hashCode。
-
心跳检测应使用ScheduledExecutorService而非Timer,因其多线程、任务异常互不影响;服务剔除需加ReentrantLock且区分健康状态;接口返回须深拷贝;本地测试需统一host解析为IP。
-
recv()会读到多个或半个消息,因TCP是无消息边界的字节流,需应用层通过定长包、分隔符或长度前缀等协议机制自行处理粘包与半包问题。
-
Java反射调用私有方法需先调用setAccessible(true),再invoke();读写私有字段同理,且需注意类型匹配、final字段限制及模块化访问控制。
-
菜单项类只存基础字段,价格计算推迟到订单生成时动态执行;订单类每次调用getTotal()都重新累加各菜品最终价格;控制台输入统一用nextLine()+try-catch解析防崩;用ArrayList管理菜单项支持安全增删。
-
Java8起接口支持静态方法,用于提供不依赖实现类的工具功能,只能通过接口名调用,不可继承或重写,适用于工厂逻辑、通用校验转换等场景,与默认方法相比无this上下文且不可被重写。
-
Java中反转List最常用、最推荐的方式是使用Collections.reverse()方法,它直接修改原列表,无需额外空间,简单高效;适用于所有List实现类,时间复杂度O(n),对ArrayList性能最优,LinkedList略慢;若需不可变结果,可先复制再反转或用StreamAPI;频繁使用时建议封装泛型工具方法。
-
不能。增强for循环仅支持数组和实现了Iterable接口的类型,对基本类型数组(如int[])和引用类型数组(如String[])有效,但不支持未实现Iterable的自定义类(如MyArray),否则编译报错“canonlyiterateoveranarrayoraninstanceofjava.lang.Iterable”。
-
滑动窗口限流必须用Redis的ZSET而非INCR+EXPIRE,因后者仅支持固定窗口,无法防止“窗口边缘刷量”;ZSET通过毫秒级时间戳实现精确滑动统计,并需Lua脚本原子执行ZREMRANGEBYSCORE、ZCOUNT和ZADD。