2022前端开发面试记录(深圳篇)

JavaScript042

2022前端开发面试记录(深圳篇),第1张

2022年来到深圳,感觉到了与之前所在城市的差异,心里多少有点落差。虽然时机不太对吧,但是相信一切都会好起来的,给自己加油呀!

整理了一些面试被问到的问题,虽然很多是无效面试,但是我也强行问了面试官,从他们的回答中猜测了一下他们关注的面试点,所以也算是有点收获吧,只是浪费了很多简历和路费,哭唧唧。

——1、区块链——

1-1、vue生命周期;

1-2、vuex属性;

1-3、用户开始登录到登录成功都发生了什么;

1-4、git常用的命令;

——2、金融:vue——

笔试:

2-1、深浅拷贝的区别,为什么会出现深浅拷贝,浅拷贝的优势;

2-2、强制中断 foreach 遍历;

2-3、多处组件复用;

2-4、你对前端是什么概念,前端在整个软件生态内是什么角色;

2-5、Vue2 中数据变化但视图没有发生同步更新,描述一下出现的场景,解决方式,以及该问题发生的可能原因;

2-6、nextTick 是如何确保开发者能够获取到最新的 DOM 状态的;

2-7、如何使用 mixins,有何利弊;

2-8、使用 Hooks 模式开发时,useMemo,useCallback 常用来作为优化的手段。描述一下它们各自的适用场景,以及背后的原理实现?;

2-9、前端从 Jquery 时代演变至如今的三大框架,这种演变的根源是什么,jquery 解决了什么问题,如今的三大框架又是为了解决什么问题出现的?

视频面试:

2-10、js遍历树形结构,每个节点都有一个唯一ID,只能遍历一次;

2-11、组件封装的意义;

——3、知识产权:vue2、vue3、ts、react——

3-1、说一说面向对象的理解,包括继承、封装、多态等;

3-2、说一说promise;

3-3、webpack优化;

3-4、vuex使用场景;

3-5、描述一下对vue响应式原理的理解;

3-6、vue生命周期;

3-7、父子组件钩子函数执行顺序;

3-8、v-if和v-show;

3-9、js数据类型;

3-10、实现深拷贝;

——4、物流——

4-1、vue生命周期;

4-2、生命周期-修改元素样式在生命周期的哪个阶段;

4-3、生命周期-修改数据在哪个阶段;

4-4、生命周期-destroy里面会做哪些操作;

4-5、怎么修改title的内容;

4-6、父子组件传参的具体写法;

4-7、v-model的多种写法;

4-8、js数据类型;

4-9、判断数组的方法;

4-10、实现左边固定右边自适应的布局;

4-11、实现div垂直水平居中;

4-12、flex:1;

4-13、flex详解;

4-14、call,apply,bind是干什么的;

——5、新兴产业——

5-1、封装路由,怎么拦截路由;

5-2、浏览器缓存有哪些,又问localStorage和sessionStrorage的区别和应用场景;

5-3、浏览器强缓存和协商缓存;

5-4、webpack打包机制,构建过程和配置;

5-5、性能优化方法;

5-6、前端的业务和后端的API是怎么做到数据实时请求的(问的其实是前端对后端API接口的封装和管理);

5-7、computed和watch;

5-8、说了几个关于大屏的应用场景,有没有做过,怎么做的;

——6、某水果:vue2、vue3、ts、各种前沿技术都用——

6-1、怎么封装一个组件库/工具类库,比如vue封装过什么复杂组件,jquery封装过什么类库;

6-2、get和post的区别,传参格式等;

6-3、promise怎么用的;

6-4、原型链,test()的原型链;

6-5、websocket;

6-6、es6中的generator;

6-7、es6中的set和map有啥区别,set为什么能去重;

6-8、项目难点;

——7、医疗健康:vue——

7-1、vue自定义指令配置;

7-2、webpack的理解;

7-3、对node的了解,用过express吗;

7-4、项目中的拖拽是怎么做的;

7-5、websocket和socket的区别;

7-6、听过mqtt吗,因为没听过所以解释了一下activemq的用法;

7-7、二维地图的聚合,如果有十万个点,会做什么优化;

7-8、地图实现多个点连成一条线会怎么做;

7-9、地图实现一条曲线;

7-10、内网下git怎么用的;

7-11、openlayers渲染机制;

7-12、父子组件通信方法;

7-13、router中实现拦截;

7-14、对象合并的方法;

7-15、父子组件的生命周期执行顺序,渲染阶段为什么会先执行父组件再执行子组件;

