前端面试

面试考评

面试准备

候选人考评点

具体考评内容项
  1. 技术热情。我面试人的时候一般很少用“提问式面试”,不会刻意提一个技术问题让你去解决然后搞得对方紧张兮兮,我主要靠引导,会引导出一些技术话题来,例如一些热门话题,一些技术热点难点,一些新工具。
  2. 做事态度。今天中午我还跟朋友出去吃饭的时候谈起这个话题。创业公司有时候真的就是个坑,需要面对很多不如意,例如薪资、福利或者是业务流程之类的问题,面对这些问题你的态度是怎样的?为什么离开上一个公司?
  3. 学习总结能力。例如谈到某个技术的时候,我会问一下,学这个是为了做什么?什么时候学的,如何学习的。又或是问一些“平常看什么书?什么时候看?从什么渠道了解最新的知识?
  4. 分析解决问题的能力。问他在前公司做过什么项目,如何做的,使用了什么技术,是怎么考虑的,遇到了什么问题如何解决的之类的问题。
  5. 技术经验和成长潜力。包括 技术广度和深度方面的经验,项目管理经验,架构经验工具化经验开发流程经验,协调管理经验。我一般会给应届生讲一些知识点,有的面试者会充满兴趣,问这问那,或者试着自己给出解决方案。遇到从未接触过的需求或无法解决的问题时怎么处理

知识点

html

  1. html5新特性
  2. websocket理解和使用
  3. 浏览器模型常见对象
    window、history、xhr、location
  4. Cookie、sessionStorage、localStorage的理解和区别
  5. 页面dom渲染过程,重流和重绘
  6. 文件上传实现

css

  1. 行内元素与块级元素区别
  2. flex布局
  3. css预处理器less、sass
  4. css3新特性
  5. 伪元素before和after的用法
  6. display、float、position的关系
  7. 盒模型
  8. 垂直居中方法:
    margin 0 auto
    margin和绝对定位计算
    flex布局
  9. 上下两个div设置margin为20px,两个div的间距是多少,为什么

js

  1. es6新特性
  2. promise异步和async/await
  3. 浅拷贝和深拷贝的理解,实现深拷贝
  4. dom事件流,事件委托
  5. 跨域的理解和解决方法
  6. Array对象的一些常用方法
  7. js数据类型:undefined、null、boolean、number、string、object、function、array
  8. jquery链式调用实现原理
  9. 防抖节流,如:
    监听一个输入框的文本变化,变化时调用接口,如何优化实现当输入停顿一段时间才调用接口
  10. 如何判断一个变量是数组类型还是对象类型
  11. for in for of forEach map的区别
  12. 模块机制,amd和commonjs
  13. this对象和bind,call函数使用
  14. proptype原型对象的理解,实现一个方法,传入一个string类型的参数,然后将string的每个字符间加个空格返回
spacify('hello world') // => 'h e l l o  w o r l d'
'hello world'.spacify();
String.prototype.spacify = function(){
  return this.split('').join(' ');
};
  1. 函数申明与函数表达式的区别
// 函数声明
    function funDeclaration(type){
        return type==="Declaration";
    }
// 函数表达式
    var funExpression = function(type){
        return type==="Expression";
    }

Javascript 中函数声明和函数表达式是存在区别的,函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用。而函数表达式的值是在JS运行时确定,并且在表达式赋值完成后,该函数才能调用。

  1. 考察侯选人是否理解参数(arguments)对象。定义log,然后它可以代理console.log的方法。
function log(msg) {
  console.log(msg);
}
function log(){
  console.log.apply(console, arguments);
};
  1. 上下文的理解,如何确保可以访问到count
var User = {
  count: 1,
  getCount: function() {
    return this.count;
  }
};

console.log(User.getCount());
var func = User.getCount;
console.log(func());
// 1和undefined。

var func = User.getCount.bind(User);
console.log(func());
  1. 函数式编程,实现函数multi(2)(3)(4)=24
function multi(n){
  var fn = function(x) {
    return multi(n * x);
  };
  fn.valueOf = function() {
    return n;
  };
  return fn;
}
multi(1)(2)(3)(4) == 24; // true

vue

  1. vuex的原理
  2. vue-router传参和监听变化
  3. 过滤器和指令的使用,是否使用过全局过滤器
  4. 组件通信方式了解几种?
    props传递
    event.emit,on
    bus组件
    vuex
  5. 计算属性compute和侦听器watch,可否修改compute里的值,怎么改
  6. slot插槽,slot-scope使用
  7. this.$nextTick的用法

react

  1. 创建组件的方式
    createClass、stateless function、extend Component/PureComponent
  2. redux工作流程
  3. 组件生命周期
  4. react-router-v4理解
  5. 高阶组件

