前端面试题总结(详细)

1、移动端你遇到过什么兼容问题?
1、如果在input设置边框颜色在ios系统里会出现兼容性问题,需要在外面加一个div设置div的边框代替input边框。
2、文字溢出,用overflow:auto做滚动条在ios上面会卡顿,需要用iscroll解决。
3、防止手机中网页放大和缩小。
4、禁用自动匹配手机号、地址、email。
5、用好rem和css3的媒体查询解决适配问题。
6、ios和android下触摸元素时出现半透明灰色遮罩。用 -webkit-tap-highlight-color:rgba(255,255,255,0)解决。
7、iphone及ipad下输入框默认内阴影。用-webkit-appearance:none;解决。
8、移动端点击穿透问题。尽量不用要touch事件,用click事件,然后防止冒泡就事件可以了
2、http和https的区别?
http是超文本传输协议。用于Web浏览器和网站服务器之间传递信息。
https是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。可以防止抓包的问题,一般做接口都是使用https。
3、如何提高网页性能?
1、用图片懒加载减少请求数。
2、用好伪元素降低标签的数量。
3、不要有冗余代码。
4、用好打包合并压缩工具,将css、js文件合并压缩,减少请求数。常见的工具:grunt、gulp、webpack。最强大的合并压缩工具:grunt。
4、移动端的适配怎么做?
最常用的就是rem和css3媒体查询。
5、什么是闭包?在开发项目时什么地方用闭包?
闭包就是父函数给子函数传值,解决作用域问题。比如做一个随机抽题功能、选项卡、幻灯片等。一般用setInterval的地方用的比较多。
6、说说对象的继承?
我一般都用call、apply、bind做继承,bind指向对象本身。
7、jquery的优点?
简单易用,尤其是对dom的操作很方便。
8、调试是怎么做的?
用chrome的开发者工具调试,console.log,alert等。
9、本地存储localStorage与sessionStorage的区别,都在什么地方使用?
localStorage关闭浏览器还是可以保存记录。sessionStorage关闭浏览器后数据消失。用在会员登录后保存状态,购物车等地方。
10、订单支付怎么实现?
1、登录会员。
2、进入商品页面。
3、将商品放入购物车。
4、提交订单。
5、对接支付宝或微信支付进行支付。
11、DOM执行事件流程?
1、捕获阶段:先由文档的根节点document往事件触发对象,从外向内捕获事件对象;
2、目标阶段:到达目标事件位置(事发地),触发事件;
3、冒泡阶段:再从目标事件位置往文档的根节点方向回溯,从内向外冒泡事件对象。
12、scss和sass,less区别?
Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,Sass语法属于缩排语法,比css比多出好些功能(如变量、嵌套、运算,混入(Mixin)、继承、颜色处理,函数等),更容易阅读。Sass 3就变成了Scss(sassy css)。与原来的语法兼容,只是用{}取代了原来的缩进。Less也是一种动态样式语言. 对CSS赋予了动态语言的特性,如变量,继承,运算, 函数. Less 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可在服务端运行 (借助 Node.js)。区别:1.编译环境不一样。Sass的安装需要Ruby环境,是在服务端处理的,而Less是需要引入less.js来处理Less代码输出css到浏览器,也可以在开发环节使用Less,然后编译成css文件,直接放到项目中。2.变量符不一样,Less是@,而Scss是$,而且变量的作用域也不一样。3.输出设置,Less没有输出设置,Sass提供4中输出选项:nested(嵌套缩进的css代码), compact(展开的多行css代码), compressed (简洁格式的css代码)和 expanded(压缩后的css代码)

13、伪类和伪元素的区别?
伪类用于向某些选择器添加特殊的效果,比如::hover,:foucs,:link,:active,:vistied,:first-child,:lang。伪元素用于将特殊的效果添加到某些选择器,比如:berfor,:after,:first-letter,:first-line。

14、多维数组如何实现扁平化处理?
1、常规就是循环和递归 。2、使用es的展开符

15、jsonp的实现原理?
就是动态生成一个script标签。然后通过script的src加载地址,同时根据callback返回函数里面获取数据,这样就的需要后台接口返回的时候返回一个带变量的数据

