2022-02-11前端面试问题整理

一.盒模型

盒模型的组成,由里向外content,padding,border,margin。
盒模型有两种标准,一个是标准模型 (width+border+padding ),一个是IE模型(width)。
/* 标准模型 / box-sizing:content-box;
/
IE模型*/ box-sizing:border-box;

二.xml和json的区别

1、读取的方式不一样。XML是使用XML DOM来循环遍历文档,JSON可以通过JSON.parse方法将json字符串转化为JavaScript可解析的格式。
2、格式不一样,XML的格式是对便签类似于HTML便签一样,而JSON是key/value的格式。
JSON的优点:
1、JSON更小,相同的数据量,文件size比XML小。
2、更快,读写的速度比XML快。
3、更容易解析,因为json的格式与JavaScript的格式类似,所以将json转化为js可读的格式的时候更加容易。

三.内存泄露

闭包、定时器、
https://zhuanlan.zhihu.com/p/67843006

四.所有浏览器总共有哪几种内核?

1、Trident内核:IE最先开发或使用的,也称IE内核,360浏览器使用的也是IE内核;
2、Webkit内核:谷歌chrome浏览器最先开发或使用,也叫谷歌内核,枫树浏览器、太阳花使用的也是谷歌内核;
3、Gecko内核: Netscape6开始采用的内核,后来的Mozilla FireFox (火狐浏览器) 也采用了该内核,K-Meleon浏览器也是使用这种内核;
4、Presto内核:目前只有Opera浏览器采用该内核此外,由于IE浏览器在国内的普及率非常高,所以造成了很多网上银行和支付系统只支持IE的Trident内核,其他浏览器访问根本无法进行正常支付和转账等业务。这就造成了经常在网上购物的人离不开Trident内核的IE浏览器。但是Trident内核的速度和兼容性上又是在比不上Chrome浏览器的WebKit内核和Firefox浏览器的Gecko内核。于是双核浏览器应运而生,比如傲游、枫树浏览器(ChromePlus)、搜狗高速浏览器。

五.从一个url地址到最终页面渲染完成,发生了什么?

1.DNS解析:将域名地址解析为ip地址
-浏览器DNS缓存
-系统DNS缓存
-路由器DNS缓存
-网络运营商DNS缓存 (移动 联通)
-递归搜索: blog.baidu.com

  • .com域名下查找DNS解析
  • .baidu域名下查找DNS解析
  • blog域名下查找DNS解析
  • 出错了
  1. TCP连接: TCP三次握手
    -第一次握手,由浏览器发起,告诉服务器我要发送请求了
    -第二次握手。由服务器发起。告诉浏览器我准备接受了,你赶紧发送吧
    -第三次握手,由浏览器发送,告诉服务器,我马上就发了,准备接受吧
  2. 发送请求
    -请求报文:http协议的通信内容
  3. 接受响应
    -响应报文
  4. 渲染页面
    -遇见http标记,浏览器调用HTML解析器解析成Token并构建成dom树
    -遇见style/link标记,浏览器调用css解析器,处理css标记并构建cssom树
    -遇到script标记,调用javascript解析器,处理script代码,(绑定事件,修改dom树/cssom树)
    -将dom树和cssom树合并成一个渲染树
    -根据渲染树来计算布局,计算每个节点的几何信息(布局)
    -将各个节点颜色绘制到屏幕上(渲染)
    注意:这五个步骤不一定按照顺序执行,如果dom树或cssom树被修改了,可能会执行多次布局和渲染
    往往实际页面中,这些步骤都会执行多次的
  5. 断开连接:TCP四次挥手
    第一次挥手:由浏览器发起的,发送给服务器,我东西发送完了(请求报文),你准备关闭吧
    第二次挥手:由服务器发起的,告诉浏览器,我东西接受完了(请求报文),我准备关闭了,你也准备吧
    第三次挥手:由服务器发起,告诉浏览器,我东西发送完了(响应报文),你准备关闭吧
    第四次挥手:由浏览器发起,告诉服务器,我东西接受完了,我准备关闭了(响应报文),你也准备吧

六.cookie、localStorage、sessionStorage的区别

Cookie:

● 存储用户信息,获取数据需要与服务器建立连接。
● 可存储的数据有限,且依赖于服务器,无需请求服务器的数据尽量不要存放在cookie中,以免影响页面性能。
● 可设置过期时间。

localStorage:

● 存储客户端信息,无需请求服务器。
● 数据永久保存,除非用户手动清理客户端缓存。
● 开发者可自行封装一个方法,设置失效时间。

