第一次面试,还专门租了一身正装,紧张满满的去参加面试了。结果到了酒店发现只有我一个人穿了正装,这个尴尬啊!

由于提前到了20分钟,于是等了10分钟后有负责人让我去27楼开始一面。找到房间后,面试官是一个中年男子,面试官:数据结构和算法学的如何?我:学的还可以,一些常用的排序算法比较熟练。很自然的,他让我手写快速排序,由于事先有准备,大概5分钟我就写出来了。大概是我写的快速排序不是网上的常规写法,他询问了一些代码思路,我就大概解释了一下,然后他默默的推了一下发现没问题就没问这个了。

然后问的还是算法,面试官:两个有序数组,如何将他们两个排序好的数组返回回去。刚开始我回答的是二分查找,他让我描述了一下二分查找的过程。然后面试官让我再重新找一种方法,我思虑了一下说:先用concat合并,再用array的原生方法sort方法。面试官听到我回答的这个答案后笑了,其实我也知道我这是在投机取巧,我应该回答的是算法的思路而不是上面的答案。面试官接着又问:如果是两个没有排序好的数组,那么该如何排序成一个数组返回呢?我想到了归并排序,不过面试官不希望我用到这些常见排序。总之,这个问题我回答的不好。答案如下:(http://www.cnblogs.com/A_ming/archive/2010/04/15/1712313.html)

functiongetRes(arr1, arr2){

var len1 = arr1.length,

len2 = arr2.length,

i = 0,

j = 0,

k = 0,

res = new Array(len1+len2);

while(i < len1 && j <len2){

res[k++] = arr[(arr[i] > arr[j]) ? j++ : i++];

}

While(i < len1)     res[k++]= arr1[i++];

While(j < len2)     res[k++]= arr2[j++];

Return res;

}

其实看到上面的代码,小伙伴应该能很快想到归并排序的。

面试官:谈一下你对ajax的认识。我:嗯……首先ajax给我印象最深刻的一点是它的异步性,因为在刚开始做项目的时候就栽倒了上面,后来我把回调函数写在了success方法里面就解决了问题。其次就是ajax实现的核心的技术是XMLHttpRequest,嗯……还有我之前查看资料的时候有提到ajax承担了部分服务器的任务,这样可以在客户端向服务器端发送资源的时候减轻服务器端的压力。面试官:那刚才提到了解决ajax的异步问题,那么如果要给某个动态添加的元素添加事件,如果这个事件不写在success方法里面,还有什么解决方法?我:嗯……(心里懵逼了一分钟后,突然想起来一个办法)我觉的可以采用事件代理。通过给父元素添加事件,等待用户触发事件的时候再通过e.target来定位到当前是具体的那个元素触发了事件。面试官:请谈谈具体的事件代理的过程。我:比如说有一个表格,里面的行内容是动态添加的,那么我可以给table元素添加click事件,当用户点击表格中某一行的时候(能点击就说明ajax的异步结束了),根据强大的e变量可以轻易获取到当前触发事件的元素e.target,然后再做具体的事件操作……嗯……事件代理的好处就是没必要给每一个子元素都添加事件,只需要给父元素添加事件,这样子可以提高代码效率。

面试官:请谈谈事件冒泡的过程。我:子元素和父元素如果都绑定了同一性质的事件,当用户触发子元素事件时,理应不应该触发父元素的事件,但是由于事件冒泡父元素也会触发。解除事件冒泡的方法是e.stopPropagation,或者是ie下的cancelBubble。面试官:嗯……说一下具体的冒泡过程,先捕获还是先冒泡?我:(心里一个紧张,完全想不起来~)应该是……先冒泡后捕获吧!(打脸,果断的答错了┭┮﹏┭┮。应该是先捕获后冒泡。)

面试官:简历拿出来给我看看。(拿出简历他看了一会儿……)你对react框架熟悉吗?我:嗯……我现在还在学习之中。因为在接触图书馆项目(我简历上的第一个项目,是实验室的项目,基于react+immutable+redux)之前,我没有接触过react,所以就是在一边写项目,一边在学习react。面试官:那么redux呢?我:其实我在写这个项目的过程中最大的困难就是redux,我一度不知道他在做什么。后来发觉,它其实和一个词紧紧相联系:state状态。因为我之前看书的时候,书里面有提到spine框架,这个框架里面就提到了一个概念,叫做状态机。一个网页上复杂的话,会有很多不同的组件,spine将这些组件分块,每一个组件都拥有自己的状态,当用户与页面产生交互的时候,组件的状态就会发生改变,这时候不需要我们再编写各种杂乱繁多的事件,只需要改变组件的状态,根据组件的不同状态来做相应的变化就好了!后来我就发现,react就是一个状态机,redux负责状态的变化和计算,于是我一下子就对redux熟悉了起来。这给我的最大的感受就是组件之间各干各的事,它们之间的耦合大大的降低了!面试官:嗯好的。这个项目中你实现了什么功能?我:由于图书馆这个项目是之前毕业的学长完成的,现在是由于微信的安全提示挡住了图书搜索的输入框,所以主页面的排版发生了变化。其次最大的变化就是搜索图书之后,原来是用页码划分,一页20本书。现在是改成了无限加载模式,也就是说用户拖拉到底部的时候会显示正在加载中,然后加载出来后把新的20本书显示在下方,用户可以继续拖拉,知道显示没有更多搜索结果。面试官:说说你实现无限加载的方法。我:之前我没有做过这种的,所以我上网搜索了一下解决方法,发现网上给出的建议普遍是使用插件,我又不太愿意使用插件,于是我就开始自己想办法。发现可以用scroll事件来解决这个问题,因为每次加载是20本书,高度是固定不变的,我定义了一个状态OFFSET,来描述这个偏移量,当滚动条的scrollTop滚动到底部时,就会向后台发送一个ajax请求,屏幕显示正在加载中,直到后台的数据返回。面试官:如果把正在加载中这个提示去掉呢,你会怎么处理?(心里是没太懂是什么意思的,如果没有这个提示的话用户的体验感是会降低的。)面试官:你不是说你是在每一次加载的时候向服务器端发送ajax的吗?我:(面试官给的这个提示一下子让我想到了一个办法。)如果客户端主机支持的话,可以只向服务器端发送一次ajax,获取所有的书籍,然后保存在本地,一次取20本。如果主机不支持的话,可以让服务器端每次返回比如说100本书保存在本地,用户浏览到第80本的时候再发送ajax,再把书保存在本地。面试官:一定要当用户滑到底部的时候才加载书吗?我:不是啊,可以让滚动条滚动到页面中间的时候就开始悄无声息的加载书。面试官:怎么做?我:(这时候我突然意识到了面试官想问的是什么)啊……在scroll事件里我并不只用到OFFSET这个状态变量,我还用到了一个scrollHeight,OFFSET的值是固定不变的,但是scrollHeight的值是变化的,因为图书馆主页面刚开始是一个搜索内容框和按钮,点击按钮之后会在下面显示图书列表。ScrollHeight的初始值就是搜索框这个组件的高度,然后在每一次加载图书的时候,scrollHeight的值会加上OFFSET。那么如果说需要在滚轮滚动到页面中部的时候就开始加载书的话,可以将scrollHeight的初始值清零或者取一半也可以。面试官:如果说在加载书的时候,书还没有加载出来,这时候这个用户又往下拖动了页面,会发生书还没加载出来又向后端发送ajax的情况吗?我:这个当然不会!因为scroll事件里面我比较的是scrollTop和scrollHeight的值,当scrollTop大于scrollHeight后,scrollHeight的值立马会加上OFFSET,然后再向后端发送ajax,也就是说用户触发一次加载事件后,scrollHeight的值立马变大,只有在用户又滑到底部使得scrollTop大于了scrollHeight了,才会再次触发。因此不会发生这种现象。

面试官:好。你还记得你的面试题吗?我:不太记得了。面试官给我看了他的笔记本电脑,上面有我的答题笔记以及摄像头拍的很多我的截图。面试官:(笑)你当时在哪里答题,这么昏暗。我:当时在家里,为了不让家里人打扰我,我还把门反锁了。(笑)面试官笑了一下,又问:你这道编程题并没有完全通过,但是我看了之后还是选择让你面试。原因就在于你的这道题速度很快,超过了大部分人。你能说说你的编程思路,以及为什么速度会快。我:(我当时脑子其实是空白的,不知道怎么回答,因为我是直接上手编,没有什么严谨的思路。至于速度快,我当然也没想过。)我刚开始就是照着题目要求编写,编到这里突然卡住了,因为我平常在编代码的时候很喜欢用object对象,因为它用起来很方便,而且我知道它实现的原理是红黑树,效率极高。所以我当时卡到这里的时候立马想到用object对象,然后就很顺利的做出来了。

面试官:嗯好。我看你今天是唯一一个穿正装的,说明你是很重视。(到这里,技术性的问题已经差不多结束了)。我:是啊,这毕竟是我人生中第一次面试,还专门问了妈妈。不过我刚才到的时候确实很惊讶,发现只有我穿正装,有点尴尬(笑)。面试官:(笑)以后没必要穿了,就休闲可以。那么你还有什么问题要问我吗?我:你觉得我今天的表现怎么样?希望提出几点关于我的不足的建议。面试官:嗯……你的思路还是比较灵活的,表现的还是不错的。建议的话……之前问你的数组,你可以平常多查阅一下这些相关的算法,多掌握一些稀有的有趣的算法。

以上就差不多结束了。面试是4.13号的,之后直接进行了二面。二面是hr面,和hr姐姐聊的也挺好的,不过她最后还是婉拒了我。这两面都差不多是45分钟,过程还是挺轻松愉快的。毕竟这是我第一次面试,面试结束后我经常做梦梦到(笑),所以就当作回顾日记把去哪儿网面试的一个半小时记录了下来。

2017去哪儿网前端面试心得相关推荐

  1. 如何挑选适合的前端框架(去哪儿网前端架构师司徒正美)

    前端框架不断推新,众多IT企业都面临着"如何选择框架","是否需要再造轮子"的抉择.去哪儿网前端架构师司徒正美分析了各主流行框架优劣点.适用场景,并针对不同规模 ...

  2. 去哪儿网前端校招一面面经(2021.4.27)

    说一下项目或者比较擅长的技术 自己封装过组件库? 你项目中的去哪儿网是啥?(你小子盗版我公司的产品?) url是由哪几部分组成的 如何判断是否跨域 不同源指的是什么 跨域的方法有哪些 JSONP跨域的 ...

  3. 深圳威锋网前端面试总结

    今天可谓是面试最不容易的一趟啊,出门没带雨伞,遇到下雨,还遇到大巴刮花了一辆自小轿车,出乎意料的时间安排,本来时间到达深圳是充裕的,没想到这一耽误啊,面试是面试得一塌糊涂啊,我都想挖个洞跳进去了,哈哈 ...

  4. 去哪儿网java实习_【去哪儿网Java面试】Java实习(机票部门)-看准网

    Java实习(机票部门) 自我介绍,项目介绍,项目中遇到的难题,项目中用到了线程池,用的什么线程池,怎么配置的参数?自定义线程池,new ThreadPoolExecutor(10,20,2000,毫 ...

  5. 慕课网前端面试06--js基础-作用域和闭包

    一.题目 this的不同应用场景,如何取值? 手写bind函数? 实际开发中闭包的应用场景,举例说明? 二.知识点 2.1作用域和自由变量 作用域 全局作用域 函数作用域 块级作用域(ES6新增) / ...

  6. 【去哪儿网】2017去哪儿网

    题目描述 Please create a function to extract the filename extension from the given path,return the extra ...

  7. 2017年暑假实习面经: 去哪儿网(一面, 二面, HR面, Offer), 腾讯IEG(一面, GG...), 百度(一面, 二面, 三面, offer)

    2017年暑假实习面经: 去哪儿网(一面, 二面, HR面, Offer), 腾讯IEG(一面, GG-), 百度(一面, 二面, 三面, offer) 经过几个月的努力, 春招应该就这么结束了.总的 ...

  8. 2015(毕业)秋季校园招聘各种企业笔试面试心得

    我是那种准备非常不充分的要找工作的家伙,本来这个假期在学校呆一个月的时间是来复习考研的,结果这一个月什么也没做,时间都用来打dota2了,现在想想,我如果那时候好好看看书,现在早就应该是好几个offe ...

  9. 《面筋:拿到美团点评和去哪儿网的offer》

    <面筋:拿到美团点评和去哪儿网的offer> 前言 从9月25号下午面完百度之后,就结束了自己的找工作旅程.就这样浪了20来天,想想还是写篇面筋吧,可能会对学弟学妹有一点点帮助. 自我介绍 ...

最新文章

  1. spring springboot springcloud常用注解
  2. __proto__和prototype
  3. SAP MIGO 报错-在例程WERT_SIMULIEREN字段NEUER_PREIS中字段溢出-
  4. Jquery里live事件移除原因
  5. 使用事务代码MB51+Excel中的数据透视表实现 收发存报表
  6. PowerDesigner导入SQL脚本
  7. 无监督学习和监督学习的区别
  8. java.net.unknown_android -------- java.net.UnknownServiceException
  9. 可变lambda_Lambda的Lambda(如果可选)
  10. Bochs 调试命令
  11. 轻松取消Excel中的“自动添加超链接”
  12. vmlogin效果怎么样?亚马逊防关联超级浏览器,电商多账号管理神器
  13. 现在进行时和一般现在时的区分_38
  14. 计算机晋级职称考试内容,职称计算机考试内容
  15. Visual Studio 2015官方汇总包括下载和视频
  16. 计算机芯片级维修包括哪些,计算机芯片级维修1
  17. TIPC 透明通信协议
  18. CentOS7 添加开机启动项
  19. salesforce lightning 入门(一)
  20. vuex存储什么数据_【存储知识小讲堂系列】为什么数据隔离很重要

热门文章

  1. 公司挖来一个阿里Java大神,生产环境故障调优很溜
  2. 推荐8个好用的Linux音乐播放器~
  3. coalesce 函数详解与学习记录
  4. html监听多选框事件,复选框事件监听使用求助
  5. JavaWeb—静态网页HTML
  6. dell微型计算机换内存条,视频:小巧灵活 戴尔OptiPlex 7060微型机解析
  7. 数据报告 | 2017年中国汽车后市场app研究报告
  8. 【Unity3D游戏开发】GameObject.Find()、Transform.Find查找隐藏对象 (十)
  9. WiFi路由器存在226个漏洞
  10. android CMWAP CMNET