Tecent-preinterview
编程篇
- 五子棋程序,支持悔棋/撤销悔棋
- 页面内有一个正方形元素 A 以及一个待放置区域 B,实现对其拖拽和放下到 B 区域内,并且改变 B 区域背景颜色 (不可用 html5 原生事件)
html 部分 https://paste.ubuntu.com/p/R4QSy8nFHC/
js 部分 https://paste.ubuntu.com/p/wk54STQS3N/ - 实现超出整数存储范围的两个大正整数相加 function add(a, b)。注意:参数 a 和 b 以及函数的返回值都是字符串
大数相加代码
https://paste.ubuntu.com/p/QmNNVjSKkV/
4.页面内有一个 input 输入框,实现在数组 arr 查询命中词和 autocomplete 效果
事件监听方法;
下拉框自动显示;父子级查找;
基础理论篇
1.子元素垂直水平居中;
- 数据类型, 对象与其他数据类型的区别;es6中的新数据类型;
es6引入新的原始数据类型Symbol
,类似于字符串,但是不能和其他数据类型运算;
可用于保证属性之间不会相互冲突
shapeType.triangle等于哪个值并不重要,只要确保不会跟其他shapeType属性的值冲突即可。
因此,这里就很适合改用 Symbol 值。
shapeType.triangle的值设为一个 Symbol
- 网络安全了解; CSRF,XSS攻击;
4.对计算机网络的理解;
- ajax发送请求的步骤;
6.事件代理,事件委托;
7.闭包场景,什么时候使用闭包;变量常驻内存带来的问题,如何避免闭包带来的问题;
8.call 和 apply - 在平时开发中,遇到过跨域的问题吗?如何处理跨域呢?
9.1. 如何进行 CORS 跨域?需要什么条件?
基本思想:使用自定义的http头部让浏览器和服务器进行沟通,从而决定响应成功或是失败;
条件: 给请求附加一个自定义头部origin,如果服务器认为这个请求是可响应的,就在Access-Control-Allow-Origin
回发相同的源信息;如果没有该头部,或者有该头部但源信息不匹配,就驳回请求;
IE 使用XDomainRequest()
其他浏览器 使用XMLHttpRequest()
9.2 对服务器来说,返回 json 数据和 JSONP 数据有什么不一样?
JSONP是包含在回调函数中的JSON
callback({"name": "Nickolas" });
JSONP最好来源于自己运维的web服务器,因为如果其他域不安全,很可能在响应中夹带一些恶意代码;
在判断JSONP请求是否失败并不容易,需要使用定时器检测是都收到了响应。但由于每个用户的网速和带宽并不同,所以结果不是很理想;
9.3 还有其他跨域方式吗?
图像ping技术: 常用于跟踪用户点击页面或动态广告曝光次数;
只能用于浏览器和服务器之间的单向通信,无法访问服务器的响应文本;
只能发送Get请求;
let img = new Image();
let globalCount = 0;
let faiInfoQueen = [];
img.onload = () => { globalCount++};
img.onerror = (err) => { failnfoQueen.push(err.message);}
comet服务端推送技术
实现方式: 长轮询和流
长轮询
长轮询长轮询过程:
页面发起一个对服务器的请求,然后服务器已知保持连接打开,直到有数据可以发送。发送完数据,浏览器关闭连接,随即发起一个到服务器的新请求。
使用流
在页面整个生命周期只使用一个HTTP连接。浏览器向服务器发起请求,而服务器保持连接打开,周期性的向浏览器发送数据。
web sockets
新浏览器API,目标是在一个单独的持久连接上提供全双工、双向通信。在Javascript中创建web sockets之后,会有一个HTTP请求发送到浏览器以发起连接。取得服务器响应后将http协议交换为 web socket协议。必须使用支持这种协议的专门服务器,web sockets才能正常工作。
ws适合于快速传输小数据,在移动设备上具有速度优势;
10 盒子模型(W3C标准盒子模型/IE盒子模型)区别
W3C标准盒子模型: height 即为content高度
IE盒子模型:height 包含 content,padding,border
- 强类型语言有继承,在js中如何实现继承;
11.1 使用prototype实现继承
爸爸继承爷爷, 儿子继承爸爸
爷爷的属性出现在儿子中 : son.prototype.prototype 为儿子从爷爷中继承而来的属性
⚠️ 使用原型注意不能使用对象字面量创建原型方法
建一幢房子,已经具备了部分地基,但地基不够坚固,不满足扩展性要求;假设之前的地基是为草房临时准备,但现在要建大厦,如何利用之前的泥砖资源,并考虑目前的人力,时间成本,去把事情做成 ;
- 构造函数有一个 test() 方法,prototype 上也有一个 test(),这两个方法有区别吗?
有区别。先访问构造函数的test(),构造函数test() 不存在访问prototype - 页面性能优化方法;
合理使用缓存;
图片压缩;
使用cdn,反向代理加速资源;
纯色图片使用color代替,http请求整合;
移动端 - 页面重排,重绘,区别;
- 浏览器如何知道资源是否需要缓存?
- http状态码含义;
浏览器里面的事件都会按照一定的规则去传递,这个规则是什么?
进阶总结篇
- vueJS,reactJS的优缺点,和jquery相比;
- 从url键入到页面显示经历了哪些过程;
3.全球各地都要访问Tecent的服务器,你是怎么处理的? - 排序算法复杂度;
5.后端语言熟悉程度(Python总结下); - 后端知识,数据库问题;
项目优化
- 是否明文传输;
- 在项目中webpack的使用;