小伙伴们大家好,我是阿秀。
前段时间分享了一位师弟的面经,他在提前批顺利拿到字节跳动抖音部门电商部门的offer,算是我知道的为数不多能在提前批阶段斩获offer的应届生了,其中编程语言和算法类考察面经详见该篇文章:抖音电商,提前批offer!。
抖音电商面试一共是三轮技术面+一轮HR面,一共超过 40 个问题,我系统整理了一遍,并将其中一些比较不错的问题,摘录到了自己开发的网站上。
InterviewGuide大厂面试真题网站:https://top.interviewguide.cn
今天再来分享一下一些关于计算机基础知识问题考察,不得不说,电商部门考察的确实是细,很多问题都深挖了,明显是那种需要理解才能讲出来的东西,而不是死记硬背八股文。
以下是这位师弟的面经以及部分参考答案:
操作系统
1、问:用户态和内核态了解吗?为什么要有这两种?
答:第一个就把我问懵了,只知道有这两个态,具体还真不清楚,最后随便扯了一点CPU权限等级。
阿秀补充:
为什么要有这两态?是因为需要限制不同的程序之间的访问能力,防止他们获取别的程序的内存数据,或者获取外围设备的数据,并发送到网络,CPU划分出两个权限等级 – 用户态和内核态。
2、问:既然不清楚为什么要有这两态,那说一下这两种的区别吧?
答:内核态可以访问内存中的全部数据,用户态无法直接访问外围设备。
3、问:说一下你了解的进程调度算法?知道哪几种?
答:只记得先来先服务、最短剩余时间优先、时间片轮转和多级反馈队列了。
阿秀补充:
还有短作业优先、优先级调度这两种
4、问:那说一下多级反馈队列是什么?用于什么情况下的?
答:记得是需要连续执行多个时间片的进程考虑才有的多级反馈队列来着。
阿秀补充:
假如一个进程需要执行 100 个时间片,如果采用时间片轮转调度算法,那么需要交换 100 次。
多级队列是为这种需要连续执行多个时间片的进程考虑,它设置了多个队列,每个队列时间片大小都不同,例如 1,2,4,8,…。进程在第一个队列没执行完,就会被移到下一个队列。
这种方式下,之前的进程只需要交换 7 次。每个队列优先权也不同,最上面的优先权最高。因此只有上一个队列没有进程在排队,才能调度当前队列上的进程。
可以将这种调度算法看成是时间片轮转调度算法和优先级调度算法的结合。
5、问:页表知道是什么吗?
答:一种数据结构,可以将虚拟地址映射到物理地址,也就是在分段和分页机制下,CPU会将虚拟地址转换为线性地址,然后再将线性地址转换为物理地址。
6、问:描述符是什么?如何创建的?
答:这个真把我问住了,真不清楚描述符是什么。。。。
阿秀补充:
定义
在操作系统中,描述符是一种数据结构,用于表示和管理文件、设备、进程等资源。每个描述符都包含了资源的一些属性和操作方法。
创建方式
描述符的创建通常是通过系统调用来完成,具体的操作系统和编程语言可能有所不同。一般而言,创建描述符的步骤如下:
- 打开资源:首先需要打开需要操作的资源,例如文件、设备等。在大多数操作系统中,可以使用open()或者类似的函数来打开资源,并返回一个文件描述符。
- 分配描述符:系统会为每个打开的资源分配一个唯一的描述符。描述符一般是一个整数值,可以用来识别和访问对应的资源。
- 操作资源:通过描述符可以对资源执行各种操作,例如读写文件、发送数据等。操作资源时,可以使用描述符作为参数来指定要操作的资源。
- 关闭资源:当不再需要使用资源时,需要关闭对应的描述符,释放资源并清理相关的数据结构。一般可以使用close()函数来关闭描述符。
需要注意的是,描述符是操作系统内部使用的一种抽象,通常不直接暴露给应用程序。应用程序可以通过高级的接口(例如文件操作、网络操作等)来间接操作资源,而无需直接处理描述符。
7、问:键盘敲击发生的中断是如何传递到操作系统中的?
答:只知道是通过处理器传过去的。
阿秀补充:
当我们在敲击键盘的同时就会产生中断,当硬盘读写完数据之后也会产生中断,所以,我们需要知道,中断是由硬件设备产生的,而它们从物理上说就是电信号。
之后,它们通过中断控制器发送给CPU,接着CPU判断收到的中断来自于哪个硬件设备(这定义在内核中)。
最后,由CPU发送给内核,有内核处理中断。下面这张图显示了中断处理的流程:
这里也附加上异常的概念以及中断和异常的区别
异常
我们在学习《计算机组成原理》的时候会知道两个概念,CPU处理程序的时候一旦程序不在内存中,会产生缺页异常;当运行除法程序时,当除数为0时,又会产生除0异常。
所以,大家也需要记住的是,异常是由CPU产生的,同时,它会发送给内核,要求内核处理这些异常,下面这张图显示了异常处理的流程:
中断和异常的相同点
- 最后都是由CPU发送给内核,由内核去处理
- 处理程序的流程设计上是相似的
中断和异常的不同点
- 产生源不相同,异常是由CPU产生的,而中断是由硬件设备产生的
- 内核需要根据是异常还是中断调用不同的处理程序
- 中断不是时钟同步的,这意味着中断可能随时到来;异常由于是CPU产生的,所以它是时钟同步的
- 当处理中断时,处于中断上下文中;处理异常时,处于进程上下文中
计算机网络
1、问:HTTP运行在哪个端口号上?HTTPS呢?
答:HTTP我记得是80端口,HTTPS不记得了。
阿秀补充:HTTPS 的端口号是 443
2、问:问几个状态码吧,4XX和5XX代表是什么错误?
答:4XX是Client Error(客户端错误状态码),5XX是Server Error(服务器错误状态码)
3、问:403和503是什么错误?
答:403还记得,应该是服务被拒绝的意思,也就是 Forbidden,503不记得了
阿秀补充:503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
4、问:HTTP 1.0 / 1.1 / 2 / 3的区别?
答:记不清了,胡乱说了说,HTTP 1.0无状态、无连接,HTTP 1.1支持长连接,其余不清楚了。
阿秀补充:
- HTTP 1.0是一种无状态,无连接的应用层协议。浏览器每次请求都需要与服务器建立一个TCP连接,服务器处理完成以后立即断开TCP连接(无连接),服务器不跟踪也每个客户单,也不记录过去的请求(无状态) 。
- HTTP 1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了网络延迟 。
- HTTP 2.0是基于二进制流的,可以分解为独立的帧,交错发送,从而提高了网络传输效率。
- HTTP 3.0是最新的版本,它使用了QUIC协议来提高网络传输效率。
5、问:在浏览器地址栏输入一个URL后回车,背后会进行哪些技术步骤?
答:老八股文了,不说了。
阿秀补充
主要会经历以下步骤
- 域名解析
- 发起TCP的3次握手
- 建立TCP连接后发起http请求
- 服务器响应http请求,浏览器得到html代码
- 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)
- 浏览器对页面进行渲染呈现给用户。
6、问:TCP保证可靠传输的方式有哪些?
答:确认和重传、流量控制、拥塞控制等。
阿秀补充:
- 序号和确认号:TCP通过序号和确认号来保证数据的可靠传输。发送方将每个数据报文都标记一个唯一的序号,接收方收到数据后需要回复一个确认号,表示已经成功接收到了这个数据。
- 确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就会重传。
- 数据校验:TCP报文头有校验和,用于校验报文是否损坏。
- 数据合理分片和排序:TCP会按最大传输单元(MTU)合理分片,接收方会缓存未按序到达的数据,重新排序后交给应用层。而UDP:IP数据报大于1500字节,大于MTU。这个时候发送方的IP层就需要分片,把数据报分成若干片,是的每一片都小于MTU。而接收方IP层则需要进行数据报的重组。由于UDP的特性,某一片数据丢失时,接收方便无法重组数据报,导致丢弃整个UDP数据报。
- 流量控制:当接收方来不及处理发送方的数据,能通过滑动窗口,提示发送方降低发送的速率,防止包丢失。
- 拥塞控制:当网络拥塞时,通过拥塞窗口,减少数据的发送,防止包丢失。
7、问:说一下流量控制的原因
答:老八股文了
数据库
MySQL
1、问:了解过哪些数据库?除了MySQL和Redis,再说一种你比较了解的数据库?
答:说了一点MongoDB,它是文档型数据库。
阿秀补充:
(1) MySQL是传统的关系型数据库, MongoDB则是非关系型数据库。
(2) MongoDB以BSON结构进行存储,在存储海量数据方面有着很明显的优势。
(3)与传统关系型数据库相比, NoSQL有着非常显著的性能和扩展性优势。
(4)与传统的关系型数据库(如与 MySQL)相比, MongoDB的优点如下。
- 弱一致性(最终一致),更能保证用户的访问速度。
- 使用文档结构的存储方式,能够更便捷地获取数据。
2、问:事务的隔离级别有哪些?
答:未提交读、提交读、 重复读、可串行化读
3、问:什么是未提交读,可能会导致哪些问题?
答:老八股了,可以自己去查、
阿秀补充:
未提交读:事务中发生了修改,即使没有提交,其他事务也是可见的,比如对于一个数A原来50修改为100,但是我还没有提交修改,另一个事务看到这个修改,而这个时候原事务发生了回滚,这时候A还是50,但是另一个事务看到的A是100.可能会导致脏读、幻读或不可重复读
4、问:知道哪些日志文件?
答:只知道redo log和undo log。。。
阿秀补充:
- redo log 重做日志,确保事务的持久性
- undo log 回滚日志,确保事务的原子性,用于回滚事务,同时提供mvcc下的非锁定读
- bin log 二进制日志,用于主从复制场景下,记录master做过的操作
- relay log 中继日志,用于主从复制场景下,slave通过io线程拷贝master的bin log后本地生成的日志 慢查询日志,用于记录执行时间过长的sql,需要设置阈值后手动开启
5、问:左外连接和右外连接是什么意思?有什么区别
答:忽然就问了一个SQL的问题,一时半会还没反应过来。。。很简单。
阿秀补充
左外连接: 左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。
Redis
1、问:用过Redis吗?怎么学习Redis的?
答:用过,主要是通过视频学习和一些书籍来了解学习,还有就是一些实践了,看过《Redis设计与实现》和一些中科院老师写的Redis网络专栏。
2、问:Redis 内存淘汰机制是什么?
答:两种,定期删除和惰性删除方案。
3、问:定期和惰性一定能保证删除数据吗?
答:不一定,当内存过高时会采用内存淘汰策略了。。。具体的策略忘记了。
阿秀补充:
在Redis.conf中有一行配置:maxmemory-policy volatile-lru,一共有六种方案:
该配置就是配内存淘汰策略的,主要有以下六种方案:
- volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
- volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
- volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
- allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
- allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
- no-enviction(驱逐):禁止驱逐数据,新写入操作会报错
4、问:缓存雪崩、缓存穿透有什么区别?缓存预热、缓存更新呢?
答:老八股文了,不说了
阿秀补充:
内容过多,以前就收录到网站上了,自己去看吧,链接:https://top.interviewguide.cn/issue/234
5、问:Redis的数据结构有哪几种?
答:经典八股文问题,不啰嗦了。
阿秀补充
以前就收录过,可以自己去看,链接:https://top.interviewguide.cn/issue/220
往期好文推荐
阿秀2年来一直在做的一件事
这里也给自己的知识星球,也就是学习圈打个广告,坚持这件事情已经快2 年时间了。
前年和去年分享的很多校招上岸经验也都是出自阿秀的学习圈中的往届上岸人,阿秀的学习圈中置顶帖的「知识图谱」和「精华区」(如下图)中有很多计算机大学本科&研究生学习以及校招的内容和问题,多看看这些能够帮你走的更稳、更顺、更平坦。
后续也会在自己组建的阿秀的学习圈中分享一些社招跳槽找工作的经验,都是自己一路走过来的经验。
星球里的精华区、知识图谱以及资源沉淀
一个人踽踽独行不如结伴而行,以后会继续在星球笔耕不辍,输出一些有价值的内容。
欢迎点击左下角阅读原文详细了解,这可能是你求职路上性价比最高的一次点击!
前段时间自己也开发了一个互联网大厂真题面试解析网站,比如我想查一下行业为互联网,公司为字节跳动,考察岗位为后端,考察时间为最近一年之类的面试题有哪些?
《InterviewGuide》大厂面试真题网站:https://top.interviewguide.cn/
已经有不少小伙伴遇到原题了,具体可以看下链接:
后面还会继续开发其余星球用户专属功能,比如模拟面试以及题目收藏、甚至是真题下载打印功能等。