自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [算法与数据结构]排序算法

排序算法的稳定性稳定算法归并排序:归并排序只在合并子数组时发生元素位置的交换,这个过程完全可以控制相等元素的相对位置;插入排序:冒泡排序:桶排序:不稳定排序快速排序:将支点与最终落点交换时可能会造成相等元素的换位;选择排序:排序的过程是共进行n次扫描,第i次扫描会从未排序的部分选出最小的元素,将该元素与第i个元素交换位置;不稳定的一个例子是:序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。

2020-10-10 18:07:26 177

原创 [计算机网络]流量整形:漏桶和令牌桶算法

流量整形什么是流量整形数据网络中的流量是突发性的,通常包的发送时非均匀的。流量整形是指调节进入网络的数据流的平均速率和突发性所采用的技术。它的目标是允许应用程序发送适合它们需求的各种各样的流量,包括带有某种程度的突发。为了做到流量整形,首先要向网络描述可能的流量模式(流量的形状)。当一个流在建立时,客户和网络提供者就该流的流量模式达成一致的协议。流量整形是客户和网络提供者之间达成某种协议,客户按照协议规定的(流量模式)发送数据包,网络提供者承诺按时将数据送到目的地,而流量整形可以减少拥塞,帮助网络提

2020-10-08 00:16:35 1951

原创 [MYSQL]多表连接的原理

多表连接的方式//from t1, t2 where . . .SELECT * FROM t1, t2 WHERE t1.m = t2.m and . . .;//(inner) join t2 on . . .SELECT column_name(s) FROM t1INNER JOIN t2 ON t1.m = t2.m and t1.m = 2 . . .;//left join t2 on . . .SELECT column_name(s) FROM t1LEFT JO

2020-09-24 17:06:30 1107

原创 Reactor与Proactor

reactor,proactor

2020-09-20 16:58:58 533

原创 [设计模式]单例模式

单例模式//懒汉式class single{private: //静态成员,需要在类外定义 static single *p; //静态成员函数只能访问静态成员 static pthread_mutex_t lock; //私有构造函数 single() { pthread_mutex_init(&lock, NULL); } ~single(){}public: static single* getInstance();}

2020-09-20 16:15:53 87

原创 restrict关键字与memcpy/memmove

restricthttps://baike.baidu.com/item/restrict/7384270?fr=aladdin关键字restrict:告诉编译器所有修改该指针所指向内存中内容的操作都会通过该指针来修改,而不会通过其它途径(其它变量或指针)来修改,方便编译器做出优化;然而,编译器不会检查您是否遵循了这一限制,所以必须由程序员自己来遵循规范;实例1://~/C++/restrict/restrict_1.c//编译命令:gcc restrict_1.c -o restrict

2020-08-28 21:58:15 434

原创 Bazel使用

来源:Bazel学习接触bazelBazel用于构建项目,可用于linux和windows。工作区工作区是一个存放了所有源代码和Bazel编译输出文件的目录,也是整个项目的根目录。同时它包含一些bazel认识的文件:WORKSPACE文件,用于指定当前文件夹就是一个Bazel的工作区,所以WORKSPACE文件总是存在于项目的根目录下;一个或多个BUILD文件,告诉Bazel怎么构建项目的不同部分。(如果工作区中的一个目录包含BUILD文件,那么它就是一个package)。那么要指

2020-06-24 11:27:03 1144

原创 [STL]序列式容器

