快手前端一面 暑期实习 面经 详细介绍
基本信息
时间:2023.6.15
时长:54min
base:帝都
面试岗位:前端 暑期实习
问题
- 自我介绍
- 你还有一个作品集,尝试讲解开源框架,这是你做的吗?
- 你的作品集里面有Vue的精讲,你对Vue的理解是?是看源码多一点吗?(我连忙解释说,不是Vue的精讲,而是xxxx)
- 所以你讲的内容是?
- 你是什么时候开始学习前端的?
- 找实习有投递后端吗?(没有,只投递了前端)
- 有一个场景,10个组件都调用了同一个接口,那么怎么办,不更改组件内在的逻辑,如何让请求只发一次?(我后面说在重新封装axios,然后我提到了拦截URL,后面经过面试官提醒想到了请求拦截器)
- 了解NodeJS,了解大概有多少?
- 部署到CentOS,后端是用Java吗?还是Node相关?
- 前端如何部署到Nginx的?(我提到了location,try_files,root等等)
- 你刚刚提到了一些概念如location,反向代理,history等等,那你前端是Vue项目吗?(是的)
- 你的vue项目你刚刚提到了打包,那是webpack打包生成dist吗?
- 生成的dist如何部署到后端的呢?
- 你这个路由重定向是如何处理的?就比如说/a /b?
- 本质上Vue项目没有做路由分发,都是通过nginx来完成吗,如果是node环境下有没有做关于history的配置?(没有在node侧做配置,就没有涉及到node)
- 刷新会显示404,从/不会404这种情况遇到过吗?怎么去解决刷新可以正常显示呢?(我严重怀疑面试官不知道try_files,已经解释好几次了,最开始提到nginx的时候我就解释了try_files。。。)
- 然后面试官问,脱离nginx该如何解决这个问题,换tomcat,换apache该如何办呢?(事实上,tomcat就是当404的时候重定向到index.html即可,apache我没用过,估计也是加一个配置,但是面试官想不用这个静态资源直接在Vue中解决,我是真的不会)
- node中有没有用过history相关的?
- 刚刚提到了反向代理,那么反向和正向的区别是什么?
- 部署服务器的时候有域名吗?(最开始是IP,后面是域名,再后面是HTTPS也实现了)
- https当时是怎么配置的?(腾讯云,直接一粘贴完事)
- 所以你的https是nginx实现的?
- 你能说一下https握手的全流程吗?
- 解释一下证书和签名的概念?第三方劫持https是如何做预防的?(不会,这俩我都不会,直接下一题)
- http版本有了解哪些吗?(http1.0 1.1 2.0 3.0,队头阻塞,服务端推送,头部压缩,range断点续传,cachecontrol等等)
- 你刚刚提到了队头阻塞,那么什么是队头阻塞呢?
- 提到了http 几.0解决了?
- http2.0怎么还有队头阻塞,能说一下嘛?
- 刚刚提到了头部压缩,能讲一下是什么方式来进行压缩?(我记得是gzip,但是这方面我没有做过多的理解)
- 刚刚提到了缓存的概念,那能详细解释一下缓存吗?
- 打断一下,直接说协商缓存就行了,强制缓存不说,时间有限
- 那如果etag改了,last-modify没改这种情况呢
- 为啥有了last-modify还要有etag呢?
- 命中协商缓存状态码是多少?(304)
- 那命中强缓存状态码平时有注意吗?(没注意,刚查了一下 200)
- 以3开头的状态码还有哪些?
- vue有读过源码吗?(读过keep-alive)
- 那你讲一下keep-alive源码
- keep-alive的源码中从渲染模式来讲和传统组件有什么不同?它的render函数有了解吗?(没有了解render,我只看了缓存)
- keep-alive如何去处理slot的?(不会,我看的重点在缓存那块)
- 那还看过哪些其他的源码?刚刚提到了模板编译,对模板编译的了解有哪些?(没有了解模板编译)
- 响应式原理有了解过吗?
- get中收集的内容是什么呢?(我回答的watcher)
- notify中去如何执行这些watcher去更新视图,有了解过吗?
- 你还当过老师是吗?(是的,数学老师)
- 是实习是吗?(是的 2021的事)
- 你能说一下虚拟DOM和真实DOM的好坏有什么见解?
- vue3有了解过吗?
- vue2最外层有一个div,vue3不受限制,知道为什么吗?(具体为啥我不知道,我只知道用fragment实现的)
- 写过dockerfile吗?
- 了解挺全面啊。。后端了解这么多,你为啥做前端呀?(我算法不行,所以前端,但是我现在算法起来了,但是临近秋招不能乱转了,我只说的)
- 说一下这个JWT吧
- 是JSON web token吧(对对对,我刚刚说成了Java web token,哈哈哈)
- 它的组成是几部分呢?(三部分,签名算法,内容,签名)
- 相比普通token有什么优点吗?(不好意思呀,我没用过普通token,我直接jwt token好吧)
- 那jwt有啥缺点吗?
- 既然用了jwt,还用redis,那这个redis是什么时候用呢?
- 所以jwt的缺点是?
- jwt传输过程中放到哪里的?(放到请求头的一个k-v对,反正不是cookie,名字可以随便取,一般是A开头的一个单词,我忘了叫啥,我当时这么说的)
- 如果校验失败,返回状态码是多少?(我说的401,但是实际是后端定的,想多少就多少,但是一般401)
- 写道题
手撕代码
//这道手撕代码有点简单。。写一个compose函数
//其实是力扣一道题的改编:https://leetcode.cn/problems/function-composition/
var compose = function() {
const arr = [...arguments]
return function(x) {
for(let i = arr.length - 1; i >= 0; i--) {
x = arr[i](x)
}
return x
}
};
//2分钟写出来之后,面试官说用reduce实现一下,又花了2分钟写了一下:
var compose = function() {
const arr = [...arguments]
return function(x) {
return arr.reduce((pre,cur) => cur(pre),x)
}
};
//运行结果正确,面试结束
62. 反问环节(问了技术栈,业务是啥) 63. 有投递其他公司吗?(有,介绍自己的offer情况)
OK、下机、拜拜,谢谢你的时间
总结
总体而言,难度是我面试过的所有面试中,难度最高的,比字节还高。
可能就是撞到出难题的面试官了,也算是运气不好。
#面经##快手信息集散地##快手#