#行内外空元素
行内元素: a/img/span/b/strong/input/select/section
块级元素: div/p/table/ul/li/h1-h6
空元素: br/hr/img/input/link/meta
#浏览器内核
Trident: IE,360,搜狗
Gecko: Firefox
Presto: 旧Opera
Webkit: Safari,旧Chrome
Blink: Chrome,Opera
#浏览器存储
cookie: 一般表示用户状态的数据,大小为4KB,Cookies的数据始终在同源的http请求中携带,会在浏览器和服务器中来回传递。
sessionStorage:关闭浏览器后就销毁,大小一般都是:5MB,把数据存储在本地。
localStorage:永久保存,大小一般都是:5MB,把数据存储在本地。
#html新特性
加入了canvas绘图和SVG绘图,加入了video和audio标签。
语义化标签:header、nav、footer
本地存储:sessionStorage,sessionStorage
#html语义化
用正确的标签做正确的事情,html语义化让页面的内容结构更加简单易懂,
便于搜索引擎解析,便于阅读维护和理解。
#img的title和alt有什么区别?
title是当鼠标划到图片元素时显示的图片描述
alt是img的特有属性,是图片内容的等价描述,用于图片无法加载时显示
#Web标准,w3c标准是什么?
标签闭合、标签小写、不乱嵌套,使用外链css和js、结构行为表现的分离。
#浏览器盒模型?
W3C: 宽度/padding/border/margin都是单独分开的
IE盒模型: 宽度 = 内容宽度+padding+border 是一起的
#清除浮动的方式
1.在子元素并级后面添加一个新元素,添加clear:both属性
2.给父元素添加overflow:hidden
3.通过给父级元素添加伪类after
#CSS选择器
ID选择器 (#ID)
Class选择器 (.class名)
标签选择器 (标签)
通配符 (*)
相邻选择器 (div+p)
子选择器 (div>p)
后代选择器 (div p)
多个选择器 (div,p,a,ul)
伪类选择器 (a:hover)
#CSS样式优先级计算法
1/就近原则,后加样式优于前面的样式
2/内嵌样式>内联样式>外联样式
3/!Important 大于一切样式
#文本显示省略号
文本超出隐藏并显示省略号
文本只显示两行,第二行超出隐藏并显示省略号
#宽高计算
#flex布局
flex水平垂直居中
align-content:flex-start (竖直方向对齐方式)
多个元素,竖直均匀分布
左边固定宽度,右边占满剩余部分
#grid布局
居中
导航目录自适应布局
每列宽度,然后自动填充
#水平垂直居中
#元素旋转
旋转45度
#响应式布局
1.媒体查询,@media可以根据不同的屏幕定义不同的样式。
2.百分比布局
2.使用rem布局,vue中使用amfe-flexible和postcss-px2rem插件完成。
原生
#BFC
BFC即 Block Formatting Contexts ,块级格式化上下文
独立的渲染区域,内部元素的渲染不会影响外界。
形成BFC 条件
浮动元素 float属性不为none
定位---position: absolute,fixed
给元素添加display属性---display: inline-block, flex, inline-flex, table-cell,table-caption; 给元素添加overflow属性----overflow: hidden,auto,scroll(除了visible);
#字符串方法
String charAt 返回在指定位置的字符。 charCodeAt 返回在指定的位置的字符的 Unicode 编码。 IndexOf 返回某个指定的字符串值在字符串中首次出现的位置。 slice 提取字符串的片断,并在新的字符串中返回被提取的部分。 split 把字符串分割为字符串数组。 toLowerCase 把字符串转换为小写。 toUpperCase 把字符串转换为大写。 trim 去除字符串两边的空白
模板字符串
#数组方法
- join()
数组转字符串,参数为分隔符。返回字符串,原数组不变。
- push()和pop()
向数组的末尾添加元素,返回数组长度,原数组改变。
删除数组的末尾元素,返回删除的元素,原数组改变
- shift() 和 unshift()
删除数组的第一个元素,返回删除元素,原数组改变。
向数组的开头增加元素,返回数组长度,原数组改变。
- sort()
对数组的元素进行排序,默认按照字符编码排序,参数为函数。返回新数组,原数组改变。
- reverse() 反转数组的元素顺序。返回新数组,原数组改变。
- concat() 合并数组,返回新数组,原数组不变。
- slice() 数组截取
arrayObject.slice(start,end),返回所选范围的元素的数组,原数组不变。
- splice() 删除或新增
arrayObject.splice(index,howmany,item1,.....,itemX)
从数组中添加或删除元素,返回被删除的元素数组,原数组改变
- indexOf()和 lastIndexOf()
返回参数在数组中的位置,原数组不变。
返回参数在数组中最后出现的位置,原数组不变。
- includes() 判断一个数组是否包含一个指定的值。返回布尔值,原数组不变。
- find()和findIndex()
返回数组中符合条件的第一个元素,参数为函数,原数组不变。
返回数组中符合条件的第一个元素的索引。
- flat() 多维数组转一维数组,返回新数组,原数组不变。
- forEach() 和map()
遍历数组,forEach没有返回,map返回新数组。
- filter() 返回数组中符合条件的全部元素,参数为函数,原数组不变。
- every() 和 some()
every()是对数组中每一项运行给定函数,如果该函数对每一项返回true,则返回true。
some()是对数组中每一项运行给定函数,如果该函数对任一项返回true,则返回true。
#数组去重
#数组排序
#Date时间对象
getFullYear 从 Date 对象以四位数字返回年份。 getMonth 从 Date 对象返回月份 (0 ~ 11)。 getDate 从 Date 对象返回一个月中的某一天 (1 ~ 31)。 getHours 返回 Date 对象的小时 (0 ~ 23)。 getMinutes 返回 Date 对象的分钟 (0 ~ 59)。 getSeconds 返回 Date 对象的秒数 (0 ~ 59)。 getDay 从 Date 对象返回一周中的某一天 (0 ~ 6)。 getTime 返回 1970 年 1 月 1 日至今的毫秒数。
#数据类型
1.基本数据类型(栈):Number,String,Boolean,Undefined,Null,Symbol(es6)
2.引用数据类型(堆):Object,Array,Function , Date
JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型
#new操作符在创建实例的经历的阶段
new创建了一个对象,共经历了4个阶段:
1.创建一个空对象
2.设置原型链
3.让实例化对象中的this指向对象,并执行函数体
4.返回创建的对象
#闭包
函数内部嵌套的函数
有权访问另一个函数作用域中的变量的函数。常见方式,就是在一个函数内部创建另一个函数。
功能:在函数外,访问函数内的变量。保持引用,不被回收。创建私有环境。
缺点:内存泄漏
#原型
1.每一个函数都有一个'prototype'属性,即显示原型。prototype(对象属性)的所有属性和方法,都会被构造函数的实例继承。
2.每一个实例对象都有一个'proto '属性,即隐式原型。
原型链
获取对象属性时,如果对象本身没有这个属性,就会去找这个对象'proto '属性指向上一个对象,一直找到最顶层()为止。Object.prototype对象也有proto属性值为null
#深拷贝
#ES6
1.let 和const
var定义变量,会有变量声名提升,let不会。
var定义全局的变量,let和const定义块级的变量。
const定义常量。for循环用let。
2.模板字符串
3..函数默认值
函数剩余参数
4.拓展运算符
5.箭头函数
箭头函数没有this指向
箭头函数不能使用new来实例化对象
this指向:
1.普通函数,this指向window
2.谁调用指向谁
3.call、apply、bind这三个方法将this指向绑定在传入的对象上
4.new实例化后指向实例对象
5.箭头函数 ,根据外层作用域来决定this
call,apply,bind的区别?
call和apply改变this指向,bind则是绑定this指向后返回新函数。
call和apply立即执行,bind需要调用才执行。
call如果传的多个参数,依次填,apply则是第二个参数是数组。
6.解构赋值
7.对象的方法
8.set和map
#Promise
Promise 是异步编程的一种解决方案
对象是一个构造函数,用来生成实例
问执行顺序,控制台依次打印?
10.class类
#http的状态码
1XX:信息状态码
2XX:成功状态码
3XX:重定向
4XX:客户端错误
5XX:服务器错误
常见状态码:
304 自从上次请求后,请求的网页未修改过。
401 没有权限,请求要求身份验证。
403 服务器已经理解请求,但是拒绝执行它。
404 请求失败
500 服务器遇到一个未曾预料的情况,导致无法完成对请求的处理
503 由于请示服务器维护或者过载,服务器当前无法处理请求
#get与post的区别
GET在浏览器回退时是无害的,而POST会再次提交请求
GET产生的URL地址可被Bookmark,而POST不可以
GET请求会被浏览器主动cache缓存,而POST不会,除非手动设置
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整的保留在浏览器历史记录中,而POST中的参数不会被保留
GET请求在URL中传送的参数是有长度限制的,而POST没有
对参数的数据类型,GET只接受ASCII字符,而POST没有限制
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
GET参数通过URL传递,POST放在Request body中
#ajax的过程
#axios封装
#vue的指令
v-text:把数据插入标签
v-html:把html插入标签
v-if:判断是否为真,然后重组、销毁DOM节点
v-for:数据循环
v-bind:class 绑定一个属性
v-model:实现双向绑定
v-on:添加事件
v-else:配合v-if使用
#v-show和v-if
v-show指令是通过修改元素的display的CSS属性让其显示或隐藏
v-if指令是直接销毁和重建DOM节点,达到让元素显示和隐藏的效果
#CSS只在当前组件中生效
在当前文档中使用style标签,并添加scope属性
#动态类绑定
#避免 v-if 和 v-for
v-for 比 v-if 具有更高的优先级,每一次都需要遍历整个数组,造成不必要的计算,影响性能。
永远不要把 v-if 和 v-for 同时用在同一个元素上,带来性能方面的浪费(每次渲染都会先循环再进行条件判断)
避免出现这种情况,则在外层嵌套template(页面渲染不生成dom节点),在这一层进行v-if判断,然后在内部进行v-for循环
#虚拟Dom
用JS模拟真实的dom结构,作用是高效的渲染页面 减少不必要的dom操作 提高渲染效率
#双向绑定
Vue是采用数据劫持+”发布-订阅模式“的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。
#data是函数?
组件中的写成一个函数,数据以函数返回值形式定义,这样每复用一次组件,就会返回一份新的,类似于给每个组件实例创建一个私有的数据空间,让各个组件实例维护各自的数据。
#$nextTick
在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM
#父子组件传值
父传子
子传父
父页面
子页面
#watch
基础用法
deep 深度监听
#Vue Router
标签中使用
方法中使用
嵌套路由
重定向
#路由守卫
全局前置守卫 router.beforeEach
全局后置钩子 router.afterEach
路由独享的守卫 beforeEnter
组件内的守卫
路由修改网页标题
#路由模式
hash模式
使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载,其显示的网路路径中会有 “#” 号,有一点点丑。这是最安全的模式,因为他兼容所有的浏览器和服务器。
history模式 美化后的hash模式,会去掉路径中的 “#”。依赖于Html5 的history,pushState API,所以要担心IE9以及一下的版本,感觉不用担心。并且还包括forward、back、go三个方法,对应浏览器的前进,后退,跳转操作。就是浏览器左上角的前进、后退等按钮进行的操作。
#vuex
#vue性能优化
路由懒加载,访问时才异步加载,import()实现异步组件
组件缓存keep-alive,缓存组件以及状态
v-show复用dom,避免重复创建组件
v-for 遍历时不使用v-if
事件销毁,组件卸载的时候,销毁一些自定义的事件,如定时器
图片懒加载 vue-lazyload
按需加载第三方组件库
服务器端开启gzip压缩
#使用echarts
#跨域解决
1.让服务器的请求头设置允许跨域。
2.jsonp实现跨域请求。
3.vue配置跨域
根目录vue.config.js
#环境配置
根目录新建
.env.development,测试环境
.env.production,正式环境
#判断移动、pc端
#安装
npm init -y 生成package.json文件
npm i webpack webpack-cli --save-dev
#1.生命周期
页面生命周期
onLoad、onShow、onReady、onHide、onUnload
#节流和防抖
https://blog.csdn.net/m0_/article/details/?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~LandingCtr~Rate-1.queryctrv4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~LandingCtr~Rate-1.queryctrv4&utm_relevant_index=2(opens new window)
节流和防抖本质上都是控制事件执行的频率,但是触发事件的时机本质上有区别,防抖是在用户多次触发事件,当用户停止触发事件,将事件执行一次;节流是用户多次触发事件,会在多次触发的过程中,间隔执行事件。
防抖是最后一个执行事件才会触发函数,节流在一定时间内会触发函数。
防抖案例:按钮一直被点击,控制时间1s内被点击,事件不执行,1s后没有被点击则执行事件。
节流案例:按钮被点击后变为禁用状态,5s后变为可点击状态。
防抖:输入框应用
节流:页面滚动加载数据
#简介
- 什么是 WebSocket websocket是HTML5开始提供的一种网络通信协议,它的目的是在浏览器之间建立一个不受限的双方通信的通道,比如说,服务器可以在任意时刻发送信息给浏览器。在websocket的API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输
- WebSocket 的方法 ws.send() - 向服务器发送数据 ws.close() - 关闭连接
- WebSocket 的事件 ws.onopen - 建立连接时触发 ws.onmessage - 客户端接受服务端数据时触发 ws.onerror - 通信错误时触发 ws.onclose - 连接关闭时触发
- WebSocket.readyState readyState 属性返回实例对象的当前状态,共有四种状态 0 - 表示正在连接 1 - 表示连接成功,可以进行通信 2 - 表示连接正在关闭 3 - 表示连接已经关闭,或者打开连接失败 使用
https://lbsyun.baidu.com/index.php?title=jspopular3.0/guide/helloworld(opens new window)
到此这篇重绘和回流(重绘和回流面试题)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/jszy-zmms/39867.html