面向面经之我自己的阿里一面面经
针对:阿里前端一面凉凉凉凉经
1、vue数据驱动模式
参考:https://www.cnblogs.com/caizhenbo/p/6418284.html
概念:
数据驱动是vue的最大特点。当数据发生变化时,用户界面发生相应的变化,开发者不需要手动地去修改dom。
vuejs帮我么封装了数据和dom对象操作的映射,我们只需要关心数据的逻辑处理,数据的变化就能够自然地通知页面进行页面的重新渲染。
实现:通过MVVM框架实现:model,view,viewmodel
vuejs在实例化的过程中,会对遍历给实例化对象选项中的data选项,遍历其所有属性并使用object.defineProperty把这些属性全部转为getter和setter
同时每一个实例化对象都有一个water实例对象,他会在模板编译的过程中,用getter去访问data属性watcher此时就会把用到的data属性记为依赖,这样就建立了视图与数据之间的联系。当之后我们渲染视图的数据依赖发生改变(即数据的setter被调用)的时候,watcher会对比前后两个的数值是否发生变化,然后确定是否通知视图进行重新渲染。
2、MVVM模式 & VM和V怎么通信
model:数据,对应到前端就是js对象
view:视图,对应到前端就是dom
viewmodel就是视图和数据的中间件
model和view是不能直接通讯的,而是需要通过viewmodel来实现双方的通讯。当数据发生变化时,viewmodel能够监听这种变化,并及时通知view做出修改。当页面有事件触发时,viewmodel也能够监听到事件,并通知model进行响应。
3、浏览器怎么获取dom元素
getElementById
getElementsByClassName
getElementsByTagName
getElementsByName
document.documentElement(获取html)
document.body(获取body)
querySelector
quertSelectorAll
4、http和tcp区别
子问题:tcp的三次握手
5、如果http请求要发送的数据特别大,这时底层的运作是怎么样的
6、逻辑题:
给无限的水,和一个3L的瓶子and一个5L的瓶子,怎么有4L的水(虽然他的题目条件不完整,但是聪明的你会明白他的意思)
如此简单,自己想吧
7、图形的遍历方法
广度遍历
深度遍历
8、深度遍历的算法
9、事件绑定
在html代码里面绑定事件,如
<input type="text" onclick="as()">
这样子的缺点是html代码和js代码严重耦合,如果我想改变函数的名字,还要改两次,你说糟不糟心。
在js代码中直接绑定
document.getElementById('a').onclick=function(){ ... }
通过事件监听的方法进行绑定
var a=document.getElementById('a'); a.addEventListener('click',function(){ ... })
10、事件委托
如果有很多子元素要执行相同的方法,如果一一对其进行绑定,那么就会导致dom操作过多,性能很差。
事件委托就是利用事件冒泡原理,将子元素要绑定的事件委托给父元素,让父元素负责事件监听,指定父元素为事件处理程序,那么父元素就可以管理某一类型的所有事件。