互联网前端面试题

一、布局相关

1、css有哪些垂直水平居中方式?

答:

① 绝对定位居中技术(通过margin:auto实现水平居中,通过声明元素的高度和下面的css实现垂直居中)

.absoluteCenter {margin: auto;position: absolute;top: 0; left: 0; bottom: 0; right: 0;}

② 负外边距(区块必须声明宽高)

.is-Negative {

width: 300px;

height: 200px;

padding: 20px;

position: absolute;

top: 50%;

left: 50%;

margin-left: -170px; /* (width + padding)/2 /

margin-top: -120px; / (height + padding)/2 */

}  

③ 变形(transform)

.is-Transformed {

width: 50%;

margin: auto;

position: absolute;

top: 50%;

left: 50%;

-webkit-transform: translate(-50%,-50%);

-ms-transform: translate(-50%,-50%);

transform: translate(-50%,-50%)

}

④ 表格单元格(table-cell)实现居中(不推荐使用)

⑤ flexbox实现居中(垂直方向:justify-content,垂直方向:align-items)


2、css选择器有哪些?选择器的优先级?

标签选择器(body,a等);id选择器(#id);类选择器(.class);全局选择器(*);组合选择器(.head .head_img);后代选择器(。head ul li);群组选择器(div,a,span);继承选择器(div p);伪类选择器(4种不同的状态:link、visited、active、hover);子选择器(p>span);相邻选择器(div+p);属性选择器(E[arr])

important>行内style>id>结构性伪类(eg  :nth-child() :nth-of-type())>属性>类>标签>通用


3、使用css实现一个持续的动画效果

          div{

                width: 100px;

                height: 100px;

                position: relative;

                animation: firstdiv 2s linear 1s infinite alternate;

            }

          @keyframes firstdiv{

                0%{top:0;left:0;background-color: greenyellow;}

                25%{top:0;left:100px;background-color: green;}

                50%{top:100px;left:100px;background-color: yellow;}

                75%{top:100px;left:0;background-color: gold;}

                100%{top:0;left:0;background-color: greenyellow;}

            }


4、移动端适配怎么做的?

具体见:https://segmentfault.com/a/1190000008767416


5、rem和em的区别:

一、 rem的特点:

1、rem的大小是根据html根目录下的字体大小进行计算的。

2、当我们改变根目录下的字体大小的时候,下面字体都改变。

3、rem不仅可以设置字体的大小,也可以设置元素宽、高等属性。

二、em的特点:1、字体大小是根据父元素字体大小设置的。

二、概念

1、浏览器高级特性有了解吗?

service worker:https://www.jianshu.com/p/62338c038c42

2、浏览器CSS Hack手段有哪些?

不同的浏览器和浏览器各版本对CSS的支持及解析结果不一样,以及CSS优先级对浏览器展现效果的影响,我们可以据此针对不同的浏览器情景来应用不同的CSS。

CSS Hack大致有3种表现形式:

CSS属性前缀法,选择器前缀法,IE条件注释法(即HTML头部引用if IE),具体见:https://blog.csdn.net/freshlover/article/details/12132801

3、为什么浏览器需要同源策略?

两个URL的协议、域名和端口相同,则表示他们同源。

置同源限制主要是为了安全,如果没有同源限制存在浏览器中的cookie等其他数据可以任意读取,不同域下DOM任意操作,ajax任意请求的话如果浏览了恶意网站那么就会泄漏这些隐私数据

4、浏览器跨域的几种方式?

1、通过jsonp跨域

2、通过修改document.domain来跨子域

3、使用window.name来进行跨域

4、使用HTML5中新引进的window.postMessage方法来跨域传送数据

5、通过CORS跨域(跨域CORS原理及调用具体示例 ):

JSONP的主要优势在于对浏览器的支持较好;虽然目前主流浏览器支持CORS,但IE10以下不支持CORS;

JSONP只能用于获取资源(即只读,类似于GET请求);CORS支持所有类型的HTTP请求,功能完善。(这点JSONP被玩虐,但大部分情况下GET已经能满足需求了)

JSONP的错误处理机制并不完善,我们没办法进行错误处理;而CORS可以通过onerror事件监听错误,并且浏览器控制台会看到报错信息,利于排查。 

5、浏览器性能怎么优化?

1、把css放在head中加载;

2、把js放在body末尾加载;

3、不要使用css的表达式;

4、就是用外链的方式引用css和js,可以有效的减少HTML的体积,

5、压缩js和css;

6、不重复加载js;

7、让Ajax请求可缓存;

8、用GET方式发起Ajax请求;

9、组件延迟加载,保障页面的关键的静态资源优先加载;

10、减少DOM节点数;

11、避免在页面中使用iframe;

12、减少COOKIE的体积;

13、使用无cookie域名加载静态资源

14、减少js中的DOM访问;

15、基于事件冒泡的委托机制;

16、常见的图片优化手段

17、不要在HTML中缩放图片;

18、不要把图片SRC置空;

19、任何资源尽量在25k以内。


6、JS基本数据类型有哪些?

简单数据类型:Undefined、Null、Boolean、Number和String。还有1中复杂的数据类型————Object

7、HTTP和HTTPS的区别?HTTP2.0的区别?它们的默认端口是什么?

HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

HTTP2.0和HTTP的区别主要如下:

1、HTTP2.0的基本单位为二进制帧

2、HTTP2.0中帧具有优先级

3、HTTP2.0的多路复用

4、HTTP2.0压缩消息头

5、HTTP2.0服务端推送

6、HTTP2.0只适用于HTTPS的场景

8、说下BFC是什么?

BFC(block formatting context):简单来说,BFC 就是一种属性,这种属性会影响着元素的定位以及与其兄弟元素之间的相互作用。 

9、CDN有了解吗?怎么让请求在最近的站点下载?

内容分发网络(Content delivery network或Content distribution network)是指一种通过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。

10、怎样判断一个数组是数组?

1、从原型入手,Array.prototype.isPrototypeOf(obj);

2、从构造函数入手,obj instanceof Array

3、根据对象的class属性(类属性),跨原型链调用toString()方法。(Object.prototype.toString.call())

4、Array.isArray()

三、代码

1、请编写一个通用的事件注册函数

var EventUtil ={

        // 得到事件

        getEvent:function(event)

        {

            return event?event:window.event;

        },

        //添加事件

        addEvent:function(element,type,handler){

            //DOM2级事件处理程序,false表示在冒泡阶段处理事件程序

            if(element.addEventListener){

                element.addEventListener(type,handler,true);

            }

            //IE事件处理程序

            else if(element.attachEvent){

                element.attachEvent("on"+type,handler);

            }

            //DOM0级

            else{

                element["on"+type]=handler;

            }

        },

        //移除事件

        removeEvent:function(element,type,handler){

            if(element.removeEventListener){

                element.removeEventListener(type,handler);

            }else if(element.detachEvent){

                element.detachEvent("on"+type,handler);

            }else{

                element["on"+$.type] = null;

            }

        },

        //阻止事件默认行为

        preventDefault:function(event){

            if(event.preventDefault){

                event.preventDefault;

            }else{

                event.returnValue = false;

            }

        },

        //阻止事件冒泡和捕获

        stopPropagation:function(event){

            if(event.stopPropagation){

                event.stopPropagation();

            }else{

                event.cancelBubble = true;

            }

        },

        //得到事件的目标

        getTarget:function(event){

            return event.target||event.srcElement;

        }

2、数组去重

1、Array.from(new Set([1, 1, 1, 2, 3, 2, 4]));   =》[1,2,3,4]

2、遍历数组法:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中;


四、原理

1、堆和栈的概念和区别

堆:队列优先,先进先出;由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

栈:先进后出;动态分配的空间 一般由程序员分配释放。

五、其他

1、tcp和udp协议分别是什么,并且说出他们的区别

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

区别:

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接 

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5、TCP首部开销20字节;UDP的首部开销小,只有8个字节

6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

2、cookie 和session 的区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、所以个人建议:将登陆信息等重要信息存放为SESSION其他信息如果需要保留,可以放在COOKIE中

你可能感兴趣的:(互联网前端面试题)