自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 读写锁

互斥锁只有加锁和不加锁两种状态,同一时间只能有一个线程加锁;读写锁可以有三种状态:读模式下加锁(读锁)、写模式加锁(写锁)和不加锁;读写锁的特点:1)如果某线程申请了读锁,其他线程可以再申请读锁,但不能申请写锁;2)如果某线程申请了写锁,其他线程既不能申请读锁,也不能申请写锁;读写锁适合于对数据的读比写次数多的情况。读写锁只是一种锁机制,适合的场景,但是,在程序中,并没有规定持有读锁就一定要读数据,持有写锁就一定要写数据;读写锁接口:1)初始化读写锁int pthread_rwlock_i

2021-02-05 18:16:24 165

原创 信号量

信号量是 一个整数计数器,其数值可以用于表示空闲临界资源的数量;当前进程释放资源时,信号量增加,表示可用资源数增加;当有进程申请到资源时,信号量减少,表示可用资源数减少;信号量接口:1)初始化信号量int sem_init(sem_t* sem,int pshared,unsigned int value) ;2)等待信号,如果信号量的值为0则等待,如果信号量大于0则返回,同时对值做-1操作;int sem_wait(sem_t* sem) ;int sem_trywait(sem_t* se

2021-02-05 17:40:18 314

原创 条件变量

条件变量用来阻塞一个线程,直到其他的线程通知它条件已满足为止;条件变量看似简单,与互斥锁同时使用实现生产者消费者模型;生产者消费者模型(高速缓存队列);1)初始化条件变量int pthread_cond_init(pthread_cond_t* cond,pthread_condattr_t* cond_attr) ;2)阻塞等待int pthread_cond_wait(pthread_cond_t* cond,pthread_mutex_t* mutex) ;3)超时等待int pthr

2021-02-05 17:28:11 167

原创 网络编程2

服务端的简单模型:int lfd=socket(AF_INET,SOCK_STREAM,0) ;int ret =bind(lfd,(struct sockaddr*)&addr,sizeof addr) ;listen(lfd,SOMAXCONN) ;int nfd=accept(lfd,NULL,NULL) ;while(1){read() ;parse() ;write() ;}// 客户端简单代码 tcp_cli.c#include <stdio.h>#i

2021-02-04 20:56:13 76

原创 TCP socket API详解

网络阶段:网络基础1,套接字编程,网络基础2/3,高级I/O套接字编程:网络通信程序的编程1.IP地址IPV4 :uint32_t类型的整数,是一个网络中主机的标识符,在网络中唯一标识一台主机;IPV4不足以使用的时候:IPV6:uint8_t ip[16] ,并不兼容IPV4,因此使用广度不足在网络中通信的每一条数据中都会携带源端IP地址,以及对端IP地址;2.端口uint16_t类型的整数,端口号的范围0~65535,在主机唯一标识一个进程;在网络中的每条数据中都会携带源端端口及对端端口

2021-02-04 16:48:56 473

原创 thread

多线程:线程概念:是进程中的一条执行流,是cpu调度的基本单元,在Linux下通过pcb实现程序的调度管理,一个进程中可以有多个线程,这些pcb共享同一个进程中的大部分资源,因此也被称为轻量级进程;独有与共享:独有:标识符,栈,寄存器,信号屏蔽字,errno;共享:虚拟地址空间,文件描述符信息,信号处理方式,工作路径;多任务的多执行流处理:多线程:线程间的通信更加灵活,线程的创建和销毁的时间和资源成本更低,同一个进程中线程间的调度切换成本更低;多进程:健壮,稳定(一个进程崩溃、对其他进程不会有

2021-02-04 10:50:52 124

原创 互斥锁

互斥锁:保证共享数据操作的完整性。每个对象都应该应用于一个可称为“互斥锁”的标记。这个标记用来保证在任一时刻,只能有一个线程访问对象。1)初始化锁int pthread_mutex_init(pthread_mutex_t* mutex,const pthread_mutexattr_t* attr) ;2)阻塞加锁,若互斥锁已经被其他线程上锁,则调用者一直阻塞等待,直到被解锁之后才上锁;int pthread_mutex_lock(pthread_mutex_t* mutex) ;3)非阻塞锁,

