1、阐述清除浮动的几种方式(常见问题)
- 最后一个浮动标签后,新加一个标签,给其设置clear:both(添加了无意义标签,语义化差)
- 父级元素添加 overflow:hidden(内容增多的时候容易造成不会自动换行导致内容被隐藏掉)
- 使用after伪元素清除浮动(推荐使用)
(注:css中的伪元素:before、after、first-letter、firstline)
2、 Javascript中的定时器有哪些?他们的区别及用法是什么?
setTimeout 只执行一次
setInterval 会一直重复执行
3、请描述一下 cookies 、sessionStorage和localstorage区别
不同点:
1.存储大小
· cookie数据大小不能超过4k。
· sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
2.有效时间
· localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;
· sessionStorage 数据在当前浏览器窗口关闭后自动删除。
· cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭
3. 数据与服务器之间的交互方式
· cookie的数据会自动的传递到服务器。
· sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
(注: cookie 和session 的区别:
- cookie数据存放在客户的浏览器上,cookie不是很安全单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
- session数据放在服务器上,当访问增多,会比较占用你服务器的性能。
4、什么是ajax?
ajax(异步javascript xml) 能够刷新局部网页数据而不是重新加载整个网页。
5. 块级元素水平垂直居中的方法有哪些
让div等块级元素水平和垂直都居中,即永远处于屏幕的正中央,
1、CSS的margin设置为auto让浏览器自己帮我们水平和垂直居中
2、利用 flex 布局
.container {
display: flex;
align-items: center; /* 垂直居中 */
justify-content: center; /* 水平居中 */
}
6、http 和 https 有何区别
http是HTTP协议运行在TCP之上。所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。
https是HTTP运行在SSL/TLS之上,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方也可以验证客户端的身份
7.常见的HTTP状态码
- 2开头 (请求成功)表示成功处理了请求的状态代码。
200 (成功) 服务器已成功处理了请求;
202 (已接受) 服务器已接受请求,但尚未处理;
- 3开头 (请求被重定向)表示要完成请求,表示要完成请求,需要进一步操作:
301 (永久移动) 请求的网页已永久移动到新位置;
- 4开头 (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。
404 (未找到) 服务器找不到请求的网页
- 5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。
500 (服务器内部错误) 服务器遇到错误,无法完成请求;
8、px和em的区别
px表示像素 (计算机屏幕上的一个点:1px = 1/96in),是绝对单位,不会因为其他元素的尺寸变化而变化;
em表示相对于父元素的字体大小。em是相对单位 ,没有一个固定的度量值,而是由其他元素尺寸来决定的相对值。
9、CSS样式覆盖规则
- 继承的样式和直接指定的样式冲突时,直接指定的样式获胜
- !important>>内联样式的权值>>ID选择器>>类选择器>>标签选择器
10、浏览器的内核分别是什么?
IE: trident内核
Firefox:gecko内核(壁虎)
Safari:webkit内核
Opera: Blink内核 (眨眼)
Chrome:Blink
11、js的基本数据类型
JavaScript中有五种基本数据类型,它们分别是:undefined,null,boolean,number,string,还有一种复杂数据类型object。
12、h5新特性
(1)新的语义标签:header、footer、section、article
(2)表单新特性
(3)视频和音频:audio、video
(4)Canvas绘图
(5)地理定位
(6)本地存储:localStorage 、sessionStorage
(7) 新协议WebSocket:单个 TCP 连接上进行全双工通讯的协议
13、请写出你对闭包的理解,并列出简单的理解
1、定义和用法:闭包是指有权访问另一个函数内部变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,
闭包的优点是可以读取函数内部的变量,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。
闭包有三个特性:
1.函数嵌套函数
2.函数内部可以引用外部的参数和变量
3.参数和变量不会被垃圾回收机制回收
14、什么叫优雅降级和渐进增强?
- 渐进增强 progressive enhancement:
针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
- 优雅降级 graceful degradation:
一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
15、websocket和ajax轮询
websocket是html5中提出的新的协议,它允许客户端和服务器之间进行全双工通信(而HTTP协议有一个缺陷:通信只能由客户端发起,服务器主动向客户端发起消息)
ajax轮询连接需要每隔一段时间就向服务器发起请求,查询服务器是否有数据更新
缺点就是,每次都要建立HTTP连接,即使需要传输的数据非常少,浪费带宽。
16、Doctype作用?
<!DOCTYPE>声明位于文档的最前面,告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。
17、CSS 选择器有哪些?哪些属性可以继承?
- 选择器:
id选择器(#myId)
类选择器(.myClassName)
标签选择器(div,p,h1)
相邻选择器(h1 + p)
子选择器(ul > li)
后代选择器(li a)
通配符选择器(*)
属性选择器(button[disabled="true"])
伪类选择器(a:hover,li:nth-child)
- 可继承的样式: font-size font-family color, UL LI DL DD DT;
- 不可继承的样式:border padding margin width height ;
18.javascript的内存回收机制?
垃圾回收器会每隔一段时间找出那些不再使用的内存,然后为其释放内存
1、一般使用标记清除方法 当变量进入环境标记为进入环境,离开环境标记为离开环境
2、引用计数方法,记录每个值被使用的次数,引用次数变为0的时 候,说明没有变量在使用
19、行内元素有哪些?块级元素有哪些? 空(void)元素有那些?
首先:CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,如div的display默认值为“block”,则为“块级”元素;span默认display属性值为“inline”,是“行内”元素。
(1)行内元素有:a b span img input select strong(强调的语气)
(2)块级元素有:div ul li h1 h2 h3
(3)常见的空元素:<br> <hr> <img> <input> <link> <meta>
20、CSS3有哪些新特性?
1.css3选择器
2.@Font-face 特性,可以用来加载字体样式,让客户端显示客户端所没有安装的字体。
3.圆角(border-radius)
4.阴影(Shadow)
5.多列布局 (multi-column layout)
6. CSS3 的渐变效果
72D转换效果:Transforms
8.动画特效:Animation
9.flex布局
21、position的值, relative和absolute分别是相对于谁进行定位的?
- absolute :生成绝对定位的元素,相对于最近一级的定位
- fixed生成绝对定位的元素,通常相对于浏览器窗口进行定位。
- relative 生成相对定位的元素,相对于其在普通流中的位置进行定位。
- static 默认值。没有定位,元素出现在正常的流中
- sticky 生成粘性定位的元素,容器的位置根据正常文档流计算得出
22、谈谈你对webpack的看法
WebPack 是一个模块打包工具,你可以使用WebPack管理你的模块依赖,并编绎输出模块们所需的静态文件。它能够很好地管理、打包Web开发中所用到的HTML、JavaScript、CSS以及各种静态文件(图片、字体等),让开发过程更加高效。对于不同类型的资源,webpack有对应的模块加载器。webpack模块打包器会分析模块间的依赖关系,最后生成了优化且合并后的静态资源。
23、说说TCP传输的三次握手四次挥手策略
TCP建立连接需要三次握手,也就是指建立一个TCP连接的时候,客户端和服务器总共传送三个数据包,目的是客户端连接服务器的指定端口。握手过程中使用了TCP的标志:SYN和ACK。
- 第一次握手:首先客户端发送一个带有标志位为1的SYN标志的数据包给服务器。
- 第二次握手:服务器接收后,返回一个带有ACK标志的数据包应答,即SYN和ACK标志位为1,并确认序列号为+1。
- 第三次握手:最后客户端再次发送确认包(ACK),SYN的标志位为0,ACK标志位为1,并把服务器发送来的ACK的序号+1,代表握手结束。
TCP断开连接需要四次挥手。也就是指断开一个TCP连接的时候,客户端和服务器总共传送四个数据包,服务器和客户端都可以主动发起挥手(断开连接)。
- 第一次挥手:主动关闭方发送一个标志位为1的FIN的数据包,用来关闭主动方到被动关闭方的数据传输,也就是主动关闭方告知被动关闭方,不会再给被动方发送数据。但是在FIN包发送之前发送出去的数据,如果没有收到对应的ACK确认报文,主动关闭方依然会重发这些数据,此时主动关闭方还可以接受数据。
- 第二次挥手:被动方收到FIN包后,发送一个标志位为1的ACK数据包,确认序号为收到的序号+1。
- 第三次挥手:被动方发送一个标志位为1的FIN包,用来关闭被动方到主动方的数据传输,告知主动方,数据发送完毕,不会再发送数据。
- 第四次挥手:主动关闭方收到FIN包后,发送一个标志位为1的ACK包,确认序号为收到的序号+1,到这里,四次挥手完成。
24、创建ajax过程
(1)创建XMLHttpRequest对象,也就是创建一个异步调用对象.
(2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息(即请求报文行).
(3)设置响应HTTP请求状态变化的函数.
(4)发送HTTP请求.
(5)获取异步调用返回的数据.
(6)使用JavaScript和DOM实现局部刷新
25、Web Worker
就是在js单线程执行的基础上开启一个子线程,进行程序处理,而不影响主线程的执行,当子线程执行完之后再回到主线程上,在这个过程中不影响主线程的执行。
26、谈谈性能优化问题
- 代码级的优化:
- 优化DOM操作(减少dom操作,多个操作尽量合并到一),减少闭包的使用
- 页面级的优化:
- 使用JSON格式(代替XML)来进行数据交互。
- CSS样式放在header中,JS逻辑放在关闭标签</body>之前
- 尽量别使用iframe标签,会消耗大量的时
- 服务器端的优化:
- 合并css文件,合并js文件(webpack打包工具可以实现)
- 使用CDN和缓存来提高速度
27、CSS中link 和@import的区别是?
(1) link属于HTML标签,而@import是CSS提供的;
(2) 页面被加载的时,link会同时被加载,而@import被引用的CSS会等到引用它的CSS文件被加载完再加载;
(3) import只在IE5以上才能识别,而link是HTML标签,无兼容问题;
(4) link方式的样式的权重高于@import的权重.