自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 服务器模型、服务器编程框架——Linux高性能服务器

服务器模型C/S模型(客户端/服务器)如图:TCP/IP协议在设计和实现上并没有客户端和服务器的概念,在通信过程中所有机器都是对等的。但由于资源(视频、新闻、软件等)都被数据提供者所垄断几乎所有的网络应用程序都很自然地采用了C/S 模型:所有客户端都通过访问服务器来获取所需的资源特点非对等服务,即客户端与服务器处于不对等地位体现:服务器有软硬件资源及运算能力而客户端没有,服务器提...

2020-03-31 16:00:41 201

原创 Linux服务器程序规范——Linux高性能服务器

日志Linux提供一个守护进程来处理系统日志【syslogd】,现在用的是它的升级版【rsyslogd】守护进程:Linux服务器程序一般以后台程序的形式运行,后台进程也叫守护进程。它没有控制终端,所以不会意外接收到用户输入。守护进程的父进程通常是init进程【PID为1的进程】rsyslogd守护进程既能接收用户进程输出的日志,又能接收内核日志用户进程通过调用syslog函数生成...

2020-03-31 13:42:11 187

原创 读者写者模型【设计模型】

一个交易场所:有存储区域来保存数据两种角色:读者、写者三种关系:读者与读者:没有关系写者与写者:互斥(不能同时操作)写者与读者:同步互斥(同步是写者优先)相较于生产者消费者模型,读者间不互斥,提高效率示例:#include <stdio.h>#include <pthread.h>#include <unistd.h>//定义读写锁...

2020-03-27 22:38:01 135

原创 软链接硬链接

概念针对源文件所创建的特殊文件。通过链接文件,可以解决文件的共享使用,访问源文件的数据。一种是软连接,一种是硬链接硬链接通过索引节点进行链接,与源文件共用一个inode,类似于文件的别名作用:允许一个文件有多个有效路径名,防止误删只能在同一个文件系统中的文件之间链接,不能对目录进行链接原理:类似引用计数,只删除一个链接不影响索引节点本身和其他链接,只有最后一个链接被删除并且有新...

2020-03-27 19:16:33 104

原创 应用层网络基础【HTTP协议】

