当前位置: 首页 > Web前端 > CSS

CVTE2019春季招聘

时间:2023-03-31 00:50:02 CSS

前言:3月5日,我从中山去了广州。我早上7点就准备好了。在高铁站坐了30分钟,转广州地铁又站了90分钟。分钟,去地铁口,会有cvte大巴来接你,我选择的面试时间是11:00-12:00,但是前面的人还没面试完就12点去吃饭了:00,所以面试从下午1点开始,直到下午3点才结束。我面试的职位是前端开发。一方面,问题很基础,所以我通过了。另一方面,我觉得他们中的大多数都与业务有关。由于是学php的背景,所以面试官喜欢考node的知识。最大的原因。作为一个普通的二面非专业,能够闯入二面我觉得很幸运,继续加油!在线笔试:我是2月21日参加的在线笔试。其实我做完之后感觉很一般。没想到能进入面试。题型分为选择题和两个编程题。其实我当时应该是用python后台截图,这样就可以把所有的问题都捕捉下来了。选择题涉及的知识面比较广。回忆一下,有:①、EventLoop机制和微任务②、防止同一事件的其他监听器被调用(stopImmediatePropagation)③、css中margin的%是根据父元素的宽度作为基准(我真的不知道这个)。我记得这么多。..编程题可以参考我的文章:https://segmentfault.com/a/11...一方面:面试官比较随和,所以不是很紧张。面试是一对一的。首先自我介绍一下,说了自己不是专业的,前端知识都是自学的,然后说了各种自学的方法。接下来看看问了哪些知识①、css盒子模型:有两种,IE怪异的盒子模型(border-box)和W3C标准的盒子模型(content-box)怪异的:width=content+border+paddingstandard:width=content可以通过css的box-sizing属性在这两个box之间切换box-sizing:border-boxweirdboxmodelbox-sizing:content-boxstandardboxmodel②,httpstatuscode:1beginning:(accepted,需要继续处理。)100:客户端继续请求,101:客户端切换协议2Beginning:(请求成功)200:请求成功202:服务器已接受请求,但未处理204:服务器处理成功请求,但未返回内容3Beginning:(请求被重定向)301:(永久重定向),302:(临时重定向),303:http1.1协议,禁止被缓存304:(协商成功的返回值cache(resourcenotmodified))4startswith:(clientrequesterror)400:客户端请求的语法错误,服务器无法理解403:服务器理解客户端的请求,但是拒绝执行这个请求404:服务器无法根据客户端的请求找到资源(网页报错)③、强缓存和协商缓存:说到304状态码,面试问我什么字段控制协商缓存:控制协商缓存的字段negotiationcache有:Last-Modified/If-Modified-Since和Etag/If-None-Match*其中Etag/If-None-Match优先级高于Last-Modified/If-Modified-Since然后问我知道Etag是由什么生成的。这个我真的不懂,我只知道这只是一个标识符。面试官说是时间值生成的,然后问了强缓存的状态码。我说强缓存的状态是200,读缓存的时候,有两种情况。在chrome浏览器的Network下的Size中,可以看到frommemorycache和fromdiskcache两个字段④,闭包和内存泄漏的概念:1.概念:一个函数可以访问另一个函数作用域和变量,创建一个闭包最简单的方法是在另一个函数中创建一个函数。2.好处:由于函数内部的变量是可以读取的,如果你想让一个变量驻留在内存中并且可以全局访问,同时又想避免全局变量污染,此时使用闭包是一种合适的方式。3.缺点:但是正是因为函数内部变量被外部引用,不会被垃圾回收,所以会造成常驻内存。过度使用很容易造成内存泄漏。可能会导致内存泄漏,然后他问我如何检查内存泄漏。我说chrome浏览器里面有个面板是专门用来检查内存泄漏的,但是不常用,所以没太在意。然后他问我内存泄漏的常见方式1.意外的全局变量a。在您忘记使用变量声明符(var或let)声明变量的函数中,会创建一个意外的全局变量。b.在函数中通过this赋值变量。在函数中,this指向window2。定时器setTimeoutsetInterval和回调函数当不需要setInterval或setTimeout时,定时器没有被清除,定时器回调函数和内部因变量不能被回收,造成内存泄漏。比如:Vue使用了一个定时器,需要在beforeDestroy中销毁。js是一样的。3.闭包(闭包的局部变量的引用在全局范围内保留)4.循环引用的变量或对象lodash,之前刚知道这个东西可以用来克服json深拷贝的缺陷,他要求我实现增强版的debounce(点击次数随时增加,延迟也增加)。一开始我没什么好主意,他让我先实现一个正常的debounce。代码大致如下:functiondebounce(fn,wait=1000){lettimeout=0;返回函数(...args){如果(超时){clearTimeout(超时);}timeout=setTimeout(()=>{fn.apply(this,args)},等待);}}写出来之后,我要求写一个加强版,可能是我想多了吧。..当时没写,其实就是加一条语句//上面代码省略timeout=setTimeout(()=>{wait=wait*1.5;//主要是加这条语句fn.apply(this,args)},wait);⑥,csstriangle:手撕代码一开始还以为是三角箭头。我很兴奋,觉得很简单。他问我以前实现过没有,我说没有,他说如果没有实现过,我一时半会想不出来。这是我的百度答案:div{width:0;高度:0;border-right:40pxsolidtransparent;左边框:40px实心透明;border-bottom:40pxsolidred;}对于css,代码的实现并不重要,面试官更看重的是idea。他把想法告诉我后,让我实现一个等边三角形....我刚才说了等边三角形的每个角都是60度。哈哈,不知道怎么实现的。⑦.本机js读取cookie。一般在读写cookie的时候,都会用到js-cookie这个库,所以忘记了原生的,因为原生的js只能通过document获取cookie。从第一面到第二面,我至少花了半个小时。我接受了另一位面试官的采访。两边输①,实现一个斐波那契数列手撕代码斐波那契数列为11235813213455...这里我用递归的思路,因为我不是专业的,没怎么学过数据结构和算法,所以比较牛逼的同学会用动态规划来解这道题functionrecurFib(num){if(num<3){return1;}else{returnrecurFib(num-1)+recurFib(num-2)}}②、vue和react的区别React和Vue有很多相似之处,它它们都有:使用VirtualDOM提供响应式(Reactive)和组件化(Composable)的视图组件,将重心放在核心库上,将路由、全局状态管理等其他功能留给相关库。那么就涉及到虚拟dom了:VirtualDOM是一种虚拟dom技术,本质上是基于javascript实现的。与dom对象相比,javascript对象更简单,处理起来也更快。dom树的结构和属性信息可以很方便的使用javascript对象来表示原生的JS或者JQ来操作DOM,浏览器会从构建DOM树开始,从头到尾执行这个过程。操作DOM的成本还是很高的,频繁的操作还是会造成页面卡顿,影响用户体验。创建虚拟DOM并将其映射到真实DOM,这样所有的更新都可以首先反映在虚拟DOM上,需要Diff算法。③.上下固定,中间滚动布局这种布局看起来像移动端。主要是之前对移动端的布局不了解。可能太糟糕了。回来用代码实现了:功能:头部和底部自适应高度;中间占据剩余部分,超出了自动滚动的思路:让容器占据页面的整个高度,采用flex布局作为一个整体,中间滚动部分使用overflow:autoheader



