-
Java地址簿管理需设计Contact实体类(含name、phone、email、address、id字段及equals/hashCode/toString)和AddressBook管理类(用ArrayList或HashMap存储,提供增删改查方法),支持文件持久化(序列化或JSON)与命令行交互。
-
Collectors.mapping用于将元素转换后传递给下游收集器,常与groupingBy等组合使用,实现分组后字段提取、去重收集及嵌套转换,如按部门分组并收集员工姓名列表,其核心是“先映射,再收集”,适用于复杂聚合场景。
-
SHA256算法无论输入多长,始终生成256位哈希值;以十六进制字符串形式存储时,固定占用64个字符,因此MySQL中使用CHAR(64)即可高效、精准地保存。
-
并发编程常见陷阱包括:共享变量未加锁导致写丢失和脏读;volatile无法解决复合操作原子性;synchronized需共用锁对象;AtomicInteger比synchronized更优;ArrayList加锁仍不安全;ThreadLocal易内存泄漏须显式remove;FixedThreadPool无界队列易OOM;wait/notify须在synchronized中用while判断条件。
-
Error是系统级无法处理的严重问题,如内存溢出;Exception是程序可捕获并处理的异常,如空指针。
-
自定义异常提升Java代码可读性与维护性,通过继承Exception或RuntimeException定义异常类,添加含消息和原因的构造方法;在业务逻辑如取款余额不足时抛出该异常;结合SLF4J等日志框架在catch块中记录上下文信息;Web应用中使用@ControllerAdvice实现全局异常处理,统一响应格式并确保日志完整,从而增强系统可观测性与稳定性。
-
Java异常类默认实现Serializable接口,以支持RMI、分布式框架异常传递及日志快照等场景;自定义异常继承Exception或RuntimeException时无需显式实现,但需注意字段可序列化并建议声明serialVersionUID。
-
使用ScheduledExecutorService结合volatile变量、CyclicBarrier和BlockingQueue实现线程间定时协作,通过定时调度与同步工具确保多线程按需协调执行任务。
-
必须同步重写equals和hashCode,否则破坏哈希契约:若equals为true则hashCode必须相同,否则HashMap等集合会查找不到、重复添加或丢失元素;二者字段需一致、顺序相同且稳定。
-
String.equals()不能用==判断,因==比较内存地址而非内容;登录校验须用.equals()并判空,推荐"expected".equals(input);密码哈希比较需防时序攻击,应使用MessageDigest.isEqual()或PasswordEncoder.matches()。
-
int[]声明只创建栈中引用变量,值为null;newint[5]或{1,2,3}才在堆中分配内存;数组长度不可变,“扩容”实为新建+复制。
-
LinkedHashMap默认按插入顺序维护元素,设accessOrder=true时转为访问顺序(LRU);put()和get()均触发节点移至链表尾,遍历顺序由双向链表保障,与哈希桶无关,扩容不破坏顺序。
-
泛型是Java中通过类型参数实现类型安全和代码复用的机制,它允许在定义类、接口或方法时使用类型占位符(如T),从而避免强制类型转换和运行时类型错误。例如,使用List<String>后只能添加String类型元素,编译器提前检查类型合法性,防止ClassCastException。自定义泛型类如Box<T>可封装任意类型值,泛型方法如<T>voidprint(Titem)可接受任何类型参数并由编译器自动推断。通配符?配合上界限定(?extendsT)和下界限定(?sup
-
Properties最轻量稳妥,适合纯本地键值配置,但不支持嵌套和注释;需用getResourceAsStream()读取classpath资源,注意编码(Java9+用load(Reader),Java8用InputStreamReader指定UTF-8),避免重复load导致键值污染,复杂需求应换用ApacheCommonsConfiguration等增强工具。
-
Java面试重在用底层原理解释线上问题:ConcurrentHashMap舍分段锁因CAS+Node锁优化;String不可变因hashCode缓存、常量池及类加载机制;newString("abc")创建两个对象因常量池复用与堆新建分离;volatile不保证原子性,仅保障可见性与有序性;HashMap链表转红黑树阈值为8是泊松分布概率测算结果;Class.forName()触发初始化而loadClass()不触发。