Skip to content

常面常新-1015

冒泡排序

冒泡排序是一种简单的排序算法,它通过重复遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。 遍历数列的工作是重复进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

算法步骤:

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  • 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

B 树和 B+树

B 树(B+-Tree)

B 树是一种平衡的多路搜索树,它具有以下特点:

  • 平衡性:所有叶子节点都位于同一层,这意味着从根到叶子的最长路径是相同的。

  • 多路分支:每个节点可以有多个子节点,子节点的最大数量通常表示为 m,最小数量为m/2(在一些变种中,最小量可以是 ceil(m/2)floor(m/2) + 1

  • 有序性:节点中的键值是有序的,并且每个键值的左子树中的所有值都小于它,右子树中的所有值都大于它。

  • 键值分布:键值既可以出现在内部节点,也可以出现在叶子节点。

  • 查找效率:由于树是平衡的,查找操作的最坏情况时间复杂度为 O(log n),其中 n 是树中键值的数量。

  • 动态调整:当插入或删除操作导致节点中的键值数量超出限制时,节点会分裂或合并以保持树的平衡。

B+树(B+-Tree)

B+树是B树的一种变体,它具有以下特点:

  • 非叶子节点不存储数据:与B树不同,B+树的所有数据都存储在叶子节点中,非叶子节点只存储键值和子节点的针。

  • 更大的节点容量:由于非叶子节点不存储数据,B+树的非叶子节点可以有更多键值,这意味着树的高度可以更低对于大量数据的存储和检索,这可以提高效率。

  • 所有叶子节点相连:B+树的叶子节点通过指针相连,形成一个链表,这使得范围查询更加高效。

  • 查询性能:由于所有数据都存储在叶子节点,并且叶子节点之间是相连的,B+树非常适合执行范围查询。

  • 写操作的挑战:由于数据只存储在叶子节点,插入和删除操作可能需要更多的分裂和合并操作,尤其是在树的上节点。

  • 空间效率:由于非叶子节点不存储数据,B+树可以更有效地使用存储空间,尤其是在页式存储系统中。

B 树与 B+树的比较

  • 查询性能:B+树在范围查询中表现更好,因为可以通过叶子节点的链表快速遍历。而B树在点查询中可能更有势,因为可以在任何级别的节点中找到键值。

  • 存储效率:B+树由于非叶子节点不存储数据,可以有更高的存储效率。

  • 更新操作:B 树在更新操作(插入和删除)中可能更有优势,因为可以在任何级别的节点中进行。

  • 应用场景:B+树通常用于数据库和文件系统的索引,因为它们提供了更好的范围查询性能。B树则适用于需要平点查询和范围查询的场景。

TCP 和 UDP

TCP(传输控制协议)和UDP(用户数据报协议)是两种主要的传输层通信协议:

  • TCP 提供面向连接的、可靠的字节流服务。它确保数据正确无误地从源传送到目的地。TCP通过三次握手建立连接,提供数据包排序、确认和重传机制,确保数据的完整性和顺序性。

  • UDP 提供无连接服务,它在发送数据前不建立连接。UDP发送的是数据报,它不保证数据的到达、顺序或完整性。UDP适用于对实时性要求高的应用,如视频流和在线游戏。

GET 和 POST 的区别

GETPOSTHTTP协议中的两种请求方法,它们在用途和行为上有所不同:

  • GET 请求用于从服务器检索数据。它应该是幂等的,意味着多次执行相同的GET请求应该得到相同的结果,并且不会产生副作用。GET 请求的数据通常附加在URL之后,以查询字符串的形式发送。

  • POST请求用于向服务器发送数据进行处理,比如上传文件或提交表单。POST 不是幂等的,多次执行相同的 POST请求可能会产生不同的结果,比如多次提交表单可能会导致多次数据插入。POST请求的数据通常在请求体中发送。

数据库索引

  • 主键索引(Primary Key‌):唯一的标识,主键不可重复,且只能有一个列作为主键。

  • 唯一索引(Unique Key): 也称为普通索引,用于提高查询效率,但可能会降低更新表的性能。

  • 常规索引(Key/Index): 默认的,使用Index或者Key关键字来设置。

  • 哈希索引:适用于等值查询,但不适用于范围查询。

  • 全文索引:用于文本搜索,支持复杂查询,如模糊查询和多关键字查询。

  • B-Tree索引:最常用的索引类型,适用于全键值、键值范围和键值前缀查找。

  • B+Tree索引:在许多现代数据库系统中广泛使用,特别是对于大量数据的读操作。

数据库Groupby是怎么做到的

  1. 查询解析:当执行包含GROUP BY子句的查询时,数据库首先解析查询,确定要分组的列和聚合函数。

  2. 排序数据:数据库对GROUP BY子句中指定的列进行排序,以确保具有相同值的行彼此相邻。这一步是必要的,因为分组是在排序的基础上进行的。

  3. 分组:数据库遍历排序后的数据,根据GROUP BY列的值将数据分成多个组。每个唯一的值对应一个组。

  4. 应用聚合函数:对于每个组,数据库应用聚合函数(如SUM, COUNT 等)来计算组的汇总值。

  5. 返回结果:数据库将每个组的聚合结果作为一个新的行返回,形成一个结果集。

如有转载或 CV 的请标注本站原文地址