自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 vector的日常使用

在编程题中,遇到输入要求多行数据时,之前是采用二维数组保存数组,但是空间的开辟总是未知的,或多或少也不合适。数组的越界问题会导致程序的奔溃,而且数组的动态性不好。vector内存的特点是可变大小的,尾部插入删除元素的效率还是很高的。顺便一提,迭代器的失效问题:在向容器添加元素后:如果是vector或string,插入元素且存储空间被重新分配,则指向容器的迭代器、指针和引用都会失效;...

2018-09-08 12:15:20 275

原创 main函数前后做了什么

__start:     :     init stack;     init heap;     open stdin;     open stdout;     open stderr;     :     push argv;     push argc;     call _main; (调用 main)     :     destory heap; ...

2018-09-04 17:33:13 1130

原创 golang结构体偷懒初始化

运行一段程序,警告:service/mysqlconfig.go:63::error: golang.guazi-corp.com/tools/ksql-runner/model.CreatingMysqlMongodbRecord composite literal uses unkeyed fields (vet)其中,composite literal uses unkeyed f...

2018-08-22 14:38:21 13896

原创 Go Stack Trace

package mainimport "fmt"type trace struct{}func main() { slice := make([]string, 2, 4) var t trace t.Example(slice, "hello", 10)}func (t *trace) Example(sli...

2018-07-13 09:44:18 327

原创 并发

Go语言的并发是是指goroutine运行时是相互独立的,能让某个函数独立于其他函数运行。并发不是并行。并行是让不同的代码片段同时在不同的物理处理器上执行。并行的关键是同时做很多事情,而并发是指同时管理很多事情,这些事情可能只做了一半就被暂停去做别的事情了。Go的并发同步模型来自通信顺序进程(Communicating Sequential Processes,CSP)的范型。CSP是一种消息传递...

2018-07-11 17:44:44 193

原创 go的随机性

go执行的随机性和闭包谁也不知道最后执行之后打印的结果是什么样,但是A:均是10 B:从0-9顺序不定。 第一个go func中i是外部for的一个变量,地址不变化。遍历完成后,最终i=10。 故go func执行时,i的值始终是10。 第二个go func中i是函数参数,与外部for中的i完全是两个变量。 尾部(i)将发生值拷贝,go func内部指向值拷贝地址。func main() { ...

2018-07-11 11:38:31 344

原创 内存管理之slab分配器

STL中的空间配置器采用一、二级配置器进行内存管理,当配置区块    在一级配置器中,allocate()直接使用malloc(),deallocate()直接使用free(),对于内存不足的情况,模拟C++的set_new_handler()机制;      在二级配置器中,首先会维护16个自由链表(free lists),负责16种小型区块的次配置能力;如果内存不足,转调一级配置器中的set_...

2018-06-20 20:57:29 815 1

原创 Linux内存管理

1.页    Linux的内核把物理页作为内存管理的基本单位。而视窗操作系统中的基本单位是进程和线程,与Linux的不同。    内存管理单元(MMU):管理内存并把虚拟地址转换为物理地址的硬件。MMU通常以页为单位来管理系统中的页表。当然,页的大小在不同的体系结构下是不同的0.32位一般支持4KB的页,而64位支持8KB的页。    Linux内核中用struct page结构体类型表示系统中的...

2018-06-20 16:15:32 278

原创 epoll源码剖析

(主要基于Linux-2.6.11.12版本进行分析。)1. 主要数据结构struct eventpoll { /* Protect the this structure access */ rwlock_t lock; /* * This semaphore is used to ensure that files are not removed * while epoll is...

2018-06-09 21:11:34 695 1

原创 poll源码剖析

Poll系统调用,是在指定时间内轮询一定数量的文件描述符,以测试是否有就绪者。函数原型:int poll (struct poddfd *fds, nfds_t nfds, int timeout); · fds参数是一个pollfd结构类型的数组,指定所有感兴趣的文件描述符上发生的可读,可写和异常等事件。· nfds参数指定被监听事件集合fds的大小。    typede...

2018-06-09 16:09:05 1527

原创 Linux内核同步方法——互斥锁

互斥锁“互斥体(互斥)”指的是任何可以睡眠的强制互斥锁,比如计数是1的信号量。    也就是说,互斥体是一种互斥信号。    互斥在内核中对应数据结构互斥,其行为和使用计数为1的信号量类似,因为是直接调用的信号量的操作接口,实现更高效,而且使用限制更强。也就是一个简化版的信号量,因为不需要管理任何使用计数。#define MUTEX_DEFAULT 0x0typedef struct sema...

2018-06-08 16:30:23 1265

原创 Linux内核同步方法——自旋锁(spin lock)

自旋锁    Linux的的内核最常见的锁是自旋锁。自旋锁最多只能被一个可执行线程持有。如果一个执行线程试图获得一个被已经持有(争用)的自旋锁,那么该线程就会一直进行忙循环-旋转-等待锁重新可用要是锁未被争用,请求锁的执行线程就可以立即得到它,继续执行。    在任意时间,自旋锁都可以防止多于一个的执行线程同时进入临界区。同一个锁可以用在多个位置,例如,对于给定数据的所有访问都可以得到保护和同步。...

2018-06-08 16:20:37 30794 2

原创 Linux内核同步方法——读写锁

读 - 写自旋锁    一个或多个任务可以并发地持有读者锁;相反,用于写的锁最多只能被一个写任务持有,而且此时不能有并发地读操作。   读/写锁也叫做共享/排斥锁,或者并发/排斥锁,因为这种锁对读者而言是共享地,对写者以排斥形式获取地。基本数据结构    在内核代码中,读-写自旋锁用rwlock_t类型表示,typedef struct { /** * 这个锁标志与自旋锁不一样,自旋锁的lo...

2018-06-08 13:49:15 4794

原创 Linux内核同步方法——信号量

信号量    Linux中的信号量是一种睡眠锁。    如果有一个 任务试图获得一个不可用(已经被占用)的信号量是,信号量将会将其推进一个等待队列,然后让其睡眠。这时处理器能重获自由,从而去执行其他代码。当持有的信号量可用(被释放)后,处于等待队列的哪个任务将被唤醒,并获得该信号量。    举个门和钥匙的例子,当某个人到了门前,拿到钥匙,然后进入房间。最大的差异在于,当另一个人来到门前,但无法得到...

2018-06-03 16:48:49 3590 1

原创 64位Linux下的地址映射

IA32-e模式下地址映射之前写过,32位Linux虚拟地址映射,讨论了在CPU 80386下的虚拟地址映射。看过博主的《Linux内核在x86_64 CPU中地址映射》,对32位和64位下地址映射的区别做了一些总结。---------------------------------------------------------------------------1. x86_64CPU中逻辑地...

2018-06-02 17:57:54 9444

原创 select系统调用源码分析

select系统调用主要对select调用过程进行一些总结,后边也会跟着poll和epoll的一系列分析。对于分析select的源码版本是2.6.11.12。select系统调用的用途是:在一段指定时间内,监听用户感兴趣的文件描述符上的可读、可写和异常等事件。1. select系统调用的原型如下:#include <sys/select.h>int select( int nfds,...

2018-05-18 21:34:25 1055 1

转载 字符串匹配之KMP

KMP算法学习了数据结构之后,对KMP算法一直不是特别深入理解,在《大话数据结构》中,连续大量的篇幅叙述,读起来特别费劲。直到同学推荐,读了阮一峰博主的文章之后,才对 KMP算法真正理解,写的特别好,自己就在这里做个小总结。http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorit...

2018-04-30 14:49:58 160

原创 事务

主要整理总结关于事务以及事务处理技术,数据库恢复以及并发控制所带来的问题。事务:一系列数据库操作,是数据库应用程序的基本逻辑单元。 事务是恢复和并发控制的基本单位。在关系型数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。对于事务和程序的区别主要在于:一个程序中包含多个事务。定义事务的语句一般有三条:BEGIN TRANSACTION; ...

2018-04-04 15:01:42 949

原创 关系型与非关系型数据库

以下主要对关系型数据库和非关系型数据库进行了比较。 参考《数据库系统概论》,《深入浅出MySQL》 以及博客https://blog.csdn.net/lijinqi1987/article/details/51823506关系型数据库:书中的解释是:在实体以及实体间的联系用关系来表示,在一个给定的应用领域中,所有关系的集合构成一个关系数据库。关系数据库的值是这些关系模式的某一...

2018-04-03 21:52:42 227

原创 MySQL索引

索引1. 什么是索引创建在表上,是对数据库表中一列或多列的值进行排序的结构。 用于快速查询数据库表中的特定记录,可提高查询速度。 不同的存储引擎定义了每个表的最大索引数和最大索引长度。所有存储引擎对每个表至少支持 16个索引,总索引长度至少256字节。 2.分类2.1 聚簇索引和非聚簇索引聚簇索引数据的物理存放顺序和索引顺序是一致的; ...

2018-04-02 21:27:45 191

原创 MySQL日志

MySQL日志记录MySQL数据库运行期间的日常操作、客户端连接情况、SQL语句的执行情况和错误信息的文件。当数据库遭到意外损害时,可通过日志文件来查询出错原因,可通过日志文件进行数据恢复。例如,一个名为huang的用户登录到MySQL服务器。日志中就会记录这个用户的登录时间、执行的操作等,如果出现异常,异常信息也会被记录到日志文件中。 MySQL日志分为4种,分别是二进制日志、...

2018-03-19 15:45:48 596

原创 C/S 与B/S 模型的联系与区别

客户/服务器模型(C/S)特点:非对等相互作用,即客户与服务器处于不平等的地位。表现在:服务器用有客户所不具备的硬件和软件资源以及运算能力,服务器提供服务,客户请求服务。 客户端与服务器的数量关系多个客户进程同时访问一个服务器进程(n:1)一个客户进程同时访问多个服务器提供的服务(1:n ).客户端与服务器的位置关系客户和服务器运行在同一台机器上———应用...

2018-03-17 15:33:14 19199

原创 单例模式SingleTon

单例模式一个类只生成一个对象(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例)通过定义一个private的构造函数,避免被其他类new出来一个对象,不可以被实例化。 1.单例模式的懒加载 (第一次运行到此处,加载到内存)class Singleton{private: static Singleton* mySingleton;publ...

2018-03-15 16:18:53 118

原创 进程间通信之管道,消息队列,共享内存

管道从一个进程连接数据流到另一个进程时,使用管道(pipe)。通常是把一个进程的输出通过管道连接到另一个进程的输入。管道是半双工的,数据只能单向。管道可分为有名管道和无名管道,有名管道:可以在任意进程进行;无名管道/匿名管道:只能在父子进程间通用 (亲缘关系的进程).先看一下进程管道#include <stdio.h>FILE *popen(const...

2018-03-12 14:37:37 493

原创 零拷贝操作

零拷贝在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了内核缓冲区和用户缓冲区之间的数据拷贝。接下来,将介绍三个与零拷贝操作相关的函数,sendfile函数,splice函数和tee函数首先,sendfile函数#include 《sys/sendfile.h>ssize_t sendfile(int out_fd, int in_fd, of...

2018-03-06 11:03:50 495

原创 TCP粘包问题

TCP粘包TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。 1.出现原因这里提一下保护消息边界和流,保护消息边界,就是指传输协议把数据当作一条独立的消息在网上传输,接收端只能接收独立的消息。也就是说存在保护消息边界,接收端一次只能接收发送端发出的一个数据包。 而面向流则是指无保护消息保护边界的,如果...

2018-03-05 20:52:27 140

原创 详解TCP状态转移图

TCP连接是面向连接,可靠的数据流服务。根据TCP状态转移过程图,可进行一步一步分析。 一般而言,TCP连接是由客户端发起,并通过三次握手建立连接(特殊情况是所谓同时打开)的。 TCP关闭过程相对复杂一些,可能是客户端执行主动关闭;也可能是服务器执行主动关闭,比如服务器程序被中断而强制关闭连接;还可能是同时关闭(比较少见)。首先我们来看一下TCP连接的连接和关闭。...

2018-02-27 15:27:24 2378

原创 I/O复用——select/poll/epoll区别

I/O复用能使程序能同时监听多个文件描述。1.select 在一段指定时间内,监听用户感兴趣文件描述符上的可读,可写和异常等事件。 函数原型:int select(int nfds, struct fd_set *readfds, struct fd_set *writefds, struct fd_set *execptfd...

2018-02-04 23:33:56 238

原创 线程池

池一组资源的集合。为了提高服务器性能,以空间换时间,即“浪费”服务器的硬件资源,以换取其运行效率。静态资源分配方式:资源在服务器启动之初就被完全创建好并初始化。 对于预期应该分配多少资源,有两种方案:分配“足够多”的资源,即针对每个可能的客户连接都分配必要的资源,但会导致资源的浪费;预先分配一定的资源,此后发现资源不够用,就再动态分配一些加入池中。池可以看作是服务器管理系统

2018-02-01 22:26:54 158

原创 异或运算符

异或表示当两个数的二进制表示,进行异或运算时,当前位的二进制相同为0,不同为1.表示为:0 ^ 0 = 01 ^ 0 = 10 ^ 1 = 11 ^ 1 = 0特点:0异或任何数,是任何数;1异或任何数,任何数取反;任何一个数字异或自己都等于0面试题:一个整型数组中除了两个数字之外,其他的数字都出现了两次。试找出这两个只出现一次的数字。《剑指offer》

2018-01-25 21:48:31 3094

原创 二叉树

二叉树 c

2017-12-25 17:48:58 285

原创 STL 空间配置器 allocator<一>

STL的操作对象(所有的数值)都存放在容器之中,而容器则需要配置空间以置放资料。最近在看侯捷的《STL源码剖析》,所以做了笔记。为什么不说allocator是内存配置器而说他是空间配置器呢?因为空间不一定是内存,空间也可以是磁盘或其他辅助存储介质。一般意义上理解: - 对象构造的分解: 对象内存开辟allocator | 对象构造 construct - 对象析构的分解:

2017-12-23 21:32:07 217

原创 广义表

广义表顾名思义,广义表是线性表的一种。一般记作LS = (a1,a2,…,an),其中a1可以是是单个元素,也可以是广义表,分别是原子和子表。

2017-12-06 22:07:58 700

原创 溢出

溢出 就是结果值超出了被赋值对象的类型长度。上溢出,下溢出

2017-12-01 18:11:49 504

原创 sizeof与strlen的区别

sizeof与strlen区别:sizeof操作符的结果类型是size_t, 它在头文件中的typedef是unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。sizeof是运算符,而strlen是函数。

2017-11-28 21:24:05 160

原创 32位Linux系统的虚拟地址映射 <二>

在Bochs x86 2.6.8环境下,调试操作系统寻找逻辑地址对应的物理地址。

2017-11-22 21:02:05 388

原创 32位Linux系统的虚拟地址映射 <一>

虚拟地址如何转换成物理地址?

2017-11-22 17:41:47 1473

原创 i++和++i的那些陷阱坑

int i=0; printf("%d,%d,%d,%d\n",i++,--i,++i,i--); 输出结果会是什么??

2017-11-15 21:02:08 990

原创 递归

递归若一个对象部分的包含自己,或用他自己给自己定义,被称为递归。 你认为有无限递归吗?

2017-11-07 00:01:20 251

原创 Linux下一个进程究竟会有多少个线程

单进程下可以启动最大线程个数

2017-10-10 14:53:46 3846 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除