1.浏览器缓存策略,有哪些类型,分别有什么区别?
答:
- DNS缓存
- memory cache本地缓存
- disk缓存(http缓存)HTTP缓存分为强制缓存和协商缓存
①DNS缓存: -
DNS域名解析时首先会查找浏览器本身的dns缓存
-
如果不存在会查找操作系统的hosts文件,
-
不存在则会查找本地的dns服务器,
-
不存在则会向根服务器发出请求
②memory cache本地缓存 memory cache 是浏览器为了加快读取缓存速度而进行的自身的优化行为,不受开发者控制,也不受 HTTP 协议头的约束。memory cache 注定只能是个“短期存储”。当数据量过大,即使网页不关闭,缓存依然会失效。 ③http缓存 [浏览器缓存缓存策略(看完就懂) - 掘金 (juejin.cn)](url) 添加链接描述
2 http状态码有哪些,301和302的区别
301永久重定向 302临时重定向 301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。 3.BFC https://www.itcast.cn/news/20201016/16152387135.shtml 触发BFC的条件
·body根元素
·设置浮动,不包括none
·设置定位,absoulte或者fixed
·行内块显示模式,inline-block
·设置overflow,即hidden,auto,scroll
·表格单元格,table-cell
·弹性布局,flex BFC的作用 解决外边距塌陷,垂直塌陷和清除浮动,组织标准流元素被浮动元素覆盖 4.防抖和节流 防抖 函数防抖(debounce):当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时。
<div id="content"></div>
<script>
var count = 0
var con = document.querySelector('#content')
con.addEventListener('mousemove', debounce(add, 300))
function add() {
con.innerHTML = count++
}
function debounce(fn, delay) {
let timer = null
return function () {
if (timer) { clearTimeout(timer) }
timer = setTimeout(fn, delay)
}
}
</script>
节流 函数节流(throttle):当持续触发事件时,保证一定时间段内只调用一次事件处理函数。
<div id="content"></div>
<script>
var count = 0
var con = document.querySelector('#content')
con.addEventListener('mousemove', throttle(add, 2000))
function add() {
con.innerHTML = count++
}
function throttle(func, wait) {
let timeout = null
return function () {
if (!timeout) {
timeout = setTimeout(() => {
timeout = null
func()
}, wait)
}
}
}
</script>
5垃圾回收机制
引用计数
另一种不太常见的垃圾回收策略是引用计数。引用计数的含义是跟踪记录每个值被引用的次数。当声明了一个变量并将一个引用类型赋值给该变量时,则这个值的引用次数就是1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数就减1。当这个引用次数变成0时,则说明没有办法再访问这个值了,因而就可以将其所占的内存空间给收回来。这样,垃圾收集器下次再运行时,它就会释放那些引用次数为0的值所占的内存。 标记清除 这是javascript中最常用的垃圾回收方式。当变量进入执行环境是,就标记这个变量为“进入环境”。从逻辑上讲,永远不能释放进入环境的变量所占用的内存,因为只要执行流进入相应的环境,就可能会用到他们。当变量离开环境时,则将其标记为“离开环境”。
垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记。然后,它会去掉环境中的变量以及被环境中的变量引用的标记。而在此之后再被加上标记的变量将被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了。最后。垃圾收集器完成内存清除工作,销毁那些带标记的值,并回收他们所占用的内存空间。
6.call和apply和bind的区别
1call和apply会调用函数,并且改变其中的this指向 2apply传递的参数必须为数组 3bind不调用函数,值改变函数的this指向
7js事件循环机制
添加链接描述
8杨辉三角
function yang(n) {
let arr = new Array(n)
for (let i = 0; i < arr.length; i++) {
arr[i] = new Array(i + 1)
}
for(let i=0;i<arr.length;i++){
for(let j=0;j<arr[i].length;j++){
if(j===0||j===i){
arr[i][j]=1
}else{
arr[i][j]=arr[i-1][j]+arr[i-1][j-1]
}
}
}
for(let i=0;i<arr.length;i++){
for(let j=0;j<arr[i].length;j++){
document.write(arr[i][j] + " ")
}
document.write(`<br/>`)
}
}
|