主页

数据库

事务的ACID特性 事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元。事务是DBMS中最基础的单位,事务不可分割。 事务具有4个基本特征,分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Duration),简称ACID。 原子性:事务被视为不可分割的最小单元,事物的所有操作要不成功,要不失败回滚,而回滚可以通过日志来实现,日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作。(原子性实现原理 - Undo Log) 一致性:数据库在事务执行前后都保持一致性状态,在一致性状态下,所有事务对一个数据的读取结果都是相同的。 隔离性:一个事务所做的修...

阅读更多

算法与数据结构

常见算法类型 排序算法(冒泡、插入、选择、快排、希尔、堆排、归并、桶排、基数、计数)、字符串操作、数组操作、递归、回溯、分治、动态规划等 如何准备算法可见历史文章:进入BAT和字节跳动最难的一关,手撕代码! 排序算法 十大经典排序算法(动图演示) 冒泡排序 快速排序 void QSort(vector<int> &arr, int left, int right) { if (left >= right) return; int low = left; int high = right; int key = arr[left]; while (left...

阅读更多

操作系统

进程、线程、协程 进程是操作系统资源分配的最小单位,线程是cpu调度的最小单位。 进程有独立的系统资源,而同一进程内的线程共享进程的大部分系统资源,包括堆、代码段、数据段,每个线程只拥有一些在运行中必不可少的私有属性,比如tcb,线程Id,栈、寄存器。 一个进程崩溃,不会对其他进程产生影响;而一个线程崩溃,会让同一进程内的其他线程也死掉。 进程在创建、切换和销毁时开销比较大,而线程比较小。进程创建的时候需要分配系统资源,而销毁的的时候需要释放系统资源。进程切换需要分两步:切换页目录、刷新TLB以使用新的地址空间;切换内核栈和硬件上下文(寄存器);而同一进程的线程间逻辑地址空间是一样的,不需要切换页目录、刷新TLB。 进程间通信比较复杂,而同一进程的线程由于共享代...

阅读更多

Redis

1、数据结构 1.1 SDS:Simple Dynamic Strings typedef char *sds; /* Note: sdshdr5 is never used, we just access the flags byte directly. * However is here to document the layout of type 5 SDS strings. */ struct __attribute__ ((__packed__)) sdshdr5 { unsigned char flags; /* 3 lsb of type, and 5 msb of string length */ char buf[]; }; struct __a...

阅读更多

ubuntu 18.04 源更换

cp /etc/apt/sources.list /etc/apt/sources.list.bak cd /etc/apt vim sources.list 1、阿里源文件内容如下: deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multi...

阅读更多

算法框架模版

BFS算法框架 // 计算从起点 start 到终点 target 的最近距离 int BFS(Node start, Node target) { Queue<Node> q; // 核心数据结构 Set<Node> visited; // 避免走回头路 q.offer(start); // 将起点加入队列 visited.add(start); int step = 0; // 记录扩散的步数 while (q not empty) { int sz = q.size(); /* 将当前队列中的所有节点向四周扩散 */ for (int i = 0; i &l...

阅读更多

OpenMP

原文链接:https://hpc.llnl.gov/tuts/openMP/ 1、摘要 OpenMP 是一个应用程序接口(API),由一组主要的计算机硬件和软件供应商联合定义。OpenMP 为共享内存并行应用程序的开发人员提供了一个可移植的、可伸缩的模型。该API在多种体系结构上支持 C/C++ 和 Fortran。本教程涵盖了 OpenMP 3.1 的大部分主要特性,包括用于指定并行区域、工作共享、同步和数据环境的各种构造和指令。还将讨论运行时库函数和环境变量。本教程包括 C 和 Fortran 示例代码以及一个实验练习。 水平/先决条件:本教程非常适合那些刚接触 OpenMP 并行编程的人。需要对 C 语言或 Fortran 语言中的并行编程有基本的了解。对于那些通常不熟悉并行...

阅读更多

C++11

C++11线程 用函数方式起一个线程 #include <thread> void ThreadFunc() { std::cout << "函数线程开始" << std::endl; std::cout << "函数线程结束" << std::endl; } int main() { std::thread t(ThreadFunc); // 创建一个线程并开始执行 t.join(); //主线程等待当前线程执行完成再退出 //t.detach(); //主线程和当前线程一起执行 std::cout << "main 函数" <<...

阅读更多