首页 > 字节跳动-飞书-一面
头像
洋芋片炒土豆丝
编辑于 2020-07-01 18:16
+ 关注

字节跳动-飞书-一面

一面:
1、一段自我介绍
2、了解 utf8吗?utf8有几位?英文在 utf8中占几位?utf8和 utf16有什么区别?(utf8四连把我给问蒙了,出师不利)
3、介绍一下项目,简历中的项目,简单介绍了一下功能。
4、问了 python中的进程和线程?python中线程有什么缺点吗(全局锁)?
5、既然 python中的线程有全局锁是不是没有啥用(不是,虽然有全局锁但是对于一些 I/O操作较大的应用影响不大,因为他们并不需要真正的并行运算)?
6、讲一下进程和线程的应用场景(多线程爬虫)。
7、进程和线程有什么区别(进程调度和切换的开销大于线程,同一个进程的线程共享数据和堆栈)
8、项目中用到了 redis,能讲讲 redis的作用吗?
    一共两个项目用到了 redis:
    项目一:redis做倒排索引提升查询效率。又问怎么实现的,讲了原理(就是最简单的倒排索引加上优先级计算,优先级计算也很简单,根据词语的命中个数来计算,没有用 TDF)
    项目二:redis做排行榜。实现:两个有序集合,查询的时候查询第一个有序集合,修改的时候修改第二个有序集合。每隔 5分钟用第二个有序集合覆盖第一个有序集合。解释采用这样的策略的原因,排行榜需要翻页,实时更新的话翻页过程中会出错,参考了 QQ音乐排行榜 1小时更新一次的的设定。
        q:这样翻页的时候不是还是会出错吗?
        a:是的,但是这样出错的概率会大大降低,对用户影响较小。
        q:有没有能够实时更新的排行榜解决方案?
        a:如果需要分页的话,实时的排行榜无法避开分页的问题,只查询前 100名这种应该可以实现。
        q:那你讲一讲实现一个实时前 100名的排行榜的思路,我要用户排名更新的时候可以立即收到通知。
        a:创建一个线程在 redis中维护一个有序集合,每次查询返回前 100个,集合发生改变的时候线程创建通知线程向用户发送通知。
        q:通过什么来进行通信?
        a:如果客户端是浏览器或者小程序的话可以使用 websocket,服务器端可以使用 django-channel。这里提到了连接数量的问题(给自己挖了个坑,后面问了 Django如何处理并发连接,没有回答上来)。
        q:每次发送通知是发送所有数据吗?
        a:数据量较小的话可以直接发送全部数据,数据量较大的话可以只发送改变(插入和交换)。
9、算法题:一个 n*n的广场上有 n*n个格子,每个格子的情况可能是:0(空格子)、1(有只健康的小猪)、2(有只感染的小猪)。每只感染的小猪每天可以感染它上下左右的小猪,问最少需要多少天所有的小猪被感染,如果不能感染所有的小猪返回 -1。

算法题不是很难,但是我一开始没有找到思路,面试官提示了一下,最后还是解出来了。解法是:用一个数组存储要遍历的小猪的坐标(就是前一天被感染的小猪),遍历每个坐标计算下一轮要遍历的坐标,更新坐标数组在,每一次遍历就相当于过了 1天,直到坐标数组为空。最后再检查矩阵中有没有为 1的位置,有的话返回 -1,没有就返回前面计算出来的天数。

面完算法题就结束面试了,最后提问环节:
q:我看岗位描述上飞书的后台有使用 python,但是 python比较慢,用来做后台是怎么解决这个问题的。
a:前几年全换成 go了。

字节效率真高,就在写这个帖子的时候,hr小姐姐打电话预约二面,希望一切顺利

最后小小地吐槽一下牛客的编辑功能,编辑的时候之前的缩进全部没了。

更多模拟面试

全部评论

(8) 回帖
加载中...
话题 回帖

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