1.语义化的理解
一方面,语义化就是让计算机能够快速的读懂内容,高效的处理信息,例如web使用的标签table,h1,h2,uo,li,img等标签,搜索引擎只能通过标签来判断内容的语义。因为页面的很大一部分流量是来自搜索引擎的,要使页面尽可能地对搜索引擎友好,所以就要尽可能地使标签语义化。另一方面就是便于与他人的协作,他人通过读代码就可以理解你网页标签的意义。
可以分为html语义化,单单从标签就可以理解内容的含义,不需要任何css的修饰,例如div是division分离,span是span范围,table是table表格,ol是orderList 有序列表,ul是unorderList无序列表,li就是list item 列表选项。
还有就是css命名语义,我们可以通过设置标签的id或class来对标签进行进一步的说明描述,例如id=”header”,id=”footer”,class=”nav_right”,class=‘“nav_left”等
现在html5的出现进一步推进了web语义化的发展,使用了一些新的标签header,footer,session等。
2. js ==与===区别(两个等号与三个等号)
1、对于string,number等基础类型,==和===是有区别的
1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等
2)同类型比较,直接进行“值”比较,两者结果一样
2、对于Array,Object等高级类型,==和===是没有区别的
进行“指针地址”比较
3、基础类型与高级类型,==和===是有区别的
1)对于==,将高级转化为基础类型,进行“值”比较
2)因为类型不同,===结果为false
3.内核:
1、Trident内核:又称为IE内核,360浏览器也是该内核,是微软开发的一种排版引擎。
2、webkit内核:使用的浏览器有chrome、Safari,它的特点在于源码结构清晰、渲染速度极快。缺点是对网页代码的兼容性不高,导致一些编写不标准的网页无法正常显示。
3、Gecko内核:Gecko是套开放源代码的、以C++编写的网页排版引擎,特点是代码完全公开,因此,其可开发程度很高。应用于Firefox浏览器
4.OSI 七层网络模型
Markdown Extra 表格语法:
OSI 七层网络模型 | TCP/IP四层概念模型 | 对应网络协议 |
---|---|---|
应用层 | 应用层 | HTTP、TFTP, FTP, NFS, WAIS、SMTP |
表示层 | 应用层 | Telnet, Rlogin, SNMP, Gopher |
会话层 | 应用层 | SMTP, DNS |
传输层 | 传输层 | TCP, UDP |
网络层 | 网络层 | IP, ICMP, ARP, RARP, AKP, UUCP |
数据链路层 | 数据链路层 | FDDI, Ethernet, Arpanet, PDN, SLIP, PPP |
物理层 | 数据链路层 | IEEE 802.1A, IEEE 802.2到IEEE 802.11 |
5.介绍一下闭包和闭包常用场景
闭包是指有权访问另一个函数作用域中的变量的函数. 创建闭包常见方式,就是在一个函数内部创建另一个函数.
本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
应用场景 设置私有变量和方法让这些变量的值始终保持在内存中还有读取函数内部变量。
不适合场景:返回闭包的函数是个非常大的函数
闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
6.为什么会出现闭包这种东西,解决了什么问题
受JavaScript链式作用域结构的影响,父级变量中无法访问到子级的变量值,为了解决这个问题,才使用闭包这个概念
7.介绍一下你所了解的作用域链,作用域链的尽头是什么,为什么
每一个函数都有一个作用域,比如我们创建了一个函数,函数里面又包含了一个函数,那么现在 就有三个作用域,这样就形成了一个作用域链。
作用域的特点就是,先在自己的变量范围中查找,如果找不到,就会沿着作用域链往上找。
8.输入网址后到页面展现的过程
1.通过dns解析获取ip
2.tcp链接
3.客户端发送http请求
4.tcp传输报文
5.服务器处理请求返回http报文
6.客户端解析渲染页面 (构建DOM树 –> 构建渲染树 –> 布局渲染树:计算盒模型位置和大小 –> 绘制渲染树)
9.三次握手四次挥手
第一次握手:客户端请求与服务端建立连接。第二次:服务端返回确认信息。第三次:客户端收到。
客户:喂?你在吗?我想跟你聊会儿天儿!(发送SYN请求同步报文)
服务:好的,我听着呢(发送SYN请求同步报文,意思是说,咱俩同步着呢),你说吧!(发送ACK确认报文,即可以说了)
客户:好的!(发送ACK确认报文,开始吐槽XXXX)
第一次挥手:客户端传完了,想要断开连接。第二次:服务端收到,半关闭状态。第三次:服务端没信息发了,发送结束报文。第四次:客户端确认,关闭。
然后客户有事儿要挂电话了,又有了下面一段对话,即四次挥手:
客户:我有事儿要挂电话了!(发送Fin结束报文,1次挥手)
服务:好吧(发送ACK确认报文,2次挥手),对了,还有个事儿要跟你说!
……
服务:好了,就这些了,挂了吧!(发送Fin结束报文,3次挥手)
客户:行,挂了吧!(发送ACK确认报文,4次挥手)
服务挂断电话…..
2MSL后……
客户:喂,你还在吗?
啪!(这才断开连接)
为什么四次挥手?
当被动方收到主动方的FIN报文通知时,它仅仅表示主动方没有数据再发送给被动方了。
但未必被动方所有的数据都完整的发送给了主动方,所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方后,
服务器处理请求返回http报文
客户端解析渲染页面 (构建DOM树 –> 构建渲染树 –> 布局渲染树:计算盒模型位置和大小 –> 绘制渲染树)