京东前端面试经历

京东面试总结

京东面试流程:

1:自我介绍;

2:技术介绍;

3:个人爱好兴趣; 

各位面试官问到的技术点

1:前端的发展;

2:你说熟悉的框架;

3:2018年你想去学去做的事情;

4:ajax的实现原理;

5:数组中,的重复元素进行去除;

6:对es6的了解;

7:前拷贝,深拷贝;怎样对一个对象进行深拷贝;

8:react是否了解;

9:列举Jq中常用的方法;

10:H5、css3的了解,常用的元素及属性;

11:echarts,10个柱状图该怎么处理;

12:说下你最近工作期间浏览的网站及书籍名;

13:是否有自己的技术贴:或github上传分享的项目;

14:对字符串进行拼接的几种方法;

面试官:

公司项目组分移动端与pc端;

移动端大概7人;

主要用到的技术react,

 

前端面试&滴滴实习心得

莫凡莫凡
4 个月前
原文地址在我的博客, 转载请注明出处,谢谢!

从大二下学期放暑假开始(7.14)到8月初,我一直在寻找一份实习,锻炼一下自己,看看学的怎么样。这期间,我相继面试了小米、途牛、滴滴和百度,都拿了实习offer。其中百度拿了两次实习offer,但由于我自身一些原因,都爽约了。(在这里给百度真诚地道个歉,我非常珍视这两次机会,但无奈遇到了不可抗拒的原因,今后有机会还会再投的(˶‾᷄ ⁻̫ ‾᷅˵))最后选择了在滴滴实习,很难得的经历。实习期间一直没空闲下来分享一下,结果拖到了现在...那么这篇文章就来分享一下我的面试和实习心得吧

面试

有一些记不清了,毕竟时间太久了...

小米

  • 说一下你的前端学习经历
  • css左右边固定宽,中间自适应,有几种方案
  • css3动画,transition属性知多少
  • 说说你是如何配置你项目里的webpack
  • 如何判断变量是true or false
  • 数组去重,要求时间复杂度为O(n)
  • http状态码,304什么情况
  • 跨域方法
  • 其他想不起来了...

途牛

  • typeof 都返回哪些类型 typeof null 返回什么,为什么?
  • cookie和session有什么区别
  • 有没有实际写过、解决过跨域相关问题
  • 使用过ES6/7哪些特性
  • 说说 promise 几个常用API和原理
  • React的特性,接着问原理,接着问好在哪里
  • 堆和栈的区别
  • 其他想不起来了...

滴滴

  • React技术栈做项目用到了哪些东西
  • React特性、virtual dom、diff 、合成事件、调和等原理
  • 为啥要给列表类组件设个key?
  • 读过React源码吗?
  • 使用过哪些状态管理库,我说Redux,接着问Redux 是如何管理React 的,你又是如何使用Redux架构你的项目的
  • Redux 有哪些优缺点
  • 了解数据可视化吗?做过之类的东西没有?
  • 了解node吗
  • 其他记不起来了...总之都是围绕React技术栈来问的,上来就问框架很显然想让你进来直接干活:)

百度(地图事业部)

  • 你在滴滴实习,为啥要来百度?(blablabla...夸了百度一番)
  • 你在滴滴做什么东西?用了什么东西(数据可视化,还用了你们的echarts呢(/ω\))
  • 那你知道echarts有哪些可以优化的地方?读过它的源码吗?
  • React 特性、原理,React 突出的思想
  • 你是如何使用Redux架构技术栈的
  • 我看你用了Redux-saga,它比thunk、promise有啥好处?
  • 你使用过哪些ES6 新特性、promise原理
  • 跨域的几种方法
  • 你这个项目有没有遇到什么你觉得难的问题,你怎么解决的?
  • 你有啥想问我的?(一般问部门技术栈、工作氛围)
  • 其他记不起来了...

