You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Jan 11, 2023. It is now read-only.
functionPerson(name,age){this.name=namethis.age=age}Person.prototype.say=function(){console.log(`I'm Person, my name is ${this.name}, my age is ${this.age}`)}Person.prototype.yell=function(){console.log(`yell`)}functionStudent(name,age,score){Person.apply(this,arguments)this.score=score}// 原型继承Student.prototype=newPerson()// 修改继承来的原型上的constructor为目标Student的constructorStudent.prototype.constructor=StudentStudent.prototype.say=function(){console.log(`I'm Student, my name is ${this.name}, my age is ${this.age}, my score is ${this.score}`)}Student.prototype.studentYell=function(){console.log(`student yell`)}varp=newPerson('a person','22')varderek=newStudent('derek','21','321')derek.say()derek.yell()derek.studentYell()console.log(derekinstanceofPerson)console.log(derekinstanceofStudent)// p.studentYell()
// new 方法实现function_new(fn, ...arg){constobj=Object.create(fn.prototype);constret=fn.apply(obj,arg);returnretinstanceofObject ? ret : obj;}
2019年底面试题整理
HTML
HTML5新特性
meta标签的作用
CSS是否影响Html解析,js解析,html渲染?
DOM解析与CSS解析是并行的,CSSOM TREE和DOM TREE完成后,会合并成为render tree。
也是为何css解析不影响html解析,但是影响html渲染。
js操作可以改变html和css样式,因为浏览器会维持顺序,所以css会阻止后面js的执行。
Reference
onload事件与DOMContentLoaded
Reference
Worker
为了利用多核CPU的计算能力,HTML5提出Web Worker标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM。所以,这个新标准并没有改变JavaScript单线程的本质。
CSS和JS的位置会影响页面效率
用一个div模拟textarea的实现
给div标签加contenteditable属性就能实现textarea的编辑功能了
图片懒加载怎么实现
判断img标签是否在可视区域,如果可视,加载图片,否则不加载。
因为src如果有值,会直接加载,所以是用一个data-src存放图片地址,等到图片在可视范围内,再把值apply到src上。
判断可视区域可以用offset自己去算,或者是用element.getBoundingClientRect去获取dom位置。
但是这些都会触发reflow, 有个API叫做IntersectionObserver,可以动态的监测dom是否可视。
repaint重绘和reflow回流
Repaint:
Reflow:
这些变化大多针对整个页面,所以reflow要比repaint消耗的多
这些属性需要依赖一些元素去计算,所以会触发reflow
如何优化reflow
CSS
盒子模型
css绘制平行四边形
父元素transform: skewX(-45deg);
子元素transform: skewX(45deg)
元素居中
行元素
块元素
全居中
Postion values
css 优先级
css的覆盖顺序跟css的样式声明顺序有关
css声明的越靠后,优先级越高
使用css实现一个持续的动画效果
使用js实现一个持续的动画效果 requestAnimationFrame
window.requestAnimationFrame(callback)
回调函数内参数是一个时间戳为Performance.now()window.cancelAnimationFrame()
取消左右布局:左边定宽、右边自适应,不少于3种方法
BFC
/css/BFC.html
BFC是一个类似独立的隔离容器(脱离文档流),floating可以创建BFC.
float的元素会脱离文档流,如果他的父元素也是个BFC,那他们2个元素都会在BFC里,就在这个独立的容器内了。
触发条件:
BFC内会触发�边距坍塌,但是2个不同的BFC就不会触发
clear: left/clear: right/clear: both
清除元素2边的浮动。例:clear:left如果施加在某个元素,那么这个元素左边的浮动元素就不是浮动元素了
JS
事件传播
事件捕获阶段,处于目标阶段,时间冒泡阶段
event.stopPropagation()
阻止事件继续传播,即取消进一步的事件捕获或冒泡箭头函数与普通函数区别
call与apply的区别
call有N个参数,第一个参数是上下文,之后的参数就会传给目标函数,逐个列出
apply有2个参数,第一个参数是上下文,第二个参数是参数的数组
宏事件,微事件
任务队列
阮老师的Event Loop文章
Philip Roberts: Help, I’m stuck in an event-loop.
事件循环:
所以如果想要模拟这个场景,需要一个Call Stack, Task Queue, Microtask Queue
A. 如果是宏任务,加入Task Queue
B. 如果是微任务,加入Microtask Queue
微任务 >> UI Render >> 宏任务
微任务包括 promise.resolve, promise.catch, MutationObserver
宏任务包括 setTimeout, setInterval, requestAnimationFrame
sort
https://blog.csdn.net/k346k346/article/details/51154786
js Array
https://juejin.im/entry/59ae664d518825244d207196
requestAnimatedFrame
haizlin/fe-interview#1341
addeventlistener在父节点,监听子节点点击事件 => 事件委托
原型链继承,instance of, ES6 ES5的继承区别, 如何实现一个 new
https://github.com/ziyi2/js/blob/master/JS%E7%B1%BB%E5%92%8C%E7%BB%A7%E6%89%BF.md
手写promise
haizlin/fe-interview#1335
节流和防抖
实现页面加载进度条
postMessage
实现拖拽功能,比如把5个兄弟节点中的最后一个节点拖拽到节点1和节点2之间
手写parseInt的实现
WeakMap Map Set WeakSet
深度优先遍历和广度优先遍历, deep clone
浏览器与HTTP
http状态码
OSI 分层
http协议,dhcp, ftp, pop3, smtp
SSL加密协议
会话层的作用就是为创建、管理和终止会话提供必要的方法,还负责管理和确定传输模式
(单向 全双工 半双工)
TCP协议 UDP协议
IP协议:ipv4, ipv6
怎么发送一个跨域的POST请求, 同源策略?CSRF/clickjacking? CORS? JSONP? IFrame?
amandakelake/blog#62
CORS(跨域资款共享)
小提示:如果你回答跨域解决方案CORS,那么面试官一定会问你实现CORS的响应头信息Access-Control-Allow-Origin。
什么是CORS
CORS(跨域资源共享 Cross-origin resource sharing)允许浏览器向跨域服务器发出XMLHttpRequest请求,从而克服跨域问题,它需要浏览器和服务器的同时支持。
浏览器端会自动向请求头添加origin字段,表明当前请求来源。
服务器端需要设置响应头的Access-Control-Allow-Methods,Access-Control-Allow-Headers,Access-Control-Allow-Origin等字段,指定允许的方法,头部,源等信息。
请求分为简单请求和非简单请求,非简单请求会先进行一次OPTION方法进行预检,看是否允许当前跨域请求。
从输入URL到看到页面发生的全过程,越详细越好。
TCP和UDP的区别
三次握手,四次挥手
三次握手:
A: 发送了
B: 接受了,你能收到么
A: 收到了,ok,我俩连上了
四次挥手:
tcp是全双工的,就是A 正在给 B发信息的同时,B也在给A发信息
A: 我要关了
B: 可能还有一个包要传输,你稍等
B: OK, 我结束了。我这条消息你接到了,就可以关了
A: 我收到了,我关了。
Reference
Reference
浏览器的缓存机制:强缓存 协商缓存
缓存机制可能存在的3种状态,缓存命中,缓存未命中,缓存验证再命中(验证缓存新鲜度)
强缓存 200
协商缓存 304
优劣:
缓存的意义在于减少服务器请求,更多使用本地资源。所以要让每次文件更新之后,让缓存失效。所以可以使用hash。
html使用协商缓存,js css使用强缓存
浏览器路由实现
XSS CSRF
XSS: 跨站脚本攻击, 是指攻击者在网站上注入恶意的客户端代码,通过恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一种攻击方式
防范手段:
CSRF,即 Cross Site Request Forgery,中译是跨站请求伪造,是一种劫持受信任用户向服务器发送非预期请求的攻击方式。
CSRF 攻击往往是在用户不知情的情况下构造了网络请求
如果访问者不是从指定路径来的,则为csrf攻击
例如, jwt
cookie token 优劣
Reference
介绍 HTTPS 握手过程
A: 发送了
B: 接受了,请发送clientKey
A: 给你我的KEY
B: ok,收到了
Reference
websocket
Vue
Computed 缓存实现和依赖收集实现
keep alive实现
vdom实现,differ算法,key的作用
简单描述一下Vue.js的render过程
vdom:
总结一下就是为了找到dom变化而衍生出来的一种方式。
Reference
完成一个Dialog组件,说 说你设计的思路
为什么 Vuex 的 mutation中不能做异步操作
官方约定action中可以发送异步请求,而mutation不可以。是因为方便开发debug/devtools去检测数据的走向。
Object.defineProperty 和 Proxy
Vue 的父组件和子组件生命周期钩子执行顺序是什么
Advanced-Frontend/Daily-Interview-Question#128
$nextTick
https://juejin.im/post/5cd9854b5188252035420a13
DDFE/DDFE-blog#24
Webpack
https://segmentfault.com/a/1190000016816813
性能优化方案
references
Questions:
1.改造下面的代码,使之输出0 - 9,写出你能想到的所有解法。
The text was updated successfully, but these errors were encountered: