【题目解析】第六届字节后端青训营结营小测试全解析

2023-12-05 10:30

本文主要是介绍【题目解析】第六届字节后端青训营结营小测试全解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

功夫秘籍

前言

👏 Hi! 我是 Yumuing,一个技术的敲钟人

👨‍💻 每天分享技术文章,永远做技术的朝拜者

📚 欢迎关注我的博客:Yumuing’s blog

由于官方答案没有出来,所以,这部分都是根据个人经验和网上收集所得到的第六届青训营结营全解析,如果存在错误,也请在评论区友好讨论,让我们一起把这篇文章变得更加完美。

文章目录

    • 前言
    • 答案汇总
    • 详细解析
    • 总结

答案汇总

先罗列一下答案,以 ABCD 作为选择题次序,自行比对,完整解析在后头。

序号答案
05B
06C
07D
08B
09B
10D
11B
12C
13A
14D
15C
16C
17B
18D
19D
20ABC
21ACD
22AD
23ABC
24ABC
25ACD
26ABC
27AD

详细解析

不保证全部正确,只凭个人经验和网上收集结果所总结出的完整解析答案,如有错误,还希望不吝赐教!感谢。

05 在网络字节序中,所谓"小端”(little endian)说法正确的是

  • 高字节数据存放在低地址处,低字节数据存放在高地址处
  • 低字节位数据存放在内存低地址处, 高字节位数据存放在内存高地址处
  • 和编译器相关
  • 上述答案都不正确

解析:

  • 大端字节序(big-endian):按内存的增长方向,低位数据存储于高位内存中,高位数据放低地址,这和我们的阅读习惯一致。
  • 小端字节序(little-endian):按内存的增长方向,低位数据存储于低位内存中,高位数据放高地址

网络字节序一般是大端序,主机字节序一般是小端序(比如intel CPU)

故本题选 B

06 机器A的ip地址为202.96.128.130,子网掩码为255.255.255.128,则该ip地址的网络号为

  • 202.0.0
  • 202.96.0
  • 202.96.128.128
  • 255.255.255

解析:

ip地址 和 子网掩码 进行 运算(与运算:两位同时为“1”,结果才为“1”,否则为0):

由于 255 的二进制 11111111 ,与二进制 A 进行与运算后结果为其本身,即 A,故,ip 段前三段不转换为二进制,其他部分切换成二进制,方便计算,结果如下:

  • ip地址 202.96.128.130: xxxxxxxx .xxxxxxxx.xxxxxxxx.1000 0010

  • 子网掩码 255.255.255.128 :11111111.11111111.11111111.1000 000 0

与运算之后等于: 202.96.128.128,根据子网掩码我们能知道,ip地址前25位是网络号,剩下的就是主机号

故本题选 C

07 下面的叙述中,()不是设备管理中引入缓冲机制的主要原因

  • 缓和CPU和I/O设备间的速度不匹配问题
  • 减少对CPU的中断频率和放宽对CPU响应时间的限制
  • 提高CPU和I/O设备间的并行性
  • 节省系统内存

解析:

缓冲技术是用在外部设备与其他硬件部件之间的一种数据暂存技术,它利用存储器件在外部设备中设置了数据的一个存储区域,称为缓冲区。缓冲技术一般有两种用途,一种是用在外部设备与外部设备之间的通信上的,还有一种是用在外部设备和处理器之间的。

  • CPU的速度远高于内存,当CPU直接从内存中存取数据时要等待一定时间周期,而Cache则可以保存CPU刚用过或循环使用的一部分数据,如果CPU需要再次使用该部分数据时可从Cache中直接调用,这样就避免了重复存取数据,减少了CPU的等待时间,因而提高了系统的效率。A 正确

  • 在远程通信系统中,如果从远地终端发来的数据仅用一位缓冲来接收,如下图(a)所示,则必须在每收到一位数据时便中断一次 CPU,这样,对于速率为 9.6 Kb/s 的数据通信来说,就意味着其中断 CPU的频率也为 9.6 Kb/s,即每 100 μs 就要中断 CPU 一次,而且 CPU 必须在 100 μs 内予以响应,否则缓冲区内的数据将被冲掉。倘若设置一个具有 8 位的缓冲(移位)寄存器,如下图(b)所示,则可使 CPU 被中断的频率降低为原来的 1/8;若再设置一个 8 位寄存器,如下图©所示,则又可把 CPU 对中断的响应时间放宽到 800 μs。故B 正确

    img

  • 缓冲的引入可显著地提高 CPU 和 I/O 设备间的并行操作程度,提高系统的吞吐量和设备的利用率。例如,在 CPU 和打印机之间设置了缓冲区后,便可使 CPU 与打印机并行工作。故 C 正确

  • 缓冲机制,简单讲就是通过空间换时间,故不可能节省系统内存。