2021-02-04 10:26:24 187

原创 自旋锁

自旋锁也是为实现保护共享资源而提出一种锁机制。其实,自旋锁于互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。 无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。 但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者进入睡眠状态。但是自旋锁不会引起申请者睡眠,如果自旋锁已经被占用,调用者就一直循环在那里判断占用者是否已经释放了锁,”自旋”一词得名(空转锁); 自旋锁主要用于Linux内核同步,平时开发中应用较少。接口.

2021-02-04 08:22:52 126

原创 钱币找零(贪心策略)

假设1元、2元、5元、10元、20元50元、100元的纸币分别有c0、c1、c2、c3、c4、c5、c6张。现在要用这些钱来支付K元,至少需要多少张纸币?贪心策略:用贪心算法的思想,很显然,每一步尽可能用面值大的纸币即可。在程序中已然将value按照从小到大的顺序排好。struct CMP{ bool operator()(vector<int>& arr, vector<int>& arr2){ return arr[0] > arr2[0]; }

2020-09-20 16:36:50 945

原创 MySQL内置函数

插入数据:insert into替换数据:replace删除表中的数据:语法:delete from [tablename] where 子句;删除的时候约束最好是唯一标识的子句;如果不加where子句,表示删除整张表当中的数据;但是不会对表结构造成影响;但是如果有自增长的属性,不会进行清空,还会延续之前的数据进行使用;截断表:注意:不能针对某一行的数据进行操作,而是针对整个表的数据进行操作;会重置自增长数据auto_increment项。语法:truncate table [表的名称]

2020-08-12 06:49:00 152

原创 MySQL约束and增删查改

表的约束:定义的一个字段的时候,[字段名称+字段类型];表的约束是在约束插入数据的时候,每一个字段的条件;1、空属性:NULL(可以为NULL), & NOT NULL(不可以为NULL)表示当前字段值是否可以为NULL2、默认值:给定义默认属性的字段插入数据的时候,当没有插入数据的时候,自动加入定义的默认值;3、列描述:对字段的内容并没有约束,而是相当于每一个字段的注释信息(log信息);4、主键:primary key主键并不是开辟了一个新的列,而是给某一列给设置了一个属性,该

2020-08-11 18:33:17 134

原创 二维数组中的查找

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。OJ:二维数组中的查找1、在数组中从左至右 递增,从上至下递增,则横竖列的中值就是右上角的值,因此可以通过这个中值进行二分查找;2、查找的过程,本质是排除的过程,因此会提高效率;此处就是依次排除一 批;一次排除一行或者一列;class Solution {public: bool Find(int

2020-08-11 06:54:24 78

原创 LRU Cache(最少最近使用机制)

1、什么是LRU CacheLRU是Least Recently Used的缩写,最少最近使用,这是一种Cache替换算法。Cache指位于CPU和主存间的快速RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。广义上的Cache指的是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache,内存与硬盘之间也有Cache,乃至在硬盘与网络之间也有某种意义上的Cache-称为Internet临时文件夹或网络内容缓冲等。Cache的容

2020-08-10 07:45:37 1735

原创 并查集

并查集原理在一些应用的问题中,需要将n个不同的元素划分成一些不相交的集合。初始,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(union-find-set)。主要功能:1、集合间的合并;2、查找两个数是否在一个集合;表示方法举例:1、森林2、初始数组:其中数组的下标就表示每一个节点的值,其中每一个位置填充-1,表示自身为根节点&有一个节点。3、表示规则:

2020-08-09 15:51:41 81

原创 MySQL03 数据类型续

1、字符类型:存储字符串1)char(L) :char(10):10乘以类型所占用的字节为总字节数L不是占用的字节的大小,而是字符串的长度字符占用字节的数量和数据库的编码格式相关LATIN1 : 1个字符占用1个字节;utf8:1个字符占用3个字节 , eg:char(4) , 4*3 = 12 ;2)varchar(L)可变长度字符串,L表示字符串长度,最大长度是65535具体存储长度,和数据库编码格式相关;理论上可以存储65535个字符,但是如果编码格式不是单个字节表示字符,而是用n个

2020-08-08 17:13:32 100

原创 MySQL02

1、show collation ; :查找校对规则校对规则:1)影响了用户对数据查询的排序;2)后缀为_cs:大小写铭感的校对规则;3)后缀为_ci:大小写不敏感的校对规则后缀为_bin:二进制校对规则,大小写铭感eg:create table tablename collation utf8_bin ;select * from t1 order by name ;2、校对规则的特征1)不同的字符集有不同的校对规则;2)每一个字符集都有一个3、数据库的备份mysqldump -

