自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 排序算法模板

将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;1.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。...

2022-08-28 12:14:30 178 1

原创 进程间通信的方式及其特点

在内核内存中维护一个缓冲器,这个缓冲器的存储能力有限的,可以读写操作,有名管道(FIFO)有文件实体,匿名管道(PIPE)没有文件实体。匿名管道只能用于具有公共祖先的进程。半双工,一端用于写入,一端用于读取。(同一个时间只能往同一个方向,方向是可以双向的)

2022-08-21 13:42:42 1368

原创 MySQL锁

全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。

2022-08-13 18:58:03 148

原创 MySQL游标

根据传入的参数uage,来查询用户表tb_user中,所有的用户年龄小于等于uage的用户姓名 (name)和专业(profession),并将用户的姓名和专业插入到所创建的一张新表。2.游标用于检索出来的行,由select检索出来的结果集。3.游标declare的顺序要在局部变量之后。1.MySQL游标只能用于存储过程。...

2022-08-12 20:22:51 510

原创 适配器模式

适配器是一种结构型设计模式,它能使接口不兼容的对象能够相互合作。适配器可以转换不同格式的数据,有助于采用不同接口的对象之间的合作运作方式1.适配器实现与其中一个现有对象兼容的接口2.现有对象可以使用该接口安全地调用适配器方法。......

2022-08-04 11:13:04 174

原创 建造者模式/生成器模式

建造者模式是一种创建型设计模式,能够分步骤创建复杂对象。该模式允许使用相同的创建代码生题不同类型和形式的对象。建造者模式建议将对象构造代码从产品类中抽取出来,并将其放在一个名为生成器的独立对象中。你可以将复杂构造代码从产品的业务逻辑中分离出来。可以分步创建对象,暂缓创建步骤或递归运行创建步骤。由于该模式需要新增多个类,因此代码整体复杂度增加。生成不同形式的产品时,你可以复用相同的制造代码。...

2022-08-03 15:26:57 181

原创 C++单例模式

单例模式,通过创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例)自己负责创建自己的对象,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。1.将默认构造函数设为私有,防止其他对象使用单例类的new运算符2.新建一个静态构造方法作为构造函数。该函数调用私有构造函数来创建对象,并将其保存在一个静态成员变量中。此后所有对于该函数的调用都将返回这一缓存对象。1.可以保证一个类只有一个实例2.获得了一个指向该实例的全局访问点。......

2022-08-03 10:55:17 213

原创 抽象工厂模式

区别抽象工厂模式相对于工厂方法模式来说,就是工厂方法模式是针对一个产品系列的,而抽象工厂模式是针对多个产品系列的,即工厂方法模式是一个产品系列一个工厂类,而抽象工厂模式是多个产品系列一个工厂类。在抽象工厂模式中,客户端不再负责对象的创建,而是把这个责任丢给了具体的工厂类,客户端只负责对对象的调用,从而明确了各个类的职责。简介抽象工厂模式用于产品族的构建,抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。...

2022-08-02 15:43:14 57

原创 工厂方法模式

简介工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不在负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。3.系统的可扩展性也就变地非常好无需修改接口和原类。1.增加系统中类的个数,复杂度和理解度增加。2.增加了系统的抽象性和理解难度。2.实现了对象创建和使用的分离。......

2022-08-02 10:41:26 115

原创 简单工厂模式

1.简单工厂模式,增加新的功能是通过修改源代码实现,不符合开闭原则。定义定义了一个创建对象的类,由这个类来封装实例化对象的行为。2.这个类职责过重,这个类发生问题会影响很多使用这个工厂的实例。2.对于某些对象创建过程比较复杂,我们不考虑。1.客户端和具体实现类解耦。......

2022-08-01 20:24:11 68

原创 软件设计模式初步

实现“开闭”原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。里氏原则是继承复用的基石,只有当衍生类可以替换基类,软件单元的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。一个类对自己依赖的类知道的越少越好。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。适配器模式,装饰者模式,代理模式,外观模式,桥接模式,组合模式,享元模式。工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。...

2022-08-01 16:05:48 50

原创 C++类模板

