携程前端开发暑期实习一面

跟面试官聊了挺多,问的问题是真的多...而且很细致。写几个没答好的问题吧..

微信开发中unionid和openid的区别?

  • openid:一个用户+一个微信应用(微信开发平台下的应用,如公众号,小程序)唯一确定一个openid
  • unionid:一个用户唯一确定一个unionid(换言之,一个用户在微信平台下所有的unionid都是相同的)

ps:pc端和客户端同一用户获取的openid不一样

ES6中Map和Object的区别?WeakMap?

共同点:存储键值对的数据结构

不同点

  • 键类型:Object中的键类型只能是字符串或者Symbol;而Map的键类型可以是任何类型;WeakMap的键类型只能是对象
  • 遍历顺序:Object中的遍历顺序是不确定的;而Map的遍历顺序跟插入顺序相同,可以直接实现LRU缓存;WeakMap的键不可遍历
  • 键引用:Map中的键是强引用,键跟内存地址绑定;WeakMap中的键是弱引用,在键的引用计数清零时会被垃圾回收
Map和WeakMap

左:Map 右:WeakMap

有用过JS中的装饰器模式吗?(对装饰器模式不太熟悉,后续有时间补充一下相关知识)

在不改变对象基础上,动态为对象添加行为或者功能。ES6引入语法糖"@"。装饰器可以分为三类:函数装饰器,类装饰器,类成员装饰器。是类继承的一种替代方案,比继承更简洁且易于管理。

@readonly

webpack中loader和plugin的区别?(webpack知识点是真的枯燥,真没看多少)

作用:loader加载器主要是负责加载各种非js文件并进行编译,打包和压缩;plugin插件则是补足webpack原本无法完成的一些其他任务,如打包优化,环境变量注入等

作用时间:loader在webpack打包文件前作用;plugin作用贯穿整个生命周期,监听webpack广播出的生命周期事件,使用webpack API实现功能扩展

使用方法:webpack配置文件中,loader在rules字段对不同类型文件进行解析规则指定;plugins则在plugins字段以新建插件实例的方式引入

scss文件在webpack中的编译打包过程是怎么样的?

  1. 加载scss:sass-loader在js文件中根据模块化规则找到scss文件
  2. 编译scss:sass编译器将scss编译为css
  3. css-loader解析:根据css-loader对css文件进行加载并解析其中的@import和url()
  4. style-loader工作:将css样式插入html文件中

POST请求会返回几次?

两次,一次先发送header,返回100 continue,再发送body,返回200 OK。

后端传1w条数据,前端如何处理?

分片渲染(setTimeout / requestAnimationFrame)

将时间分片,隔一段时间插入一些DOM并做一次渲染。

文档碎片(document.createDocumentFragment)

调用多次document.body.append(),每次都要刷新页面一次。效率也就大打折扣了,而使用document_createDocumentFragment()创建一个文档碎片,把所有的新结点附加在其上,然后把文档碎片的内容一次性添加到document中,这也就只需要一次页面刷新就可(fragment存在于内存中)

虚拟列表(仅渲染视窗内区域)

根据列表项高度计算视窗内可渲染列表项数,动态维护需要展示的列表项,减少渲染压力。

https://codesandbox.io/s/virtuallist-1-rp8pi?file=/src/components/VirtualList.vue

全部评论
咱应该是同一个面试官吧,题目高度相似
点赞 回复 分享
发布于 2023-03-17 16:01 天津
先评论一下,别丢了
点赞 回复 分享
发布于 2023-03-17 16:14 山西
m
点赞 回复 分享
发布于 2023-03-17 16:17 广东
M
点赞 回复 分享
发布于 2023-03-17 19:00 福建
m
点赞 回复 分享
发布于 2023-03-17 20:47 北京
请问友友问的是装饰器还是设计模式中的装饰器模式呀,这块有点没理解
点赞 回复 分享
发布于 2023-03-18 12:07 吉林
m
点赞 回复 分享
发布于 2023-03-25 23:36 湖北
虚拟列表(仅渲染视窗内区域) 这个是要自己完全手写出来吗?还是给了部分代码呢
点赞 回复 分享
发布于 2023-03-29 16:10 辽宁

相关推荐

先上来两道经典手撕lru:代码基本完成时候,有一个bug调将近5分钟没出来,面试官提示一下才解决。思路是hashmap+linkedlist,在linkedlist的remove操作时候没把int转成Integer导致按照下标删除元素了。最长回文串:面试说时间已经不够了,让我说一下思路就行,我直接说了中心扩散法,最优解是dp,但当时想着有一个解了,直接没提dp。开始问项目我看你有一段实习经历是吧?我回答说那是一个自己写的项目(难道不会是以为我有一段实习经历,才放我面试的)看你项目中有发博文功能,假如你有上万条评论,你该如何解决?分页展示你使用过k8s么?没,用过docker从这里开始已经汗流浃背,胡言乱语了你项目有遇到什么新瓶颈么?练手项目你项目一个人写的还是多人协作的?一个人你介绍一下你项目好用第三方框架?redssion以及消息队列你能分享一个你最近学过有意思最新的技术?不算什么新技术,最近在学微服务你说了微服务,你觉得你这项目为啥需要拆分?遇到热点服务,可以减轻压力反问还有什么欠缺或者学习的么面试官说前面代码能力是没问题的,第二题可以了解dp的方法并且可以改善代码命名规范。然后说了希望有多人协作能力,并点评我的项目仅仅使用靠调方法没啥亮点,要是能提到使用redis数据结构解决什么问题会比较亮眼。虽然面试官人很和蔼,感觉已经凉不能再凉了,估计是想要一个有工作经验的2024.10.17 20:00   历时40分钟2024.10.20           流程结束
投递腾讯等公司10个岗位
点赞 评论 收藏
分享
评论
20
172
分享
牛客网
牛客企业服务