百度(校园品牌部)

  • 介绍一下前端经历
  • 你平常如何用css管理页面布局的,我说栅格,又问栅格怎么实现的
  • css3动画、transition、transform,canvas、svg
  • sass跟less的区别?
  • javascript 有哪些特性,我说了弱类型、单线程、事件驱动,就有了下面的
  • 你怎么理解事件驱动机制的?
  • 用过事件委托吗?怎么用的?
  • 嗯...ES6 用过哪些新特性?我提到了箭头函数,于是就问
  • 箭头函数跟ES5匿名函数有什么区别?我提到了this指向,然后就接着问
  • 箭头函数自动绑定this原理是什么?
  • 嗯...你这个项目怎么配置webpack的?用过gulp吗?webpack跟gulp有啥区别?
  • React 突出的特性
  • 怎么用git建立一个远程分支
  • Linux命令知多少?
  • 怎么把一个链表倒序?
  • 其他记不清了....

总结

总的来说,由于面试的特殊时期,面试难度会比春招实习、校招要低很多。

面试会围绕你的简历来问,所以简历写好并且为简历做好准备很重要。

面试大多问的是基础,而且问的很细,经常围绕一个点来深挖,还会问一些经常用到的API,所以面试一定要准备,把一些零碎的知识温习一下,基础很重要。项目问的比较少,但项目决定你简历的质量。

前端要掌握的知识面比较广,但是有一些是构建工程所必须的,最好先培养自己比较全面的基础技术栈,可以足够形成构建一般工程项目的基本能力,然后再深挖。

照目前情况来看,深入理解一门框架是很有必要的,但也没必要多。

前端面试算法问题问的较少(大公司问的较多),但别告诉我你不知道查找、排序、去重、遍历二叉树...

面试一定要保持平和心态,抱着我已经拿到BAT offer的心态,不紧不慢的交谈,用眼神、肢体语言帮助嘴巴说话;择机展示思考的过程,全程展示对这行的热情。

祝愿大家都能找到心仪的实习、工作。

 

实习

我在滴滴实习了一个多月就走了,原因是学校课太多,导员不让出去,我也意识到了现在还是以学业为重...

实习期间,我参与了两个项目,一个是一个滴滴实时计算平台,另一个是 Druid 管理平台。

实时计算平台,面向滴滴内部工程师,是一个依靠滴滴海量数据完成实时计算、任务调度、自动报警监控等等,项目很大,做了一年了,业界少有吧....我所做的是将我负责的部分数据可视化及国际化;

Druid 管理平台,仍面向内部工程师,是一个可视化数据库管理平台,前端由我和另一位实习生负责。我做的是一期核心模块的开发。

最大的体会就是

  • 要对产品有极致追求,不能容忍错误,不能容忍繁琐的操作,还要兼顾所有可能的操作
  • 体会到了海量数据下的性能的重要性,开始关注性能优化
  • 要抱着后台什么数据都有可能产生的考虑,来写健壮的程序,类型检查、空值检测、try catch是必要的
  • 做好渐进增强、功能解耦、组件分离很能体现一个人的编程能力和水平,最忌讳代码粘一块、写死,坑的都是自己,,,
  • 调试很重要,要有写debugger的习惯
  • 时刻准备迎接新技术,哪怕从未听说,只要项目需要,就得立刻上手(我所在的组还是很喜欢用新技术的,只要它好用,License符合)
  • 前后端分离的接口文档遵循规范能少说很多废话
  • 项目管理,敏捷开发是很好的方式
  • 我所在的组开发项目的流程一般是:老大不知道从哪弄来一个需求(可能上级安排的,很多是自己想的…),然后全员开会说需求、定任务,各成员写排期,后端定具体需求、接口,前端配合后端一同开始,每周报告任务进展...
  • 对前端er来说,改需求不用那么在意,我们最终的目的都是让这个产品更好不是吗?
  • 实习生很少会接触to C产品,做的大多是面向内部人员,因为出bug好商量嘛...
  • 我所在的部门女工程师还是挺多的,这个的确让我很惊讶(No Offense)...
  • 想到再补充(/ω\)

这次实习,确实比自学效率高多了,而且最重要的是,开阔了眼界,了解了这行业前沿是个什么情况,大公司又是如何部署前端技术栈开发项目的,以及我自身的不足。我也很幸运,找到了自己感兴趣的方向。

 

 

阿里巴巴暑假实习面试总结

AhonnAhonn
1 年前

原文地址:http://www.ahonn.me/2017/03/1...

