⛔腾讯金融(深圳)
###Vue数据绑定
参考文档:
###请求的几种方式
###异步请求是否会受到跨域限制
###跨域解决方案
###了解过async/await吗
###了解websocket吗
###如何实现jQuery的链式调用
###事件流
###事件循环
###源码了解过哪些
⛔腾讯看点(深圳)
###实现正方形的拖放
H5 API
主要可分为两类API:容器类和目标类
容器类API: dragenter、dragover、dragleave、drop
目标类API:dragstart(以及为目标添加属性"draggable")
延伸: touch触屏事件:touchstart/touchmove/touchend
###ajax请求实现(详细)
###状态码有哪些
参考文档: H5 拖放实现
| 状态码 | 说明 |
|---|---|
| UNSEND 0 | 未发送(创建一个XHR,初始状态是0) |
| OPENED 1 | 已经打开(执行了xhr.open) |
| HEADERS_RECEIVED 2 | 响应头信息已经返回给客户端(发送请求后,服务器会依次返回响应头和响应主体的信息) |
| LOADING 3 | 等待服务器返回响应内容 |
| DONE 4 | 响应主体信息已经返回给客户端 |
参考文档: juejin.cn/post/684490…
###浏览器缓存
###Vue数据双向绑定(还行)
###DOM diff(深度不够,考虑对自己的项目有什么影响)
主要参考:
- 主流程:juejin.cn/post/686410…
- updateChildren: mp.weixin.qq.com/s/pd0Mshl-f…
其他:
- juejin.cn/post/684490…
- www.zhihu.com/search?type…
- www.zhihu.com/search?type…
- segmentfault.com/a/119000002…
- segmentfault.com/a/119000002…
###Vue 3.0了解过吗
###了解或使用过哪些优化策略
###如何分析网页性能(例如首页加载速度)
###了解fetch吗
参考资料: www.yuque.com/alien-ax3ws…
###了解过service worker吗
参考资料: juejin.cn/post/684490…
###了解过哪些前端新技术(web assembly)
⛔天猫海外事业部(杭州)
###如何在视窗内加载一个图片,有思路吗(如果API不熟悉,就说一个概括性的思路)
###所有事件都有捕捉阶段吗
根据标准文档,事件(Event)对象的分发传播路径(propagation path)如下图所示:
总共会经历三个阶段: capture(e.eventPhase为1)->target(e.eventPhase为2)->bubble(e.eventPhase为3)。目标阶段即为传播路径的底部。
Event的bubbles属性决定事件是否跳过冒泡阶段,或者进行手动控制e.stopPropagation()/e.stopImmediatePropagation(),停止事件对象的传播。
cancelable属性决定事件行为是否可取消。
标准文档中列举的几类事件: UI事件:load/unload/abort/error/select
Focus事件:blur/focus/focusin/focusout
Mouse事件:click/dblclick/mousedown/mouseenter/mouseleave/mouseeenter/mousemove/mouseout/mouseover/mouseup
Wheel事件:wheel
Keyboard事件:beforeinput/input
Composition事件:compositionstart/compositionupdate/compositionend 处理非拉丁字符输入事件(测试后发现无法处理混合输入情况)
参考资料:
###setTimeout为什么不准
setInterval
周期性循环定时器
最短时间间隔是10ms
setTimeout
单次定时器,通过循环调用也可以实现循环定时
最短延迟事件为4ms 为了节电,对于那些不处于当前窗口的页面,浏览器会将最短延时限制扩大到1000ms。
function timer() {
// do something
console.log("tick")
setTimeout(timer, 1000)
}
timer()
setTimeout设定的延时其实是其回调函数从定时(定时由浏览器控制)开始加入到callback queque的时间
为什么不准时,可以看到下面这个例子(援引自这篇掘金)
<body>
<button id="btn"></button>
<script>
const btn = document.getElementById("btn");
btn.addEventListener('click',function handleClick(){
//...代码执行时间需80ms
})
setTimeout(function handlerTimeout(){
//...代码执行时间需60ms
}, 100);
setInterval(function handlerInterval(){
//...代码执行时间需80ms
},100)
//... 其余代码执行时间需要180ms
</script>
</body>
###CSS三角形怎么画
#tri {
width: 0;
border-left: 50px solid transparent;
border-top: 100px solid hsl(271, 76%, 53%);
border-right: 50px solid transparent;
}
###栈、队列、链表区别,使用场景
链表:内存不连续
优点:大小动态扩展,插入删除效率高(只需要更改一下指针指向)
缺点:不能随机访问(没有存储位置推算公式,不能用下标访问)
使用场景:对于数据的规模难以估计,频繁进行插入删除操作
与链表互补的存储结构是数组,不过js中的数组并不是连续存储的
栈:
可基于数组和链表实现
是一种操作受限(先进后出)的线性表
使用场景:
- 浏览器前进后退
- 函数调用栈
队列:
可基于数组和链表实现
同样也是一种操作受限(先进先出)的线性表
使用场景:
- 任务队列
- 消息队列
###箭头函数和普通函数的区别
- 语法更精简
- 没有原型
- 没有自己的this,而是继承其外层普通函数的this;且定义时确定,指向不能改变
- 因为没有自己的this,所以不能作为构造函数
- 不绑定arguments
let f1 = () => { console.log(arguments) }
// 如果想要获取参数列表可以使用扩展符
let f2 = (...args) => { console.log(...args) }
- 箭头函数不能作Generator函数,不能使用yield关键词
###如何发送跨域post请求
CORS:Cross-Origin Resource Sharing 跨域资源共享
CORS本质就是通过将响应头Access-Control-Allow-Origin的值设置成请求方的域名即可
注意:
- postMessage是跨窗口通信
- websocket是新的传输协议
✅字节平台研发(北京)一面
###第一题:let const var 闭包相关
下列代码的执行结果是什么
var a = 10;
(function(){
console.log(a) // undefined
a = 5
var a = 20
console.log(a) // 20
console.log(this.a) // 10
})()
分析:上面的代码有两个作用域,全局和函数
// 1. 全局作用域
var a = 10; // 全局变量
(function(){
// 2. 局部作用域
console.log(a) // 本地变量提升:undefined
a = 5 //本地变量
let a = 20 // 本地变量声名赋值
b = 999 // 全局对象(如window)属性
console.log(a) // 20
console.log(this.a) // 10
})()
涉及知识点:全局和函数作用域、暂时性死区、this指向、立即执行函数、变量提升、定义变量是否使用var
分析:
- 使用
var声明的变量会发生变量提升 - 变量
x赋值时如果不使用var,则视为全局对象上创建属性x(属性赋值和变量声明的区别在于,变量自带不可删除性,即无法使用delete关键字删除var声明的变量) - 使用let绑定的变量会出现暂时性死区,若在声明前访问会报
ReferenceError
###闭包
下面代码的输出结果
for(var i=0; i<3; i++) {
setTimeout(() => {
console.log(i)
},0)
}
用闭包改成正确的代码
注意:setTimeout返回一个数字
错误答案
for(var i=0; i<3; i++) {
(setTimeout(() => {
console.log(i)
},0))(i)
}
正确答案
for(var i=0; i<3; i++) {
((i) => {
setTimeout(() => {
console.log(i)
},0)})(i)
}
解释:用一个函数包住setTimeout,立即执行函数的前提是这是一个函数
###如何删除cookie
###说一下XSS(Cross Site Scripting)
- 富文本如何展示源文本
- 美团技术:segmentfault.com/a/119000001…
###CSS:说一下盒模型、position
###数据类型有哪些
###判断数据类型的方法
###new的实现原理
###HTTP缓存
###vue的数据双向绑定
简化说明:Object.defineProperty+关注订阅模式 juejin.cn/post/684490…
###算法题:合并分区(力扣原题)
✅字节平台研发(北京)二面
###网页的渲染流程
###script的async和defer的差别
###用callback和Promise两种方式实现XHR
###盒模型的概念
###flex布局
###CSS3的transform和animation了解过吗
###script的async和defer的差别
###事件绑定onclick和addEventListener
###箭头函数和普通函数的区别
###重绘重排
###代码实现
- 创建列表
const list = [
{ id , text, message },
....5
]
通过一个JS,去循环这个list,在一个id为 wrapper 的 div 下,建立一个列表
div #id {text} click = alert(message)
- 数对和
输入 list = [5, 6, 5] target = 11
输出 [ [5, 6] ]
输入 list = [5, 6, 5,6] target = 11
输出 [ [5, 6], [5, 6] ]
⛔华为一二面(无前端 岗位不匹配)
一面