‘壹’ 在哪里可以刷前端题目
牛客网,刷前端的面试题
‘贰’ 你遇到的前端面试题都有什么
大家好,我是王我。
随着春节的结束,各个行业也普遍开始了上班的节奏, 不过本人17号才上班。为什么?因为长得帅的都上班比较晚。 当然,每到新年结束,又迎来了一批招聘者与面试者,我来说说作为一年工作经验应该知道的面试题。
HTML篇
1.doctype是什么?有哪些类型?
2.input有哪些新类型?简要说明其8用法。
3.HTML5有哪些新特性,移除了哪些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5?
4.bootstrap响应式的原理是什么?
5.多移动终端页面适配是如何实现的?
CSS篇
1.如何实现两列布局,左边自适应,右边固定宽度?
2.用CSS画一个三角形
3.CSS实现字体大写
4.display有哪些常用的属性值?分别是什么意思?
5.position为absolute,relative,fixed的定点位置
6.用三种方法清除浮动
7.请介绍一下margin塌陷问题
js篇
1.什么是事件冒泡和捕获?如何阻止事件冒泡?(分别用原生和jquery实现)
2.js创建对象,至少使用三种方法
3.简述一下事件穿透以及解决办法
4.用三种方式判断变量类型是否是数组
5.如何实现对象的拷贝?
6.什么是闭包?闭包的优缺点。
7.简述一下ajax请求的过程。
8.简述一下new一个人构造函数的人过程。
9.为什么会有跨域?是怎么解决跨域问题的?简述一下原理。
10.js原始数据类型有哪些?
11.学一个函数,判断一个变量是否是字符串
12.typeof有哪些结果?
13.剪头函数和普通函数有什么区别?
14.请用三种方法实现数组去重
15.href和src有什么区别?
jquery篇
1.attr()和prop()有什么区别?
2.on和bind有什么区别?js动态添加的dom元素是通过on还是bind?
3.touch和click有什么区别?
4.window.onload和jquery的ready有什么区别?
vue篇
1.简述一下vue的生命周期及其特点
2.vue双向绑定的原理是什么?
3.vue的特点有哪些?和jquery有什么区别?
4.父子组件之间传递数据的方法
5.子组件如何共享数据?
6.一般有什么工具进行数据交互?
7.webpack的原理是什么?
8.简述一下$nextTick的用法
浏览器篇
1.cookie、sessionStorage、localStorage的区别是什么?
2.有用过浏览器缓存吗?简述一下基本的缓存机制
网络篇
1.http和https之间的区别
2.从服务器的安全考虑,是使用get请求还是post请求?
3.URL请求的过程有哪些?
项目经验篇
1.项目中遇到的最大挑战以及解决办法
2.常见的网页优化有哪些?
作为一个面试一年以内工作经验的前端程序员来说,以上的问题能够倒答如流月薪6k应该不成问题啦。这些面试题也是我在很多面试中感觉经常被问到的题目。
希望大家年后找工作能够顺顺利利, 千万不要跟我一样哦,只有帅气就一无所有了。
大家好,我是王我,中国最帅的前端程序员。
前几次都是各种培训公司,各种忽悠就不提了,说说后面4次面试的经历。
第一次是面一个小公司,不过他们好像没有厉害的前端,来面我的是个后端,一来没有问我关于js的知识,直接问我以前做过什么,有没有经验,我本人不会吹牛,简历也没怎么包装,就是自己把自学的知识和做的几个小demo弄在上面,也用github挂在页面上了,不过他根本不点开看,也不问,问我会不会vue,我当时对框架还不了解,他就说他们需要能直接上手开始写的,所以我第一个就直接挂了。
第二次面试是一个国企,这个问了很多问题,都很基础,js数据类型,数组操作,事件,大概就是高程的前面几章看看就差不多都能答到,然后因为他们主要用jq,所以问了很多jq的操作,关于节点的,动画的,我看锋利的jq大概看了3遍,也练过多次,所以我答的很熟。然后问了些布局方面的,bootstrap我了解过,又看过css3,所以这方面也没啥问题,最后在现场做了个题目,主要就是布局然后通过ajax呈现数据。后面听介绍我面试的说面试官比较满意,说我jq很熟,一面就过了。可惜后面电话面试不知怎么回事可能表现的不够自信,虽然没问技术,但是我没啥自信,把没项目经验什么的也不知怎么就一五一十交代了,估计因为这个挂掉了。
第三次没问问题,直接就是一套题开做,我在那做了一个多小时。题目就是按照要求一步一步做一个页面出来,我也搞忘了我当时卡在哪个地方了,坐在那得时候就是做不出来,没有设计图,要根据他的描述自己找个设计图然后做,我第一次遇到这个有点懵,虽然当时没做出来,不过回来我自己花了几个小时把它做了。所以这个也是凉了。
第四个问的比较多,数据类型,数组操作,跨域,ajax,闭包,原型链,继承,深拷贝,浅拷贝,模块amd cmd,基本都是问的js。然后问了html5的新特性 css3 的新特性,遇到过什么浏览器的兼容性问题,怎么解决的,以后想往什么方面发展。这个时候我已经会点vue了,照着做了个小demo,不过后来知道公司用的angularjs,面试官也没看我做的,问也没问。。以前听网上说要带上自己的项目去面试感觉没起多大效果。
最后总结下如果面的比较初级的岗位,应该主要问js,原型链,继承,闭包,深浅拷贝,ajax,跨域,然后js的基础知识,对了还有apply和call也问了,html5的新特性了解下就行。主要就是看你js掌握的程度,如果稍微要求高一点的,暂时还没面过,等以后面过在来回答
1. cookie session 的用途和区别,以及有效期
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
2. vue的数据绑定原理,mvvm与mvc的区别
MVVM:
m:model数据模型层 v:view视图层 vm:ViewModel
vue中采用的是mvvm模式,这是从mvc衍生过来的
MVVM让视图与viewmodel直接的关系特别的紧密,就是为了解决mvc反馈不及时的问题
图片说明一下:
说到MVVM就要说一下双向绑定和数据劫持的原理,
MVC:
m:model数据模型层 v:view视图层 c:controller控制器
原理: c层需要控制model层的数据在view层进行显示
MVC两种方式,图片说明:
总结:
mvvm与mvc最大的区别:
MVVM实现了view与model的自动同步,也就是model属性改变的时候, 我们不需要再自己手动操作dom元素去改变view的显示,而是改变属性后该属性对应的view层会自动改变。
不懂得可以复制链接查看:
https://www.pianshen.com/article/3716256399/
3. storage 的区别 sessionStorage localStorage
localStorage 的生命周期是永久性的。假若使用localStorage存储数据,即使关闭浏览器,也不会让数据消失,除非主动的去删除数据,使用的方法如上所示。localStorage有length属性
sessionStorage 的生命周期是在浏览器关闭前。也就是说,在整个浏览器未关闭前,其数据一直都是存在的。sessionStorage也有length属性,其基本的判断和使用方法和localStorage的使用是一致的
有一个文本框 通过v-bind绑定了value属性 值为myname 是我们在vue实例中定义的属性
传统我们获取文本框值方法 可能通过getElementById找到文本框 然后获取其value属性
但是vue中直接通过v-bind绑定了value属性 所以不需要像之前那样获取值
所以在后面的按钮中获取name值 直接获取vue实例对象data里面的myname属性即可
【数据为尊 ----数据映射到浏览器 如果数据v-model后修改(肯定input)然后到数据在有数据映射到浏览器页面 ----映射关系统称】
缓存路由组件
使用的是vue的一个组件,参考vue的官方文档
使用这个东西可以保证我们在切换组件的时候,原来显示的组件不被销毁
-----【保障组件的数据不会被切换路由而销毁数据】
Home是对应的组件对象的名字,不是路由的名字
6.多维数组拍平
数组拍平也称数组扁平化,就是将数组里面的数组打开,最后合并为一个数组
一红六种方法吧……
了解的请看: https://www.cnblogs.com/guan-shan/p/10165737.html
7.跨域的原因 解决方案
跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。
这样就可以说同源策略----协议---端口---域名
原生的src和href可以解决跨域
代理可以解决
请求头也可以携带浏览器提示的也可以解决
一般都是后端解决跨域问题
【别的需要了解看下方链接】
https://blog.csdn.net/qq_41604383/article/details/100770100
8.uniApp兼容问题§ 如果你使用cli创建项目(即项目根目录是package.json),不管用什么ide,即便是用HBuilderX,切记cli项目的编译器是在项目下的,HBuilderX不管怎么升级都不会影响编译器版本。你需要手动npm update来升级编译器。以及如果你想要安装less、scss等预编译器,也需要自己npm安装在项目下,而不是在HBuilderX的插件管理里安装。
§ 如果你使用离线打包,请注意HBuilderX升级后,真机运行基座和云打包对应引擎跟随HBuilderX升级,而你的sdk需要手动升级。sdk的版本升级一般滞后HBuilderX正式版升级一两天。
§ 如果你使用自定义基座,之前制作的自定义基座是不会跟随HBuilderX升级的,升级HBuilderX后你应该重新制作新版自定义基座。
§ 如果你使用wgt升级,新版HBuilderX编译的wgt,运行到之前的runtime上,一定要先测试好,看有没有兼容性问题。如果有问题,就不要wgt升级,整包升级。
§ 考虑到向下兼容,uni-app编译器在升级为新的自定义组件模式后,同时保留了对老编译模式的向下兼容。
在HBuilderX alpha版中,App端一定会使用新编译器,不理会manifest配置。
在HBuilderX 正式版中,新创建的项目会使用新编译器,老项目不会强制使用,而是开发者自己在manifest里配置开启。
§ 如果你使用其他ide开发uni-app,会经常因为拼错单词而运行失败,因为经过webpack编译一道,很多错误反应的不够直观,排错时间很长,不如从开始就依赖有良好提示的HBuilderX,避免敲错单词。
§ 云打包的引擎版本说明
HBuilderX Alpha,只有1套云打包机,不管你的HBuilderX alpha版本多少,对应的打包机一定是最新的alpha版的客户端引擎。
HBuilderX正式版,有2套打包机,一个是最新正式版,一个是次新正式版。
中间的紧急更新版本没有独立打包机。
举个例子:
HBuilderX 有1.8.0、1.8.1、1.8.2、1.9.0、1.9.1这几个正式版。
那么当前可用的打包机有1.9.1和1.8.2这2台。(即每个大版本的最后一个版本)
除了这2个HBuilderX版本外,其他版本的云打包都指向最新的1.9.1版对应的打包机。(即只保留2个大版本的云打包机)
【详情请看】
https://ask.dcloud.net.cn/article/35845
一、HTML
HTML书写规范
H5新增标签
HTML渲染过程
二、CSS
css盒子模型概念
css弹性布局概念
三、JavaScript
事件模型
DOM2级事件模型
闭包
原型链
四、移动Web开发
常见的布局方案
移动端前端常见的触摸相关事件touch、tap、swipe等整理
移动端前端手势事件
移动端页面渲染优化
GPU渲染
GPU核心渲染过程
五、调试
常用的调试工具
Chrome控制台调试js使用
移动端测试
六、HTTP网络知识
常见的HTTP状态码
不同请求类型的区别
WEB缓存方案
——————————
牛客网(www.nowcoder.com)
- 专业IT笔试面试备考平台
- 最全C++JAVA前端等互联网技术求职题库
- 全面提升IT编程能力
- 程序员交友圣地
分享了一些Web前端的面试题,限时一小时,你看看自己能够答出多少道!
放心,这些面试题都是一些非常基础的知识,只要你在平时认真听课、学习了,那么这些面试题肯定不会难道你。
建议:虽然没有人监督你,但还是希望你不要去寻找答案,脱离网络,拿起纸笔,你试一下自己究竟能够答出个什么水平!有没有真本领?答案尽在这些面试题里!那么,你准备好了吗?OK!计时开始!
一、HTML常见题目01、Doctype作用?严格模式与混杂模式如何区分?它们有何意义?
02、HTML5为什么只需要写?
03、行内元素有哪些?块级元素有哪些?空(void)元素有那些?
04、页面导入样式时,使用link和@import有什么区别?
05、介绍一下你对浏览器内核的理解?
06、常见的浏览器内核有哪些?
07、html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?
08、如何区分HTML和HTML5?
09、简述一下你对HTML语义化的理解?
10、HTML5的离线储存怎么使用,工作原理能不能解释一下?
二、CSS类的题目01、介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的?
02、CSS选择符有哪些?哪些属性可以继承?
03、CSS优先级算法如何计算?
04、CSS3新增伪类有那些?
05、如何居中p?如何居中一个浮动元素?如何让绝对定位的p居中?
06、display有哪些值?说明他们的作用。
07、position的值relative和absolute定位原点是?
08、CSS3有哪些新特性?
09、请解释一下CSS3的Flexbox(弹性盒布局模型),以及适用场景?
10、用纯CSS创建一个三角形的原理是什么?
三、Java类的题目
01、介绍Java的基本数据类型。
02、说说写Java的基本规范?
03、Java原型,原型链?有什么特点?
04、Java有几种类型的值?(堆:原始数据类型和栈:引用数据类型),你能画一下他们的内存图吗?
05、Java如何实现继承?
06、Java创建对象的几种方式?
07、Java作用链域?
08、谈谈This对象的理解。
09、eval是做什么的?
10、什么是window对象?什么是document对象?
OK,一小时到了,这个时间可不算短了,那么这些面试题你答出了几道呢?你写的答案正确了吗?现在你可以去翻看答案了。
如果你答出了绝大多数的或者是全部的题,并且答案也正确了,那么恭喜你……
你这时心里是不是有点小窃喜,认为自己有能力拿高薪了?虽然我也很想这么告诉你,但事实上这只能表明你的基础扎实,毕竟这只是一些非常基础的面试题。骚年~继续努力吧!
如果你只答出了小部分或者答出了大部分题但答案不正确,那么我只想说:“骚年,你的水平还差的远呢。”连这么基础的题你都打不出来,还想拿高薪?回去再练一段时间吧!
扎实的基础是你拿高薪的重要武器,如果你连基础都不扎实,那么想要攻克“高薪”这个厚实的堡垒,那只是痴人说梦罢了。
1.前端框架类问题,问你会不会用vue react啊
2.语言类,问你一些JavaScript语言的问题
3.项目经验,让你讲讲做过的项目,遇到的问题和解决之道
‘叁’ web前端的面试自我介绍解析
web前端的面试自我介绍解析
自我介绍这个问题,不用多说了,面试必定会问!接下来我为你带来web前端的面试自我介绍解析,希望对你有帮助。
【如何进行自我介绍】
如果想要在自我介绍的时候就能够打动面试官,吸引面试官对我们的兴趣,那么像我们这种接受过PHP培训的程序员的自我介绍当然不能和应届生或者其他非技术岗位一样。如何进行自我介绍比较好?有没有什么套路呢?当然有。
如何进行自我介绍?看看老师是怎么建议大家的`!
1、我叫xxx,来自于吉林敦化,从网上看得到公司招聘的这个职位,觉得非常适合自己的发展。所以来这里争取下这份工作。
2、接下来可以讲解自己的核心竞争力(最强的技能、最深入研究的知识领域、个性中最积极的部分)和闪光点(做过的最成功的事,主要的成就)。核心就是要体现自己胜任这份工作(介绍时候要自然有底气,合情合理,面试前要充分准备好)。
3、先介绍到这里,面试官看看有什么问题,我可以再补充。
4、最后要说谢谢,任何HR都喜欢有礼貌的人!
注意:自曝其短(说自己的缺点)没有必要,自我介绍的时候千万不要和简历有冲突!
【你有什么优劣势】
这个问题是企业面试过程中被问到的概率很大的! 面试官想通过这一类问题的解答了解到: 1、这个人能否对自己做出正确的估价;2、主试人最关注的是该人的缺点、弱点,如这方面的问题比较突出,那就不适合做某项工作。作为前端工程师,我们应该如何巧妙的答这道题,给自己加分呢?
你有什么优劣势?请看前端老师的是怎么教我们答的:
1
作为程序员,最重要的能够给企业做好事(包括与人合作一起干事),能解决问题。所以我们可以这样说:
1、优点往狠里说 (技术狂热、学习能力强、为人谦和)
2、劣势可以提自己不是(本专业出身), 但是(对技术很狂热)
【你为什么选择我们公司】
1
你为什么选我择们的公司,对于这个问题,其实是面试官试图从中了解你求职的动机、愿望以及对此项工作的态度。这个问题,也是经常会被面试官问到的,所以各位面试的时候,一定要有所准备!
;‘肆’ Web前端最全面试宝典- Html篇
HTML
1.对WEB标准以及W3C的理解与认识
标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外 链css和js脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件,容易维 护、改版方便,不需要变动页面内容、提供打印版本而不需要复制内容、提高网站易用性;
2.xhtml和html有什么区别
HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言
最主要的不同:
XHTML 元素必须被正确地嵌套。
XHTML 元素必须被关闭。
标签名必须用小写字母。
XHTML 文档必须拥有根元素。
3.Doctype? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?
用于声明文档使用那种规范(html/Xhtml)一般为 严格 过度 基于框架的html文档
加入XMl声明可触发,解析方式更改为IE5.5 拥有IE5.5的bug
4.行内元素有哪些?块级元素有哪些?
块级元素:div p h1 h2 h3 h4 form ul
行内元素: a b br i span input select
5.HTML全局属性(global attribute)有哪些
参考资料:MDN: html global attribute或者W3C HTML global-attributes
accesskey
:设置快捷键,提供快速访问元素如aaa在windows下的firefox中按alt + shift + a
可激活元素
class
:为元素设置类标识,多个类名用空格分开,CSS和javascript可通过class属性获取元素
contenteditable
: 指定元素内容是否可编辑
contextmenu
: 自定义鼠标右键弹出菜单内容
data-*
: 为元素增加自定义属性
dir
: 设置元素文本方向
draggable
: 设置元素是否可拖拽
dropzone
: 设置元素拖放类型: , move, link
hidden
: 表示一个元素是否与文档。样式上会导致元素不显示,但是不能用这个属性实现样式效果
id
: 元素id,文档内唯一
lang
: 元素内容的的语言
spellcheck
: 是否启动拼写和语法检查
style
: 行内css样式
tabindex
: 设置元素可以获得焦点,通过tab可以导航
title
: 元素相关的建议信息
translate
: 元素和子孙节点内容是否需要本地化
6.什么是web语义化,有什么好处
web语义化是指通过HTML标记表示页面包含的信息,包含了HTML标签的语义化和css命名的语义化。 HTML标签的语义化是指:通过使用包含语义的标签(如h1-h6)恰当地表示文档结构 css命名的语义化是指:为html标签添加有意义的class,id补充未表达的语义,如Microformat通过添加符合规则的class描述信息 为什么需要语义化:
去掉样式后页面呈现清晰的结构
盲人使用读屏器更好地阅读
搜索引擎更好地理解页面,有利于收录
便团队项目的可持续运作及维护
7.html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?
新特性:
HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
拖拽释放(Drag and drop) API
语义化更好的内容标签(header,nav,footer,aside,article,section)
音频、视频API(audio,video)
画布(Canvas) API
地理(Geolocation) API
本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
sessionStorage 的数据在浏览器关闭后自动删除
表单控件,calendar、date、time、email、url、search
新的技术webworker, websocket, Geolocation
移除的元素:
纯表现的元素:basefont,big,center,font, s,strike,tt,u;
对可用性产生负面影响的元素:frame,frameset,noframes;
支持HTML5新标签:
IE8/IE7/IE6支持通过 document.createElement 方法产生的标签,可以利用这一特性让这些浏览器支持 HTML5 新标签,浏览器支持新标签后,还需要添加标签默认的样式(当然最好的方式是直接使用成熟的框架、使用最多的是html5shiv框架):
如何区分:
DOCTYPE声明新增的结构元素、功能元素
8. HTML5 存储类型有什么区别?
HTML5 能够本地存储数据,在之前都是使用 cookies 使用的。HTML5 提供了下面两种本地存储方案:
localStorage - 没有时间限制的数据存储,数据永远不会过期,关闭浏览器也不会丢失
sessionStorage - 针对一个 session 的数据存储,同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。
9. HTML5 标准提供了哪些新的API?
1:canvas,不用多说,可以画出很多绚丽的图形,甚至可以直接做出伪3D游戏。
2:媒体控制,也很好理解(直译就是回放功能,假如只用html5.0以下的标签写,以前的音乐播放是不可能实现滚动条的。)
3:离线网页程序,可以把资源文件完全缓存在客户端,并且通过js的一些方法清空缓存
4:文档编辑,应该是更好的支持对文档的编辑。
5:拖动,可以将文件拖动到某些区域上传
6:跨文档请求,websocket,一种更加高效的通讯方式
7:历史管理,可以通过js管理和插入历史记录
8:MIME头自定义
9:客户端数据存储,localstoage sessionstoage
10:地理位置共享
11:本地数据库
12:索引数据库
10.HTML5 应用程序缓存和浏览器缓存有什么区别?
HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问。
应用程序缓存为应用带来三个优势:
离线浏览 - 用户可在应用离线时使用它们
速度 - 已缓存资源加载得更快
减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源。
11.常用那几种浏览器测试?有哪些内核(Layout Engine)?
(Q1)浏览器:IE,Chrome,FireFox,Safari,Opera。
(Q2)内核:Trident,Gecko,Presto,Webkit。
12.请描述一下 cookies,sessionStorage 和 localStorage 的区别?
cookie在浏览器和服务器间来回传递。 sessionStorage和localStorage不会
sessionStorage和localStorage的存储空间更大;
sessionStorage和localStorage有更多丰富易用的接口;
sessionStorage和localStorage各自独立的存储空间;
13.如何实现浏览器内多个标签页之间的通信?
调用localstorge、cookies等本地存储方式
14.请写出localStorage对象的常用方法。
存储 - localStorage.setItem(key, value) - 如果key存在,更新value
获取 - localStorage.getItem(key) - 如果key不存在,返回null
删除 - localStorage.removeItem(key) - 删除key对应的数据
全部清除 - localStorage.clear() - 清空localStorage中所有数据
遍历 - localStorage.length
遍历 - localStorage.key(index)
15.如何在HTML5中启用应用程序缓存?
<html manifest="fileName.appcache">
每个指定了manifest的页面在用户对其访问时都会被缓存。
.appcache是manifest文件的扩展名
16.html5 离线存储
Html5的一个重要特性就是离线存储,所谓的离线存储就是将一些资源文件保存在本地,这样后续的页面重新加载将使用本地资源文件,在离线情况下可以继续访问web应用,同时通过一定的手法(更新相关文件或者使用相关API),可以更新、删除离线存储等操作。
Html5的离线存储使用一个manifest文件来标明哪些文件是需要被存储的,使用如 <html manifest='offline.manifest'> 来引入一个manifest文件,这个文件的路径可以是相对的,也可以是绝对的,如果你的web应用很多,而且希望能集中管理manifest文件,那么静态文件服务器是个不错的选择。
17.HTML5 Canvas 元素有什么用?
Canvas 元素用于在网页上绘制图形,该元素标签强大之处在于可以直接在 HTML 上进行图形操作
‘伍’ 前端实习面试网上刷题有用吗 知乎
作为一个面试官,实话实说,刷面试题可以提高你对企业关注的技术领域的熟悉度(也就是说可以知道企业需要哪方面技能,这个是对你学习某方面技能是有帮助的),但不会完全确定你是否可以被录取(题目背后往往是一个知识体系,而不是一个知识点。)
‘陆’ 前端vue面试题分享(附答案)
本篇文章给大家分享一些常见的前端vue面试题,有一定的参考价值,希望对大家有所帮助。
如下,判断to.path当前将要进入的路径是否为登录或注册,如果是就执行next(),展示当前界面。如果不是,就弹出alert,然后移至登录界面。
这样就可实现,用户在未登录状态下,展示的一直是登录界面。
持续更新中......
‘柒’ 前端面试被问实习期间写了几个页面
你好,我觉得这个问题很正常的,主要是面试官想要了解你的专业能力,写页面的话,要看一下让你写的页面只是一些简单的排版,是因为他完不成需求让你来做,还是考验你,对于面试,我觉得我们可以不要让自己那么胆怯吧(不知道用什么词形容就用这个了吧)毕竟面试是双方的选择,对于这种有疑问的就可以问一下。
希望可以帮到你。
‘捌’ 前端常见面试题-hr
因为前端是用户最直观能接触和交互的地方,所有 “用户体验”最重要。
早期学习都是有点野路子,遇到问题解决问题,
后面发现有很多问题没有系统的学习 很难分析出具体的问题,
然后会开始看一下比较基本和底层一点的书或者视频,包括一些api。
有了系统的知识后,就可以去研究相关一些大神的源码,当然也借鉴了很多人的学习心的再去慢慢消化。
如果单纯看和听 其实我觉得只能吸收10%左右。
我一般会把学习的内容和工作上解决了比较难的问题都通过 掘金或者的方式记录下来。这样我觉可以消化40%的内容。
最后最好的学习方法,当然是给别人说一遍,这也是我们前端组为什么每个月做技术分享的原因。
这样我觉得可以最整个知识跟深刻的思考和别人互动互相检验学习的质量。
首先我确实挺感谢我现在公司,因为我之前去过外包公司,我深刻的感受到企业文化对公司的重要性。倡导以员工的成长为主,
公司会定期给我们请外面的老师做管理干部的培训,有管理的有经验的。确实让我学习了很多成长了很多。
不过由于我们是传统服装制造业,对于技术的迭代和要求没那么高,我在这里也工作了6年多,我自身也感觉有点 开始进入舒适区的感觉,
我想在新的环境,跟更多行业优秀的人才一起学习,让自己做一个T字型人才,把纵向的技术能力扎深扎稳。
应该就是capp项目,由于公司战略要求,要在3个月内完成原来capp工时工序客户端系统到web的切换,两个前端,两个后端,由于周期短,要在短时间交付项目成果,确实是一个很难解决的大难题。
(1)首先我觉得沟通很重要,在需求方面,我和后端组长积极与产品沟通,分析系统各个模块的使用场景和优先级。把最关键的核心模块提取出来,优先开发,并与领导协商后面再继续迭代其他基础功能。 每个功能都讨论仔细避免交付时才返工。
(2)在框架上,一个稳定的容用的框架是高效迭代开发所必须的,所以作为框架的搭建就刻不容缓,我和后端负责人也是沟通分析赶工,不断打磨一个稳定有效的框架。制定了很多约定与规范。
(3)在时间上,打包比较花时间,为了解放不必要的投入,我引进入CI/CD工具,大量的节省了前端后端的部署时间。把精力都花在刀刃上。
(4)团队的氛围, 毕竟还有很多功能要开发,加班是再所难免。
其实我觉得人加班为什么会累,一/般是一个人在奋战,会感到孤独和无助。所以我们采取在关键节点交付前集体加班的方式,由于大家都在,即保证了开发过程的效率,也可以避免007的噩梦。
(5)仪式感与明确的目标,跟上级申请项目立项,让公司发起启动会,让每一个参与开发同事有仪式感,意识自己参与项目的重要性与意义。并申请项目奖金,在每个阶段性节点按时交付,我们都给予员工及时的奖励和认可,由于有了明确的目标和方向。
整体项目最终以2个半月交付核心业务功能,4个月后完成整个系统所有功能交付,并顺利上线。
我们喜欢的运动是羽毛球,平时喜欢用碎片化的时间 听得到的一些可能,有it类的有经济学类的,可以扩充自身的视野。
还是在掘金写写博客。
‘玖’ 史上最全前端vue面试题!推荐收藏
1.为什么会形成跨域?
不是一个源的文件操作另一个源的文件就会形成跨域。当请求端的协议、域名、端口号和服务器的协议、域名、端口号有一个不一致就会发生跨域。
解决方法:安装插件
Pip install django-cors-headers
2.vuex的工作流程?
① 在vue组件里面,通过dispatch来出发actions提交修改数据的操作。
② 然后再通过actions的commit来出发mutations来修改数据。
③ mutations接收到commit的请求,就会自动通过Mutate来修改state(数据中心里面的数据状态)里面的数据。
④ 最后由store触发每一个调用它的组件更新。
3.vuex是什么?怎么使用?
vuex是一个专为vue.js应用程序开发的状态管理模式。使用:store,getters,mutations,actions,moles详细使用写法请见:https://blog.csdn.net/qq_33226029/article/details/109628600?spm=1001.2014.3001.5502
4.vuex中的数据在页面刷新后数据消失怎么解决?
使用sessionStorage或localStorage存储数据;也可以引入vuex-persist插件
5.在vue中,如何阻止事件冒泡和默认行为?
在绑定事件时,在指令后边加上修饰符.stop来阻止冒泡,.prevent来阻止默认行为
6.深拷贝与浅拷贝?
假设B复制A,修改A的时候,看B是否变化:B变了是浅拷贝(修改堆内存中的同一个值),没变是深拷贝(修改堆内存中不同的值)。浅拷贝只是增加了一个指针指向已存在的内存地址,深拷贝是增加了一个指针并申请了一个新的内存,使这个增加的指针指向这个新的内存。深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。
7.vue的生命周期?
beforeCreate created beforeMount mounted beforeUpdate updated beforeDestroy destroyedactived deactived (keep-alive)组件是否激活调用
8. keep-alive: 组件缓存
https://juejin.cn/post/6844903624099758094
router.js中:
meta: {keepAlive:true} // 需要被缓存
钩子执行顺序:created -> mounted -> actived
include表示需要缓存的页面;exclude表示不需要缓存的页面。如果两个同时设置,exclude优先级更 改,则组件不会被缓存。
应用场景: 用户在某个列表页面选择筛选条件过滤出一份数据列表,由列表页面进入数据详情页面,再返回 该列表页,我们希望列表页可以保留用户的筛选状态。
9.vue传值方式?
props $emit() $on() $parent $children $listener $attr
10. $on 兄弟组件传值
$emit 分发
$on 监听
$off 取消监听
$once 一次性监听一个事件
在js文件中定义一个中央事件总线Bus,并暴露出来
具体的实现方式:
使用Bus的时候在接收Bus的组件的beforeDestroy函数中销毁Bus,否则会一直叠加调用这个方法。
应用场景:“退出登录” -> ①点击退出登录;②修改密码后自动退出登录
11.组件跨级传值
$attrs a->b->c
$listeners 监听
12.vue事件修饰符有哪些?
.stop .prevent .self .once .passive .sync
13.箭头函数中的this?
不具有this绑定,但函数体可以使用this,这个this指向的是箭头函数当前所处的词法环境中的this对象。
15.为什么vue组件中data必须是一个函数?
如果不是函数的话,每个组件的data都是内存的同一个地址,一个数据改变了其他也改变了,当他是一个函数时,每个组件实例都有自己的作用域,每个实例相互独立,就不会互相影响。
16.v-if 和 v-show区别?
v-if 是对标签的创建与销毁, v-show 则仅在初始化时加载一次,v-if 开销相对来说比v-show 大;
v-if 是惰性的;v-show 做的仅是简单的css切换。
17.v-text 与 v-html区别?
v-text 用于普通文本,不能解析html;
v-html 反之。
18.v-for key的作用?
使用v-for更新渲染过的数据,它默认用“就地复用”策略。如果数据项的顺序改变,vue将不是移动DOM元素来匹配数据项的改变,而是简单地复用此处每个元素,并确保在特定索引下显示已被渲染过的每个元素。key属性类型只能是string或number。
key的特殊属性主要用在虚拟DOM算法,在新旧node对比时辨识VNods。如不使用key,vue会使用一种最大限度减少动态元素并且尽可能的尝试修复/再利用相同类型元素的算法,它会基于key的变化重新排列元素顺序。
19.Scss是什么?在vue-cli中安装步骤?有哪几大特性?
npm 下载loader (sass-loader,css-loader,node-sass),在webpack中配置extends属性(加.scss拓展) Vscode中可在扩展中下载;
特性:可以用变量,可以用混合器,可以嵌套等。
20.vue获取dom?
ref
21.vue初始化页面闪动问题?
webpack、vue-router
v-cloak css:[v-cloak]:display:none
22.什么是vue-router?
vue router 是官方路由管理器。
主要功能:路由嵌套,模块化 基于组件路由配置,路由参数、查询、通配符,细粒度导航控制,自定义的滚动条行为等。
23.vue路由传参,接收?
传: this.$router.push({path:'', query(params):{}})
接:this.$router.query.xxx
24.防抖和节流?
节流是一定时间内执行一次函数,多用在scroll事件上;
防抖是在一定时间内执行最后一次的函数,多用在input输入操作,表单提交等。
25.如何让scss只在当前组件中起作用?
‘拾’ 前端经典面试题(包含JS、CSS、React、浏览器等)
防抖
节流
误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。
实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是来源与浏览器或web服务器,浏览器或web服务器限制了url的长度。为了明确这个概念,我们必须再次强调下面几点:
补充补充一个get和post在缓存方面的区别:
可从IIFE、AMD、CMD、CommonJS、UMD、webpack(require.ensure)、ES Mole、
vue和react都是采用diff算法来对比新旧虚拟节点,从而更新节点。在vue的diff函数中(建议先了解一下diff算法过程)。在交叉对比中,当新节点跟旧节点 头尾交叉对比 没有结果时,会根据新节点的key去对比旧节点数组中的key,从而找到相应旧节点(这里对应的是一个key => index 的map映射)。如果没找到就认为是一个新增节点。而如果没有key,那么就会采用遍历查找的方式去找到对应的旧节点。一种一个map映射,另一种是遍历查找。相比而言。map映射的速度更快。vue部分源码如下:
创建map函数
遍历寻找
在React中, 如果是由React引发的事件处理(比如通过onClick引发的事件处理),调用setState不会同步更新this.state,除此之外的setState调用会同步执行this.state 。所谓“除此之外”,指的是绕过React通过addEventListener直接添加的事件处理函数,还有通过setTimeout/setInterval产生的异步调用。
**原因:**在React的setState函数实现中,会根据一个变量isBatchingUpdates判断是直接更新this.state还是放到队列中回头再说,而isBatchingUpdates默认是false,也就表示setState会同步更新this.state,但是, 有一个函数batchedUpdates,这个函数会把isBatchingUpdates修改为true,而当React在调用事件处理函数之前就会调用这个batchedUpdates,造成的后果,就是由React控制的事件处理过程setState不会同步更新this.state 。
虚拟dom相当于在js和真实dom中间加了一个缓存,利用dom diff算法避免了没有必要的dom操作,从而提高性能。
具体实现步骤如下:
用 JavaScript 对象结构表示 DOM 树的结构;然后用这个树构建一个真正的 DOM 树,插到文档当中
当状态变更的时候,重新构造一棵新的对象树。然后用新的树和旧的树进行比较,记录两棵树差异
把2所记录的差异应用到步骤1所构建的真正的DOM树上,视图就更新了。
结构:display:none: 会让元素完全从渲染树中消失,渲染的时候不占据任何空间, 不能点击, visibility: hidden:不会让元素从渲染树消失,渲染元素继续占据空间,只是内容不可见,不能点击 opacity: 0: 不会让元素从渲染树消失,渲染元素继续占据空间,只是内容不可见,可以点击
继承:display: none:是非继承属性,子孙节点消失由于元素从渲染树消失造成,通过修改子孙节点属性无法显示。visibility: hidden:是继承属性,子孙节点消失由于继承了hidden,通过设置visibility: visible;可以让子孙节点显式。
性能:displaynone : 修改元素会造成文档回流,读屏器不会读取display: none元素内容,性能消耗较大 visibility:hidden: 修改元素只会造成本元素的重绘,性能消耗较少读屏器读取visibility: hidden元素内容 opacity: 0 :修改元素会造成重绘,性能消耗较少
联系:它们都能让元素不可见
常用的一般为三种 .clearfix , clear:both , overflow:hidden ;
比较好是 .clearfix ,伪元素万金油版本,后两者有局限性.
clear:both :若是用在同一个容器内相邻元素上,那是贼好的,有时候在容器外就有些问题了, 比如相邻容器的包裹层元素塌陷
overflow:hidden :这种若是用在同个容器内,可以形成 BFC 避免浮动造成的元素塌陷
概念:将多个小图片拼接到一个图片中。通过 background-position 和元素尺寸调节需要显示的背景图案。
优点:
缺点:
block 元素特点:
1.处于常规流中时,如果 width 没有设置,会自动填充满父容器 2.可以应用 margin/padding 3.在没有设置高度的情况下会扩展高度以包含常规流中的子元素 4.处于常规流中时布局时在前后元素位置之间(独占一个水平空间) 5.忽略 vertical-align
inline 元素特点
1.水平方向上根据 direction 依次布局
2.不会在元素前后进行换行
3.受 white-space 控制
4. margin/padding 在竖直方向上无效,水平方向上有效
5. width/height 属性对非替换行内元素无效,宽度由元素内容决定
6.非替换行内元素的行框高由 line-height 确定,替换行内元素的行框高由 height , margin , padding , border 决定 7.浮动或绝对定位时会转换为 block 8. vertical-align 属性生效
GIF :
JPEG :
PNG :
七种数据类型
(ES6之前)其中5种为基本类型: string , number , boolean , null , undefined ,
ES6出来的 Symbol 也是原始数据类型 ,表示独一无二的值
Object 为引用类型(范围挺大),也包括数组、函数,
输出结果是:
工厂模式
简单的工厂模式可以理解为解决多个相似的问题;
单例模式
只能被实例化(构造函数给实例添加属性与方法)一次
沙箱模式
将一些函数放到自执行函数里面,但要用闭包暴露接口,用变量接收暴露的接口,再调用里面的值,否则无法使用里面的值
发布者订阅模式
就例如如我们关注了某一个公众号,然后他对应的有新的消息就会给你推送,
代码实现逻辑是用数组存贮订阅者, 发布者回调函数里面通知的方式是遍历订阅者数组,并将发布者内容传入订阅者数组
1.字面量
2.Object构造函数创建
3.使用工厂模式创建对象
4.使用构造函数创建对象
HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件onclick、页面的滚动事件onscroll等等,可以向文档或者文档中的元素添加事件侦听器来预订事件。想要知道这些事件是在什么时候进行调用的,就需要了解一下“事件流”的概念。
什么是事件流:事件流描述的是从页面中接收事件的顺序,DOM2级事件流包括下面几个阶段。
addEventListener : addEventListener 是DOM2 级事件新增的指定事件处理程序的操作,这个方法接收3个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。最后这个布尔值参数如果是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。
IE只支持事件冒泡 。
获取一个对象的原型,在chrome中可以通过__proto__的形式,或者在ES6中可以通过Object.getPrototypeOf的形式。
那么Function.proto是什么么?也就是说Function由什么对象继承而来,我们来做如下判别。
我们发现Function的原型也是Function。
我们用图可以来明确这个关系:
这里来举个栗子,以 Object 为例,我们常用的 Object 便是一个构造函数,因此我们可以通过它构建实例。
则此时, 实例为instance , 构造函数为Object ,我们知道,构造函数拥有一个 prototype 的属性指向原型,因此原型为:
这里我们可以来看出三者的关系:
在 JS 中,继承通常指的便是 原型链继承 ,也就是通过指定原型,并可以通过原型链继承原型上的属性或者方法。
在函数式编程中,函数是一等公民。那么函数柯里化是怎样的呢?
函数柯里化指的是将能够接收多个参数的函数转化为接收单一参数的函数,并且返回接收余下参数且返回结果的新函数的技术。
函数柯里化的主要作用和特点就是参数复用、提前返回和延迟执行。
在一个函数中,首先填充几个参数,然后再返回一个新的函数的技术,称为函数的柯里化。通常可用于在不侵入函数的前提下,为函数 预置通用参数 ,供多次重复调用。
call 和 apply 都是为了解决改变 this 的指向。作用都是相同的,只是传参的方式不同。
除了第一个参数外, call 可以接收一个参数列表, apply 只接受一个参数数组。
bind 和其他两个方法作用也是一致的,只是该方法会返回一个函数。并且我们可以通过 bind 实现柯里化。
如何实现一个 bind 函数
对于实现以下几个函数,可以从几个方面思考
如何实现一个call函数
如何实现一个apply函数
箭头函数其实是没有 this 的,这个函数中的 this 只取决于他外面的第一个不是箭头函数的函数的 this 。在这个例子中,因为调用 a 符合前面代码中的第一个情况,所以 this 是 window 。并且 this 一旦绑定了上下文,就不会被任何代码改变。
在函数中,我们首先使用 var 关键字声明了 name 变量。这意味着变量在创建阶段会被提升( JavaScript 会在创建变量创建阶段为其分配内存空间),默认值为 undefined ,直到我们实际执行到使用该变量的行。我们还没有为 name 变量赋值,所以它仍然保持 undefined 的值。
使用 let 关键字(和 const )声明的变量也会存在变量提升,但与 var 不同,初始化没有被提升。在我们声明(初始化)它们之前,它们是不可访问的。这被称为“暂时死区”。当我们在声明变量之前尝试访问变量时, JavaScript 会抛出一个 ReferenceError 。
关于 let 的是否存在变量提升,我们何以用下面的例子来验证:
let 变量如果不存在变量提升, console.log(name) 就会输出 ConardLi ,结果却抛出了 ReferenceError ,那么这很好的说明了, let 也存在变量提升,但是它存在一个“暂时死区”,在变量未初始化或赋值前不允许访问。
变量的赋值可以分为三个阶段:
关于 let 、 var 和 function :
依次输出:undefined -> 10 -> 20
答案: D
colorChange 方法是静态的。静态方法仅在创建它们的构造函数中存在,并且不能传递给任何子级。由于 freddie 是一个子级对象,函数不会传递,所以在 freddie 实例上不存在 freddie 方法:抛出 TypeError 。
1.使用第一次push,obj对象的push方法设置 obj[2]=1;obj.length+=1 2.使用第二次push,obj对象的push方法设置 obj[3]=2;obj.length+=1 3.使用console.log输出的时候,因为obj具有 length 属性和 splice 方法,故将其作为数组进行打印 4.打印时因为数组未设置下标为 0 1 处的值,故打印为empty,主动 obj[0] 获取为 undefined
undefined {n:2}
首先,a和b同时引用了{n:2}对象,接着执行到a.x = a = {n:2}语句,尽管赋值是从右到左的没错,但是.的优先级比=要高,所以这里首先执行a.x,相当于为a(或者b)所指向的{n:1}对象新增了一个属性x,即此时对象将变为{n:1;x:undefined}。之后按正常情况,从右到左进行赋值,此时执行a ={n:2}的时候,a的引用改变,指向了新对象{n:2},而b依然指向的是旧对象。之后执行a.x = {n:2}的时候,并不会重新解析一遍a,而是沿用最初解析a.x时候的a,也即旧对象,故此时旧对象的x的值为{n:2},旧对象为 {n:1;x:{n:2}},它被b引用着。后面输出a.x的时候,又要解析a了,此时的a是指向新对象的a,而这个新对象是没有x属性的,故访问时输出undefined;而访问b.x的时候,将输出旧对象的x的值,即{n:2}。
在比较相等性,原始类型通过它们的值进行比较,而对象通过它们的引用进行比较。 JavaScript 检查对象是否具有对内存中相同位置的引用。
我们作为参数传递的对象和我们用于检查相等性的对象在内存中位于不同位置,所以它们的引用是不同的。
这就是为什么 { age: 18 } === { age: 18 } 和 { age: 18 } == { age: 18 } 返回 false 的原因。
所有对象键(不包括 Symbols )都会被存储为字符串,即使你没有给定字符串类型的键。这就是为什么 obj.hasOwnProperty(Ƈ') 也返回 true 。
上面的说法不适用于 Set 。在我们的 Set 中没有 “1” : set.has(Ƈ') 返回 false 。它有数字类型 1 , set.has(1) 返回 true 。
这题考察的是对象的键名的转换。
catch 块接收参数 x 。当我们传递参数时,这与变量的 x 不同。这个变量 x 是属于 catch 作用域的。
之后,我们将这个块级作用域的变量设置为 1 ,并设置变量 y 的值。现在,我们打印块级作用域的变量 x ,它等于 1 。
在 catch 块之外, x 仍然是 undefined ,而 y 是 2 。当我们想在 catch 块之外的 console.log(x) 时,它返回 undefined ,而 y 返回 2 。