原文连接:连接描述
1.css禁用鼠标事件javascript
.disabled { pointer-events: none; cursor: default; opacity: 0.6; }
2.get/post的理解和他们之间的区别
httpcss
超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通讯。 HTTP 的工做方式是客户机与服务器之间的请求-应答协议。 web
浏览器多是客户端,而计算机上的网络应用程序也可能做为服务器端。
http方法:html
HEAD: 与 GET 相同,但只返回 HTTP 报头,不返回文档主体 PUT: 上传指定的 URI 表示 DELETE: 删除指定资源
OPTIONS: 返回服务器支持的 HTTP 方法 CONNECT: 把请求链接转换到透明的 TCP/IP 通道 POST:
向指定的资源提交要被处理的数据
// 查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的 POST /test/demo_form.asp HTTP/1.1 Host: w3schools.com name1=value1&name2=value2
GET: 从指定的资源请求数据
GET和POST的区别前端
GET 请求可被缓存 GET 请求保留在浏览器历史记录中 GET 请求可被收藏为书签 GET 请求不该在处理敏感数据时使用 GET
请求有长度限制(2048字符),IE和Safari浏览器限制2k;Opera限制4k;Firefox,Chrome限制8k GET
请求只应当用于取回数据 POST 请求不会被缓存 POST 请求不会保留在浏览器历史记录中 POST 不能被收藏为书签 POST
请求对数据长度没有要求
3.实现条纹网格的方式java
1.nth-child(even/odd)
// odd表示基数,此时选中基数行的样式,even表示偶数行 .row:nth-child(odd){ background: #eee; }
2.nth-of-type(odd)
.row:nth-of-type(odd){ background: #eee; }
3.渐变实现linear-gradient
.stripe-bg{ padding: .5em; line-height: 1.5em; background: beige; background-size: auto 3em; background-origin: content-box; background-image: linear-gradient(rgba(0,0,0,.2) 50%, transparent 0); }
4.js求平面两点之间的距离web
// 数据能够以数组方式存储,也能够是对象方式 let a = {x:'6', y:10}, b = {x: 8, y: 20}; function distant(a,b){ let dx = Number(a.x) - Number(b.x) let dy = Number(a.y) - Number(b.y) return Math.pow(dx*dx + dy*dy, .5) }
5.css禁止用户选择正则表达式
body{ -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }
6.数组去重数组
// indexOf实现 var array = [1, 1, '1']; function unique(array) { var res = []; for (var i = 0, len = array.length; i < len; i++) { var current = array[i]; if (res.indexOf(current) === -1) { res.push(current) } } return res; } console.log(unique(array)); // 排序后去重 var array = [1, 1, '1']; function unique(array) { var res = []; var sortedArray = array.concat().sort(); var seen; for (var i = 0, len = sortedArray.length; i < len; i++) { // 若是是第一个元素或者相邻的元素不相同 if (!i || seen !== sortedArray[i]) { res.push(sortedArray[i]) } seen = sortedArray[i]; } return res; } console.log(unique(array)); // filter实现 var array = [1, 2, 1, 1, '1']; function unique(array) { var res = array.filter(function(item, index, array){ return array.indexOf(item) === index; }) return res; } console.log(unique(array)); // 排序去重 var array = [1, 2, 1, 1, '1']; function unique(array) { return array.concat().sort().filter(function(item, index, array){ return !index || item !== array[index - 1] }) } console.log(unique(array)); // Object键值对 var array = [{value: 1}, {value: 1}, {value: 2}]; function unique(array) { var obj = {}; return array.filter(function(item, index, array){ console.log(typeof item + JSON.stringify(item)) return obj.hasOwnProperty(typeof item + JSON.stringify(item)) ? false : (obj[typeof item + JSON.stringify(item)] = true) }) } console.log(unique(array)); // [{value: 1}, {value: 2}] // ES6 Set实现 var unique = (a) => [...new Set(a)]
7.什么是CDN和CDN的好处浏览器
CDN:CDN是将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提升用户访问的响应速度和成功率。解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。
好处: 一、多域名加载资源
通常状况下,浏览器都会对单个域名下的并发请求数(文件加载)进行限制,一般最多有4个,那么第5个加载项将会被阻塞,直到前面的某一个文件加载完毕。
由于CDN文件是存放在不一样区域(不一样IP)的,因此对浏览器来讲是能够同时加载页面所需的全部文件(远不止4个),从而提升页面加载速度。
二、文件可能已经被加载过并保存有缓存 一些通用的js库或者是css样式库,如jQuery,在网络中的使用是很是广泛的。当一个用户在浏览你的某一个网页的时候,颇有可能他已经经过你网站使用的CDN访问过了其余的某一个网站,恰巧这个网站一样也使用了jQuery,那么此时用户浏览器已经缓存有该jQuery文件(同IP的同名文件若是有缓存,浏览器会直接使用缓存文件,不会再进行加载),因此就不会再加载一次了,从而间接的提升了网站的访问速度缓存
三、高效率 你的网站作的再NB也不会NB过百度NB过Google吧?一个好的CDNs会提供更高的效率,更低的网络延时和更小的丢包率。
四、分布式的数据中心 假如你的站点布置在北京,当一个香港或者更远的用户访问你的站点的时候,他的数据请求势必会很慢很慢。而CDNs则会让用户从离他最近的节点去加载所需的文件,因此加载速度提高就是理所固然的了。
五、使用状况分析 通常状况下CDNs提供商(如百度云加速)都会提供数据统计功能,能够了解更多关于用户访问本身网站的状况,能够根据统计数据对本身的站点适时适当的作出些许调整。
六、有效防止网站被攻击 通常状况下CDNs提供商也是会提供网站安全服务的
8.圣杯布局和双飞翼布局
参考链接
9.正则表达式匹配手机号
function checkPhone(){ if(!(/^1[34578]\d{9}$/.test(phone))){ alert("手机号码有误,请重填"); return false; } }
10.如何提升首频加载速度
1.js外联文件放到body底部,css外联文件放到head内 2.http静态资源尽可能用多个子域名 3.服务器端提供html和http静态资源时最好开启gzip 4.在js,css,img等资源响应的http headers里设置expires,last-modified 5.尽可能减小http requests的数量
6.js/css/html/img资源压缩 7.使用css spirtes,能够减小img请求次数 8.大图使用lazyload懒加载 9.避免404,减小外联js 10.减小cookie大小能够提升得到响应的时间 11.减小dom elements的数量 12.使用异步脚本,动态建立脚本
11.浏览器内核(渲染引擎)
IE/360/搜狗浏览器: Trident Chrome/Safari/Opera: WebKit(KHTML的一个开源的分支)
(虽然咱们称WebKit为浏览器内核,但不太适合直接称渲染引擎,由于WebKit自己主要是由两个引擎构成的,一个正是渲染引擎“WebCore”,另外一个则是javascript解释引擎“JSCore”,它们均是从KDE的渲染引擎KHTML及javascript解释引擎KJS衍生而来。)
(在13年发布的Chrome
28.0.1469.0版本开始,Chrome放弃Chromium引擎转而使用最新的Blink引擎(基于WebKit2——苹果公司于2010年推出的新的WebKit引擎),Blink对比上一代的引擎精简了代码、改善了DOM框架,也提高了安全性。)
(为了减小研发成本,Opera在2013年2月宣布放弃Presto,转而跟随Chrome使用WebKit分支的Chromium引擎做为自家浏览器核心引擎)
Firefox/SeaMonkey: Gecko
12.浏览器渲染过程及优化建议
1)解析: 一个是HTML/SVG/XHTML,事实上,Webkit有三个C++的类对应这三类文档。解析这三种文件会产生一个DOM
Tree。 CSS,解析CSS会产生CSS规则树。 Javascript,脚本,主要是经过DOM API和CSSOM API来操做DOM
Tree和CSS Rule Tree.
2)渲染:浏览器引擎会经过DOM Tree 和 CSS Rule Tree 来构造
Rendering Tree。注意: Rendering Tree
渲染树并不等同于DOM树,由于一些像Header或display:none的东西就不必放在渲染树中了。 CSS 的 Rule
Tree主要是为了完成匹配并把CSS Rule附加上Rendering
Tree上的每一个Element。也就是DOM结点。也就是所谓的Frame。
而后,计算每一个Frame(也就是每一个Element)的位置,这又叫layout和reflow过程。
3)绘制:最后经过调用操做系统Native GUI的API绘制。 减小reflow和repaint
4)不要一条一条地修改DOM的样式。还不如预先定义好css的class,而后修改DOM的className。
把DOM离线后修改。如: 使用documentFragment 对象在内存里操做DOM 先把DOM给display:none(有一次reflow),而后你想怎么改就怎么改。好比修改100次,而后再把他显示出来。 clone一个DOM结点到内存里,而后想怎么改就怎么改,改完后,和在线的那个的交换一下。 3)不要把DOM结点的属性值放在一个循环里当成循环里的变量。否则这会致使大量地读写这个结点的属性 4)为动画的HTML元件使用fixed或absoulte的position,尽可能使用transfoem,那么修改他们的CSS是不会reflow的 5)尽可能少使用table布局。由于可能很小的一个小改动会形成整个table的从新布局
13. 页面导入样式时,使用link和@import有什么区别?
(1)link属于XHTML标签,除了加载CSS外,还能用于定义RSS,
定义rel链接属性等做用;而@import是CSS提供的,只能用于加载CSS;
(2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载; (3)import是CSS2.1
提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题;
(4)link支持使用js控制DOM去改变样式,而@import不支持;
14.简述一下你对HTML语义化的理解?
用正确的标签作正确的事情。 html语义化让页面的内容结构化,便于对浏览器、搜索引擎解析;
即便在没有样式CSS状况下也以一种文档格式显示,而且是容易阅读的;
搜索引擎的爬虫也依赖于HTML标记来肯定上下文和各个关键字的权重,利于SEO; 使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
15. 请描述一下 cookies,sessionStorage 和 localStorage 的区别?
cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(一般通过加密)。 cookie数据始终在同源的http请求中携带(即便不须要),记会在浏览器和服务器间来回传递。 sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
存储大小: cookie数据大小不能超过4k。 sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,能够达到5M或更大。
有期时间: localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据; sessionStorage 数据在当前浏览器窗口关闭后自动删除。 cookie 设置的cookie过时时间以前一直有效,即便窗口或浏览器关闭
16. iframe有那些缺点?
iframe会阻塞主页面的Onload事件; 搜索引擎的检索程序没法解读这种页面,不利于SEO; *iframe和主页面共享链接池,而浏览器对相同域的链接有限制,因此会影响页面的并行加载。 使用iframe以前须要考虑这两个缺点。若是须要使用iframe,最好是经过javascript 动态给iframe添加src属性值,这样能够绕开以上两个问题。
最后
感谢您的阅读!想学习前端的小伙伴们记得关注我