聊一聊字节跳动的面试

来源:https://zhuanlan.zhihu.com/p/82871762

一、算法题

 

一面:

    1.  lc 里最长上升子序列的变形题

    2. 实现输入英文单词联想的功能

二面:

    1.矩阵旋转,要求空间复杂度 O(1)

    2.无序的数组的中位数。要求时间复杂度尽可能的小

二、计算机网络

1. tcp 怎么保证数据包有序

  1. 主机每次发送数据时,TCP 就给每个数据包分配一个序列号并且在一个特定的时间内等待接收主机对分配的这个序列号进行确认。

  2. 如果发送主机在一个特定时间内没有收到接收主机的确认,则发送主机会重传此数据包。

  3. 接收主机利用序列号对接收的数据进行确认,以便检测对方发送的数据是否有丢失或者乱序等。

  4. 接收主机一旦收到已经顺序化的数据,它就将这些数据按正确的顺序重组成数据流并传递到高层进行处理。

2. tcp 和 udp 的异同

TCP 是面向流的可靠数据传输连接
UDP 是面向数据包的不可靠无连接

3. tcp 怎么保证可靠性

差错检验机制,反馈机制,重传机制,引入序号,滑动窗口协议,选择重传

4. tcp 中拥塞避免和流量控制机制

拥塞避免和流量控制这两种机制很像,但是流量控制是由接收方的接受能力也就是接收窗口所决定的,如果接收窗口够大,以动态调整发送窗口的大小调整发送速度
拥塞避免主要由网络情况所限制,网络情况良好,则加大发送速率,网络状态差(冗余 ACK 和丢包)则降低发送速率(慢启动,拥塞控制,快恢复,快重传) RENO,BBR

5. tcp 四次挥手的详细解释

tcp 四次挥手其实可以分为两个阶段
第一:
客户端至服务器的半双工连接关闭
客户端向服务器发送 FIN 信号,进入 FIN_WAIT1 的状态,等待服务器的 ACK 信号
收到服务器的 ACK 后,进入 FIN_WAIT2 
第二:
服务器至客户端的半双工连接关闭
客户端收到服务器发来的 FIN 后,发送 ACK,并进入 TIME_WAIT,等待 2msl,若无异常,则客户端认为连接成功关闭
服务器收到客户端发来的 ACK 后,关闭连接

6. 四次挥手之后为什么还要等待 2msl

MSL 是报文最大生存时间
1 是因为有可能客户端发往服务器的 ACK 丢失,服务器并不知道客户端已经确认关闭,这时候客户端的关闭会导致服务器端无法正常关闭
2 是为了保证连接中的报文都已经传递。假如短时间关闭又重新实现一个 TCP 还连到了同个端口上,旧连接中尚未消失的数据就会被认为是新连接的数据。

7. 浏览器从输入网址到显示出网页的全过程

1. 输入网址或者 ip。
2. 如果输入的是网址,首先要查找域名的 ip 地址
第一步会在浏览器缓存中查找,如果没有,转至查询系统缓存,如果还是没有,发送请求给路由器,路由器首先会在自身的缓存中查找,如果还是没有,向 ips 发出请求,查询 ips 中的 dns 缓存,如果还是没有递归向上查询直至根服务器。
3. 浏览器与 ip 机器之间建立 TCP 连接(三次握手)(HTTP)或者在 TCP 上进一步建立 SSL/TLS 连接 (HTTPS)
接下来就是发送 HTTP 报文啥的了
 GET,POST,DELETE,PUT。

8. 滑动窗口机制的原理和理解

GBN 协议,回退 N 步协议,这是对停等协议的改进,因为停等协议的传输效率非常低下。每次可发送的数据为 N,基数为 base,小于 base 的数据已经发送并且确认,base 是最小的已发送未确认的报文序号。在接收端同样也有一个接收窗口,(解释)GBN采用的是累计确认方式,这时候说一下选择重传机制。再说一下 TCP 中既不是 GBN 也不是 SR ,而是 GBN 和 SR 的综合体。
N 的大小必须报文序列编号的一半,否则接收端对报文的确认可能发生混淆

9. Https 原理和实现

10. cookie 和 session 的区别是什么

由于 HTTP 协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户
cookie 存在本地的上的
session 是存在服务器上的
通俗讲,Cookie 是访问某些网站以后在本地存储的一些网站相关的信息,下次再访问的时候减少一些步骤。另外一个更准确的说法是:Cookies 是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器,是一种在客户端保持状态的方案。
Session 是存在服务器的一种用来存放用户数据的类HashTable结构。
二者都用来保持用户的状态,cookie可更改,对服务器来说并不安全,服务器常见做法有这两种:
1.把 session 加密后放入浏览器的 cookie 中,浏览器重连后将加密的 session 发给服务器
2.cookie 中存储着 session的id,浏览器重连时只需要发送 session_id' 即可

三、操作系统

1. 进程和线程的区别

进程就是保存上下文切换的程序执行时间总和 = CPU 加载上下文 + CPU 执行 + CPU 保存上下文

2. 线程是什么呢?

进程的颗粒度太大,每次都要有上下的调入,保存,调出。如果我们把进程比喻为一个运行在电脑上的软件,那么一个软件的执行不可能是一条逻辑执行的,必定有多个分支和多个程序段,就好比要实现程序A,实际分成  a,b,c 等多个块组合而成。那么这里具体的执行就可能变成:
程序 A 得到 CPU =》CPU 加载上下文,开始执行程序 A 的 a 小段,然后执行 A 的 b 小段,然后再执行 A 的 c 小段,最后 CPU 保存 A 的上下文。
这里 a,b,c 的执行是共享了 A 的上下文, CPU 在执行的时候没有进行上下文切换的。这里的 a,b,c 就是线程,也就是说线程是共享了进程的上下文环境,的更为细小的 CPU 时间段。

3. 进程切换与线程切换

4. Linux 中五种 IO 模型

1) 阻塞 I/O(blocking I/O)
2) 非阻塞 I/O (nonblocking I/O)
3)  I/O 复用 (select 和poll) (I/O multiplexing)
4) 信号驱动 I/O (signal driven I/O (SIGIO))
5) 异步 I/O (asynchronous I/O (the POSIX aio_functions))
前四种都是同步,只有最后一种才是异步 IO。
同步 IO 和异步 IO 的区别就在于:数据拷贝的时候进程是否阻塞!
阻塞 IO 和非阻塞 IO 的区别就在于:应用程序的调用是否立即返回!

5. 如何实现一个同步非阻塞的请求

6. 实现进程同步的机制有什么

7. 信号量的实现机制

8. 共享锁和排他锁

9. 实现一个读写锁

10. 设计一个无锁队列

11. 协程的原理

四、数据库

1. 索引是什么

索引 (Index) 是帮助 MySQL 高效获取数据的数据结构。

  1. 索引能极大的减少存储引擎需要扫描的数据量

  2. 索引可以把随机 IO 变成顺序 IO

  3. 索引可以帮助我们在进行 分组、 排序等操作时,避免使用临时表

2. 为什么要用 B+ 树(B+ 树的优缺点)

B+ 树是 B- 树的变种 (PLUS 版)多路绝对平衡查找树,好的时间复杂度
B+ 树扫库、表能力更强
B+ 树的磁盘读写能力更强
B+ 树的排序能力更强
B+ 树的查询效率更加稳定(仁者见仁、智者见智,有可能 B-Tree 第一次就命中了,直接返回,而 B+Tree 需要找到叶节点,所以查找效率不一定比 B-Tree 更高)
支持顺序排序,叶节点之间存在链接

3. B+索引和哈希索引的区别?

B-tree 索引
索引是按照顺序存储的,所以,如果按照 B-tree 索引,可以直接返回,带顺序的数据,但这个数据只是该索引列含有的信息。因此是顺序 I/O
适用于:
精确匹配
范围匹配
最左匹配
Hash 索引
索引列值的哈希值+数据行指针:因此找到后还需要根据指针去找数据,造成随机I/O
适合:
精确匹配
不适合:
模糊匹配
范围匹配
不能排序
1、hash 索引仅满足 “=”、“IN” 和 “<=>” 查询,不能使用范围查询因为 hash 索引比较的是经常 hash 运算之后的hash值,因此只能进行等值的过滤,不能基于范围的查找,因为经过hash算法处理后的 hash 值的大小关系,并不能保证与处理前的 hash 大小关系对应。
2、hash 索引无法被用来进行数据的排序操作由于 hash 索引中存放的都是经过hash 计算之后的值,而 hash 值的大小关系不一定与 hash 计算之前的值一样,所以数据库无法利用 hash 索引中的值进行排序操作。
3、对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。
4、Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比 B-Tree 索引高。对于选择性比较低的索引键,如果创建 Hash 索引,那么将会存在大量记录指针信息存于同一个 Hash 值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据的访问,而造成整体性能低下。
总结:哈希适用在小范围的精确查找,在列数据很大,又不需要排序,不需要模糊查询,范围查询时有用

4. B+ 树中叶子节点间的指针有什么用?

使得访问更加简单,b 树的话需要不断在父节点和叶子节点之间来回移动

5. 聚簇和非聚簇索引的区别?

聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据,聚簇索引的叶子节点就是数据节点,由于聚簇索引是将数据跟索引结构放到一块,因此一个表仅有一个聚簇索引,聚簇索引具有唯一性
非聚簇索引:非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行

6. 非聚簇索引的查询都要回表吗?

是的

7. B+ 树和 AVL 树 B 树二叉搜索树有什么区别?

这几种各有交集但又不尽相同。
什么是二叉搜索树?
它或者是一棵空树,或者是具有下列性质的二叉树:
1.左子节点的值必定小于父节点的值
2.右子节点的值必定大于父节点的值
首先 AVL 树是自平衡的二叉搜索树AVL在该定义的基础上加入了平衡条件,即:某节点的左右子树的高度差小于等于1
另一种非严格自平衡的二叉搜索树是红黑树,二者使用场景略微有些不同。
AVL 追求整体的绝对平衡,适合于少量插入,大量查找的应用场景(因为维护全局平衡,插入一个往往需要 O(log n))
红黑树适用于一部分插入,一部分查询的场景(变色,左旋右旋场景相对少些)
B+ 树是对 B 树的拓展
一棵 m 阶 B 树 (balanced tree of order m) 是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:
1、根结点至少有两个子女;
2、每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 <= j <= m - 1;
3、除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加 1,故内部子树个数 k 满足:┌m/2┐ <= k <= m ;
4、所有的叶子结点都位于同一层。
B+ 树对 B 树的改进就是:只有叶节点存数据,并且维护了两个指针,一个指向根节点另一个指向顺序叶节点的首位。
B+ 树还在叶子节点中加入了链接指针

五、杂项

这一部分和项目比较相关。基本上项目中有什么或者面试官想到什么问什么,问了很多但是不通用。就只写一点。

1. GIL 是什么

全局状态锁

2. 为什么会有?

出现多线程编程之间数据和状态一致性问题,为了解决这个数据不能同步的问题

3. 有什么作用?

4. 怎么规避它对于并行的影响?

六、语言相关

1. Python 的内存管理机制

(1)垃圾回收
(2)引用计数
(3)内存池机制

2. 讲一下 Python GC 的原理和详细解释(分代,标记回收,内存划分)

Python 语言默认采用的垃圾收集机制是『引用计数法 Reference Counting』,『引用计数法』的原理是:每个对象维护一个 ob_ref  字段,用来记录该对象当前被引用的次数,每当新的引用指向该对象时,它的引用计数 ob_ref 加 1,每当该对象的引用失效时计数 ob_ref 减 1,一旦对象的引用计数为 0,该对象立即被回收,对象占用的内存空间将被释放。
为了解决对象的循环引用问题,Python 引入了标记-清除和分代回收两种 GC 机制。
标记就是使用有向图的方式,不可达的清除掉(主要用来清理容器对象)
分代分为三代:年轻,中年,老年。年轻对象满,触发 GC,可回收对象回收掉,不可回收移到中年中去,以此类推。结合标记使用
引用计数增加
1.对象被创建: x=4
2.另外的别人被创建: y=x
3.被作为参数传递给函数: foo(x)
4.作为容器对象的一个元素: a=[1,x,'33']
引用计数减少
1.一个本地引用离开了它的作用域。比如上面的 foo(x) 函数结束时,x指向的对象引用减 1。
2.对象的别名被显式的销毁: del x ;或者 del y
3.对象的一个别名被赋值给其他对象: x=789
4.对象从一个窗口对象中移除: myList.remove(x)
5.窗口对象本身被销毁: del myList,或者窗口对象本身离开了作用域。
垃圾回收
1、当内存中有不再使用的部分时,垃圾收集器就会把他们清理掉。它会去检查那些引用计数为 0 的对象,然后清除其在内存的空间。当然除了引用计数为0的会被清除,还有一种情况也会被垃圾收集器清掉:当两个对象相互引用时,他们本身其他的引用已经为 0 了。
2、垃圾回收机制还有一个循环垃圾回收器, 确保释放循环引用对象 ( a 引用 b, b 引用 a, 导致其引用计数永远不为 0)。

3. Python 中 static_method 、 class_mathod 、和普通 method 有什么区别

