# 面试准备

面试环节有哪些

面试过程是严肃的,知道了基础,会做项目,不一定会拿到Offer。面试过程中,如何进行表述,把自己学习到的知识能展现出来是很重要的。

所以,对于面试者来说,如何写好简历是很重要的。因为面试官会从你的简历去挑一些他感兴趣的内容去问,去挖掘你的潜在可能,去了解你的知识与解决问题的能力。一份好的简历往往是走入职场的敲门砖!

对于应聘生,积累一些解决问题的经验,加强基础知识的掌握(这也是更容易被考察的);

对于社招,实际解决问题的能力+对应的业务/相似的业务背景+技能抽象/发展前景。

面试环节的设置:

  1. 基础知识测试
    • 基础知识(HTML语义话、CSS等)
  2. 能力测试(在基础上的延伸)
    • 基本的原理(缓存、原型链等)
    • 简历的引导,自我介绍引导
  3. 负责人沟通(校招不会有,原因:人太多)
    • 特色业务
    • 项目背景
    • 团队能力
  4. HR面试
    • 沟通
    • 性格
    • 潜力(技术生涯)

# 职位描述分析

阅读职位描述,这是一个知己知彼的过程。

京东金融——前端工程师:

职位描述:

  1. 负责京东金融企业业务PC端与移动端相关的前端开发工作

    解析:本岗位,PC+移动端相互交叉,对技术栈的要求是不一样的。

  2. 负责企业金融App H5开发,完成前端界面与后端交互开发

    解析:是不是需要了解一下Hybird开发?JSbridge?

  3. 负责与后端工程师沟通协作,调试数据接口

    解析:Mock数据开发

  4. 负责京东金融前端组件库的建立(相比与前3条,最重要的一条)

    解析:1.原生js/css的理解;2.前端组件库的经验;3.通读/了解其他的UI库的组件,读过源码;

  5. 负责对现有系统 的优化与重构

    解析:对现有工作与业务的需求;可以拿自己公司的系统或者项目作为例子,有哪些问题?是否需要重构?为什么需要重构?怎么去重构?这里去考查思考与判断能力。

面试准备的第一个初衷:判断该职位适合不适合自己,判断自己喜欢不喜欢,能不能Hold住;第二初衷, 技术准备需要做哪些?了解该企业需要什么样的人才?准备到一个什么样的程度?

任职要求:

  1. 3年以上相关工作经验,精通HTML5我,了解HTML5最新规范,能够熟练去用HTML5特性构建移动端的WebApp;

    解析:首先,对于3年的经验,这个不重要,如果说没有3年的经验,但是有足够好的项目或者能力的展示,是可以破格录取的。然后,对于H5的描述,再次说明了H5的重要性;隐藏的意思:看看这个人是否对新知识有学习的劲头,看看是否是对新技术是否有追求。

如何考察自己是否达到?很简单,问自己几个问题,看自己能不能答上来;

  1. 熟悉当前流行的JavaScript类库,熟悉JavaScript面向对象编程方法;

    解析:面向对象编程,包括原型链也要比较熟悉。

  2. 熟悉Web标准,对表现与数据分离,HTML语义化等有一定的理解,至少熟悉一种前端MVC框架并且有实际经验(不限React,Vue,Angular等);

    解析:熟悉对新的web标准;理解表现与数据分离;准备一个自己做过的项目进行演示;语义话要避免DIV DIV DIV这样的全是DIV的写法;至少熟悉一种 + 实际经验,学习不等于实战经验。可能会问,遇到过什么开发问题,怎么解决的,这种问题。

  3. 具有前端架构分析与设计能力,一贯坚持编写易读、易维护、高质量、高效率的代码,习惯于OOP开发方式;

    解析:对于架构分析针对的是高级的工程师,所以不面向初级的开发人员。因为刚刚入门的人,刚刚开始做的基本是业务。怎么去考虑?拿一个项目来进行分析:(1)目录结构怎么设计;(2)复用性怎么设计;(3)模块化怎么设计;(4)自动化测试怎么测;(5)上线的流程是什么?这些基础的东西都要想的非常清楚,非常周到。 写易读、易维护、高质量、高效率:很容易考察出来,这个可能会让你自己写代码,要学习代码规范。能抽象的尽量抽象,函数名不要写在一堆。

  4. 对用户可用性、用户体验,用户研究等相关知识有深入的了解和实践经验;

    解析:不是考察技术的本身,是考察的完成这些功能,还是说考虑了这个功能是否好用、卡不卡?回答的思路:以往的项目怎么完成了任务,在完成的过程中,进行了什么样的思考,为了增强用户的体验。

  5. 对Web前端技术有强烈兴趣,能对Web前沿技术研究和新技术调研,有良好的学习能力和团队合作精神;

    解析:注意“强烈”两个字,对团队的一种认可,对企业文化、公司文化的一种要求。去github上去看看排名靠前的github的项目,去看看用了哪些技术与工具。

  6. 了解Css预编译语言如Sass、less等;

    解析:这个简单,也是基础。

  7. 熟悉Web构建工具Grunt\Gulp,能够自己搭建前端构建环境;

    解析:这个要一定好好准备,了解/熟悉/精通是三个概念。可以准备一下这些构建工具的区别在哪里,技术特点在哪里。

  8. 有服务端(不限语言)开发经验者优先。

    解析:可以忽略,有时间也可以去看看。这里是对Nodejs的考察。不要轻易说自己精通,除非是自己真的擅长。

总结:

  1. 快速识别是否自己喜欢的。
  2. 能不能Hold住这个岗位,或者短期的准备能否达到要求。
  3. 职位描述,是强调对工作的工作职责,职位要求对技术深度的要求。

艺龙——前端工程师:

岗位描述:

  1. 负责艺龙酒店业务前端开发、使用系统化设计提高开发效率;

    分析:说的很笼统;系统化设计:模块化设计、前后端分离;

  2. 负责推广运营活动的HTML5,采用canvas、css3、JS相关前端技术;

    分析:这里的HTML5没有具体PC、移动端;明确canvas、css3、JS技术,如果做广告,可能是对做动画的技术的一些要求。普通的动画是DOM+CSS,或者是SVG做动画,第三种就是Canvas,可以做2D或者3D效果,用webGL的不多。 去了解一下GPU加速,Canvas的API,常用的一些动画的设计。

  3. 负责艺龙微信项目;

    分析:去看看艺龙的微信小程序、微信公众号,了解微信自定义标签,对微信支付去了解一下。微信开发中遇到的一些坑。

  4. 艺龙前端框架的开发与维护、协助业务方解决应用问题。

    分析:与京东的第4条类似。开发与维护说明,已经有一套内部的框架,需要升级维护。

岗位要求:

  1. 精通各种Web前端技术、包括HTML/CSS/Javascript等,3年以上工作经验;

    分析:这点有一点点扯,不可能做到样样精通。

  2. 深刻理解Web标准,对可用性、可访问性等相关知识实际的了解和实践经验;

    分析:同样是Web标准,主要是ES6。可用性、可访问性是指性能方面的准备,如何反馈给前端错误码,如何捕获异常。通常是JS运行异常,资源加载错误。

  3. 熟练使用工程化工具,熟悉webpack\grunt\sass优先;

    分析:这里一样需要准备gulp。关于前端工程化,是前端开发人员必会的基础知识。

  4. 具有良好的代码风格、接口设计与程序架构;

    分析:比较虚。

  5. 至少熟悉一门非web前端脚本的语言(如Java/Python)或Node.js,有实践经验;

    分析:对后端的要求,说的是熟悉,所以要准备Node.js,不需要去准备如PHP。有教程可以快速过一下!认识有艺龙的同事,可以去问问里面的同事。这一条说明是全栈开发。

  6. 个性乐观开朗,逻辑性强,善于和各种背景的人合作。

    分析:有深意的一点,对表述能力的要求。比如:在以往与哪些人怎么合作的,你们有没有通力解决什么问题?

目的:通过职位描述去了解你不了解的公司的工作职责和技术要求,有针对性的面试,可以快速过滤自己不相关的岗位。

# 业务分析或实战模拟

职位分析更偏向于方向与知识面,这一块,更加具体的分析公司的技术栈,业务特色,知识点的侧重。

下面看一下京东金融。

1
  1. 轮播,导航,页面布局,鼠标Hover效果(css3效果)

  2. 内容列表:理财,股票,购物(懒加载),保险,优惠券

  3. 技术细节从Chrome中的DevTools来看:

    视频录制时间可以看到如下内容:

    • webpack(source map没有关)
    • vue
    • jquery
    • ES6语法

    而笔者看到的:

    • Source: JSONP
    • Webpack
    • Vue的Sourcemap已经关闭

    看一下Element:

    • Header部分,webkit渲染
    • Link: dns-prefetch,DNS预解析,网站性能优化。

    Application:

    • 字体图标,字体文件,字体自定义
    • LocalStorage/Session/Cookie

艺龙:

2
  1. 微信扫一扫:小程序,公众号

  2. 手机版就是H5

  3. 组件:日期控件、轮播图、鼠标Hover效果(background相关的知识),去了解一下如何实现(transition属性);

  4. 看一下DevTools:

    看一下Elements, network, sources

    • Header
    • 页面中JS全放在页面的Header中,关系到渲染机制,async属性。
    • JQuery版本是1.11版本与新版本有什么区别,与新/旧版有什么新增/删减的功能,兼容性的角度。
    • 模块化:Require.js相关的配置
    • 模板引擎:ejs, swig
    • webpack打包相关