故本题选 D

08 避免死锁的一个著名的算法是

  • 先入先出法
  • 银行家算法
  • 优秀级算法
  • 资源按序分配法

解析:

这个就毋庸置疑了。银行家算法:

在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。这种情况必须避免死锁的出现。

故本题选 B

09 原语的执行是屏蔽中断的

解析:

原语就是一种原子操作,故屏蔽中断操作

故本题选 B

10 关于无缓冲和有缓冲的channel,下面说法正确的是

  • 无缓冲的channel是默认的缓冲为1的channel
  • 无缓冲的channel和有缓冲的channel都是同步的
  • 无缓冲的channel和有缓冲的channel都是非同步的
  • 无缓冲的channel是同步的,而有缓冲的channel是非同步的

解析:

  • 无缓冲通道默认缓冲为 0
  • 无缓冲通道在没有接收方的时候,发送方会阻塞,故无缓冲的channel是同步的
  • 有缓冲通道在没有接收方的时候,如果缓冲区未满,则发送方并不会阻塞,故有缓冲的channel是非同步的

故本题选 D

11 小袁今天刚学会了defer延迟调用,他在草稿纸上编写了下面一段代码。请问下列代码的输出是

  • 123
  • 132
  • 312
  • 321

解析:

很简单的逻辑,自行理解吧,原题可运行代码如下:

package mainimport ("fmt"
)type S struct{}
func (s S) p(n int) S {fmt.Print(n)return s
}func main() {var s Sdefer s.p(1).p(2)fmt.Print(3)
}

可自行测试,答案为 132,故本题选 B

12 关于函数声明,下面语法错误的是

  • func f(a, b int) (value int, err error)
  • func f(a int, b int) (value int, err error)
  • func f(a, b int) (value int, error)
  • func f(a int, b int) (int, int, error)

解析:

函数返回参数要么都有变量名,要么都用类型表示,选项C中返回参数一个有变量名,一个没变量名,不统一。故本题选 C。

13 Go语言中,以下选项正确的是

  • int 和 uint 的取值范围与体系架构有关
  • int 的取值范围是 [0, 4294967296)
  • uint 的取值范围是 [0, 4294967296)
  • int 的取值范围是 [-9223372036854775808, 9223372036854775807]

解析:

int 和 uint 的取值范围与体系架构有关,在 32 位机中等价于 int32 和 uint32,在 64 位机中等价于 int64 和 uint64。

故本题选 A

14 SQL语言允许使用通配符进行字符串匹配的操作,其中“%'可以表示

  • 零个字符
  • 一个字符
  • 多个字符
  • 其他三项都可以

解析:

% 可以表示任意个字符,可以是零个、一个、多个字符。

故本题选 D

15 关系型数据库创建表都有主键,以下对主键描述正确的是

  • 主键足唯一素引,唯一索引也是主键
  • 主键是一种特殊的唯一性索引,只可以是聚集索引
  • 主键是唯一、不为空值的列
  • 对于聚集索引来说,创律主键时,不会自动创建主键的聚集索引

解析:

  • 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。
  • 唯一性索引列允许空值,而主键列不允许为空值。
  • 主键列在创建时,已经默认为空值 + 唯一索引,默认主键有聚集索引

故本题选 C

16 以下可以获取历史消息的是

  • topic 交换器
  • fanout 交换器
  • direct 交换器
  • 以上都不是

解析:

以上三个选项均为 RabbitMQ 交换器类型,fanout 和 topic 都是广播形式的,是没有历史数据的,也就是说对于中途创建的队列,获取不到之前的消息,而 direct 可以。

故本题选 C

17 某线性表中有100000个元素,其中前99990个元素递增有序,则采用()方法进行递增排序时关键字比较次数最少

  • 简单选择排序
  • 直接插入排序
  • 二路归并排序
  • 快速排序

解析:

img

根据题目中的“前99990个元素递增有序”,得出关键字比较次数最少的原理就是这99990个元素不参与比较或者移动等耗时操作。

