当前位置: 首页 > news >正文

《阿里巴巴 Java 开发手册》核心重点 + 新手必避坑(精简实用版)

目录

一、整体原则(所有代码通用)

二、编程规约(新手重灾区,优先级最高)

1. 命名规范(最基础,面试 / CR 必查)

(1)各类标识符规则

(2)特殊命名约定(企业通用)

2. 格式规范

3. 变量 & 常量

4. 集合使用(新手高频 Bug 点)

5. 控制语句(if/for/switch)

6. 字符串

三、异常处理(新手最乱的模块)

四、MySQL 数据库规约(后端核心,面试 + 工作重点)

1. 建表规范

2. 索引规范(新手性能大坑)

3. SQL 编写规范

4. ORM 层(MyBatis/MyBatis-Plus)

五、工程结构 & 分层规范(项目架构)

六、安全规约(线上必守)

七、性能规约(新手进阶)

二、新手程序员重点注意问题(落地避坑清单)

1. 心态 & 编码习惯(第一位)

2. 每天必检查的代码点(CR 高频问题)

3. 绝对不能犯的低级错误

4. 版本控制 Git 规范(工作必备)

5. 学习建议(新手成长路线)

总结(极简背诵版)


手册分编程规约、异常日志、MySQL、工程结构、安全、性能、设计七大块,下面只讲高频考点、工作必守、新手最容易踩的坑,兼顾理论 + 实操。

一、整体原则(所有代码通用)

  1. 代码可读 > 炫技优先直白写法,不要写 “一行神仙代码”,新手切忌过度嵌套、简写、花式语法。
  2. 统一规范 > 个人习惯命名、缩进、注释、格式全团队统一,入职第一件事对齐编码规范。
  3. 提前防错 > 事后排错空判断、参数校验、边界值、异常捕获,写代码时就考虑健壮性。

二、编程规约(新手重灾区,优先级最高)

1. 命名规范(最基础,面试 / CR 必查)

(1)各类标识符规则
  • 包名:小写、连续单词,不用下划线 / 大写 错误:com.Study_Demo正确:com.studydemo
  • 类名:大驼峰(UpperCamelCase),名词 正确:UserServiceOrderMapper
  • 方法 / 变量:小驼峰(lowerCamelCase),动宾结构 错误:getuser()正确:getUser()
  • 常量:全大写 + 下划线分隔,static final正确:public static final int MAX_PAGE = 10;
  • 枚举:类名大驼峰,枚举值全大写
  • 禁止:拼音混合命名、单个字母无意义命名(除临时循环变量i,j)、中英文混搭。
(2)特殊命名约定(企业通用)
  • 接口:后缀Service / Mapper / Dao / Handler
  • 实现类:接口名 +Impl,如UserServiceImpl
  • 数据实体:Entity / DO / DTO / VO / BO严格区分(新手必记)
    • DO:数据库实体,和表一一对应
    • DTO:接收前端参数 / 对外传输
    • VO:返回给前端展示数据 禁止一个实体到处用(DO 直接返前端、VO 入库)。

2. 格式规范

  • 缩进统一4 个空格,禁止用 Tab。
  • 左大括号紧跟代码行尾,不单独另起一行。
  • 运算符左右加空格,if/for/while后面必须加空格。
  • 单行字符不超过120 字符,超长代码手动换行。

3. 变量 & 常量

  • 成员变量、局部变量初始化,避免默认值引发空指针。
  • 魔法值(硬编码数字 / 字符串)必须抽成常量。 反面:if(status == 1)正面:if(status == STATUS_NORMAL)
  • 禁止使用float/double做金额计算,必须用BigDecimal

4. 集合使用(新手高频 Bug 点)

  1. 初始化集合指定容量已知元素数量,创建ArrayList时传入初始容量,减少扩容开销。
  2. 集合判空标准写法统一用工具类:org.springframework.util.CollectionUtils
    // 正确 if (!CollectionUtils.isEmpty(list)) // 错误:先判null再判size,冗余且易错 if (list != null && list.size() > 0)
  3. 遍历禁忌
    • 不要在foreach循环里增删元素(触发并发修改异常),要用迭代器。
    • 禁止用fori遍历Set
  4. Map 规范
    • 推荐HashMap,线程安全用ConcurrentHashMap绝对不用 Hashtable
    • 遍历 Map 优先entrySet,不要多次get(key)
  5. 数组转集合陷阱Arrays.asList()返回的是固定长度集合,不能 add/remove。

5. 控制语句(if/for/switch)

  1. if 分支
    • 少用多层嵌套(超过 3 层就要重构)。
    • 优先正向判断、提前 return,减少嵌套。
    // 推荐:卫语句 if (user == null) { return; } // 业务逻辑
  2. switch
    • 每个 case 必须写break,避免穿透。
    • 必须加default分支。
  3. for 循环循环内不要频繁调用方法(如list.size()),提前提取。