# 技术栈准备

目标:

  1. 准备哪些技术栈
  2. 如何准备

角度:1.从框架;2.从自动化工具

框架的角度

首先是JQuery还是需要准备一下,了解一下源码。看核心的架构,事件委托,事件机制,兼容性。

不需要看所有的源码,看看博客与文章,浏览量比较高的。

前端框架:Vue, React, Angular,了解其中之一就行了。原理基本一样!!不用给自己挖坑,说自己都懂。

怎么准备?

  1. 源码角度;
  2. 实战准备;

然后是Nodejs,Nodejs需要了解一些基本的,如果没有Nodejs相关的经验就不用写在简历之中。

前端工程(自动化)的角度

简单的说就是在工程上线之前,对JS,css进行处理。

  1. Sass/less预编译
  2. 构建:Gulp/Webpack
  3. npm常用命令,打包发布

# 自我介绍

简历:

- 基本信息,姓名-年龄-手机-邮箱-籍贯
- 学历,博士 > 硕士 > 本科 > 大专
- 工作经历,时间-公司-岗位-职责-技术栈-业绩
- 开源项目,Github和说明

解析:

  1. 招聘中对年龄与工作经历来判断,是否达到了年龄段相应的技术要求,判断是否对技术有沉淀与追求。

  2. 手机与邮箱这个是联系方式。

  3. 绝大数公司对学历还是有要求的,从大写到小,只保留最高的学历。

  4. 工作经历很重要。总结一下业绩,HR比较习惯看,有技巧。举例:在某个岗位上做了什么,如果没有做出什么业绩,现在去回想,如果有一些缺点,自己有没有新的解决方案,如何去构思,如何去实现。

  5. 开源项目:亮点项目,可以沉淀。同样,可以与开源项目去做一些贡献,不能作假。

自我陈述:

- 把握面试的沟通方向
- 豁达、自信的适度发挥

解析:

  1. 举例:校招中,面试者说:“我做过什么什么样的项目”,从面试的角度,心中有准备了如下问题:

    • 负责什么项目
    • 有什么人参与
    • 与前端的结合点是什么
    • 角色是什么
    • 项目中承担的责任
    • 做出了什么成绩

“我是负责人”:

- 有几个人参与
- 项目管理?技术负责?
- 落脚点:做出了什么成绩

头衔越大,问得越多。

所以要针对性的准备,比如对于艺龙:我平时喜欢看一些网站,学习一些新的技术知识,也会去尝试。话不用多说,传递一种对技术有热爱、有追求/思考的人的感觉。引导面试官去问:(1)你平时喜欢去哪些网站;(2)研究哪些代码; 不能直接去说艺龙,然后,等面试官问了之后,自己就可以去回答自己准备了的内容。

  1. 豁达指说话要声音要洪亮,不能自卑,要有自己的气场,因为面试官也很紧张。

关于适度发挥:不能骄傲,目的是让面试官来欣赏你。

关于照片是否要准备,视频中的老师的意思是不需要,也不重要。而笔者看来,非常重要。

下面来看看反例:

  • 关于教育背景,不要写学习的课程,不要写高中。
  • 个人技能不要写的琐碎:比如不要写Linux到工具类里面,写的比较大了。
  • 去繁化简,把握“了解/熟悉/精通”
  • 兴趣:写对技术的追求,不要写爬山之类的。
  • 不要太放自我评价
  • 写业务的业绩,而不提技术上的业绩。

总结一下:在简历中,要简洁,注意排版;突出重点要传达的个人信息(技术的、能力上的),引导面试官针对性的发问。

# 实例与实战环节

实例:

- 自如谈兴趣、巧妙示实例、适时讨疑问
- 节奏要适宜、切忌小聪明

解析:

  1. 切忌不能说XXX我没有准备,我来给你讲讲这个。聪明的求职者,不要“我不知道”“我不懂”“我要回去看看”,要说“面试官,这里能不能指点一下?”“给点建议?”“给点资料,我想回去看看”

  2. 不要对简单的问题很不屑。

  3. 耐心的写/说一些对问题的答案,而不是对实现/回答了就行了的心态。

实战:

- 方向要对,过程要细
- 胆子要大、心态要和

解析:

  1. 可能有一些公司的项目,没有做过所有的模块,但是要了解细节。

  2. 对于有一些公司考察一些比较难的算法题,要去尝试。根据自己的经验去做方案,就怕没有想就放弃。勇于承担负责,敢于挑战未知。

  3. 无论是否自己能否答完,都不要自傲;无论是否自己是否了解,都不要自卑。

  4. 如果自己不清楚,不要轻易放弃,可以去多请教一下面试官。要感谢这次面试,可以找到知识体系中,薄弱的地方。