协议首先什么是协议?计算机与网络设备间要互相通信,双方必须基于相同的方法。eg:如何探测到通信目标、由哪一边发起通信、使用什么语言、怎样结束通信等规则都要事先确定。不同的硬件、操作系统之间的通信,所有的这些都需要一种规则,这种规则就称为协议。一句话说:协议就是约定应用层协议负责应用程序之间的数据沟通自定义协议这里以网络计算器为例:客户端给服务器发送的请求是什么样的?包含的信息(数...

2020-03-26 20:27:41 217

原创 epoll和select【常考点】

epoll和select都是I/O多路复用的技术,都可以同时监听多个I/O事件的状态。epoll支持水平触发和边沿触发两种模式epoll比select效率更高,效率差异的原因在于:epoll是触发式处理连接【基于I/O事件通知机制】,而select是轮询方式处理连接【基于轮询机制】epoll采用回调函数机制,不会线性遍历;select调用会线性遍历select数量限制:限制可操作的Soc...

2020-03-24 13:07:39 150

原创 socket实现TCP网络通信程序

TCP网络通信TCP通信是面向连接、可靠传输、面向字节流的服务端流程创建套接字:内核中创建socket结构体绑定地址信息:通过socket描述源端地址信息开始监听:告诉OS开始接收连接请求,由于TCP是面向连接的,通信前要建立连接。服务端要**接受客户端的连接请求【监听套接字】**会为客户端创建新的socket【通信套接字】,新的套接字中包含源端信息和对端信息,只用于和对应的客户端进行...

2020-03-23 18:05:02 716

原创 红黑树

了解红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,确保没有一条路径会比其他路径长出俩倍,因而接近平衡性质每个结点不是红色就是黑色根节点是黑色的如果一个节点是红色的,则它的两个孩子结点是黑色的对于每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点每个叶子...

2020-03-21 20:03:11 75

原创 AVL树

了解之前的二叉搜索树虽缩短了查找效率,但如果数据有序/接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下,引出AVL树:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1,即可降低树的高度,从而减少平均搜索长度性质它的左右子树都是AVL树左右子树高度之差(平衡因子)的绝对值不超过1如果有n个结点,其高度可保持在O(log2N...

2020-03-20 21:33:28 58

原创 二叉搜索树

了解也叫二叉排序树,中序遍历是有序的。性质:若左子树不为空,则左子树上所有节点的值小于根节点的值若右子树不为空,则右子树上所有节点的值大于根节点的值左右子树也是二叉搜索树操作查找根据性质:根节点不为空时:根节点值等于查找值,返回T根节点值大于查找值,去左子树继续查找根节点值小于查找值,去右子树继续查找否则返回F插入树为空,直接插入树不为空,根据性质找到合适...

2020-03-20 20:43:17 96

原创 生产者消费者模型【设计模式】

了解场景:有生产者生产数据,消费者获取数据进行处理【一个场所,两种角色,三种关系】生产者与消费者不直接进行数据交互。生产者生产数据到数据缓冲带【常为队列】,消费者从缓冲区读取数据该模型解决的问题解耦合——不直接交互,实现模块分离支持并发支持忙闲不均——如生产过多,消费慢关系生产者与生产者:互斥(放入同一位时)消费者与消费者:互斥(取出同一位时)生产者与消费者:同步(生产...

2020-03-19 20:39:19 258

原创 bash中,1>&2是什么意思?

文件描述符每打开一个文件都有一个整数与之对应,这个整数就是文件描述符【0、1、2】0:标准输入(stdin)1:标准输出(stdout)2:标准报错输出(stderr)重定向符>:输入重定向符<:输出重定向符1>&2:标准输入重定向到标准错误输出...

2020-03-18 17:18:59 11013 2

原创 公司局域网上ping www.qq.com

首先,ping使用了协议ICMPICMPICMP的一个重要应用就是分组间探测PING,用来检测两主机间的连通性ping使用了ICMP回送请求和回送回答报文,是应用层间使用网络层ICMP的一个例子,并没有通过运输层的TCP/UDPping后地址:使用DNS协议将域名转换为ip地址,获取ip地址后在数据链路层用MAC地址进行传输【这里用到ARP地址解析服务】回顾域名、IP地址、物理地址间的...

2020-03-17 16:01:35 1977

原创 string类【深浅拷贝】

了解string是表示字符串的字符串类该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。比特科技string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator>string;不能操作多字节或者变长字符的序列。在使用string类时,必须...

2020-03-16 18:31:06 71

原创 数据结构总结(思维导图)

问题:堆的实现及操作、AVL树的实现、红黑树的操作、布隆过滤器的使用

2020-03-16 10:27:52 336

原创 索引、约束【数据库】

主键约束(PRIMARY KEY)主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。不可能(很难)更新.主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).主健可作外健,唯一索引不可;唯一性约束(UNIQUE)唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性约束只要唯一就可以更新即表中任意两行...

2020-03-15 17:06:27 191

原创 死锁(条件、预防、避免)

条件互斥条件:一个资源每次只能被一个进程使用请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放不可剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺环路等待条件:若干进程之间形成一种头尾相接的循环等待资源关系预防死锁的预防是保证系统不进入死锁状态的一种策略。它的基本思想是要求进程申请资源时遵循某种协议,从而打破产生死锁的四个必要条件中的一个或几个,保证系统不会...

2020-03-15 13:04:29 373

原创 sizeof和strlen的区别?

sizeof是一个操作符,strlen是函数sizeof在编译期间计算(不能返回动态分配内存大小),strlen在运行时计算sizeof参数可以是变量、数据类型strlen参数必须是以“\0”结尾的字符串【char*类型strlen中数组名作为参数时退化成指针,而sizeof不退化观察:#include <stdio.h>#include <string.h&...

2020-03-14 19:40:06 77

原创 指针——Linux一站式学习

概念对于栈顶指针,队列头尾指针而言,这里的指针本质上是一个整数,是数组的索引,通过指针访问数组的某元素;还有一种概念:把一变量所在的内存单元的地址保存在另一个内存单元中,这个内存单元就是指针,通过指针访问变量【变量的地址在编译链接时确定,可以直接赋值给指针变量】不同类型的指针变量,的内存单元都占4个字节,因为要保存32位的虚拟地址,同理,在64位平台上指针变量都占8个字节int a=1...

2020-03-14 18:59:37 152

原创 空间配置器(SGI-STL)

理解是一种管理空间的机制,对空间进行分配、回收重要性:整个STL的操作对象都存放在容器中,容器需要配置空间置放数据。空间配置器为各容器实现了对空间的高效管理为什么不直接用new/delete?用户自己管理空间,容易内存泄漏频繁申请小的内存空间,造成内存碎片频繁调用函数过程中要出栈压栈,效率低会产生额外的空间浪费(申请的空间大小+对空间管理的空间)可能申请失败为什么不说allo...

2020-03-13 20:37:24 395

原创 volatile限定符

作用:防止编译器过度优化编译器过度优化对生成指令有什么影响?观察代码://模拟设备寄存器unsigned char recv;unsigned char send;//缓冲区unsigned char buf[3];int main(){ buf[0]=recv; buf[1]=recv; buf[2]=recv; ...

2020-03-12 18:36:30 123

原创 socket实现UDP网络通信程序

首先回顾socket套接字编程:socket就是一套网络编程接口:上层用户通过这些接口简单地完成网络通信传输不需要关心内部实现【类似中间件】五元组:(源IP地址,源端口,目的IP地址,目的端口,协议),用于标识数据,每个网络中数据都会包含套接字编程:使用socket接口实现通信网络通信:网络中两端主机上进程间通信,两端分别是客户端、服务器端客户端:永远主动发送请求,发送前必须知道服务器...

2020-03-12 11:45:28 354

原创 哲学家就餐问题——信号量/管程

问题应用程序中包含并发线程的执行时,协调处理共享资源的代表性问题五位哲学家住在一座房子,他们面前有一张餐桌,每个哲学家生活中只有思考和吃饭。经多年思考,哲学家们认为最有助于思考的事物是意大利面。因缺乏手工功能,每位哲学家需要用两把叉子来吃意大利面。如图:每个哲学家面前有个盘子,左右两边各一个叉子。现在设计一个算法来让哲学家就餐。算法必须互斥(没有两个哲学家能同时用一把叉子),同时要避免死锁...

2020-03-11 18:37:06 1752

原创 x86汇编程序基础——Linux C一站式学习

对于下面的汇编程序理解hello.s:将其经过汇编器as、链接器ld处理后生成可执行文件helloas hello.s -o hello.old hello.o -o hello运行后发现只做了一件事:退出,且退出状态是4分析:#:注释"以.开头的名称“:不是指令的助记符,不会被翻译成机器指令,称为汇编指示/伪操作.section指示把代码划分成若干个段,程序被操作系统加...

2020-03-11 16:39:28 245

原创 编译和链接——程序员的自我修养

常用的开发环境如Visual Studio、Delphi,是集成开发环境,在集成开发环境中,将编译链接合并到一起一步完成,其合并到一起的过程称为构建虽然集成开发环境及编译器提供的默认配置、编译与链接参数提供的功能足以强大,但其隐藏了软件运行背后的机制,可能会产生一些莫名其妙的错误被隐藏的过程编译过程可分解为四个步骤:预处理、编译、汇编、链接预处理如对一个main.c文件预处理#-E:...

2020-03-10 14:48:29 145

原创 多进程编程——Linux高性能服务器

fork系统调用Linux下创建新进程#include <sys/types.h>#include <unistd.h>pid_t fork(void);在父进程中返回子进程PID,子进程中返回0失败返回-1并设置errno复制进程映像,在内核进程表中创建新的进程表项。子进程代码与父进程完全相同,同时子进程会复制父进程的数据(堆数据、栈数据、静态数据)新进...

2020-03-08 21:22:05 175

原创 STL总结

三种容器适配器:种类stackqueuepriority_queue默认顺序容器dequedequevector可用顺序容器vector、list、dequelist、dequevector、deque注意基础容器必须提供push_front()基础容器必须提供随机访问基本容器底层结构:vectorlistdeques...

2020-03-07 18:24:44 108

原创 项目:基于ffmpeg的Gif表情包生成器

功能分析由用户选择用图片或是视频来生成Gif。用户在选择后输入文件所在目录,若是图片,直接生成动态图;若是视频,截取视频片段,提取视频裸流,直接生成Gif或提取视频字幕【视频中的字幕必须是外挂字幕,否则使用的工具无法提取】由用户编辑文字显示在视频上最后生成Gif。功能图:工具ffmpegffmpeg是一个特别强大的专门用于处理音视频的开源库。可以用它的API对音视频进行处理,也可以...

2020-03-05 22:21:39 614

空空如也

空空如也

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

TA关注的人

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