2月末的时候,通过 SimplyY 内推了阿里巴巴暑期实习的前端开发岗,在此表示感谢。
接着3月1号收到了内推的通知邮件,完善信息后很快就接到了一面的电话(3月3号)。

一面

面试了大概20分钟左右,整体内容还是比较偏基础。一开始是正常流程的自我介绍,说是三分钟自我介绍,但是我语速比较快的不到两分钟的介绍完了。(刚好是临近中午,原本打算吃饭的,要是去吃饭的话就得在路上面了...)

CSS 垂直居中

这个写过一篇博文专门总结过,不过面试的时候还是太过紧张没有答全。主要是 Flexbox 布局的垂直居中比较容易忘记。

具体就不再啰嗦了,详情可以查看:CSS 实现垂直居中

call 与 apply 的区别,以及性能差别

call 与 apply 的区别,这是一个老生常谈的面试题了。call() 与 apply() 都是用于在指定 this 值与参数的情况下调用函数,主要的区别在于除了传入 this 值之外,apply() 接收类数组或者类数组对象来作为调用的函数的参数,而 call() 则是需要分别传入函数的每一个参数(除第一个参数之外的其他参数)。

call()方法与apply()方法的作用相同,它们的区别仅在于接收参数的方式不同。对于call()方法而言,第一个参数是this值没有变化,变化的是其余参数都直接传递给函数。换句话说,在使用call()方法时,传递给函数的参数必须逐个列举出来。—— 『JavaScript 高级程序设计』

区别的话基本上只要看过书或者刷过面试题都会知道,但 call() 与 apply() 之间的性能差别就不是那么常见了。
比较幸运的是,之前在阅读 underscore 源码的时候有注意到这个细节,为此也写过另外的文章:从 optimizeCb 说起

实践证明,在知道调用函数的参数数量时,使用 call() 的性能会优于 apply()。主要在实现的过程中 apply() 需要完成额外的操作(判断第二个参数类数组的长度,etc.)。具体为什么有这种差别,可以在 ECMAScript Language Specification 中查看 Function.prototype.apply与 Function.prototype.call 的具体实现差异。

参考链接

什么是闭包

又是一个老生常谈的问题。我的理解比较肤浅,就是 A 函数返回 B 函数,B 函数能够访问 A 函数中的局部变量,使得在 A 外部的作用域中能够使用 B 函数间接操作 A 函数中的局部变量,这样就形成了一个闭包。A 函数中的局部变量与返回的 B 函数一同存在,不会被垃圾回收机制清理(引用还存在)。

在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。—— 维基百科

建议阅读 『你不知道的 JavaScript(上卷)』 中有关作用域与闭包的部分。

什么是尾递归

在计算机科学里,尾调用是指一个函数里的最后一个动作是一个函数调用的情形:即这个调用的返回值直接被当前函数返回的情形。这种情形下称该调用位置为尾位置。若这个函数在尾位置调用本身(或是一个尾调用本身的其他函数等等),则称这种情况为尾递归,是递归的一种特殊情形。—— 维基百科

一般递归实现阶乘:

function fact(n) {
  if (n == 0 || n == 1) {
    return 1;
  } else {
    return n * fact(n - 1);
  }
}

一般递归需要中栈上维护函数的调用信息直到函数返回后才释放,容易发生『栈溢出』错误。但对于尾递归来说,只需要维护一个调用记录。

尾递归实现阶乘:

function fact(n) {
  return fact-iter(n, 1);
}

function fact-iter(n, a) {
  if (n == 0) {
    return 1;
  } else if (n == 1) {
    return a;
  } else {
    return fact-iter(n - 1, n * a);
  }
}

关于递归与尾递归,在 『计算机程序的构造和解释』中也有类似的讨论。

React 的设计理念

这部分答得不是很好,只提到了组件化,单向数据流,Virtual DOM 之类的。

有关 React 的设计思想可以参考这一篇文章:React 设计思想

前端安全(攻击方式与如何防范)

第一反应就是 XSS 与 CSRF,XSS 可以通过对输入数据进行转义来防范,而 CSRF 则通过使用 SSL 链接访问资源或者请求中添加验证码来进行防范。

除此之外我漏掉了网络劫持,控制台注入代码等攻击方式,这里有篇文章做了详细介绍:聊一聊WEB前端安全那些事儿

