Skip to content

Java · 01 语言基础 ​

语法、类型、集合、函数——服务交付与协作,不是语法百科。面试细题见 就业指南 · Java。

1. 定位:Java 卖什么 ​

Java 卖的是 可控与存量:

  • 静态类型 + 编译期检查:大项目改起来相对敢下手
  • 工程型语言:强调可维护、可协作,而不是写起来最短
  • 生态绑死企业场景:ORM、中间件、监控、招聘市场都围绕它转
  • 「慢热」:启动和样板代码有成本,换来的是长期可预期

一句话:Java 不是爽感语言,是 长期系统的默认承重墙。

和本站其它语言的分工 ​

语言角色什么时候上
Java主业务、库表权威、事务与权限默认
PythonAI / 脚本 / 胶水模型与批处理
Node(TS)BFF / Electron 本地服务靠近前端与桌面
Go边车、小高并发工具补位
C#Windows / .NET 存量撞上再学

2. 类型系统:怎么用才省事 ​

该坚持的 ​

  • 业务入参出参用明确类型,少用裸 Map<String, Object> 当领域模型
  • 集合声明用接口类型:List / Map,实现类留给创建处
  • 空值策略统一:要么 Optional 用在返回值边界,要么约定「禁止 null + 校验」,团队内二选一

现代语法(Java 8+)我怎么用 ​

特性我会用我会克制
Lambda / 方法引用回调、集合短变换嵌套三层看不懂的写法
Streamfilter/map/collect热点路径里无意义的多次中间集合
Optional方法返回「可能没有」字段到处 Optional、get() 乱飞
var右边类型已经很明显时公共 API 签名里炫技
record(新版本)不可变 DTO / 事件强行替代一切实体

异常 ​

  • 受检异常有历史包袱:边界转换成业务错误码 / 运行时异常,避免 throws Exception 污染整条调用链
  • 业务可预期失败(库存不足、状态不允许)用明确错误模型,不要全靠异常控制流程
  • 真正异常(下游超时、磁盘满)打日志 + 可观测,必要时熔断降级

3. 集合与常用 API ​

选型直觉 ​

场景常用选择注意
有序列表ArrayList随机访问快;中间插入多再考虑 LinkedList(实际很少)
去重 / 存在判断HashSet元素要正确实现 equals/hashCode
键值HashMap单线程默认;并发读多写少 → ConcurrentHashMap
有序键TreeMap / LinkedHashMap排序成本 vs 插入序
队列ArrayBlockingQueue 等线程池、异步任务背压

equals / hashCode ​

实体进 Set / 当 Map key 时必须成对正确;只改业务字段、用 IDE 生成或用业务主键策略,避免「明明同一个单号却去重失败」。

函数式接口 ​

Function / Predicate / Consumer / Supplier 让回调短。原则:可读性优先——同事 10 秒看不懂的一行 Stream,不如三行 for。


4. 面向对象:交付里真正有用的部分 ​

  • 封装边界:Controller 薄、Service 承载用例、基础设施向外适配
  • 组合优于深层继承:业务差异用策略 / 多态,少造七层基类
  • 接口面向能力:PaymentGateway 而不是绑死某 SDK 类名

八股式「三大特性」能答;落地更看 模块怎么切、依赖怎么指。


5. 我为什么仍把 Java 当主栈 ​

  1. ToB / 工业 / CRM 类交付,招聘与中间件默认就是它
  2. 静态类型在多人、多月项目上更敢改
  3. 和 Spring 绑在一起后,批量交业务的路径最熟
  4. AI 来了也不换墙:Java 管状态与配额,Python 管模型试错

下一篇:02 核心能力(JVM、并发、内存——语言真正不同的地方)