当天下午看到了招聘需求,就托人进行了内推,下班前收到邮件说会在7个工作日内联系进行面试。没想到在回家路上就接到了阿里面试官的电话,说要进行电话面试。由于当时在外面,不太方便,就告诉面试官10分钟后回到家进行面试,面试官答应了,感谢面试官。
10分钟面试正式开始,其实我已经戴好耳机准备好了,哈哈。

*
自我介绍,简单聊聊过往项目用到了那些技术,有哪些技术难点,是如何解决的?

*
var和let、const的区别,为什么会产生这种区别?

var作为ES5中定义变量的方式,会存在变量提升的问题,作用域也不明晰。ES6引进了let和const。let用来定义变量,const用来定义常量,必须先定义后使用,不存在变量提升的问题。

*
如何实现一个块在浏览器中上下左右垂直居中?有几种方式?
(1)绝对定位
.parent{ position:relative; } .child{ position:absolute; top:50%; left:50%;
width:200px; height:200; margin-left:-100px; margin-top:-100px; }
(2)同样定位
.parent{ position:relative; } .child{ position:absolute; top:50%; left:50%;
transform:translate(-50%,-50%); }
(3)定位
.parent{ position:relative; } .child{ position:absolute; top:0; left:0;
bottom:0; right:0; margin:auto; }
(4)当要被居中的元素是inline或者inline-block元素
.parent{ display:table-cell; text-align:center; vertical-align:middle; }
(5)flex布局
.parent{ display:flex; justify-content:center; align-items: center; }
* 你是如何看待模块化的?cmd和amd的区别?除了amd和cmd还有哪些加载方式?node加载模块的方式?commonJs?ES6的加载方式。
答:1、AMD推崇依赖前置,在定义模块的时候就要声明其依赖的模块 2、CMD推崇就近依赖,只有在用到某个模块的时候再去require
这种区别各有优劣,只是语法上的差距,而且requireJS和SeaJS都支持对方的写法.AMD和CMD最大的区别是对依赖模块的执行时机处理不同,注意不是加载的时机或者方式不同。都是异步加载。详细的解释从网上找了一篇文章
谈谈模块化的理解
<https://link.juejin.im?target=https%3A%2F%2Fsegmentfault.com%2Fa%2F1190000011231026>
* 浏览器地址栏输入网址后会发生什么?具体的流程有哪些?
答:
* 1.浏览器会开启一个线程来处理这个请求,对 URL 分析判断如果是 http 协议就按照 Web 方式来处理;
* 2.调用浏览器内核中的对应方法,比如 WebView 中的 loadUrl 方法;
* 3.通过DNS解析获取网址的IP地址,设置 UA 等信息发出第二个GET请求;
* 4.进行HTTP协议会话,客户端发送报头(请求报头);
* 5.进入到web服务器上的 Web Server,如 Apache、Tomcat、Node.JS 等服务器;
* 6.进入部署好的后端应用,如 PHP、Java、JavaScript、Python 等,找到对应的请求处理;
* 7.处理结束回馈报头,此处如果浏览器访问过,缓存上有对应资源,会与服务器最后修改时间对比,一致则返回304;
* 8.浏览器开始下载html文档(响应报头,状态码200),同时使用缓存;
* 9.文档树建立,根据标记请求所需指定MIME类型的文件(比如css、js),同时设置了cookie;
* 10.页面开始渲染DOM,JS根据DOM API操作DOM,执行事件绑定等,页面显示完成。
另外也可以这样回答:

浏览器根据请求的URL交给DNS域名解析,找到真实IP,向服务器发起请求;服务器交给后台处理完成后返回数据,浏览器接收文件(HTML、JS、CSS、图象等);浏览器对加载到的资源(HTML、JS、CSS等)进行语法解析,建立相应的内部数据结构(如HTML的DOM);载入解析到的资源文件,渲染页面,完成。

*
grunt、gulp、webpack的区别及优点和缺点

*
less是否可以进行计算?可以

*
浏览器的内核、组成部分?

*
Git中reset和rebase的区别?
Git常用的命令,回撤的命令是哪个? git revert commitID,rebase合并提交历史,reset撤销最近提交。

*
常见的浏览器兼容方式有哪些?遇到过哪些兼容问题?

*
变量的提升?函数声明和函数表达式的区别
//函数声明 function A(){ .... } //函数表达式 var change=function(){ ... }
* flex的深层原理?兼容方式有哪些?
* 跨域问题的解决方式,原理?
(1)CORS,需要服务器设置header:Access-Control-Allow-Origin
(2)jsonp,需要目标服务器配合一个callback函数
(3)postMessage+iframe,需要目标服务器或者目标页面写一个postMessage,主要侧重于前端通讯。
(4)nginx反向代理,需要搭建一个Nginx服务器,用于转发请求。
(5)window.name+iframe,需要目标服务器响应window.name
(6)window.location.hash+iframe同样需要目标服务器处理。
好多问题记不太清了,来来回回的聊了一个小时左右,第一次电话面试居然这么久,面试官辛苦了,面试完都晚上八点多了

原文链接:https://juejin.im/post/5ab4feabf265da239a5fc002