美文网首页
互联网前端面试题

互联网前端面试题

作者: Ruimy | 来源:发表于2018-11-23 14:06 被阅读0次

    一、布局相关

    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、移动端适配怎么做的?

    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum=1.0,user-scalable=1.0" >

    具体见: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中

    相关文章

      网友评论

          本文标题:互联网前端面试题

          本文链接:https://www.haomeiwen.com/subject/nxwdjftx.html