一、简答题
-
Node是什么?有哪些特性?
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。事件驱动 非阻塞式I/O模型,轻量高效,
-
Npm是什么? 如何通过Npm安装依赖?
npm是目前世界上最大的第三方依赖包,先npm init 初始化再 npm install +依赖名
-
简述同步和异步的区别,如何避免回调地狱?
同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"。使用promise,promise只有两个状态resolve(解决)–then和reject(拒绝)–catch
-
Node中如何读取文件?
var fs=require(“fs”)
fs.readFile(“url”,function(error,data){}) -
Node中如何写入文件?
var fs=require(“fs”)
fs.writeFile(“url”,“写入值”,function(error,data){}) -
通过node搭建一个简单的http服务,监听3500端口
var http = require (“http”)
var server = http.createServer()
Server.on(“request” function(request,response){})
server.listen ("3500",function(){})
-
如何获取指定目录下的所有文件
fs.readdir("./www",function(error,data){})
-
箭头函数和普通函数的区别是什么?
this指向不同,声明方式不同,箭头函数不能用于构造函数
-
get请求和post请求的区别
get 将请求放在url中,提交最大2k,有浏览记录,只接受Ascll字符,产生一个TCP数据包
post 将请求放在request body中,提交无限制,没有浏览记录,产生两个TCP数据包
10.Art-template 中 如何实现数据加载,条件渲染和循环渲染
数据加载 :插值表达式{{}}
条件{{if value}} … {{/if}}
{{if v1}} … {{else if v2}} … {{/if}}
循环 {{each target}}
{{$index}} {{$value}}
{{/each}}
- 什么是git,有哪些优势?
目前世界上最先进的分布式版本控制系统,· 适合分布式开发,强调个体。 公共服务器压力和数据量都不会太大。速度快、灵活。任意两个开发者之间可以很容易的解决冲突。 离线工作。
- git能做什么?简述git工作流程
克隆版本库,版本控制,分支管理, 工作区—add–>暂存区–commit–>本地仓库—remote->远程仓库
-
如何克隆远程仓库代码
git clone url
-
如何提交工作区代码到本地仓库
git commit -m -a 'message'
-
如何将本地仓库代码提交到远程仓库
git push origin url
-
如何拉取远程仓库更新代码
git fetch/pull origin url
-
如何查看分支,创建分支,切换分支
查看分支 git branch 创建分支 git branch [branch-name] 切换分支 git checkout [branch-name]
-
如何合并分支,merge和rebase的区别
git merge [branch-name] git rebase [branch-name] merge 是合并到当前分支 rebase 是合并到另一个分支上并切换到另一个分支
-
如何进行版本回退,reset和revert的区别
git reset git revert reset通过撤销commit节点来进行版本回退 revert用一个新提交来消除一个历史提交所做的任何修改
-
如何解决跨域问题
后台开放 JsonP 配置代理
-
SEO优化方式有哪些
标签语义化 服务端渲染 设置关键词,清晰目录结构
编程题
1.至少两种方式实现,左边固定,右边自适应布局
一、 <style>
body {
display: flex;
}
.box1 {
height: 100px;
width: 100px;
background-color: red;
}
.box2 {
height: 100px;
width: calc(100% - 100px);
background-color: blue;
}
二、
-
封装函数实现:找出短语中最长的单词并计算他的长度,如my name is hanMeiMei
输出最长单词为hanMeiMei 长度为9
3.实现对象深拷贝至少两种方式
3.1. 使用JSON暴力转换
通过JSON.stringify() 和 JSON.parse() 将对象转为字符串之后在转为对象。
var obj = {name:‘123’};
var obj2 = JSON.parse(JSON.stringify(obj))
这种简单粗暴的方式有局限性,当值为undefined、function、symbol会在转换过程中被忽略。
3.2. 使用解构赋值
var obj = {name:‘123’,age:13};
var obj2 = {…obj}
只能深度拷贝对象的第一层,如果对象中的属性也是对象的话,没有办法进行深度拷贝的。
3.3. 使用对象的合并
利用Object.assign(), 第一个参数必须是空对象
var obj = {name:‘123’,age:13};
var obj2 = Object.assign({},obj1);
只能深度拷贝对象的第一层,如果对象中的属性也是对象的话,没有办法进行深度拷贝的。
3.4. 利用循环和递归的方式
function deepClone(obj, newObj) {
var newObj = newObj || {};
for (let key in obj) {
if (typeof obj[key] == ‘object’) {
newObj[key] = (obj[key].constructor === Array) ? [] : {}
deepClone(obj[key], newObj[key]);
} else {
newObj[key] = obj[key]
}
}
return newObj;
}
4.代码实现数组去重,至少两种方式
一,set去重
let list = [1,3,4,6,2,2,2,3,1,2,3,4]
let set = new Set(list)
let newList = Array.from(set)
二,
function unique(arr) {
if (!Array.isArray(arr)) {
console.log(‘type error!’)
return
}
var arrry= [];
var obj = {};
for (var i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
arrry.push(arr[i])
obj[arr[i]] = 1
} else {
obj[arr[i]]++
}
}
return arrry;
}