最近在忙着准备找实习,所以没有更新之前的文章.
不过所幸功夫不负有心人,我拿到了腾讯的offer.
这里分享一下面试的经验.
本人双非本科,普通学生一枚.
面的是腾讯的Web前端开发.
整个面试一共有四轮,分为:一面(笔试\初试) 二面(技术\复试) 三面(项目\复试) 四面(HR\终面)
我是在五月份的时候收到的初试的消息
第一面的形式是远程视频面试,在牛客网上进行.
面试首先肯定是一个自我介绍,这里我就不赘述了
聊了一下我的大概情况过后,然后就开始面试了
怎么判断一个对象是不是数组?
function isArray(value){ return Object.prototype.toString.call(value) === "[object Array]"; }
了解深拷贝与浅拷贝吗?你能实现一下深拷贝吗?
这个问题首先我们要知道深拷贝浅拷贝的区别,我们知道JS的值分为基础类型和引用类型,也就是说在进行赋值操作时引用类型赋值的实际上只是将地址进行赋值
也就是两个变量指向了同一个地址,浅拷贝呢就是正常的赋值操作,而深拷贝则希望是一个新的独立的值,而不是仅仅拷贝地址
由此我们可以给出以下拷贝函数(这里给的代码只是一个示意,并不是最佳实践)
function deepClone(obj){ let objClone = Array.isArray(obj)?[]:{}; if(obj && typeof obj==="object"){ for(key in obj){ if(obj.hasOwnProperty(key)){ //判断ojb子元素是否为对象,如果是,递归复制 if(obj[key]&&typeof obj[key] ==="object"){ objClone[key] = deepClone(obj[key]); }else{ //如果不是,简单复制 objClone[key] = obj[key]; } } } } return objClone; }
知道继承吗?实现一下?
这里的话我问了一下面试官,使用ES6的class实现,还是使用原生JS实现?
面试官说都可以,我就用的原生JS写的,用的组合继承的方式
function SuperType(){ this.property = true; } SuperType.prototype.getSuperValue = function(){ return this.property; }; // 创建一个新的构造函数 function SubType(){ // 调用父类的构造函数 SuperType.applay(this,arguments); this.subprototype = false; } // 重写这个构造函数的原型对象让其指向SuperType的实例 SubType.prototype = new SuperType(); // 修改 constructor 让其指向正确地构造函数 SubType.prototype.constructor = SubType; // 添加这个新构造函数的自身的方法 SubtType.prototype.getSubValue = funtion(){ return this.subproperty; } var instance = new SubType(); alert(instance.getSuperValue()); // true 可以访问到原型对象上的方法和属性
到这里视频面试在线打代码的部分就完成了,后面就问了一些前端方面的问题
你了解XSS和CSRF吗?
回答了解,之后就会详细问了.
首先XSS分为以下三种
CSRF的攻击方式则是,当用户登录过A网站通过A网站的合法性身份校验过后,B网站通过钓鱼链接等形式获取用户在A网站的合法身份来进行攻击
两者的区别:
最大的区别在于 CSRF 需要用户完成合法性验证后才能进行,而XSS则不需要
防御:
XSS的主要防御手段是通过前后端的数据过滤来实现,对一些HTML的特殊字符进行转义
CSRF的主要防御手段则是通过使用token验证来验证用户身份的合法性
一面的主要内容就是上述几个问题,整个过程45分钟,我在打代码的时候当时有个逻辑写反了,找了很久都没有找到问题,最后是被面试官指出了,所以在面试官那落了个马虎大意的不良印象.
不过最后还是顺利通过了初试.在第二天的晚上面试状态就变为了复试.
在面试状态变更后的一个礼拜后预约了复试的时间(因为中间过了个端午)
同样的首先是自我介绍,然后就进入正题.
浏览器输入网址后到页面显示的整个过程?
HTTPS和HTTP的区别?采用的加密算法?
http使用明文传输,https采用加密方式传输
具体加密过程如下:
对称加密:DES
非对称加密:RSA
cookie的作用?cookie的安全?cookie与webstorage的区别?
cookie的作用:
cookie可以跟踪会话,弥补HTTP无状态协议的不足
保存上次登录的时间等信息
这里面试官就问我,使用Cookie来做状态保持是否安全?怎么解决?
首先Cookie是不安全的,可以通过脚本获取,也能被中间人截取
解决方案:
Cookie与Webstorage (H5提出的用于替代Cookie的解决方案)的区别:
存储大小:localStorage和sessionStorage的存储数据大小一般都是:5MB
存储位置:localStorage和sessionStorage都保存在客户端,不与服务器进行交互通信
存储内容类型:localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理
应用场景:localStoragese:常用于长期登录(+判断用户是否已登录),适合长期保存在本地的数据。sessionStorage:敏感账号一次性登录
相比Cookie的优点:
存储空间更大:cookie为4KB,而WebStorage是5MB
节省网络流量:WebStorage不会传送到服务器,存储在本地的数据可以直接获取,也不会像cookie一样每次请求都会传送到服务器,所以减少了客户端和服务器端的交互,节省了网络流量
快速显示:有的数据存储在WebStorage上,再加上浏览器本身的缓存。获取数据时可以从本地获取会比从服务器端获取快得多,所以速度更快
安全性:WebStorage不会随着HTTP header发送到服务器端,所以安全性相对于cookie来说比较高一些,不会担心截获,但是仍然存在伪造问题
WebStorage提供了一些方法,数据操作比cookie方便
前端性能优化的手段?
减少HTTP资源请求数: 合并静态资源,构建工具合并雪碧图\避免重复资源
减少HTTP请求大小: 对文件进行压缩优化,使用gzip传输压缩内容\移除代码注释压缩代码
将CSS,JS放到外部文件:HTML引用外部资源可以有效利用浏览器静态资源缓存
避免空的 href 和 src
指定Cache-Control 或 Expires
合理设置 Etag 和 Last-Modified
减少页面重定向
静态资源分域存放增加下载并行数
静态资源CDN来存储文件
CDN Combo 下载传输内容
缓存Ajax cache属性设置为 true
使用Get Ajax的速度比POST请求快
减少Cookie大小进行Cookie隔离(分域存放静态资源)
异步JS
避免CSS import 加载CSS
页面渲染
CSS资源放到页面顶部
JS放到页面底部
不在HTML中缩放图片
减少DOM元素数量和深度
避免使用<table><ifream>
等慢元素,这些元素会整个渲染完成后再绘制到页面上
避免使用CSS表达式或CSS滤镜
前端性能检测?
Performance Timing API\ 浏览器Profile工具\ 页面埋点\ 资源加载时序图 用于获取页面加载的性能
如果是远程监控用户的页面性能则需要将相关数据上传到服务器存储
你了解算法吗?
我:了解一点
你知道堆排序和快排的区别吗?
我:数据结构不同,堆排是一种树状结构,时间复杂度都是(nlogn最好)
他们的时间复杂度一样,为什么平常更多使用快排,而不是堆排?
堆排的时间常量要大于快排,也就是执行交换操作的性能不同,在性能上快排的性能略优于堆排,并且使用场景中快排效率最坏的情况的概率比较小
快排:数组中交换数据,在数据量不是特别大,而且离散程度较高的情况下效率很高
堆排序:创建堆,数据交换,调整堆的时间均很多
所以在实际应用中,我们用快排会更多一点
平时学习的方式?
我:前端掘金社区, github , infoq, 博客, 书籍
大概多长时间看完一本书?
我:第一遍通看一个星期,完全掌握差不多要一个多月.
有没有对书上的内容进行实践?
我:能够实践的部分会做一些demo,不好实践的部分则会分享一些自己的学习笔记在博客上
你的博客在外网能够访问吗?
我:可以,然后给了链接
然后二面的内容就差不多了,期间问了一些简历上的项目,这里因人而异所以我就不再多说了,整个过程大概65分钟.
这里到三面有一个小插曲,我看见我官网上的面试流程变灰了,我以为挂掉了,还郁闷了几天
不过三天后告诉我约了下一场面试.
首先仍是万年不变的自我介绍:
然后面试官问了:
这一面主要就是问你简历的项目了,回答项目的时候从
的顺序来答就好,至于其它的问题就只能看你自己的临场发挥了
在两天的焦急等待后,收到了HR面的通知
终面的HR是个女HR,我之前一度以为我去的部门只有汉子
简单的自我介绍过后就开始聊人生
问题:
HR面的话,问题就和技术没啥关系了,感觉主要考察的就是你的意愿强不强烈
你的为人处世,性格等方面
我当时对于这些问题,就一直表示十分希望能够进入腾讯
如果看过我早期的文章的同学,应该知道我在去年就投过腾讯的实习,然后在一面就光荣的挂掉了
所以在HR问我最后问题的时候我的原话是这样的:
"我十分希望能够进入腾讯,您那边可能也知道我在去年就投过咱们公司,当时确实是因为自己的能力达不到咱们公司的要求,不过这一年我一直都在努力提升自己,这次面试才走到了现在,就算这次我或许没有达到要求,没有机会到咱们公司实习,但是我认为只要我一直努力早晚能够达到咱们公司的要求."
到这里HR就笑了,说她没有什么问题要问我的了,offer的话后面有人会联系你.
我当时都惊了,我看其它大佬的面经的时候都是回去等通知,没有直接说offer的事情的.
我也不知道,在面试中我哪一点吸引了面试官,不过最终还是如愿以偿地拿到了offer
这里的话我想说,面试的话很多时候最后我们都可能拿不到我们心仪的offer,面试确实是一个比较看运气的事情
但是面试就算结果不太理想,但是确实是一个发现自己不足的很好的机会.
我从今年的3月开始准备面试,期间面了 阿里,京东,字节跳动,美团,腾讯(offer之前面的一次腾讯三面被刷)
就通过这些面试找到自己知识点的不足,然后面完过后就去查,弥补这些不足,最后终于如愿.
感谢昨天的自己的努力,不忘初心,方得始终.
希望大家都能拿到自己心仪公司的offer.
原文:https://www.cnblogs.com/lhyxq/p/11050299.html