【信条】手撕吊打面试官系列面试题

20,511 阅读8分钟

必备面试题

js基础

1. 用js打印一个乘法表

这一题面试官考察的是你关于js的打印相关基础api的熟悉程度,以及基本的数学常识,送分题

console.log(`
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
`)

斐波那契数列函数(30以内)

斐波那契数列,就是数列的每一一个数字,都是前两个数字相加的和,常见面试题

斐波那契数列是一个可难可简单的题目,从暴力递归,到动态规划,以及数学地推公式和矩阵优化几个级别,这里要求了30以内,说明对性能要求不高,属于入门送分题级别

const arr = [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269]
var fib = function(N) {
    return arr[N]
}

手写Promise

考点:程序员虽然一直用键盘,但是本身字是门面,整体比较简单,写得好是加分项,写不好也不会把你挂掉

手写防抖节流

和上一题类似的考点,常见面试题 其他手写vue响应式,手写算法等都是类似的

不用sort实现排序,比如输入[3,2,6,9,1,4,8] 返回排序后的数组

考点就是常见的各种排序算法,比如冒泡,快排等,可能还会考察空间时间复杂度等问题,也是众多前端想学算法的重要原因之一:面试要用

function mySort(arr){
	return [1,2,3,6,8,9]
}

请js实现一个permute函数,输入数字123, 打印出这三个数字的全排列

全排列看似简单,实则有一定的难度,需要面试者理解递归和回溯

function permute(){
	return [
    	[1,2,3],
        [1,3,2],
        [2,1,3],
        [2,3,1],
        [3,1,2],
        [3,2,1],
    ]
}

代码笔试题

根据输入的特点,判断输出,主要是如何高效的筛选过滤条件

function findFirstAbsentPositiveNumber(arr) {
  if (arr[0] === 0) {
    if (arr[1] === 1) {
      if (arr[2] === 2) {
        return 5
      }
      return 2
    }
    return 1
  }
  return 1
}

框架和最佳实践

v-show和v-if的区别是啥

这一题主要考察vuejs基础的应用

两个功能差不多,都是控制元素的显示和隐藏,只不过v-show代码更秀一些

特殊说明

这是个娱乐的帖子,没想到会有认真的同学纠错,你的认真让我感觉到了不好意思,万一真的误导了新手就罪过了,这里解释一下,上面的答案统一改为

v-show和v-if主要的区别是一个是show,一个是if,不过根据发音,v-show更秀一些

感谢这位同学的认真,不过你的回答,我也回复一下,既然你是认真写给被人看的,就好好的写,不要这么随意写一个想当然的答案,一些刚入门的,搞不好就看到你写的这个认真的区别,就信以为真了,你这就是不不负责任, 我感觉你就是在某个博客上看到了v-show是display block和none的区别,就信以为真,根本没有看过vue的源码, 根本就是想当然

错误有两点

  1. v-show并不是block和none瞎鸡儿切
  2. v-if并不是在dom上生成这个节点,而是一个三元表达式,控制生成vdom而不是dom

如果你想做到负责任,我觉得这么回答比较好,这也会是这篇文章里唯一一个正经回答

vue2时代

vue的template-explorer,会把v-show和v-if解析成render函数,会有不同的处理逻辑,v-if是变成三元表达式,v-show会解析成directive

v-if很好理解,三元表达式,控制vdom,v-show生成的directive代码可以看这里的解析逻辑 v-show源码 如果你真的那么认真,那一定看过这段代码,可惜你只是以为自己认真

亲,如果不是node, 设置originDisplay是之前的el.style.display呀,可能是flex,可能是inline 还有可能是inline-block等

vue3时代

作为vue3的contributor 这里更有发言权了 第一步看模板解析 如果你真的认真的话, 这里面的_withDirective、 openBlock 512都是啥意思,我就卖个关子,你自己去认真读一下代码吧

在此感谢你的认真,以及吐槽一下你的不认真

项目中的错误处理

来源

考察你的填坑能力,出现诡异bug的时候如何解决的思路更为重要,毕竟不是所有bug都是可预测的,重点是思路要清晰,这对程序员很重要

平时设计过组件吗

这个考察组件化的知识,vue和react都是组件化最热门的框架,我们如果能抽离框架,展示组件化的思想,就是满分答案 我们用很常见的评级rate组件举例

"★★★★★☆☆☆☆☆".slice(5 - rate, 10 - rate);

谈一下你对SPA的理解

SPA一词源于拉丁文“Solus Par Agula”(SPA是指利用水资源结合沐浴、按摩、涂抹保养品和香熏来促进新陈代谢,满足人体视觉、味觉、触觉、嗅觉和思考达到一种身心畅快的享受。 日程程序员工作比较辛苦,尤其肩颈手腕会僵硬,经常SPA会缓解这些症状,前端工程师必备,需要经常去SPA

你平时有阅读源码的习惯吗?

考察你工作饱和程度

回答:没有, 平时主要以项目为主

软技能

工作中和产品开会,需求过于繁琐如何沟通

这一题其实是考察软技能的, 也是程序员进阶和做管理者的必备的技能,如何横向沟通,协调需求带领团队拧成一股绳,并且让产品理解你们这个需求实现的难度

砍需求

部门需求太多,如何协调加班和家庭

这个也是软技能的一部分,想考察你的就是是不是符合 团队的文化,比如加班,还是wlb,理想的回答是不能太卑微的无脑加班,也不能说就是不干

一个摆件 表明中庸的态度, work life balance

你有什么优缺点

我的有点就是基础扎实,实战经验丰富,一个人能干三个人的活,但是只要两个人的工资

缺点就是喜欢吹牛逼 ,比如第一条

能接受加班吗,比如996

这一题主要是考察程序员的法律常识,是一个钓鱼题 遵纪守法的程序员才是好员工,比如劳动法

第四章第三十六条

国家实行劳动者每日工作时间不超过八小时、平均每周工作时间不超过四十四小时的工时制度。

第四章第四十一条

用人单位由于生产经营需要,经与工会和劳动者协商后可以延长工作时间,一般每日不得超过一小时;因特殊原因需要延长工作时间的,在保障劳动者身体健康的条件下延长工作时间每日不得超过三小时,但是每月不得超过三十六小时。

第四章第四十四条

有下列情形之一的,用人单位应当按照下列标准支付高于劳动者正常工作时间工资的工资报酬: (一)安排劳动者延长工作时间的,支付不低于工资的百分之一百五十的工资报酬; (二)休息日安排劳动者工作又不能安排补休的,支付不低于工资的百分之二百的工资报酬; (三)法定休假日安排劳动者工作的,支付不低于工资的百分之三百的工资报酬。

你简历上写的特别能吃苦,有什么具体的体现

只能完成前面80% ,干啥啥不行,能吃第一名

总结

以上回答都是扯淡,如果面试挨揍,请快点跑路 听说关注点赞的都拿到offer了

这些题不能帮你拿到20K的offer,但是帮你跑20KM估计问题不大 yeah