前端面试题记录

有幸去鹅厂面试一次,然鹅作为一个水货果然一面都没过Emmm,,,

面试题记一下然后找找答案好了。。。根本不需要问多深我自己底就漏了。叹气。

1.链表和数组的区别(话说我把数据结构全还给老师了我简历上还是不要写了,问的我真是惨不忍睹……)

答案:

数组:

数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。

链表:
链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。比如:上一个元素有个指针指到下一个元素,以此类推,直到最后一个元素。如果要访问链表中一个元素,需要从第一个元素开始,一直找到需要的元素位置。但是增加和删除一个元素对于链表数据结构就非常简单了,只要修改元素中的指针就可以了。如果应用需要经常插入和删除元素你就需要用链表数据结构了。

js实现链表可以参考这篇博客http://web.jobbole.com/88843/

2.实现字符串反转

这个我会

function resStr(str){
    return str.split('').reserve().join('');
}

3.浏览器兼容性方面要注意哪些点,pc端和移动端兼容要注意哪些点?

 4.用css实现三列布局


没有其他条件,当时就随便写了几种,浮动,行内,定位,以及flex。应该是没答错。

5.iframe的优缺点

答:可参考这个回答https://zhihu.com/question/20653055/answer/35387821。可以说是很详细了。缺点之一:搜索引擎不会抓取iframe中的内容

6.如何实现浏览器内多个标签页之间的通信?

答:

7.一个页面从输入URL到页面加载显示完成,这个过程都发生了什么?

答:https://segmentfault.com/a/1190000006879700

8.选出表tab_qq_info中性别为女的用户,如果只想看前一百条呢?(性别字段sex,类型int,0表示男性,1表示女性)

9.分别统计出tab_qq_info中男女用户最早的注册时间(注册时间字段名regist_time,类型int)

10、解释异步、同步

答:

举个例子:普通B/S模式(同步)AJAX技术(异步)
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。
所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。
举个例子 打电话时同步 发消息是异步。

引自http://blog.chinaunix.net/uid-21411227-id-1826898.html

 

11、http2.0协议主要改动点

答:简要的说是

多路复用 (Multiplexing)
多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息

二进制分帧

首部压缩(Header Compression)

具体参考https://zhihu.com/question/34074946/answer/75364178

 

12、json和xml两种协议比较

答:http://www.jianshu.com/p/64cbfcfe507b

13、TCP和UDP的区别,http呢?

答:http://feinibuke.blog.51cto.com/1724260/340272

14、DOM操作——添加、移除、移动、复制、创建和查找节点给出对应函数。

答:

//创建
var el1 = document.createElement('div');
var node = document.createTextNode('hello world!');
//移除节点的稳妥方法http://www.cnblogs.com/rubylouvre/archive/2009/07/17/1525637.html
//移除节点的普通函数
removeChild()
//移动//添加
appendChild()
insertBefore()

//复制
 var deepList = ul.cloneNode(true);            //深复制
 var shallowList = ul.cloneNode(false);        //浅复制
 

 查找节点

 

15、将css应用到html上有哪些方式?

 

16、解释下盒模型。

答:开始固执的认为分为ie盒模型与标准盒模型,面试官问我确定高版本IE盒模型也是一样的么,瞬间傻眼。刚刚测试了发现高版本盒模型还是标准的。主要靠contentbox来区分。Ummmm,官方文档很详细了https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Box_Model/Introduction_to_the_CSS_box_model

17、div左右居中样式

div {
   width:100px;
   margin: 0 auto;  
}

 

18、js中如何实现私有变量?

 

19、js如何做垃圾回收?

js具有自动垃圾收集机制。最常用的垃圾收集方式是标记清除,不太常用的一种叫做引用计数。

20、vue实现双向绑定的原理。

21、简要解释vue实例的生命周期。

22、写一个兼容chrome和IE的事件绑定方法。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>绑定</title>
    <script>
        window.onload = function()
        {
            var oBtn = document.getElementById("btn1");
            //IE  attachEvent(事件名,函数),此方法只有ie支持,FF和Chrome均不支持
            /*oBtn.attachEvent("onclick",function()
            {
                alert("a");
            });
            oBtn.attachEvent("onclick",function()
            {
                alert("b");
            })*/
            //FF和Chrome  addEventListener(事件名,函数),此方法ie不支持
            /*oBtn.addEventListener("click",function()
            {
                alert("a");
            });
            oBtn.addEventListener("click",function()
            {
                alert("b");
            })*/
            //兼容写法:if/else判断
            /*if(oBtn.attachEvent)
            {
                oBtn.attachEvent("onclick",function()
                {
                    alert("a");
                });
                oBtn.attachEvent("onclick",function()
                {
                    alert("b");
                })
            }
            else
            {
                oBtn.addEventListener("click",function()
                {
                    alert("a");
                },false);
                oBtn.addEventListener("click",function()
                {
                    alert("b");
                },false)
            }*/
            //另外,还可以把这个兼容写法封装成一个函数,这样就不用每次绑定事件时都要判断一下
            function myAddEvent(obj,ev,fn)    //obj为要绑定事件的元素,ev为要绑定的事件,fn为绑定事件的函数
            {
                if(obj.attachEvent)
                {
                    obj.attachEvent("on" + ev,fn);
                }
                else
                {
                    obj.addEventListener(ev,fn,false);
                }
            }
            myAddEvent(oBtn,"click",function()
            {
                alert("a");
            })
            myAddEvent(oBtn,"click",function()
            {
                alert("b");
            })
        }
    </script>
</head>
<body>
<input id="btn1" type="button" value="按钮"/>
</body>
</html>

 

23、https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures

在MDN上看闭包内容发现有个笔试题直接是这里边的。题目答案直接是示例。。。。

24、如何做异常处理,异常类型有哪些?

25、如何并发10个请求,所有请求完成后打印一行日志,如何实现?

26、怎么实现1000以内数的阶乘?

27.什么是箭头函数。有什么限制?

28.写一个方法返回一个时间的的字符串要求(yyyy-mm-dd HH:MM:SS)

29.new一个对象,执行的过程。

30、js有哪几种数据类型,请画一下他们的内存图。

31、var let const区别、

 

32、怎么把字符串 转为数字、

33、怎么判断一个字符串是不是回文?

34、for in和for of的区别。

posted @ 2017-09-18 09:59  千枫漓音  阅读(255)  评论(2编辑  收藏  举报