7-16、vue生命周期;

7-17、npm run dev, run build可以在项目中的什么位置找到;

7-18、vue中跳转页面的方法;

7-19、mixins用过吗;

7-20、判断引用类型的方法;

7-21、js数据类型;

7-22、判断基本数据类型的方法;

7-23、for in和for of的用法和区别,两者遍历的是索引还是属性值,两者都可以遍历对象吗;

7-24、foreach和map的区别,两者会不会改变原数组;

7-25、主要用什么技术栈;

7-26、行内元素和块级元素的区别,分别都有哪些,行块级元素有哪些;

7-27、div垂直水平居中,grid知不知道怎么用;

7-28、splice和slice;

——8、智慧园区:vue2、vue3、ts、uniapp——

8-1、flex了解吗,flex布局方向,flex:1 0的页面效果是怎样的;

8-2、做过移动端吗,了解uniapp吗;

8-3、keep-alive;问了一个没听明白的,可能和keep-alive有关系;

8-4、vuex中的action;不用vuex,怎么代替vuex;

8-5、promise.all和promise.on;

8-6、防止表单重复提交;

8-7、async,await的使用;

8-8、vue3和ts的了解;

8-9、防抖怎么控制时间;

8-10、vue中的data为什么要设计成一个函数;

——9、智慧工地:vue、uniapp、小程序——

9-1、Vuex是干什么的;

9-2、openlayers怎么用的;

9-3、性能优化;

9-4、spa首屏加载优化;

9-5、bundler.js太大,打包怎么优化;

9-6、加密方式了解多少,比如md5,base64等,一大堆没听过的;

9-7、冒泡排序的实现原理;

9-8、js设计模式;

——10、某快递公司外包——

10-1、一棵树的数据,给的是列表格式,转换成树形结构;

10-2、项目相关的,聊天怎么做的,拖拽怎么做的,拖拽的数据怎么渲染的,拖拽重叠怎么处理的;

10-3、js设计模式;

——11、三维:vue、cesium——

11-1、一棵树的数据,给的是列表格式,转换成树形结构;

11-2、openlayers怎么用的,发布过wms吗,发布流程是怎样的;

11-3、openlayers转换经纬度的方法名是什么;

11-4、cesium常用的函数;

11-5、vue数据双向绑定原理;

11-6、Vue中data属性如果改变一个数组的下标,会不会马上发生变化,不变化可以怎么解决

11-7、数组常用方法有哪些;

11-8、 map和filter的区别;

11-9、es6常用的方法;

11-10、父子组件通信,兄弟组件通信;

11-11、new具体进行了什么操作;

——12、医疗:vue、angular——

12-1、js渲染机制和运行机制;

12-2、vue数据绑定原理;

——13、建设行业:vue、uniapp——

笔试:

13-1、||与&运算符;

13-2、垂直居中方案;

13-3、let a=arr, b=a, c=arr.concat(), a[0]=3,打印b和c,应该是深浅拷贝;

13-4、实现font-size:12;

13-5、接口路径,给一个地址 http://localhost/projectname/resource/index(http://localhost/projectname/resource/index).html ,根据url请求接口路径写出完整路径,’/ geturl.do ’,’ geturl.do ’,’../ geturl.do ’;

13-6、微信小程序流程和主要文件;

13-7、获取url参数及内容;

13-8、$(function(){}) / (function(){}) / (function(){})()的区别;

13-9、前端优化方案;

面试:

13-10、项目难点;

13-11、git工作流;

13-12、jquery项目会不会用webpack打包;

13-13、webpack优化;

13-14、web优化;

——14、文化:uniapp——

14-1、ssr渲染;

14-2、ajax和axios的区别;

14-3、cookie和session的区别;

14-4、vue生命周期;

14-5、数据请求写在哪个生命周期中;

14-6、router的history模式和hash模式;

14-7、工作中的开发流程;

14-8、uniapp的开发流程和坑;

14-9、uniapp滑动问题,下滑切换视频不生效,一般是什么原因;

14-10、uniapp加载速度慢,点击加载图片速度太慢,一般是什么原因;

——15、企业平台某外包:vue,node,性能优化——

15-1、说一说websocket;

15-2、vue数据双向绑定原理;

15-3、项目难点;

15-4、对mvvm、mvc、mvp等的理解;

15-5、vue的常见指令;

15-6、computed和watch;

15-7、class和style怎么绑定;

15-8、ajax和axios的区别;