sessionStorage:

● 存储客户端信息,无需请求服务器。
● 数据保存在当前会话,刷新页面数据不会被清除,结束会话(关闭浏览器、关闭页面、跳转页面)数据失效。

七.Vue的生命周期

beforeCreate:在new一个vue实例后,只有一些默认的生命周期钩子和默认事件,其他的东西都还没创建。在beforeCreate生命周期执行的时候,data和methods中的数据都还没有初始化。不能在这个阶段使用data中的数据和methods中的方法
created:data 和 methods都已经被初始化好了,如果要调用 methods 中的方法,或者操作 data 中的数据,最早可以在这个阶段中操作
beforeMount:执行到这个钩子的时候,在内存中已经编译好了模板了,但是还没有挂载到页面中,此时,页面还是旧的
mounted:执行到这个钩子的时候,就表示Vue实例已经初始化完成了。此时组件脱离了创建阶段,进入到了运行阶段。 如果我们想要通过插件操作页面上的DOM节点,最早可以在和这个阶段中进行
beforeUpdate: 当执行这个钩子时,页面中的显示的数据还是旧的,data中的数据是更新后的, 页面还没有和最新的数据保持同步
updated:页面显示的数据和data中的数据已经保持同步了,都是最新的
beforeDestory:Vue实例从运行阶段进入到了销毁阶段,这个时候上所有的 data 和 methods , 指令, 过滤器 ……都是处于可用状态。还没有真正被销毁
destroyed: 这个时候上所有的 data 和 methods , 指令, 过滤器 ……都是处于不可用状态。组件已经被销毁了。
一般created阶段进行ajax请求

八.created和mounted的区别

created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。
mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。

九.computed和watch的区别

计算属性computed :

1.支持缓存,只有依赖数据发生改变,才会重新进行计算
2.不支持异步,当computed内有异步操作时无效,无法监听数据的变化
3.computed 属性值会默认走缓存,计算属性是基于它们的响应式依赖进行缓存的,也就是基于data中声明过或者父组件传递的props中的数据通过计算得到的值
4.如果一个属性是由其他属性计算而来的,这个属性依赖其他属性,是一个多对一或者一对一,一般用computed
5.如果computed属性属性值是函数,那么默认会走get方法;函数的返回值就是属性的属性值;在computed中的,属性都有一个get和一个set方法,当数据变化时,调用set方法。

侦听属性watch:

1.不支持缓存,数据变,直接会触发相应的操作;
2.watch支持异步;
3.监听的函数接收两个参数,第一个参数是最新的值;第二个参数是输入之前的值;
4.当一个属性发生变化时,需要执行对应的操作;一对多;
5.监听数据必须是data中声明过或者父组件传递过来的props中的数据,当数据变化时,触发其他操作,函数有两个参数,
immediate:组件加载立即触发回调函数执行,
deep: 深度监听,为了发现对象内部值的变化,复杂类型的数据时使用,例如数组中的对象内容的改变,注意监听数组的变动不需要这么做。注意:deep无法监听到数组的变动和对象的新增,参考vue数组变异,只有以响应式的方式触发才会被监听到。

十.普通函数和箭头函数的区别

箭头函数是匿名函数,不能作为构造函数,不能使用new。 箭头函数不绑定arguments,取而代之的是用rest参数...解决 箭头函数不绑定this,会捕获其所在的上下文的this值,作为自己的this值。 箭头函数通过call()或apply()方法调用一个函数时,只传入了一个参数,对this并没有影响。 普通函数(谁调用我,我的this就指向谁)

十一.svn和git

十二.页面优化

雪碧图、懒加载、减少http请求、keep alive

十三.防抖和节流

//防抖函数:一个需要频繁触发的函数,在规定时间内,只让最后一次生效,前面的不生效

function debounce(fn, delay) {

    var timer = null;

    //清除上一次延时器

    return function () {

        clearTimeout(timer);

        //重新设置新的延时器

        timer = setTimeout(function () {

            fn.apply(this)

        }, delay)

    }

}

function ff2() {

    console.log('防抖')

}

document.getElementById('box2').onclick = debounce(ff2, 500)

/*
 
函数节流:一个函数执行一次后,只有大于设定的执行周期后才会执行第二次。
 
有个需要频繁触发的函数,出于优化性能角度,在规定时间内,只让函数触发的第一次生效,后面不生效
 
*/

/* 节流函数
 
@param fn 要被节流的函数
 
@param delay 规定的时间
 
*/

