前言
基于我面试别人和被别人面试的经验,我将整理一份清单。我面别人也好别人面我也好,都有一些总会被提及的问题。要记住,有些公司(比如Google)更加关注你是否可以做出高效的算法设计,所以如果你想去那儿工作,除了我下面列出的问题外,你还需要多加练习!
我会在这里添加或是更新这些问题的答案(欢迎你提出有建设性的需求!)
我将问题分为以下几个大类:
- 概念
- 编码
- 改错
- 系统设计
概念
请用清晰准确的语句解释如下名词(不需要编码):
- 什么是“大O”符号,它被用来表示什么?
- 什么是DOM?
- 什么是时间循环?
- 什么是闭包?
- 原型继承是怎样的,如何工作,它和普通的继承有什么区别?(这个问题没啥意义,但很多面试官都爱问)
this
如何工作,代表什么?- 什么是事件冒泡,它是如何工作的?(这也不是个好问题,同样的很多面试官很喜欢问。)
- 描述几种服务器和客户端之间的通信方式。描述一些网络协议是工作的(IP、TCP、http/S/2、UDP、RTC、DNS等)
- REST是什么, 为什么使用它?
- 网页加载的很慢,诊断原因且修复它。如何进行性能优化,什么时候应该进行性能优化?
- 你用过什么前端框架?它们各有什么优缺点?为什么我们要使用框架?框架能为我们解决什么问题?
编码
实现以下功能:
简单:
isPrime
- 返回true
或false
, 表示输入的数是否为质数:
isPrime(0) // false
isPrime(1) // false
isPrime(17) // true
isPrime(10000000000000) // false
factorial
- 返回给定数的阶乘的值:
factorial(0) // 1
factorial(1) // 1
factorial(6) // 720
fib
-返回斐波那契数列的前n项的和(n为给定) 斐波那契数列.
fib(0) // 0
fib(1) // 1
fib(10) // 55
fib(20) // 6765
isSorted
- 返回true
或false
,表示给定的数组是否被排序过:
isSorted([]) // true
isSorted([-Infinity, -5, 0, 3, 9]) // true
isSorted([3, 9, -3, 10]) // false
filter
- 实现过滤器功能.
filter([1, 2, 3, 4], n => n < 3) // [1, 2]
reduce
- 实现reduce 函数.
reduce([1, 2, 3, 4], (a, b) => a + b, 0) // 10
rever