4. 迭代器和生成器有什么区别?

先说结论,生成器式 一种特殊的迭代器:其在使用时生成。
首先明确两个概念:
Iterable :所有实现了 iter__  的对象均可称作 Iterablec。Iterator:是指同时实现了 _iter_  和 _next 的对象,迭代器也属于 Iterable。

小结
凡是可作用于 for 循环的对象都是 Iterable 类型;
凡是可作用于 next() 函数的对象都是 Iterator 类型,它们表示一个惰性计算的序列

5. 生成器怎么使用?

两种方式:

a =(i for i in range(100))
def a(n):i = 0while(i < n):yield ii += 1

推荐阅读:

写 Python 到底用什么编辑器好?鹅厂程序猿吵翻了

震惊!一天内竟然要完成设计 100 张海报

5种将死的编程语言


关注“Python之禅“,学地道的Python技术

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20817.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字节跳动架构师讲解Android开发!已成功拿下字节、腾讯、脉脉offer,含BATJM大厂

开头 程序员面试&#xff0c;除了面试技术外&#xff0c;有的公司经常会问应聘者和技术无关的问题&#xff0c;考验求职者的综合能力&#xff0c;并以此作为是否录用的依据&#xff0c;很多时候这类问题往往没有标准答案&#xff0c;就看求应聘者临场的反应能力如何。 张工是…

面试字节跳动,我被怼了。

作者丨三级狗 https://www.zhihu.com/question/31225105/answer/582508111 人们都说&#xff0c;这个世界上有两种人注定单身&#xff0c;一种是太优秀的&#xff0c;另一种是太平凡的。 我一听 呀&#xff1f;那我这岂不是就不优秀了吗&#xff0c;于是毅然决然和女朋友分了手…

一张图对比在腾讯、阿里、字节跳动工作的区别

本文经 BAT &#xff08;id:batfun&#xff09;授权转载 互联网人爱相互跳槽&#xff0c;腾讯和阿里一直相互流动&#xff0c;近两年势头强劲的字节跳动也成为跳槽热门去向&#xff0c;那么在这三家公司工作有什么区别呢&#xff1f;一起来看—— 旗舰产品 - 擅长领域 - 腾讯&a…

是的,阿里P7,腾讯T4,字节跳动总监都是你家亲戚!!!都在帮你们整理资料!!!

缘起 最近网上出现最多的文章就是&#xff0c;阿里P7大佬熬夜整理某资料&#xff0c;腾讯T4大佬良心分享某资料&#xff0c;字节总监耗时多少天整理的某资料&#xff0c;我笑了&#xff0c;这些大佬都是你家亲戚么&#xff0c;都在帮你们整理资料去了&#xff0c;都闲着没事干…

Android菜菜进字节跳动,居然是看了这个......

谈谈我的真实感受吧&#xff5e; 程序员真的是需要将终生学习贯彻到底的职业&#xff0c;一旦停止学习&#xff0c;离被淘汰&#xff0c;也就不远了。 金三银四、金九银十跳槽季&#xff0c;这是一个千年不变的话题&#xff0c;每到这个时候&#xff0c;很多人都会临阵磨枪&a…

QNAP严重漏洞可导致恶意代码注入

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 编译&#xff1a;代码卫士 QNAP提醒客户安装QTS和QuTS固件更新。该更新修复了一个严重漏洞 (CVE-2022-27596)&#xff0c;可导致远程攻击者在QNAP NAS设备上注入恶意代码。 该漏洞是“严重”级别的漏洞&#xff0c;C…

我和ChatGPT的对话记录

今日份调教&#xff08;他说他是GPT3&#xff09; 从莫种意义上来说&#xff0c;我撅得我还是有一手的&#xff0c;噗嗤 &#x1f60e; **

推荐4款非常实用的电脑软件

你是否曾经在使用电脑的过程中遇到过各种各样的问题&#xff1f;本文将为您推荐4款小众但非常实用的软件&#xff0c;或许能帮助您解决这些问题。 1.格式工厂 格式工厂是一款功能全面的格式转换软件&#xff0c;支持转换几乎所有主流的多媒体文件格式&#xff0c;包括视频 &a…

含泪推荐四款超级好用的电脑软件,值得收藏

1.极速下载工具—Internet Download Manager&#xff08;IDM&#xff09; Internet Download Manager简称IDM&#xff0c;是一款老牌的Windows系统下载工具&#xff0c;支持多媒体下载、自动捕获链接、自动识别文件名、静默下载、批量下载、站点抓取、视频下载等多种个性化的功…

这几款实用的电脑软件推荐给你

软件一&#xff1a;TeamViewer TeamViewer是一款跨平台的远程控制软件&#xff0c;它可以帮助用户远程访问和控制其他计算机、服务器、移动设备等&#xff0c;并且支持文件传输、会议功能等。 TeamViewer的主要功能包括&#xff1a; 远程控制&#xff1a;支持远程访问和控制…

亚马逊、eBay、沃尔玛、OZON、速卖通等平台如何实现自养号测评补单

现如今&#xff0c;跨境电商可谓是举步维艰&#xff0c;运营环境也是越来越复杂。但复杂的环境可以用两个字来概括买和刷。因为进行买卖或者补单从而增加销售促进排名&#xff0c;然后提高产品的权重。其实无论是销量还是评论不仅可以通过自然购买产生&#xff0c;也可以进行一…

亚马逊跨境商家会用的邮件管理软件—解孵

做亚马逊的朋友&#xff0c;在平时的运营中需要及时地回复邮件&#xff0c;邮件回复是否及时会影响到好评率和销量&#xff0c;所以亚马逊商家需要在24小时内回复邮件到买家。其实回复邮件并不难&#xff0c;困难的是在邮件过多或店铺过多的情况下&#xff0c;商家可能会漏回或…

亚马逊买家号二步验证怎么设置?

亚马逊提供了多种安全功能&#xff0c;其中包括买家账号的二步验证。启用二步验证可以提供额外的账户安全性&#xff0c;以确保只有经过授权的用户可以访问您的亚马逊买家账号。 要启用亚马逊买家账号的二步验证&#xff0c;请按照以下步骤进行操作&#xff1a; 1、登录亚马逊…

亚马逊自动测评软件:注册养号下单操作流程

想要亚马逊自动测评软件&#xff0c;可以使用亚马逊鲲鹏系统&#xff0c;亚马逊鲲鹏系统可以注册、养号、下单、留评&#xff0c;是一款专门针对亚马逊买家号所开发的软件。 想要做测评&#xff0c;当然就需要先有一批买家号的&#xff0c;买家号可以直接去网上购买成品后导入进…

亚马逊安全测评方法大全+自养买手号实操教程——AdsPower

测评是做跨境电商的卖家不可能不经历的事情。但是测评行业水深大家都知道&#xff0c;那么&#xff0c;作为卖家&#xff0c;如何安全的测评呢&#xff1f;今天我们就来聊聊如何送测&#xff1f;安全测评需要注意什么&#xff1f;&#xff08;PS&#xff1a;不想看上面科普的朋…

如何解决亚马逊、ebay砍单、封号问题?稳定测评方案分析

很多卖家和工作室朋友询问我为什么在测评过程中经常遇到砍单和封号的问题。实际上&#xff0c;这并不难理解&#xff0c;因为测评所涉及的技术问题很多&#xff0c;并不能仅通过解决IP或环境的单一因素来实现稳定的测评。 目前市面上存在许多技术方案&#xff0c;例如指纹浏览…

亚马逊云科技:你要的并不是ChatGPT,而是强大和经济的算力

2022年12月&#xff0c;AI创业公司OpenAI推出了聊天机器人ChatGPT。作为生成式AI在文本领域的实际应用之一&#xff0c;ChatGPT的问世距今不过百天而已&#xff0c;却已经火爆了全球。 一时间&#xff0c;大量的企业投入到生成式AI领域&#xff0c;大有“任彼桑田变沧海&#x…

tracert请求超时原因

1、那一跳禁PING2、那一跳不对TTL超时做响应处理&#xff0c;直接丢弃3、MPLS ***网络

Ping github.com超时的解决方法

首先在自己的电脑上打开终端ping github.com 2、打开电脑上的C:\Windows\System32\drivers\etc\hosts文件 在最下方加上 121.227.48.27 github.com git 13.250.177.223 github.global.ssl.fastly.net 121.227.48.27 是自己的IP地址&#xff08;不会查ip地址的在浏览器输入IP点…

ping github 请求超时解决方案

前言 蛋疼的产品需要定制编辑器&#xff0c;然后我肯定是太懒 去github找了个开源插件。fork改改就导入项目&#xff0c;然后就坑自己了。去公司安装 github地址连不上 这种时候肯定惯例 ping 下。。然后懵逼了&#xff0c;全是请求超时&#xff08;哭笑脸&#xff09; 正文 …