15-9、axios拦截器,axios的post请求;

15-10、对前端渲染,服务端渲染的理解;

——16、智慧城市:vue,node,three.js——

16-1、vue生命周期;

16-2、vue组件通信方法;

16-3、js的继承;

16-4、oracle、mysql、sqllite的区别;

16-5、oracle连表查询;

16-6、openlayers项目场景;

16-7、cesium项目场景;

——17、租房:jquery+layui,vue2——

17-1、笔试:

17-2、foo打印题;

17-3、this打印题;

17-4、变量提升打印题;

17-5、let arr=[1,2,[5,8,[9,[3,5,]7,]20,37]] 把数组扁平化成一个数组,并进行去重升序

17-6、let a=[1,2,3,4,5,6,7]let b=[4,5,6]求b在a中第一次出现的位置;

17-7、面试:主要问项目

——18、跑腿:vue2,vue3+ts——

18-1、对html5语义化的理解;

18-2、css实现一个三角形;

18-3、css怎么实现0.5px的线,为什么有这种需求,涉及到兼容性问题;

18-4、怎么解决变量提升的问题;

18-5、es6新增了哪些定义变量的方式;

18-6、const定义的变量可以被修改吗;

18-7、map和filter的区别,会改变原数组吗;

18-8、es6去重的方法;

18-9、谈一谈对promise的理解;

18-10、除了链式调用,promise还可以怎么处理同步请求(async/await);

18-11、对vue响应式原理的理解,核心是什么;

18-12、对vue生命周期每个阶段的理解;

18-13、为什么要用key,key有什么作用;

18-14、v-if和v-show;

18-15、Vue中data为什么是一个函数;

18-16、vue各场景下的传值方式有哪些,比如父子组件,兄弟组件,祖孙组件;

18-17、对vuex的理解和使用场景;

18-18、vue常见修饰符;

18-19、Vue3用过吗(因为没用过,所以就只针对响应式原理说了一下vue3和vue2的区别);

——19、实业:jquery,vue2,vue3——

笔试:需要解释

19-1、html5新标签,css3新特性;

19-2、js+css3实现某元素以50px每秒的速度左移100px;

19-3、css实现左中右布局,不改变文档流;

19-4、js兼容性有哪些,以及常见的解决方案;

19-5、描述一下事件循环机制eventloop,eventloop解决了什么问题;

19-6、给了一个题,大概是后端返回的接口数据,data的格式有很多,比如null,对象,数组,字符串等,怎么处理这种问题;

19-7、前端性能优化方法,首屏页面怎么优化;

19-8、用js写一个方法实现数据去重并排序(用es5和es6+实现);

19-9、给定一个数组,把数组中为0的往后排,其他值按顺序排序(示例:[1,0,4,0,5,3]转换结果为[1,3,4,5,0,0])

19-10、用0,1,2代表红黄蓝三种颜色,实现以下排序,不能用array.sort实现(示例:[0,1,0,2,0,1,2]转换结果为[0,0,0,1,1,2,2])

面试:

19-11、flex布局;flex:1对应的属性;

19-12、讲一下原型链; proto 和prototype有什么区别;字符串有没有原型;给定一个str,str.test()调用的谁的test方法;

19-13、讲一下闭包;什么情况下才能算是闭包;形成闭包的条件;列了三个题让你判断是不是闭包;

19-14、v-if和v-show是干什么的;应用场景有哪些;给定一对父子组件,默认值是false,另外有一个ajax请求,值发生了以下变化(false true false true true),在v-show和v-if中,父子组件的哪个阶段里会请求ajax;

19-15、computed的实现原理,怎么实现一个computed;

19-16、css中,transform,margin,position的都是怎么渲染的,渲染机制是什么;amd,cmd,commonjs了解吗;

JavaScript面试题:字符串处理

在应聘前端程序员时,在笔试部分经常会考到字符串处理的问题。这些题有一个特点,站在考官的角度去考虑,它考的不是你会不会,而是你能不能在不借用XX手册或者XX指南再或者百度谷歌的情况下,用比较简洁的方式写出答案来。就具体的字符串处理问题,郑州尚学堂给大家分享一下。

1、字符串转换

字符串转换是最基础的要求和工作,你可以将任何类型的数据都转换为字符串,你可以用下面三种方法的任何一种:

var num= 19// 19

var myStr = num.toString()// "19"

你同样可以这么做:

var num= 19// 19

var myStr = String(num)// "19"

或者,再简单点儿:

var num= 19// 19

