1.关于开发环境
面试官想通过开发环境了解面试者的经验;
开发环境,最能体现工作产出的效率;
会以聊天的形式为主,而不是出具体的问题;
1.IDE用什么环境写代码(写代码的效率)
编写代码的工具
webstorm 非常强大的工具,可以集成很多东西,功能非常强大,收费
sublime 轻量级打开比较快,非常好用,免费
(搜常用插件--代码提示,括号括号之间封闭的一些提示,一键生成html代码结构)
vscode 微软推出的比较轻量级的开发工具,免费
atom github自己开源的一个编辑器,免费
插件!插件!插件!!! 插件提高效率
快捷键会用
2.git(代码版本管理,多人协作开发)
- 正式的项目都需要代码版本管理;
- 大型项目需要多人协作开发;
- Git和Linux是一个作者;
- 网络Git服务器如:github.com coding.net;
- 一般公司代码非开源,都有自己的Git服务器;
- Git的基本操作必须很熟练;
git--常用命令
git add .
(添加当前项目的所有文件--修改的新增的)
git checkout xxx
撤销对工作区的修改(发现自己改错了想还原回去之前改的不要了)
git commit -m"xxx"
把改的东西先提到本地,-m就是我要加个备注,改的什么东西
git push origin master
提交到远程的服务器上了,别人就可以看到,就可以下载
git pull origin master
把远程服务器上更新过的东西下载下来
git branch
多人开发(查看当前的分支)
git checkout -b xxx
(新建一个分支)
/git checkout xxx
(切换到已有的分支)
git merge xxx
把以前在那个分支改的东西全都merge到某一个分支上来,
将两个或两个以上的开发历史合并在一起
git status 看状态 看有哪些改动
pwd 查看当前路径
cd ../回上一个目录
vi 打开aaa.txt :wq退出并保存
3.JS模块化
1.不适用模块化的情况(场景使用,遇到的问题)
-util.js(基础函数库/、底层代码) 比如:getFormatDate函数
-a-util.js(针对业务又封装了一个基础库、业务层工具函数) aGetFormatDate函数(要依赖getFormatDate来用) 使用getFormatDate
-a.js(业务代码需要使用a-util.js、一层一层的引用关系) aGetFormatDate
eg:
//util.js ----文件
function getFormatDate(date,type){
//type ===1 返回 2017-06-15
//type ===2 返回 2017年6月15日 格式
// ___
}
//a-util.js ----文件
function aGetFormatDate(date){
//要求返回 2017年6月15日 格式
return getFormatDate(date,2);
}
//a.js ----文件
var dt = new Date();
console.log(aGetFormatDate(dt));
*使用:(强依赖的引用关系,顺序不能乱了,会报错)
<script src="util.js"></script>
<script src="a-util.js"></script>
<script src="a.js"></script>
<!--1.这些代码中的函数必须是全局变量,才能暴露给使用方,全局变量污染-->
<!--2.a.js 知道要引用a-util.js,但是他知道还需要依赖于util.js吗?-->
2.使用模块化(好处)
//util.js (只往外输出)
export{
getFormatDate:function(date,type){
// type === 1返回 2017-06-15
// type === 2 返回 2017年6月15日 格式
}
};
//a-util.js
//require 引用(接到输出的函数,自己又输出一个;用什么就引用什么,引用完之后还能传递出自己的一个函数)
var getFormatDate = require('util.js');
export{
aGetFormatDate:function(date){
//要求返回 2017年6月15日 格式
return getFormatDate(date);
};
};
//a.js(把你输出的接收过来执行)
var aGetFormatDate = require("a-util.js");
var dt = new Date();
console.log(aGetFormatDate(dt));
//直接'<script src="a.js"></script>',其他的根据依赖关系自动引用;
//那两个函数,没必要成为全局变量,不会带来污染和覆盖
3.AMD 异步模块定义
1.全局define函数
2.全局require函数
3.依赖JS会自动、异步加载
//只有define的东西才能require
//先去定义一个东西,然后就能从require中拿到这个东西
//util.js
define(function(){
return{
getFormatDate:function(date,type){
if(type ===1){
return '2017-06-15';
}
if(type ===2){
return"2017年6月15日"
}
}
}
});
//a-util.js
define(['./util.js'],function(util){
return{
aGetFormatDate:function(date){
return util.getFormatDate(date,2);
}
};
});
//a.js 要依赖于a-util.js
define(['./a-util.js'],function(aUtil){
return{
printDate:function(date){
console.log(aUtil.aGetFormatDate(date));
}
};
});
//main.js 要依赖a.js(可以依赖于多个)
require(['./a.js'],function(a){
var date = new Date();
a.printDate(date);
});
*使用require.js
<body>
<p>AMD test</p>
//date-main="./main.js" 程序的入口
<script src="/require.min.js" data-main="./main.js"></script>
</body>
4.模块化--CommonJS
nodejs模块化规范,现在被大量用前端,原因:
1.前端开发依赖的插件和库,都可以从npm(nodejs依赖包的管理)中获取
2.构建工具(自动打包自动加载)的高度自动化,使得使用npm的成本非常低
3.CommonJs不会异步加载JS,而是同步一次性加载出来
=
*使用CommonJs
//util.js
module.exports={
getFormatDate:function(date,type){
if(type ===1){
return '2017-06-15';
}
if(type ===2){
return"2017年6月15日"
}
};
};
//a-util.js
var util = require('util.js');
module.exports={
aGetFormatDate:function(date){
return util.getFormatDate(date,2);
};
};
//AMD和CommonJs的使用场景:
1.需要异步加载JS,使用AMD
2.使用了npm之后建议使用CommonJs(支持npm)
4.构建工具
grunt
gulp 速度更加快
fis3 百度用的构建工具
webpack
-安装NodeJS
新版的Node.js已自带npm,安装Node.js时会一起安装,
npm的作用就是对Node.js依赖的包进行管理,也可以理解
为用来安装/卸载Node.js需要装的东西
--安装webpack(网上查)
npm i webpack --save-dev
npm i jquery --save
npm i moment --save
5.打包工具
6.上线回滚的流程
(我虽然没用过,但是通过XXX知道,它应该是个什么样的流程)
1.上线和回滚的基本流程
-是非常重要的开发环节
-各个公司的具体流程不同
-由专门的工具后者系统完成,我们无需关心细节
-如果你没有参与过,面试时也要说出要点
-只讲要点,具体实现无法讲解
1.1-上线流程要点(上传到服务器并覆盖的过程)
-1.将测试完成的代码提交到git版本库的master分支
-2.将当前服务器的代码全部打包并记录版本号,备份
-3.将master分支的代码提交覆盖到线上服务器,生成版本号
1.2-回滚流程要点(上线发现有问题要及时止损回滚)--将之前备份的代码在上线一遍
-1.将当前服务器的代码打包并记录版本号,备份
-2.将备份的上一个版本号解压,覆盖到线上服务器,并生成新的版本号
2.linux基本命令
-服务器使用linux居多,server版,只有命令行
-测试环境要匹配线上环境,因此也是linux
-经常需要登录测试机来自己配置、获取数据
ssh name@server...登录
mkdir a 创建a文件夹
ls 当前目录下的文件(只显示文件名)
ll 会列出该文件下的所有文件信息,包括隐藏的文件
cd a 到a文件夹
pwd 当前文件的目录
cd ..返回上一层
rm -rf a 删除a
vi a.js 打开a文件编辑 (就是vim编辑器,打开之后输入i(进入输入模式)就可以编辑,ESC回到只读)
:wq 退出并保存(:w保存 :q退出)
cp a.js a1.js copy a文件
mv a1.js src/a1.js 把a1移动到src文件夹下
rm a.js 删除文件
cat a.js(查看a文件,可以输出出来)
head a.js(看前边一些部分)
head -n 1 a.js(前一行)
tail a.js(看后边一些部分)
tail -n 2 a.js(查看a.js后两行)
grep '2' a.js(搜索带2的内容)