前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • JavaScript Part 1

    • Ajax总结篇
    • Canvas 绘制八大行星
    • Canvas 绘制动画时钟
    • Canvas 绘制粒子动画背景
    • DOM编程之API学习总结篇
    • JS 中的 call、apply、bind 方法
    • JS 中的事件绑定、事件监听、事件委托
    • JS常用的内置函数整理
    • JS继承的几种方法总结
    • JS计算字符串所占字节数
    • JavaScript-DOM事件
    • JavaScript事件机制
    • JavaScript代码片段100个
    • JavaScript作用域分析总结
    • JavaScript原型链回顾
    • JavaScript原生数组及高阶函数
    • JavaScript及jQuery中的各种宽高属性图解
    • JavaScript启示录阅读笔录
    • JavaScript对象
    • JavaScript工程项目的一系列最佳实践
      • 1.Git
        • 1.1 一些Git规则
        • 1.2 Git 工作流
        • 1.3 如何写好 Commit Message
      • 2. 文档
      • 3. 环境
        • 3.1 一致的开发环境
        • 3.2 依赖一致性
      • 4. 依赖
      • 5. 测试
      • 6. 结构布局与命名
      • 7. 代码风格
        • 7.1 若干个代码风格指导
        • 7.2 强制的代码风格标准
      • 8. 日志
      • 9. API
        • 9.1 API 设计
        • 9.2 API 安全
        • 9.3 API 文档
      • 10. 证书
    • JavaScript常用API合集
    • JavaScript常用的代码片段
    • JavaScript数组、字符串、对象常用方法
    • JavaScript数组方法总结篇
    • JavaScript深浅拷贝
    • JavaScript继承的几种方式
    • JavaScript词法分析和作用域闭包
    • JavaScript运动框架之速度时间版本
    • JavaScript运行机制Event Loop
    • JavaScript防抖节流原理
    • Javascript中的复制粘贴功能
    • Javascript常用方法函数收集
    • Javascript数组详解
    • OOP之原型与原型链
    • OOP之类与对象
    • OOP之面向对象
    • Object.defineProperty详解
    • V8源码浅析JS数组常见方法
    • arguments详解
    • await 在 forEach 中不生效解决方案
    • iframe+表单跨域提交POST请求
    • javascript 下常用的字符串操作
    • javascript常用积累
    • javascript笔记总结篇
    • parsetInt parsetFloat与eval isNaN用法
    • 业务中处理数据结构常用的JS方法
    • 作用域
    • 你真的掌握变量和类型了吗
    • 前后端分离之数据Mock
    • 原型与原型链
    • 原生JS与jQuery操作DOM对比
    • 原生JS补给(上)
    • 如何写出一个惊艳面试官的深拷贝
    • 带你填一些JS容易出错的坑
    • 彻底弄懂 JavaScript 执行机制
    • 执行上下文 执行栈
    • 梳理常用的正则表达式
    • 正则回顾总结
    • 正则基础知识
    • 正则完整篇
    • 正则表达式
    • 浅析JSON stringify
    • 浅析Promise原理
    • 浅谈JavaScript中的异步处理
    • 浅谈闭包
    • 深拷贝 vs 浅拷贝
    • 编写可维护的JavaScript
    • 聊一聊typeof instanceof 实现原理.
    • 聊一聊闭包
    • 高阶函数map reduce filter
  • JavaScript Part 2

  • CSS

  • HTML

  • Jquery

  • ES6

  • 小程序

  • Vue

  • React

  • 深入React

  • React Native

  • NodeJS

  • Angular

  • TypeScript

  • Webpack

  • 浏览器

  • 移动端

  • 前端工程化

  • Electron

  • HTTP

  • Nginx

  • Linux

  • 数据结构与算法

  • LeetCode算法题

  • 综合

完整面试题地址:
作者:程序员poetry
扫码关注作者公众号:「前端进阶之旅」 每天分享技术干货
前端进阶之旅公众号二维码

# 1.Git

# 1.1 一些Git规则

这里有一套规则要牢记

在功能分支中执行开发工作

  • 因为这样,所有的工作都是在专用的分支而不是在主分支上隔离完成的。它允许您提交多个 pull request 而不会导致混乱。您可以持续迭代提交,而不会使得那些很可能还不稳定而且还未完成的代码污染 master 分支

从 develop 独立出分支

  • 这样,您可以保持 master 分支中的代码稳定性,这样就不会导致构建问题,并且几乎可以直接用于发布

永远也不要将分支(直接)推送到 develop 或者 master ,请使用合并请求(Pull Request)

  • 通过这种方式,它可以通知整个团队他们已经完成了某个功能的开发。这样开发伙伴就可以更容易对代码进行 code review,同时还可以互相讨论所提交的需求功能

在推送所开发的功能并且发起合并请求前,请更新您本地的develop分支并且完成交互式变基操作(interactive rebase)

  • ebase 操作会将(本地开发分支)合并到被请求合并的分支( master 或 develop )中,并将您本地进行的提交应用于所有历史提交的最顶端,而不会去创建额外的合并提交(假设没有冲突的话),从而可以保持一个漂亮而干净的历史提交记录

请确保在变基并发起合并请求之前解决完潜在的冲突

  • 合并分支后删除本地和远程功能分支
    • 如果不删除需求分支,大量僵尸分支的存在会导致分支列表的混乱。而且该操作还能确保有且仅有一次合并到master 或 develop。只有当这个功能还在开发中时对应的功能分支才存在

在进行合并请求之前,请确保您的功能分支可以成功构建,并已经通过了所有的测试(包括代码规则检查)

  • 因为您即将将代码提交到这个稳定的分支。而如果您的功能分支测试未通过,那您的目标分支的构建有很大的概率也会失败。此外,确保在进行合并请求之前应用代码规则检查。因为它有助于我们代码的可读性,并减少格式化的代码与实际业务代码更改混合在一起导致的混乱问题

使用 这个 .gitignore 文件

  • 此文件已经囊括了不应该和您开发的代码一起推送至远程仓库(remote repository)的系统文件列表。另外,此文件还排除了大多数编辑器的设置文件夹和文件,以及最常见的(工程开发)依赖目录

保护您的 develop 和 master 分支

  • 这样可以保护您的生产分支免受意外情况和不可回退的变更

# 1.2 Git 工作流

基于以上原因, 我们将 功能分支工作流 , 交互式变基的使用方法 结合一些 Gitflow中的基础 (比如,命名和使用一个develop branch)一起使用。 主要步骤如下

针对一个新项目, 在您的项目目录初始化您的项目。 如果是(已有项目)随后的功能开发/代码变动,这一步请忽略

cd <项目目录>
git init
@前端进阶之旅: 代码已经复制到剪贴板

检出(Checkout) 一个新的功能或故障修复(feature/bug-fix)分支

git checkout -b <分支名称>
@前端进阶之旅: 代码已经复制到剪贴板

新增代码变更

git commit -a 会独立启动一个编辑器用来编辑您的说明信息,这样的好处是可以专注于写这些注释说明

git add
git commit -a
@前端进阶之旅: 代码已经复制到剪贴板

(切换至功能分支并且)通过交互式变基从您的develop分支中获取最新的代码提交,以更新您的功能分支

您可以使用 --autosquash 将所有提交压缩到单个提交。没有人会愿意(看到) develop 分支中的单个功能开发就占据如此多的提交历史

git checkout <branchname>
git rebase -i --autosquash develop
@前端进阶之旅: 代码已经复制到剪贴板

如果没有冲突请跳过此步骤,如果您有冲突, 就需要解决它们并且继续变基操作<

fe
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • JavaScript Part 1

    • Ajax总结篇
    • Canvas 绘制八大行星
    • Canvas 绘制动画时钟
    • Canvas 绘制粒子动画背景
    • DOM编程之API学习总结篇
    • JS 中的 call、apply、bind 方法
    • JS 中的事件绑定、事件监听、事件委托
    • JS常用的内置函数整理
    • JS继承的几种方法总结
    • JS计算字符串所占字节数
    • JavaScript-DOM事件
    • JavaScript事件机制
    • JavaScript代码片段100个
    • JavaScript作用域分析总结
    • JavaScript原型链回顾
    • JavaScript原生数组及高阶函数
    • JavaScript及jQuery中的各种宽高属性图解
    • JavaScript启示录阅读笔录
    • JavaScript对象
    • JavaScript工程项目的一系列最佳实践
      • 1.Git
        • 1.1 一些Git规则
        • 1.2 Git 工作流
        • 1.3 如何写好 Commit Message
      • 2. 文档
      • 3. 环境
        • 3.1 一致的开发环境
        • 3.2 依赖一致性
      • 4. 依赖
      • 5. 测试
      • 6. 结构布局与命名
      • 7. 代码风格
        • 7.1 若干个代码风格指导
        • 7.2 强制的代码风格标准
      • 8. 日志
      • 9. API
        • 9.1 API 设计
        • 9.2 API 安全
        • 9.3 API 文档
      • 10. 证书
    • JavaScript常用API合集
    • JavaScript常用的代码片段
    • JavaScript数组、字符串、对象常用方法
    • JavaScript数组方法总结篇
    • JavaScript深浅拷贝
    • JavaScript继承的几种方式
    • JavaScript词法分析和作用域闭包
    • JavaScript运动框架之速度时间版本
    • JavaScript运行机制Event Loop
    • JavaScript防抖节流原理
    • Javascript中的复制粘贴功能
    • Javascript常用方法函数收集
    • Javascript数组详解
    • OOP之原型与原型链
    • OOP之类与对象
    • OOP之面向对象
    • Object.defineProperty详解
    • V8源码浅析JS数组常见方法
    • arguments详解
    • await 在 forEach 中不生效解决方案
    • iframe+表单跨域提交POST请求
    • javascript 下常用的字符串操作
    • javascript常用积累
    • javascript笔记总结篇
    • parsetInt parsetFloat与eval isNaN用法
    • 业务中处理数据结构常用的JS方法
    • 作用域
    • 你真的掌握变量和类型了吗
    • 前后端分离之数据Mock
    • 原型与原型链
    • 原生JS与jQuery操作DOM对比
    • 原生JS补给(上)
    • 如何写出一个惊艳面试官的深拷贝
    • 带你填一些JS容易出错的坑
    • 彻底弄懂 JavaScript 执行机制
    • 执行上下文 执行栈
    • 梳理常用的正则表达式
    • 正则回顾总结
    • 正则基础知识
    • 正则完整篇
    • 正则表达式
    • 浅析JSON stringify
    • 浅析Promise原理
    • 浅谈JavaScript中的异步处理
    • 浅谈闭包
    • 深拷贝 vs 浅拷贝
    • 编写可维护的JavaScript
    • 聊一聊typeof instanceof 实现原理.
    • 聊一聊闭包
    • 高阶函数map reduce filter
  • JavaScript Part 2

  • CSS

  • HTML

  • Jquery

  • ES6

  • 小程序

  • Vue

  • React

  • 深入React

  • React Native

  • NodeJS

  • Angular

  • TypeScript

  • Webpack

  • 浏览器

  • 移动端

  • 前端工程化

  • Electron

  • HTTP

  • Nginx

  • Linux

  • 数据结构与算法

  • LeetCode算法题

  • 综合