定义概要class vector{public: typedef value_type* iterator; //迭代器就是指针 typedef value_type& reference;. . .protected: iterator start; //目前使用空间的头 iterator finish; //目前使用空间的尾 iterator end_of_storage; //目前可用空间的尾public: //O(1) iterator begi

2020-06-06 23:27:55 204

原创 [STL]算法

《STL源码剖析》1 sort()STL提供的各种算法中,sort()是最复杂庞大的。这种算法接受两个RandomAcessIterators(随机存取迭代器),然后将区间内的所有元素以渐增的方式从小到大排列。sort()算法适用于vector和deque。STL的sort算法,在数据量大的是采用quick sort,分段递归排序。一旦分段后的数据小于某个门槛,为避免quick sort的递归调用带来过大的额外负荷,就改用insertion sort。如果递归层次太深,就会改用heap sort。

2020-06-06 20:07:19 254

原创 [STL]树

GITHUB:红黑树红黑树简介红黑树本质上就是一棵二叉查找树,但它在二叉查找树的基础上增加了着色和相关的性质使得红黑树相对平衡,从而保证红黑树的查找,插入,删除时间复杂度最坏为O(log n)。红黑树具有5个性质:每个节点要么是红的,要么是黑的;根节点是黑的;每个叶节点(NULL节点)都是黑的;如果一个节点是红色的,那么它的两个子节点都是黑的;对于任一节点而言,其到叶子节点的每一条路径都包含相同数量的黑节点。上面的5个性质使得一棵n个节点的红黑树始终保持log n 的高度,从而使得红

2020-06-05 14:39:32 396

原创 一直不accept会发生什么

深入探索 Linux listen() 函数 backlog 的含义Socket accept queue is full 但是一个连接需要从SYN->ACCEPT1.如果第一次握手分节到来时,未完成连接队列已满,会发生什么?参考《UNIX网络编程卷1:套接字联网API(第3版)》P86:Linux内核会将第一次握手分节丢弃,不对其进行确认,也就是不发送第二次握手分节,这样,客户端socket就会在超时之后重新发送第一次握手分节;为什么Linux内核不回发RST,因为如果回发RST的话,c

2020-06-01 12:20:27 591

原创 C++智能指针

野指针与悬空指针文章目录为什么要引入智能指针普通指针的问题auto_ptrauto_ptr解决的问题auto_ptr存在的问题shared_ptrshared_ptr介绍shared_ptr存在的问题weak_ptrunique_ptr为什么要引入智能指针普通指针的问题普通指针总是牵扯到许多问题,例如指针所指对象的生命周期,悬空指针和内存泄露等;悬空指针:悬空指针:指针最初指向的内存已经被释放的一种指针:#include <stdlib.h>#include <stdio.

2020-05-31 00:17:22 464

原创 [关键字]volatile

C/C++ 中 volatile 关键字详解为什么要有volatileA volatile specifier is a hint to a compiler that an object may change its value in ways not specified by the language so that aggressive optimizations must be avoided.大意是:volatile关键字所修饰的对象不能被编译器优化。volatile关键字是一种类型

2020-05-30 16:53:21 267

原创 C函数调用栈

《Linux内核完全注释》3.4节:C与汇编程序互相调用C函数调用机制大多数CPU上的程序使用栈来支持函数调用操作。栈被用来传递函数参数、存储返回信息、临时保存寄存器原有值以备恢复以及用来存储局部变量。单个函数调用操作所使用的栈部分被称为栈帧,结构如下所示。栈帧的两端由两个指针来指定:寄存器ebp通常叫做帧指针,而寄存器esp则用作栈指针;栈指针的值会随着数据的入栈和出栈而一旦,因此函数中对大部分数据的访问都是基于帧指针ebp进行的,帧指针ebp向上可以访问到函数参数,向下可以访问到局部变量等。

2020-05-27 19:56:46 1256

原创 InnoDB

InnoDB的特性支持提交,回滚和崩溃恢复能力的安全事务(ACID兼容);支持行级锁;在行级锁定中,InnoDB使用next-key锁定。支持外键(foreign key);将表和索引储存在同一个表空间(文件)里面,举例来说,现在有两个表格not_null_1和not_null_2,它们都有索引,在磁盘中的储存方式为:InnoDB锁定模式(共享锁、排他锁、意向锁)共享锁和独占锁InnoDB实现标准行级锁定,在这里有两种类型的锁:共享锁(S)允许事务去读一行;独占锁(X)允许事务区更

2020-05-22 15:41:51 221

原创 mysql索引

explain的用法官方文档MySQL优化——看懂explain需要注意的是,对于同一个查询语句,如果表中的数据不一样,explain的结果可能会不一样,先看一个例子:mysql> explain select * from muti_keys_index where last_name='Widenius';+----+-------------+-----------------+------------+------+---------------+------+---------+

2020-05-21 13:40:41 145

转载 ubuntu 服务(service)

转载自:Ubuntu Service系统服务说明与使用方法1.什么是ubuntu的service可以粗略理解为:service(服务)是随开机自启动的,并且在后台运行的程序。通过man service 查看解释为:service 运行一个位于/etc/init.d/目录下的脚本SCRIPT,或者是位于/etc/init下的upstart程序。下面看看/etc/init.d/目录下有哪些脚本:可以看到最后那里有个ssh脚本,打开看一下,确实是脚本文件:2.手动添加一个服务基于上面的解释, 其实

2020-05-20 18:48:06 9539

原创 xinetd守护进程

什么是xinetd维基百科:extended internet daemon(守护进程):扩展的互联网守护程序,是一个运行于类unix操作系统的超级服务器,它的功能是管理网络相关的服务,由于其较高的安全性,xinetd主键取代了inetd。xinetd监听来自网络的请求,从而启动相应的服务,他可以用来启动使用特权端口和非特权端口的服务。man xinetd:xinetd 执行与 inetd 相同的任务:它启动提供互联网服务的程序。与在系统初始化时启动这些网络服务,让它们保持休眠,直到有

2020-05-20 17:58:27 641

转载 互斥锁、递归锁、读写锁、自旋锁

https://www.cnblogs.com/evenleee/p/11309156.html互斥锁共享锁的使用时互斥的,即一个线程获得资源的使用权后就会为该资源加锁,使用完后会将其解锁,所以在使用过程中有其它线程想要获得该资源的锁,那么它就会被阻塞陷入睡眠的状态,直到资源被解锁才会被唤醒,如果被阻塞的资源不止一个,那么他们都会被唤醒,但是获得资源使用权的是第一个被唤醒的线程,其它线程又陷入沉睡。递归锁同一个线程可以多次获得该资源锁,别的线程必须等待该线程释放所有次数的锁才能获得。读写锁读写锁

2020-05-19 12:56:34 199

原创 C++知识点汇总

const

2020-05-12 12:44:32 280

原创 多线程:互斥量、信号量和条件变量

互斥量通常用于互斥访问:pthread_mutex_t m_mutex;pthread_mutex_intit(&m_mutex,NULL);pthread_mutex_lock(&m_mutex);...pthread_mutex_unlock(&m_mutex);pthread_mutex_destory(&m_mutex);信号量sem_t m_sem;sem_init(&m_sem,0,0);sem_wait(&m_sem);/

2020-05-10 16:41:00 533

原创 I/O复用

概述为什么需要I/O复用?知乎上的一个回答:举一个例子,模拟一个进程同时处理30个I/O:假设你是一个老师,让30个学生解答一道题目,然后检查学生做的是否正确,你有下面几个选择:1.按顺序逐个检查,先是A,然后B,然后C。。。这中间有一个学生卡住,全班都会被耽误;类比:在回射服务器版本1客户端中,客户端的工作流程是先从标准输入fgets上读取一行数据,紧接着write到服务端,再read服务端返回的数据,然后再fputs到标准输出,这样编程存在一个隐患:不能及时察觉到服务端的终止(服务端终止

2020-05-09 13:04:52 370

原创 socket连接建立与关闭

close函数定义close函数可以用于关闭套接字,并中只能TCP连接。#include<unistd.h>int close(int sockfd);close一个TCP套接字的默认行为是把该套接字标记为已关闭,然后立即返回到调用进程。该套接字不能再由调用进程使用,也就是说它不能再作为read或write等函数的第一个参数。套接字发送缓冲区的数据将尝试被发送到对端,发...

2020-05-07 12:45:24 1651

转载 gdb调试

gdb 调试利器1.g++编译时需要加上-g参数:g++ -g -o server server.c2.“gdb + 可执行程序” 进入调试gdb server3.运行run:简记为 r ,其作用是运行程序,例如run 127.0.0.1 1234 //main函数有参数的情况run //main函数没有参数的情况continue (简写c ):继续执行,到...

2020-04-27 23:03:22 711

原创 UNIX网络编程——回射服务器

版本1服务端——多进程服务端父进程负责监听并接收客户连接请求;每当accept函数收到一个客户端连接请求,父进程就fork一个子进程来为该客户服务;子进程采用str_echo()(版本1)函数进行回射服务;服务端程序://tcpcliserv/tcpserv01.c#include "unp.h"intmain(int argc, char **argv){ int ...

2020-04-24 21:59:25 228

原创 UNIX网络编程源码运行

源码运行源码地址修改的地方有在/lib/unp.h添加了:#ifndef OPEN_MAX#define OPEN_MAX 1024#endif#ifndef AF_LINK#define AF_LINK 18#endif在/usr/include/net目录下添加了文件if_dl.h,if_dl.h内容为:if_dl.hreadme由于自己是...

2020-04-22 20:52:42 233

原创 if_dl.h

#ifndef OPEN_MAX#define OPEN_MAX 1024#endif#ifndef AF_LINK#define AF_LINK 18#endif在/usr/include/net目录下添加了文件if_dl.h,if_dl.h内容如下:/** Copyright (c) 1990, 1993* The Regents of the Unive...

2020-04-22 20:50:22 915

转载 滑动窗口:数据链路层与传输层

文章目录1 数据链路层的滑动窗口1.1 连续ARQ协议1.2 SR协议(选择重传)1.3 GBN(回退N帧)2 TCP滑动窗口TCP滑动窗口定义TCP滑动窗口的大小TCP滑动窗口工作过程模拟TCP滑动过程滑动窗口既用于数据链路层,又用于传输层。1 数据链路层的滑动窗口老师的计算机网络课程数据链路层滑动窗口协议1.1 连续ARQ协议什么是连续ARQ协议发送方维持着一个一定大小的发送窗...

2020-03-28 21:49:15 6768 1

转载 TCP粘包问题

文章目录什么是粘包粘包出现的原因粘包的解决https://blog.youkuaiyun.com/zhangxinrun/article/details/6721495https://blog.youkuaiyun.com/weixin_41047704/article/details/85340311什么是粘包假设发送方应用层需要发送两个数据data1和data2,在接收端有以下几种情况:A. 先接收到dat...

2020-03-28 19:21:36 133

原创 操作系统相关

文章目录进程与线程区别进程进程的理解进程间通信IPC进程同步线程线程的理解死锁死锁的四个条件死锁处理策略鸵鸟策略死锁检测与恢复死锁避免死锁预防进程与线程进程与线程之间的区别与联系一些概念的解析进程和线程的理解区别进程线程定义一个运行的程序的实例进程之内独立执行的一个单元执行流最小单位进程是资源分配的最小单位线程是CPU调度的最小单位资源开销每...

2020-03-24 23:11:53 247

转载 计算机网络相关[旧版]

文章目录DNSTCP与UDPUDP1.UDP的特点2.UDP适用场景DNSDNS解析域名的过程:1.过程0. DNS客户端(主机)希望查询www.qq.com的IP地址;主机检查自己的host文件,没有找到对应的记录;主机向本地DNS服务器NServer02发送查询www.qq.com的请求(主机的查询是递归查询);本地DNS服务器没有www.qq.com的记录,于是向根域名服...

2020-03-24 15:57:39 481

转载 数据库相关

知识大全char、varchar和textMyISAM与InnoDB两者之间区别索引命中

2020-03-23 23:21:23 427

转载 Linux手册

https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/lsof.htmlhttps://blog.youkuaiyun.com/wojiaopanpan/article/details/7286430

2020-03-23 13:21:19 207

转载 Linux命令

文章目录1 最常用的参数组合及解析1. ps -aux2.ps -ef3. ps lax2 僵尸进程与孤儿进程1 最常用的参数组合及解析1. ps -aux查看包含其他使用者的进程,和PID,CPU占有率等情况:USER:进程拥有者PID:进程ID%CPU:占用的CPU使用率,即进程占用一个核的百分比%MEM:占用的物理内存的百分比VSZ:占用的虚拟内存量RSS:占用的固定的内...

2020-03-23 13:13:58 172

原创 指针常量与常量指针

常量指针://常量指针,不能通过该指针修改其指向的内容的值const int a = 0;const int b = 0;const int* p1 = &a;//等式左右两边都是const int*类型p1 = &b;//允许//常量指针,不能通过该指针修改其指向的内容的值int a = 0;int b = 0;const int* p1 = &a;...

2020-03-20 23:36:59 287

转载 HTTP协议(旧)

文章目录HTTP协议概述HTTP工作原理HTTP请求报文请求方法HTTP响应报文HTTP状态码HTTP首部通用首部字段请求首部字段响应首部字段实体首部字段参考:CyC2018HTTP协议概述超文本传输协议(HyperText Transfer Protocol)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。HTTP是一个客户端和服务端请求与应答的...

2020-03-20 16:13:48 327

转载 三次握手与四次挥手

文章目录1. 三次握手1.1 三次握手过程1.2 三次握手原因2. 四次握手2.1 四次握手的过程】2.2 四次握手的相关问题1. 三次握手SYN:同步1.1 三次握手过程服务端B都处于LISTEN(监听)状态,等待客户的连接请求。A向B发送连接请求报文,SYN = 1,ACK = 0,SEQ = x;B收到A的连接请求报文后,向B发出确认:SYN = 1,ACK = 1,SEQ ...

2020-03-20 00:00:54 134

转载 Web页面请求过程

文章目录1. DHCP配置主机信息2.ARP解析ARP地址3. DNS解析域名4.HTTP请求页面参考:cyc2018下面是在浏览器中输入url请求页面可能经历的过程:1. DHCP配置主机信息假设主机最开始没有IP地址以及其他信,那么就需要先使用DHCP来获取。主机生成一个DHCP请求报文(应用层),并将这个报文放入具有目的端口67和源端口68的UDP报文中(传输层)。该报文段被放...

2020-03-19 22:10:44 323

原创 C++顺序容器

C++primer

2020-03-18 20:32:31 166

原创 new/malloc

参考网站C++ reference:mallocC++ reference:new异同new/malloc都是通过系统调用brk(),sbrk()对堆进行管理的:int brk(void *addr);addr:将addr设置为未分配内存的首地址返回值:成功返回0,失败返回-1。void *sbrk(intptr_t increment);//brk()“偏移量”版本incre...

2020-03-18 16:51:11 314

空空如也

空空如也

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

TA关注的人

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