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

Week 1 Homework

大厂代码规范

引用以下网站:

  • 华为技术有限公司 C语言编程规范

  • 腾讯 TGideas Docs

概述

大厂的代码规范本质是为了提升协作效率、降低维护成本、保障系统稳定性,其核心围绕“可读性、可维护性、安全性、性能”四大目标展开。不同技术栈(前端、后端、移动端)的规范各有侧重,但底层逻辑一致。以下是大厂通用的代码规范框架,按技术栈分类并补充通用原则。

一、通用核心原则(跨技术栈)

无论何种语言或场景,大厂均遵循以下底层原则,是所有规范的“根”:

  1. 可读性优先:代码是“写给人看的,顺便能运行”。变量/函数命名、注释、格式必须让他人(甚至3个月后的自己)快速理解意图。
  2. 一致性至上:团队内使用统一的规范(如命名风格、缩进方式),并通过工具(如ESLint、Pylint)强制落地,避免“个人风格”导致的协作成本。
  3. 最小权限/职责:函数/类只做一件事(单一职责原则),变量/方法的访问权限(public/private)严格控制,避免过度暴露。
  4. 可测试性:代码结构需支持单元测试(如避免硬编码、依赖注入),核心逻辑必须覆盖测试用例。
  5. 安全性前置:编码阶段即规避常见风险(如SQL注入、XSS、空指针),而非依赖后续测试。
  6. 兼容性与扩展性:考虑版本兼容(如API接口的向后兼容)、业务扩展(如预留配置化入口),避免“改一处崩一片”。

二、前端代码规范(以JS/TS、HTML/CSS为例)

前端直接对接用户与浏览器,规范侧重“兼容性、可复用性、性能优化”。

1. 命名规范

元素类型 规范要求 示例
变量/常量 变量用小驼峰;常量用全大写+下划线 userNameMAX_RETRY_COUNT
函数/方法 小驼峰,动词开头(明确动作意图) getUserInfo()handleSubmit()
类/构造函数 大驼峰 UserLoginModal
组件(React/Vue) 大驼峰,语义明确(避免缩写) UserProfileCard(非UserCard
CSS类名 短横线分隔(BEM规范优先) user-card__header--active(块-元素-修饰符)
枚举 大驼峰,枚举值全大写+下划线 enum OrderStatus { PENDING = 1, COMPLETED = 2 }

2. 代码格式

  • 缩进:统一使用2个或4个空格(大厂多偏好2空格,如React官方),禁止混合空格与Tab。
  • 换行
    • 函数/类的花括号{不换行,与声明在同一行;
    • 多参数函数/长表达式需换行,保持每个参数/表达式独占一行;
    • 逗号,后必须空格,运算符(+=)前后必须空格。
  • 长度限制:单行代码不超过80-120个字符(避免横向滚动),长字符串用模板字符串(${})拆分。

3. 语法与逻辑规范

  • 变量声明:优先使用const(不可变),其次let,禁止使用var(避免变量提升问题)。
  • 函数
    • 优先使用箭头函数(简洁,绑定this),但类方法避免用(影响this指向);
    • 函数参数不超过3-4个(超过则用对象封装,如function fn({a, b, c}) {});
    • 必须处理边界情况(如参数为空、类型错误,用typeof/instanceof校验)。
  • 组件(React/Vue)
    • 组件拆分:复杂组件拆分为“容器组件(处理逻辑)+ 展示组件(纯UI)”;
    • Props:必须定义类型(TypeScript)和默认值,禁止直接修改Props;
    • 状态管理:局部状态用组件自身状态,全局状态用Redux/Vuex,避免“状态蔓延”。
  • CSS
    • 避免行内样式,优先使用CSS Modules(作用域隔离)或Styled Components;
    • 禁止使用!important(优先级失控),通过选择器权重优化样式。

4. 安全性规范

  • XSS防护:React/Vue默认转义HTML,但动态插入HTML时需用dangerouslySetInnerHTML(并过滤危险标签);
  • CSRF防护:接口请求必须携带CSRF Token;
  • 敏感数据:禁止在前端存储明文密码、Token等,需存在httpOnly Cookie中。

三、后端代码规范(以Java、Python为例)

后端对接数据库与服务,规范侧重“数据安全、并发控制、性能优化”。

1. 命名规范

元素类型 规范要求 示例
大驼峰,名词/名词短语,语义明确 UserServiceOrderRepository
方法 小驼峰,动词开头 createUser()getOrderById()
变量/参数 小驼峰,避免缩写(如userNameusrNm totalAmountuserId
常量 全大写+下划线,类级常量 public static final int PAGE_SIZE = 20;
包名 全小写,反向域名(如com.aliyun.order -
数据库表/字段 下划线分隔(snake_case) user_info表、order_id字段

2. 代码格式

  • 缩进:Java/Python统一4个空格(Python强制缩进,不可混用)。
  • 换行
    • 类/方法之间空2行,逻辑块之间空1行;
    • 长方法调用(如链式调用)换行,每个调用独占一行:
      // 正确
      userService.query().eq("status", 1).page(1, 20);
      
  • 注释
    • 类/公共方法必须加“文档注释”(Java用/** */,Python用""" """),说明功能、参数、返回值、异常;
    • 复杂逻辑(如算法、特殊判断)加“行内注释”,解释“为什么这么做”(而非“做了什么”)。

3. 语法与逻辑规范

  • 类设计
    • 遵循SOLID原则(单一职责、开闭原则等),一个类不超过200-300行;
    • 工具类(如DateUtils)设为final,并提供私有构造函数(禁止实例化)。
  • 方法
    • 方法长度不超过80行(超过则拆分),只做单一职责;
    • 避免“魔法值”(硬编码的数字/字符串),用常量或枚举替代:
      // 错误
      if (orderStatus == 1) { ... }
      // 正确
      if (orderStatus == OrderStatus.PENDING) { ... }
      
  • 异常处理
    • 捕获异常需明确类型(禁止catch (Exception e)),并处理具体场景(如NullPointerExceptionSQLException);
    • 异常必须打印堆栈信息(便于排查),但禁止在循环中抛异常(影响性能);
    • 自定义业务异常(如BusinessException),区分“系统异常”与“业务异常”。
  • 数据库操作
    • 禁止直接拼接SQL(避免SQL注入),用预编译语句(PreparedStatement)或ORM框架(MyBatis/Hibernate)的参数绑定;
    • 批量操作使用batchInsert/batchUpdate,避免循环单条执行;
    • 查询加索引,避免SELECT *(只查必要字段),大表查询分页。

4. 并发与性能规范

  • 线程安全
    • 共享变量需用volatile或锁(synchronized/ReentrantLock)控制;
    • 优先使用线程安全的集合(ConcurrentHashMap),避免HashMap在并发下扩容异常。
  • 资源释放
    • 流(InputStream)、数据库连接、锁等资源必须在finally或try-with-resources中释放;
    • 避免内存泄漏(如静态集合持有对象引用、线程池未关闭)。
  • 接口设计
    • 接口必须做参数校验(非空、格式、范围),用注解(如Java的@NotNull)或工具类(ValidationUtils);
    • 核心接口加限流、熔断(如Sentinel),避免被高并发打垮。

四、移动端代码规范(以iOS/Android为例)

移动端受设备性能、系统版本限制,规范侧重“流畅度、功耗、兼容性”。

1. 命名规范(以iOS-Swift、Android-Kotlin为例)

元素类型 iOS-Swift规范 Android-Kotlin规范
类/结构体 大驼峰,如UserViewController 大驼峰,如UserActivity
方法 小驼峰,动词开头,如fetchUserList() 小驼峰,如loadUserInfo()
变量/属性 小驼峰,如userNameLabel 小驼峰,如tvUserName(控件前缀:tv-TextView)
常量 大驼峰+let,如let MaxRetryCount = 3 全大写+下划线,如const val MAX_RETRY_COUNT = 3

2. 核心规范

  • UI相关
    • 布局优先用约束(AutoLayout/ConstraintLayout),避免固定坐标(适配不同屏幕);
    • 图片资源适配多分辨率(iOS的@2x/@3x,Android的mdpi/xhdpi);
    • 避免在主线程做耗时操作(如网络请求、数据库查询),必须放子线程(iOS用DispatchQueue.global,Android用Coroutine)。
  • 性能优化
    • 列表(UITableView/RecyclerView)复用Cell/Item,避免卡顿;
    • 图片懒加载、压缩,避免内存溢出(OOM);
    • 减少启动耗时:延迟初始化非核心组件,避免启动时加载过多资源。
  • 兼容性
    • 适配最低系统版本(如iOS 13+、Android 8.0+),调用高版本API前需判断系统版本;
    • 权限申请:动态申请敏感权限(相机、位置),并处理“用户拒绝”的场景。

五、规范落地工具(大厂必备)

规范不是“靠自觉”,而是靠工具强制约束。大厂均会集成以下工具:

工具类型 前端常用工具 后端常用工具
代码检查(Lint) ESLint(JS/TS)、StyleLint(CSS) Pylint(Python)、Checkstyle(Java)
代码格式化 Prettier(全前端) Google Java Format、Black(Python)
类型校验 TypeScript、Flow Java(泛型)、Python(Type Hint)
提交校验 Husky + lint-staged(提交前检查) GitLab CI/CD(提交后触发检查)
静态代码分析 SonarQube(检测漏洞、重复代码、复杂度) FindBugs(Java)

六、补充:文档与提交规范

  1. 文档规范
  • 接口文档:用Swagger/OpenAPI自动生成,包含请求参数、返回值、错误码;
  • 架构文档:核心模块画流程图(如时序图、类图),用DrawIO/Figma;
  • 注释文档:公共API必须写注释,工具类需说明“适用场景”与“注意事项”。
  1. Git提交规范
  • 提交信息格式:类型(模块): 描述,如feat(login): 新增短信验证码登录
  • 常见类型:
    • feat:新功能
    • fix: bug修复
    • docs:文档更新
    • style:代码格式调整(不影响逻辑)
    • refactor:重构(既无新功能也无bug修复)

《数学之美》读后感

初读《数学之美》中 “余弦定理与新闻分类” 一章时,我正对着杂乱的新闻聚合页面发愁:科技快讯与社会热点混杂交织,娱乐八卦与财经分析边界模糊,仿佛一堆被打乱的拼图,让人难以快速捕捉有效信息。而当看完吴军博士对 “如何用数学驯服信息乱象” 的拆解,我竟生出一种 “原来复杂问题的解法可以如此优雅” 的惊叹 —— 这章最迷人的地方,莫过于让我看见数学如何将抽象的 “相似性” 转化为可计算的 “确定性”,在无序的信息海洋中搭建起清晰的秩序框架。​
这一章的核心逻辑并不晦涩,却颠覆了我对 “分类” 的固有认知。过去我总以为,新闻分类依赖编辑的主观判断:给 “人工智能突破” 贴上 “科技” 标签,给 “央行降息” 归为 “财经”,全凭内容与类别的直观关联。但吴军博士却揭示了大厂背后的技术本质:用数学语言重新定义 “相似性”。首先将新闻转化为 “向量”—— 以词汇为坐标轴,以词频为坐标值,一篇几千字的报道便浓缩成一组数字;接着用中学课本里的余弦定理计算两个向量的夹角,夹角越小,新闻主题越相近,分类便有了量化依据。这个过程像给每篇新闻戴上了 “数学身份证”,无需人工干预,机器就能精准完成归类。​

最让我触动的,是这种解法中蕴含的 “化繁为简” 的数学智慧。新闻分类的本质是解决 “信息相似度匹配” 的难题,而人类语言的模糊性、多义性本是最大障碍 —— 同样的 “苹果” 可能指水果,也可能指科技公司;“跑路” 可形容离职,也可描述企业破产。但数学工具巧妙地绕开了语义理解的陷阱,用 “向量 + 余弦定理” 的组合,将语言问题转化为几何问题。就像吴军博士举的例子:两篇都高频出现 “人工智能”“算法”“芯片” 的报道,即便表述方式截然不同,其向量夹角也会趋近于零,自然被归为同一类。这种 “抓本质、弃表象” 的思路,让我突然明白为何说 “数学是科学的语言”—— 它能穿透事物的复杂性,找到最底层的逻辑关联。​

更深刻的启发在于,这章内容撕开了 “高科技” 的神秘面纱。我们日常使用的新闻 APP、搜索引擎,背后都藏着诸如此类的数学原理。过去我总以为这些功能依赖 “高深莫测的算法”,却没想到核心工具竟是中学就掌握的余弦定理。这让我意识到,技术的进阶往往不是创造全新的理论,而是将基础数学原理创造性地应用于现实问题。正如吴军博士所言:“复杂的应用问题,往往只需要简单的数学工具。” 这种 “以简驭繁” 的思维方式,不仅适用于计算机科学,更适用于生活中的各种难题 —— 当我们面对一团乱麻的任务时,或许也该学学这种 “向量思维”,剥离无关细节,抓住核心要素,问题便会清晰许多。​

合上书页再看手机里的新闻 APP,那些整齐归类的栏目突然有了不一样的意义。每一条新闻的精准定位,都是余弦定理在数字世界的无声运作;每一次顺畅的信息获取,都源于数学对秩序的构建。这章内容不仅让我读懂了新闻分类的技术原理,更让我体会到数学的 “实用之美”—— 它不是课本上冰冷的公式,而是能驯服混沌、创造效率的强大工具。这种美,藏在向量与夹角的计算里,藏在复杂问题的简洁解法中,更藏在人类用理性思维理解世界的努力中。

http://www.wxhsa.cn/company.asp?id=5844

相关文章:

  • 溢出存储变量
  • retrieving repo key for OS unencrypted from
  • 3. Explain详解与索引最佳实践
  • 软工个人项目作业
  • 异地办公文件同步,多台设备如何无缝同步最新教程
  • CSP-S模拟22
  • 详细介绍:【系统分析师】2025年上半年真题:论文及解题思路
  • 表格如何设置多人在线编辑?坚果云实时编辑,告别版本冲突!
  • 白嫖党狂喜!爆肝一下午搞定 URL 转 HTML 幻灯片神器,ISlide 9900 资源点从此是路人
  • Codeforces 2144E2 Looking at Towers (difficult version) 题解 [ 蓝 ] [ 线性 DP ] [ 树状数组 ]
  • 实战有效的Web时序攻击技术剖析
  • 22222222 - idle
  • 继承
  • 我们究竟在用钱交换什么?
  • jupyterLab如何使用
  • HyperWorks许可监控
  • C++拷贝构造函数详解:从浅拷贝到深拷贝
  • ThreadLocal
  • K8S探针
  • 模拟赛
  • bug1
  • C#第十二天 025
  • 选择语句的机器级表示
  • pip常用命令
  • 我的大学规划
  • 深入解析:numpy学习笔记
  • 理解 Linux 系统中的熵(Entropy)
  • Nginx auth_request 模块使用
  • 用nssm将minio和srs注册成服务
  • Mac上的Markdown学习