小米前端二面面经



title: 小米前端二面面经

toc: true

date: 2018-10-20 13:04:04

categories:

  • Web

tags:

  • JavaScript
  • HTTP
  • TCP
  • UDP
  • Cookie


正好都是不会的。。。所以完整地记录一下。

简单来说就是JS和网络掌握地并不是很全面。

JavaScript严格模式

ES5中新增use strict

不允许使用未声明的变量:

"use strict";
x = 3.14;                // 报错 (x 未定义)

"use strict";
//  对象也是一个变量。
x = {p1:10, p2:20};      // 报错 (x 未定义)

不允许删除变量或对象:

"use strict";
var x = 3.14;
delete x;                // 报错

不允许删除函数:

"use strict";
function x(p1, p2) {};
delete x;                // 报错 

不允许变量重名:

"use strict";
function x(p1, p1) {};   // 报错

不允许使用八进制:

"use strict";
var x = 010;             // 报错

不允许使用转义字符:

"use strict";
var x = \010;            // 报错

不允许对只读属性赋值:

"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;            // 报错

不允许对一个使用getter方法读取的属性进行赋值:

"use strict";
var obj = {get x() {return 0} };

obj.x = 3.14;            // 报错

不允许删除一个不允许删除的属性:

"use strict";
delete Object.prototype; // 报错

变量名不能使用 "eval" 字符串:

"use strict";
var eval = 3.14;         // 报错

变量名不能使用 "arguments" 字符串:

"use strict";
var arguments = 3.14;    // 报错

不允许使用以下这种语句:

"use strict";
with (Math){x = cos(2)}; // 报错

由于一些安全原因,在作用域 eval() 创建的变量不能被调用:

"use strict";
eval ("var x = 2");
alert (x);               // 报错

禁止this关键字指向全局对象:

function f(){
    return !this;
}
// 返回false,因为"this"指向全局对象,"!this"就是false

function f(){
    "use strict";
    return !this;
}
// 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。

因此,使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。

function f(){
    "use strict";
    this.a = 1;
};
f();// 报错,this未定义

作用域、上下文

scope指的是 函数被调用的时候, 各个变量的作用区域:

  • 全局作用域
  • 局部作用域

content指的是 函数被调用的时候, 查看this指向哪个object, 那么那个object 就是当前的 "上下文"。

JavaScript中this指向问题(以及不同模式下)

  1. 元素绑定事件,方法中的this是当前操作的元素
  2. 方法名前有点则点前面是谁this就是谁,没有点则this是window(严格模式下是undefined)
  3. 构造函数执行,方法体中的this是当前类的一个实例
  4. 匿名函数具有全局性,因此this对象通常指向window

第二条也可以理解为:

  • 方法调用中谁调用this指向谁
  • 全局作用域或者普通函数中this指向全局对象window(严格模式下不能指向window所以是undefined)

TCP和UDP的区别

参考链接

TCP(Transmission Control Protocol):传输控制协议

UDP(User Datagram Protocol):用户数据报协议

