12 2022 档案

摘要:1. 定义 如果查找关键字时不需要比较就可以获得需要记录的存储位置,这就称作【散列技术】。它是在记录的存储位置和它的关键字之间建立一个确定的对应关系 f,使得每个关键字 key 对应一个存储位置 f(key)。把这种对应关系 f 称为【散列函数】,又称【哈希(hash)函数】,采用散列技术将记录存储 阅读全文
posted @ 2022-12-31 18:56 Leaos 阅读(151) 评论(0) 推荐(0)
摘要:1.表级锁&行级锁 数据库中的锁通常分为两种: 表级锁:对整张表加锁。开销小,加锁快,不会出现死锁。但是锁的粒度大,发生锁冲突的概率高,并发度低。 行级锁:对某行记录加锁。开销大,加锁慢,会出现死锁。但是锁的粒度小,发生锁冲突的概率低,并发度高。 2.排它锁&共享锁 排它锁(Exclusive):又 阅读全文
posted @ 2022-12-22 20:08 Leaos 阅读(110) 评论(0) 推荐(0)
摘要:1.错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,可以首先查看此日志。 mysqld 使用错误日志名 host_name.err 并默认在参数 DATADIR( 阅读全文
posted @ 2022-12-22 20:04 Leaos 阅读(41) 评论(0) 推荐(0)
摘要:1.冒泡排序 特点:相邻元素两两比较,把值大的元素往下交换。 缺点:冒泡排序的时间复杂度太高 冒泡排序的过程如下图所示,其展示了一趟排序的过程,在下一趟的排序过程中,最后一个排序完成的元素无需进行遍历,重复此过程,直到整个数组排序完成: 其实现代码如下: void bubbleSort(vector 阅读全文
posted @ 2022-12-22 19:59 Leaos 阅读(72) 评论(0) 推荐(0)
摘要:1. 二叉堆 1.1 二叉堆的定义 二叉堆在逻辑上是一颗完全二叉树,而在存储方式上还是用数组进行存储的。二叉堆具有如下性质,如果当前节点在数组中的索引为 ,那么有: 其左子节点在数组中的索引为 $2i+1$; 其右子节点在数组中的索引为 $2i+2$; 其父节点在数组中的索引为 $(i-1)/2$; 阅读全文
posted @ 2022-12-22 01:24 Leaos 阅读(87) 评论(0) 推荐(0)
摘要:Nginx 源码版本: 1.13.1 Nginx 内存池的定义主要位于如下两个文件中: ngx_palloc.h ngx_palloc.c 首先是几个重要的宏定义: #define NGX_MAX_ALLOC_FROM_POOL (ngx_pagesize - 1) #define NGX_DEFA 阅读全文
posted @ 2022-12-20 01:14 Leaos 阅读(473) 评论(0) 推荐(0)
摘要:二分搜索算法适用于有序数组。如果按照暴力搜索算法,那么需要从头到尾遍历数组元素,时间复杂度为 O(n),而如果使用二分搜索,那么其时间复杂度为 O(logn),根据时间复杂度曲线图可知,二分搜索的算法效率要优于线性查找。 二分搜索的实现可以分为非递归和递归两种。 1. 非递归版本 如果使用非递归版本 阅读全文
posted @ 2022-12-17 20:12 Leaos 阅读(132) 评论(0) 推荐(0)
摘要:空间配置器 allocator 只是基层内存配置/释放行为的一层薄薄的包装,没有任何效率上的强化。一般而言,C++ 内存配置操作和释放操作如下: class Foo{ ... }; Foo* pf = new Foo; // 配置内存,然后构造对象 delete pf; // 将对象析构,然后释放内 阅读全文
posted @ 2022-12-15 21:08 Leaos 阅读(84) 评论(0) 推荐(0)
摘要:1. 栈的实现 特点:先进后出、后进先出 1.1 顺序栈 顺序栈是依赖数组实现的。 其代码实现如下: class SequenceStack { public: SequenceStack(int size = 10); ~SequenceStack(); public: // 入栈 void pu 阅读全文
posted @ 2022-12-14 14:06 Leaos 阅读(86) 评论(0) 推荐(0)
摘要:1. 链表实现 特点: 每一个节点都是在堆内存上独立 new 出来的,节点内存不连续。即逻辑地址连续,而物理地址不连续。 优点: 内存利用率高,不需要大块连续内存 插入和删除节点不需要移动其它节点,时间复杂度 O(1) 不需要专门进行扩容操作 缺点: 内存占用量大,每一个节点多出存放地址的空间 节点 阅读全文
posted @ 2022-12-13 23:19 Leaos 阅读(236) 评论(0) 推荐(0)
摘要:1.数组实现 数组的特点:内存是连续的,即物理地址是连续的。 优点: 随机访问的时间复杂度为 O(1); 末尾位置增加元素的时间复杂度为 O(1); 访问元素前后相邻位置的元素非常方便; 缺点: 非末尾位置增加元素需要进行大量的数据移动,时间复杂度为 O(n); 搜索的时间复杂度: 无序数组采用线性 阅读全文
posted @ 2022-12-12 22:31 Leaos 阅读(68) 评论(0) 推荐(0)
摘要:概述 访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。例如处方单中的各种药品信息就是被访问的元素,而划价人员和药房工作人员就是访问者。访问者模式使得用户可以在不修改现有系统的情况下扩展 阅读全文
posted @ 2022-12-11 17:31 Leaos 阅读(256) 评论(0) 推荐(0)
摘要:概述 模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中,在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行 阅读全文
posted @ 2022-12-08 16:14 Leaos 阅读(59) 评论(0) 推荐(0)
摘要:概述 在策略模式中,可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法。在这里,每一个封装算法的类都可以称之为一种策略(Strategy),为了保证这些策略在使用时具有一致性,一般会提供一个抽象的策略类来做规则的定义,而每种算法则对应于一个具体策略类。 策略模式的主要目的是将算法的定义 阅读全文
posted @ 2022-12-06 21:25 Leaos 阅读(53) 评论(0) 推荐(0)
摘要:概述 状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式。状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化。对于客户端而言,无须关心对 阅读全文
posted @ 2022-12-04 09:38 Leaos 阅读(52) 评论(0) 推荐(0)
摘要:概述 观察者模式是使用频率最高的设计模式之一,用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要 阅读全文
posted @ 2022-12-03 10:57 Leaos 阅读(83) 评论(0) 推荐(0)
摘要:概述 备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原。当前很多软件都提供了撤销(Undo)操作,其中就使用了备忘录模式。 备忘录模式定义如下:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对 阅读全文
posted @ 2022-12-02 10:12 Leaos 阅读(114) 评论(0) 推荐(0)
摘要:概述 如果在一个系统中对象之间的联系呈现为网状结构,如下图所示。对象之间存在大量的多对多联系,将导致系统非常复杂,这些对象既会影响别的对象,也会被别的对象所影响,这些对象称为同事对象,它们之间通过彼此的相互作用实现系统的行为。在网状结构中,几乎每个对象都需要与其他对象发生相互作用,而这种相互作用表现 阅读全文
posted @ 2022-12-01 17:55 Leaos 阅读(97) 评论(0) 推荐(0)