- 博客(30)
- 资源 (7)
- 收藏
- 关注
原创 线程池和内存池
文章目录一、线程池1、线程池的概念2、线程池的组成部分3、线程池的流程4、线程池的Demo5、线程池的应用二、线程池的惊群效应1、惊群效应的概念2、惊群效应存在的问题3、线程池的惊群效应4、怎么判断发生了惊群5、如何解决惊群效应三、内存池1、内存池的概念2、内存池的流程和设计3、内存池的Demo4、内存池的特点四、线程池和内存池的相关问题1、线程池大小应该设置为多少?2、线程池中如果有一个线程出现...
2018-11-25 15:40:24 1638 1
原创 select、poll、epoll总结
一、select总结 select本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。【优点】:select()的可移植性...
2018-11-08 16:37:53 1356
原创 epoll原理详解及epoll反应堆模型
设想一个场景:有100万用户同时与一个进程保持着TCP连接,而每一时刻只有几十个或几百个TCP连接是活跃的(接收TCP包),也就是说在每一时刻进程只需要处理这100万连接中的一小部分连接。那么,如何才能高效的处理这种场景呢?进程是否在每次询问操作系统收集有事件发生的TCP连接时,把这100万个连接告诉操作系统,然后由操作系统找出其中有事件发生的几百个连接呢?实际上,在Linux2.4版本以前,...
2018-11-08 15:40:03 108559 24
原创 数据库之备份与还原
// 在shell命令行下输入以下语句进行数据库备份mysqldump -u root -p db_book > /home/eric/db_book.sql;// 新建一个空数据库后,输入以下语句进行数据库还原source /home/eric/db_book.sql;...
2018-11-27 21:16:55 437
原创 数据库之事务详解
文章目录一、事务的概念1、数据库事务2、系统事务二、事务的属性(ACID)1、原子性(Atomicity)2、一致性(Consistency)3、隔离性(Isolation)4、持久性(Durability)三、数据库事务并发存在的问题1、脏读2、不可重复读3、幻读四、事务的隔离级别1、read uncommitted(读未提交的数据)2、read committed(读已提交的数据)3、repe...
2018-11-27 21:05:51 578
转载 数据库之存储过程详解
一、存储过程的概念 存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合,存储和和函数的区别在于函数必须有返回值,而存储过程没有,存储过程的参数可以使用IN、OUT、INOUT类型,而函数的参数只能是IN类型。 存储过程再简单点来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批件,虽然它们的作用不仅限于批处理。在我看来, 存储过程就是有业务逻辑和流程的...
2018-11-27 20:06:16 1000
转载 数据库之触发器详解
一、触发器的概念 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。 举个例子,比如你现在有两个表【用户表】和【日志表】,当一个用户被创建的时候,就需要在日志表中插入创建的log日志,如果在不使用触发器的情况下,你需要编写程序语言逻辑才能实现,但是如果你定义了一个触发器,触发器的作用就是当你在用户表中插...
2018-11-27 19:53:39 13299
转载 数据库之视图详解
一、视图的概念 视图(子查询):是从一个或多个表导出的虚拟的表,其内容由查询定义。具有普通表的结构,但是不实现数据存储。单表视图一般用于查询和修改,会改变基本表的数据;多表视图一般用于查询,不会改变基本表的数据。【例子】: 在一个班级里,作为班主任需要知道全班同学所有课程的成绩,便于全面指导;而数学老师只需要知道全班学生的数学成绩就行了。所以视图的一个重要作用就是区分权限。二、视图的S...
2018-11-27 19:36:29 27994 2
原创 数据库之索引详解
一、索引的概念1、什么是索引? MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是一种数据结构。2、为什么要用索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中...
2018-11-26 20:29:02 482
转载 SQL语言分类DDL、DML、DQL、TCL、DCL
关系型数据库的SQL语句都可以分为4大类:一、DDL(数据定义语言) DDL 主要是指如下的四种SQL 语句,以 CREATE、DROP、ALRET开头和 TRUNCATE TABLE 语句。这里主要说一下 TRUNCATE TABLE ,截断表的数据,也就是删除表中的数据,删除这些数据的时候,系统不做日志,因此无法恢复,删除的速度比较快;而DELETE 语句也是删除表中的记录,但它要写...
2018-11-25 19:56:51 1151
原创 12、调整数组顺序使奇数位于偶数前面
题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。解题思路: 我们可以借鉴快速排序的思想,通过设置两个指针来进行交换操作,从而减少移动次数,提高效率: 1. 第一个指针初始化时指向数组的第一个数字,它只向后移动; 2. 第二个指针初始化时指向数组的最后一个数字,它只向前移动; 3. 在两个指针相遇之前,第...
2018-11-25 11:02:18 236
转载 11、在O(1)时间删除链表结点
题目描述: 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。解题思路:(1)常规思路: 在单向链表中删除一个结点,最常规的做法无疑是从链表的头结点开始,顺序遍历查找要删除的结点,并在链表中删除该结点。这种思路由于需要顺序查找,时间复杂度自然就是O(n)。(2)正确思路: 我们可以很方便地得到要删除的结点的一下结点。因此,我们可以把下一个结点的内容复制到...
2018-11-25 10:28:21 168
原创 09、数值的整数次方
题目描述: 实现函数double Power(doublebase, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。解题思路:当指数为负数的时候:可以先对指数求绝对值,然后算出次方的结果之后再取倒数;当底数(base)是零且指数是负数的时候:通过全局代码或异常告诉调用者参数有误;0的0次方的时候:由于0的0次方在数学上是没有意义...
2018-11-24 21:50:20 184
原创 08、二进制中1的个数和0的个数
题目描述: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路: 把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。Demo:class Solution {public: int NumberOf1(int n) { int cnt = 0;...
2018-11-24 21:42:11 548
原创 07、斐波拉契数列
题目描述: 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契数列的定义如下: class Solution {public: int Fibonacci(int n) { int a = 0, b = 1, c; if (n == 0) return a; if (n == 1) ...
2018-11-24 21:30:00 192
原创 06、旋转数组的最小数字
题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解题思路: 显然旋转数组可以用二分查找的方法来实现,考虑上面的例子,旋转数组中的第一个数一定是大于最后...
2018-11-24 21:13:58 207
原创 数据库的查询
一、单表查询// 查询所有字段SELECT * FROM db_student; SELECT id,name FROM db_student; // 查询指定字段// 条件查询(WHERE)SELECT * FROM db_student WHERE id="2018-1";SELECT * FROM db_student WHERE score>80 AND gender=...
2018-11-14 20:49:01 355
原创 MySQL数据类型与运算符
一、数据类型【char和varchar】:char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4)...
2018-11-14 20:42:28 596
原创 数据库和数据表的基本操作
一、数据库的操作// 登陆mysql数据库mysql -u root -p;// 创建数据库CREATE DATABASE db_book;// 查看所有数据库SHOW DATABASE;// 选择数据库USE db_book;// 查看所有数据表SHOW TABLES;// 删除数据库DROP DATABASE db_book;二、数据表的基本操作CREATE TA...
2018-11-14 20:31:00 1178 2
转载 05、两个栈实现一个队列,两个队列实现一个栈
题目描述: 1. 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 2. 用两个队列来实现一个栈,完成栈的Push和Pop操作。 队列中的元素为int类型。解题思路: 1. 入队时,直接压入stack1中;出队时,判断stack2是否为空,如果stack2为空,则将stack1中的元素倒入stack2中,否则直接弹出stack2中的元素。 2. 将q...
2018-11-11 17:21:26 206
转载 04、重建二叉树
题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路:通过前序遍历确定根节点。(左子树和右子树是一样的操作)然后通过中序遍历划分左、右子树。递归构建左、右子树。De...
2018-11-11 17:10:56 123
转载 03、从尾到头打印链表
题目描述: 输入一个链表的头结点,从尾到头反过来打印每个结点的值。题目思路:改变链表结构的话,先反转链表,然后从头到尾打印每个结点的值。(后续博文会有相关实现,这里就暂不实现)。无需改变链表结构,由于链表是从头到尾遍历的,现在需要从尾到头打印,是一个典型的先进后出模式。所以可以使用栈,遍历整个链表,将结点依次入栈,然后再依次出栈,实现“先进后出”。无需改变链表结构,递归实现...
2018-11-11 16:57:04 168
转载 02、替换空格
题目描述: 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。题目思路:先遍历一次字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串的总长度。从字符串的后面往前开始复制和替换。 准备两个指针,P1和P2。P1指向原始字符串的末尾,而P2指向替换之后的...
2018-11-11 16:48:51 219
转载 01、二维数组中的查找
题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。比如给定以下数组[ [1, 2, 8, 9], [2, 4, 9, 12], [4, 7, 10, 13], [6, 8, 11, 15]]Given target =...
2018-11-11 16:48:35 301
转载 Linux下阻塞与非阻塞,同步与异步的关系及IO模型
一、阻塞与非阻塞,同步与异步的关系1、同步 同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是说事情必须一件一件地做,等前一件做完了才能做下一件事。2、异步 异步,就是在发出一个功能调用时,调用者不会立刻得到结果。实际处理这个调用的部件是在调用发出后,通过状态、通知来通知调用者,或通过回调函数处理这个调用。 3、阻塞 阻塞调用是指调用结果返回之前,当前线程...
2018-11-11 15:41:29 1258
原创 IO 多路复用之epoll(高效并发服务器)
epoll 是在 2.6 内核中提出的,是之前的select和 poll的增强版本。相对于 select和 poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的 copy 只需一次。一、epoll函数详解#include &lt;sys/epoll.h&gt;int ...
2018-11-04 17:17:30 2362
原创 IO 多路复用之poll(高效并发服务器)
poll() 的机制与 select() 类似,与 select() 在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll() 没有最大文件描述符数量的限制(但是数量过大后性能也是会下降)。poll() 和 select() 同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描...
2018-11-04 16:28:40 806
原创 IO 多路复用之select(高效并发服务器)
一、I/O 多路复用概述 I/O 多路复用技术是为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调用。 select(),poll(),epoll()都是I/O多路复用的机制。I/O多路复用通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪,就是这个文件描述符进行读写操作之前),能够通知程序进行相应的读写操作。但s...
2018-11-04 15:51:48 4400 3
原创 多进程和多线程并发服务器编程模型
在网络程序里面,一般来说都是许多客户对应一个服务器(多对一),为了处理客户的请求,对服务端的程序就提出了特殊的要求。目前最常用的服务器模型有:迭代服务器:服务器在同一时刻只能响应一个客户端的请求;并发服务器:服务器在同一时刻可以响应多个客户端的请求。一、多进程并发服务器的概念 在 Linux 环境下多进程的应用很多,其中最主要的就是网络/客户服务器。多进程服务器是当客户有请求时,...
2018-11-04 11:27:42 1716
visio2007教程
2018-07-30
凸优化经典书籍(Stephen Boyd和Lieven Vandenberghe)
2018-07-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人