- 先问了项目的内容,问的挺细致的,还要我一个个步骤讲如何实现,事先没准备讲的比较乱,面试官比腾讯的nice多了。而且经常引导你去思考问题。
- 你项目里用到svg,svg是矢量图还是点阵图?:矢量图
- 你为什么要用到svg?:传统网页都是一块一块方形的,很难构造出其它形状,像这种中心发散的图就很难做到。
- 那你对svg底层了解么?:不了解,只是基于raphael的库实现
- 那除了svg还有什么可以用来画图?:canvas
- 你对canvas了解么?:没用过,不了解。( canvas和svg的不同)
- 矢量图的特点是什么?:放大后不会失真,点阵图是一个像素一个像素保存,放大后会看到每块矩形的像素的不平滑的过度,会失真。
- 那为什么矢量图就不会失真呢?:(思考了一下,答不出,面试官开始引导我),你刚刚说点阵图是一块一块像素保存,那矢量图是怎么保存呢?(我再思考了一下,还是不敢乱说,就答:没了解过这方面,不敢乱说)那你猜一下呢?:我猜应该是用特定的公式保存的,所以放大不会失真。面试官满意了。
- 项目里有个地方用到某个div的平移动画,面试官问我怎么实现的:用了jquery里面一个api,只要传入元素的目标状态和动画时间,就会生成动画了。
- 那不用jquery怎么做呢?:用setInterval设置定时循环任务,每一小段时间移动2-3个像素,肉眼看上去就像平滑移动过去的动画了。(用css3 transition属性也可以完成)
- 那每一小段时间是多少合适呢?:我试过用10毫秒,觉得效果不错。
- 你学过c++,Java,都是面向对象的语言,那你知道面向对象语言的特点吗?:(思考)有类,可以继承,然后。。(卡住)
- 还有吗?:(继续沉默思考)
- 多态也是一个吧?:是!
- 那你说说js怎么实现类?:js语言中暂时还没有类的这个概念,但是可以通过一些特殊的方法模拟,最好的一个方法就是用构造函数+原型方法实现。
- 你写一下。
function a(){ //每个实例特有的属性 this.attr="attar"; ....... //每个实例共享的方法or属性 if ( typeof a.method !== "undefined"){ a.prototype.method = function (){ ...... } } }
- 写一个正则,匹配前后都是空格的字符串:没写出来
- 实现一个布局,共有三列,左边一列固定宽度200px,剩下的两列自适应剩余页面宽度的50%:这个当时写错了,基本html结构是对的,后来回来自己试过了下面是对的。
.a{ width: 200px; height: 100px; float: left; } .parent{ margin-left: 200px; height: 100px; background: red; position: relative; } .b{ width: 50%; height: 100px; float: left; } .c{ width: 50%; float: left; height: 100px; }
<div class="a"></div> <div class="parent"> <div class="b"> </div> <div class="c"> </div> </div>
- 讲一下你跨平台通讯软件这个项目是怎么实现的?:实际上这个项目是为了多了解计算机网络的知识,基于tcp我们自己定了一个应用层的协议,协议头有xxxxx,我们有客户端和服务端,服务端的话是固定一个端口,服务端要统计在线用户,包括用户p2p的服务端口,普通的文字信息也是通过服务端发送。
- 那你讲一下你理解的tcp和它的机制,建立连接啊断开连接这些:tcp是可靠传输,它本身有拥塞控制机制,除此之外ack可以做到可靠传输。(那ack的英文全称是什么你知道么?)不记得了(中文翻译知道是啥么?思考一下也忘了,继续讲tcp)确认的算法有好几种,tcp用的是累积确认,就是收到2号包,又再收到4号包,3号包丢失了,它只会返回2号包的确认,4号包就丢掉不管了。然后tcp建立连接是要三次握手,客户端发送一个syn,说明要建立连接,服务端就返回一个ack表示收到确认可以连接,客户端再发送自己的请求,这里连接就算已经完成,接下去服务端根据请求做出响应就不算建立连接的一部分了。tcp断开连接需要四次挥手,客户端先发送一个fin给服务端表示要断开连接,服务端返回一个ack表示收到断开连接的请求,服务端再发送一个fin表示确认断开连接,客户端返回一个ack表示确认收到,可以断开连接了。
- 那你刚刚说到端口,你知道端口在内存中的实现形式么?:不知道
- 我们普通页面的请求,和你这个项目的连接形式有什么不同?:我们这个项目是用了socket去连接的,是双向实时可以聊天的,但是一般的网页请求都是单向的,客户端跟服务器请求,服务器才会响应,没办法说服务器主动推送东西给客户端。
- 那为什么会有不同呢?都是tcp连接之上?:呃~~
- 你知道http协议么?:(一开始听成ATP协议,说没听过,面试官诧异)嗯,听过(继续沉默)
- http协议有什么特点呢?:呃~~(继续沉默)
- http是不是请求完就断开连接呢?:呃~一般都是,也可以保留连接。
- 那为什么会这样呢?怎么你们的项目用了socket就不会断开呢?:socket要我们主动关闭,它才会关闭,http协议就是请求完就关闭连接了。(面试官不再跟我纠结这个了)
- position有哪些值?:absolute,relative,fixed,还有个默认的值是。。。(面试官提示,static)
- fixed有什么特性?:fixed的话会脱离文档流,它是根据浏览器的窗口去定位的。
- absolute会根据什么定位呢?:absolute也会脱离文档流,它会找到最靠近自己的一个postion是relative的父元素定位
- 除了relative的父元素还会根据其他定位么?(这里每答出来,应该是如果最后找不到relative父元素就根据body定位的吧)
- 那relative有什么特性呢?:relative不会脱离文档流,用top left那些改变了位置它也只会占用原来的位置。
- relative的中文意思是?:相对
- 那是相对什么呢?:呃。。不太清楚
- 你刚刚说了他不会脱离文档流,那相对什么改变位置?:相对他原来应该在的位置。(面试官满意了)
- 你用过visibility么?:visibility?没用过,我会去了解一下(记在纸上)
- display有那些值?:inline,inline-block,block,none,table
- 那你知道css3的box值么?:嗯知道,父元素如果display的值是box的话,子元素可以用一个box-flex,去自动占领父元素一定比例的位置。
- inline值有什么特性?:不能设置宽高,margin也无效,但是可以设置padding(其实回答错了,inline是可以设置margin和padding,但是只有左右的margin,padding才会生效。
- 那你能列举一下inline的标签么?:呃。。img,input,label(卡住不记得)
- span是不是呢?:span也是(继续卡住)
- 那strong呢?:strong、b、em都是
- 那为什么input、img可以设置宽高呢?:(我惊呆了,一直没思考过这个问题,其实inline元素的宽高是其中 文字图片的内容的宽高,不能设置自己的本身的宽高,但是可以设置里面元素的宽高)难道inline元素可以设置宽高?不对吧?是这样吗?(面试官笑,你回去再了解一下就知道了)
- 你看下这段代码,输出什么
应该是undefinedfuntion a(){ return foo; foo = 1; function foo(){} var foo = 11; } alert(typeof a());
- 为什么:因为执行a()之前会先在作用域链顶端创建一个活动对象,变量声明会提前,return的时候foo还没赋值,所以应该是undefiend
- 但是你看一下变量之前还有个函数呢?:因为var声明在下面,应该会把function覆盖掉。
- 面试官把上面代码执行,弹出来居然是function:我惊呆了,怎么会这样,难道变量声明会在函数解析之前,然后函数解析覆盖了变量声明?面试官摇摇头。
- 你写下类的继承吧:拿起笔数久,一时忘记怎么写继承,于是写了几句关键代码,和面试官说思路:
要先把prototype改成要继承对象的实例后,再往b的prototype里面加子类的新方法,不然会被覆盖。funtion b(){ //继承类自己的新属性 this.attr="attr"; .... } b.prototype = new a(); b.prototype.methon = function (){ .... }
- 还有没有别的继承方法?:这种方法可以用instanceof判断是不是父类,如果用别的方法继承,也要求要用instanceof判断出来吗?
- 不要求instanceof能判断:拿笔许久写不出,面试官就放过我了。
- css的优先级规则?:一般来说都是后写的会覆盖之前写的样式,但是可以再属性后面加!important提高优先级,除此之外还和css的选择器优先级有关,id权重最大,然后是class,最后是tagName。
- 权重有个具体的数值吗?:id是100,class是10,tagName是1,如果一起使用权重会相加。
- 那如果写在标签里面的style呢?:那就是标签里面的style优先级最高了,不过还是可以在css文件里面用!important覆盖。
- 再问一个算法的问题,单项链表,如下,如何判断两个链表是否相交:在两个链表头放两个指针,一直往下走走到最后null的时候,看两个指针是不是相等。
- 复杂度?:O(n)吧,感觉挺慢的
- O(n)不算慢了啊:我继续思考,但是如果链表很长就很慢啦,复杂度跟链表长度成线性关系
- 链表长度不就是n了:对啊,复杂度就是O(n)
- 那ok~你有什么问题要问我吗?:阿里巴巴里面,是每个部门都有自己的前端团队还是整个阿里有一个前端团队再分配的?(每个部门都有自己的前端团队)
- 那你们招实习生是每个每个团队自己来招还是统一招进去再做分配?:是统一招进去,公司再做分配的。
- 那你们校招一般会比较看重学生的什么素质呢?:基础是不是扎实,学习能力怎么样,遇到不会的问题怎么处理,还有算法方面也有一定要求。
- 如果你进了阿里,北京上海杭州,你想去哪一个城市?:我倾向北京杭州
- 如果一定选一个呢?:很难选,感觉两个城市对我说都差不多,都是比较陌生的环境。
- 好的,你去休息室等一下吧。:谢谢
阿里巴巴 实习生招聘 广州场一面——web前端
最新推荐文章于 2021-04-01 16:13:01 发布