二面

第一次远程视频面试,好紧张。

一开始问了 CSS 中 position 属性的 absolute 的作用以及应用场景,这个基本上没有什么问题。接着叫我拿纸写冒泡排序(手写 T-T),飞快的写完。然后跟一面一样也问了前端安全相关的问题,一下子都不紧张了.. 没有想象中的难。

实现 bind 函数

同样是让我写代码,同样是手写(T-T)。这个问题对我来说不算难,不过只是写了简单的实现,没有考虑其他情况。

Function.prototype.bind = Function.prototype.bind || function (context) {
  var self = this;
  return function () {
    return self.apply(context, arguments);
  }
}

基本原理就是使用 apply() 与闭包,返回包含 apply() 的闭包使得 apply() 绑定指定作用域,但并未执行。

阅读 Underscore 源码的经历

之前拖拖拉拉的阅读完了 Underscore 的源码,并提交了一个小 Pull Request

在阅读的过程中学到了许多的东西,例如上面提到的 call 与 apply 的性能差别,除此之外还有如何去判断变量的类型,以及如何判断两个变量是否相等,等等。另外也了解到许多闭包的使用场景。

阅读其他类库的收获

除了 Underscore 之外还阅读过一点 Bootstrap 和 jQuery,这个博客主题的样式部分的组织方式就是参考了 Bootstrap 的组织方式,另外也稍微阅读过 jQuery中 $.ajax 以及事件相关的源码。

在阅读代码的过程中的收获就是学习了一些组织代码的方式,还有如何写才能有利于拓展,更加健壮。其中也学到了一些提高性能的技巧,函数缓存,事件队列之类的。

博客主题的开发经历

其实一开始写主题只是想给自己用,之后发现蛮多人也喜欢我这个主题的,并时不时有人中 Github 上提 Issue,这对我是莫大的鼓励。虽然我水平并不是很高,但是写出来的东西有人用感觉真的是特别开心,也特别有动力去改进。

从开始去写主题到现在差不多也一年了,这一年中我从前端小白变成前端大白。在维护的过程中学习到很多东西,虽然目前写得也不是很好,但是我还是会慢慢改进继续维护下去的。

维护的过程中的收获就是,当站在自己的角度看问题与在别人的角度看完全是不一样的,或许有个功能我并不需要,但是有人提了,我就得站在『用户』的角度去思考,去实现。『用户』只关心能不能用,好不好用,而并不关心代码写得怎么样。

实习期间遇到得难题

可能我做的工作相对简单,就算不会,基本上靠搜索引擎都能够解决。我觉得能用 Google 解决的问题不算难题。以我现在的水平,还达不到遇到的难题 Google 搜索不到的😹

三面

三面基本上没有问太过具体的前端相关的问题,大部分是在聊聊看法,聊聊项目。

开始让我用纸画出博客的设计,其实主要还是主题,没什么难度,毕竟代码都是我自己写的。

然后让我介绍一下我熟悉的一个框架,说的 React,提及到了 Vitrual DOM 和 diff 算法,说了一下 diff 算法的大概策略。还有说到组件化,单向数据流等等。幸运的是,我在二面之前刷了 『深入 React 技术栈』这本书,结合之前的实践能够说个大概。

中间有聊到兴趣爱好,我想了想好像只有写代码。听歌应该也算?写代码的时候必定要听歌。我记得去年国庆有一天从起床写到晚上睡觉,差不多写了 11 个小时,那时候正在折腾 React 与 Meteor。我自己都觉得不可思议。

总结

可能是运气问题,我觉得我的这几面难度都不高😹。得益于看的书,好多知识点都是书上有的。基本上基础的前端面试题都可以在红宝书上找到,真不愧为前端面试宝典。另外 Github 上的这个博客主题也帮了很大的忙,300+ star 果然还是有点用处的(虽然说 star 不能代表什么,而且的确写得也很水,但作用不可否认)。

最后,基础很重要,基础扎实是基本。但是如果想要有突出的表现还是需要更有深度的研究。需要经常思考总结,不仅仅是浮于表面,更要深入原理。

posted @ 2018-02-24 15:59  ____chen  阅读(1339)  评论(0编辑  收藏  举报