function throttle(fn, delay) {

    //记录上一次函数触发的时间

    var lastTime = 0;

    //记录当前函数触发的时间

    return function () {

        var nowTime = Date.now();

        if (nowTime - lastTime > delay) {

            //修正this指向问题

            fn.call(this);

            lastTime = nowTime

        }

    }

}

function ff() {

    console.log('节流')

}

document.getElementById('box').onclick = throttle(ff, 1000)

addEventListener('scroll', throttle(ff, 1000))

下面一些问题可自行百度查找答案

十四.数组方法(排序、去重)、字符串

toString() 把数组转换为数组值(逗号分隔)的字符串
join() 将所有数组元素结合为一个字符串,可以规定分隔符:join("*")
pop() 从数组中删除最后一个元素,方法返回删除元素的值。
push() 在数组结尾处向数组添加一个新的元素,方法返回新数组的长度
shift() 删除首个数组元素,方法返回被删除元素的值
unshift() 在开头向数组添加新元素,方法返回新数组的长度
splice() 方法可用于向数组添加新项

let arr = ['1','2','3','4']
arr.splice(2,0,'foo','bar') 
console.log(arr)  //['1', '2', 'foo', 'bar', '3', '4']
第一个参数(2)定义了应添加新元素的位置,
第二个参数(0)定义应删除多少元素,
其余参数('foo', 'bar')定义要添加的新元素。

concat() 合并现有数组来创建一个新数组,方法不会更改现有数组,会返回一个新数组
slice() 从开始参数园区元素,直到结束参数为止

 let arr = ['1','2','3','4']
 arr.slice(1,3)  //返回['2','3']  不会改变原数组

十五.链式调用

例如:

$('div’).css('color', 'red').show();

优点是:链式调用这种风格有助于简化代码的编写工作,让代码更加简洁、易读,同时也避免多次重复使用一个对象变量

十六.深拷贝和浅拷贝 浅拷贝拷贝的是地址值,

深拷贝: JSON.parse(JSON.stringify(obj)) Object.create(obj)

十七.事件循环

先执行主线程上的任务,主线程的任务执行完,如果有微任务(new promise().then nextTick),先执行微任务,所有微任务执行完再执行宏任务(setTimeOut setInterval)。

十八.css画三角形、梯形

示例三角形:
image.png
<div class="box"></div>
.box{
  width:0;
  height:0;
  border:10px solid;
  border-color: transparent transparent red transparent;
  /* 边框颜色对应四个位置   上 右 下 左 ,三角的一条边有颜色,其余三边设置为透明*/
}

示例梯形:
image.png
//梯形分为左中右三个部分,左右两边是三角形,中间是长方形。
<span class="box1"></span>
<span class="box2"></span>
<span class="box3"></span>

.box1{
  display:inline-block;
  width:0;
  height:0;
  border:10px solid;
  border-color: transparent red red transparent;
}
.box2{
  width:20px;
  height:20px;
  display:inline-block;
  background:red;
}

.box3{
  display:inline-block;
  width:0;
  height:0;
  border:10px solid;
  border-color: transparent transparent red red ;
  /* 边框颜色对应四个位置   上 右 下 左 ,三角的一条边有颜色,其余三边设置为透明*/
}

十九.Flex布局

容器的属性
flex-direction
flex-wrap
flex-flow
justify-content
align-items
align-content

项目的属性
order
flex-grow
flex-shrink
flex-basis
flex
align-self

二十.!important和max-width

width:100px!Important; max-width:80px; 最后宽度为80px

二十一.页面安全问题

二十二.ES6的promise、解构赋值

二十三.jquery中ajax请求

$.ajax({ url: “”; type:”get/post” data: ; beforeSend: success: function(){ }; error:function(){ } })

二十四.时间戳

Date.now()
new Date().getTime()
new Date().valueOf()

二十五.Vue父子组件的created和mounted执行的先后顺序

执行顺序
父组件 created
子组件 created
子组件 mounted
父组件 mounted

二十六.兄弟、父子组件之间如何传递数据

父向子传值:v-bind 属性绑定
子向父传值:v-on 事件绑定
兄弟组件之间共享数据:EventBus

  • $on 接收数据的那个组件
  • $emit 发送数据的那个组件
    vuex传值

二十七.定时器

setTimeout(()=>{},1000)

二十八.v-if和v-show的区别

v-show 只编译一次
v-if 不停的销毁和创建

二十九.路由 前置路由

三十.闭包 以及如何避免

三十一.插槽

三十二.vue表格

三十三.跨域问题

三十四.移动端调试、兼容

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容