[关闭]
@greenfavo 2016-10-27T15:04:40.000000Z 字数 5591 阅读 722

实习面试总结


面试


阿里一面

1,你是怎么学习的?

2,看了哪些人的博客或文章?

阮一峰,玉伯,朴灵

3,你对前端的理解?

4,css隐藏元素的方法,除了display:none说出5种

5,对MVC的理解

6,对js单线程的理解

JS的单线程是指一个浏览器进程中只有一个JS的执行线程,同一时刻内只会有一段代码在执行(你可以使用IE的标签式浏览试试看效果,这时打开的多个页面使用的都是同一个JS执行线程,如果其中一个页面在执行一个运算量较大的function时,其他窗口的JS就会停止工作)。
而异步机制是浏览器的两个或以上常驻线程共同完成的,例如异步请求是由两个常驻线程:JS执行线程和事件触发线程共同完成的,JS的执行线程发起异步请求(这时浏览器会开一条新的HTTP请求线程来执行请求,这时JS的任务已完成,继续执行线程队列中剩下的其他任务),然后在未来的某一时刻事件触发线程监视到之前的发起的HTTP请求已完成,它就会把完成事件插入到JS执行队列的尾部等待JS处理。又例如定时触发(settimeout和setinterval)是由浏览器的定时器线程执行的定时计数,然后在定时时间把定时处理函数的执行请求插入到JS执行队列的尾端(所以用这两个函数的时候,实际的执行时间是大于或等于指定时间的,不保证能准确定时的)。
所以,所谓的JS的单线程和异步更多的应该是属于浏览器的行为,他们之间没有冲突,更不是同一种事物,没有什么区别不区别的。

腾讯一面

1,事件机制

2,http协议

3,http缓存头,优先级

请求头部
If-Modified-Since
  作用: 把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中。
If-None-Match
  作用: If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag. 使用这样的机制将提高网站的性能
响应头
ETag
  作用: 和If-None-Match 配合使用。 (实例请看上节中If-None-Match的实例)
  例如: ETag: "03f2b33c0bfcc1:0"
Last-Modified:
  作用: 用于指示资源的最后修改日期和时间。(实例请看上节的If-Modified-Since的实例)
  例如: Last-Modified: Wed, 21 Dec 2011 09:09:10 GMT

4,闭包,原理

5,原型链,原型链节点

6,跨域

7,nodejs异步回调处理

8,移动端用过什么工具和框架

9,前端性能优化

10,304状态码时浏览器怎么读取缓存的

11,看过bootstrap,jquery,gulp源码吗(简历上写了我会这些),说说jquery源码

阿里二面

1,项目架构(简历上的)

2,为什么用mongodb,mongodb和sql的区别

3,mongodb中怎么实现事务和锁

mongodb没有使用传统的锁或复杂的带回滚的事务,因为它设计的宗旨是轻量,快速及可预见的高性能。

3,和mongoose同类的框架有没有了解过?

4,mongoose的schema的数据类型,传入的类型与定义不符合会出现什么情况?

会报错,数据无法保存到数据库中,报错:validation failed

5,mongodb中插入没有的字段会出现什么情况?

会忽略该字段,不会保存到数据库中,也不会报错

6,正则中的+ * . 代表什么意思?贪婪匹配与懒惰匹配。

+是至少匹配一个
*是匹配0个或多个字符串
.是查找单个字符,除了换行和行结束符
贪婪匹配是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。
懒惰匹配是匹配尽可能少的字符。例如:
一般?代表尽可能少重复

  1. var str='aabab';
  2. var reg=/a.*b/;
  3. str.match(reg);//['aabab']贪婪匹配
  4. var reg2=/a.*?/;
  5. str.match(reg2);//['aab']懒惰匹配

7,除了post方法,还有其他方法吗?get post的区别

8,get post发送的数据量大小

GET方式提交的数据最多只能是1024字节(1KB),因为GET是通过URL提交数据的,但是http协议并没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2k+35),对其他浏览器,理论上没有限制,其限制取决于操作系统的支持。

POST数据没有限制,起限制作用的是后台程序的处理能力,PHP默认post上传大小是2MB。也就是说post方式传送数据最大理论上没有限制,取决于服务器设置和内存大小。