主要从连接性(Connectivity)、可靠性(Reliability)、有序性(Ordering)、有界性(Boundary)、拥塞控制(Congestion or Flow control)、传输速度(Speed)、量级(Heavy/Light weight)、头部大小(Header size)等8个方面来讲:

  1. TCP是面向连接(Connection oriented)的协议,UDP是无连接(Connection less)协议;

    TCP用三次握手建立连接:1) Client向server发送SYN;2) Server接收到SYN,回复Client一个SYN-ACK;3) Client接收到SYN_ACK,回复Server一个ACK。到此,连接建成。

    UDP发送数据前不需要建立连接。

  2. TCP可靠,UDP不可靠;

    TCP丢包会自动重传,UDP不会。

  3. TCP有序,UDP无序;

    消息在传输过程中可能会乱序,后发送的消息可能会先到达,TCP会对其进行重排序,UDP不会。

  4. TCP无界,UDP有界;

    TCP通过字节流传输,UDP中每一个包都是单独的。

    有界与无界之分是根据接收报文来划分的,对于TCP协议,客户端连续发送数据,只要服务端的这个函数的缓冲区足够大,会一次性接收过来,即客户端是分好几次发过来,是有边界的,而服务端却一次性接收过来,所以证明是无边界的;

    而对于UDP协议,客户端连续发送数据,即使服务端的这个函数的缓冲区足够大,也只会一次一次的接收,发送多少次接收多少次,即客户端分几次发送过来,服务端就必须按几次接收,从而证明,这种UDP的通讯模式是有边界的。

  5. TCP有流量控制(拥塞控制),UDP没有;

    主要靠三次握手实现。以及慢开始、拥塞避免、快重传、快恢复

  6. TCP传输慢,UDP传输快;

    因为TCP需要建立连接、保证可靠性和有序性,所以比较耗时。这就是为什么视频流、广播电视、在线多媒体游戏等选择使用UDP。

  7. TCP是重量级的,UDP是轻量级的;

    TCP要建立连接、保证可靠性和有序性,就会传输更多的信息,如TCP的包头比较大。TCP首部开销20字节;UDP的首部开销小,只有8个字节

  8. TCP对系统资源要求较多,UDP对系统资源要求较少
  9. 应用场合不同:

    TCP一般应用在对可靠性要求比较高的场合,例如http,ftp等等

    而UDP一般应用在对实时性要求较高场合,例如视频直播,大文件传输等等

小结:

TCP是面向连接的、可靠的、有序的、速度慢的协议;UDP是无连接的、不可靠的、无序的、速度快的协议。

TCP开销比UDP大,TCP头部需要20字节,UDP头部只要8个字节。

TCP无界有拥塞控制,UDP有界无拥塞控制。

补充:

基于TCP的协议有:HTTP/HTTPS,Telnet,FTP,SMTP。

基于UDP的协议有:DHCP,DNS,SNMP,TFTP,BOOTP,IGMP,RIP。

Cookie是否可以跨域

只可以跨二级域名进行访问

https://blog.csdn.net/u012572955/article/details/61198654

https://www.cnblogs.com/waters/articles/2869855.html

需要认证、跨域时、GATEWAY等HTTP状态码

401 Unauthorized —— 请求要求用户的身份认证

403 Forbidden —— 服务器理解请求客户端的请求,但是拒绝执行此请求

502 Bad GateWay —— 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求

闭包的优缺点

闭包的作用:保存、保护

第一个就是可以读取自身函数外部的变量(沿着作用域链寻找)

第二个就是让这些外部变量始终保存在内存中

优点

  1. 保护函数内的变量安全,加强了封装性
  2. 在内存中维持一个变量(用的太多就变成了缺点,占内存)

缺点:

  1. 由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
  2. 闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

原文地址:https://www.cnblogs.com/zmj97/p/10180734.html

时间: 2024-10-30 17:19:28

小米前端二面面经的相关文章

2016.10.19 小米前端面试 vs 2016.10.22 华为web面试

