Coding 前端面试题 Lieme 2018-06-04 2024-01-04 this 的三种常用方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1.函数调用 指向全局对象 例如: function a(){ this.x = 1 } a() 或者 var x = 10; function a(){ this.x = 0 } a() x = 0 这时候 this 指向 window
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 2.对象方法调用 function t(){ console.log(this.x) } var p = {} p.x = 10 p.m = t p.m() // 10 3.作为构造函数调用 function a(){ this.x = 10 ; console.log(this.x) } var b = new a() b.x //10 var x = 20 function a(){ this.x = 10 ; console.log(this.x) } var b = new a() b.x //10 x 20 这时候this 指向当前的函数 4. 页面使用 onclick="a(this)"
typeof 和 instanceof 的区别 1 2 3 4 1. typeof:判断函数基本类型 例如 number object string boolean function undefined 等 2. instanceof:用于判断一个变量是否属于某个对象的实例 判断数组和正则 无法准确判断 函数 3. 相同点:都是用来判断一个变量是否为空,或者是什么类型的 4. typeof:对于 array null 都返回object
this 和 $(this)的区别 1 2 1. this 为当前对象 this 可以 直接 this.style 修改样式 2. $(this) 为jq封装的当前对象 可以用jq 封装的方法来使用
同步和异步的区别 1 2 3 4 5 6 7 1. 同步 阻塞的 只能等服务器响应完成之后 渲染页面或者执行下一步操作 2. 异步 非阻塞的 如果服务器没有响应 则先干当前的事情 等响应之后在渲染需要渲染的地方 3. 如何异步加载 1. html5: defer async 或者延迟加载 defer:等页面加载完成之后才会执行 async: 脚本可用则执行 2. 动态生成script 标签插入页面 有可能还会阻塞 3. ajax eval 4. iframe
什么是跨域 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 由于浏览器的同源规则,url 的协议 域名 端口 IP 子域名 有一与当前页面不同的则为跨域 解决方法 1.通过 porxy 代理 由服务器来进行转发 2. 通过 CORS 由后端添加 请求头 3.通过JSONP jsonp 无法发送 post 请求 ajax的优缺点和原理 $.ajax({ url:'', type:'', data:{}, dataType:'', josnp:'jsoncallback', success:function(){ } }) 原理:相当于在客户端和服务端加了一个抽象层,使用户请求和服务器响应异步化,并不是所有的请求都提交给服务器。像一些数据验证是交与ajax引擎来完成的,只有确认需要向服务器读取新数据的时候ajax才会向服务器请求 创建过程:首先创建一个异步调用对象 创建一个http请求包含请求方法,url,验证信息 并设置响应http请求状态变化的函数 发送http 请求 获取异步调用返回的数据 使用js 和 dom 实现局部刷新 优点:无刷新更新数据 异步与服务器通信 前端和后端负载均衡 缺点:浏览器后退无法回到前一页的页面状态, 对搜索引擎支持较弱 不能很好的支持移动端 安全问题 破坏程序的异常处理机制
document.load 和document.ready的区别 load是在页面所有元素都加载完后才会执行 包括图片 dom树等 === onload
ready dom文档数加载后执行
websocket的用法和原理以及协议 基于 tcp/ip协议 tcp 面向连接 提供可靠的服务,udp 无连接 提供高效率服务
服务器可用主动向客户端发送信息 客户端也可以主动向服务端发送信息,双方是对等的
let var的区别 let 只有在块级作用域里才会生效 定义的不能在定义以及不能赋值这个选项
var 则不会
git命令 git -v
git branch
git init
git clone
git config
touch ss
mkdir ss
ls
git log
git push
git commit
git remote
cd..
用过其他框架 svg 和canvas的区别 svg 输出的图形都有独立的dom 是一个矢量图形 放大缩小不会失贞
canvas 输出的是一整块 是一个画布 放大 缩小会失贞
闭包的用法 1 2 3 4 5 6 7 8 9 10 11 1. **使函数外部能够调用函数内部变量的方法** 2.一个函数的返回值 是另外一个函数,返回的哪个函数如果调用其父函数内部的其他变量,如果返回的函数在外部调用就产生了闭包 3.根据作用域链规则,底层作用域没有声明变量 会向上一级寻找,找到就返回 没有找到就一直找,直到window 则返回 undefined 4.变量作用域 全局 和 局部 函数内部 可以 访问函数外部 反之则不行 所以就需要闭包 5.闭包滥用 会造成内存泄漏 会改变付函数内部变量的值
数组的排序 1 2 3 4 5 6 7 8 9 10 11 12 13 js 原生可用 sort 进行排序 二维数组排序 sort排序 arr.sort(function(a,b){ if(a[1] < b[1]){ return -1; }else if(a[1] > b[1]){ return 1 }else{ return 0 } }) 其他可使用冒泡
如何看待模块化 减少系统耦合度,
让开发者便于维护,同时让部分逻辑相同的地方可以共用
amd 和 cmd
amd 提前执行
cmd 依赖前置
常见的网络攻击以及如何防范 1.xss 攻击 跨站脚本攻击 在web页面插入恶意代码 然后被执行 解决方法: 不允许脚本执行,过滤转义脚本标识符 使用过滤组件js-xss 添加过滤规则等
2.反射型XSS 通过 连接后缀来执行添加
3.CSRF 跨站点伪造请求 利用伪造的请求 来达到目的 解决方法:采用POST 对请求进行认证
4.脚本刷接口 解决方法: 加验证码
长连接和短链接的区别 1.长连接 表示新建一个tcp 连接 发送数据,数据发送完之后不会立即断开 而是保持连接,如果没有数据发送 则需要双方检测 如果需要则保持 不需要则断开。应用于点对点通讯
2.短链接 建立tcp 连接后发送数据 数据发送完成则断开
如何判断一个变量的类型或者是否为string 1. typeof(obj) === 'string'
2.obj.constructor
如何去除字符串空格 1.正则
2.trim
垃圾回收机制以及内存管理 1.回收机制 负责管理代码执行过程中使用的内存 定期找出不在使用的变量,然后释放其内存,这个过程不是实时的,是按照固定时间间隔的周期性来执行的
2.内存管理 周期性的运行 回收不可访问的对象
判断一个字符串中出现最多的字符 var x = "asdgsdgasdg1231weweg123asdg23";
var y = {}
for(var i =0; i<x.length;i++){
if(!y[x.charAt(i)]){
y[x.charAt(i)] = 1
}else{
y[x.charAt(i)]++
}
}
var max = 0,
maxname = '';
for(var i in y){
if(y[i] > max){
max = y[i]
maxname = i
}
}
去除数组相同元素 var x = [1,12,3,1,3,2,6,1]
var obj = {}
var temp = []
for(var i = 0; i< x.length;i++){
if(!obj[x[i]]){
obj[x[i]] = 1
temp.push(x[i])
}
}
for(var i = 0;i<x.length;i++){
if(temp.indexOf(x[i]) < 0){
temp.push(x[i])
}
}
如何提高页面性能 减少http 请求,
减少dom 元素数量
把css 放到代码上端
避免css 表达式
优化图片
合并请求
压缩图片
脚本放到html 底部
页面seo注意哪些 title 和 desc keyword 的设置正确
图片加alt
从浏览器地址栏输入URL 到页面显示页面的具体步骤 去DNS 进行域名解析 拿到IP根据IP访问服务器,服务器根据请求返回数据,浏览器接收数据开始渲染
http 状态码 1xx 发送时候
2xx 请求成功
3xx 重定向
4xx 客户端错误
5xx 服务端错误
css 盒子模型 标准 content + border margin padding
ie conteng border padding + margin
移动端1像素问题 border-image
viewport rem 解决
css transform:scaleY()