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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 小伙伴们!快来看看结营解析答案,验证一下自己是不是前百分之七十吧!这部分都是根据个人经验和网上收集所得到的第六届青训营结营全解析,如果存在错误,也请在评论区友好讨论,让我们一起把这篇文章变得更加完美。

前言

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

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

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

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

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

划重点

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

详细解析

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

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 位寄存器,如下图(c)所示,则又可把 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 main

import (
  "fmt"
)

type S struct{
   
   }
func (s S) p(n int) S {
   
   
  fmt.Print(n)
  return s
}

func main() {
   
   
  var s S
  defer 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(nlog**2**n)
  • 快速排序选定一个基准值,通过一趟排序将待排分割成独立的两部分,前一部分均小于或等于基准值,后一部分大于基准值,然后对每个部分继续进行上述的重复操作,直到整个序列有序。最好的情况是基准值能够均衡分为两部分,最坏的就是只得到一个比上一次划分少一个记录的子序列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

总结

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

三连关注

目录
相关文章
|
15小时前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
70 1
|
6天前
|
监控 安全 Java
构建高效后端服务:微服务架构深度解析与最佳实践###
【10月更文挑战第19天】 在数字化转型加速的今天,企业对后端服务的响应速度、可扩展性和灵活性提出了更高要求。本文探讨了微服务架构作为解决方案,通过分析传统单体架构面临的挑战,深入剖析微服务的核心优势、关键组件及设计原则。我们将从实际案例入手,揭示成功实施微服务的策略与常见陷阱,为开发者和企业提供可操作的指导建议。本文目的是帮助读者理解如何利用微服务架构提升后端服务的整体效能,实现业务快速迭代与创新。 ###
28 2
|
11天前
|
测试技术 API 开发者
精通.NET单元测试:MSTest、xUnit、NUnit全面解析
【10月更文挑战第15天】本文介绍了.NET生态系统中最流行的三种单元测试框架:MSTest、xUnit和NUnit。通过示例代码展示了每种框架的基本用法和特点,帮助开发者根据项目需求和个人偏好选择合适的测试工具。
27 3
|
24天前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
19天前
|
Java 测试技术 程序员
「测试线排查的一些经验-上篇」&& 后端工程师
「测试线排查的一些经验-上篇」&& 后端工程师
14 1
|
25天前
|
Web App开发 安全 测试技术
软件测试的艺术:从代码审查到用户验收的全方位解析
【10月更文挑战第1天】本文旨在深入探讨软件测试的精髓,通过分析不同类型的测试方法—单元测试、集成测试、系统测试、性能测试和用户接受度测试,揭示其在软件开发生命周期中的重要性。我们将通过具体案例,展示如何运用这些测试技术来发现并修复关键缺陷,提高产品质量。同时,文章还将提供一系列最佳实践,帮助读者建立有效的测试策略,确保软件项目的成功交付。通过阅读本文,您将获得一套全面的软件测试知识体系,以及如何在实际应用中灵活运用这些知识,以提升软件开发的整体质量和效率。
49 2
ly~
|
26天前
|
域名解析 网络协议 Linux
如何测试 DNS 记录中的反向代理服务器是否生效?
本文介绍了三种测试反向代理服务器配置的方法。首先,通过命令行工具如 `ping`、`nslookup` 和 `dig` 检查域名解析是否指向正确的 IP 地址。其次,利用 Web 浏览器访问域名,验证页面加载正常且请求头信息无误。最后,借助网络抓包工具如 `Wireshark` 和 `tcpdump` 分析数据包,确保请求正确转发并返回预期响应。
ly~
60 2
|
30天前
|
机器学习/深度学习 存储 监控
深入解析软件测试中的自动化测试技术
本文旨在全面探讨软件测试中的自动化测试技术。通过对自动化测试的定义、优势、常见工具和实施步骤的详细阐述,帮助读者更好地理解和应用自动化测试。同时,本文还将讨论自动化测试的局限性及未来发展趋势,为软件测试人员提供有益的参考。
52 6
|
29天前
|
Java 测试技术 持续交付
软件测试的艺术:从代码审查到用户体验的全方位解析
在当今数字化时代,软件已成为我们生活中不可或缺的一部分。无论是社交媒体、在线购物还是移动支付,背后都离不开软件的支持。然而,随着软件功能的日益复杂和用户需求的不断提高,软件测试的重要性也愈发凸显。本文将探讨软件测试的各个方面,从代码审查到用户体验,全面解析如何确保软件质量,为用户提供更好的使用体验。
40 1
|
1月前
|
安全 测试技术 UED
软件测试的艺术:从代码审查到用户体验的全方位解析
在软件开发的宇宙中,测试是那颗最耀眼的星辰。它不仅仅是一种技术活动,更是一门艺术。本文将带你领略这门艺术的魅力,从细微的代码审查到宏大的用户体验设计,揭示软件测试如何塑造出更加完美的数字世界。
42 4

推荐镜像

更多