面试经历-字节跳动好好学习方向

  |  

前言

总结一下今天的面试,顺便把一些复习计划里没有但又被问到的问题添加一下进去。

49



过程

整个面试过程还是比较坎坷的,之前跟HR小姐姐说好了是今天下午2点面试,然后视频面试链接会通过邮件发给我。但是今天我等到了两点二十多还没有收到邮件。后来HR小姐姐打电话过来问我怎么没有面试,沟通以后她又给我重新发了邮件,还是没有收到。最后是加了HR小姐姐的微信,她微信上发给我的链接。HR小姐姐还是很尽职尽责的,这次的教训也让我明白了,出了问题要主动沟通,而不是等那边询问。链接打开后是牛客网的一个面试网页。网页三个部分,左边的地方是面试官给你写一些问题的地方,比如说写一道算题什么的。中间是你写代码的地方,可以选择语言,而且写的代码面试官那里是实时显示的。不过不太好用,它的缩进写着写着就对不齐了。右边就是视频界面。

今天总共面了两轮,第一轮一个小时左右,第二轮50分钟左右,两轮中间隔了15分钟左右。

下面列举一下两轮面试过程中问道的问题,以及我的回答情况。

一面

一面面试管还是比较侧重前端技术方面的,主要侧重的JS。

面试问题如下:

  1. 自我介绍

  2. 为什么学前端

  3. 让手写实现bind,就是在中间的代码界面直接写。整个过程我写的比较磕磕绊绊,还好面试官人很好,一直在引导我,中间还问了bind,call,apply的区别,最后调用bind的时候还问了this指向的问题。

  4. 如果从url中提取get参数,写一个函数实现,返回一个对象,对象内容就是参数的键值对。我一开始考虑用正则,但是正则语句写不出来,后来就考虑字符串截取,然后用&分隔,再用=分隔。其中还问了get和post的区别

  5. 一道算法题:一个随机字符串中获取最长的没有重复内容的子串。

  6. flex和rem的移动端适配,rem的值跟什么有关(考虑根元素和非根元素)

  7. 对vue的路由管理有什么了解,hash-router和history-router的区别(没答上来)

  8. mvvm的双向绑定原理(没答上来)

  9. 给了一段代码问输出结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function a(a) {	

    console.log(a);

    let a = 2; // var a = 2

    function a() {

    }

    }

    a(1)

    let后面改成var,主要就是函数声明提升和变量声明提升(let和var的区别)的问题,还有就是对参数的隐匿问题。这道题我答错了,我忘了函数声明也会提升,而且优先级比变量高

  10. CSS画三角形

  11. 垂直居中的解决方案(就答上来一种)

问题大概就这些,可能有一些我忘记了。最后面试官问我有没有什么要问的。我问了两个问题

  1. 如何学习CSS这门语言?

    面试官的回答大概就是如果是C端,也就是客户端的,那对CSS的要求就比较高,其它的话掌握基础,主要多学习一些新特性,还有就是不需要过多考虑兼容的问题,有成熟的解决方案,但原理还是要掌握的,最后有兴趣可以多接触CSS和JS动画

  2. 平时会写博客吗?或者如何进行技术分享

    写博客的话看个人,组内有内部论坛一般大家都是在上面写点东西,一些好的也会拿出来分享到社区里(像知乎、掘金之类的)

二面

二面的考察就比较广了,不仅涉及到前端,还包括计算机网络基础,数据结构与算法,操作系统等

二面的问题如下:

  1. 自我介绍

  2. 怎么接触到前端的,为什么学前端

  3. 平时怎么学习前端,通过哪些方法(我说了一下写博客)

  4. 面试官看了一下我的博客,问:你博客的样式怎么实现的(我说不是我自己写的)那其中的前端技术有了解过吗(我说有一定的了解,我做了部分的修改,我打算这个寒假对博客样式进行仿写,但还没开始)

  5. http缓存有了解吗

  6. 跨域有了解吗

  7. 前端框架vue,react这些有了解吗?我说了解过vue。又问那你觉得vue和原生JS有什么区别,我讲了一下mvvm和虚拟DOM

  8. 一道编程题

    1
    2
    3
    4
    5
    6
    7
    写一个sum函数使得
    sum(1,2,3).valueOf() // 6
    sum(1,2)(3).valueOf() // 6
    sum(1)(2,3)(4).valueOf() // 10
    Sum(1)(2,3,4).valueOf() // 10
    sum(1)(2)(3)(4).valueOf() // 10
    都能成功

    一开始我是考虑用函数柯里化的,但是没注意到valueOf,其实这是一道已有题的变种,其实正确的解法是利用剩余参数,闭包和valueOf函数的重写来做的。

  9. 对数据结构队列、栈、树和图有了解吗

  10. 树和图有哪些常见的算法

  11. 算法题:求树的和(广度遍历)

  12. 防抖和节流的概念(要求手写)

  13. 操作系统相关:进程、线程和协程是什么,之间什么区别

  14. 一亿条无序数据如何获得最小的一千条

  15. 对未来在前端上的发展方向有什么考虑(说的数据可视化和WebGL)

后面照例是问你有没有什么要问的,我问了三个

  1. 在实际的项目中是否真的有那么大量的数据需要处理(那道一亿条的问题把我吓到了)

    没有,实际项目中并不需要处理这么大数量的数据,主要就是对后端返回数据的处理

  2. 项目中遇到难点怎么突破

    主要就是通过学习,看技术文档,技术交流,目前来看业内环境都比较完善,一般都有解决方案,项目中没有遇到过真正无法突破的问题

  3. vue和react在项目中的使用情况

    并不要求使用什么框架,其实它们在很多地方是相通的,以后都得会,但是并没有要求你必须会哪个或必须用哪个。在现在国内的话,使用情况差不多一半一半

总结

整个面试过程下来,感觉自己答的不是很好,可能因为比较紧张,加上面试之前还出了问题,心有点乱,很多问题都没考虑清楚,一些问题明明知道的,却想不起来。但是我还是比较实诚的,不会的就只能说不会,想不起来的就是想不起来。编程题写的也不是很好,第一次这样现问现写,来不及思考,只能一边写一边想一边改,犯了很多低级错误。一轮面试结束的时候,面试官说要去反馈一下,我以为我凉了,或者如果有二面的话应该会另外约时间,没想到是接着面。总的来说就是对自己的发挥不满意,现在的话只能等结果。

文章目录
  1. 1. 过程
  2. 2. 一面
  3. 3. 二面
  4. 4. 总结