字节1 - 2面凉经

1面(1h)

  1. 自我介绍
  2. 项目提到性能优化,简单描述一下
  3. 开发者订阅者模式,手写代码
  4. 。。。中间时间有点久了,还问了一些其他问题
  5. 给定一个n,生成一个n层的二叉树,代码里用到了递归,又问如果n很大,调用栈会保障怎么优化
    • 用尾递归优化
    • 用数组代替递归
  6. 前端性能优化
  7. 前端有一个大文件,读取会爆内存,怎么读取该文件

总结,一面比较简单,题目、问题都比较中规中矩,多刷面经可以简单答出来

2面(1h)

  1. 自我介绍
  2. 登陆的验证方式,token、session、cookie,如何设置本地开发的域和生产同域共享storage(webpack host配置 + windows host修改)
  3. token过期跳转登录页是在哪里做点,这里答了axios响应拦截器,更好的做法应该是在路由里面拦截
  4. 看你简历js是精通(听到这里已经慌了,以后都不敢写精通了,总有自己不知道的),用reduce实现一个map。
  5. Vue Compiler是在哪个阶段执行的
  6. 字符串的String.length是如何计算长度的,考察unicode、utf-8和utf-16编码

大概就是js使用unicode编码字符串,虽然unicode可以表示所有的字符,不会有乱码,其实是牺牲了空间占用4个字节去表示一个字符。ASCLL只需要用一个字节,省空间缺点是对于中文这些字符无法表示。js要兼容所有字符所以采用unicode编码,但是这样字符串占用空间太多了不显示,所以为了节省空间出现了utf-8和utf-16两种编码用来表示unicode编码中的任意字符。节省空间的形式就是某些字符使用一个字节存储,如Ascll编码的字符,其他一些字符使用2、3、4个字节去存储,这样就不需要所有字符都要用4个字节存储的问题。这样因为一个字符占用的字节数是不同的,所以js在底层计算字符长度的时候,还需要根据拿到字符串占用的字节数,去计算到底有几个字符。

  1. 100w的考生分数是0-150分如何排序,考察爆内存的问题,用桶排序解决,同时应该也有想考察计数排序的意图(计数排序也是特殊的桶排序)
  2. 还有问了一些其他的,线程、进程的区别,linux如何设置某个文件的权限

总结:二面难度对于我来说直线上升,js计算字符串长度真的是我的知识盲区,不过也因此了解了unicode、utf-8和utf16的一些知识吧。

你可能感兴趣的:(前端,面经,字节)