有幸去鹅厂面试一次,然鹅作为一个水货果然一面都没过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的区别。