根据以下对各种排序的思想分析,二路归并和快速排序没有利用大部分为递增序列而不参与比较或者移动的操作,简单排序的时间复杂度大于直接插入排序。

  • 简单选择排序思想为在当前待排序数列中选出最小值添加到有序序列中,其移动次数正序为0次,比较次数复杂度O(n****2)
  • 直接插入排序思想为整个排序过程为n-1趟,先将序列中的第一个当成有序子序列,然后从第二个开始逐个进行插入,直至整个序列有序,最好的情况下正序移动次数为0,比较次数为n-1,时间复杂度为O(n)
  • 二路归并排序初始序列含有n个记录则可以看成n个有序的子序列,每个子序列长度为1;两两合并,得到n/2个长度为2或1的有序子序列,再两两合并,……如此重复,直到得到一个长度为n的有序序列为止。归并时间复杂度O(nlog2n)
  • 快速排序选定一个基准值,通过一趟排序将待排分割成独立的两部分,前一部分均小于或等于基准值,后一部分大于基准值,然后对每个部分继续进行上述的重复操作,直到整个序列有序。最好的情况是基准值能够均衡分为两部分,最坏的就是只得到一个比上一次划分少一个记录的子序列O(n2)

故本题选 B

18 某个大型的网络游戏网站,现有几亿用户,为了实时获取前十名游戏分数最高的玩家,使用以下哪个排序算法比较合理?

  • 基数排序
  • 快速排序
  • 二叉排序
  • 堆排序

解析:

img

本题需要考虑两个方面的内容:

  • 两亿用户:空间
  • 实时获取:时间

快速排序只有在对整个空间排序完成后才能找出前10名,因而时间复杂度是 O(logN) ,不够快

时间上,基数排序会比堆排要快。但是基数排序需要更多的额外空间

堆排序,每次排序的结果就是找到当前堆中的最大/最小值。因此完成需求的时间复杂度为O(logN)。当我们需要找到常数级的最大/最小值时,往往堆排序是我们应该最先考虑的。

故本题选 D

19 题目描述中给出了四个排序相关的说法,让我们选择错误的是哪个,下面是每个说法的具体内容

  • 快速排序算法平均速度比插入排序快
  • 堆排序在每一趟排序过程中,都会有一个元素放置在最终位置上
  • 在 10000 个无序的元素中查找最大的 10 个元素,使用快速排序最快
  • 插入排序是一种稳定的排序算法

解析:

参考下图即可排除 A,可选 D

img

堆排序是依照二叉树的性质构成大顶堆或者小顶堆。arr[i]>=arr[2i+1]&&arr[i]>=arr[2i+2] 或者改成<=。例如大顶堆,整个序列的最大值就是堆顶根节点,将其与末尾元素交换,末尾就是最大值(确定了最终位置),然后剩余的元素继续建堆逐渐确定剩余元素的最终位置,排除 B

故本题选 D

20 下列有关进程的说法中,错误的是

  • 进程与程序是一一对应的
  • 进程与作业是一一对应的
  • 进程是静态的
  • 进程是动态的过程

解析:

进程和程序之间可以形成一对一,一对多,多对一,多对多的关系。 A错误,可选

执行一条命令或运行一个应用程序时一对一
进程在执行过程中可以加在执行不同的程序一对多
以不同的参数或数据多次执行同一个程序多对一
并发地执行不同的应用程序多对多

进程是具有一定独立功能的程序关于某个数据集合上的一次运行运动,进程和程序的区别在于程序是静态的,而进程是动态的。 C 错误,可选

故本题选 ABC

21 以下有关Http协议的描述中,正确的有

  • post请求一般用于修改服务器上的资源,对发送的消息数据量没有限制,通过表单方式提交
  • HTTP返回码302表示永久重定向,需要重新URI
  • 可以通过206返回码实现断点续传
  • HTTP1.1实现了持久连接和管线化操作以及主动通知功能,相比http1.0有大福性能提升

解析:

301永久重定向 302 临时重定向,排除 B

故本题选 ACD

22 关于协程,下面说法正确是

  • 协程和线程都可以实现程序的并发执行
  • 线程比协程更轻量级
  • 协程不存在死锁问题
  • 通过channel来进行协程间的通信

解析:

协程(Coroutine,又称微线程)是一种比线程更加轻量级的存在,排除 B

协程间任务分配是分发式而非抢占式,所以不存在线程安全方面的问题,但没有死锁方面的特殊保护机制,还是存在死锁问题。排除 C

故本题选 AD

23 关于接口,下面说法正确的有

  • 只要两个接口则有相同的方法列表(次序不同不要紧),那么它们就是等价的,可以相互赋值
  • 如果接口A的方法列表是接口B的方法列表的子集,那么接口B可以赋值给接口A
  • 接口查询是否成功,要在运行期才能够确定
  • 接口赋值是否可行,要在运行期才能够确定

解析:

只要两个接口拥有相同的方法列表(次序不同不要紧),那么它们就是等价的,可以相互赋值。

go里面没有引用传递,只有值传递,故可以直接接口赋值