2020-08-08 10:36:10 80

原创 初识MySQL

mariadb:1、切换用户 su root;2、查看是否已经安装完毕rpm -qa | grep maridb3、查看是否有安装源yum list | grep mariadb4、有 mariadb-server 就安装yum install -y mariadb-server如果无源就先根据整一份本地源5、查看 mariadb 状态,查看mariadb是否已经启动service mariadb status6、启动 mariadbservice mariadb start(启动

2020-08-07 21:51:09 94

原创 sql

字符集的校对规则:show collation ;根据后缀区分校对规则:1、影响了用户对数据查询的排序;2、后缀名为_cs:大小写敏感的校对规则;后缀名为_ci:大小写不敏感的规则;后缀为_bin:为二进制校对规则,大小写敏感;3、校对规则的特征1)不同的字符集有不同的校对规则;2)每一个字符集都有一个默认的校对规则;eg:utf8–>utf8_general_ci,大小写不敏感数据库备份:mysqldump -p[端口(3306)] -u [用户] -p [password] -

2020-08-07 07:46:58 77

原创 TCP:传输控制协议

0、TCP传输控制协议;1、TCP连接的建立与终止;2、TCP的交互数据流;3、TCP的成块数据流;4、TCP超时与重传;5、TCP坚持定时器;6、TCP保活定时器;7、TCP的未来和性能;(零)TCP传输控制协议1、TCP和UDP都使用相同的网络层IP,TCP却向应用层提供与UDP完全不同的服务。TCP提供一种面向连接、可靠的字节流服务;2、TCP通过以下方式提供可靠性:1)应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。由TCP

2020-08-03 17:59:11 134

原创 七层

应用层:FTP,FTTP,SSH协议等进行应用表示层:对整个会话的表示,例如字节序等进行表示会话层:管理整个会话过程传输层:TCP/IP协议,端到端口之间对应的传输,也可以认为是进程之间的交流到了机器之后需要知道哪一个进程 网络层:IP数据包,路由,路由器数据链路层:帧中继,以帧为单位 frame 进行传输 , 从一个机器传输到一个机器物理层 : 传输bit位,电器规范,网卡,水晶头帧中继:frame relay是公用数据通讯协议,一种有效的数据传输技术,可以在一对一或者一对多的应用中快速而

2020-08-02 17:32:58 150

原创 容器适配器的实现stack,queue,priority_queue

容器适配器的实现Stack:// stack的实现 // 底层实现容器默认为双端队列template<class T,class Container = deque<T>>class Stack{public: void push(const T& val) { _c.push_back(val); } void pop() { _c.pop_back(); } const T& top() { return _c.b

2020-08-02 10:37:59 213

原创 仿函数

仿函数:funtor,就是是一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个放函数类了。STL组件:使用方式类似于函数的类–>重载圆括号"()"的运算符重载函数仿函数对象:由仿函数类创建的对象容器适配器:STL组件stack,queue,priority_queue通过适配器的设计模式定义的新的数据结构适配器:把一种接口转换为另一种接口的方法(其他容器经过再封装)例如:stack,queue,priotiry_queue等都是

2020-07-31 17:11:11 1330

原创 动态规划-1

Dynamic ProgrammingDP定义:动态规划是分治思想的延伸,通俗来说是大事化小,小时化了的艺术。在将大问题化解为小问题的分治过程中,保存堆这些小问题已经处理好的结果,并供后面处理更大的问题时直接使用这些结果。动态规划具备了以下三个特点:1、把原来的问题分解成了几个相似的子问题;2、所有的子问题都只需要解决一次;3、存储子问题的解;动态规划的本质,是对问题状态的定义和状态转移方程的定义(状态以及状态之间的递推关系)动态规划问题一般从以下四个角度考虑:1、状态定义;2、状态间