webpack

  1. 介绍一下webpack的工作原理
  2. 简单介绍一下webpack里面的配置项
  3. 使用过哪些webpack的插件和loader
  4. webpack中如何配置实现多入口页面

小程序

  1. 谈谈你对小程序开发的理解
  2. 小程序点击按钮传参是怎么做的
  3. 小程序开发中是否用了框架,ui组件样式怎么写的

业务相关

  1. 项目文件结构,代码规范
  2. 权限控制如何实现,页面级和按钮功能级
  3. 登录流程
  4. 项目中有没有遇到特别困难的问题,是如何解决的
  5. 是否了解nodejs,是否使用过npm发布组件,描述过程

其他

  1. 前端性能优化
  2. 有哪些好的习惯或方法可以提高工作效率
  3. 前端开发的理解,职业规划,发展方向
  4. 开发中遇到过什么难点问题,项目上有什么对自己提升很大的心得体会
  5. 分享一个最近学习的新技术,平时是通过哪些途径来提升自己的技术水平
  6. 是否有封装过自己的函数库或组建
  7. 介绍一下上个团队的情况,自己在其中担当什么角色
  8. 为什么考虑离职,对公司或团队有什么改进建议或看法
  9. 你认为前端开发工程师的核心价值体现在哪里
  10. 是否采用前后端分离,前后端如何协调定义数据模型
  11. 工作中使用那些开发工具,git的使用
  12. 平时是否写博客,有没有给团队做过技术分享,有什么心得
  13. 你认为前端开发工程师的核心价值体现在哪里
  14. 是否采用前后端分离,前后端如何协调定义数据模型
  15. 工作中使用那些开发工具,git的使用
  16. 分享你最近在学习或想了解的新技术,你学习新知识的途径有哪些
  17. 你为什么从上家公司离职呢,对上家公司有什么不满意的地方
  18. 浏览器调试工具经常用到那些模块
    console、element、sources、network、application(storage、cache)
  19. 封装一个时间轴的组件


    image.png
// 线条样式
.timeline-item-line {
    position: absolute;
    left: 4px;
    top: .75em;
    height: 100%;
    border-left: 2px solid #e8e8e8;
}
// 圆圈项样式
.timeline-item-circle {
    position: absolute;
    width: 10px;
    height: 10px;
    background-color: #fff;
    border-radius: 100px;
    border: 2px solid transparent;
}
// 文本内容样式
.timeline-item-content {
    margin: 0 0 0 18px;
    position: relative;
    top: -6px;
}
  1. 封装一个弹出框组件
// 遮罩层样式
.overlay {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  background: rgba(0,0,0,0.8);
}

// 弹窗内容样式
.overlay article {
  position: absolute;
  left: 50%;
  top: 50%;
  margin: -200px 0 0 -200px;
  width: 400px;
  height: 400px;
}

// 点击遮罩关闭弹窗,点击弹出内容冒泡导致关闭,防止事件冒泡
$('.overlay').click(function(e){
  if (e.target == e.currentTarget)
    closeOverlay();
});

笔试编程

  1. 给定一个数组,编写一个函数去除重复元素,如:
    输入:arr=[1,2,3,2,3,4,5,2,3]
    输出:uniq(arr) = [1,2,3,4,5]

  2. 实现一个flatten函数,将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。如:

flatten([1,[2],[3,[4]]]) = [1,2,3,4]
  1. 实现一个find函数,模拟原生的find函数,find(list, predicate)。

在list中逐项查找,返回第一个通过predicate迭代函数真值检测的元素值,如果没有元素通过检测则返回 undefined。 如果找到匹配的元素,函数将立即返回,不会遍历整个list。

var even = find([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
// 2
  1. 实现一个parseQuery函数,能够解析location的search字符串(不包括'?')。

输入一个search,输出一个object,同名参数则是会成为数组。

let str = "http://localhost:3000/index.html?phone=12345678901&pwd=123123";
var result = parseQuery(str);
console.log(result) // { phone: '12345678901', pwd:'123123' }
  1. 将一个扁平数组转换成树状结构
function toChildrenStruct(pidArray, expandLevel) {
    // 将pid结构的树型数据转换成children结构
    const childrenArray = []
    const expandedItems = []
    const itemMap = {}
    if (!pidArray) {
      return childrenArray
    } else {
      for (const item of pidArray) {
        item.key = item.id
        item.value = item.id
        item.label = item.name
        itemMap[item.id] = item
      }
      for (const item of pidArray) {
        const parent = itemMap[item.parentId]
        if (typeof parent === 'undefined') {
          // pid不存在,是顶级元素
          childrenArray.push(item)
        } else {
          if (typeof parent.children === 'undefined') {
            parent.children = []
            if (expandLevel === -1) expandedItems.push(parent.id)
          }
          parent.children.push(item)
        }
      }
    }
    return childrenArray
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容