Go语言接口是否可以赋值,是在编译期就确定的。接口的查询是在运行期确定。如:

在接口类型进行赋值操作时,若类型不匹配,则编辑器就会提示错误,因此接口赋值操作是在编译期确定的

故本题选 ABC

24 关于数据库索引,以下说法错误的是

  • 针对某些字段建立索引,能够有效的减少相关数据库表的磁盘空间占用;

  • 针对某些字段建立索引,能够有效的提升相关字段的读与写的效率;

  • 常见数据库管理系统,通常使用hash表来存储索引;

  • 数据库索引的存在,可能导致相关字段删除的效率降低;

解析:

  • 索引需要额外的磁盘空间,为一索引页,包含着索引记录,每条索引记录包含键值和逻辑指针。A 可选

  • 针对某些字段建立索引,如果读写性能都能提高,那每个字段都建立索引,岂不是万事大吉,当然,不可能啦。B 可选

  • 常见数据库管理系统,通常使用 B 树相关(B+、B*)来存储索引

  • 数据库索引的存在,可能导致相关字段删除的效率降低;其增加了动态维护的成本,效率降低。D 排除

故本题选 ABC

25 请描述http请求get和post的区别,下面描述正确的有

  • GET用于信息获取,而且应该是安全的和幂等的,POST表示可能修改变服务器上的资源的请求

  • POST比GET安全,因为采用了SSL加密

  • GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据

  • POST提交,把提交的数据放置在是HTTP包的包体中,GET提交的数据会在地址栏中显示出来

解析:

  • 安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。换句话说, GET 请求一般不应产生副作用。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。
  • http没有采用加密技术,https采用了SSL加密
  • GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
  • 使用 Get 的时候,参数会显示在地址栏上,而 Post 不会,提交的数据放置在是HTTP包的包体中

故本题选 ACD

26 互联网接入系统内的负载均衡系统可以解决什么问题

  • 服务容灾
  • 健康检查
  • 横向扩容
  • 域名解析

解析:

本题答案较为不确定,自行判断。

  • 使用负载均衡时,您可以将负载均衡实例部署在支持多可用区的地域以实现同城容灾。通过该特性可实现当可用区机房发生故障时,负载均衡能在较短时间内,将前端访问流量切换到同一地域下的其它可用区,恢复服务能力。即服务容灾能力
  • 负载均衡器会定期向后端服务器发送请求以测试其运行状态,这些测试称为健康检查
  • 负载均衡系统可以根据业务发展需要,通过随时添加和移除ECS实例来扩展应用系统的服务能力,适用于各种Web服务器和应用服务器。即横向扩容能力。

域名解析是 DNS 服务器可以解决的问题。

故本题选 ABC

27 现有一数列(3,2.5.7.6.8),要求按升序排序,下面说法正确的是

  • 插入排序(从后向前)需要做6次比较

  • 快速排序,每次选择最后一个元素作为支点,需要比较5次

  • 快速排序,每次选择最后一个元素作为支点,需要比较9次

  • 快速排序,每次选择最后一个元素作为支点,需要比较12次

解析:

  • 直接插入排序,每次需要遍历一次数组,需要5+4+3+2+1=15次比较

  • 快速排序,选择最后一个元素为基,第一遍需要5次比较,第二趟对8的左侧进行快速排序,需要4次比较,结果使6,7交换,第三次在6的左侧快速排序,需要2次比较,第四次在5的左侧快排,需要1次比较,加起来5+4+2+1=12次

故本题选择 AD

总结

说实话,此次的结营测试并没有想象的那么困难,更像是大学里面的期中考内容,与实际的开发内容并没有相关,甚至内容都是基础,并非特别深入,需要久久思考的题目。本次全解析内容就是这样了,有什么问题,都可以指出了,欢迎大家友好讨论!

三连关注

这篇关于【题目解析】第六届字节后端青训营结营小测试全解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/457204

相关文章

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

在C#中合并和解析相对路径方式

《在C#中合并和解析相对路径方式》Path类提供了几个用于操作文件路径的静态方法,其中包括Combine方法和GetFullPath方法,Combine方法将两个路径合并在一起,但不会解析包含相对元素... 目录C#合并和解析相对路径System.IO.Path类幸运的是总结C#合并和解析相对路径对于 C

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

Java解析JSON的六种方案

《Java解析JSON的六种方案》这篇文章介绍了6种JSON解析方案,包括Jackson、Gson、FastJSON、JsonPath、、手动解析,分别阐述了它们的功能特点、代码示例、高级功能、优缺点... 目录前言1. 使用 Jackson:业界标配功能特点代码示例高级功能优缺点2. 使用 Gson:轻量

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines