-
Notifications
You must be signed in to change notification settings - Fork 1
阿里巴巴前端面试经历 #1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Labels
Comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
阿里2017前端工程师实习offer总结
前言
博主不久以前刚拿到阿里巴巴蚂蚁金服的前端开发offer,经历了五轮技术面,一轮HR面,历时约三个星期(哈哈连面试官都喷了我的面试体验)。 在这里分享一下面试经历希望帮助一下大家,一些面试题的答案和部分整理的小知识会贴在后面。
技术一面
刚内推完1个小时,北京蚂蚁金服就打来了电话,是一个声音很有磁性的大哥哥(?)。自己完全没有准备,因为没有想到会这么快,紧张死了。 然后问了一些前端方面的知识,如下
一面大概就是这么多,持续了十几分钟,博主一面后以为药丸了,因为太紧张答的很不好,行内元素和块级元素列举了四五个后居然就说不下去了,然后大哥哥很贴心的说出一个个标签然后让我回答是行内还是块级. 居然还有二面,真的很感激这位面试官。
技术二面
一面完的第二天二面电话就来了,应该是技术总监,很有威严的感觉,约了下午两点,然后很准时的打过来了,期间博主拉着两个小伙伴在我旁边听我面试壮胆。问的问题都比一面深入了些,下面列出一些还记得的问题
电面持续了半小时,问了挺多东西的,可是博主都忘掉啦。 答的也不算特别好,jQuery对象的实现都没答出来,药丸。 然后最后的问题,我一直答夹角为0度,233333,蠢成猪了。面完之后觉得二面过不了了,正在伤心的时候,面试官又打过来说要我去北京现场面试 ,说去联系HR后再通知我。
技术三面(视频)
过了三天后面试官又打过来说安排视频面试(好开心,不用现场面),然后博主赶紧剃了胡子,洗了脸,剪了头发。视频过来居然看的到面试官的脸啊哈哈哈哈,还以为只能他看我呢。 面试官应该还是技术总监,萌萌哒的,所以不是特别紧张。问了很多问题,持续了一小时,期间面试官还对我笑了2333333。
在面试中面试官说我所面的部门是蚂蚁金服里的蚂蚁聚宝,大多数技术人员在北京,不过博主还是说想去杭州,因为担心在北京活不下去哈哈。
技术四面
过了很久很久大概一个多星期吧,阿里杭州那边的电话打过来了,接电话的时候高兴的要命,以为是HR呢,然后发现还是技术。问的问题挺少的,主要问博主实习的工作,然后问了响应式布局和H5开发(博主不太明白主要需要说哪方面,乱说了一通)。
技术五面
又过了挺久吧,第五个电话从杭州打过来了,又以为是HR,又白开心了一下,我说我都面了五面了,面试官苦笑一下说我的面试体验太差了哈哈。 然后问的问题也比较少,主要是模块化思想,组件化思想吧,最后挂电话的时候说聊的不错,博主也觉得还不错2333333.
HR面
再一次过了很久很久,第六个电话打过来啦,博主当时在雨中前行着,和HR说不太方便,然后HR说只需要15分钟,然后我担心挂掉后就不会再打过来了,然后就开始面试了,之前就听说阿里HR有一票否决权,所以还很是担心,不过这位HR大姐姐还是很温柔的,问的问题杀伤性也不太大
博主最后问了HR阿里的工作氛围啦,HR说和UC很像,都是阿里系,轻松愉快萌萌哒的。 然后说最后的结果要等校招完统一通知,当时听到就觉得心痛,要是内推没过那岂不是GG了,校招又不能参加了,绝望的挂掉了电话。 不久以后三面技术官问我什么时候可以去实习,然后希望我早点去,博主也想早点去,可是有必修课啊啊啊,然后婉拒了。 面试官无奈的说就按照你的时间来吧。 当时还不敢跟他说HR拖着我offer呢。 不过过了几个小时后,offer就发到博主手机和邮箱啦,开心到哭泣。
好了,水了这么多,上一点点干货吧
小知识点
JS一切皆对象
数组!!!! a = [1, 2]....b[0] = a;
b[0][0] === 1; a[0] = 2; 那么b[0][0] === 2
运算符优先级
&&的优先级比||要高
行内元素&块级元素
在标准文档流里面,块级元素具有以下特点:
总是在新行上开始,占据一整行;
高度,行高以及外边距和内边距都可控制;
宽带始终是与浏览器宽度一样,与内容无关;
它可以容纳内联元素和其他块元素。
行内元素的特点:
ChildNodes && Children
document.getElementsByTagName('p')[0].childNodes.length === 3
<p>
后的换行符为一个文本节点,<strong>
为一个节点<\strong>
后的换行符为一个节点变量/函数提升
第 1 种: function foo(){...} (函数声明)
第 2 种: var foo = function(){...} (等号后面必须是匿名函数,这句实质是函数表达式)
只有函数声明可以被提升
Position
写一个XMLHttpRequest
readyState5种状态
POST提交数据的方式
application/x-www-form-urlencoded
最常见,默认的方式
提交的数据按照query string的方式传递,键和值都会被URI转码比如
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
multipart/form-data
使用表单上传文件时,必须让form的enctyped变为它,一下为一个请求示例
首先生成了一个boundary用于分割不同的字段,为了避免与正文内容重复,boundary很长很复杂,然后Content-Type里指明数据是以multipart/form-data来编码的。 消息主体里按照字段个数分为多个结构类似的部分,每部分都是以boundary开始
POST, GET区别
JS同源策略
URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则表示他们同源。
同源策略:
浏览器的同源策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性。从一个域上加载的脚本不允许访问另外一个域的文档属性。
比如一个恶意网站的页面通过iframe嵌入了银行的登录页面(二者不同源),如果没有同源限制,恶意网页上的javascript脚本就可以在用户登录银行的时候获取用户名和密码。
http://localhost:8080/test.html
http://localhost:8081/test2.html
这样是不可以的permission denied.
跨域方法
从外部通过
<script>
引用的文件和当前文档属于同一个域, 这也是之所以可以调用JS中的属性方法对当前文档DOM进行操作。JSONP就是利用
<script>
标签的跨域能力实现跨域数据的访问,请求动态生成的JavaScript脚本同时带一个callback函数名作为参数。其中callback函数本地文档的JavaScript函数,服务器端动态生成的脚本会产生数据,并在代码中以产生的数据为参数调用callback函数。当这段脚本加载到本地文档时,callback函数就被调用。第一个站点的测试页面(http://localhost:8080/test.html):
服务器端的Javascript脚(http://localhost:8081/test_data.js):
test_handler('{"data": "something"}');
浏览器渲染过程(Chrome)
为了更好的用户体验渲染引擎会尽快的展示出页面内容,它不会等到所有HTML都被解析再来构建渲染树, 当main thread(而不是Speculative)遇到Script标签时(只要遇到并不需要等待其网络返回和执行)Chrome会执行绘制和渲染层合并操作
当没有script标签时,如果link在
\body
前,firefox会重绘制导致FOUC,而Chrome会等待css加载完毕(和放在head中行为相同)标签位置
最佳实践是将link标签置于script标签前(否则有FOUC)。script最佳实践是放在
/body
前(放在head会导致白屏现象)BFC(块级格式化上下文)
一个BFC是一个至少满足以下一个条件的盒子:
特征:
BFC包含创建该上下文元素的所有子元素,但不包括创建了新BFC的子元素的内部元素。(一个元素不能同时存在于两个BFC中)
边距塌陷
当没有border, padding, inline content或者clearance隔开父子元素的margin-top(bottom)和margin- top(bottom)时
clear
相关的floats: 处于同一个BFU的处于该块前面的floats
这个non-floating块将会被向下移直到其border-edge在相关的floats的margin-bottom下(因此可以去除边距塌陷)
这个floating 块将被下移至其margin边缘在相关floats的margin边缘下(这会影响该floating块后续floating块,因为后续的floating块不能比前面的position高)
attachEvent & addEventHandler
微软IE6, 7, 8支持attachEvent, 它只支持冒泡事件模型
addEventListener支持捕获和冒泡,先捕获后冒泡
事件委托
注意父子元素
即使用定位absolute将子元素content移到父元素外,点击子元素会触发父元素的click事件(事件委托的机制,当子元素事件被触发,事件会向上传递)
Cache-Control
请求头包括: no-cache, no-store, max-age, max-stale, min-fresh, only-if-cached(只从cache里面拿)
响应头包括: public, private, no-cache, no-store, no-transform, must-revalidate, proxy-revalidate, max-age. 默认为private
private: 私有缓存,常见就是浏览器里内置的缓存
public: 公有缓存,常见的是代理缓存
it is telling both client caches and proxy caches that once the content is stale (older than 3600 seconds) they must revalidate at the origin server before they can serve the content. This should be the default behavior of caching systems, but the must-revalidate directive makes this requirement unambiguous.
ETag
ETag(EntityTags)是URL的tag,用来标示URL对象是否改变,这样可利用客户端(例如浏览器)的缓存。由服务器首先产生ETag,客户端通过将该记号传回服务器要求服务器验证其(客户端)缓存。服务器使用它来判断页面是否已经被修改,如果未修改返回304,而不必重新传输整个对象。
户端通过If-Match或者说If-None-Match这个条件判断请求来验证资源是否修改。我们常见的是使用If-None-Match.请求一个文件的流程可能如下:
new & Object.create
所以你应该明白了,如果构造函数返回了一个对象(非primitive value),那么就返回这个对象,否则返回函数内创造的继承了原型链的对象。 当return null时,还是会返回obj即使typeof null是object
Cookie & Session
Cookie
如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。
这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。
如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。
因为cookie会在所有的请求中都被附上,例如图片。所以将图片等静态资源放在其他不需要cookie的域名下会节约带宽
Session
Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。
cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。 cookie为字符串,session可以存储服务端支持的各种数据类型
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
The text was updated successfully, but these errors were encountered: