前端面试题经验总结

1面试注意点javascript

  1. 面试题目: 根据你的等级和职位变化,入门级到专家级:范围↑、深度↑、方向↑、新技术↑。
  2. 题目类型: 技术视野、项目细节、理论知识题,算法题,开放性题,案例题。
  3. 进行追问: 能够确保问到你开始不懂或面试官开始不懂为止,这样能够大大延展题目的区分度和深度,知道你的实际能力。由于这种关联知识是长时间的学习,绝对不是临时抱佛脚得来的。
  4. 言语态度:回答问题再棒,面试官(多是你的直接领导面试),会考虑我要不要这我的作个人同事?作个人员工?因此态度很重要。(感受更像是相亲)
  5. 硬知识才能:资深的工程师能把absolute和relative弄混,这样的人不要也罢,由于团队须要的你这我的具备能够依靠的才能(靠谱)。

2前端开发面试知识点大纲css

1、HTML&CSShtml

  • html:超级文本标记语言(HyperText Markup Language)
  • css:层叠样式表(Cascading Style Sheets)
    对Web标准的理解、浏览器内核差别、兼容性、hack、CSS基本功:布局、盒子模型、浮动和定位、选择器优先级及使用、HTML五、CSS三、移动端适应

2、JavaScript前端

ECMAScript标准规范,描述这门语言的实现细节和标准。vue

  • 基础部分
    数据类型、运算符、结构语句、面向对象、函数、正则表达式。
  • 应用部分
    window对象、document对象、继承、闭包、插件、做用域、跨域、原型链、模块化、自定义事件、内存泄漏、事件机制、异步装载回调、模板引擎、Nodejs、JSON、ajax等

3jQuery·
对象的结构、jQuery的方法挂在哪里、插件制做、jQuery的经常使用方法、选择器、jQuery的事件用法html5

4其余java

  • HTTP、安全、正则、优化、重构、响应式、移动端、团队协做、后台相关、编辑器和自动化工具、新技术、前端自动化、可维护、SEO、UED、架构、职业生涯等

必备知识点node

  • 做为一名前端工程师,不管工做年头长短都应该必须掌握的知识点:
  • DOM结构 —— 两个节点之间可能存在哪些关系以及如何在节点之间任意移动。
  • DOM操做 ——如何添加、移除、移动、复制、建立和查找节点等。
  • 事件 —— 如何使用事件,以及IE和标准DOM事件模型之间存在的差异,以及经常使用的事件委托。
  • XMLHttpRequest —— 这是什么、怎样完整地执行一次GET请求、怎样检测错误。
  • 严格模式与混杂模式 —— 如何触发这两种模式,区分它们有何意义。
  • 盒模型 —— 外边距、内边距和边框之间的关系,及IE8如下版本的浏览器中的盒模型
  • 块级元素与行内元素 —— 怎么用CSS控制它们、以及如何合理的使用它们
  • 浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。
  • HTML与XHTML——两者有什么区别,你以为应该使用哪个并说出理由。
  • JSON —— 做用、用途、设计结构。

3.前端开发面试知识点大纲:

HTML&CSS Web标准的理解、浏览器内核差别、兼容性、hackCSS基本功:布局、盒子模型、选择器优先级及使用、HTML5CSS3、移动端适应。
JavaScript  数据类型、面向对象、继承、闭包、插件、做用域、跨域、原型链、模块化、自定义事件、内存泄漏、事件机制、异步装载回调、模板引擎、NodejsJSONajax等。
其余:  HTTP、安全、正则、优化、重构、响应式、移动端、团队协做、可维护、SEOUED、架构、职业生涯

4百度react

一面linux

1.AJAX流程

2.promise简单说一下

3.手写一个箭头函数

4.链式调用

5.简单的观察者模式

6.letconst

7.数组去重

8.判断数据类型,null怎么判断

9.正则 电话区号+座机号,并给区号加上括号

10.MVCMVPMVVM

11.TopK用的什么排序

12.堆排序的时间复杂度、稳定性,什么是稳定排序

13.基本有序的数组用什么排序

14.冒泡排序时间复杂度,最好的状况的时间复杂度

二面

1.三栏布局,(博客有)

2.position

3.让元素不可见

4.数组深浅拷贝、对象深浅拷贝

5.webpack路由懒加载

6.ES6异步请求数据怎么操做

7.有哪些公司offer

三面

1.相似脑筋急转弯

2.相似脑筋急转弯

3.letconst

4.结构辅助

5.rest参数

6.SPA优缺点

7.MVCMVVM MVVM为了解决什么问题

8.箭头函数

9.XSSCSRF

10.ES5ES6区别

11.项目

12.项目难点

13.有哪些offer

14.全栈的见解

美团

1.Vue双向数据绑定

2.diff算法

3.vue计算属性如何实现

4.vdom优缺点

5.SPA原理

6.webpack用过那些loader

7.gitHub

8.angular脏检查

9.export看代码说结果(好像babel转码的exportnode里的不太同样)

10.letconst

11.箭头函数

12.localStorage缺点

13.手写算法,求二叉树中两个标记的节点之间的最短路径吧,(相似迪杰特斯拉算法吧)

1.无序数组,找出全部知足条件的数,这个数比前面的数都大,比后面的数都小

2.js继承

3.实现一个简单的mvvm

4.实现一个装饰者模式

5.看过哪些书

6.this绑定

7.HTTP缓存,ETag

1.prototype属性

2.跨域安全,怎么防范

3.设计方面的书

4.UI的了解

5.CSS的书

6.前端哪里很差

7.问了一些复杂的设计模式

8.项目亮点

9.MVC

京东

1.jqvue区别,各自的场景

2.为何选择Vue

3.跨域方法

4.ES6新特性

5.h5新特性

6.你作前端的优点

1.Vuex原理

2.项目难点

3.水平垂直剧中

4.盒模型

5.数组去重

6.一维数组变二维

7.HTTP状态码

8.继承

9.对框架怎么看

滴滴

1.手写算法

2.手写继承

3.画盒模型

1.经常使用的类名

2.继承

3.盒模型

4.jsonp

5.ajax同步和异步

6.window.onload,浏览器怎么渲染

7.轮播图

8.linux命令

9.数组归并去重

北森云计算

1.JS数据类型

2.盒模型

3.vuereact区别

4.如何选择框架

5.移动端1px

6.vuex

7.Promise源码

8.跨域

1.自我介绍

2.项目

3.jq源码

4.vue源码

5.vuereact区别

6.promise

7.性能优化

8.diff算法

9.双向数据绑定

10.跨域

商汤科技

1.行元素和块元素

3.eval

4.JS数据类型

5.JS有哪些对象

6.=====

7.link@import

8.undefinednull

9.getpost

10.JS时间线

12.position

13.H5新特性

14.cookiestorage区别

1.项目

2.性能优化

3.手写快排

4.表单怎么抽取成组件

5.双向数据绑定

6.响应式布局

7.浏览器兼容

8.vuereact区别

网易有道

1.行元素、块元素

2.原型链和继承

3.浏览器内核,浏览器引擎

4.跨域

5.typescript

6.todolist

7.互斥锁

8.bindcallapply区别

9.将一个元素隐藏

10.css单位

11.闭包

12.webSocket兼容处理

小米:坑!!!

1.flex布局垂直居中

2.ES5有什么块做用域

3.CSS3动画

4.H5 拖拽元素状态,方法

5.webSocket

6.history方法

7.h5增长了哪些事件

6.webpack性能优化

7.express中间件

8.promise穿透,promise递归

9.mongoDB的分页

10.观察者模式

11.UDPTCP区别

12.generate

13.Iterator

14.async function

15.前端安全

16.import互相引用

17.JS垃圾回收制

18.怎么建立一个没有原型的对象

19.with

20.闭包

21.css hack

22.做用域链

23.性能优化

24.requireimport的区别

25.commonJS

26.cookiestorage

27.大列表的优化

28.vue源码

29.jq源码

30.dom事件流

31.事件委托,为何会提高性能

32.事件绑定IE兼容

33.attarhEventListen addEventListener区别

34.浏览器缓存

35.PromiseAPI

36.对象实现遍历接口

37.三栏布局

38.new 原理

39.看了哪些书

40.拿了哪些offer

还有好多我听都没有听到过的东西。。。我直接说不懂。。。

还问了n多个,相似表单优化的问题,而后说他们也不太会,就和我讨论下

问的问题比我前几回的总和都多了,最后打电话说我还OK,我他妈反手。。就是一张过去的CD

前几回面试我以为还OK,到了小米,感受本身废了。。果真学无止境

滴滴北京

1.css3动画

2.实现水平垂直居中

3.Promise规范、源码

4.Promise链式调用如何中断

5.Vue性能优化,用过哪些性能优化的方案(这个他和我说了好多,我也懂了好了好多,一会记录一下)

6.vuereact的区别

7.快速找到数组中只出现一次的值(用位操做)

8.async function

9.项目和我聊了不少

10.postCssmixin

网易雷火

1.原生实现lazyload

2.原生实现v-bind

3.原生实现v-modul

4.webpackgulp的区别

5.css预处理器、后处理器

6.CDN的好处

7.XSS原理及其防护、CSRF原理及其防护

8.观察者模式

9.git 一个分支已经提交了,你如今的代码已经写了不少,发现以前有个BUG要改,怎么办

10.nginx反向代理

11.跨域

12.vue-cli配置proxy

13.jQ.on源码

5.

HTML&CSS 
Web标准的理解、浏览器内核差别、兼容性、hackCSS基本功:布局、盒子模型、选择器优先级、 
HTML5
CSS3Flexbox

JavaScript 
数据类型、运算、对象、Function、继承、闭包、做用域、原型链、事件、RegExpJSONAjaxDOMBOM、内存泄漏、跨域、异步装载、模板引擎、前端MVC、路由、模块化、CanvasECMAScript 6Nodejs

其余: 
移动端、响应式、自动化构建、HTTP、离线存储、WEB安全、优化、重构、团队协做、可维护、易用性、SEOUED、架构、职业生涯、快速学习能力
1DOM结构 —— 两个节点之间可能存在哪些关系以及如何在节点之间任意移动。

2DOM操做 —— 如何添加、移除、移动、复制、建立和查找节点等。

3、事件 —— 如何使用事件,以及IE和标准DOM事件模型之间存在的差异。

4XMLHttpRequest —— 这是什么、怎样完整地执行一次GET请求、怎样检测错误。

5、严格模式与混杂模式 —— 如何触发这两种模式,区分它们有何意义。

6、盒模型 —— 外边距、内边距和边框之间的关系,及IE8如下版本的浏览器中的盒模型

7、块级元素与行内元素 —— 怎么用CSS控制它们、以及如何合理的使用它们

8、浮动元素 —— 怎么使用它们、它们有什么问题以及怎么解决这些问题。

9HTMLXHTML —— 两者有什么区别,你以为应该使用哪个并说出理由。

10JSON —— 做用、用途、设计结构。

6. DIV+CSS常见错误汇总

内容摘要:一般为了说明与HTML网页设计语言中的表格(table)定位方式的区别,由于XHTML网站设计标准中,再也不使用表格定位技术,而是采用css+div的方式实现各类定位。应用应用DIV+CSS编码时很容易犯一些错误。

CSSDIV是网站标准(或称“WEB标准”)中经常使用的术语之一,一般为了说明与HTML网页设计语言中的表格(table)定位方式的区别,由于XHTML网站设计标准中,再也不使用表格定位技术,而是采用css+div的方式实现各类定位。应用应用DIV+CSS编码时很容易犯一些错误。本文列举了一些常见的错误:

  1. 检查HTML元素是否有拼写错误、是否忘记结束标记

即便是老手也常常会弄错div的嵌套关系。能够用dreamweaver的验证功能检查一下有无错误。

2. 检查CSS是否正确

检查一下有无拼写错误、是否忘记结尾的 } 等。能够利用CleanCSS来检查 CSS的拼写错误。CleanCSS本是为CSS减肥的工具,但也能检查出拼写错误。

  3. 肯定错误发生的位置

  若是错误影响了总体布局,则能够逐个删除div块,直到删除某个div块后显示恢复正常,便可肯定错误发生的位置。

  4. 利用border属性肯定出错元素的布局特性

  使用float属性布局一不当心就会出错。这时为元素添加border属性肯定元素边界,错误缘由即水落石出。

  5. float元素的父元素不能指定clear属性

  MacIE下若是对float的元素的父元素使用clear属性,周围的float元素布局就会混乱。这是MacIE的著名的bug,假若不知道就会走弯路。

  6. float元素务必指定width属性

  不少浏览器在显示未指定widthfloat元素时会有bug。因此无论float元素的内容如何,必定要为其指定width属性。

  另外指定元素时尽可能使用em而不是px作单位。

  7. float元素不能指定marginpadding等属性

  IE在显示指定了marginpaddingfloat元素时有bug。所以不要对float元素指定marginpadding属性(能够在float元素内部嵌套一个div来设置marginpadding)。也可使用hack方法为IE指定特别的值。

  8. float元素的宽度之和要小于100%

  若是float元素的宽度之和正好是100%,某些古老的浏览器将不能正常显示。所以请保证宽度之和小于99%

  9. 是否重设了默认的样式?

  某些属性如marginpadding等,不一样浏览器会有不一样的解释。所以最好在开发前首先将全体的marginpadding设置为0、列表样式设置为none等。

  10. 是否忘记了写DTD?

  若是不管怎样调整不一样浏览器显示结果仍是不同,那么能够检查一下页面开头是否是忘了写下面这行DTD

  〈!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
 

 

腾讯面试对基础比较看重,而后须要你有两三个比较好的项目,一面重视面试者对前端基础的把握,还要手写代码,不过不难,二面部门的leader面,这一面比较难,面试官会对你的项目细节进行深挖,因此说项目要牛逼一点,最后还会有一道逻辑题(我没有答上来),三面是HR面,若是你想进大公司的话,下面这些技术是确定要掌握的:html5,css3,JavaScript,略懂一点jQuery源码,Node.js,express,mongoose,数据库mongodb。大公司问的核心在于JavaScript。若是下面的知识点你均可以打上来,恭喜你拿下bat不是问题--

更多详细的前端优化请看前端优化:雅虎35或者前端性能优化----yahoo前端性能团队总结的35条黄金定律

HTML、CSS、JavaScript、移动Web开发、调试、HTTP网络知识

文章很长,此处列出大纲,欢迎你们戳前端校招知识点总结查看全文。

本博客大部分数据来源于各大网站的收集整理改编,主要有GitHub(https://github.com)、题来了(http://www.tilaile.com)、牛客网(https://www.nowcoder.com)、一些英文网站,还有一些论坛、博客、IT招聘等网站。还有少部分数据时来源于本人本身整理添加,添加的内容主要是本人认为比较重要知识点,面试时可能会问到的题目,本身整理题目以及参考答案,答案仅供参考,答案可能存有错误或不足,欢迎你们批评指正或补充更好的答案。好让我及时更正,以避免误导其余人。本博客仅提供参考做用。

以上就是本文的所有内容,但愿对你们的学习有所帮助,也但愿你们多多支持脚本之家。

 

 

题目:一个数组“var meta = [1,2,[3,4,[5]],6,[7,[8,9,[10,11,[12]]]]];”,经过递归的方式依次取出这个数组中的数据。

  • 最简单的方式是设定一个函数,传入这个数组,而后判断其中的值是否为数组。
  • 若是为数组,那么继续调用当前的函数,将这个值传入。
  • 若是不为数组,那么就将值return出来,或者push到某个新数组里。

function fillArray(array,result){ 

    var count = array.length;

    var i = 0;

    for(;i<count;++i){ 

        var temp = array[i];

        if(Array.isArray(temp)){

            fillArray(temp,result);

    } else {       

                result.push(array[i]);

    }

  }

}

var result = [];

fillArray(meta,result);

// 递归的结果console.log('递归处理的结果:',result);

  • 显然上述不是一个最优的答案,这个时候,面试官想要看的可能就是你主动思考的能力了,想想,这个是否是能够优化一下,若是能够怎么办?
  • 咱们先从结果来看:
  • 若是一个结果已经肯定,在第二次调用时是否能够从内存里直接读,而不须要再缓存?
  • 设计好一个简单的Key/Value缓存
  • 在循环时,增长一个条件判断,若是缓存中存在,那么直接从缓存读取结果

var resultMap = {};

function fillArrayII(array,result){

    var count = array.length;

    var i = 0;

    if (!count){

        return [];

    }

        for(;i<count;++i){

            var temp = array[i];

            var g = resultMap[temp];

            if(g){

                result.push(g);

    } else {

                if (Array.isArray(temp)){

                    fillArrayII(temp,result);

        } else {

                        result.push(temp);

        }

    }

    }

}

var date1 = new Date();

var time1 = date1.getTime();

var r = [];

fillArrayII(meta,r);

var date2 = new Date();

var time2 = date2.getTime();

console.log('no cache time : ',time2 - time1);

var date3 = new Date();

var time3 = date3.getTime();

var f = [];

fillArrayII(meta,f);

var date4 = new Date();

var time4 = date4.getTime();

console.log('cache time : ',time4 - time3);

你们能够看一下优化的结果:

无缓存的420ms,而缓存过的393ms,足足提高了27ms,虽然这个空间不大,可是若是当递归足够深时,能够节省大量的时间。不过缓存,须要对数据结构有必定的设计,这是一个前提。

那么除了缓存以外,最经常使用的优化方式应该算尾递归了,通俗易懂的说,尾递归就是把计算结果放到调用者函数的尾部,顶部的返回值越简单越好,而尾巴的返回多是愈来愈复杂的计算。

这里只是一个“抛砖引玉”,通常正常状况下递归均可以用迭代来代替。若是你在写完递归以后,再写一个迭代的代替方案,并加以说明,我想你应该会受到青睐。

谈谈面试与面试题

原由,某日电话面试以后满心郁闷的我发了两条微博:

面试的时候问个css的position属性能刷掉一半的人这是啥状况……

其实这问题我原本打算的是能够顺着一路扯到normal flow、containing block、bfc、margin collapse,base line,writing mode,bidi,这样一路问下去的,奈何第一个问题(亲我真的只问了position有哪些取值和行为啊)就悲剧了……

其中的一些回复让我认为很是有必要写这样一篇文章来讲说面试和面试题的事情。

关于题目

什么样的面试题是好的?我认为有三点衡量指标:

区分度

深度

覆盖范围

是的,请注意我并无使用“难度”这个词,由于这三个指标都与难度有关系。

css的position属性有哪些取值,它们的行为是什么?

这个题目几乎是我每次必问的,由于这个题区分度、深度和覆盖范围都很高。这个题的答案能够分红不一样的层级:

  • position属性经常使用的取值static、relative以及absolute和它们的基本行为是每一个前端都应该掌握的。这包括relative和absolute的定位原点。
  • fixed旧版本IE不支持,可是一个对技术有热情的工程师也是应该了解的。
  • 有过研究工程师能够知道absolute的containing block计算方式跟正常流不一样,固然若是没读过标准的话,表述方式不必定是这样。
  • 对CSS布局有深刻研究的工程师会知道position跟display、margin collapse、overflow、float这些特性相互叠加后的行为。

区分度可让题目能够适用于入门级到专家级的各类面试者,深度能够保证有深度研究的面试者能够展现他们的才能,覆盖范围能够有效地了解面试者擅长的方向。

网上抱怨面试官以出难题展现本身技术为乐的声音颇多,虽然不排除这样的可能性,可是我认为这样抱怨的人多半本身没有作过面试官,实际上多数公司面试每每任务量很大,几乎不会有什么玩乐的心情。题目偏、难、怪的状况多半多是面试官不太负责任随便从网上搜索"大公司面试题"来的——图省事是个比戏弄靠谱的多的动机。

关于过程

比起笔试,面试的最大好处是能够根据面试者的水平调节题目的难度,即便一个题目中,也能够经过提示和追问来调整难度。

通常来讲,当面试者遇到困难或者长时间思考时,面试官应当给予提示来节约时间,而当面试者给出的答案不够具体或者回答得过于轻松时,能够适当追问。在个人微博中

其实这问题我原本打算的是能够顺着一路扯到normal flow、containing block、bfc、margin collapse,base line,writing mode,bidi,这样一路问下去的,奈何第一个问题(亲我真的只问了position有哪些取值和行为啊)就悲剧了……

我提到了一些我准备的追问内容,这些知识点从前到后愈来愈细致,也愈来愈偏,从最开始的box排布,到后面的行模型,再到文本排版,基本上是网页排版从总体到细节的顺序。

当面试者前面回答的答案足够完美,我就会进行追问,确保问到我开始不懂或者面试者开始不懂为止,这样能够大大延展题目的区分度和深度。

关于评判

首先我但愿表达的一点,就是面试的评判跟学校里的考试彻底是两回事,太多的人把面试当作考试而把注意力放在题目上。

事实上面试中未必是全部题目全都回答"正确"就必定会经过或者较高评价。面试是面试官和面试者双方"挖掘与展现才能"的过程,参考前面提到的面试过程,所有回答正确的状况极可能是由于面试官不感兴趣懒得追问。

对于面试官而言,基本评判原则就是"我要不要这我的作个人同事?",多数状况下,这个答案会很是清楚。一些题目是充分的,也就是"回答对了说明这我的具备能够依靠的才能",一些题目则是必要的,也就是"回答错了说明这我的没法胜任咱们的工做"。

在position一题的评判上,我通常认为可以答对static、relative以及absolute就已经能够达到必要标准。而由于CSS layout是我最擅长的部分(虽然仍是很烂……),又考虑到偏差,当面试者能回答80%以上的追问,我就会认为面试者水平远高于我,在工做中可以做为CSS方面的专家来依靠。

我在面试中之因此感到沮丧,是由于大部分的人仅仅在position的基本行为上就已经错了,多数人的回答都是笼统的"绝对定位"和"相对定位"两个词,问及具体行为我获得了五花八门的答案,甚至有看上去经历至关资深的工程师把absolute和relative搞混的。

而微博上一些人说"属性能够google搜索"则更离谱,position在CSS布局中是至关基础的知识,对它的行为理解深度实际上表明了一个工程师对于CSS布局系统的理解,这个理解须要长时期的学习,绝对不是能够临时google得来的。正如同考人英语,如果不认识visibility尚能够解释说确实没怎么用过,而不会写英文字母v则说明这我的根本没学过英语。

关于题目类型

面试题有不少种类型:项目细节、知识型问题,开放性问题,案例问题以及传说中的Funny Question。事实上网络上流传甚广的"大公司面试题",每每是Funny Question,而它们真正的应用,在任何公司都是很是少见和谨慎的。

一些人提到,面试应该更注重“考察能力”。是的,我认为

web前端工程师的竞争力 = web前端知识 + 能力

能力 = 编程能力 + 工程能力 + 架构能力

这其中不包括所谓的学习能力,由于我认为学习能力是经过已有知识来体现的,若是一个具备超强学习能力的人来应聘web前端工程师可是他具备如此强的学习能力却连position这么重要的属性都没学会,那是否是下一步该要求这人附上证实本身没有精神疾病的诊断书?

工程能力和架构能力通常针对层级较高的工程师,因此通常来说所谓能力考察就是编程能力,而后呢,编程能力通常考查方式就是案例问题,也就是传说中的——“算!法!题!”(固然我曾提到,它们与其说是算法题,不如说是稍微复杂点的小程序,它们之因此看上去不太有用是由于出题的人为了不理解麻烦剥掉了实际的业务场景,毕竟各个公司的业务都不是一句两句能够讲清楚的)。

因此我估计教育我"考察能力"的各位,真的碰上这种题要骂死我了……

在题目类型的使用上,电话面试中我会以项目细节和知识性问题为主,通常当面面试中会使用案例问题(写程序或者架构case),开放性问题和Funny Question几乎不用。

考察能力的问题,通常我会控制在一道左右,最多不会超过两道题,由于这种问题每每很是消耗精力,过多会引发面试者抱怨。(固然有的公司专门这么干,同一天三轮技术面一轮AA面,每一轮都有算法题——这公司就是万恶的M$哈哈哈)

PS. position那道题目,我是不怕漏的,若是你要认真准备这道题的答案的话,基本等于学好了CSS的布局了,有兴趣的同窗能够写篇文章而且发送简历到个人邮箱csf178 [at] gmail.com 写得好的话电话面试能够省了哦~ 阿里无线前端期待你的加入!

 

 

基本的java、android、网络知识

项目中的难点、解决办法

一些基本的java、网络知识,

webview播放视频,退出还有声音是没回收,内存泄漏的缘由

类锁、对象锁、方法锁的。

布局优化

recyclerview和listview的不一样,他们的缓存机制

6.0,7.0的特性

事件传递机制

自定义view

挑两个framework说一说

启动模式

有序广播

pms的做用

静态广播放在pms里么,动态广播呢?

如何停掉静态广播

发广播的时候,先查静态注册仍是动态注册

如何重启app

如何清掉全部的activity,进行管理的activity,大小容量怎么设计中间有个activity太大怎么办

内存泄露怎么检查,要是定位到framework,怎么确认

如何让activity不被外部访问到

你日常用shell干啥

一些linux命令

view如何更新

 

直到有一天,个人室友,之前作过招聘,他给我分享了一个小技巧。他让我把简历直接发到那个公司员工的邮箱里,无论这我的是什么身份,只要这我的会去读邮件就行。

从那以后,不管我投哪家公司,都会去 LinkedIn(译注:你能够也去微博搜)搜这家公司的开发人员或者 HR,把简历直接发送给那我的。大部分小公司的邮箱格式是「姓名全拼@公司名.com」,对于大公司格式可就是「花名.姓名@公司名.com」。我还用到了 Rapportive 来保证邮箱地址的准确性。

结果很喜人,我发了 150 多封邮件,竟然有三十多封回信。

并且他们给个人建议也很受用。我发现有些公司的 CEO 或者 CTO 会直接回复我,甚至直接面试我。

在 Hack Reactor,咱们被告知不要主动说明本身没经验。在自我介绍的时候,咱们也会不主动提本身在线学习的经历。

为何?由于不这样作的话,面试官会立刻认为咱们是初级开发者,而且咱们打上「没经验」的标签。

记住,你要说服面试官你能作好这份工做。

同时,你要说服你本身,你能作好这份工做。

你能够跟面试官谈论你对编程的热爱,谈你用 React 和 Node 作过的项目,谈你对 JS 的深入理解。

我会去全国各地面试,只要那个公司邀请我去。我会问面试官问题,从中我了解到了不少新的知识,好比技术团队的结构、他们使用了哪些技术、用到了哪些工具,遇到了哪些挑战,以及他们的系统架构。

建议你在面试的时候问面试官一下问题:

大家最近遇到了什么技术挑战?

你在这个公司最满意的一点是什么?

大家的团队是怎样的结构,工做是怎么分配的?

我把每次面试当作一次学习的机会。每次面试都帮助我提升个人表达能力、面试能力和技术能力。每次面试失败都让我找到个人弱项。

 

 

心态准备

找工做和招员工原本就是一个互相选择的过程,没有最优秀,只有最合适。
对于水平很好,有明确目标的人,要作的就是作好准备工做,充分了解目标公司,提升嗅觉,捕捉每一分信息。举个例子,我对A公司很是感兴趣,并且知道每一年都会校招。那么你要作就是关注A公司的招聘官网、微信,加入A公司的招聘社群,同时积极利用已有的校友资源捕捉第一手信息,同时在技术上关注A公司技术团队的微博、博客,及时了解A公司的技术动向,认真研究其使用的技术栈,分析其技术路线和口味。

而对于技术通常,没有明确目标的同窗。要作就是广投简历,积累面试经验,提升被选中的几率。这是很简单的数学题,在一样分子的状况下(技术水平),分母越大(面试公司),结果越好(offer越多)。并且面试原本就是一个打怪升级的过程,经过面试积累经验,补足短板,最后拿到名企offer的案例家常便饭,重要的善于总结,面试没有回答上来的问题,出来快速用手机记下来,下来必定要好好总结,想一想面试官想考察什么,为何这个知识我不知道,是由于知识点太偏,仍是由于属于非知识性的内容,仍是由于不熟练,针对不一样的问题用不一样方式来补足,还有考虑一下若是回答上来了下一步他可能问什么。仍是那句话,从面试官的角度去问本身问题。

 

 

<<剑指offer>>一本书

国内的比较牛的人:淘宝网UED官方博客。灵玉,大成小胖,承玉,拔赤

 

微信

一面:JS手写二分搜索算法

给你一段代码,让你发现其中的问题(考察闭包)

实现一个Lazyman(请自行搜索):使用队列或者promise均可以

用JS代码求出页面上一个元素的最终的background-color,不考虑IE浏览器,不考虑元素float状况。

我直接用了window.getComputedStyle。后来交完以后仔细想一想,好像确实有不少状况没考虑到,例如当这个元素的背景色为透明时,它最终的背景色应该为其父元素的背景色。

二面:项目

三面:(1)请问前端优化的手段有哪些?为何这样作?有没有可能让JS下载解析不阻塞DOM树构建?有什么区别?

CSS文件放在上面,JS文件放在下面。

JS下载解析时会阻塞DOM树的构建,若是放在上面可能会出现白屏的状况。

使用defer或asyn字段。

(2)CSS下载解析会不会阻塞DOM树渲染?优化手段。

CSS-sprit或者将小图使用base64内嵌。

(3)CSS-sprit原理是什么?使用base64虽然会减小请求数,可是会增大文件的大小,以什么为基准去衡量何时使用base64?

(4)HTTPS和HTTP有什么区别? HTTPS增长了SSL层。

(5)画出SSL四次握手过程?

(6)请问SSL握手时有对称加密和非对称加密吗?

(7)优化手段?我答将静态内容推向CDN。

(8)如今CDN不稳,时而工做时而崩溃,我有一个首页如何确保每次都能正常显示该首页? CSS inline

(9)一个柱状图,让我使用html和CSS绘制出来。当时我是用了flex

(10)手写一个快排算法

(11)CSS和JS动画在刚才那个柱状图中表现出快排的整个过程,其实这个动画是见过的,只不过平时使用的都是canvas。

  • 百度
  • 一面:HTML5新特性(新增的标签, API等),如localstorage的用法以及与cookie的区别,如何理解web语义化
  • CSS3新特性,如动画等
  • CSS特性,如position的用法,如何实现居中,bootstrap源代码的理解,盒模型(W3C和IE),flex的使用
  • 前端兼容性处理(CSS hack技术)
  • JS基础,如this用法,new关键字的过程,call与apply的区别,闭包,原型以及JS如何实现继承
  • 前端基础,浏览器缓存,跨域,从输入url到渲染的整个过程,事件(W3C和IE),TCP三次握手过程,如何实现懒加载(跟预加载的区别)

 

(1)一个移动页简历,请问如何实现?我主要是使用REM+Media Query,根据不一样尺寸的设备进行不一样的font-size设置。

(2)REM和EM的区别,若是父元素的font-size也是采用em表示,那么子元素的font-size怎么计算等。

(3)有没有遇到过margin重叠的现象,如何解决?BFC

  • (4)常见的清除浮动的方法有哪些?bootstrap是怎么作的?bootstrap是怎么实现grid系统的?

(5)怎么理解JS模块化?有没有使用过webpack?

  • (6)什么是浅复制和深复制?有什么区别?如何实现Object的深复制?
  • 首先我对这个问题进行分析,Object是一个树形结构,因此我采用递归的方法进行复制。面试官随后提问可否经过循环的方法?我思考了一会,回答说循环的关键在于循环条件的设置,我想借助栈做为循环判断的条件,当栈为空时,循环结束。当时我立马反应过来,由于Object子节点的个数不肯定,可能入栈出栈会存在必定问题。面试官随后问,还有什么东西没有考虑到吗?我想了下说没有。他提示了下,若是出现环怎么办?我愣了一下说不知道。而后他给我个提示说使用深度优先的方法借助栈并不能解决这个问题,而后让我使用宽度优先试试,将代码发给他。面试结束后我发给了他个人代码,各位能够参考下:
  • // 深度优先遍历复制, 借助队列
  • function deepCopy(obj) {
  •     var newObj = {},
  •         srcQueue = [obj], srcVisitedQueue = [],
  •         copyQueue = [newObj], copyVisitedQueue = [];
  •  
  •     while (srcQueue.length > 0) {
  •         var currentSrcElement = srcQueue.shift(),
  •             currentCopyElement = copyQueue.shift();
  •  
  •         srcVisitedQueue.push(currentSrcElement);
  •         copyVisitedQueue.push(currentCopyElement);
  •  
  •         for (var key in currentSrcElement) {
  •             if (typeof currentCopyElement[key] !== 'object') {
  •                 currentCopyElement[key] = currentSrcElement[key];
  •             } else {
  •                 // 有环的状况
  •                 var index = srcVisitedQueue.indexOf(currentSrcElement[key]);
  •                 if (index >= 0) {
  •                     currentCopyElement[key] = copyVisitedQueue[index];
  •                 } else {
  •                     srcQueue.push(currentSrcElement[key]);
  •                     currentCopyElement[key] = {};
  •                     copyQueue.push(currentCopyElement[key]);
  •                 }
  •             }
  •         }
  •     }
  •  
  •     return newObj;
  • }
  •  
  • // Test case
  • // 1. 只含有简单类型的Object{a: 1, b:2} => pass
  • // 2. 简单类型和复杂类型同时存在的状况下的Object => pass:
  • // var obj1 = {
  • //     a: 1,
  • //     b: 2,
  • //     c: {
  • //         d: 3,
  • //         e: {
  • //             f: 4,
  • //             g: 5
  • //         }
  • //     },
  • //     h: {
  • //         i: 6,
  • //         j: 7
  • //     }
  • // };
  • // 3. 有环的状况下的Object => pass:
  • // var obj1 = {
  • //     a: 1,
  • //     b: 2,
  • //     c: obj1
  • // };
  •  

 

(7)你推动过公司的模块化,请问是基于什么背景,你是如何推动的,遇到过什么问题等等。

三面:

(8)是否看过Jquery的源代码怎么进行Object的深复制的?我答看过,是采用递归

(9)什么Jquery对环的考虑只判断当前节点是否为根节点?

(10)如今百度有许多部门,每一个部门都有本身的组件库,实现的功能基本相同,但有的用的是原生的JS,有的是使用JQuery,有的是使用React,如今想进行统一,如何解决?我说采用重构,而后他问了问我重构的思路有哪些。

(11)百度有些项目在线上已经好久了,代码比较陈旧,若是你去重构可能会对线上的版本有冲击,你怎么解决这个问题?我答小幅度重构,而后进行回滚等。

(12)如今有一个很急的项目,须要一个组件,恰好网上提供的有该组件,你是如何屏蔽该组件与现有项目的差别? 个人思路是写一个wrapper屏蔽掉该组件与现有库的差别。

(13)若是引入该组件必须引入一个新的库,如React你该如何选择?引入的话有什么好处坏处?我提供了本身的一些见解。

阿里巴巴UC

一面:

(1)对移动前端的了解?我讲了讲移动前端布局,JS方面,性能优化等,

(2)他问我有什么问题吗?我问请问你如何理解前端以及你是如何从pc端转入移动端?他站在黑板上给我讲了20多分钟。包括hybrid技术以及如今流行的RN和Weex,以及阿里如今的业务使用的一些技术以及为何使用等。

二面

(3)一些前端优化的方法,以及日常遇到过最大的困难是什么,如何解决。有什么难忘的事等。

(4)问我有什么问题?我说为何你不问我前端的基础知识也不问我前端的项目经验?

惟品会

前两面都是基础面跟百度大概相似。可是它重点问了我web安全的一些知识,xss和csrf。问我如何解决相关的问题?xss的话主要使用转义,csrf的话项目中我主要使用的是jwt(javascript web token)。而后针对jwt细节问了我20多分钟。

第三面是一个产品经理面,说虽然是技术可是仍是要了解产品才行。问我有没有用过惟品会app,我说没有。而后问我知道惟品会是干什么的吗?我说一家专作特卖的网站。而后给我一个惟品会的页面问我有什么建议,而后我讲了20多分钟。

第四面是技术总监。你前端基础各方面比较好,可是惟品会的业务性很是强,我没有任何电商方面的经验等,让我过来从头作起之类的。

腾讯:

主要问的有zepto库的使用,移动端布局,优化,JS的一些基础还有localstorage等。重点还问了一下我是如何在项目中开展测试的(单元测试和e2e测试)。ng