2020-07-31 10:03:46 81

原创 把数组排成最小的数

最小的K个数最小的K个数struct comp{ bool operator()(const int&a,const int&b) { return a<b ;//需要大根堆,采用降序排序 }} ;class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector

2020-07-31 08:14:58 68

原创 数组中的第K个最大元素

数组中的第K个最大元素在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。法一:直接排序,然后得到具体结果#include <functional>class Solution {pu

2020-07-30 08:52:20 80

原创 智能指针

C++11智能指针:0、智能指针的实现1、实现RAII思想2、实现指针功能1、auto_ptr发生拷贝时,管理权转移潜在问题:发生拷贝之后,不能继续访问资源,会发生解引用问题;一般禁止使用2、unique_ptr防拷贝可以使用:不涉及智能指针拷贝的场景3、shared_ptr通过引用计数,解决拷贝的问题拷贝时,引用计数自加析构时,引用计数自减,自减之后,如果引用计数为0,则释放资源,否则不释放资源特殊场景下会有循环引用的问题:可以通过weak_ptr解决线程安全:同一个资源的

2020-07-27 18:29:37 66

原创 二叉树中和为某一值的路径 (DFS)

输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树中和为某一值的路径/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {pub

2020-07-25 21:28:23 85

原创 二叉搜索树的后续遍历

二叉搜索树的后续遍历题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。BST后续遍历class Solution {public: bool VerifySquenceOfBSTCore(vector<int>& sequence,int start,int end){ // 当前位置与后续位置关系 // 也是跳出位置的关系 i

2020-07-25 15:12:24 117

原创 连续最大和

题目描述一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3输入描述:输入为两行。 第一行一个整数n(1 <= n <= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。输出描述:所有连续子数组中和最大的值。示例1输入3 -1 2 1输出3题目解析:假设sum[i-1]是以数组中第nums[i-1]为最后一个元素的一段子数组最大和;sum[i]是以数

2020-07-25 14:12:43 67

原创 统计回文

统计回文:“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。例如:A = “aba”,B = “b”。这里有4种把B插入A的办法:在A的第一个字母之前: “baba” 不是回文在第一

2020-07-25 06:13:27 53

原创 C_strlen&sizeof

关于 sizeof 和 strlen 各种情况1、strlen 只能计算字符串,使用strlen表示从当前位置出发 ,直到’\0’,计算中间字符的长度(即字符的数量),如果在字符中强行使用strlen,属于未定义行为(UB),2、sizeof两个都可以计算,sizeof...

2020-03-05 14:53:35 82

原创 detailed explanation of structure

Structure is also called record in some programming languages.Here is an example:struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30]; // Address is a string}...

2019-12-15 16:08:12 127

原创 simple definition of structure

simple definition of structureEnum Sex{ MALE. FEMALE};//Student is the structure name, struct student is the structure type, and the contents are member variablesstruct Student{ char name[1024]...

2019-12-15 08:08:30 106

原创 +regretP

game 悔棋

2019-08-03 13:43:59 96

原创 createElementProject1

createElement<style> .div{ border: 1px solid black; height: 300px; width: 300px; margin: auto; }</style>

2019-08-02 23:08:27 65

原创 createElementProject

createElement<style> .div{ border: 1px solid black; height: 300px; width: 300px; margin: auto; }</style>

2019-08-02 22:35:35 54

原创 document.createElement("table")

createElement<style> .div{ border: 1px solid black; height: 300px; width: 300px; margin: auto; }</style>

2019-08-02 21:31:13 1452

原创 1.js

//业务和显示分离// function demo() {//调用方法 对象.方法名(),像alert() 可以直接调用的方法,// 属于window对象 默认情况下JS顶层(默认)对象// alert( “hello” ) ;// }//window.document ;document.getElementById() ;document.getElementsByN...

2019-08-02 17:35:26 101

原创 块的上下左右移动

上下左右移动

2019-08-02 14:04:50 219

原创 内置对象,事件

innerObject内置对象,事件 <form> <!--onfocus 获得焦点事件 --> 用户名:<input type="text" name="userName" onfocus="userNameOperate(this)" onblur="nblur( thi...

2019-08-02 13:14:06 68

空空如也

空空如也

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

TA关注的人

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