面试题集合

182 阅读6分钟

上下margin重叠问题

边界重叠是指两个多个盒子(可能相邻也可能嵌套)的相邻边界(期间没有任何非空内容, 补白, 边框)重合在一起,而形成一个单一边界.水平边距永远不会重合.​1\.   外边距重叠的意义    外边距的重叠只产生在普通流文档的上下外边距之间, 这个看起来有点    奇怪的规则, 其实有其现实的意义​    当我们上下排列一系列规则的块级元素(如段落P)时,那么块元素之     间因为外边距重叠的存在,段落之间就不会产生双倍的距离。

防止外边距重叠解决方案 :

1\. 使用外层元素padding代替2\. 内层元素透明边框 border : 1px solid transparent;3\. 内层元素绝对定位 position : absolute;4\. 外层元素 overflow : hidden;5\. 内层元素 加 float : left ; 或者display : inline-bloak;6\. 内层元素 padding : 1px ; ​根元素的垂直margin不会被重叠。​

标准CSS 盒子模型(Box Model)

所有HTML元素可以看作盒子,在CSS中,​"box model"这一术语是用来设计和布局时使用。​1\. CSS盒模型本质上是一个盒子,封装周围的HTML元素,​   它包括:*外边距(margin)、边框(border)、   内边距(padding)、实际内容(content)四个属性。​2\. 盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。

标准的CSS盒子模型与低版本IE的盒子模型的区别

CSS盒子模型:由四个属性组成的1) 外边距(margin)、2) 内边距(padding)、3) 边界(border)、4) 内容区(widthheight);​标准的CSS盒子模型和低端IE CSS盒子模型不同:宽高不一样  1\. 标准的css盒子模型宽高就是内容区宽高;  2\. 低端IE css盒子模型宽高 内边距﹢边界﹢内容区;

低于性能有哪些优化点

1\. 减少请求数量2\. 减小资源大小3\. 优化网络连接4\. 优化资源加载5\. 减少重绘回流6\. 性能更好的API7\. webpack优化​

移动端配置方案有哪些

Flex布局属性有哪些

1\. flex布局又称为 (盒子布局) 或 (弹性布局)2\. 给盒子添加(display: flex/inline-flex;)属性3\. flex布局以后,子元素的float、clear和vertical-align属性会失效!6个核心属性 :     1). flex-direction   决定主轴的方向    2). flex-flow       设置主轴方向是否换行                       是flex-direction属性和flex-wrap属性的                       简写形式, 默认值为row nowrap    3). flex-wrap        换行            nowrap      不换行            wrap        换行            wrap-reverse   反向换行    4). justify-content  主轴对齐方式                flex-start    开始位置                flex-end      结束位置                center        居中                space-between 两端对齐                space-around  两端平分    5). align-items      侧轴对齐方式                flex-start    开始位置                flex-end      结束位置                center        居中                baseline      第一行文本底部对齐                stretch      顶部对齐    6). align-content   多根轴线对齐方式                flex-start    开始位置                flex-end      结束位置                center        居中                space-between 两端对齐                space-around  两端平分

项目的6个核心属性 :

1\. ordex  定义项目的排列顺序, 数字越小越靠前,默认为0     (1,2,3)2\. flex-grow  定义项目的放大比例, 默认为0    (1,2,3)3\. flex-basis  定义剩余空间的分配, 默认为auto     (1,2,3)4\. flex  定义flex-grow, flex-shrinkflex-basis的简写5\. align-self  单项目不一样的对齐方式, 可覆盖align-items属性, 默认为auto    (auto, flex-start, flex-end, center, baseline, stretch )

js中let与var,以及const的区别

let 变量
1\. let不具备变量提升, 具有块级作用域, 不允许重复定义
   let是块级变量.
   使用let声明的变量, 在声明前无法使用,否则将会导致错误;
   如果未在 let 语句中初始化变量,则将自动为其分配undefined2\. var 具有变量提升,可以重复定义
   var定义的变量是全局变量或者函数变量。
   函数中使用var关键字进行是做为局部变量,
   而没有用var关键字,直接赋值方式声明的是全局变量。

3\. const定义常量(一旦赋值不可更改)
   const也用来声明变量,但是声明的是常量。
   一旦声明,常量的值就不能改变,
   同时它与let相同也不能在相同块级作用域内重复声明同一个变量。

注意:const的作用域与let命令相同:只在声明所在的块级作用域内有效。

== 和 ===的区别

1、对于string,number等基础类型,==和===是有区别的
   不同类型间比较,
   ==是比较"转化成同一类型后的值""值"是否相等,
   ===如果类型不同,其结果就是不等
   同类型比较,直接进行"值"比较,两者结果一样
2、对于Array,Object等高级类型,==和===是没有区别的
3、基础类型与高级类型,==和===是有区别的
   对于 ==,将高级转化为基础类型,进行"值"比较,
   因为类型不同,=== 结果为false

数组的常用方法和作用

数组的方法

改变原来数组的方法
01\. pop()  
	改变原数组, 删除数组最后一个元素
	如果数组为空,则该方法不改变数组,并返回undefined
02\. push()   
	数组尾部添加元素, 返回数组的新长度, 不改变原数组

03\. reverse()    
 	颠倒数组的顺序, 改变原数组, 倒序
 	该方法会改变原来的数组,而不会创建新的数组。
04\. sort 对数组元素进行排序(改变原数组)
	使用比较函数,该函数要比较两个值,
	比较函数应该具有两个参数 ab
05\. shift()
 	改变原数组, 删除数组第一个元素
	如果数组是空的,那么shift()方法将不进行任何操作,
	返回 undefined 值。
06\. unshift()   
	向数组的开头添加一个或更多元素, 改变原数组,并返回新的长度
注释:该方法会改变数组的长度。
注释:unshift() 方法无法在 Internet Explorer 中正确地工作
07\. splice()   
	向数组中添加或删除元素, 改变原数组,然后返回被删除的元素
	所有主流浏览器都支持 splice() 方法。
	(1). 两个参数表示删除, 开始位置删除几个
	(2). 第二个参数为0是表示插入
	(3). 第二个参数为11以上表示替换

注释 : splice()方法与 slice()方法的作用是不同的,
	  splice() 方法会直接对数组进行修改。

不改变原来数组的方法
01\. concat()
	合并多个数组或元素(不改变原数组)
02\. join()
	将数组用分隔符连接成字符串(不改变原数组)
03\. slice()
	截取原数组中某段元素(不改变原数组)
	slice()方法可从已有的数组中返回选定的元素。
04\. toString()
	把数组转换为字符串,并返回结果(不改变原数组)
05\.  toLocaleString()
	把数组转换为字符串(不改变原数组)

对于异步请求,回调函数有什么缺点

如何解决回调地狱问题

实现函数防抖和函数节流