header

中间







中间

/>




中间







中间







页脚



页脚
html,body{margin:0;填充:0;宽度:100%;高度:100%;}.cotainer{显示:flex;弹性方向:列;文本对齐:居中;高度:100%;}.middle{背景颜色:海蓝宝石;弹性增长:1;溢出:自动;}.header,.footer{背景颜色:黄绿色;}/*隐藏PC浏览器的滚动条,移动端不用考虑*/.middle::-webkit-scrollbar{display:none;}④、事件执行机制javascript是单线程语言JS会生成执行环境,执行环境会按顺序加入到执行栈中同步和异步任务进入不同的执行“地方”,同步的进入主线程,异步的代码会被挂起添加到Task中(任务有很多种)。除了广义的同步任务和异步任务,队列还包括更精确的微任务和宏任务。微任务包括process.nextTick、promise、Object.observe、MutationObserver宏任务包括script、setTimeout、setInterval、setImmediate、I/O、UI渲染,因此Event循环的正确顺序是this1。执行同步代码,是宏任务2.执行栈为空,检查是否有微任务要执行3.执行所有微任务4.必要时渲染UI5.然后开始下一轮Event循环执行宏任务代码⑤中的异步任务,跨域我说CORS一般是采用CORS原理:使用自定义的HTTP头让浏览器与服务器进行通信,比如增加一个额外的Origin头,包括地址信息(protocol,domainname)oftherequestedpage,portnumber)在后台设置Access-Control-Allow-Origin,然后进一步询问CORS预检请求,询问OPTIONS的功能,然后询问在什么条件下不会触发CORS预检请求,这个暂时想不出来,不过MDN总结的还是比较全的。满足简单请求(不会触发CORS预检请求)的条件:1、请求为GET、HEAD、POST其中之一2、请求字段满足CORS安全集的字段3、内容-类型有限⑥,node.js的知识对node不是很熟悉,涉及到websocket...看来我要努力了⑦,微信的知识面试公众号问我微信的知识公众号....我只是做了一个微信小程序,没有涉及公众号总结:面试整体难度适中。其实对于这次采访,我自己也是抱着试一试的心态的。学习者的心态,不要只是问面试官和面试官一起讨论,不断增强自己的实力,任重而道远,今天就加把劲吧!