忘记录屏了,只写有点印象的
getBoundingClientRect
只知道这个),后面想起来还有offsetTop和scrollTop那些面了 28 分钟吧大概
反问
第一次面试,还行吧这样
综合评价,面的比较简单,都是一些基础八股,不过我写项目的时间更多,所以不大会答
面试官有很多有意停顿的时间,估计是在想让我答的全面一点,奈何我不会啊,很多问题没答出来,应该是挂了。
技术方面的,人事可能不懂,就照着简历问的
jslet arr = [1,1,1,2,2,3,3]
// Set 去重
arr = Array.from(new Set(arr))
// filter + indexOf 去重
arr = arr.filter((item,index) => arr.indexOf(item) === index)
bashgit init git add git commit -m <commit message> git remote add <remoteName> <remoteUrl> git push <remoteName> git checkout <branchName>
没了,就20分钟,显然面过一次之后熟练了很多,虽然都是简历上的内容
1.自我介绍
2.介绍项目,(这个好像太长了,不能一直讲个不停)
3.通用模板怎么样
4.v-scroll指令怎么写的 intersectionObverser
5.图片懒加载怎么实现的
6.性能优化,除了简历上的之外,还有其他的吗(CDN、浏览器缓存)
7.强缓存和协商缓存的区别
8.浏览器资源缓存的位置有哪些 (四个 Disk Cache、Memory Cache、Service Worker、Push Cache)
9.浏览器点刷新按钮,重新输入URL和按F5的区别
10.移动端适配(rem单位、媒体查询)
11.vw、vh的区别
12.flex布局
13.flex:1是哪几个属性的缩写(这也太离谱了)
14.三栏布局(左右子元素设置浮动,中间元素设置auto;用flex布局)
15.JS的数据类型
16.基本数据类型和引用数据类型的区别(不知道)
17.数据类型检测(typeof instanceof关键字)
18.typeof能判断所有的类型吗(不知道)
19.判断数组的方式(不知道)
20.new关键字的原理(不知道)
21.我知道的ES6特性
22.箭头函数和普通函数的区别 (不知道)
23.你知道箭头函数有自己的this指向么?
24.原型和原型链的理解
25.事件循环
26.浏览器的存储位置 (cookie、localStorage、sessionStorage、WebSQL和indexDB)
27.localStorage如何实现过期
1.自我介绍
2.解释一下什么是闭包
3.闭包有什么用
4.浏览器事件循环和Node.js事件循环 (不知道Node.js)
5.JS中的原型和原型链的区别
6.new关键字的原理
7.箭头函数和普通函数的区别
8.对Promise的理解
9.你有了解过Promise.all和Promise.race吗
10.模块化,ES模块和Commom.js的差异(不是特别清楚)
11.了解过tree shaking吗(不知道)
12.Vue3的响应式原理
13.Vue3为什么要用Proxy而不是Object.defineProperty
14.服务端渲染和客户端渲染的区别
15.XHR和Fetch的底层原理(不知道,面试官提示了Fetch的底层就是Promise,我恍然大悟)
16.为什么用Vite,Vite为什么比Vue Cli快
17.Git命令,rebase和merge的区别,不知道
18.开发项目的流程
19.HTTP2比HTTP1.1好在哪
这把面试官不是一面那个面试官,换了一个
1.自我介绍
2.介绍项目
3.怎么和后端沟通
4.项目目录组织,面试官看我这边说不出来就换了一个问题
5.打包是怎么拆分的
6.路由鉴权怎么做的 (在寝室旁边的空会议室面试,这个时候有人进来了,给我整的有点慌)
7.代码管理
8.管理分支的方式
9.前端部分的学习,大概接触了多久
10.其他的项目或者实践
11.做项目的出发点
12.前端或者后端,关注那些比较新的技术
13.对于区块链这个业务,有没有接触
14.方向选择,前端会去做哪方面(电商或者基建或者其他)
15.中短期技术成长计划
16.明年毕业么,25年,课程结束了么
17.在哪个城市,考虑未来工作城市
反问
区块链具体做那块业务
工作时间
1.自我介绍
2.有实习经历吗
3.前后端分离的工作流程了解吗
4.封装接口从哪些方面考虑
5.响应拦截、请求拦截
6.登录注册,一整个业务流程
7.后台管理系统,权限控制,菜单信息不一样的话,如何实现
8.样式这边,有根据UI一比一还原么,怎么处理的
9.如何对UI库进行样式定制,或者二次封装
10.vue的生命周期
11.父子组件通信方式
12.pinia和vuex有什么样的区别
13.ES6的话,用个哪些新特性
14.Git提交代码使用可视化还是命令行
15.协同开发,在同一个分支上有冲突,合并代码如何解决
16.为什么之前没有去公司实习
1.自我介绍
2.实习计划 (一周五天 六个月以上)
3.什么时候可以开始实习
4.介绍一下之前做的项目,简历上的项目是自己做的么
5.与后端的协作流程
6.做项目时的难点
7.比赛的结果 (没奖)
8.为什么选择做这个项目
9.备选的赛题?
10.为什么选择他们作为队友
11.学习前端的时间
12.什么时候开始面试实习机会
13.之前面的结果怎么样
14.面试上的收获 (背了面试题,会说话了一点)
15.沟通能力的提升空间还有很大么
16.会参加社团活动或者班级活动么
17.自己会做笔记或者技术分享么
18.现在有在面试其他的公司么
19.实习想要有什么提升
20.工作城市,现在在投哪些城市
21.除了学习之外有什么兴趣爱好
22.正常一天的作息安排
反问
1.前端实习薪资怎么样 (房补1000?)
2.140-220一天是怎么划分的 (学历划分,靠?)
这个面试官问法还不想之前那种,像是直接给个八股题目问,他的问题还在话里,要自己理解是什么东西,我下面就写的是我理解的问题是什么
狠狠地拷打哦,问懵了
1.自我介绍
2.项目前后端都是我自己写的么(前端完全由我写)
3.项目模板如何评估去做(意思是参考了哪些产品,考虑了哪些点)
4.封装了哪些组件
5.怎么做的定位(我这边说的是有一个浏览器API,然后面试官就让我分析为什么它可以在没有GPS芯片的情况下,实现较为精确的定位)
6.前端请求到后端的过程的网络链路是怎么样的,有什么环节(问懵了)
7.如果这个地址是Https的,如何验证对方不是一个伪造的网站(CSRF?不知道,只知道有个CSRF Token)
8.HTTPS是如何工作的(我就说了个有个加密的RSA,面试官一听应该是知道我不会,就换到下面这个问题了)
9.对称加密、非对称加密、哈希加密有什么区别(问懵了)
10.代码混淆的过程做了什么,比如tensor的原理是什么
11.Java、JavaScript、TypeScript有什么区别(说不清)
12.TS的类型检查在什么环节、Java的类型检查在什么环节(不知道)
13.浏览器的内存管理,垃圾回收机制(不会)
14.浏览器怎么看内存占用
15.什么样的情况下会导致内存无法回收(闭包)
16.页面滚动到哪了有些什么样的方式去获取
17.如果说页面宽度高度变化了,像传统的使用offsetTop、scrollTop这种去做懒加载的,如何去动态改变(我说的是再加个事件监听)
18.哪些事件会导致浏览器宽高变化(除了跳转窗口大小、放大缩小、开一个开发者工具窗口占用了这些之外还有哪些操作会导致,实在想不到,说了个系统分辨率变化缩放变化这些)
19.有什么监听浏览器事件行为的API,不光是resize,比如切换标签页这种(不知道,我只知道在MDN上看到过监听切换标签页的API)
到这里七月基本就没有面试了,回去休息一会(玩)继续面试
反问
这把纯不会,不写了没啥写的
几个有印象的问题
不定选择题
下面表达式中,结果为NaN的是 B
下面哪些方法可以改变自身数组 A B C
下面对HTTP状态码描述正确的是 B C
['1','2','3'].map(parseInt)返回数组为 A
下面哪些样式会创建BFC ABC(AI说IE环境可以用)D
填空题
jsconsole.log('start')
setTimeout(() => {
console.log('1')
new Promise((resolve) => {
console.log('2')
resolve()
}).then(() => {
console.log('3')
})
},0)
new Promise((resolve,reject) => {
console.log('middle')
reject()
}).then(() => {
console.log('4')
}).catch(() => {
console.log('5')
setTimeout(() => {
console.log('6')
},0)
})
输出
start middle 5 1 2 3 6
jsconst shape = {
radius: 10,
diameter() {
return this.radius * 2
},
perimeter: () => 2*Math.PI*this.radius
}
const a = shape.diameter()
const b = shape.perimeter()
console.log(a,b)
输出
20 NaN
[ 1, 10, 20, 3, 4, 78, 8]
简答题
es5中的类和es6中的class有什么区别
给一个整型数组nums,在数组中找出三个数组组成的最大乘积,并输出这个乘积
给定一个字符串,找出不含有重复字符的最长字串长度
自我介绍
React的常见hook
跨组件状态怎么管理
Redux和Zustand的区别(不知道,反正我觉得更简洁)
Webpack和Vite的区别
ESBulid为什么热更新更快
ESMoudle和CommonJS的应用场景区别
移动端响应式布局怎么实现
媒体查询设了几个档
移动端图片使用几倍图
git revert rebase reset的区别
git reset --soft 和 git reset --hard的区别
单页应用优化
组件按需加载,比如引入需要Antd中的一个组件,如何按需加载
组件库ESMoudle和CommonJS哪种可以按需加载(为什么ESMoudle可以实现Tree Shaking,CommonJS支持动态加载模块,所以不行)
事件循环(浏览器和Node.js的)
Node.js的组成部分
Nuxt.js和Next.js等SSR框架的作用
代码题
快一个小时,面试官相当有耐心啊,题目都挺简单的,不过二面难说
后面了解到,这个人是古茗前端的leader,挺牛的
大概浓缩一下
header和footer各自占领屏幕所有宽度,高度固定, 中间的container是一个三栏布局。 三栏布局两侧宽度固定不变,中间部分自动填充整个区域。 中间部分的高度是三栏中最高的区域的高度。
const quickSort = function(sortArr) { }
假设你正在爬楼梯。需要n阶你才能到达楼顶。
每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?
js示例 1:
输入:n=2
输出:2
解释:有两种方法可以爬到楼顶。
1.1 阶+1 阶
2.2 阶
示例 2:
输入:n=3
输出:3
解释:有三种方法可以爬到楼顶,
1.1 阶+1阶+1 阶
2.1 阶+2 阶
3.2 阶+1 阶
function climStairs(n) {
}
jsfunction duplicateRemoval(inputStr){
}
jsconst throttle = (fn,wait) => {
return function(...args) {
}
}
jsconsole.log("start");
setTimeout(() => {
console.log("timer1");
Promise.resolve().then(() => {
console.log("promise1");
});
}, 0);
setTimeout(() => {
console.log("timer2");
Promise.resolve().then(() => {
console.log("promise2");
});
}, 0);
Promise.resolve().then(() => {
console.log("promise3");
});
console.log("end");
js// 定义一个动物类
function Animal (name){
// 属性
this.name = namel 'Animal';
// 实例方法
this.sleep=function(){console.log(this.name+'正在睡觉!');}
// 原型方法
Animal.prototype.eat = function(food) { console.og(this.name +'正在吃: '+ food); }:
Cat 需要继承Animal,需要实现5种继承方式,分别是:
1、原型继承,思路:将父类的实例作为子类的原型
2、构造继承,思路:使用父类的构造器来增强子类实例
3、实例继承,思路:为父类实例添加新特性,作为子类实例返回
4、组合继承(结合原型链继承和借用构造函数继承组合起来实现的继承)思路:通过父类构造,继承父类的属性并保留传参,然后通过将父类实例作为子类
原型,实现函数复用
5、寄生组合继承(结合原型链继承和构造函数继承的方法,同时自己创建一个对象,并且让这个对象的原型指向父类构造函数的prototype.实现寄生组合继承)
function Cat(){}
反问
反问
反问
1.了解了公司基本情况
这个挺可惜,被我作没了,表现出嫌弃这个岗位,不出意外的挂了🥲
1.跨域问题是什么,解决方案有哪些
2.预检请求是什么
3.vue的nextick是什么,和mounted有什么区别
4.其他一些八股,就没记了
1.CSS中&符号代表什么
2.了解预处理器么(应该是提醒我是预处理器的东西)
3.选择器写法的区别
css.a {
}
.a .b {
}
.a.b {
}
.a,.b {
}
GPT答案
.a
:
- 选择所有具有类名“a”的元素。
.a.b
:
- 选择具有类名“a”的元素内部的具有类名“b”的子元素。这是后代选择器,表示在“.a”元素的后代中查找“.b”元素。
- 例如:
html<div class="a"> <p class="b">这是一个段落。</p> </div>
在这个例子中,段落元素
<p class="b">
会被选中。
.a.b
:
- 选择同时具有类名“a”和“b”的元素。
- 例如:
html<div class="a b">这是一个元素。</div>
在这个例子中,这个
<div>
元素会被选中,因为它同时有类名“a”和“b”。
.a,.b
:
- 选择所有具有类名“a”的元素以及所有具有类名“b”的元素。这是一种分组选择器,可以同时对多个不同的选择器应用相同的样式。
- 例如:
html<div class="a">第一个元素。</div> <div class="b">第二个元素。</div>
在这个例子中,两个
<div>
元素都会被选中。
4.反转字符串(这个都不会,属实是尴尬,狂补下js数组和字符串方法)
jslet s = "abcd";
console.log(s.split('').reverse().join(""));
5.替换字符
jslet s = '1367797'
// 注意点为,replace可以使用字符串和正则两种方式,且有replace和replaceAll两个方法
// 方式一
s = s.replace(/1/g,'')
// 方式二
s = s.replaceAll('1', '')
小厂面试,给我震惊了,自己居然这么多基础知识不牢
运气也开始好一些了,最好面完美团都快放弃了,结果是人生一个实习offer!
自我介绍,这步面试官说在看我掘金,刚好上面一堆八股文
项目介绍,自然是万能的网盘项目
提了一嘴蓝桥杯,实在没办法说这个,哈哈哈
输出题1
输出结果:24,这里我以为是42 ,主要是var dbl = json.dbl这块,我以为他会执行全局,然后实际上还是指向json,因为
.
运算符
jsglobalThis.val = 1; var json = { val: 10, dbl() { this.val *= 2; }, }; json.dbl(); var dbl = json.dbl; dbl(); json.dbl.call(globalThis); console.log(globalThis.val + json.val);
输出题2
输出结果:TomundefinedJohn,这里犯了几个错误,第一是未传入参数应该是undefined而不是null,我这里以为是null,第二是字符串拼接会拼接所有东西,不管是null还是undefined,所以结果就是TomundefinedJohn
jsfunction C1(name) { if (name) this.name = name; } function C2(name) { this.name = name; } function C3(name) { this.name = name || "John"; } C1.prototype.name = "Tom"; C2.prototype.name = "Tom"; C3.prototype.name = "Tom"; console.log(new C1().name + new C2().name + new C3().name);
ES6的新东西
输出题3
这题好像对了,这里考验var关键字变量提升,作用域优先级问题
jsconsole.log(a); var a = 1 console.log(a); function test() { console.log(a); let a } test()
输出
undefined 1 // 报错 ReferenceError
CSS的选择器有哪些,优先级是怎么样
实现CSS水平垂直居中
实现CSS实现梯形
z-index设置失效的情况
Vue2、Vue3的区别
跨域问题,解决方案
问了下算法,我不会,改了个题目
事件循环原理说一下
输出题4
这里我不知道nextTick是宏任务还是微任务,问了下面试官,也有错误的地方
刚好在理解new Promise的过程不理解,我才知道,Promise的构造函数不是微任务,而是同步代码,所以一些顺序反了
jsconsole.log("1"); setTimeout(function () { console.log("2"); process.nextTick(function () { console.log("3"); }); new Promise(function (resolve) { console.log("4"); resolve(); }).then(function () { console.log("5"); }); }); process.nextTick(function () { console.log("6"); }); new Promise(function (resolve) { console.log("7"); resolve(); }).then(function () { console.log("8"); }); setTimeout(function () { console.log("9"); process.nextTick(function () { console.log("10"); }); new Promise(function (resolve) { console.log("11"); resolve(); }).then(function () { console.log("12"); }); });
输出
js1 7 // 7 6 顺序反了 6 8 2 4 // 4 3 顺序反了 3 5 9 11 // 11 10 顺序反了 10 12
小程序、APP内嵌网页如何判断设备类型,如IOS和安卓(UA)
反问
反问
自我介绍
项目难点
最大并发数控制(渡一有)
HTTP和HTTPS
内容传输上是对称加密
(豆包)
握手阶段(使用非对称加密)
- 客户端发起 HTTPS 请求,连接到服务器的 443 端口。
- 服务器收到请求后,将包含公钥的数字证书发送给客户端。
- 客户端验证数字证书的有效性,包括证书的颁发机构、有效期、证书链等。如果证书验证通过,客户端使用证书中的公钥对一个随机生成的对称加密密钥(也称为会话密钥)进行加密,并将加密后的密钥发送回服务器。
数据传输阶段(使用对称加密)
- 服务器接收到客户端发送过来的加密后的对称密钥后,使用自己的私钥进行解密,得到对称加密密钥。
- 之后客户端和服务器之间就可以使用这个对称加密密钥进行数据的加密和解密传输。对称加密算法(如 AES)在数据传输过程中提供了高效的加密和解密速度,确保了数据传输的效率。
证书验证阶段是对称加密还是非对称加密(网络这块实在是太差了基础)
对称加密有哪些算法
HTTPS怎么攻击
- 中间人共计
- 证书伪造攻击
- 降级为HTTP进行攻击
HTTP状态码,301 是什么,403 是什么
垂直居中的方式
position有哪些属性
absolute是根据什么来定位的
let var const有什么区别
实现new关键字
Promise输出题
反问
没太懂这个面试,像挂了又像没挂,可能后续有三面?
这次面试的不足,操作系统、Web Worker深度调研、Node.js学习
本文作者:pepedd864
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!