6. 字符串

  • 拼接字符串:循环内用StringBuilder,不要直接+
  • 字符串判空统一工具类:StringUtils.isBlank()(推荐)/isEmpty()
    • isBlank:判断 null、空串、全空格
    • isEmpty:只判断 null、空串
  • 禁止用==比较字符串,一律用equals()。 技巧:常量放前面避免空指针:"success".equals(status)

三、异常处理(新手最乱的模块)

  1. 禁止使用异常做流程控制异常是用来处理意外错误,不是替代 if 判断。
  2. try-catch 范围要小不要把一整段业务全包在一个大 try 里,难以定位问题。
  3. 禁止捕获最顶层 Exception 不处理
    // 反面:吞掉异常,线上问题完全无法排查 try { ... } catch (Exception e) {}
    必须:打印日志 + 向上抛出 / 友好返回。
  4. 自定义业务异常项目统一封装自定义异常,不要到处抛原生RuntimeException
  5. finally 块资源释放流、连接、Socket 等资源,优先使用try-with-resources自动关闭(JDK7+),不用手动 finally。
  6. 日志打印
    • 生产环境禁止System.out.println / e.printStackTrace(),全部用日志框架(SLF4J+Logback)。
    • 日志级别区分:error(错误)、warn(告警)、info(正常流程)、debug(调试)。
    • 日志要打印关键参数、请求 ID、用户 ID,方便排查。

四、MySQL 数据库规约(后端核心,面试 + 工作重点)

1. 建表规范

  1. 必须字段每张表强制:id(主键)、create_time、update_time、deleted(逻辑删除)逻辑删除,禁止物理删除数据。
  2. 主键主键id自增 bigint,不用 uuid(索引效率低)。
  3. 字段命名下划线命名,和 Java 实体小驼峰映射,禁止拼音。
  4. 数据类型选择
    • 字符串优先varchar,长度按需定义,不滥用text
    • 手机号、身份证等长文本用varchar不用数字类型
    • 时间统一用datetime,禁止用timestamp(时区 / 范围坑多)。
  5. 禁止保留关键字做字段名(order、user、status 等)。

2. 索引规范(新手性能大坑)

  1. 主键必建索引,频繁查询、条件筛选字段建索引。
  2. 联合索引遵循最左匹配原则
  3. 禁止过度建索引:索引提升查询、降低增删改速度。
  4. 索引失效场景(必记):
    • like %xxx左模糊
    • 字段隐式类型转换(字符串和数字对比)
    • or连接无索引字段
    • 对索引列使用函数、运算

3. SQL 编写规范

  1. ** 禁止 select *** 只查需要的字段,减少网络传输、避免字段变动出问题。
  2. 分页必须加limit,大数据量禁止全表查询。
  3. 大事务拆分:长事务锁表、引发死锁、主从延迟。
  4. in语句元素数量不要过多,建议小于 500。
  5. 分页深分页(limit 100000,10)优化:用主键偏移方案。

4. ORM 层(MyBatis/MyBatis-Plus)

  • SQL 写在 XML / 注解中,禁止硬拼 SQL(防注入)。
  • 参数使用#{}禁止${}(SQL 注入风险)。

五、工程结构 & 分层规范(项目架构)

标准分层(新手必须遵守,不乱分层):

  1. Controller 层:接收请求、参数校验、路由、返回结果
    • 不写业务逻辑,不直接操作数据库
  2. Service 层:核心业务逻辑、事务控制
    • 事务注解@Transactional加在 Service 方法上
  3. Mapper/DAO 层:仅做数据库 CRUD,无业务逻辑
  4. Entity/DTO/VO:数据载体,分层隔离

包结构统一:按功能模块划分,不要按技术类型划分。

  • 错误:controller/ service/ mapper所有类堆一起
  • 正确:user/ order/ goods每个模块下分 controller/service/mapper

六、安全规约(线上必守)

  1. 防 SQL 注入:不用${},参数预编译。
  2. 防 XSS 跨站脚本:前端 + 后端统一转义特殊字符。
  3. 接口参数校验:所有入参非空、长度、格式校验(用 Hibernate Validator)。
  4. 敏感数据(手机号、身份证、密码)脱敏后再返回前端。
  5. 密码严禁明文存储,必须加盐哈希加密(BCrypt/SHA256)。

七、性能规约(新手进阶)

  1. 循环里不要创建对象,对象外提。
  2. 避免频繁 IO、数据库查询、远程调用。
  3. 热点数据用 Redis 缓存,减少 DB 压力。
  4. 异步处理:非核心流程(消息、通知、日志)用异步 / 消息队列,不阻塞主流程。
  5. 线程:禁止手动创建new Thread(),统一使用线程池

二、新手程序员重点注意问题(落地避坑清单)

1. 心态 & 编码习惯(第一位)

  1. 先想再写,不要边写边改简单功能也先梳理流程、入参、出参、异常场景。
  2. 写完代码自测正常场景、空参数、极端边界值、异常场景都测一遍,再提交。
  3. 不要复制粘贴代码不检查复制后一定要改变量名、条件、注释,这是 BUG 重灾区。
  4. 勤写注释复杂逻辑、特殊业务、算法必须加注释;注释说明 “为什么”,不是 “做什么”

