前几天在拉勾投的简历,今天下午下班后去面试,总的感觉是面试很专业很基础,自己太不专业了,大三到现在也只是自己写写小项目自己玩,真正聊技术的话,一点都不专业,专业名词没几个能说的上来,想到之前工作中用到的很多 python 知识点自己也是说不上来,只是会用,后来看到别人的教程,才知道自己一直用的东东原来是有专业名词的。

下面是面试的题目:

  1. js 知识点考察:
function fun(){
console.log(this)
}
fun()
b = new fun()
console.log(b)

(1) 以上结果分别是什么?

第一个 this 指向全局作用域,所以打印的应该是 window,这个我当时一时没反应过来,知道是指向全局作用域,但是具体打印出来的是什么,没反应过来。

第二个 b 是 fun 函数的实例,继承了 fun 函数的所有特性,但是由于没有给这个实例传参,所以结果是 undefined,这个我知道打印出来的是 undefined,也知道原因,但是没有按着面试官走,没把实例这个名词说出来。

var a = 1
function fun(){
console.log(a)
if(true){
var a = 2
console.log(a)
}
console.log(a)
}
fun()
console.log(a)

(2) 以上代码打印出来的分别是什么?为什么?

第一个 a 打印出来是 undefined,因为作用域内不存在这个参数,默认返回 undefined。第二个 a 打印出来是 2,因为在 if 内申明了局部变量 a 并把 2 赋值给了这个参数。第三个 a 打印出来同样是 2,因为这条语句在 if 作用域的下面,代码树是往下延伸的。第四个 a 打印出来是 a,因为 a=1 属于这个作用域,而函数里的 a 它是共享不到的,要共享函数内的参数的话,可以用闭包。

(3)第三个问题没太懂,问的是 function 除了 argument 外还有哪些内置 xx?这个我没听清的用 xx 表示吧,你们懂的告诉我一声。

  1. 算法知识点考察

(1)说说快排,这个我当时有点蒙圈了,因为好久之前接触的东东,都忘了,回来后补充解释如下:

快速排序是从目标数据中任意选取一个数据,以这个数据的值为分割点,把目标数据分割为两部分。这样循环操作下去进行排序。这个在代码中用的挺多的,但是我没记住它的学名,没想起来。这个解释摘自我大二时候读《写给大家的算法书》的算法基础部分的笔记。

(2)说说冒泡排序,同上,没打出来,回来后补充解释如下:

冒泡排序是对比相邻的两个数据,根据大小关系调整两个数据的顺序。同样摘自大二的阅读笔记。

除了这些还有一些零零碎碎的知识点,我就不一一罗列了,列出这几个典型的吧,可能面试经验比较少,很多东西都准备不充分,背着自己的电脑就过去面试了,面试问到项目就拿出了自己的一些小项目出来,也比较随意,结果是其次,最主要的是面试挺欢乐,知道了自己在前端算法这一块还很薄弱,接下来得好好学学数据结构和算法了。