类模板通过建立一个通用类,类中的成员数据类型可以不具体指定,用一个虚拟的类型来代表语法案例类模板与函数模板的区别1.类模板没有自动类型推到的使用方式2.类模板在模板参数列表中可以有默认参数普通类中的成员函数是一开始就可以创建的类模板中的成员函数在调用时才可以创建案例类模板对象做函数参数一共有三种传入方式1.指定传入的类型--直接显示对象的数据类型(最常用)2.参数模板化--将对象中的参数变为模板进行传递3.整个类模板化--将这个对象类型模板化进行传递案例:类模板与继承注意事项

2022-07-31 13:23:09 442

原创 C++函数模板

C++一种编程思想称为泛型编程,主要利用的技术就是模板C++提供两种模板机制函数模板和类模板。这里介绍函数模板,类模板在该专题下的另外篇文章中。函数模板作用建立一个通用函数,其函数返回值类型和形参类型可以不具体指定,用一个虚拟的类来表达。...

2022-07-30 17:00:53 319

原创 C++多态技术

多态分为两类1.静态多态函数重载和运算符重载属于静态多态,赋予用函数名2.动态多态派生类和虚函数实现运行时多态静态函数和动态多态区别1.静态多态的函数地址早绑定-编译阶段确定函数地址2.动态多态的函数地址晚绑定-运行阶段确定函数地址。......

2022-07-30 15:47:12 222

原创 C++菱形继承

两个派生类继承同一个基类,又有某个类同时继承了两个派生类,这种继承称为菱形继承或者钻石继承。菱形继承产生的问题设基类为A,继承基类的两个子类为B、C,有D同时继承B、C1.B、C都继承了A的数据,当D使用数据时会产生二义性2.D继承了A的两份数据,我们只需要一份。...

2022-07-30 14:59:24 256

原创 C++运算符重载

对已有的运算符重新定义,赋予其另一个种功能,以适应不同的数据类型。

2022-07-30 11:25:12 102

原创 C++友元

在程序里有些私有属性,想让类外特殊的一些函数或者类进行访问可以采用友元技术。友元的目的就是让一个函数或者类访问另一个类的私有成员。

2022-07-30 10:34:27 140

原创 C++构造函数和析构函数

主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用。默认情况下,c++编译器至少给一个类添加3个函数1.默认构造函数(无参,函数体为空)2.默认析构函数(无参,函数体为空)3.默认拷贝构造函数,对属性进行值拷贝。.........

2022-07-29 17:18:57 151

原创 C++函数重载和重写

存在虚函数的类中都有一个一维的虚函数表叫做虚表(vftable),类的对象有一个指向虚表开始的虚指针(vfpoint)。虚表是和类对应的,虚指针是和对象对应的。3.重写的函数和被重写的函数,返回值相同,或者返回指针或引用,并且派生类虚函数返回的指针或引用的类型是基类中被替换的虚函数返回的指针或引用类型的类型。当子类重写父类的虚函数的时候,会将从父类中继承来的虚表中父类原本的虚函数覆盖掉替换成子类的虚函数地址,从而实现多态。2.重写的函数和倍重写的函数,函数名和函数参数必须完全一致。............

2022-07-29 14:45:44 1722

原创 C++引用

为了支持移动操作,c++新标准引入了一种新的引用类型-右值引用。所谓右值引用就是必须绑定到右值的引用。我们通过&&而不是&来获得右值引用。如我们将要看到的,右值引用有一个重要的性质-只能绑定一个将要销毁的对象。因此,我们可以自由地将一个右值引用的资源"移动"到另一个对象中。左值表达式表示的是一个对象的身份,而右值表达式表示的是对象的值。inta=42;intr=a;//错误,不能将一个右值绑定到一个左值上//错误i*42是一个右值。......

2022-07-29 11:28:37 102

原创 C++内存分区模型

不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程。

2022-07-28 17:01:53 298 2

原创 信号量解决生产者消费者问题

用户进程可以通过操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步。信号量是一个变量来表示系统中某种资源的数量。原语是一种特殊的程序段,其执行只能一气呵成,不可被中断。p、v操作p1.s-12.s-1>=0进程继续执行3.s-10进程继续执行3.s+1...

2022-07-27 19:13:22 1953

原创 条件变量解决生产者消费者问题

功能等待,调用了该函数,线程会阻塞。当这个函数调用阻塞的时候,会对互斥锁进行解锁,当不阻塞的,继续向下执行,会重新加锁。-功能等待多少时间,调用了这个函数,线程会阻塞,知道指定的时间结束。通过设置条件变量来在没有资料的时候消费者等待生产者来生成。条件变量的类型pthread_cond_t。-功能唤醒一个或多个等待的线程。-功能唤醒所有的等待的线程。......

2022-07-27 16:59:01 386

原创 互斥量解决线程同步问题

简介使用互斥量来确保同时仅有一个线程可以访问某项共享资源。互斥量的两种状态已锁定(locked)和未锁定(unlocked)一旦线程锁定互斥量,随即成为该互斥量的所有者,只有所有者才能给互斥量解锁。......

2022-07-27 16:18:39 240

原创 进程间的通信方式简介

简介管道是一个在内核内存中维护的缓冲器,这个缓冲器的存储能力是有限的。特点1.拥有读、写操作的能力,匿名管道没有文件实体,有名管道有文件实体,但不存储数据。2.一个管道是一个字节流,使用管道时不存在消息或者消息边界的概念,从管道读取数据的进程可以读取任意大小的数据块。3.单工4.只能用在公共祖先的进程。......

2022-07-27 15:42:47 149

原创 I/O多路复用技术

poll是对select缺点进行一个改进(没有解决内核态和用户态转变的问题,只是解决了1024比特位的限制以及不能重用每次都需要重置的问题。rbr红黑树+rdlist双链表。

2022-07-26 14:28:16 245

原创 多线程并发服务器

一般情况下,main函数所在的线程我们称之为主线程(main线程),其余创建的线程称之为子线程程序中默认只有一个进程,fork()函数调用,2进程程序中默认只有一个线程,phtread_create()函数调用,2个线程。线程在第三方库中所以需要-phtread或者-lpthread来编译连接。......

2022-07-25 19:00:55 249

原创 多进程实现并发服务器

功能回收指定进程号的子进程,可以设置是否阻塞参数某个子进程pid回收当前进程组的任意子进程回收所有的子进程,相当于wait()最常用回收某个进程组的组id的绝对值,回收指定进程组的子进程如回收2组子进程资源传递(-2)进程退出时的状态信息,传入的是一个int类型的地址,传出参数设置是否阻塞阻塞非阻塞返回值返回子进程的idoptions=WNOHANG,表示还有子进程错误,或者没有子进程。...............

2022-07-25 16:38:07 258

原创 Socket通信编程

网络中不同主机上的应用进程之间进行双向通信的端口的抽象,是应用程序通过网络协议进行通信的接口。Linux环境下,socket用于表示进程间通信的特殊文件类型。本质位内核借助缓冲区形成的伪文件。可以用文件描述符来引用套接字。..................

2022-07-23 17:23:51 2006

原创 C++面试整理

区别:(1)尖括号的头文件是系统文件,双引号""的头文件是自定义文件。(2)编译器预处理阶段查找头文件的路径不一样。查找路径:(1)使用尖括号的头文件的查找路径:编译器设置的头文件路径-->系统变量。(2)使用双引号""的头文件的查找路径:当前头文件目录-->编译器设置的头文件路径-->系统变量。简述C++从代码到可执行二进制文件的过程C++和C语言类似,一个C++程序从源码到执行文件,有四个过程,预编译、编译、汇编、链接。预编译:这个过程主要的处理操作如下:(1) 将所有的#define删除,并且....

2022-07-11 16:20:26 578

原创 Mysql

精度就是数据总长度,标度是小数长度char(10)就是10位字符串 varchar是根据字符串真实长度来申请空间1.INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);insert into employee(id,workno,name,gender,age,idcard,entrydate) values(1,'1','Itcast','男',10,'123456789012345678','2000-01-01');2.UPDATE 表名 SET

2022-07-11 16:19:52 355

原创 操作系统面试整理

参考回答定义不同软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。硬链接就是一个文件的一个或多个文件名。把文件名和计算机文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。限制不同硬链接只能对已存在的文件进行创建,不能交叉文件系统进行硬链接的创建;软链接可对不存在的文件或目录创建软链接;可交叉文件系统;创建方式不同硬链接不能对目录进行创建,只可对文件创建;软链接可对文件或目录创建;影响不同删除一

2022-07-11 16:19:33 267

原创 5.6EPOLLONESHOT事件