2. 每天必检查的代码点(CR 高频问题)

  • 所有入参是否做了非空 / 合法性校验?
  • 集合、字符串有没有用正确工具类判空?
  • 有没有魔法值、硬编码?
  • 字符串拼接、循环有没有用对StringBuilder
  • 异常有没有捕获、打日志,有没有吞异常?
  • SQL 是不是select *、有没有深分页、左模糊?
  • 资源(流、连接)有没有正常关闭?

3. 绝对不能犯的低级错误

  1. 空指针 NPE:新手第一大 BUG,对象使用前必判空。
  2. 集合遍历时增删元素,触发ConcurrentModificationException
  3. ==比较字符串、包装类。
  4. 金额用double/float,精度丢失。
  5. 线上代码留System.oute.printStackTrace()
  6. 大事务、长事务导致锁表。
  7. 接口不做参数校验,被非法参数攻击。

4. 版本控制 Git 规范(工作必备)

  • 提交注释清晰:[模块] 功能/修复:xxx
  • 禁止直接往main/master分支提交代码,走分支 + 合并。
  • 拉代码先pull再写代码,避免大量冲突。

5. 学习建议(新手成长路线)

  1. 吃透基础规约,把格式、命名、判空、集合、异常练成本能。
  2. 写代码分层思维:分清 Controller/Service/Mapper 职责。
  3. 遇到报错先看日志,学会根据堆栈定位问题。
  4. 不要一味堆新语法,稳定、可读、可维护优先。
  5. 每次改完代码,复盘:为什么出问题?规范里哪条对应?

总结(极简背诵版)

新手抓4 个核心就能避开 90% 问题:

  1. 命名格式统一,拒绝拼音、魔法值、混搭风格。
  2. 判空到位:对象、字符串、集合全套工具类判空,防 NPE。
  3. 异常日志规范:不吞异常、不用原生输出、分级打日志。
  4. SQL 保守写法:不 select*、慎用模糊查询、合理建索引、逻辑删除。

照着手册规范写代码,不仅减少 BUG,面试、代码评审也会非常加分。

http://www.jsqmd.com/news/1024045/

相关文章:

  • MPC8308 PCIe控制器:DMA、电源管理与初始化全解析
  • IAR for 8051开发ZigBee避坑实录:工作空间、Linker配置与仿真调试那些容易踩的雷
  • Win11Debloat:给Windows系统做一次深度“数字排毒“的智能管家
  • 表单不是填空题:原生语义、FormData与受控组件深度解析
  • Equalizer APO终极实战:3步解决Windows音频系统音质问题
  • 晋城装修公司合集:2026 年设计、施工与售后表现均衡的服务商 - 装修新知
  • 亲测AI电商培训,哪家公司能真正解决学习痛点? - 资讯速览
  • 【模型架构篇14】小模型与端侧部署:2026年,你的手机里藏着一个GPT-4
  • 明日方舟MAA自动化助手:解放双手的终极游戏伴侣
  • Sqribble:模板即代码的确定性文档操作系统
  • 如何3步搞定空洞骑士模组管理:Lumafly终极指南
  • 回收宝格丽蒂芙尼高效变现,2026北京首饰回收上门服务+零手续费省心变现 - 薛定谔的梨花猫
  • 专业音频制作入门:从破解Pro Tools到合法免费DAW的完整替代方案
  • 前端整学习手册(零基础→中级→高级→架构师·权威定级版)
  • 2026年最新整理:目前口碑出众的PCB滤波器优质供应商推荐
  • 2026年6月台州婚纱照精华榜:素人档案海量比对 仅三家在抓拍情绪与后期审美上同时出色 - 天天生活分享日志
  • MuleSoft与大语言模型的AI编排实战:企业级可审计工作流设计
  • Claude Opus高效使用指南:科研与办公场景下的MAX能力释放方法
  • 前端开发者签名:一行console.log的技术人格表达
  • AWS生成式AI生态如何撬动行业应用落地
  • 车载控制器研发设计方案
  • it-Engineer-V6 一键部署本地整合包:6G 显存畅玩文生图/图生图/局部重绘,首发支持 50 系显卡
  • 如何用OBS源独立录制插件彻底改变你的视频工作流
  • 新手杭州名包变现实用防坑技巧,验包估价流程完整拆解 - 禹竞
  • 终极MAA明日方舟助手:3分钟快速上手的智能游戏伴侣
  • 大理闲置黄金变现指南 认清回收套路选择正规实体门店 - 润富黄金回收
  • Xournal++:当数字笔记遇见专业绘图,你的全能学习伙伴
  • AI 提示词工程刷题 / 做题核心注意事项
  • 2026年6月最新欧米茄中国官方售后网点客户电话服务热线地址 - 欧米茄服务中心
  • 如何在Unity中快速构建专业级卡牌游戏UI:开源框架的完整指南