var myStr = "" +num// "19"

2、字符串分割

字符串分割,即将一个字符串分割为多个字符串,JavaScript中给我们提供了一个非常方便的函数,如:

var myStr = "I,Love,You,Do,you,love,me"

var substrArray = myStr .split(",")// ["I", "Love", "You", "Do", "you", "love", "me"]

var arrayLimited = myStr .split(",", 3)// ["I", "Love", "You"]

split()的第二个参数,表示返回的字符串数组的最大长度。

3、获取字符串长度

字符串长度是在开发中经常要用到的,非常简单如下:

var myStr = "I,Love,You,Do,you,love,me"

var myStrLength = myStr.length//25

4、查询子字符串

很多人都会忘记这几个JavaScript的自带的方法,或者忘记它们的具体用法,从而导致在做题的时候不得不嵌套for循环来做。

第一个函数:indexOf(),它从字符串的开头开始查找,找到返回对应坐标,找不到返回-1,如下:

var myStr = "I,Love,you,Do,you,love,me"

var index = myStr.indexOf("you")// 7 ,基于0开始,找不到返回-1

第二个函数:lastIndexOf(),它从字符串的末尾开始查找,找到返回对应坐标,找不到返回-1,如下:

var myStr = "I,Love,you,Do,you,love,me"

var index = myStr.lastIndexOf("you")// 14

以上两个函数同样接收第二个可选的参数,表示开始查找的位置。

5、字符串替换

单单查到字符串应该还不会停止,一般题目都还经常会遇到让你查到并替换为你自己的字符串,例如:

var myStr = "I,love,you,Do,you,love,me"

var replacedStr = myStr.replace("love","hate")//"I,hate,you,Do,you,love,me"

默认只替换第一次查找到的,想要全局替换,需要置上正则全局标识,如:

var myStr = "I,love,you,Do,you,love,me"

var replacedStr = myStr.replace(/love/g,"hate")//"I,hate,you,Do,you,hate,me"

6、查找给定位置的字符或其字符编码值

想要查找给定位置的字符,你可以使用如下函数:

var myStr = "I,love,you,Do,you,love,me"

var theChar = myStr.charAt(8)// "o",同样从0开始

同样,它的一个兄弟函数就是查找对应位置的字符编码值,如:

var myStr = "I,love,you,Do,you,love,me"

var theChar = myStr.charCodeAt(8)//111

7、字符串连接

字符串连接操作可以简单到用一个加法运算符搞定,如:

var str1 = "I,love,you!"

var str2 = "Do,you,love,me?"

var str = str1 + str2 + "Yes!"//"I,love,you!Do,you,love,me?Yes!"

同样,JavaScript也自带了相关的函数,如:

var str1 = "I,love,you!"

var str2 = "Do,you,love,me?"

var str = str1.concat(str2)//"I,love,you!Do,you,love,me?"

其中concat()函数可以有多个参数,传递多个字符串,拼接多个字符串。

8、字符串切割和提取

有三种可以从字符串中抽取和切割的方法,如:

第一种,使用slice():

var myStr = "I,love,you,Do,you,love,me"

var subStr = myStr.slice(1,5)//",lov"

第二种,使用substring():

var myStr = "I,love,you,Do,you,love,me"

var subStr = myStr.substring(1,5)//",lov"

第三种,使用substr():

var myStr = "I,love,you,Do,you,love,me"

var subStr = myStr.substr(1,5)//",love"

与第一种和第二种不同的是,substr()第二个参数代表截取的字符串最大长度,如上结果所示。

9、字符串大小写转换

常用的转换为大写或者小写字符串函数,如下:

var myStr = "I,love,you,Do,you,love,me"

var lowCaseStr = myStr.toLowerCase()//"i,love,you,do,you,love,me"

var upCaseStr = myStr.toUpperCase()//"I,LOVE,YOU,DO,YOU,LOVE,ME"

10、字符串匹配

字符串匹配可能需要你对正则表达式有一定的了解,先来看看match()函数:

var myStr = "I,love,you,Do,you,love,me"

var pattern = /love/

var result = myStr.match(pattern)//["love"]

console.log(result .index)//2

console.log(result.input )//I,love,you,Do,you,love,me

如你所见,match()函数在字符串上调用,并且接受一个正则的参数。来看看第二个例子,使用exec()函数:

var myStr = "I,love,you,Do,you,love,me"

var pattern = /love/

