前言
本人现在大三菜鸡,想在暑期找一份实习锻炼锻炼自己,所以也去投了一下简历试了试面试emmm感觉自己还是太菜了呜呜呜,真的还得加强一下自己才行,特别是算法方面,太吃亏了呜呜呜。大家最近赶快投!!提前批!挂了也不会计入系统!以后再努力努力!!冲鸭!!
有兴趣可以看看俺整理的知识点或许有所帮助呢~祝大家早日实习上岸!!! juejin.im/post/5e5a75…
由衷感谢
CVTE
让我技术面都过了呜呜呜,明天HR面,希望不要让我挂了呜呜呜,可怜巴巴
“我自己是一名从事了6年web前端开发的老程序员(我的微信:web-xxq),今年年初我花了一个月整理了一份最适合2019年自学的web前端全套培训教程(视频+源码+笔记+项目实战),从最基础的HTML+CSS+JS到移动端HTML5以及各种框架和新技术都有整理,打包给每一位前端小伙伴,这里是前端学习者聚集地,欢迎初学和进阶中的小伙伴(所有前端教程关注我的微信公众号:web前端学习圈,关注后回复“2020”即可领取)。
总结
-
提前总结一下吧,这些面试让我感觉到emmm,他们都比较重视计算机网络,网络安全,框架原理方面的知识,HTTP协议,TCP握手,各种网络方面的东东...... 啊好多好多啊基础部分,每次都能问到新的不会的东东,爆哭
-
总之吧emmm还是基础得打好,框架原理还有node方面也需要重视。然后面试官会审视简历,大多会根据简历来问。所以不熟的没把握的千万不要写在简历上!!!
-
其次就是如果有自己的小项目就最好啦,面试官基础部分了解过后就会对项目进行提问啊,问问有什么亮点,自己遇到的难点,如何解决。他们很重视解决问题的能力。不过如果项目有明显的的不合理的地方或者不足,他们就会抓出来进行提问,问你将来怎么解决的之类的。
-
一般会问你是如何学习前端的,然后最近在看什么文章,最近在了解什么新的知识热点等等,平时的积累也是挺重要的,然后也会根据你说的内容来进行提问,所以有能力的话也可以视图引导面试官来提问你擅长的地方哈哈哈哈(手动狗头)
问的东西都偏向于基础,然后慢慢升华一下,到项目,到思维扩展,实际情景的应用等等。面经内容不全,大概就是这些吧!!哈哈哈凑活着看看!或许有帮助!
CVTE 一面(过)
电面,面试官很和蔼hhhh,全程都是以聊天的方式进行下去,问了一下项目也给了一些意见。哈哈哈哈印象最深的就是一直问我觉得自己哪里牛逼哪里牛逼hhhh
- HTTP1.1 HTTP 2.0
- TCP与HTTP有何区别
- TCP为何要三次握手
- 父元素绝对定位,子元素设置绝对定位,也可以生效吗
- 调试工具的performance和network
- js阻塞(
<script>
<link>
) - webpack流程
- es6
- 箭头函数this指向
- 事件监听中普通函数与箭头函数的this指向
- cookie
- localStorage能替代cookie吗
- 网络攻击csrf和xss
- 浏览器缓存
- etag与last-modify谁优先级高,为什么
- 不定宽高水平垂直居中
- 闭包
- 自执行函数
- for每隔时间打印数字
- cookie一般用来干什么
- H5特性
- url输入到渲染发生了什么
- React的事件机制
- 事件循环
- setTImeout一定准时吗
- 行内元素与块级元素
CVTE 二面(过)
视频面,这一面还是有点紧张的,突然看见一个戴着口罩的小帅哥,但就聊了聊,然后还是主要说的项目,然后针对项目的功能问了几个问题,也发现几个不足的地方,提出了挺多的建议的,很感谢这个面试官,看我做不出来算法题也很有耐心给我指导,感动,有一些细节的地方,深入理解的部分,见到我不会也不会为难我,就大概跟我解释一下,很棒!
- 为什么学前端
- 做过什么项目吗
- React的坑
- hooks
- 为什么React不学Vue做双向绑定
- React单向数据流有什么好的地方
- 跨域
- cors的options(如何缓存)
- localStorage如何设置过期时间
- 你如何判断登陆态过期
- 为什么不用cookie,用cookie有什么不好的地方
- http-only
- 如果聊天室发送消息网络卡顿,导致消息记录的时间错乱怎么办
- 你的项目封装了什么组件
- 了解node吗
- 事件循环有什么不同
- node的优势
- flex改变方向
- 垂直居中
- 原型链,有什么用,怎么判断
- 为什么nodejs是非阻塞的
- 如何判断一个方法是对象自己的还是原型链上的(hasOwnProperty)
- 算法题
// 根据实例输入输出矩阵规律完成以下 matrix 函数:
function matrix(n) {
}
matrix(n).forEach((item, i) => {
console.log(item);
});
// 示例 1
// 输入: 3 or 4
// 输出:
// [ 0, 2, 0 ]
// [ 2, 1, 2 ]
// [ 0, 2, 0 ]
// 示例 2
// 输入: 5 or 6
// 输出:
// [ 0, 0, 3, 0, 0 ]
// [ 0, 3, 2, 3, 0 ]
// [ 3, 2, 1, 2, 3 ]
// [ 0, 3, 2, 3, 0 ]
// [ 0, 0, 3, 0, 0 ]
// 示例 3
// 输入: 6 or 7
// 输出:
// [ 0, 0, 0, 4, 0, 0, 0 ]
// [ 0, 0, 4, 3, 4, 0, 0 ]
// [ 0, 4, 3, 2, 3, 4, 0 ]
// [ 4, 3, 2, 1, 2, 3, 4 ]
// [ 0, 4, 3, 2, 3, 4, 0 ]
// [ 0, 0, 4, 3, 4, 0, 0 ]
// [ 0, 0, 0, 4, 0, 0, 0 ]
复制代码
还是算法吃亏,这题没有写出来,面试官给了点思路,提示只需要搞定四分之一,然后可以进行翻转,虽然提示了,但还是做不出哈哈哈,面试完之后试了试才做出来(感谢面试官不挂之恩!)
以下是根据面试官给的提示做出来哒,就是先算好四分之一,然后进行翻转拼接
function matrix(n) {
// 求长度
let len = Math.ceil(n / 2)
let arr = Array.from({ length: len }, _ => Array.from({ length: len }, __ => 0))
let temp = null
// 算出四分之一的矩阵
for (let i = 0; i < len; i++) {
for (let j = 0; j < len; j++) {
if (i + j >= len - 1) {
arr[i][j] = len * 2 - i - j - 1
}
}
}
// 水平翻转,搞定上半部分
for (let row = 0; row < len; row++) {
temp = [...arr[row]].reverse().splice(1)
arr[row] = arr[row].concat(temp)
}
// 垂直拼接
temp = [...arr].reverse().splice(1)
arr = arr.concat(temp)
return arr
}
复制代码
字节跳动 (等一封感谢信呜呜呜,为什么不让我死心!)
视频面,还是算法吃了大亏嗷,全程题面,然后解释各种知识点,提问等,算法给了提示还是做不出来,唉,太蠢了
(为什么还不给我感谢信!!!让我有种错觉可以被捞!!!)
是在官网投的日常实习生,也不知道是不是因为不是内推的原因,自己感觉必挂了,但感谢信迟迟不到,爆哭,好歹呜呜呜我也...努力过嘛,哭(啊,算法!洗内!)
大概记得的就这些主要的吧
- block元素水平垂直居中
这里我采用了两种,一种是translate + absolute
,另一种是在修改body样式用flex,这里注意一定要把body的height
设置为100vh
不然会垂直居中不了
<body>
<div class="block"></div>
</body>
复制代码
- 读代码解释原因,然后说出浏览器事件循环与node事件循环等知识点
console.log('begin')
setTimeout(() => {
console.log('setTimeout 1')
Promise.resolve().then(() => {
console.log('promise 1')
setTimeout(() => {
console.log('setTimeout2 between promise1&2')
})
}).then(() => {
console.log('promise 2')
})
}, 0)
console.log('end')
// 答案是
/*
begin
end
setTimeout 1
promise1
promise2
setTimeout2 between promise1&2
*/
复制代码
- 实现求和(柯里化)
sum(1)(2)(3).sumOf() // 6
sum(1, 2)(3).sumOf() // 6
sum(1, 2, 3).sumOf() // 6
// 一下为答案
function curry() {
let argsList = [...arguments]
let fn = function () {
argsList.push(...arguments)
return fn
}
fn.sumOf = () => argsList.reduce((a, b) => a + b)
return fn
}
let sum1 = curry()
let sum2 = curry()
let sum3 = curry()
console.log(sum1(1, 2, 3).sumOf())
console.log(sum2(1)(2)(3).sumOf())
console.log(sum3(1, 2)(3).sumOf())
复制代码
- 读程序,并解释为什么,然后说一下上下文之类的各种知识
这里被坑了,没有注意到函数传了一个a
进去哈哈哈哈,然后说成了9 18 27
,尴尬~
var result = []
var a = 3
var total = 0
function foo(a) {
var i = 0
for (; i < 3; i++) {
result[i] = function () {
total += i * a
console.log(total)
}
}
}
foo(1)
result[0]()
result[1]()
result[2]()
// 答案是 3 6 9
复制代码
- 算法,实现全排列
输入"abc"返回他的全排列组合
以下为答案
var permute = function (nums) {
let path = []
let visited = Array.from({ length: nums.length }, _ => false)
let res = []
DFS(nums, 0, nums.length, path, visited, res)
return res
};
var DFS = function (nums, curSize, len, path, visited, res) {
if (curSize === len) {
res.push([...path])
return
}
for (let i = 0; i < len; i++) {
if (!visited[i]) {
visited[i] = true
path.push(nums[i])
DFS(nums, curSize + 1, len, path, visited, res)
visited[i] = false
path.pop()
}
}
}
复制代码
- 智力题:A,B抛硬币,正面赢,A先手,A赢得概率是多少
这个完全懵逼嗷,大家觉得是多少呢!
阿里 - 不知名部门(暴毙)
电面,这个十分可惜,还没开始准备直接暴毙
- React原理
- cookie的属性
- localStorage和sessionStorage的区别
- localStorage能跨域吗
- 重绘和回流
- httponly
- csrf 和 xss
阿里钉钉 - 主要为小程序(不合适)
视频面,主要聊了项目,然后问了比较多网络,以及安全的问题,团队主要是做小程序的,问了挺多小程序的东东,直接懵逼,主管还是猛嗷呜呜呜
- 小程序原生api
- https加密原理
- 好的登录态的实现
- React的优势
- setState之后发生了什么
- React性能优化
- hook的原理(如何实现)
- 小程序运行池
- 微信浏览器有什么区别
- Taro编译的原理
- 事件代理(捕获阶段可以吗)
- React的事件委托到哪
阿里CBU(初面)
电面,感觉怪凶的哈哈哈,前面问的好好的,突然问起了
Vue
瞬间暴毙,原来是看到我简历上描述有个项目使用Vue开发所以问,以后一定不能吧这些不熟悉的放在简历上了!
- 事件委托
- 深浅拷贝的区别
- Object.assign
- BFC
- Fiber
- virtual dom
- diff算法
- hook
- webpack流程
- webpack打包出来的js的结构,内容是什么
- babel编译原理
- node的优势
- node中,async/await,generator,promise的区别,联系
- 多用户来访问聊天服务器,你有1000台服务器,应该怎么办(坑啊)
- Vue双向绑定如何实现
- Vue数据流
- Vue与React的区别
- 一堆Vue.... (还说了句,你不会的还往简历上写?以后不敢了!哭)
阿里飞猪(初面)
电面,这个是聊得最久的呜呜呜,手机都烫了!面试官很好人,emmm就真的很棒棒,全程不会刁难你的那种,不会咄咄逼人,就一直引导你思考,然后问道深入的点,不会的话他也会说没关系~感兴趣的话去了解了解就行了,十分nice啊。
最后根据项目聊了很多也,然后给了很多建议,指出有些地方还可以改进改进,然后我也厚着脸皮问了问之前面试官问我的一到开放题。没想到他竟然给我分享了好多好多种办法,真的太感动了,真的好强好厉害,很详细的告诉以后往什么方向去做,然后如何去思考,如何去实现,最后花了挺长时间来介绍他们的部门,真的很棒!
- 输入url到页面渲染展示
- DNS如何解析
- 输入域名如何转换为ip地址,然后转到服务器
- gzip原理
- cookie localStorage sessionStorage
- cookie与token的本质区别(session)
- 闭包 及其常见的应用场景
- 缓存
- 强缓存如何存
- 过期时间等参数浏览器是如何获取的
- 服务器如何设置缓存设置头
- 缓存的场景
- call apply区别
- React的事件机制
- virtual dom
- hooks的优势,为何被喜欢,常用的方式
- React数据流
- HOC,优势及其常用方式
- setState获取更新的值
- csrf 和 xss
- flex布局,及你常用的方式,兼容性
- 前端性能优化(你用过的)
- node异步的历史(答了async/await, generator)
- webpack流程
- webpack-dev-server原理
- webpack配置项与常用插件
- ES6的语法,及你常用的
- Mobx的原理
- 盒模型与怪异盒模型
- HTTP报文结构,请求头有啥,响应头有啥
- 最近看什么书,看什么文章,打算考研吗
- 栈,队列
- 10万个数字找最大的K个数(描述了快排,及如何实现,时间复杂度,最好,最差的情况下)
- DFS与BFS,如何实现
- 小程序与H5的区别,商业性、技术性(小程序有自己独立的保护机制,独立运行在一个地方,不会破坏现有生态)
- nginx怎么配置
- 阿里云dns怎么配置解析(A?TXT?)
- 箭头函数和普通函数
- 按钮设置监听用箭头函数this指向哪
- jwttoken
- 服务器开启服务(nohup,pm2)
- Taro编译原理
- typescript优势,为何收到推崇
腾讯(捞错了...)
啊,暴毙,在官网投的web前端,结果发来的邀请函却是
后台开发
,啊虽然被捞起来很开心,但是呜呜呜不是期望的岗位鸭!哭