百得思维、小马智行前端工程师社招面试经历
百得思维
一面
1、跨域以及解决办法
(1)跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。
(2)我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景。
(3)同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
(4)跨域解决方案:
①通过jsonp跨域
②document.domain + iframe跨域
③location.hash + iframe
④window.name + iframe跨域
⑤postMessage跨域
⑥跨域资源共享(CORS)
⑦nginx代理跨域
⑧nodejs中间件代理跨域
⑨WebSocket协议跨域
2、手写一段小算法
3、JavaScript 的 sort 方法内部使用的什么排序?
二面
主要问了我的职业规划等等问题。
小马智行
一面
1、讲项目里面干了啥
2、vue-lazyloader 怎么实现的
3、vue 的响应式系统、虚拟 dom
4、函数式编程
5、手写了一道算法题
二面
1、讲讲项目里面做了什么
2、Vue和 React的区别
(1)监听数据变化的实现原理不同:Vue通过 getter/setter以及一些函数的劫持,能精确知道数据变化;React默认是通过比较引用的方式(diff)进行的,如果不优化可能导致大量不必要的VDOM的重新渲染。React不精确监听数据变化。
(2)数据流的不同:Vue1.0中可以实现两种双向绑定;React一直不支持双向绑定,提倡的是单向数据流。
(3)组件通信的区别:React 本身并不支持自定义事件,而Vue中子组件向父组件传递消息有两种方式:事件和回调函数,但Vue更倾向于使用事件。在React中我们都是使用回调函数的。
(4)模板渲染方式的不同:在表层上,模板的语法不同,React是通过JSX渲染模板。而Vue是通过一种拓展的HTML语法进行渲染,但其实这只是表面现象,毕竟React并不必须依赖JSX;在深层上,模板的原理不同。React是在组件JS代码中,通过原生JS实现模板中的常见语法,比如插值,条件,循环等,都是通过JS语法实现的,更加纯粹更加原生。而Vue是在和组件JS代码分离的单独的模板中,通过指令来实现的,比如条件语句就需要 v-if 来实现对这一点,这样的做法显得有些独特,会把HTML弄得很乱。
3、JavaScript 异步的处理方式,现场出了一个问题,使用 promise 实现
三面
1、讲项目模块规划、项目如何部署、如何优化等等
2、手写函数的防抖
3、手写算法题,这道在牛客题霸上有原题,大家可以去看看:NC102 在二叉树中找到两个节点的最近公共祖先
四面
讲讲项目
#面经##社招##百得思维##前端工程师##小马智行#