阿里巴巴Java开发手册(节选)复习要点

0.0(0)
studied byStudied by 0 people
learnLearn
examPractice Test
spaced repetitionSpaced Repetition
heart puzzleMatch
flashcardsFlashcards
Card Sorting

1/51

flashcard set

Earn XP

Description and Tags

本套闪卡基于《阿里巴巴Java开发手册》节选内容,覆盖类型与包装、BigDecimal、日期时间、集合、并发、控制语句、日志、安全等关键强制/推荐规范,帮助考生快速回顾核心规则。

Study Analytics
Name
Mastery
Learn
Test
Matching
Spaced

No study sessions yet.

52 Terms

1
New cards

为什么任何货币金额都必须用最小货币单位且整型来存储?

避免浮点数表示不精确导致的金额误差。

2
New cards

浮点数如何进行等值比较?

指定误差范围比较差值,或使用 BigDecimal 再比较。

3
New cards

BigDecimal 等值比较应使用哪个方法?为什么?

compareTo(),因为 equals() 同时比较值和精度。

4
New cards

禁止使用 BigDecimal(double) 构造方法的原因是什么?

会因二进制无法精确表示十进制而造成精度损失。

5
New cards

POJO 类属性为何必须使用包装类型?

便于表示 null,如远程调用失败时返回 null,避免默认值误导。

6
New cards

为什么定义 DO 类时属性类型要与数据库字段类型匹配?

防止数值溢出或精度丢失,例如 bigint 对应 Long。

7
New cards

新增序列化类属性时可否修改 serialVersionUID?

不要修改,除非完全不兼容,需要避免反序列化失败时才修改。

8
New cards

为什么构造方法中禁止加入业务逻辑?

构造只做对象创建,业务逻辑放 init,避免难以测试与维护。

9
New cards

POJO 类必须实现哪个常用方法以便排查问题?

toString()

10
New cards

在 POJO 中同时存在 isXxx() 和 getXxx() 有什么风险?

框架无法确定调用顺序,导致数据不一致。

11
New cards

使用 String.split 后为何要检查最后一个分隔符?

split 可能忽略尾部空串,导致数组长度比预期小,出现越界。

12
New cards

循环体内连接字符串应使用什么?

StringBuilder.append(),避免频繁创建临时对象。

13
New cards

使用 final 的五种典型场景是什么?

1) 不可继承类;2) 不可修改引用;3) 不可覆写方法;4) 不可重新赋值局部变量;5) 防止变量被重复使用。

14
New cards

为什么慎用 Object.clone()?

默认是浅拷贝,若需深拷贝需自行实现,容易出错。

15
New cards

访问控制从严的八条规则中,静态成员变量仅本类使用应设为?

private(并考虑是否 final)。

16
New cards

日期格式化时年份必须使用小写 y,原因?

大写 YYYY 表示周所在的年份,可能跨年导致结果错误。

17
New cards

SimpleDateFormat 为什么不能定义为 static?

线程不安全;如果必须 static,需要加锁或用 ThreadLocal。

18
New cards

获取当前时间毫秒数推荐使用什么方法?

System.currentTimeMillis()

19
New cards

Java 中禁止使用 java.sql.Date/Time/Timestamp 的原因?

功能缺陷或已知 BUG,易导致时间比较异常。

20
New cards

判断集合是否为空应使用哪个方法?

isEmpty() 而非 size()==0。

21
New cards

使用 Collectors.toMap 时必须提供 mergeFunction 的原因?

处理重复 key,否则抛 IllegalStateException。

22
New cards

Collectors.toMap value 可能为 null 时会怎样?

触发 HashMap.merge 内部检查抛 NullPointerException。

23
New cards

ArrayList.subList 返回对象能否强转为 ArrayList?

不能,返回的是内部类 SubList,会抛 ClassCastException。

24
New cards

Map 的 keySet()/values()/entrySet() 返回集合可否添加元素?

不可,否则抛 UnsupportedOperationException。

25
New cards

使用集合转数组时正确的调用方式是什么?

toArray(new T[0]),传入长度为0的同类型数组。

26
New cards

为什么 foreach 中不能直接 remove 元素?

会触发 ConcurrentModificationException,应使用 Iterator.remove()。

27
New cards

自定义 Comparator 必须满足哪三个条件?

1) 自反;2) 传递;3) 与等号一致,否则排序可能异常。

28
New cards

创建线程或线程池时为什么要命名线程?

便于出错时通过线程名快速定位问题。

29
New cards

为什么不推荐 Executors 创建线程池?

可能隐含无界队列或线程数无限,导致 OOM,应使用 ThreadPoolExecutor。

30
New cards

ThreadLocal 使用后为何必须 remove?

线程池复用线程,未清理会造成内存泄露及业务干扰。

31
New cards

多资源加锁时为何要求统一加锁顺序?

避免死锁。

32
New cards

使用 Lock.lock() 应如何编写 try/finally 结构?

lock(); try{…} finally {unlock();},加锁语句必须在 try 外。

33
New cards

为什么并发场景下推荐使用双重检查锁且变量声明 volatile?

解决指令重排造成的延迟初始化安全问题。

34
New cards

switch 块内为什么必须包含 default 并放最后?

保证任何情况都有处理,易读且避免遗漏。

35
New cards

三目运算符可能因自动拆箱引发什么异常?

NullPointerException。

36
New cards

高并发场景中不应使用“等于”作为终止条件的原因?

并发处理可能击穿条件,导致无法终止,应使用区间判断。

37
New cards

方法内部多层 if-else 应如何优化?

使用卫语句、策略模式、状态模式等,避免超过3层嵌套。

38
New cards

为何禁止在 finally 中 return?

会覆盖 try 块中的返回值,逻辑难以理解,引发错误。

39
New cards

日志输出为何应使用占位符而非字符串拼接?

减少 StringBuilder 创建,提高性能,并在未开启日志级别时避免拼接开销。

40
New cards

生产环境禁止使用 e.printStackTrace() 的原因?

输出到标准错误文件,滚动不及时且难以统一管理。

41
New cards

单元测试应满足 AIR 原则各指什么?

Automatic 自动化、Independent 独立性、Repeatable 可重复。

42
New cards

单测文件应该放在哪个目录?

src/test/java

43
New cards

安全规约中对 SQL 输入应采取什么措施?

使用预编译/参数绑定,不得拼接 SQL。

44
New cards

什么是 CSRF,表单提交必须做什么验证?

跨站请求伪造,必须校验 CSRF token。

45
New cards

为何用户敏感数据展示必须脱敏?

防止隐私泄露,如手机号中间四位用 **** 替代。

46
New cards

错误码 5 位的组成及三大来源字母分别代表什么?

来源字母(A用户/B系统/C第三方)+4位编号。

47
New cards

遇到 RuntimeException 能预检查的场景应如何处理?

通过前置条件判断避免异常,而非 catch。

48
New cards

自定义异常相比直接抛 RuntimeException 的优势?

表达具体业务语义,便于定位和处理。

49
New cards

为什么 catch 后必须处理或继续抛出异常?

捕获后忽略会掩盖问题,最外层需要转化为用户可理解的信息。

50
New cards

finally 块关闭资源时应注意什么?

即使 close() 抛异常也要 try-catch,JDK7 可用 try-with-resources。

51
New cards

日志至少保留多久?生产环境日志保存路径示例?

至少15天;示例:/home/admin/app/logs/app.log。

52
New cards

在日志级别 trace/debug/info 输出前应做什么判断?

使用 logger.isDebugEnabled() 等开关判断,避免无谓计算。