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。第二种是对象级别的插件开发$.fn.extend.
61、是否设计过通用的组件?
设计过,比如:toast,下拉加载,购物车等。
62、平时是如何学习的?
1、看技术文档。
2、去github上下载开源代码读代码。
3、网上找些视频来学习。
63、项目中负责了什么?
作为一个前端,首先是项目的页面和数据展示,有时候处理不同设备的兼容,再就是处理页面之间和数据之间的逻辑关系,提高用户体验
64、自己的职业规划?
我目前规划是基于当前目标,先努力扎实自己的基础,尤其前端这个行业日新月异,基于基础然后向架构方向发展
65、除了前端还会其他的吗?
因为上家公司主要后端语言是PHP,所以一些基本的PHP代码可以阅读,当然,现在我对nodejs也有一定的研究
66、给你一个5个页面的网站多长时间能做完?
这个的看页面的交互和数据情况,一般来说,基本静态页面完成起来是很快的,更多侧重数据交互和也没面功能测试,有时候可能在一些特效动画上耗费点时间
67、了解过模版引擎吗?
使用过templat.js和Dot.js。就是获取到数据快速完成数据渲染的过程,节省代码量。提高维护性,减少 拼接字符串,这样也优化的性能
68、项目上线是如何操作的?
正式服务器接口测试--合并分支-回归测试--检查线上服务器权限-数据是否清空- 上线包检查并发布-灰度测试-维护
69、vue中watch和computed的区别?
watch主要作用是监听路由变化。Computed主要是做计算方法。
70、开发项目的流程是什么?
1、和产品经理沟通确认需求。
2、拿到设计稿开始切图。
3、开始布局写页面和js效果。
4、和后台对接数据。
71、公司有没有强制使用eslint等代码检测工具?
没有强制使用,但是也让使用,防止冗余代码的出现尤其对新手比较重要。
72、项目开发时是怎么进行项目自测?
边开发边测试,做一个功能测试一个,如果出现bug就用调试工具,如果调试工具提示的不详细,就用排除法来调试。
73、h5及c3新增的一些内容?
h5新增主要功能如下:
1、video视频。
2、audio音频。
3、websocket。
4、history api。
5、canvas。
6、geolocation地理位置。
7、拖拽事件。
8、localStorage。
9、sessionStorage
74、移动端如果做多终端的适配?(各主流手机 ,pad,电脑)
1、可以用bootstrap。
2、用css3的媒体查询。
3、使用rem
75、使用angular vue react框架做过那些类型的项目?项目有多大?遇到过那些棘手的bug?
angular现在市场小,没有用它做过大型项目,我现在主要用vue、react来做开发。做过电商、在线教育等移动端web和app。棘手的Bug:做微信分享时与后台对接签名的问题,用vue做websocket时第一次访问和服务端通信,跳转其他页面后依然保持连接没有断开,会造成下次访问再次创建连接,发送消息是出现两次以上同样的信息,解决方案,在跳转页面时,需要在钩子方法beforeDestroy ()里面关闭websocket即可。
76、jquery和zepto有什么区别? 他俩对于现在的mv*框架及react这种专注视图层的框架有什么区别?
jquery体积比较大适合pc端,zepto体积适合移动端,zepto封装了h5的touch事件
77、ajax和fetch有什么区别?jsonp是解决跨域的,还了解过哪些并实际使用过哪些跨域的解决方法?
ajax是用XMLHttpRequest,fetch是用promise。配置服务器增加Access-Control-Allow-Origin:*。利用websocket也可解决。
78、你跟后端交互的时候需要注意那些问题?后端开发的接口字段是如何定出来的?后端开发的接口字段里面 你认为必须要有的是什么?
1、跨域问题。
2、请求类型比如:post、get。
3、是否有必填字段,字段类型;是根据业务需求、页面设计定制出来的;如果是用户登录接口,要有用户名和密码字段。如果是文章列表要有id,title,image等字段。
79、你了解过那些模块化规范?模块化开发有什么好处?他和组件化有什么区别?
CommonJS和requireJS;比如CommonJS规范:一个单独的文件就是一个模块,每一个模块都是一个单独的作用域,用import导入,用module.exports导出,可以做到按需加载,避免冗余代码的产生。AMD,requireJS解决js文件过多浏览器停止页面渲染。可以做到按需加载;模块化是一种编程思想,可以做到按需加载。组件化是自己封装的公共组件方便多次使用。
80、gulp,grunt,webpack这些工具的区别?
gulp和webpack是单页面应用的构建工具,目前webpack被vue,react广泛使用。Grunt是专业的代码合并、压缩工具用于传统的h5页面开发使用。
81、你们公司代码是怎么管理的? git svn及提交流程
主要用git,小项目用svn;git提交流程:
1、先拉取pull。
2、选择要提交的问题add。
3、提交文件commit。
4、推送到服务端主分支push。svn提交流程:1、先更新。2、再提交。
82、对node了解多少?你使用过什么?觉得nodejs对于前端来说最大的作用是什么?
会用express可以对mysql、mongodb进行增、删、改、查;node可以做为中间件使用,对一些nosql操作比较好比如mongodb。如果用react做服务端渲染可以使用node的express来做中间件使用。
83、说下图片上传是如何实现的?
拿到服务端的图片上传接口。方法一:可以用jquery的jquery.form.js上传。方法二:可以用axios上传。方法三:可以用ajax配合h5的FormData来上传图片。然后服务端会返回图片名,将图片名提交到数据库
84、后台管理系统开发的过程中你认为需要注意的地方有哪些?
1、安全性。
2、业务流程。
3、搭建好目录结构,功能模块化。
4、权限角色分配。
85、ie火狐谷歌浏览器的兼容问题是如何解决的?
如果用float布局做好清除浮动,在公共样式里设置margin:0px;padding:0px;。如果子元素有float那么父元素用overflow:hidden清除浮动。
86、Vue组件通讯的实现方法有哪些?
1、父组件向子组件传值。
2、子组件向父组件传值。
3、用vuex传值。
87、vuex中action和mutation分别用来处理什么?
action处理异步数据最终提交到数据库,mutation用来同步数据做业务的处理。
88、封装针对自己公司需求的数据请求方法有什么好处?怎么封装?
封装后方便重用和维护,如果是原生js用面向对象封装,用jquery封装成插件,用vue或是react封装成组件。
89、使用过那些css预处理?说下他的优缺点?
使用过less、sass。less简单,易上手;属于css的基础拓展;sass 复杂,功能强大,更加丰富的拓展;没有特别的优缺点,自己喜欢什么就选择什么,有的时候什么都不选择就用css就行了。
90、移动端项目如何解决300ms延迟问题?
使用fastclick解决ios的300ms延迟问题
91、better-scroll做过那些需求?
1、下拉刷新。
2、上拉加载。
3、内容溢出出现滚动条滑动解决卡顿问题。
92、使用过百度地图吗?使用过echarts?
使用过,比如获取用户经度和纬度,对接百度地图显示用户在地图里显示的位置。Echarts我一般在后台做活跃度、用户访问量统计图。
93、react定义组件的方法有哪些?区别是什么?
1、无状态函数式组件。
2、es5原生方式React.createClass定义的组件。
3、es6形式的extends React.Component定义的组件。最大的区别就是现在都用es6前面两种慢慢的被淘汰不需要使用了。
94、说说redux和vuex的不同?
Vuex:有自动渲染的功能,所以不需要更新。Redux:一个子组件的状态必须通过父组件传递过来,父组件从仓库统一调控,当一个组件相关数据更新时,即使你的父组件不需要这个组件,它还是会自动更新。
95、redux需要注意的问题有哪些?
入口文件,路由文件要分配好,主仓库分配给各个组件,获取值需要用connect将redux与类关联起来。
96、redux和router开发的时候遇到过那些问题?怎么解决的?
redux的问题就是页面刷新后无法保存数据,需要用localStorage来配合解决。Router在子组件里会出现跳转的问题,使用withRouter来解决。
97、react+redux开发项目的时候数据请求这块如何分配?
比如做会员登录时,会员的信息记录到redux中。在做购物车是也需要把数据记录在redux中。
98、大型的前端构建项目,本地打包和编译的时候如何区别开发和生产环境
通过变量来区分:export NODE_ENV="development"是开发环境。export NODE_ENV="production"是生产环境。
99、看过jquery源码吗?你说说jquery的底层实现原理。
看过;比如:公式输入有误(function(){})实现原理是监听DOMContentListener(兼容火狐和谷歌等浏览器)和onreadystatechange(兼容ie浏览器)实现的
100、你封装过插件吗?封装过哪些插件,说说封装插件的思路
封装过。比如:购物车,幻灯片,选型卡,下拉加载,toast,弹窗等插件。先用原生js写对象再用$.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>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
.wrap{
width: 0px;
height: 0px;
border-width: 0px 50px 50px 0px;
border-color: red transparent;
border-style: solid;
}
</style>
</head>
<body>
<div class="wrap"></div>
</body>
</html>
//圆
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
.wrap{
width: 100px;
height: 100px;
background-color:red;
border-radius: 50%;
border-radius: 50%;
border-radius: 50%;
}
</style>
</head>
<body>
<div class="wrap"></div>
</body>
</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来进行回调操作。