16、什么样的网站适合作响应式?
功能不是很复杂的网站,设计排版简单的网站适合。比如公司官网,界面清晰的视频网站等。
17、说一下git遇到冲突如何解决?
1、pull一下,更新程序。
2、同步,查看冲突代码。
3、人工修改,保持本地最新版。
4、Add to Git Index,提交修改。
5、Commit提交。
6、push推送到服务器
18、前端工作流程?
1、拿到原型图和产品经理沟通业务需求。
2、拿到设计稿先规划一下思路然后切图布局。
3、写出js效果。
4、拿到后端的接口文档测试一下接口是否可用。
5、对接数据渲染到页面。
19、tap事件原理?
在移动端中,由于两次触摸是放大操作,所以当你点击一次的时候,浏览器会等待300ms,看用户是否会进行第二次点击,如果没有的话,才会执行点击事件,tap事件的原理其实是源于触摸touch事件,在移动触摸事件就是在同个点触发,及touchmove的距离距离touchstar的距离为0,并且点击的时间不超过某个设定的时间值,超过该时间值的话,就属于长按了
20、懒加载原理?
一般来讲,给图片src配置一个假的地址,同事给添加一个data-url属性指向真是url地址,当图片快要显示的时候将url地址替换成data-url的属性
21、移动端的fastclick怎么实际使用?
引入fastclick.js插件。然后Fastclick.attech(document.body)中
22、公司的测试是怎么向你提bug的?他是怎么记录的?
写一个文档图文并茂的形式给我。边测试边记录。
23、原生ajax的步骤?
5个步骤,
1、构建xmlHttpRequest对象。
2 、准备请求open。
3、send发送数据。
4 、等待数据 。
5 、成功接受数据
24、get和post区别是什么?
1、本质区别 一个用来提交数据,一个用来获取数据。
2、 传参方式区别 。
3、 安全性 。
4 、传参数数据大小
25、有几种方法可以改变this指向?
1、call apply bind 。
2、可以提出箭头函数
26、说一下你有几种让子盒子居中的方法?
1、flex
2、定位各50%,然后tranfrom:translate(-50%)
3、定位 然后上下左右都是0 margin auto
27、vue-router的原理?catch方法的实现原理?
用户通过vue的router.push和router.replace来修改地址栏。同时监控地址栏。获取到对应组件,去配置信息里面寻找对应的页面显示
28、git和svn的区别?
一个是集中式管理,一个分布式管理
29、vue计算属性和watch的区别?
计算属性是为了检测某个属性。而这个属性是由别的变量觉定的,核心在计算,watch是监控,主要是用来某个变量发生变化导致别的触发来使用,计算属性中的变量不需要在data里面初始化
30、vue的优势为什么使用vue?
vue是单页面应用,使页面局部刷新,不用每次跳转页面都要请求所有数据和dom,这样大大加快了访问速度和提升用户体验。而且他的第三方ui库很多节省开发时间。
31、mvvm是什么?
把Model和View关联起来的就是ViewModel。ViewModel负责把Model的数据同步到View显示出来,还负责把View的修改同步回Model。就是model->view->view->model
32、vuex实现原理?
Store,负责管理整个数据访问、修改等; 提高API;getter.xxx,怎么可以每次拿到最新数据?,action和mutation负责提交数据。
33、vue Seo优化?
vue默认不支持seo优化因为是单页面应用,数据也是用ajax读取,无法友好的让搜索引擎抓取,所以无法获取排名,需要用服务端渲染Nuxt.js来解决,但是这样开发成本太大,建议如果考虑seo的话就不要使用前端框架,用传统的h5开发即可。
34、vue服务端渲染?
建议使用nuxt.js,因此可以在服务端可以提前渲染出来,解决了单页面一直存在的问题:SEO和初次加载耗时较多的问题。
35、es6和es5的区别?
说出ES6的特点:
1、let const。
2 、字符串模板 。
3 、promise 。
4 、class。
5、箭头函数。
6、解析结构。
7、数组和对象的新方法 ,比如 set assign。
36、webpack按需加载?
使用require.ensure做页面分割按需加载。
37、你常用的loader加载器有哪些?
一般在vue的webpack中配置,常见的’style-loader’css-loader less-loader babel-loader(解析ES6) json-loader vue-loader
38、怎么理解promise(语法糖)?
Promise 是异步编程的一种解决方案,new Promise(function(resolve,reject){
if(/异步操作成功/){
resolve(value);
}else{
reject(error);
}
})或者通过生成对象后通过then的方法
39、如何实现异步编程,有哪些方式?
现在比较常用的是promise。解释一下promise.原来比较多的是通过回调函数或者事件监听
40、解释一下什么是vue实例
类似创建一个vue对象。里面包含钩子函数,data,methods.computeds等
41、vue组件有多少个生命周期?
11个,建议不要说个数,说出8个常见的和后来加的
42、vue组件之间传递数据怎么实现,区别是什么?
1、分父子组件如何传值。
2、 使用vuex。
3、事件总线bus。
4、本地存储传值。
43、在开发中怎么与后台合作的?
1、通过接口文档拿到json数据。
2、用ajax将数据渲染到页面。
44、vue数据双向绑定的实现原理?
是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。
45、nodejs了解吗
了解。一般我用来配合mongodb开发一些小的接口,和使用他的npm 命令,主要用nodejs做中间件。
46、数组排序有哪些方式?
js自带sort(function(a,b)return a-b)方法,或者手动写冒泡或者快速排序
47、用css如何实现左侧宽度固定,右侧宽度自适应?
1、flex布局。
2、margin配合float实现。
3、使用calc计算属性。
48、技术团队人员分配?
如果是小型项目:一个产品经理、一个设计师、一个前端工程师、一个后端工程师总共4个人。
49、如何开发响应式网站开发?
传统使用boostrap.boostrap也是基于媒体查询来实现响应式的,第二,注意使用百分比或者rem布局
50、js数据类型有哪些?
6种数据类型:string、number、boolean、object、undefined、array。ES6中新加symbol。
51、父盒子高度自适应,里面的文字行高如何自适应?
1、使用rem或者em来设置文字大小,em和rem是相对单位。
2、使用js获取父元素高度来设置子元素文字。
52、在工作中如何配合安卓和ios开发工程师?
基本上通过webview来实现安卓或者ios对js的交互
53、项目结构是如何搭建的?
现在基本上使用vue脚手架来搭建结构,手动搭建过程是npm init初始化结构,配置webpackjson和git仓库,还有安装依赖,创建static.view等对应文件夹并开始编写代码
54、常用的浏览器有那些?
谷歌。webkit 火狐gecko IE trident
55、渐进增强和优雅降级?
渐进增强 progressive enhancement:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
优雅降级 graceful degradation:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
区别:优雅降级是从复杂的现状开始,并试图减少用户体验的供给,而渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要。降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带。
56、常用的dom的操作方法?
创建节点,节点克隆,替换,删除,节点属性的操作
57、事件代理的原理?
基于事件冒泡
58、前端安全问题?
1、xss攻击。
2、防止sql注入。
3、文件上传漏洞 预防方法就是前端对所有用户输入的信息都需要验证,且后端也得需要验证。
4、防短信轰炸,用图文验证码解决。
5、会员登录是的cookie欺骗,用token解决。
59、jquery的优化方法?
1、选择器要用对,理论上ID选择器是最快的,学会使用缓存JQ对象
2、尽量减少dom操作。比如对某个元素插入数据的时候,先把数据都弄好一次性插入
3、 不要直接使用事件,通过绑定on的方法加事件
4 、学会使用链式写法
60、jquery添加插件?
两种开发模式,第一种是基于函数的函数,jQuery.extend。第二种是对象级别的插件开发KaTeX parse error: Expected 'EOF', got '#' at position 4057: …现原理。** 看过;比如:("#̲name")就是原生js的do….fn去调用。
101、封装过组件吗?说说你封装哪些组件。
封装过。比如:公共的头,alert,购物车等等。
102、说说代码重构的思路?
先看看那些代码可以封装,重用,继承。实现步骤如下:1、提取子函数。2、把大家都要用的方法放到父类中。3、下移函数到子类。4、封装固定的调用逻辑(有点模板模式的意思)
103、项目中遇到印象最深刻的问题,以及解决的思路是什么?
1、用react的开发的时候子组件用路由跳转时需要用withRouter解决。
2、如果在input设置边框颜色在ios系统里会出现兼容性问题,需要在外面加一个div设置div的边框代替input边框。
3、文字溢出,用overflow:auto做滚动条在ios上面会卡顿,需要用iscroll解决。
104、最有成就感的是哪个项目?
自己写
105、实现一个深拷贝函数?
function getType(obj){
//tostring会返回对应不同的标签的构造函数
var toString = Object.prototype.toString;
var map = {
‘[object Boolean]’ : ‘boolean’,
‘[object Number]’ : ‘number’,
‘[object String]’ : ‘string’,
‘[object Function]’ : ‘function’,
‘[object Array]’ : ‘array’,
‘[object Date]’ : ‘date’,
‘[object RegExp]’ : ‘regExp’,
‘[object Undefined]’: ‘undefined’,
‘[object Null]’ : ‘null’,
‘[object Object]’ : ‘object’
};
if(obj instanceof Element) {
return ‘element’;
}
return map[toString.call(obj)];
}
//深拷贝
function deepClone(data){
var type = getType(data);
var obj;
if(type === ‘array’){
obj = [];
} else if(type === ‘object’){
obj = {};
} else {
//不再具有下一层次
return data;
}
if(type === ‘array’){
for(var i = 0, len = data.length; i < len; i++){
obj.push(deepClone(data[i]));
}
} else if(type === ‘object’){
for(var key in data){
obj[key] = deepClone(data[key]);
}
}
return obj;
}
106、Css结合html写一个常见的页面布局?
107、用Css画一个三⻆角和实现一个圆环?
//三角
<!doctype html>

无标题文档
**108、一个完整的react开发目录结构?** **109、说说你对promise的理解?其优势是什么?** promise是es6的一种异步请求构造函数,接收一个参数,是函数,并传入两个参数resolve,reject(可以见到的理解成功后和失败后的回调函数),在我们封装好函数的最后,会return出promise对象,promise对象的原型上有then、catch等方法,then方法中我们协议拿到我们在调用resolve时可以传递的参数并形成promise链,调用reject时,promise链就被破坏了,reject之后的promise都不会再执行,而是直接调用.catch方法;Promise的优势在于,可以在then方法中继续写promise对象并返回,然后继续调用then来进行回调操作。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猫A建仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值