这次面试还是很值得记录一下的~长了很多姿势. 一共三面,面试官都是MIUI的浏览器部门,感觉面试官都很厉害,知识点问的很细很深入. 一面面试官是个可爱的小姑娘,主要考察的就是常见的前端面试题,很基础,但是会在其上进行拓展和深入.就我记得的一些题做个总结: 1. 说一下CSS的盒模型?(这简直是我参加过的几乎所有前端面试岗必问的一道题目--不管是比较水的国企还是问基础的互联网... 想一想似乎只有只问项目不谈基础的京东没有问吧) 这里是答案 2. 常用的跨域方法:(之前小米一个面试官电话面试时候也

阿里前端二面(笔试/机试)总结

这一轮答的并不理想,很有可能挂掉.回来之后自己又答了一遍,没有参考任何资料,居然全部答上了. 到底还是自己的基本功不扎实,遇见没做过的东西,没有调试环境就慌了,再努力提高吧. 一.实现jsonp,传入URL,callback和callbackName 三个参数 我先说下思路,jsonp是借由script标签发起的跨域GET请求.服务器返回的是一段js脚本,返回后可以立即执行.通过调用前端预先准备好的回调函数来获取数据,进行下一步操作. 整个流程大概分为三个步骤:发起请求.执行服务器返回的scri

记一次凉凉的小米前端面试

推广一下个人网站:Bougie's Blog 毕业一年的跨专业萌新,在拉勾上投了武汉小米的简历,不出两天,简历被HR姐姐标为"不合适",心想自己这点履历和经验小米是看不上了.又过两天,大概晚上八九点钟,HR姐姐突然打电话说邀请面试.也是有点奇怪. 从家到小米有两个小时车程,做公交车二层晃得竟然有点想吐了.心想做程序员一年,没学到啥高深的东西身体却不知不觉间变得这么差了:同时对此次面试也没抱太大期望,因为自身实力和小米的招聘要求还是差了一个档次.进入小米正门,左手边是小米信息部,右手边是

重修课程day47(前端二之html二和css一)

一 列表标签 ul标签:无序列表 ol标签:有序列表 li标签:写在ul和ol标签里面的 dl标签:定义列表 dt标签和dd标签:都写在dl里面的 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> <

前端二倍图的思考(涉及Retina)

EXCELL格式 1 csv格式导出来之后不能用EXCELL打开,会乱码.用记事本打开,然后将"(英文的引号出掉),就可以了. 关于二倍图的操作 概念: 设备像素:也叫物理像素,显示设备上最微小的物理部件. 比如 iphone 5:640 x 1136px. 不同的机型有不同的设备像素,固定死的. 这里需要讲一下显示分辨率一定的情况下,显示屏越小图像越清晰,反之,显示屏大小固定时,显示分辨率越高图像越清晰. 高分辨率屏幕:在 Windows 系统下,提高屏幕分辨率一般都是通过提高屏幕尺寸.而随着

【2016小米 (二)-9】

    //百万数内 看数列离散点  根据 x 找接近 的数列数 #include<bits/stdc++.h> using namespace std; int funsteap(int xx)  {     int ret=0;     //循环去构造数列是容易的     int x=0;     int y=1;     int tmp=1;     /*     0  1   1  2   3  5 (7) 8          */     while(tmp<xx)     

百度编辑器前端二开图片上传Js

百度编辑器图片上传Jsueditor.all.min.js 下载链接 链接:https://pan.baidu.com/s/1VNgw9ELgRRHKeCQheFkQTw 提取码:fnfi 使用方法: 替换原来的 ueditor.all.min.js  原文地址:https://www.cnblogs.com/q1104460935/p/10278629.html

小米路由研究之中的一个加入菜单

openWRT之小米路由luci之controller 在controller下有非常多目录他们都独立的建立对应的树: Web:index.htm   --注冊了web树结点下的非常多枝叶 Mobile:index    --注冊了mbile下的一些结点 Dispatch:        ... Api:            ... Sevice:         ... 依据我们之前原生的openWRT下环境能够得知.假设我们想要要在web界面创建一个选项.我们须要做几个主要的步骤: 1.在

浅谈WEB安全性(前端向)

相信进来的时候你已经看到alert弹窗,显示的是你cookie信息(为配合博客园要求已删除).单纯地在你的客户端弹出信息只是类似于迫使你在自己的房间脱衣服——没人看得到,自然也不算啥恶意行为.那么如果我把你的信息通过脚本发送到我的服务器保存起来呢?先放心,我不打算这么做,也没那笔闲钱去购置一个服务器来做羞羞的事情,也不希望博客园把我这地盘给封掉了. 如同标题所写的,今天要聊的是WEB安全机制,但这“前端”二字倒是说的狭义了些,安全的问题大部分还是更依赖于后端的过滤和拦截措施,后端的朋友如果感兴趣