自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

袁君

记录学习过程

  • 博客(14)
  • 收藏
  • 关注

原创 Stable Diffusion:Linux、Mac环境安装教程

Linux下的Stable Diffusion安装教程,支持Ubuntu,Centos,Mac,M1系列等等的安装

2023-05-15 11:37:45 2979

原创 Linux编程:1. 协程的设计原理

协程(Coroutine)是一种用户态的轻量级线程,也称为微线程。协程不同于操作系统提供的线程,它在程序中是由用户自己控制调度的,可以看做是一种特殊的函数或代码块,可以暂停执行并保存当前状态,在需要的时候恢复执行。协程通常用于异步编程、高并发、网络编程等领域,能够有效地提高程序的性能和资源利用率// 协程函数指针 void * arg;// 协程执行函数参数指针 char * stack;// 协程栈空间指针 size_t stack_size;// 协程栈空间大小 jmp_buf env;

2023-05-07 00:18:11 532

原创 网络基础:5. UDP的可靠传输协议QUIC

UDP (User Datagram Protocol) 是一种无连接的网络传输协议,它不保证数据传输的可靠性和顺序,但具有高效、低延迟和灵活的特点。UDP常用于实时通信应用程序,例如音频、视频和在线游戏等。由于UDP将数据包发送到目标地址,而不需要建立连接,因此它比TCP更加简单、轻量级和快速。但是,由于它不提供数据完整性检查和重传机制,因此在一些应用场景下可能会出现数据丢失或错误的问题。

2023-05-05 23:20:45 1250

原创 网络基础:4. Posix API与网络协议栈

POSIX API(Portable Operating System Interface API)是一组可移植的操作系统接口,用于在不同的UNIX类操作系统之间实现更好的兼容性。该API定义了一系列标准函数和常量,以及许多其他规范,包括文件系统层次结构、进程控制、信号处理、线程管理、内存管理等。POSIX API使得开发人员能够编写具有较高可移植性的应用程序。

2023-05-05 20:39:06 255

原创 网络基础:3. Reactor的应用场景

当一个客户端连接到Nginx时,Master进程会将这个连接分配给某个Worker进程来处理,如果这个Worker进程正在处理其他请求,则可以同时处理多个请求,从而提高了并发能力。同时,每个Worker进程都是独立的,互相之间不会影响,故而在Worker进程出现问题时,Master进程可以快速重新启动一个新的Worker进程,保证了服务器的稳定性和可靠性。此外,Nginx还使用事件驱动模型,即基于事件回调的方式来处理请求,避免了线程上下文切换导致的性能损耗,也是Nginx高性能的重要原因之一。

2023-04-23 23:42:32 169

原创 网络编程:2. Reactor与Proactor

通过使用事件处理模型,我们可以将代码结构化、模块化,并且可以更容易地维护和扩展。同时,事件处理模型也能够提高程序的并发性和响应性,因为事件处理器可以在不阻塞主线程的情况下异步处理事件。

2023-04-18 22:59:41 104

原创 网络编程:1. 理论基础

在计算机领域中,IO通常指计算机与外部设备进行数据交互的过程,例如从硬盘读取文件或将数据输出到打印机等。IO操作通常是比较耗时的,因为需要和外部设备进行交互。

2023-04-13 00:06:54 78

原创 数据结构与算法:1. 随处可见的红黑树

因为key-value是一个强查找的过程,kv结构有下面这几种。红黑树在插入任何一个结点之前,他已经是一个红黑树。

2023-02-12 15:16:39 131

原创 网络编程:2. reactor的原理与实现

epoll是Linux内核为处理大批量文件描述符(FD)而做了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。

2023-02-11 23:39:11 113

原创 网络编程:1. 网络IO与select

当打开一个文件时,内核向进程返回一个文件描述符(open系统调用得到),后续read、write这个文件时,只需要用这个文件描述符来标识该文件,将其作为参数传入read、write就能读写文件。下面是最基础的TCP端口监听代码,默认创建socket的listenfd是阻塞的,如果需要变成非阻塞的,需要使用fcntl这个函数去对listenfd做或操作(位运算)socket套接字是一种通信机制,提供了TCP/IP协议的抽象,对外提供了一套接口,通过这个接口可以统一、方便的使用TCP/IP协议的功能。

2023-02-10 20:52:00 114

原创 M1配置微服务插件

M1安装protobuf下载protobuf点击下载解压缩tar -xzvf protobuf-2.5.0.tar.gz && cd protobuf-2.5.0/编辑文件,使其支持M1文件路径 src/google/protobuf/stubs/platform_macros.h#else#error Host architecture was not detected as supported by protobuf在上面这两行代码上面,添加代码#elif defi

2022-05-08 06:22:03 588

原创 经典排序算法

经典排序算法冒泡排序插入排序选择排序归并排序快速排序堆排序计数排序冒泡排序时间复杂度O(N²)空间复杂度O(1)稳定排序原地排序算法流程:两层循环遍历数组依次对数组中的相邻元素进行比较,看是否满足大小关系如果不满足,就将这两个相邻元素交换值第一种写法,可以有一个优化,当数组已经有序的时候,可以直接跳出循环,不再继续执行void swap(int arr[], int i, int j) { int tmp = arr[i]; arr[i] = arr[j]

2021-06-28 21:15:50 283 1

原创 Mancher算法详解附带练习题

Mancher算法1. 介绍用来计算回文子串,用一个数组记录每个位置上,以当前位置为中心,往两边扩的最长回文半径2. 求回文子串长度有两种方法:方法一:暴力求解,无优化,以每个位置为中心,往两侧匹配。这个方法有一个缺陷,只能匹配奇数的时候,比如aba,如果是abba中间的两个b就匹配不上。解决方法是将每个字符中间都加上一个特殊字符#,任意字符都行,就算是字符串中存在的字符也是可以的然后字符串abba就会变成#a#b#b#a#,这时候再往两侧扩就不会出现错误方法二:Manche

2021-05-21 22:15:53 918 6

原创 KMP算法详解附带练习题

KMP算法1. 简单介绍KMP算法用作字符串匹配返回匹配成功字符串的起始位置,时间复杂度O(N)Java中自带indexOf函数,indexOf函数是KMP的优化版本,只优化了常数时间。2.next数组作用可以加速匹配的过程,不必暴力匹配next数组保存的是前缀字符串和后缀字符串最大匹配长度(不包含字符串本身)实现过程next[0]默认值为-1,人为规定,用于后续做判断next[1]=0,当i=1的时候,[0,i-1]范围内只有一个字符,所以前缀长度与后缀长度为0,因为前缀

2021-05-21 21:27:59 3979

空空如也

空空如也

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

TA关注的人

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