即使可以使用 ET 模式,一个socket 上的某个事件还是可能被触发多次。这在并发程序中就会引起一个 问题。比如一个线程在读取完某个 socket 上的数据后开始处理这些数据,而在数据的处理过程中该 socket 上又有新数据可读(EPOLLIN 再次被触发),此时另外一个线程被唤醒来读取这些新的数据。于 是就出现了两个线程同时操作一个 socket 的局面。一个socket连接在任一时刻都只被一个线程处理,可 以使用 epoll 的 EPOLLONESHOT 事件实现。 对于注册了EPOLLONESHO

2022-07-10 20:33:23 490 3

原创 5.5线程池

线程池是由服务器预先创建的一组子线程,线程池中的线程数量应该和 CPU 数量差不多。线程池中的所 有子线程都运行着相同的代码。当有新的任务到来时,主线程将通过某种方式选择线程池中的某一个子 线程来为之服务。相比与动态的创建子线程,选择一个已经存在的子线程的代价显然要小得多。至于主 线程选择哪个子线程来为新任务服务,则有多种方式:主线程使用某种算法来主动选择子线程。最简单、最常用的算法是随机算法和 Round Robin(轮流 选取)算法,但更优秀、更智能的算法将使任务在各个工作线程中更均匀地分配,从而减轻服

2022-07-02 16:24:51 141

原创 5.4服务器编程基本框架和两种高效的事件处理模式

虽然服务器程序种类繁多,但其基本框架都一样,不同之处在于逻辑处理。I/O 处理单元是服务器管理客户连接的模块。它通常要完成以下工作:等待并接受新的客户连接,接收 客户数据,将服务器响应数据返回给客户端。但是数据的收发不一定在 I/O 处理单元中执行,也可能在 逻辑单元中执行,具体在何处执行取决于事件处理模式。一个逻辑单元通常是一个进程或线程。它分析并处理客户数据,然后将结果传递给 I/O 处理单元或者直 接发送给客户端(具体使用哪种方式取决于事件处理模式)。服务器通常拥有多个逻辑单元,以实现对 多个客户任务

2022-07-02 09:38:45 295

原创 5.3Web服务器简介及HTTP协议

一个 Web Server 就是一个服务器软件(程序),或者是运行这个服务器软件的硬件(计算机)。其主 要功能是通过 HTTP 协议与客户端(通常是浏览器(Browser))进行通信,来接收,存储,处理来自 客户端的 HTTP 请求,并对其请求做出 HTTP 响应,返回给客户端其请求的内容(文件、网页等)或返 回一个 Error 信息。通常用户使用 Web 浏览器与相应服务器进行通信。在浏览器中键入“域名”或“IP地址:端口号”,浏览器则 先将你的域名解析成相应的 IP 地址或者直接根据你的IP地址向对应的

2022-07-01 21:51:16 431

原创 5.2Unix/Linux上的五种IO模型

调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的去检查这个函数有没有返回,必须等这个函数返回才能进行下一步动作。非阻塞等待,每隔一段时间就去检测IO事件是否就绪。没有就绪就可以做其他事。非阻塞I/O执行系统调用总是立即返回,不管事件是否已经发生,若事件没有发生,则返回-1,此时可以根据 errno 区分这两种情况,对于accept,recv 和 send,事件未发生时,errno 通常被设置成 EAGAIN。Linux用select/poll/epoll函数实现IO复用模型,这些函数也会使进程

2022-06-30 19:40:09 628

原创 5.1阻塞和非阻塞/同步和异步

典型的一次IO的两个阶段是什么?数据就绪 和 数据读写数据就绪:根据系统IO操作的就绪状态阻塞非阻塞数据读写:根据应用程序和内核的交互方式同步异步在处理 IO 的时候,阻塞和非阻塞都是同步 IO,只有使用了特殊的 API 才是异步 IO。一个典型的网络IO接口调用,分为两个阶段,分别是“数据就绪” 和 “数据读写”,数据就绪阶段分为 阻塞和非阻塞,表现得结果就是,阻塞当前线程或是直接返回。同步表示A向B请求调用一个网络IO接口时(或者调用某个业务逻辑API接口时),数据的读写都是 由请求方A自己来完成的(不

2022-06-30 17:31:30 60

原创 4.35本地套接字通信

server: client:

2022-06-29 17:02:37 190

原创 4.34组播

server: client:

2022-06-29 14:40:03 71

空空如也

空空如也

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

TA关注的人

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