一、不定项选择题(每题3分,共30分)\x0d\x0a1.声明一个对象,给它加上name属性和show方法显示其name值,以下代码中正确的是(D)\x0d\x0aA.varobj=[name:"zhangsan",show:function(){alert(name)}]\x0d\x0aB.varobj={name:”zhangsan”,show:”alert(this.name)”}\x0d\x0aC.varobj={name:”zhangsan”,show:function(){alert(name)}}\x0d\x0aD.varobj={name:”zhangsan”,show:function(){alert(this.name)}}\x0d\x0a2.以下关于Array数组对象的说法不正确的是(CD)\x0d\x0aA.对数组里数据的排序可以用sort函数,如果排序效果非预期,可以给sort函数加一个排序函数的参数\x0d\x0aB.reverse用于对数组数据的倒序排列\x0d\x0aC.向数组的最后位置加一个新元素,可以用pop方法\x0d\x0aD.unshift方法用于向数组删除第一个元素\x0d\x0a3.要将页面的状态栏中显示“已经选中该文本框”,下列JavaScript语句正确的是(A)\x0d\x0aA.window.status=”已经选中该文本框”\x0d\x0aB.document.status=”已经选中该文本框”\x0d\x0aC.window.screen=”已经选中该文本框”\x0d\x0aD.document.screen=”已经选中该文本框”\x0d\x0a4.点击页面的按钮,使之打开一个新窗口,加载一个网页,以下JavaScript代码中可行的是(AD)\x0d\x0aA.\x0d\x0aB.\x0d\x0aC.\x0d\x0aD.\x0d\x0a\x0d\x0a\x0d\x0a5.使用JavaScript向网页中输出hello,以下代码中可行的是(BD)\x0d\x0aA.\x0d\x0adocument.write(hello)\x0d\x0a\x0d\x0aB.\x0d\x0adocument.write(“hello”)\x0d\x0a\x0d\x0aC.\x0d\x0ahello\x0d\x0a\x0d\x0aD.\x0d\x0a\x0d\x0adocument.write(“hello”)\x0d\x0a\x0d\x0a\x0d\x0a6.分析下面的代码:\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0afunctionwriteIt(value){document.myfm.first_text.value=value}\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a以下说法中正确的是(CD)\x0d\x0aA.在页面的第二个文本框中输入内容后,当鼠标离开第二个文本框时,第一个文本框的内容不变\x0d\x0aB.在页面的第一个文本框中输入内容后,当鼠标离开第一个文本框时,将在第二个文本框中复制第一个文本框的内容\x0d\x0aC.在页面的第二个文本框中输入内容后,当鼠标离开第二个文本框时,将在第一个文本框中复制第二个文本框的内容\x0d\x0aD.在页面的第一个文本框中输入内容后,当鼠标离开第一个文本框时,第二个文本框的内容不变\x0d\x0a7.下面的JavaScript语句中,(D)实现检索当前页面中的表单元素中的所有文本框,并将它们全部清空\x0d\x0aA.for(vari=0i\x0d\x0a\x0d\x0a\x0d\x0afunctioncloseWin(){\x0d\x0a//在此处添加代码\x0d\x0aif(confirm(“确定要退出吗?”)){\x0d\x0awindow.close()\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a2、写出简单描述html标签(不带属性的开始标签和结束标签)的正则表达式,并将以下字符串中的html标签去除掉(15分)\x0d\x0avarstr=“这里是div

里面的段落”\x0d\x0a//\x0d\x0a\x0d\x0avarreg=//gi\x0d\x0avarstr=“这里是div

里面的段落”\x0d\x0aalert(str.replace(reg,”"))\x0d\x0a\x0d\x0a3、完成foo()函数的内容,要求能够弹出对话框提示当前选中的是第几个单选框。(10分)\x0d\x0a\x0d\x0a

\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0afunctionfoo(){\x0d\x0a//在此处添加代码\x0d\x0avarrdo=document.form1.radioGroup\x0d\x0afor(vari=0i\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0a4、完成函数showImg(),要求能够动态根据下拉列表的选项变化,更新图片的显示(15分)\x0d\x0a\x0d\x0a\x0d\x0afunctionshowImg(oSel){\x0d\x0a//在此处添加代码\x0d\x0avarstr=oSel.value\x0d\x0adocument.getElementById(“pic”).src=str+”.jpg”\x0d\x0a}\x0d\x0a\x0d\x0a\x0d\x0a

\x0d\x0a\x0d\x0a城市生活\x0d\x0a都市早报\x0d\x0a青山绿水\x0d\x0a

回答于 2022-12-14