自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式 --5观察者模式

2:具体的观察者将自己具体的动作也同时注册到 通知类里面 改变通知类里面的容器为map容器类 key为具体的观察者 value为具体的处理函数。1:具体的观察者实现具体的 自己需要完成的任务 在继承抽象Observer后 在update内部直接调用具体的方式。可以使用两种方式去解决此类问题。

2024-04-05 13:00:03 583

原创 基于socket的回射服务器

【代码】基于socket的回射服务器。

2024-04-03 16:32:21 424

原创 leet hot 100-13 最大子数组和

生成一个数字来记录last 表示前面数字全部之和与0取最大值 如果大于0 就加上如果不大于0 就不管 从当前位置从新开始遍历计算。时间复杂度O(n) 空间复杂度(1)

2024-04-03 15:05:13 255

原创 leet hot 100-10 和为 K 的子数组

看到连续非空数组 想到前缀和数组 首先记录前缀和 然后从前往后运算 计算当前位置的前缀和的大小 减少k个 那么这个数字在前缀和的数组中有多少。时间复杂度O(n) 空间复杂度(n)

2024-04-03 14:56:45 272

原创 configure: error: openssl is a must but can not be found. You should add the direct

/查看当前apt-get下载源节点里libssl-dev可下载安装的所有版本,和默认的最合适的版本。//下载并默认安装libssl-dev(默认的版本)./configure 遇到的问题。安装libevent 遇到的问题。//更新apt-get下载源节点。

2024-04-03 10:06:52 211

原创 http协议

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。HTTP协议工作于客户端-服务端架构为上。

2024-04-02 15:18:04 828

原创 半同步/半异步进程池

请把 主线程和 工作线程视作主进程和工作进程这避免了因为一个进程只处理一个请求的情况下 存在很多的上下文切换的问题。

2024-03-29 15:19:28 287

转载 四种软件架构:单体架构、分布式架构、微服务架构、Serverless架构

中级架构,分布式应用,中间层分布式+数据库分布式,是单体架构的并发扩展,将一个大的系统划分为多个业务模块,业务模块分别部署在不同的服务器上,各个业务模块之间通过接口进行数据交互。:这一点在现在互联网创业公司得到很好的体现,创业公司往往开始由于人员和资金等问题,不可能每个产品线都同时进行,这时候就可以考虑第三方的Baas平台,比如使用微信的用户认证、阿里云提供的RDS,极光的消息推送,第三方支付及地理位置等等,能够很快进行产品开发的速度,把工作重点放在业务实现上,把产品更快的推向市场。

2024-03-28 09:48:14 111

原创 阿里云ubuntu服务器搭建可视化界面

最好初始化服务器的时候 不要以root权限创建 否则会出错。

2024-03-27 08:38:35 636

转载 搞懂容器技术的基石: namespace

搞懂容器技术的基石: namespace (上)搞懂容器技术的基石: namespace (下)

2024-03-26 08:58:25 15

原创 服务器调制 调试 和测试

三个方面 系统调试 服务器调试和压力测试来优化改进服务器liunx 平台优秀特性 内核微调 可以通过修改文件的方式 来调制内核的参数。

2024-03-25 16:14:37 980

原创 设计模式 --4:工厂方法模式

定义一个用于创建对象的接口。让子类决定实例化那一个类。工厂方法是一个类的实例化延迟到其子类原来的简单工厂模式就可以写成下面的架构:以后修改代码的时候 也不用去修改原来的工厂类 而是直接去声明其子类(具体的工厂) 新的添加不会影响其他的子类修改后的代码#include // 引入智能指针的头文件// 操作基类public:// 纯虚函数,强制派生类实现NumsA = A;NumsB = B;

2024-03-22 17:18:44 669

原创 C++协程

如果遇到很耗时的I/O行为,则整个系统的吞吐立刻下降,因为这个时候线程一直处于阻塞状态,如果线程很多的时候,会存在很多线程处于空闲状态(等待该线程执行完才能执行),造成了资源应用不彻底。协程,英文Coroutines,是一种基于线程之上,但又比线程更加轻量级的存在,这种由程序员自己写程序来管理的轻量级线程叫做『用户空间线程』,具有对内核来说不可见的特性。而协程的目的就是当出现长时间的I/O操作时,通过让出目前的协程调度,执行下一个任务的方式,来消除ContextSwitch上的开销。

2024-03-22 09:40:13 784

原创 高性能I/O框架库Libevent

在处理三类事件:I/O事件 信号 定时事件 的时候 需要考虑三个问题统一事件源 统一处理三类事件 利用I/O复用系统调用来管理所有事件可移植性 不同的操作系统具有不同的I/O复用方式,比如Solaris的dev/poll文件, FreeBSD的kqueue机制,Liunx的epoll系列系统调用并并发编程的支持,在多进程和多线程环境下,需要考虑个执行实体如何协同处理客户连接,信号,定时器,以避免竞态条件。

2024-03-21 20:52:21 539

转载 一文为你讲解清楚并发,同步,异步,互斥,阻塞,非阻塞

阻塞和非阻塞是当进程在访问数据时,根据IO操作的就绪状态不同而采取的不同处理方式,比如主程序调用一个函数要读取一个文件的内容,阻塞方式下主程序会等到函数读取完再继续往下执行,非阻塞方式下,读取函数会立刻返回一个状态值给主程序,主程序不等待文件读取完就继续往下执行。总结:1)同步与异步是对应的,它们是线程之间的关系,两个线程之间要么是同步的,要么是异步的。同步是个过程,阻塞是线程的一种状态:当多个线程访问同一资源时,规定同一时间只有一个线程可以进行访问,所以后访问的线程将阻塞,等待前访问的线程访问完。

2024-03-20 11:24:04 63

原创 unbantu系统上传代码到gitee报403(push代码的时候 不提示输入账号密码 直接403)

403

2024-03-18 15:58:39 200

原创 设计模式 --3:装扮模式

装饰模式 就是为已有功能添加更多功能的一种方式当我们需要新的功能的时候 如果要往最开始的功能类里面添加新的功能 无疑会给原来的主类增加复杂度 而装饰模式会给每一个需要装饰功能单独设置一个类 我们需要那些类就去装载那些类因此更方便的添加和删除功能 而不用去修改主类代码 把类中的装饰功能移除出去 可以简化原有的类但是需要注意装饰的顺序问题 最理想的是保持类的相互独立 比如把每一个装饰的地方划分一个功能 上衣 裤子 鞋 之类的 让这些装饰类同时只能有一个单独的功能(西装上衣 体恤上衣 或者 卫衣)

2024-03-17 11:08:23 342

原创 设计模式 -- 2:策略模式

策略模式和简单工厂模式很像区别在于 简单工厂模式 需求的是由工程创造的类 去给客户直接答案而策略模式在于 我有主体 一个主体 根据策略的不同来进行不同的计算 我的主体就负责收钱 然后调度相关策略。

2024-03-13 10:12:55 580

原创 大话设计模式 :UML类图 原版部分

+’ 表示public‘-’ 表示private‘#’表示protected棒棒糖表示法 类内实现的接口 用棒棒糖的形状在外部具体实现。

2024-03-12 23:22:15 259

原创 设计模式 -- 1:简单工厂模式

设计模式的代码注意要运用到面向对象的思想 考虑到紧耦合和松耦合。把具体的操作类分开 不让其互相影响(注意这点)

2024-03-12 22:57:05 844

原创 liunx高性能服务编程----定时器

一种简单的定时器实现,基于升序链表的定时器实现。通过这个案例来观察 SIGALRM信号处理函数是如何处理定时器并执行定时任务的。对服务器的性能影响很大,我们需要将每个定时事件封装成定时器,再使用某种容器的数据结构,来串联这些定时器以统一管理。我们可以通过系统调用的返回值 以及errno来判断超时事件是否已经到,进而决定是否开始处理定时任务。定时是指在一段时间之后触发某段代码的机制,可以在这段代码内处理所有到期的定时器。可选参数 是否重启定时器,如果是链表还要考虑是否有前后定时器的指针成员。

2024-03-11 14:27:18 415

原创 异常网络下TCP的可靠服务机制(慢启动、拥塞避免、快重传、快恢复)

拥塞控制的目的是提高网络利用率降低丢包率保证网络资源对每条数据流的公平性慢启动(slow start)拥塞避免(congestion avoidance)快速重传(fast retransmit)快速恢复(fast recovery)拥塞控制算法在liunx上 有多种实现,比如reno算法,vegas算法和cubic算法等。它们或者部分或者全部实现了上面上述四个部分.

2024-02-28 10:05:50 1115

原创 leet hot 100-9 找到字符串中所有字母异位词

遍历整个数组 每次把当前元素在容器中的次数减去1 表示这个当前维护的窗口里面s[i] 的次数需要满足的点-1,然后查看当前的窗口的大小是否大于指定的p的大小 只有窗口大小等于p的大小才能查看窗口里面的值是否全部满足条件,如果要大于窗口里面的值 需要将j往后面走 就从新把条件收回 如果cnt[j] 表示需要满足的条件j这一位 如果刚好满足 但是窗口要减小了 它不满足了 就要收回相关的满足条件 只到把窗口调整为p的大小。最后再查看一下满足的条件 是否等于p中不同字母的数量。时间复杂度O(n) 空间复杂度(n)

2024-02-27 14:41:15 279

原创 cmake 官方文档

官网文档

2024-02-27 10:10:06 124

原创 leet hot 100-8 无重复字符的最长子串

声明一个无序map容器,容器里面记录着窗口里面字符的数量 ,如果字符的数量大于1 遍历到s[i]的时候 数量+1 此时如果map里面相关的数量大于1 说明窗口里面有重复值 需要将相关的值减少1 维护最大不同字母数量。时间复杂度O(n) 空间复杂度(n)

2024-02-26 21:53:11 469

原创 leet hot 100-6 三数之和

从前往后定义第一个数字 first 开始遍历整个数组 然后要求 frist和上一个数字不重复否则就是重复组合。再定义第三个数字从后往前面数 三个数字相加直到加到 相加小于 0或者等于0为止 然后判断值 并记录答案。从frist往后遍历第二个数字 同样要求第二个数字不能重复。时间复杂度O(n^2) 空间复杂度(1)

2024-02-26 21:25:11 178

原创 leet hot 100-4 移动零

遍历数组 将非0数字 移动到数组前端 数字0就会被移动到数组末端。时间复杂度O(n) 空间复杂度(n)

2024-02-24 11:21:54 312

原创 leet hot 100-3 最长连续序列

如果是起始位置 就记录一下当前值 并把当前值从无序集合里面清除,然后去查看一下当前值+1是否存在。每一次去遍历数字 查看但当前数字是否为起始位置(它的前面是否有比它小一位的数字)存在的话就继续删除并+1 直到没有下一个值为止 期间维护一个最大值 最后返回。可以把所有的数字放到容器里面去 维护一个最大值。时间复杂度O(n) 空间复杂度(n)

2024-02-24 11:15:27 148

原创 leet hot 100-2 字母异位词分组

要求把含有相同字母的放到一起,我们可以遍历每一个字符串 将他们重新排序,将排序完是一样的字符串放在一起 用无序容器存放起来。然后遍历这个无序map容器将排序后相同的值放在一起。时间复杂度O(n) 空间复杂度(n)

2024-02-24 11:05:56 370

原创 leet hot 100-1 两数之和

当我们遍历一个新的数字的时候 减一下与目标值的差。然后得到的结果在容器里面查看是否存在。时间复杂度O(n) 空间复杂度(n)可以把当前数字放到容器里面去。

2024-02-24 10:57:30 189

原创 7-liunx服务器规范

该函数将PID为pid的进程PGID设置为pgid,如果pid和pgid相同,则把pid对应的进程设置为进程组首领。rsyslogd 既能接受用户日志 也能接受内核日志 用户调用syslog来将信息输出到本地UNIX域中的socket类型的文件/dev/log rsyslog则监听该文件以获取 用户进程的输出。rsyslogd守护进程收到用户进程或者内核输入的日志后 会输出到指定的日志文件中,这些都是可以配置的。这关乎用户信息的安全性。下面函数可以获取和设置当前进程的真实用户,有效用户,真实组,有效组。

2024-02-22 15:29:56 986

原创 git使用过的命令记录

随时更新

2024-02-21 10:02:08 542

原创 I/O复用 (包含select 和 poll详解)

可以看到fd_set里面仅包含一个整型数组,数组的每一个元素就是一个文件描述符。此结构体能容纳的数量由FD_SETSIZE指定。此举限制了select能同时处理文件描述符的总量.

2024-02-20 11:24:08 1232

原创 C语言中的可变参数

总结:读取可变参数的过程其实就是在堆栈中,使用指针,遍历堆栈段中的参数列表,从低地址到高地址一个一个地把参数内容读出来的过程·(因为入栈是从高地址向低地址入栈,出栈就从低地址向高地址出栈,先入后出)

2024-02-18 12:36:25 783

原创 三组I/O复用函数的比较

这三组I/O复用系统调用,这三组系统调用都能同时监听多个文件描述符,它们将等待由timeout参数指定超时时间,知道一个或者多个文件描述上面有事件发生时候返回,返回的就是就绪的文件描述符的数量,返回0表示没有事件发生。下面我们从事件集,最大支持文件描述符数,工作模式和具体实现等四个方面进一部分比较它们的异同,以明确在实际应用中应该使用那一个。

2024-02-17 14:39:22 700

原创 epoll 系列系统调用(I/O复用函数)

当往epoll内核事件上注册一个文件描述符上的EPOLLET事件时 ,epoll将以ET模式来操作当前文件描述符.ET模式是epoll的高效工作模式。epoll_data_t 是个联合体,其四个成员 中使用最多的是fd,它是指定事件所从属的目标文件描述符。该函数返回的文件描述符将作用于其他所有epoll系统调用的第一个参数,以指定要访问的内核事件表。该函数成功时返回就绪的文件描述符的个数,失败时 返回-1 并设置相关的errno。其次,epoll把用户关心的文件描述符上面的事件放在内核里的一个事件表中,

2024-02-08 17:23:25 831

原创 第二讲 数据结构 AcWing 827. 双链表

例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n个数依次为:第 1个插入的数,第2个插入的数,…注意:题目中第 k个插入的数并不是指当前链表的第 k个数。IL k x,表示在第 k 个插入的数左侧插入一个数。IR k x,表示在第 k 个插入的数右侧插入一个数。L x,表示在链表的最左端插入数 x。R x,表示在链表的最右端插入数 x。D k,表示将第 k 个插入的数删除。在第 k 个插入的数左侧插入一个数;在第 k个插入的数右侧插入一个数。将第 k个插入的数删除;在最右侧插入一个数;

2024-02-07 17:12:35 492

原创 第二讲:数据结构 AcWing 826. 单链表

笔试的题目大部分 大部分涉及到链表都是十万级别的 用数组的方式创建链表速度很快,不会超时,而如果用new 一个结构体的话 大部分就是比较慢的 所以不建议使用。例如操作过程中一共插入了 n个数,则按照插入的时间顺序,这 n个数依次为:第 1 个插入的数,第 2 个插入的数,…D k,表示删除第 k 个插入的数后面的数(当 k 为 0 时,表示删除头结点)。注意:题目中第 k个插入的数并不是指当前链表的第 k 个数。I k x,表示在第 k个插入的数后面插入一个数 x。删除第 k个插入的数后面的数;

2024-02-07 16:35:43 891

原创 25. 剪绳子

例如当绳子的长度是 8 时,我们把它剪成长度分别为 2、3、3 的三段,此时得到最大的乘积 18。绳子,请把绳子剪成 m 段(m、n都是整数,2≤n≤58 并且 m≥2)。分成的段长度 如果为 5 那么可以分成 2 3 乘积为 6 比5大。而 长度比5 大的数字 一定可以分成多段 让其乘积比本身的数字大。每段的绳子的长度记为 k[1]、k[2]、……如果为4 可以分成两段 2 * 2 乘积为 4 结果不变。如果结果为2 就res =2 再循环-3 并相乘。此题 经典小学数奥题目。

2024-02-07 15:29:20 203

原创 WireShark使用教程(TCP/IP 部分情况居然变成三次挥手了???)

Wrieshark(前身Ethereal)是一个网络包分析工具。该工具主要是用来捕获网络数据包,并自动解析数据包,为用户纤细显示数据包的详细信息,供用户对数据包进行分析Wireshark。

2024-02-07 12:08:12 1042

空空如也

空空如也

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

TA关注的人

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