自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于Android Q的系统关机重启流程

一、基本概念重启一般分为是通过按键触发和非按键触发按键触发是通过按键触发中断,linux kernel层给Android framework层返回按键事件,然后进入到framework层,再从framework层进入kernel层执行关机任务非按键触发系统异常导致重启,或直接调用PowerManger的reboot()方法重启二、关机流程(Framework层)在PowerMan...

2020-04-16 18:08:52 1289

原创 Nginx内存池源码解析

当从内存池中存取数据的时候,nginx是分为两种类型来处理的,一种是小块数据,他是直接从内存块中取得数据,另一种是当为大数据块的时候,直接malloc一个内存块(内存池外部分配数据),然后保存这个指针到内存池。Nginx内存池的主体结构内存池的头部结构struct ngx_pool_s { ngx_pool_data_t d; //数据区的指针...

2019-08-25 11:49:29 183

转载 数据库之索引详解

文章目录一、索引的概念1、什么是索引?2、为什么要用索引?二、B-树、B+树、和红黑树简介1、B-树简介2、B+树简介3、红黑树简介三...

2019-08-25 11:06:08 338

转载 数据库的各种锁

文章目录一、乐观锁(Optimistic Lock)二、悲观锁(Pessimistic Lock)三、共享锁(Share lock)四...

2019-08-25 11:01:31 172

原创 const与#define区别和优点总结

一:区别(1)就起作用的阶段而言: #define是在编译的预处理阶段起作用,而const是在 编译、运行的时候起作用。(2)就起作用的方式而言: #define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。(3)就存储方式而言:#define只是进行展开,有多少地方使用,就替换多少次,它定义的宏常量在内存中有若干个备份;co...

2019-08-25 10:49:14 231

转载 从输入URL到页面加载完成发生了什么?

...

2019-08-24 23:39:22 109

原创 经典算法问题 0-1 背包

一、问题描述:  有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?二、问题分析 (1)用v[i]表示物品价值,w[i]表示物品重量。定义状态dp[i][j]以j为容量为放入前i个物品(按i从小到大的顺序)的最大价值。  (2)初始化边界条件,V(0,j)=V(i,0)=0;  (3)对于每一个物品,有两种选择方法,...

2019-08-24 18:41:20 450

原创 全错排列之小朋友坐座位问题

题目描述有n个小朋友,每个小朋友都有自己的座位。恰好每个小朋友都坐错座位的方式有多少种?n <= 66输入描述:第1行,一个自然数,表示小朋友的个数。输出描述:输出一个整数,表示符合条件的坐法有多少种很明显这是一个全错排列的问题,全错排列问题可以直接套用全错排列的公式来进行计算#include<iostream>using namespace...

2019-08-24 11:15:22 1481 2

原创 系统调用与库函数的区别

首先说一下用户态和内核态执行代码时,系统处于用户态,执行内核代码时处于内核态。系统调用:我们可以理解是操作系统为用户提供的一系列操作的接口(API),这些接口提供了对系统硬件设备功能的操作。这么说可能会比较抽象,举个例子,我们最熟悉的 hello world 程序会在屏幕上打印出信息。程序中调用了 printf() 函数,而库函数 printf 本质上是调用了系统调用 write() 函数,实...

2019-08-24 10:27:16 1433

转载 TCP协议详解(TCP报文、三次握手、四次挥手、TIME_WAIT状态、滑动窗口、拥塞控制、粘包问题、状态转换图)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 ...

2019-08-23 16:52:51 452

原创 智能指针

为什么要设计智能指针?首先给出一个例子void Fun(string & str){ string *ps =new string (str); if(weird_thing()) { throw exception(); } str =*ps; delete ps; return str;}当抛...

2019-08-23 16:13:20 492

原创 八种排序之快速排序及其优化

快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。算法描述快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:1. i =L; j = R; 将基准数挖出形成第一个坑a[i];2. j–由后向前找比它小的数,找到后挖出此数填前一...

2019-08-22 12:21:18 145

原创 String类的实现(写时拷贝)

#include<iostream>#include<string.h>using namespace std;class String{public: String(const char *str=nullptr) { data = new char[strlen(str) + 4]; data += 4; Getcount(data) ...

2019-08-21 19:29:29 133

原创 同步异步与阻塞非阻塞

很多人一开始盲目的认为同步就是阻塞,异步就是非阻塞。其实这是错误的,首先我们先要区分开同步并非阻塞,异步并非非阻塞。同步和异步关注的是消息通信机制。同步所谓同步就是,当发出一个“调用”地时候,在没有得到结果前,该调用就不会返回,但是一旦返回,就会有返回值。也就是说必须一件一件的做事情,直到当前事件处理完成,才能做下一件事。异步而异步的概念与同步刚好相反,即当发出一个“调用”后,...

2019-08-20 16:18:50 388

原创 重载、重写、隐藏、覆盖

重载:重载是指在同一作用域内,具有相同函数名但是参数列表不同的函数之间构成重载。特征:同一作用域 函数名相同 参数列表不同重写:重写是在父子类之间,也叫做子类隐藏父类。子类拥有和子类相同返回值、函数名、参数列表但是函数实体不同的函数,这样的情况叫做重写。特征:发生在在父子类中 返回值、函数名、参数列表均相同隐藏:子类会隐藏父类中同名的函数。特征:父子类之间 函数...

2019-08-20 15:03:44 104

原创 C++实现一个不能被继承的类

使用私有的构造函数,友元函数、虚继承等方式可以使一个类不被继承。为什么必须是虚继承?下面来给大家讲解。首先给出代码#include<iostream>using namespace std;//设计一个不能被继承的类template<typename T>class A{ friend T;private: A() { cout <...

2019-08-20 14:54:02 363

原创 HTTPS协议分析

HTTPS协议 HTTPS的协议本质上就是在HTTP协议连接发起之前,先使用SSL/TLS协议,协调客户端和服务器端,在两端各自产生一个堆成加密算法的秘钥,然后以RSA(对之前生成的秘钥进行非对称加密)的方式安全地传输数据。因为对称加密算法是安全的,所以使用对称加密算法加密的网页也是安全的。非对称加密算法(对称加密算法的秘钥,RSA) +对称加密算法(加密内容,DES) +数字证书(...

2019-08-20 14:18:03 309

原创 HTTP协议详解(三)

HTTP请求和响应步骤 客户端连接到Web服务器->发送Http请求->服务器接受请求并返回HTTP响应->释放连接TCP连接->客户端浏览器解析HTML内容。HTTP报文 用于HTTP交互的信息被称为HTTP报文。请求端(客户端) 的HTTP 报文叫做请求报文, 响应端(服务器端) 的叫做响应报文。 除去空行(回车符、换行符),大致分为报文首部和报文主体。...

2019-08-20 11:20:26 90

原创 HTTP协议详解(二)

HTTP协议用于客户端和服务器之间的通信两台计算机在使用HTTP协议通信的时候,在一条通信线路上必定有一端是客户端, 另一端则是服务器端【HTTP不一定非得是浏览器发出的】。请求报文:由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。响应报文:由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成HTTP协议是一种无状态的协议...

2019-08-20 11:04:46 110

原创 HTTP协议详解(一)

HTTP协议简介HTTP协议就是Hyper Text Transfer Protocol(超文本传输协议)的简写,HTTP协议位于TCP/IP协议栈的应用层。HTTP协议是一个客户端与服务器请求和应答的标准,主要用于从万维网服务器到本地浏览器,请求数据和相应数据的协议。客户端通过浏览器网页或者其他工具发起一个HTTP请求到服务器指定端口(80),服务器收到请求后,返回响应数据(数据或者...

2019-08-20 10:19:30 205

原创 LRU页面置换算法(最近最少)的实现

题目描述:思路:首先,最直观的想法就是用STL中的list(双向链表)保存缓存中的key,表头节点表示最近操作的数据,表尾节点表示当前缓存中最少使用的数据,再利用map保存key-value。每次put操作时先用find函数在list中查找key,如果存在则将key换到list的表头;不存在就检查list是否已经满了,如果list已满就把表尾节点删除再在表头插入新节点,否则直接在表头插入新节...

2019-08-17 16:22:49 1263

转载 段页式管理

...

2019-08-13 20:04:59 642

转载 文件管理

...

2019-08-13 20:03:11 267

原创 进程、线程、协程之间的区别

进程通俗的讲就是一段正在运行的程序。但又与程序不同,程序是存储在磁盘上的二进制可执行文件。进程是指一个正在运行的程序,他是动态的,而程序是一个静态的文件,进程是程序的一次实例化。作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。IPC(信号量 、共享内存、管道、消息队列、套接字)线程线程其实就是进程里的一条或者多条执行路径,被称为是轻...

2019-08-13 19:48:09 91

原创 守护进程

一、什么是守护进程守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。  守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任...

2019-08-13 17:34:21 111

原创 进程间通讯之消息队列

消息队列的定义消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。而且每一个数据块都被认为含有一个类型,接受进程可以独立的接受含有不同类型值的数据块。消息队列是消息的链接表,存放在内核中并由消息队列标识符标识。可以通过发送消息来完全避免命名管道的同步和阻塞问题。但与管道一样,每个数据块都有一个最大长度的限制,系统中所有队列包含的所欲数据块的总长度也有一个限度。消息队列的特点消...

2019-08-12 15:57:16 162

原创 进程间通讯之信号量

信号量的定义及原理原子操作:不可中断的一个或者一系列操作,即要么做要么不做临界资源: 各进程采取互斥的方式,实现共享的资源称作临界资源。一次只能被一个进程使用PV操作:P用于等待,V用于发送信号P(s):s如果大于0就给减一,如果等于零,则挂起该进程的执行V(s):如果有其他进程因等待s而被挂起,就让它恢复运行,如果没有进程因等待s而挂起,就给它加1信号量的定义...

2019-08-11 21:11:29 160

原创 进程间通讯之管道(PIPE和FIFO)

管道的定义管道是一种两个进程间单向通信的机制,因为管道传递数据的单向性,所以我们也称他为半双工管道。管道分为无名管道与命名管道管道的特点数据只能从一个进流出到一个进程流入(一个读端,一个写端);如果需要进行双工通信,那么就需要两个管道 无名管道,只能在父子进程之间进行通讯,只能用于有亲缘关系的进程之间通讯。管道的命令cmd1|cmd2 操作符是:”|”,它只能处理经由前...

2019-08-11 17:58:32 442

原创 C++空指针调用成员函数

如果在C++里用空指针调用成员函数会发生什么情况呢?以下面类为例class A{private: int a=100;public: void Show() { cout << "This is A" << endl; } void GetA() { cout << a << endl; } void SetA...

2019-08-11 15:41:34 303

原创 单例模式

一、什么单例模式单例模式就是一个类只能被实例化一次,也就是说只有一个实例化对象的类叫做单例模式。二、单例模式的要点单例模式下只能有一个实例(单例模式只提供私有的构造函数即屏蔽接口) 他必须自行创建这个实例(类定义中必须含有一个私有的类成员对象) 他必须向整个系统提供这个实例(该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。)常见写法:(DCL双重延迟加载 懒汉式...

2019-08-10 14:36:54 115

原创 线程池

为什么要使用线程池?线程是处理器调度的基本单位。我们会为每一个请求都独立创建一个线程,而操作系统创建线程、切换线程状态、结束线程都要使用CPU进行调度。消耗了很大资源,但使用线程池能够更好对线程进行管理、复用等。线程池的组成部分线程管理控制器:用于创建管理线程池。 工作线程:线程池中实际执行任务的线程。在初始化线程时会预先创建好固定数目的线程在池中,这些初始化的线程一般处于空闲状态。...

2019-08-08 19:45:01 133

原创 高效并发模式之领导者/追随者模式

一、基本概念领导者/追随者模式是多个工作线程轮流获得事件源集合,轮流监听、分发并处理事件的一种模式。在任何时间点,只要一个领导者线程,他负责监听I/O事件。而其他线程则都是追随者,他们休眠在线程池中等待称为新的领导者。当前领导者如果检测到I/O事件,首先从线程池中推选出新的领导者线程,处理I/O事件。此时新的领导者等待新的I/O事件,而就得领导者则处理I/O事件,从而实现了并发。二、组成部...

2019-08-08 16:43:17 628

原创 高效并发模式之半同步/半异步模式

一、基本概念半同步/半异步模式中的“同步”和“异步”与“I/O模式”下的同步与异步是有区别的,在I/O模式下,同步与异步区分的是内核向应用程序通知的是何种I/O时间(是就绪事件还是完成时间),以及谁来完成I/O读写(是应用程序还是内核)。而在并发模式下,“同步”指程序完全按照代码顺序执行;“异步”指程序的执行需要系统事件来驱动。显然异步线程的执行效率能高一点,实时性强,但是他适用于大量...

2019-08-08 15:28:02 833

原创 内存池

一、内存池的概念  内存池是一种内存分配方式。通常我们习惯直接使用new、malloc等接口申请内存,这样做的缺点在于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。  内存池则是在真正使用内存之前,预先申请分配一定数量、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是,使...

2019-08-05 20:39:26 118

原创 内存管理的基本知识

内存管理的功能有:内存空间的分配与回收:由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高编程效率。 地址转换:在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供地址变换功能,把逻辑地址转换成相应的物理地址。 内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。 存储保护:保证各道作业在各自的存储空间内运行,互不干扰...

2019-07-28 20:19:17 203

原创 Linux系统中重要的命令

一、硬盘和内存方面的相关指令1.dfdf命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计,可以用来查看磁盘已被使用了多少空间和剩余多少空间。// 命令参数:df -a:--all,显示所有的文件系统,包括虚拟文件系统。 df -B:--block-size,指定单位大小。比如1k,1m等。 df -h:--human-readable,以人们易读的GB、MB、K...

2019-07-27 17:26:38 130

原创 常见协议及默认的端口号

ftp 21 文件传输协议ssh 22 SSH服务协议(安全登录),可以通过ssh来访问Linux系统Pop3 110 它是因特网电子邮件的第一个离线协议标准Smtp 25 简单邮件传输协议http 80 超文本传输协议https 443 即HTTP下加入SSL层,简单讲是HTTP的安全版。Telnet 23 远程登录Oracl...

2019-07-25 12:02:37 4775

原创 Linux内核并发机制之自旋锁

在Linux中保护临界区最常见的技术就是自旋锁。在同一时刻,只有一个线程能获得自旋锁。其他企图获得自旋锁的任何线程将一直尝试(即自旋),直到获得该锁。 实际上,自旋锁建立在内存区中的一个整数上,任何线程进入临界区之前必须检查该整数,如果这个数为0,那么线程将这个数设置为1,然后进入临界区,如果这个数字非0,则该线程继续检查该值,直到他为0。 自旋锁的缺点:在锁外面的线程以忙等待的...

2019-07-24 20:03:29 186

原创 并发:死锁与饥饿

并发处理中通常需要解决两个问题:死锁与饥饿死锁的原理可以把死锁定义为一组相互竞争系统资源或进行通信的进程之间的“永久性”阻塞。当一组进程中的每个进程都在等待某个事件,而只有在这组进程中的其他被阻塞的进程才可以触发该事件,这时就称这组进程发生死锁。死锁的条件互斥 一次只有一个进程可以使用一个资源。其他进程不能访问已分配给其他进程的资源。 占有且等待 当一个进程等待其他进程时,继续...

2019-07-24 19:27:11 186

原创 二叉树的非递归遍历

先给出二叉树结构typedef struct BtNode{ BtNode * lchild; BtNode * rchild; Elemtype data;}BtNode,*BinaryTree;非递归前序遍历利用一个栈,首先从根节点一直入栈左子树,并不断打印遇到的节点,直到左子树为NULL 获取并出栈栈顶元素,对获取到的栈顶元素的右子树做如上操作 直到将栈为...

2019-07-22 00:23:35 98

空空如也

空空如也

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

TA关注的人

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