9,ajax跨域解决方法?

10,jsonp的原理,xhr2怎么实现的跨域?

jsonp只能应对get请求,post请求不行
xhr2 IE10以上兼容--就是利用CORS
CORS(跨域资源共享)跨域原理:在服务端的请求头设置:

  1. header('Access-Control-Allow-Origin:http:baidu.com');
  2. header('Access-Control-Allow-Methods:Post,GET');

11,服务器同意跨域怎么做?在nodejs中怎么做

12,xhr2的浏览器支持情况

IE10以上支持

13,为什么用ueditor

14,对用户提交的表单怎么做安全性处理

15,怎么转义,swig中怎么做转义

反斜杠\进行转义,在swig中用autoescape:true进行html安全转义,autoescape:'js'进行js安全转义

16,前后端的安全性问题

17,跨站请求伪造的表现,如何防范

跨站请求伪造就是攻击者通过用户的浏览器伪造一个链接或页面诱骗用户点击进去,从而获取用户在其他网站比如银行网站的cookie,进而窃取用户信息盗取资金。
防范:
关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于cookie中。
可以在服务器端生成一个随机码,然后放在form表单的隐藏域中,form提交的时候在服务器端检查。比如验证码。

18,xss(跨站脚本攻击)是怎么回事

攻击者在论坛之类的网站上发一个恶意链接,诱导用户点击,盗取用户cookie或者注入脚本攻击该网站。
防范措施:过滤用户的输入,只允许输入合法的值,其他一概过滤。或者对标签进行转义

19,css盒子模型

20,隐藏元素的方法,display:none和visibity:hidden的区别

21,为什么要用swig模板引擎,有没有考虑过其他模板引擎

swig支持模板继承,模板复用,还有变量预处理的过滤器,if/for都支持

22,为什么要用Express?有没有比较过其他框架

Express教程多,简单,回调函数也比较符合js程序员的思维。
koa很轻量,用generator避免了回调函数的嵌套,但有很多ES6的语法,学习成本高

23,为什么要用nodejs,而不用python,php,java之类的

nodejs的语法比较适合前端人员。

24,nodejs支持多线程吗?支持多进程吗?多线程是用哪个模块实现的

可以支持多线程,用threads_a_gogo模块,简称TAGG,或者在需要多线程支持的场景中直接用c++的addon来实现。官方支持的多线程模块是linuv库

也可以支持多进程,用cluster模块实现,还有child_process模块
ApacheBench(简称ab)是Apache附带的一个小工具,用于进行HTTP服务器的性能测试,可以同时模拟多个并发请求。

25,nodejs怎么做内存监测

1,用npm模块的memwatch:
当你的堆内存在5个连续的垃圾回收周期内保持持续增长,那么一个内存泄漏事件被派发,可以发现内存泄露了。但不能定位内存泄露实际出现的位置。通过memwatch heap diff可以得到堆内存使用量和内存随程序运行产生的差异。但只能知道泄露来自于闭包,而不知道是哪一个闭包造成了内存泄露。

2,npm模块node-heapdump是一个非凡的模块,它可以将v8引擎的堆内存内容dump出来。你可以在开发工具中对比不同运行阶段的堆内存快照,这样可以帮助定位到内存泄露的位置。
3,process.memoryUsage()可以直接检测内存的增长。
process.heapTotal,process.heapUsed:分别代表v8引擎内存分配和正在使用的大小。

26,nodejs怎么监测服务器的运行状态?服务器挂掉了怎么通知你

用alinode监控

27,新浪微博的@功能怎么实现?如果是用ajax的话

ajax长轮询:setInterval里处理ajax请求

28,俄罗斯方块的实现思路

29,canvas画布怎么做?是否允许存在多个画布

30,多条件筛选框怎么实现选择条件下面的内容也实时变化?分几个模块实现,怎么做到模块解耦?

31,ajax状态码

readyState的5个值:
0:请求未初始化,此时:已经创建了一个XMLHttpRequest对象
1:服务器连接已建立:此时,已经调用了XMLHttpRequest对象的open方法,并且XMLHttpRequest对象已经准备好将一个请求发送到服务器端
2:请求已发送:此时,已经通过send方法把一个请求发送到服务器端,但是还没有收到一个响应
3:正在接收状态:此时,已经接收到HTTP响应头部信息,但是消息体部分还没有完全接收到
4:请求已完成,且响应已就绪:此时,已经完成了HTTP响应的接收
status的2个值:
200:'ok'
404:未找到页面

别人的面试问题

  1. nodejs单线程的优缺点
  2. nodejs如何实现多线程
  3. nodejs和php比较
  4. 手机端无限瀑布流(无限下拉优化)
  5. web app或网站加载快的方法,除了缓存
  6. BigPage
  7. mongodb索引

常用http状态码

  1. 200 ok
  2. 100 continue
  3. 202 Accepted(已创建)
  4. 204 No Content(无内容)
  5. 206 Partial Content(部分内容) 当客户端通过使用range头字段进行文件分段下载时使用该状态码可以断点续传
  6. 300 Multiple Choice(多种选择)
  7. 301 Moved Permanently(永久移动) 新的url在location头字段中 http/0.9可用
  8. 302 Found(临时移动) http/0.9可用
  9. 303 See Other(查看其它位置) 服务器发送该响应用来引导客户端使用GET方法访问另一个URI
  10. 307 Temporary Redirect(临时重定向) http/1.1可用
  11. 400 bad request(错误请求)
  12. 403 Forbidden(禁止访问) 客户端没有权限
  13. 502 Bad Gateway(网关错误) 服务器作为网关且从上游服务器获取到了一个无效的HTTP响应
  14. 504 Gateway Timeout(网关超时)

HTTP1.1和1.0区别

1. 可扩展性

增加了options方法,它允许客户端获取一个服务器支持的方法列表。

增加了Upgrade头域,通过该头域客户端可以让服务器知道它能够支持的其他备用通信协议,服务器可以据此进行协议切换,使用备用协议与客户端通信。

2,缓存

在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cahe不需要直接抛弃stale对象,而是与源服务器进行重新激活。
引入了ETag

3,带宽优化

在请求消息中加入range头域,它允许只请求资源的某个部分。在响应消息中Content-Range头域声明了返回的这部分对象的偏移值和长度。如果服务器相应地返回了对象所请求范围的内容,则响应码为206(部分内容)

新增了状态码100(Continue),客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就返回401(未授权)。如果服务器接收此请求就返回响应码100,客户端就可以发送带实体的完整请求了。这样可以避免贸然发出带实体的请求被拒浪费带宽。

4,长链接

http 1.1允许客户端不用等待上一次请求结果返回,就可以发出下次请求,但服务器返回响应还是按照请求的先后顺序的。流水线式的请求可以显著减少整个下载过程所需要的时间。

5,消息传递

6,HOST头域

识别虚拟主机

7,错误提示

8,内容协商

为了满足互联网使用不同母语和字符集的用户,一些网络资源有不同的语言版本(如中文版、英文版)。

DOS攻击(拒绝服务)

攻击方式

DOS通过大量合法的请求占用大量网络资源,以使服务器瘫痪
1,通过使网络过载来干扰甚至阻断正常的网络通讯
2,通过向服务器提交大量请求,使服务器超负荷
3,阻断某一用户访问服务器
4,阻断某个服务于特定系统或个人的通讯

IP欺骗
IP欺骗攻击是一种黑客通过向服务器发送虚假的包以欺骗服务器的做法。即将包中的源IP地址设为不存在或不合法的值。服务器一旦接受到该包便会返回接受请求包,但实际上这个包永远返回不到源主机。这种做法事服务器必须开启自己的监听端口等待,也就白白浪费了系统资源。

攻击现象

  1. 被攻击主机上有大量等待的TCP连接
  2. 网络中充斥着大量无用的数据包
  3. 源地址为假,制造高流量无用数据包,造成网络拥塞,使受害主机无法正常与外界通讯
  4. 利用受害主机提供的传输协议上的缺陷反复高速的发出特定服务请求,使主机无法处理正常请求
  5. 严重时会造成系统死机
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注