- 博客(50)
- 收藏
- 关注
原创 error: insufficient permission for adding an object to repository database .git/objects
error: insufficient permission for adding an object to repository database .git/objectserror: Error building trees
2023-02-18 10:00:00 944 1
原创 C++11 线程异步
1. 线程异步的概念、2. future、2.1 共享状态、2.2 常用成员函数、3. promise、3.1 常用成员函数、3.2 promise的基本使用、4. package_task、4.1 常用成员函数、4.2 package_task的基本使用、5. async、5.1 async的基本使用、6. promise、package_task、async的对比与总结
2023-01-05 15:30:00 1724
原创 C++11 线程池及其三种优化
C++11 简单线程池、优化1 - 支持任意类型任务、优化2 - 支持可变参数、优化3 - 通过future获取任务函数的返回值
2023-01-03 17:08:24 836
原创 C++ using的三种用法详解
1. using声明(引入单个名称)、2. using指示(引入命名空间)、3. 类型重定义(替代typedef)
2022-11-22 09:52:13 10077 1
原创 Skiplist跳表详解及其模拟实现
1.跳表的概念、2.Skiplist在插入时采用随机层数的方法是如何保证效率的呢?、3.跳表的模拟实现、4.跳表VS平衡搜索树和哈希表
2022-10-24 14:19:21 686 1
原创 MySQL详解 --- 聚合与分组
聚合函数、count的使用细节、group by用法、分组查询、where与having、SQL中的关键字的执行顺序!
2022-06-21 10:18:09 2001 2
原创 MySQL详解 --- 表的基本操作
1. 创建表、2. 查看表的结构、3. 修改表、3.1 修改列(※)、3.2 修改表名、3.3 删除表、3.3 删除表
2022-05-10 15:05:41 482 1
原创 MySQL详解 --- 库的基本操作
1. 创建数据库、Extra: 字符集与校验规则、2. 操纵数据库、2.1 查看数据库、2.2 显示创建语句、2.3 修改数据库、2.4 删除数据库、3. 查看连接情况
2022-05-08 16:56:32 473 2
原创 Linux详解 --- 多线程5: 线程池及其模拟实现
线程池: 线程池的模拟实现、线程池测试 线程池是一种线程的使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时 创建与销毁线程的代价。线程池不仅能保证内核的充分利用,还能防止过度调度。
2022-05-05 18:29:07 692 2
原创 C++11 多线程操作 (线程控制、互斥锁、条件变量、原子操作、自旋锁)
文章目录1. thread1.1 线程创建1.2 join与detach1.3 std::this_thread命名空间1.3.1 get_id1.3.2 yield1.3.3 sleep_for1.3.4 sleep_until1.3.5 yield vs sleep_for2. mutex2.1 mutex2.2 recursive_mutex2.3 timed_mutex2.4 recursive_timed_mutex3. lock3.1 lock_guard3.2 unique_lock4. 条件
2022-05-03 15:14:01 2260 18
原创 数据库常见约束类型(操作详解)
MySQL约束类型、主键(创建主键、删除主键)、自增长、唯一键(创建唯一键、删除唯一键)、外键(创建外键、删除外键)、空属性、默认值、零填充、列描述
2022-05-01 15:31:22 2468 1
原创 Linux详解 --- 多线程4: POSIX信号量、基于环形队列的生产消费者模型
POSIX信号量、基于环形队列的生产消费者模型 POSIX信号量与SystemV信号量的作用相同,都是能进行同步操作,以达到无冲突的访问共享资源的目的。除此以外,POSIX可以用于线程间的同步。问题:什么是信号量?信号量(信号灯),本质就是一个计数器!它是描述临界资源有效个数的计数器!问题:为什么要使用信号量?信号量将临界资源看成多份,在不冲突的部分,可以提高效率(让线程处于并行)。//二元信号量(0和1) “等价于” mutex互斥锁问题:如何对信号量进行操作?
2022-04-30 16:35:31 436
原创 数据库设计的三大范式(举例详解)
数据库设计的三大范式。为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就被称为范式。范式是符合某一种设计要求的总结。因此要设计一个结构合理的关系型数据库,就必须要满足下面这三大范式。
2022-04-26 20:17:25 5811 2
原创 Linux详解 --- 多线程2: 线程互斥(互斥量的使用与原理、线程安全与可重入函数、死锁)
线程互斥、互斥量的使用、互斥量的原理、线程安全与可重入函数、死锁、死锁的4个必要条件、预防死锁的措施、避免死锁的算法
2022-04-12 14:44:50 941
原创 Linux详解 --- 多线程1 (线程理解、线程创建、线程终止、线程等待、线程分离)
线程理解、线程与进程、线程的优缺点、线程的私有数据与公有数据、线程创建、线程的查看、线程ID及获取、线程ID与LWP、线程终止、线程等待、线程分离
2022-03-29 16:14:03 916
原创 C++智能指针详解(auto_ptr、unique_ptr、shared_ptr)
智能指针的应用场景、智能指针的介绍、智能指针的使用与原理、auto_ptr、unique_ptr、shared_ptr、shared_ptr与线程安全、shared_ptr的循环引用、weak_ptr解决循环引用、智能指针与定制删除器、lock与RAII、内存泄漏
2022-02-24 15:32:06 2320 19
原创 Linux详解 --- 信号(捕捉信号、保存信号、处理信号、用户态与内核态的转化)
信号的理解:信号产生之前、信号产生时、处理信号信号的种类、捕捉信号->signal函数、sigaction函数信号产生的方式、保存信号、信号在内核中的结构、信号集操作函数、处理信号、处理信号的时机、用户态与内核态、用户态与内核态的转化、处理信号的过程
2022-02-10 15:47:49 3803 56
原创 Linux详解 --- 进程间通信2 (共享内存、信号量)
共享内存:共享内存的查看及删除、共享内存建立的过程、申请共享内存、将共享存、挂接到进程地址空间中、'去'关联共享内存、释放共享内存、如何使用共享内存信号量
2022-02-06 17:44:38 1928 50
原创 C++异常详解
C语言中处理错误的方式与缺陷、C++异常的介绍、C++异常关键字、异常的使用、异常的抛出和匹配原则、异常的重新抛出、自定义异常体系、异常安全、异常规范、C++标准库的异常体系、异常的优缺点
2022-01-30 17:53:19 2275 30
原创 Linux详解 --- 进程间通信1 (匿名管道与命名管道)
进程间通信的思维导图一览、进程间通信的种类、进程间通信的原理、管道的特点、匿名管道与命名管道的介绍与使用、管道的读写规则
2022-01-28 16:50:32 4387 52
原创 Linux详解 --- 动静态库的原理与制作
动静态库的识别、动静态库的原理、动静态库的优缺点、静态库动态库制作/打包 动静态库与使用静态库的制作、静态库的使用、动态库的制作、动态库的使用外部库
2022-01-23 20:33:51 666 32
原创 Linux详解 --- 文件系统 (inode与软硬链接)
文件系统(Ext2文件系统)、inode详解、文件操作的本质(文件的创建、写入、删除、拷贝、剪切)、目录与文件、软硬链接的本质与操作
2022-01-13 12:31:21 2026 33
原创 Linux详解 --- 系统文件IO操作与文件描述符
Linux中的IO操作(思维导图一览)语言IO操作与系统IO操作文件描述符详解与底层结构
2022-01-10 12:36:12 3175 34
原创 Linux详解 --- 进程管理3 (进程创建、进程终止、进程等待、进程替换)
进程相关操作:进程创建、进程终止、进程等待、进程替换fork函数用法与参数详解、fork与写时拷贝、进程退出码、exit与return、wait与waitpid、进程替换exec系列函数
2022-01-07 18:53:10 1911 21
原创 Linux详解 --- 进程管理2 (进程状态、环境变量与命令行参数)
进程状态:R、S、D、T、X、Z 的介绍僵尸进程的危害 / 如何避免僵尸进程?环境变量的相关指令、环境变量的导入与使用、环境变量的组织结构命令行参数与环境变量
2022-01-05 19:00:01 2462 35
原创 Linux详解 --- 进程管理1 (进程概念 / 进程优先级)
进程管理思维导图一览本文:进程概念、进程控制块(PCB)、进程优先级与优先级的设置
2022-01-04 19:26:17 1549 19
原创 模板详解 --- 模板的特化与分离编译
文章目录模板的特化函数模板的特化类模板的特化类模板的全特化类模板的偏特化模板的分离编译模板的特化模板的特化就是指:对模板的某一具体类型,做与原模板不一样的处理。函数模板的特化template <class T>bool isEqual(T x1, T x2){ return x1 == x2;}//函数模板的特化template <>bool isEqual<char*>(char* str1, char* str2){ return !str
2021-08-18 11:50:03 565 2
原创 模板详解 --- 函数模板与类模板
我们为什么要使用模板?C++使用模板的目的是为了解决C语言中无法解决的一个关键问题。假如在C语言中我们在一个源文件里面写了一个栈,现在要求你使用同一个栈的类型去创建2个栈,一个栈中的数据存储int类型,另一个存储double类型。你会发现你没办法实现这个功能。然而在C++中,我们可以通过使用类模板,同时实例化出一个int类型的栈和一个double类型的栈。除此之外,使用模板是符合泛型编程的理念的。模板是干什么的?模板就是如字面意思一样,它只是一个模板,但是当我们使用函数模板/类模板去实例化对象的时候,编
2021-07-17 20:54:27 1352 2
原创 程序的环境与函数重载
在ANSI C的实现中,存在2种环境:翻译环境和运行环境。翻译环境在翻译环境下,程序的编译可以被分为编译和链接2个部分,其中编译还可以被分为预处理、编译、汇编。下图是程序的编译过程。组成一个程序的每个源文件通过编译器的编译最终都会变成其对应的目标代码 每个目标文件由链接器捆绑在一起,最终形成一个单一且完整的可执行程序 链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库, 将其需要的函数也链接到程序中编译和链接接下来再通过一张图去概括编译.
2021-04-04 20:12:12 2696 7
原创 TopK问题的三种解法
TopK问题是指从n个数据中取前K个数据,在生活中的应用也有很多,如游戏中xxx的排行榜前10名等。在这篇博客中我将主要利用堆去解决TopK问题。堆排序首先我们需要建一个堆,然后我们再进行堆排序,排好序后直接取前K个就可以了。需要注意的是在使用堆排序的时候,我们需要确定我们要排升序还是降序。如果是升序的话,我们要建一个大根堆;如果是降序的话,我们要建一个小根堆。思路:(可以结合图来进行分析) 这里我们以排降序为例子进行说明,建好小根堆后,我们将堆顶元素与堆中的最后一个元素进行互换 (让最小的元素..
2021-03-19 16:33:04 5864 9
原创 结构体,位段,枚举和联合的使用详解
结构体谈到结构体,我们会关注结构体的声明,结构体的自引用和结构体的大小等问题。接下来我们主要来分析一下结构体的大小是如何计算的,而结构体的大小又是与结构体中的内存对齐息息相关,我们通过对结构体中的内存对齐进行分析来得到结构体的大小。结构体中的内存对齐结构体中的内存对齐原则:第1个成员在与结构体变量偏移量为0的地址处。 从第2个成员开始,就要对齐到“对齐数”的整数倍的地址处了 对于嵌套了结构体的结构体,嵌套的结构体要对齐到 自己的最大对齐数 的整数倍处 结构体的总大小是 最大对齐数 的
2021-03-08 11:05:47 1119 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人