中级前端工程师面试官口吻基础知识一面

7 篇文章 0 订阅
3 篇文章 1 订阅

请自我介绍一下

面试官您好,我是xxx,今年xx岁,毕业于xxx院校,毕业已经x年了,主要从事的工作方向是前端开发工程师。先后任职两份工作岗位,第一家公司叫做xxx公司,主要的业务是xxx,使用到的技术框架是xxx。第二家公司叫做xxx公司,主要的业务是xxx,使用到的技术框架是xxx。本人目前处于离职状态,在寻找一份新的工作岗位,这就是我的一个基本情况。

请问离职的原因是什么

避免吐槽前公司,可以往自己的发展规划方向来描述。

接下来问一些前端的基本知识,描述一下CSS的盒模型

CSS的盒模型主要分为两种,标准盒模型和怪异(IE)盒模型。可以通过CSS的box-sizing属性来定义。标准盒模型:content-box,怪异盒模型:border-box,默认为content-box。

标准盒模型的宽度计算主要是根据定义的width属性,也就是内容区域content,不计算padding和border。

怪异盒模型的计算等于 content+border+padding,需要计算padding和border。

说说平常开发的时候,响应式布局可以通过什么方式实现

目前最常用的方法是flex布局,其他的方法还可以通过媒体查询、单位使用百分比、使用rem作为单位、grid、珊格布局等来实现。

你说到使用flex布局,说说对它的理解,平常使用的flex:1是什么意思?

当使用flex布局时,首先会想到两根轴线,主轴和交叉轴。

主轴通过row-direction来定义,主要有4个属性,分别是row/row-reserve/column/column-reserve。而交叉轴是垂直于主轴的。

定义了display: flex的元素,其子元素可以定义flex属性,该属性主要由3个属性组成,分别是flex-grow,flex-shrink,flex-basis

flex-grow: 放大比例,用于定义当容器中存在剩余空间时,该子元素的放大比例,默认值为0。

flex-shrink: 缩小比例,用于定义容器空间不能够容纳所有子元素时,该元素的缩小比例,默认值为1

flex-basis: 基本长度,用于定义该子元素项目占据的主轴空间,默认值为auto。

当定义flex:1 时,实际是将flex-grow定义为1,即将放大比例设置为1。flex: 0 1 auto 为属性的默认值。

使用百分比作为单位,会有什么问题?

外边距属性margin和内边距属性padding取百分比值的时候,无论是left、right或top、bottom,都是以其父元素的宽值(width)作为参照物(即分母top/width),这是W3C的规范。

所以在使用以上属性时,需要注意以上问题,避免达到不符合预期的UI效果。

rem和em的区别是什么?

em是基于当前元素的父元素的fontSize属性的比例来取值的,如果父元素没有定义该属性,则往上继续查找,直至根节点。

rem是基于body标签的fontSize属性比例来取值的。

好的,接下来我问些JS相关的知识,说说数组的reduce方法,作用是什么,参数有什么。

reduce方法常用与计算数组的求和。

reduce方法有两个参数,第一个参数是callback,第二个参数是默认值initialValue。

callback函数也接收2个参数,第一个参数是上一次循环返回的结果,第二个参数是当前遍历的item值。

当没有传入initialValue时,遍历会从第二项开始,一共遍历arr.length - 1次。遍历的第一次,callback的参数数值分别是数组的第一项和数组的第二项。

当传入了initialValue时,遍历会从第一项开始,一共遍历arr.length次。遍历的第一次,callback的参数数值分别是传入的默认值和数组的第一项。

// 复制到控制台输出即可一目了然
let arr = [1,2,3,4,5,6];
arr.reduce((x, y) => {
  console.log('y', y, 'x', x);
  return y - x;
})

arr.reduce((x, y) => {
  console.log('y', y, 'x', x);
  return y - x;
}, 5)

遍历数组的方法有哪些,各自的区别是什么

forEach/map/filter/some/find/findIndex

  • forEach 接收三个参数,item: 当前遍历项,index: 当前遍历项的下标值, array: 当前遍历的数组。没有返回值。
  • map 接收三个参数,item: 当前遍历项,index: 当前遍历项的下标值, array: 当前遍历的数组。返回每一次遍历返回的值组成的数组。
  • filter 接收三个参数,item: 当前遍历项,index: 当前遍历项的下标值, array: 当前遍历的数组。返回每一次遍历返回值为true的项组成的数组。
  • some 接收三个参数,item: 当前遍历项,index: 当前遍历项的下标值, array: 当前遍历的数组。返回一个boolean值,在所有的遍历中有任意一项返回true,则为true,否则为false。
  • find 接收三个参数,item: 当前遍历项,index: 当前遍历项的下标值, array: 当前遍历的数组。返回item,当遍历返回的值为true时,则返回当前项的值,当有多项均返回true时,则返回第一符合项的值。
  • findIndex 接收三个参数,item: 当前遍历项,index: 当前遍历项的下标值, array: 当前遍历的数组。返回index下标值,当遍历返回的值为true时,则返回当前项的下标值,当有多项均返回true时,则返回第一符合项的下标值。

简单说一下对事件循环的理解

事件循环机制的出现,主要是为了处理异步任务。

什么是异步任务,异步任务通常来描述一些无法立即得到结果的任务,例如定时器,请求等。

JS是单线程的,在浏览器的渲染线程中执行,假设所有的任务都是同步的任务,当遇到耗时较久的任务时,浏览器就会产生阻塞的现象,导致卡顿,非常影响用户的体验。所以有了异步任务的概念。

在浏览器的事件机制中,有一个执行栈,还有一个任务队列。在解析js时,会生成一个任务,放到执行栈中执行,在执行的过程中,同步任务会正常执行,当遇到异步任务时,会将异步任务放入到任务队列中。当执行栈中的任务执行完了以后,会去任务队列中查找已经执行完的异步任务,将其取出创建一个任务放入到执行栈中,再回到执行栈中执行,如此反复,则为事件循环。

说一说对闭包的理解,举例应用场景

理解闭包,从以下几个点:

第一点是理解作用域。作用域分为两种,全局作用域和局部作用域。创建作用域的方法有很多,例如常见的if/函数/for等等,在浏览器环境下,一般认为window是全局作用域。当我们在全局作用域下创建一个局部作用域,例如定义了一个函数A,函数A的内部,则称为局部作用域。一般情况下,局部作用域内可以访问当前作用域内的属性,也可以访问全局作用域下的属性。但是全局作用域是不能访问局部作用域内的属性。

第二点是怎么实现从全局作用域访问局部作用域的属性,这就需要通过闭包来实现了。如上例子,当我在函数A内部再定义一个函数B,则又产生了一个局部作用域,该作用域可以访问3层作用域的属性(当前作用域,函数A作用域,全局作用域),再将函数B返回出去。在全局环境下,定义一个变量C,变量C的值为执行函数A后得到的返回值,即函数B。通过这样的方式得到的变量,就可以对3层作用域的属性进行访问,从而实现了从全局作用域访问局部作用域属性的方法。

第三点,理解闭包。函数B和它所在的作用域结合在一起的组合,就称为闭包。本质上,闭包是用于全局作用域和局部作用域沟通的桥梁。使用闭包可以实现对某些特定变量的保护和保存。

场景:防抖节流的原理,JS设计模式单例模式的设计原理,bind方法的原理等。

说一说对原型和原型链的理解

个人认为,原型就是一个对象,用于存放公用的变量和方法的对象。所有的引用数据类型的变量,都会有一个__proto__属性,该属性指向其对应的原型。

原型通常随着构造函数一起定义,使用构造函数创造出来的实例,都会有__proto__属性,指向构造函数的原型。所以在原型中定义好公用的方法和变量,创建的实例都会继承,通过原型链的方式可以进行访问。

什么是原型链?当一个对象变量在访问一个属性时,会先在自身查找是否存在对应属性,如果存在则直接引用,如果不存在,则会通过原型链的方式,找到其对应的原型,在原型对象上再次查找对应的属性。

前面说到,所有的引用数据类型的变量都会有自己的原型,原型本身也是一个对象,它也有自己的__proto__属性,当在原型上也没有找到对应的属性时,则会继续通过原型链向上查找,直到原型指向null。(Object对象的原型的__proto__属性指向null)

主要技术框架是vue,请你说说vue2双向绑定的原理是什么

vue2双向绑定是通过数据劫持+发布订阅模式(观察者模式)来实现的。

第一点,数据劫持,基于Object.defineProperty,遍历vue实例中的data属性,对data中的每一项数据进行数据劫持。

第二点,编译模版,该阶段会对产生副作用的函数进行订阅,记录依赖关系。通过解析template,遍历所有的html节点,过程中能够判断出对应的节点是否绑定data中的变量。

第三点,发布订阅模式,当对应的元素绑定了data中的变量时,需要将data中的变量进行读取,然后在元素中对应的位置进行替换,我们将替换操作定义为watcher,在读取变量的时候会触发数据劫持的get方法,在get方法中将watcher的操作订阅起来,放入到dep的数组中。当data中的变量发生改变时,会触发数据劫持的set方法,在set方法中循环遍历执行dep数组中的方法,从而实现对视图的更新。

vue3和vue2的区别是什么

主要的区别有以下几点:响应式原理的升级/组合式API/ts的类型支持/生命周期更新/服务器渲染

响应式原理从Object.defineProperty变成了用es6 proxy的方式来实现。不再需要遍历整个对象进行逐个的劫持绑定,改为直接对整个对象进行劫持。

组合式API的开发模式,让组件化的开发模式更为显著,有以下几个优点,响应式API ref/reactive,每一个组件有自己的生命周期钩子,代码结构更加清晰灵活,更好的逻辑复用。

在以往的的选项式API模式下,复用的逻辑代码通常会用mixins的方式来实现抽离,当然也带来了很多问题,比如变量命名重复的问题,多个mixins一起使用时变量的来源问题等等,逻辑看起来更加的复杂,而组合式API就很好的解决了这些问题。

ts的类型支持更加的友好,我认为最大的原因还是归功于组合式API,用一种类似于函数式编程的方式,主要利用基本的变量和函数,它们本身就是类型友好的。因此也能够更加的适配ts的类型支持。

选项时API和组合式API都有一套属于自己的生命周期钩子,在vue3中新增了例如错误的捕获等钩子,在组合式API的生命周期钩子中使用 setup 代替了 beforeCreate 和 created,同时将 beforeDestory/destoryed 改为 beforeUnmounted和unmounted。

当然vue3中对vue2都进行了兼容处理。

前端缓存的方式有哪些?

localStorage、sessionStorage、cookie、indexDB、http缓存

http缓存分为强缓存和协商缓存,协商缓存一定会与服务器进行通信,而强缓存会判断是否命中缓存时间,如果命中则直接取出浏览器中的缓存数据进行使用。

做过什么性能上的优化

性能优化的方式有很多中,从在浏览器中输入url到页面渲染完成的整个过程中,每一个步骤基本都有能够优化的事情。先简单说下优化的方式有哪些。

减少http的请求,通过合并css文件合并图片,通常将项目中固定的icon合并成一张图片,在前端中也被称为雪碧图。

减少请求资源的体积,压缩文件,压缩图片。

处理数据,通过分页、异步、缓存的方式。

渲染相关,通过懒加载、减少dom操作。

代码层面,防抖节流、监听事件清楚消除、事件委托。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面试20问 1、请你自我介绍一下你自己   回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有,其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理企业才会相信。企业很重视一个人的礼貌,求职者要尊重考官,在回答每个问题之后都说一句“谢谢”。企业喜欢有礼貌的求职者。 2、你觉得你个性上最大的优点是什么?   回答提示:沉着冷静、条理清楚、立场坚定、顽强向上。   乐于助人和关心他人、适应能力和幽默感、乐观和友爱。我在学校经过几年的学习及项目实战,加上实习工作,使我适合这份工作。我相信我能成功。 3、说说你最大的缺点?   回答提示:这个问题企业问的概率很大,通常不希望听到直接回答的缺点是什么等,如果求职者说自己小心眼、爱忌妒人、非常懒、脾气大、工作效率低,企业肯定不会录用你。绝对不要自作聪明地回答“我最大的缺点是过于追求完美”,有的人以为这样回答会显得自己比较出色,但事实上,他已经岌芨可危了。企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分。企业喜欢聪明的求职者。 4、你对加班的看法?   回答提示:实际上好多公司问这个问题,并不证明一定要加班。 只是想测试你是否愿意为公司奉献。   回答样本:如果是工作需要我会义不容辞加班。我现在单身,没有任何家庭负担,可以全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班 5、你对薪资的要求?   回答提示:如果你对薪酬的要求太低,那显然贬低自己的能力;如果你对薪酬的要求太高,那又会显得你分量过重,公司受用不起。一些雇主通常都事先对求聘的职位定下开支预算,因而他们第一次提出的价钱往往是他们所能给予的最高价钱。他们问你只不过想证实一下这笔钱是否足以引起你对该工作的兴趣。   回答样本一:“我对工资没有硬性要求。我相信贵公司在处理我的问题上会友善合理。我注重的是找对工作机会,所以只要条件公平,我则不会计较太多   回答样本二:我受过系统的软件编程的学习,不需要进行大量的培训。而且我本人也对编程特别感兴趣。因此,我希望公司能根据我的情况和市场标准的水平,给我合理的薪水。   回答样本三:如果你必须自己说出具体数目,请不要说一个宽泛的范围,那样你将只能得到最低限度的数字。最好给出一个具体的数字,这样表明你已经对当今的人才市场作了调查,知道像自己这样学历的雇员有什么样的价值。 6、在五年的时间内,你的职业规划?   回答提示:这是每一个应聘者都不希望被问到的问题,但是几乎每个人都会被问到。比较多的答案是“管理者”。但是近几年来,许多公司都已经建立了专门的技术途径。这些工作地位往往被称作“顾问”、“参议技师”或“高级软件工程师”等等。当然,说出其他一些你感兴趣的职位也是可以的,比如产品销售部经理,生产部经理等一些与你的专业有相关背景的工作。要知道,考官总是喜欢有进取心的应聘者,此时如果说“不知道”,或许就会使你丧失一个好机会。最普通的回答应该是“我准备在技术领域有所作为”或“我希望能按照公司的管理思路发展”。 7、你朋友对你的评价?   回答提示: 想从侧面了解一下你的性格及与人相处的问题。   回答样本:“我的朋友都说我是一个可以信赖的人。因为,我一旦答应别人的事情,就一定会做到。如果我做不到,我就不会轻易许诺。   回答样本:”我觉的我是一个比较随和的人,与不同的人都可以友好相处。在我与人相处时,我总是能站在别人的角度考虑问题“ 8、你还有什么问题要问吗?   回答提示:企业的这个问题看上去可有可无,其实很关键,企业不喜欢说“没有问题”的人,因为其很注重员工的个性和创新能力。企业不喜欢求职者问个人福利之类的问题,如果有人这样问:贵公司对新入公司的员工有没有什么培训项目,我可以参加吗?或者说贵公司的晋升机制是什么样的?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。 9、如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?   回答提示:一段时间发现工作不适合我,有两种情况:   1、如果你确实热爱这个职业,那你就要不断学习,虚心向领导和同事学习业务知识和处事经验,了解这个职业的精神内涵和职业要求,力争减少差距;   2、你觉得这个职业可有可无,那还是趁早换个职业,去发现适合你的,你热爱的职业,那样你的发展前途也会大点,对单位和个人都有好处。 10、在完成某项工作时,你认为领导要求的方式不是最好的,自己还有更好的方法,你应该怎么做?   回答提示:①.原则上我会尊重和服从领导的工作安排;同时私底下找机会以请教的口吻,婉转地表达自己的想法,看看领导是否能改变想法;   ②如果领导没有采纳我的建议,我也同样会按领导的要求认真地去完成这项工作;    ③.还有一种情况,假如领导要求的方式违背原则,我会坚决提出反对意见;如领导仍固执己见,我会毫不犹豫地再向上级领导反映。 11、如果你的工作出现失误,给本公司造成经济损失,你认为该怎么办?     回答提示:   ①我本意是为公司努力工作,如果造成经济损失,我认为首要的问题是想方设法去弥补或挽回经济损失。如果我无能力负责,希望单位帮助解决;   ②是责任问题。分清责任,各负其责,如果是我的责任,我甘愿受罚;如果是一个我负责的团队中别人的失误,也不能幸灾乐祸,作为一个团队,需要互相提携共同完成工作,安慰同事并且帮助同事查找原因总结经验。   ③总结经验教训,一个人的一生不可能不犯错误,重要的是能从自己的或者是别人的错误中吸取经验教训,并在今后的工作中避免发生同类的错误。检讨自己的工作方法、分析问题的深度和力度是否不够,以致出现了本可以避免的错误。 12、如果你在这次考试中没有被录用,你怎么打算?   回答提示:现在的社会是一个竞争的社会,从这次面试中也可看出这一点,有竞争就必然有优劣,有成功必定就会有失败.往往成功的背后有许多的困难和挫折,如果这次失败了也仅仅是一次而已,只有经过经验经历的积累才能塑造出一个完全的成功者。我会从以下几个方面来正确看待这次失败.   第一、要敢于面对,面对这次失败不气馁,接受已经失去了这次机会就不会回头这个现实,从心理意志和精神上体现出对这次失败的抵抗力。要有自信,相信自己经历了这次之后经过努力一定能行.能够超越自我.   第二、善于反思,对于这次面试经验要认真总结,思考剖析,能够从自身的角度找差距。正确对待自己,实事求是地评价自己,辩证的看待自己的长短得失,做一个明白人.   第三、走出阴影,要克服这一次失败带给自己的心理压力,时刻牢记自己弱点,防患于未然,加强学习,提高自身素质.   第四、认真工作,回到原单位岗位上后,要实实在在、踏踏实实地工作,三十六行,行行出状元,争取在本岗位上做出一定的成绩.   第五、再接再厉,成为软件工程师或网络工程师一直是我的梦想,以后如果有机会我仍然后再次参加竞争. 13、如果你做的一项工作受到上级领导的表扬,但你主管领导却说是他做的,你该怎样?   回答提示:我首先不会找那位上级领导说明这件事,我会主动找我的主管领导来沟通,因为沟通是解决人际关系的最好办法,但结果会有两种:1.我的主管领导认识到自己的错误,我想我会视具体情况决定是否原谅他;2.他更加变本加厉的来威胁我,那我会毫不犹豫地找我的上级领导反映此事,因为他这样做会造成负面影响,对今后的工作不利。 14、谈谈你对跳槽的看法?   回答提示:(1)正常的"跳槽"能促进人才合理流动,应该支持;   (2)频繁的跳槽对单位和个人双方都不利,应该反对。 15、工作中你难以和同事、上司相处,你该怎么办?   回答提示:   ①我会服从领导的指挥,配合同事的工作。   ② 我会从自身找原因,仔细分析是不是自己工作做得不好让领导不满意,同事看不惯。还要看看是不是为人处世方面做得不好。如果是这样的话 我会努力改正。   ③ 如果我找不到原因,我会找机会跟他们沟通,请他们指出我的不足。有问题就及时改正。   ④作为优秀的员工,应该时刻以大局为重,即使在一段时间内,领导和同事对我不理解,我也会做好本职工作,虚心向他们学习,我相信,他们会看见我在努力,总有一天会对我微笑的! 16、假设你在某单位工作,成绩比较突出,得到领导的肯定。但同时你发现同事们越来越孤立你,你怎么看这个问题?你准备怎么办?   回答提示:   ①成绩比较突出,得到领导的肯定是件好事情,以后更加努力   ②检讨一下自己是不是对工作的热心度超过同事间交往的热心了,加强同事间的交往及共同的兴趣爱好。   ③ 工作中,切勿伤害别人的自尊心   ④不再领导前拨弄是非   ⑤乐于助人对面 18、你对于我们公司了解多少?   回答提示:在去公司面试前上网查一下该公司主营业务。如回答:贵公司有意改变策略,加强与国外大厂的OEM合作,自有品牌的部分则透过海外经销商。 19、请说出你选择这份工作的动机?   回答提示:这是想知道面试者对这份工作的热忱及理解度,并筛选因一时兴起而来应试的人,如果是无经验者,可以强调“就算职种不同,也希望有机会发挥之前的经验”。 20、你最擅长的技术方向是什么?   回答提示:说和你要应聘的职位相关的课程,表现一下自己的热诚没有什么坏处。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值