在当今的数字化时代,前端工程师扮演着至关重要的角色。他们负责设计和开发用户界面,使得用户能够与应用程序或网站进行互动。为了找到最出色的前端工程师,你需要了解哪些技能和知识是必备的,同时也要掌握一些面试技巧和常见的面试题。
一、前端工程师必备知识技能
1.HTML与CSS
HTML和CSS是前端工程师的基础技能。HTML(超文本标记语言)用于创建网页的结构,而CSS(层叠样式表)则用于定义网页的样式。对于一个前端工程师来说,他们需要理解HTML标记和CSS属性的工作原理,能够使用最新的版本进行高效的编码。
2.JavaScript
JavaScript是现代前端开发中最重要的语言之一。它用于实现网页上的交互行为,例如动态内容、表单验证、动画效果等。前端工程师需要熟练掌握JavaScript的基础知识,包括语法、DOM操作、事件处理等,并且了解最新的ES6+规范。
3.响应式设计
随着移动设备的普及,响应式设计已成为前端开发的重要部分。前端工程师需要理解响应式设计的基本原理,并能够使用相应的工具和技术,如媒体查询、弹性布局、流式布局等,来实现响应式设计。
4.前端框架和库
现代前端开发中,前端框架和库的应用已经成为常态。前端工程师需要熟悉一些主流的前端框架和库,如React、Vue、Angular等。他们需要理解这些框架和库的基本概念和工作原理,包括组件化开发、状态管理、虚拟DOM等。
5.版本控制
版本控制是现代软件开发中的重要工具,前端工程师需要熟悉如何使用版本控制工具,如Git。他们需要理解Git的基本原理和使用命令,能够进行代码合并、解决冲突等操作。
二、前端工程师面试技巧
1.准备充分
在面试前,充分准备是必不可少的。除了熟悉前端工程师必备的知识技能外,你还需要了解公司的业务和产品。了解公司的需求可以帮助你更好地展示自己的技能和经验,同时也能表现出你对这个职位的热情。
2.展示实操能力
面试不仅仅是一场理论考试,更是展示你实操能力的机会。你可以通过展示过去的项目经验、代码样本或者现场进行编码来展示自己的实际能力。这样可以让面试官更好地了解你的技能水平和实践能力。
3.深入理解问题
在回答面试问题时,不要仅仅给出简单的答案。要深入理解问题背后的原理和逻辑。例如,当被问及如何实现响应式设计时,你可以详细解释不同的实现方法,并给出自己的优缺点分析。这样能表现出你的深度思考能力和对问题的理解。
4.良好沟通能力
前端工程师除了技术能力外,良好的沟通能力同样重要。在面试中,你需要清晰地表达自己的想法和观点,同时也要积极倾听和理解面试官的问题和要求。一个具备良好的沟通能力的前端工程师,能够更好地与团队协作,解决技术问题。
三、面试必考题目
1.请描述一下你对响应式设计的理解。
答:响应式设计是一种根据设备屏幕大小和分辨率来调整网页布局的设计方法。它主要通过使用CSS媒体查询来检测设备屏幕的大小,从而应用不同的样式规则。另外,响应式设计还需要考虑流动布局、弹性布局和图片自适应等问题,以确保网页在各种设备上都能正常显示。
2.请介绍一下你最近完成的一个项目,并描述一下你在该项目中扮演的角色和遇到的挑战。
答:我参与了一个电商平台的项目开发。我在项目中主要负责前端开发工作,包括UI设计、交互实现和性能优化等。其中一个遇到的挑战是如何实现动态加载产品数据的功能。我使用了React的状态管理和异步渲染技术,成功解决了这个问题,使页面能够根据用户操作动态加载数据,提高了页面的加载速度和用户体验。
3.请解释一下什么是组件化开发,并描述一下你在组件化开发中的实践经验。
答:组件化开发是一种将页面拆分为独立的可复用组件的设计方法。在前端开发中,组件化开发可以使代码更加模块化、易于维护和复用。我在实践中,通常会将页面划分为多个组件,然后为每个组件编写独立的CSS和JavaScript代码。这样可以使代码结构更加清晰,方便后期维护和扩展功能。
4.请解释一下什么是版本控制以及版本控制工具Git的使用场景和原理。
答:版本控制是一种追踪和管理文件变更的工具,它可以用于代码管理、文档版本控制等场景。Git是当前最流行的版本控制工具之一,它采用的是分布式版本控制方式,每个开发者都拥有一个完整的代码库,可以在本地进行代码的修改和提交。Git的主要使用场景包括团队协作开发、代码备份恢复、分支合并等场景。通过使用Git,可以更高效地管理代码版本和协作开发,减少代码冲突和错误的风险。
5.请描述一下你对性能优化的理解,并分享一下你常用的性能优化方法。
答:性能优化是前端开发中非常重要的一环,它可以提高网页的加载速度和 响应速度,提升用户体验。我常用的性能优化方法包括以下几点:1.代码压缩和合并:将多个JavaScript文件合并成一个文件,压缩CSS和JavaScript代码,减少文件大小和下载时间。2.图片压缩和优化:使用压缩工具对图片进行压缩和优化,降低图片大小和加载时间。3.使用CDN加速:使用内容分发网络(CDN)将静态资源缓存到各地的服务器上,加速用户下载速度。4.缓存优化:合理使用浏览器缓存,将静态资源缓存到用户的浏览器上,减少每次下载的时间。5.代码分析:通过使用性能分析工具,找出代码中的性能瓶颈,并进行优化。例如,通过使用虚拟滚动、懒加载等技术来提高网页的性能。通过这些方法,我可以有效地提高网页的加载速度和响应速度,提升用户体验。
6.请解释一下JavaScript中的闭包是什么以及它的应用场景。
答:闭包是指一个函数与其所引用的变量集合之间的绑定关系。它允许一个函数在执行时访问并使用其外部函数中定义的变量,即使外部函数已经返回。在JavaScript中,每个函数都可以产生一个闭包,闭包可以用来实现一些特定的功能,例如模块化、私有变量和回调函数等。应用场景举例:模块化:通过闭包定义一个私有的变量或函数,避免全局变量污染,同时可以对外暴露一些接口来实现模块化。私有变量:通过闭包定义一个私有的变量或函数,在外部无法直接访问,只能通过闭包中的公共接口来访问。回调函数:通过闭包将外部的变量传递给内部的函数,使得内部的函数可以访问并修改外部的变量。总之,闭包是一种强大的功能,它可以实现许多常见的编程需求,同时也可以提高代码的可维护性和可复用性。在面试前端工程师时,面试官通常会通过考察候选人的知识技能、实操能力以及解决问题的能力来判断其是否符合公司的要求。通过深入理解问题、良好协作开发,减少代码冲突和错误的风险。
7.请描述一下你对性能优化的理解,并分享一下你常用的性能优化方法。
答:性能优化是前端开发中非常重要的一环,它可以提高网页的加载速度和响应速度,提升用户体验。我常用的性能优化方法包括以下几点:1.代码压缩和合并:将多个JavaScript文件合并成一个文件,压缩CSS和JavaScript代码,减少文件大小和下载时间。2.图片压缩和优化:使用压缩工具对图片进行压缩和优化,降低图片大小和加载时间。3.使用CDN加速:使用内容分发网络(CDN)将静态资源缓存到各地的服务器上,加速用户下载速度。4.缓存优化:合理使用浏览器缓存,将静态资源缓存到用户的浏览器上,减少每次下载的时间。5.代码分析:通过使用性能分析工具,找出代码中的性能瓶颈,并进行优化。例如,通过使用虚拟滚动、懒加载等技术来提高网页的性能。通过这些方法,我可以有效地提高网页的加载速度和响应速度,提升用户体验。
8.请解释一下JavaScript中的闭包是什么以及它的应用场景。
答:闭包是指一个函数与其所引用的变量集合之间的绑定关系。它允许一个函数在执行时访问并使用其外部函数中定义的变量,即使外部函数已经返回。在JavaScript中,每个函数都可以产生一个闭包,闭包可以用来实现一些特定的功能,例如模块化、私有变量和回调函数等。应用场景举例:模块化:通过闭包定义一个私有的变量或函数,避免全局变量污染,同时可以对外暴露一些接口来实现模块化。私有变量:通过闭包定义一个私有的变量或函数,在外部无法直接访问,只能通过闭包中的公共接口来访问。回调函数:通过闭包将外部的变量传递给内部的函数,使得内部的函数可以访问并修改外部的变量。总之,闭包是一种强大的功能,它可以实现许多常见的编程需求,同时也可以提高代码的可维护性和可复用性。在面试前端工程师时,面试官通常会通过考察候选人的知识技能、实操能力以及解决问题的能力来判断其是否符合公司的要求。通过深入理解问题、良好的沟通能力、实际项目经验和解决问题的能力,你可以更好地展示自己的专业素养和综合能力,从而在面试中脱颖而出。
四、面试中的注意事项
1.态度积极:在面试中要保持积极的态度,展示出你对工作的热情和渴望。回答问题时要积极思考,给出具体的解决方案和思路,不要过于笼统或简单地回答问题。
2.自信表达:在面试中要保持自信,清晰地表达自己的想法和观点。对于不确定的问题,可以提出自己的猜测和推断,但要避免过于夸张或虚假的表述。
3.展示自己的优势:在面试中要展示自己的优势和特长,例如技术能力、项目经验、沟通能力等。可以通过具体的案例和数据来证明自己的价值,让面试官对你的能力有更深刻的认识。
4.谦虚诚恳:在面试中要保持谦虚诚恳的态度,尊重面试官的意见和决策。对于自己的不足之处,要诚实地承认,并表达出自己愿意学习和改进的态度。
5.提前准备:在面试前要提前了解公司的背景、业务和产品,了解该公司对前端工程师的要求和期望。可以根据这些信息来准备自己的简历和面试材料,更好地展示自己的优势。
五、总结
前端工程师是数字化时代的核心角色之一,他们在网页设计、交互实现、性能优化等方面发挥着重要的作用。在面试前端工程师时,需要考察其知识技能、实操能力、解决问题能力以及沟通能力等多方面的素质。通过充分的准备、深入理解问题和良好的沟通表达,你可以更好地展示自己的能力和潜力,从而在面试中获得成功。
本文分享自华为云社区《
【云驻共创】想面试前端工程师,必须掌握哪些知识和技能?-云社区-华为云
》,作者: 可以交个朋友。
点击下方,第一时间了解华为云新鲜技术~
华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云
大写的懵
我表示不懂。
HTML面试题
1.XHTML和HTML有什么区别
- HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言最主要的不同:
- XHTML 元素必须被正确地嵌套。
- XHTML 元素必须被关闭。
- 标签名必须用小写字母。
- XHTML 文档必须拥有根元素。
2.前端页面有哪三层构成,分别是什么?作用是什么?
- 结构层 Html 表示层 CSS 行为层 js;3.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?
- Ie(Ie内核) 火狐(Gecko) 谷歌(webkit,Blink) opera(Presto),Safari(wbkit)
4.什么是语义化的HTML?
- 直观的认识标签 对于搜索引擎的抓取有好处,用正确的标签做正确的事情!
- html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;在没有样式CCS情况下也以一种文档格式显示,并且是容易阅读的。搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重,利于 SEO。
- 使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
5.HTML5 为什么只需要写 !DOCTYPE HTML?
- HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行);而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。
6.Doctype作用?标准模式与兼容模式各有什么区别?
- !DOCTYPE声明位于位于HTML文档中的第一行,处于html 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。
- 标准模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。
7.html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和HTML5?
- HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
- 绘画 canvas
- 用于媒介回放的 video 和 audio 元素
- 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
- sessionStorage 的数据在浏览器关闭后自动删除
- 语意化更好的内容元素,比如 div、footer、header、nav、section
- 表单控件,calendar、date、time、email、url、search
- 新的技术webworker, websockt, Geolocation移除的元素
- 纯表现的元素:basefont,big,center,font, s,strike,tt,u;
- 对可用性产生负面影响的元素:frame,frameset,noframes;支持HTML5新标签:
- IE8/IE7/IE6支持通过document.createElement方法产生的标签,
- 可以利用这一特性让这些浏览器支持HTML5新标签,
- 浏览器支持新标签后,还需要添加标签默认的样式:
8.请描述一下 cookies,sessionStorage 和 localStorage 的区别?
- cookie在浏览器和服务器间来回传递。 sessionStorage和localStorage不会
- sessionStorage和localStorage的存储空间更大;
- sessionStorage和localStorage有更多丰富易用的接口;
- sessionStorage和localStorage各自独立的存储空间;
9.如何实现浏览器内多个标签页之间的通信?
- 调用localstorge、cookies等本地存储方式
CSS面试题
1.简要说一下CSS的元素分类
- 块级元素:div,p,h1,form,ul,li;
- 行内元素 : span>,a,label,input,img,strong,em;
2.CSS隐藏元素的几种方法(至少说出三种)
- Opacity:元素本身依然占据它自己的位置并对网页的布局起作用。它也将响应用户交互;
- Visibility:与 opacity 唯一不同的是它不会响应任何用户交互。此外,元素在读屏软件中也会被隐藏;
- Display:display 设为 none 任何对该元素直接打用户交互操作都不可能生效。此外,读屏软件也不会读到元素的内容。这种方式产生的效果就像元素完全不存在;
- Position:不会影响布局,能让元素保持可以操作;
- Clip-path:clip-path 属性还没有在 IE 或者 Edge 下被完全支持。如果要在你的 clip-path 中使用外部的 SVG 文件,浏览器支持度还要低;
3.CSS清除浮动的几种方法(至少两种)
- 使用带clear属性的空元素
- 使用CSS的overflow属性;
- 使用CSS的:after伪元素;
- 使用邻接元素处理;
4.CSS居中(包括水平居中和垂直居中)
内联元素居中方案水平居中设置: 1.行内元素
- 设置 text-align:center;
2.Flex布局
- 设置display:flex;justify-content:center;(灵活运用,支持Chroime,Firefox,IE9+)
垂直居中设置: 1.父元素高度确定的单行文本(内联元素)
- 设置 height = line-height;
2.父元素高度确定的多行文本(内联元素)
- a:插入 table (插入方法和水平居中一样),然后设置 vertical-align:middle;
- b:先设置 display:table-cell 再设置 vertical-align:middle;块级元素居中方案
水平居中设置: 1.定宽块状元素
- 设置 左右 margin 值为 auto;
2.不定宽块状元素
- a:在元素外加入 table 标签(完整的,包括 table、tbody、tr、td),该元素写在 td 内,然后设置 margin 的值为 auto;
- b:给该元素设置 displa:inine 方法;
- c:父元素设置 position:relative 和 left:50%,子元素设置 position:relative 和 left:50%;
垂直居中设置:
- 使用position:absolute(fixed),设置left、top、margin-left、margin-top的属性;
- 利用position:fixed(absolute)属性,margin:auto这个必须不要忘记了;
- 利用display:table-cell属性使内容垂直居中;
- 使用css3的新属性transform:translate(x,y)属性;
- 使用:before元素;
5.写出几种IE6 BUG的解决方法
- 双边距BUG float引起的 使用display
- 3像素问题 使用float引起的 使用dislpay:inline -3px
- 超链接hover 点击后失效 使用正确的书写顺序 link visited hover active
- Ie z-index问题 给父级添加position:relative
- Png 透明 使用js代码 改
- Min-height 最小高度 !Important 解决’
- select 在ie6下遮盖 使用iframe嵌套
- 为什么没有办法定义1px左右的宽度容器(IE6默认的行高造成的,使用over:hidden,zoom:0.08 line-height:1px)
6.对于SASS或是Less的了解程度?喜欢那个?
- 语法介绍
7.Bootstrap了解程度
- 特点,排版,插件的使用;
8.页面导入样式时,使用link和@import有什么区别?
- link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;
- 页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
- import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题;
9.介绍一下CSS的盒子模型?
- 有两种, IE 盒子模型、标准 W3C 盒子模型;IE的content部分包含了 border 和 pading;
- 盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border).
10.CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3新增伪类有那些?
- id选择器( # myid)
- 类选择器(.myclassname)
- 标签选择器(div, h1, p)
- 相邻选择器(h1 + p)
- 子选择器(ul > li)
- 后代选择器(li a)
- 通配符选择器( * )
- 属性选择器(a[rel = “external”])
- 伪类选择器(a: hover, li: nth – child)
- 可继承的样式: font-size font-family color, UL LI DL DD DT;
- 不可继承的样式:border padding margin width height ;
- 优先级就近原则,同权重情况下样式定义最近者为准;
- 优先级为:
JavaScript12!important > id > class > tagimportant 比 内联优先级高
11.CSS3有哪些新特性?
- CSS3实现圆角(border-radius:8px),阴影(box-shadow:10px),对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform)
- transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋转,缩放,定位,倾斜增加了更多的CSS选择器 多背景 rgba
JavaScript面试题
1.javascript的typeof返回哪些数据类型
- Object number function boolean underfind;
2.例举3种强制类型转换和2种隐式类型转换?
- 强制(parseInt,parseFloat,number)隐式(== – ===);
3.数组方法pop() push() unshift() shift()
- Push()尾部添加 pop()尾部删除
- Unshift()头部添加 shift()头部删除
4.ajax请求的时候get 和post方式的区别?
- 一个在url后面 一个放在虚拟载体里面有大小限制
- 安全问题应用不同 一个是论坛等只需要请求的,一个是类似修改密码的;
5.call和apply的区别
- Object.call(this,obj1,obj2,obj3)
- Object.apply(this,arguments)
6.ajax请求时,如何解释json数据
- 使用eval parse,鉴于安全性考虑 使用parse更靠谱;
7.事件委托是什么
- 让利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!
8.闭包是什么,有什么特性,对页面有什么影响?简要介绍你理解的闭包
- 闭包就是能够读取其他函数内部变量的函数。
9.添加 删除 替换 插入到某个接点的方法
obj.appendChidl()obj.innersetBeforeobj.replaceChildobj.removeChild10.说一下什么是javascript的同源策略?
- 一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合
11.编写一个b继承a的方法;
12.如何阻止事件冒泡和默认事件
13.下面程序执行后弹出什么样的结果?
14.谈谈This对象的理解。
this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。但是有一个总原则,那就是this指的是调用函数的那个对象。this一般情况下:是全局对象Global。 作为方法调用,那么this就是指这个对象
15.下面程序的结果
//答案:
//a: undefined,0,0,0//b: undefined,0,1,2//c: undefined,0,1,1
16.下面程序的输出结果
17.了解Node么?Node的使用场景都有哪些?
- 高并发、聊天、实时消息推送
18.介绍下你最常用的一款框架
- jquery,rn,angular等;
19.对于前端自动化构建工具有了解吗?简单介绍一下
- Gulp,Grunt等;
20.介绍一下你了解的后端语言以及掌握程度
其它
1.对Node的优点和缺点提出了自己的看法?
(优点)因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求,因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。此外,与Node代理服务器交互的客户端代码是由javascript语言编写的,因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。(缺点)Node是一个相对新的开源项目,所以不太稳定,它总是一直在变,而且缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子。
2.你有哪些性能优化的方法?
(1) 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。(2)前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数(3) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。(4) 当需要设置的样式很多时设置className而不是直接操作style。(5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。(6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。(7) 图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。(8) 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示div+css布局慢。对普通的网站有一个统一的思路,就是尽量向前端优化、减少数据库操作、减少磁盘IO。向前端优化指的是,在不影响功能和体验的情况下,能在浏览器执行的不要在服务端执行,能在缓存服务器上直接返回的不要到应用服务器,程序能直接取得的结果不要到外部取得,本机内能取得的数据不要到远程取,内存能取到的不要到磁盘取,缓存中有的不要去数据库查询。减少数据库操作指减少更新次数、缓存结果减少查询次数、将数据库执行的操作尽可能的让你的程序完成(例如join查询),减少磁盘IO指尽量不使用文件系统作为缓存、减少读写文件次数等。程序优化永远要优化慢的部分,换语言是无法“优化”的。
3.http状态码有那些?分别代表是什么意思?100-199 用于指定客户端应相应的某些动作。200-299 用于表示请求成功。300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。400-499 用于指出客户端的错误。400 1、语义有误,当前请求无法被服务器理解。401 当前请求需要用户验证 403 服务器已经理解请求,但是拒绝执行它。500-599 用于支持服务器错误。 503 – 服务不可用4.一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?(流程说的越详细越好)
- 查找浏览器缓存
- DNS解析、查找该域名对应的IP地址、重定向(301)、发出第二个GET请求
- 进行HTTP协议会话
- 客户端发送报头(请求报头)
- 文档开始下载
- 文档树建立,根据标记请求所需指定MIME类型的文件
- 文件显示
- 浏览器这边做的工作大致分为以下几步:
- 加载:根据请求的URL进行域名解析,向服务器发起请求,接收文件(HTML、JS、CSS、图象等)。
- 解析:对加载到的资源(HTML、JS、CSS等)进行语法解析,建议相应的内部数据结构(比如HTML的DOM树,JS的(对象)属性表,CSS的样式规则等等)
5.你常用的开发工具是什么,为什么?
- Sublime,Atom,Nodepad++;
6.说说最近最流行的一些东西吧?常去哪些网站?
- Node.js、MVVM、React-native,Angular,Weex等
- CSDN,Segmentfault,博客园,掘金,Stackoverflow,伯乐在线等
7.介绍下你的项目(如果有的话)?并说一下在做这个项目中运用的技术以及遇到的难题是如何解决的
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/div/3716256399/
3. storage 的区别 sessionStorage localStorage
localStorage 的生命周期是永久性的。假若使用localStorage存储数据,即使关闭浏览器,也不会让数据消失,除非主动的去删除数据,使用的方法如上所示。localStorage有length属性
sessionStorage 的生命周期是在浏览器关闭前。也就是说,在整个浏览器未关闭前,其数据一直都是存在的。sessionStorage也有length属性,其基本的判断和使用方法和localStorage的使用是一致的
4.v-model双向数据原理
有一个文本框 通过v-bind绑定了value属性 值为myname 是我们在vue实例中定义的属性
传统我们获取文本框值方法 可能通过getElementById找到文本框 然后获取其value属性
但是vue中直接通过v-bind绑定了value属性 所以不需要像之前那样获取值
所以在后面的按钮中获取name值 直接获取vue实例对象data里面的myname属性即可
【数据为尊 ----数据映射到浏览器 如果数据v-model后修改(肯定input)然后到数据在有数据映射到浏览器页面 ----映射关系统称】
5.keepAlive用过吗?什么作用?
缓存路由组件
使用的是vue的一个组件,参考vue的官方文档
使用这个东西可以保证我们在切换组件的时候,原来显示的组件不被销毁
-----【保障组件的数据不会被切换路由而销毁数据】
<keep-alive include="Home"> Home是对应的组件对象的名字,不是路由的名字
<router-view></router-view>
</keep-alive>
6.多维数组拍平
数组拍平也称数组扁平化,就是将数组里面的数组打开,最后合并为一个数组
一红六种方法吧……
了解的请看: https://www.cnblogs.com/guan-shan/p/10165737.html
7.跨域的原因 解决方案
跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。
这样就可以说同源策略----协议---端口---域名
原生的src和href可以解决跨域
代理可以解决
请求头也可以携带浏览器提示的也可以解决
一般都是后端解决跨域问题
【别的需要了解看下方链接】
https://blog.csdn.net/qq_41604383/div/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/div/35845
谢邀。作为一个转行做前端的来回忆下面试的那几次经历。
前几次都是各种培训公司,各种忽悠就不提了,说说后面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掌握的程度,如果稍微要求高一点的,暂时还没面过,等以后面过在来回答