杭州某中厂前端面试题总结,失败乃成功之母

1、重启nginx需要什么权限

linux的文件目录有所有者和组的概念,对一个目录来说所有人分为三种,ugo,u为此目录拥有者,g为group,o为other,还有一个a,包含以上三者。若是目录的所有者,或者此时的用户在此目录的用户组内,则有该用户组所拥有的所有权限。

一些常识

十位权限含义 第一位d代表目录-代表文件,其后分别为ugo的三种权限,drwxrwxrwx 代表此目录所有人皆可读写执行。

chmod u=rw,g=---,o--- // 给user读写权限,group内的人和其他人没有任何权限
chmod a=rwx // 给所有人读写执行权限
chmod 777 file // 其实 就是 chmod a=rwx file  --> 4 + 2 + 1
chmod u+x file // 就是给拥有者执行权限
// 若文件没有x权限,仍可通过有权限的其他,比如sh,node,python命令来执行某个文件,若其有x权限,那么直接在文件中标明要使用的bash命令,然后 ./文件名 执行即可

每个文件都有rwx(read/writer/excute)读写操作权限,想要修改一个nginx配置文件并执行,看如何修改,若是直接删除替换,则仅需rx权限,若通过vim这种,还需要关注文件内容,还需额外r读权限。(另外还有一个 - 即代表无权限),*nginx的执行脚本所在的bin目录一般只有root有权限。*所以应当是root权限吧。

2、单核机器多进程构建时是否有效

答案是无效的,而且效率会变低。。。

webpack使用happypack开启多进程构建,在单核机器上并没有效果。单核cpu从宏观上看是为多进程服务的,实际上是每个进程轮流使用一段时间片,即便开1w个进程速度也不会变快,而且还有进程的上下文切换开销,速度反而会变慢,而且一旦其中有一个进程计算量大卡住,其他进程也会进入假死状态,无法继续执行任务。

机(智)智(障)的我答了有效。

3、实现类似node的EventEmitter模块

拿到面试官的电脑,我已经满脑子的骚操作决定扳回一局,结果

// 一顿分析猛如虎,一看战绩0杠5
class event {
  constuctor () {
    this.eventLib = {}
  }
  on (name, callback) {
    if (Array.isArray(this.eventLib[name])) {
      this.eventLib[name].push(callback)
    } else {
      this.eventLib[name] = [callback]
    }
  }
  emit (name) {
    if (!this.eventLib[name]) reutrn
    for (let cb of this.eventLib[name] ) {
      cb()
    }
  }
}
let e = new event()
e.on('take', function () { console.log(123) })
e.on('take', async function () {
  await new Promsie (r => {
     console.log(456) 
  })
})
e.emit('task')
// 并不知道这样写是不是面试官最后想要的,希望有评论区大神出现

4、SSR相对java直出页面模板速度有变快吗

为了表现的我们做的SSR有用,我毫不犹豫地回答有。

其实java直出页面和node直出是一样的模式,仅仅语言不同(的确老的java直出的模板有些是异步数据,整个页面呈现速度没有node做了页面缓存来得快)但是就模式上来说,单线程的node对上java根本没有优势,速度的确不会有提升,甚至可能变慢(抛弃代码及策略优化的影响),相对java直出模板SSR带来的好处更多的是前后端解耦,在保持SEO,避免白屏的前提下,享受MVVM带来的便捷开发,node减轻服务端压力,减少后端工作量等等...

5、面试总结

少在简历上挖坑。

少吹牛比多看书。

talk is cheap,show me your thinking。

还有一些问题文中没有提及,待总结