- 博客(229)
- 资源 (15)
- 收藏
- 关注
原创 Linux资源管理
Linux目录介绍Linux命令解析器-Bash解析器常用快捷键内建命令和外部命令帮助文档目录相关的命令文件类型文件相关命令文件内容查看命令查找相关命令文件权限管理使用chmod 命令修改文件权限chown 命令用于修改文件所有者以及文件所属组压缩命令gzip压缩命令bzip2压缩命令zip和unzipkill命令进程管理重定向软件安装和卸载其它命令ln符号链接命令
2025-08-19 17:33:00
747
原创 STL资源整理
初识STLstring容器vector容器deque容器stack容器queue容器list容器set容器map容器拷贝算法和替换算法排序算法查找算法遍历算法函数对象(仿函数)
2025-08-10 09:58:38
338
原创 go中的协程Goroutine
goroutine是Go语言并行设计的核心,有人称之为go程。Goroutine从量级上看很像协程,它比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部实现了这些goroutine之间的内存共享。执行goroutine只需极少的栈内存(大概是4~5KB),当然会根据相应的数据伸缩。也正因为如此,可同时运行成千上万个并发任务。goroutine比thread更易用、更高效、更轻便。
2026-05-17 14:36:09
12
原创 go语言面向对象和异常处理
GO语言中没有类(class)的概念,但是我们可以将结构体比作为类,因为在结构体中可以添加属性(成员),方法(函数)。go语言没有class 关键字,可以使用结构体代替。在go语言中只有两种异常处理。子类重写了父类的虚函数。父类指针指向子类对象。
2026-05-16 18:46:03
189
原创 Go语言中的指针
new创建的内存空间默认值为数据类型默认值。如:new(int) 则 *p为0,new(bool) 则 *p为false。 我们只需使用new()函数,无需担心其内存的生命周期或怎样将其删除。操作符 “&” 取变量地址, " * " 通过指针访问目标对象。只需使用new()函数,无需担心其内存的生命周期或怎样将其删除。Go语言保留了指针,但与C语言指针有所不同。c语言中的指针,空值0,在go语言中空指针是nil。不支持指针运算,不支持 “->” 运算符,直接⽤ “.” 访问目标成员。
2026-05-15 23:19:14
163
原创 go语言中map
Go语言中的map(映射、字典)是一种内置的数据结构,它是一个无序的key-value对的集合,比如以身份证号作为唯一键来标识一个人的信息。Go语言中并没有提供一个set类型,但是map中的key也是不相同的,可以用map实现类似set的功能。 在一个map里所有的键都是唯一的,而且必须是支持==和!=操作符的类型,切片、函数以及包含切片的结构类型这些类型由于具有引用语义,不能作为映射的键示例map值可以是任意类型,没有限制。
2026-05-15 15:11:34
156
原创 go 语言中的切片
长度不能超过容量,容量一般是从slice的开始位置到底层数据的结尾位置。一个slice是一个轻量级的数据结构,提供了访问数组子序列(或者全部)元素的功能,而且slice的底层确实引用一个数组对象。指针指向第一个slice元素对应的底层数组元素的地址,要注意的是slice的第一个元素并不一定就是数组的第一个元素。append函数会智能的将底层数组的容量增长,一旦超过原底层数组容量,通常以2倍(1024以下)容量重新分配底层数组,并复制原来的数据。slice的语法和数组很像,只是没有固定长度而已。
2026-05-14 23:50:23
448
原创 golang 基础语法和函数
函数名:遵循标识符命名规则,首字母大写表示包外可导出(public),小写表示包内私有(private)。参数列表:多个参数用逗号分隔,类型写在参数名后面。如果相邻参数类型相同,可以省略前面参数的类型声明。返回值列表:可以返回零个、一个或多个值。多个返回值需要用括号()括起来。// 无参数无返回值")// 带参数无返回值// 参数类型相同可简写// 单个返回值// 多个返回值(匿名返回)// 多个返回值(有名返回)q = a / br = a % b。
2026-05-14 22:07:13
345
原创 正则表达式
正则表达式是一种用特殊语法表示字符类、数量限定符和位置关系的模式匹配工具。字符类包括.(任意字符)、[](指定字符集)、^(排除字符)等;数量限定符如?(0或1次)、+(1次以上)、{N,M}(N到M次)等;位置限定符包括^(行首)、$(行尾)、\b(单词边界)等。此外,find命令用于文件查找,支持按名称、权限、时间等条件筛选,并可通过-exec执行后续操作,如find . -type f -name "*.log" -exec rm {} \;删除匹配文件。两者结合可实现高效文本与文
2026-05-08 22:34:47
333
原创 Shell
本文介绍了Shell脚本的基本概念和使用方法。Shell脚本是一种解释型语言,可以直接执行而无需编译。文章详细讲解了Shell脚本的四种执行方式、变量类型(局部变量和全局变量)、转义符的使用(包括文件名代换、命令代换和算术代换)、以及分支语句的语法(数值测试、字符串测试和文件测试)。通过示例代码,展示了如何编写和执行简单的Shell脚本,包括变量赋值、条件判断和文件操作等基本功能。Shell脚本作为一种高效的自动化工具,在系统管理和日常任务中具有广泛的应用价值。
2026-05-08 10:00:06
376
原创 http协议
HTTP协议是互联网上应用最广泛的网络协议,用于浏览器与服务器之间的通信。它具有简单快速、灵活、无连接和无状态等特点。HTTP通常基于TCP协议,而HTTPS则在HTTP基础上增加了SSL/TLS加密层,提供更高的安全性。两者的主要区别在于加密方式、端口号(80 vs 443)和证书要求。 HTTP请求报文由请求行、请求头、空行和请求数据组成,支持GET和POST等方法。GET适合获取资源,POST适合提交数据。响应报文包含状态行、响应头、空行和响应数据,状态码表示请求结果(如200成功、404未找到)。U
2026-04-22 00:37:53
435
原创 fastCGI和spawn-fcgi 安装部署
通用网关接口(Common Gateway Interface、CGI)描述了客户端和服务器程序之间传输数据的一种标准,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI独立于任何语言的,CGI 程序可以用任何脚本语言或者是完全独立编程语言实现,只要这个语言可以在这个系统上运行。Unix shell script、Python、Ruby、PHP、 perl、Tcl、 C/C++和 Visual Basic 都可以用来编写 CGI 程序。快速通用网关接口。
2026-04-22 00:28:25
719
原创 nginx测试
修改配置文件/usr/local/nginx/html/index.html。修改配置文件/usr/local/nginx/conf/nginx.conf。: 代理了客户端的请求;隐藏了真实的请求对象。隐藏了真实的服务对象。
2026-04-22 00:26:50
31
原创 DockerFile
DockerFile构建镜像指南 本文介绍了DockerFile的基本用法,包括常用指令和构建镜像的完整流程。主要内容包括: 基础指令:FROM指定基础镜像、MAINTAINER设置作者信息 目录操作:WORKDIR设置工作目录 命令执行:RUN构建时执行命令、CMD/ENTRYPOINT容器启动时执行命令 文件操作:COPY/ADD复制文件到镜像 端口配置:EXPOSE声明端口 提供了多个示例DockerFile和构建命令 包含Docker相关的中英文资源链接 通过示例演示了如何构建包含gcc编译器的镜像
2026-04-20 21:13:38
643
原创 docker容器
容器就是运行镜像的实例. 镜像看作是静态的,容器是动态的。Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。它可以启动、开始、停止、删除,而这些容器都是彼此相互隔离、 互不可见的。可以把容器看做一个简易版本的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等) 以及运行在其中的应用程序打包而成的盒子。Docker大部分的操作都是围绕着它的三大核心概念:镜像、容器和仓库。ps是显示正在运行的容器, -a是显示所有运行过的容器,包括已经不运行的容器。
2026-04-20 00:20:06
675
原创 docker镜像
它是一个只读的文件,就类似于我们安装操作系统时候所需要的那个iso光盘镜像,通过运行这个镜像 来完成各种应用的部署。这里的镜像就是一个能被docker运行起来的一个程序。通过联网,docker可以从互联网获取一些公共的 镜像直接使用,类似于ubuntu的apt-get,可以获取某个应用程序包一样。
2026-04-20 00:19:29
175
原创 redis 客户端编程
Redis执行lpush和lrem命令。进入解压后的目录,编译源码:make。执行的是redis数据库中的操作命令。Redis执行incr命令。连接redis数据库。
2026-04-17 16:55:16
223
原创 Redis数据类型和常用命令
Redis 是一个高性能的键值数据库,支持多种数据类型: String:最基本的键值对,可存储字符串或数字,支持自增/减等操作 Hash:字段-值映射表,适合存储对象 List:双向链表结构,支持两端插入/删除 Set:无序不重复集合,支持交并差集运算 Sorted Set:有序集合,每个元素关联一个分数 Pub/Sub:发布订阅功能 Transactions:事务支持 每种数据类型都有对应的操作命令: String:SET/GET/INCR/DECR等 Hash:HSET/HGET/HKEYS等 List
2026-04-16 23:14:48
579
原创 Redis 安装与环境测试
在启动 redis 服务器时,我们可以为其指定一个配置文件,默认情况下配置文件在 redis 的源 码目录下,文件名为 redis.conf。事件通知(event notification)LUA 脚本(lua scripting)中文网站:http://redis.cn。官方网站:http://redis.io。进入解压后的目录,编译源码:make。快照(snapshotting)复制(replication)慢日志(slow log)安全(security)通用(general)限制(limits)
2026-04-16 17:37:47
250
原创 OCCI使用
OCCI(Oracle C++调用接口)是Oracle提供的C++ API,支持通过面向对象方式访问Oracle数据库。它具有基于标准C++、易用性、类似JDBC等特点,支持SQL/PLSQL、自定义类型和Oracle所有数据类型。使用前需配置头文件和库文件(如oraocci11.lib)。通过Environment类初始化,Connection类连接数据库,Statement类执行SQL语句,ResultSet处理查询结果。示例代码展示了连接数据库、执行增删改查操作的基本流程,最后需释放资源。OCCI为C
2025-09-18 11:18:05
1126
原创 Linux-共享内存
shmat 将当前进程和共享内存关联到一起shmdt将共享内存和当前进程分离shmctl 删除共享内存当共享内存被执行了删除操作之后, key值会发生变化, 变为 0key值变为0之前, 可以和任意进程关联==0之后, 无法和其他进程进行关联操作共享内存被删除的时候, 会判断其内部的引用计数(进程和共享内存关联的数量)如果引用计数==0, 共享内存会被马上删除引用计数>0, key值被修改为0, 其他进程无法与其进行关联, 当引用计数减为0的时候, 共享内存被删除sh
2025-09-17 17:45:43
650
原创 高并发服务器-多路IO转接-select
多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。
2025-09-11 21:11:53
511
原创 Socket编程
Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。“IP地址+端口号”就对应一个socket。
2025-09-10 21:06:07
533
原创 TCP状态转换
server终止时,socket描述符会自动关闭并发FIN段给client,client收到FIN后处于CLOSE_WAIT状态,但是client并没有终止,也没有关闭socket描述符,因此不会发FIN给server,因此server的TCP连接处于FIN_WAIT2状态。FIN_WAIT_2状态是当对方回应ACK后,该socket进入到FIN_WAIT_2状态,正常情况下,对方应马上回应ACK报文,所以FIN_WAIT_1状态一般较难见到,而FIN_WAIT_2状态可用netstat看到。
2025-09-10 15:42:54
1094
原创 TCP三次握手与四次挥手
从这个例子还可以看出,发送端是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据。发送端发起连接,声明最大段尺寸是1460,初始序号是0,窗口大小是4K,表示“我的接收缓冲区还有4K字节空闲,你发的数据不要超过4K”。上图在接收端用小方块表示1K数据,实心的小方块表示已接收到的数据,虚线框表示接收缓冲区,因此套在虚线框中的空心小方块表示窗口大小,从图中可以看出,随着应用程序提走数据,虚线框是向右滑动的,因此称为滑动窗口。
2025-09-10 15:34:31
280
原创 Linux-网络基础
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。
2025-09-10 10:04:04
712
原创 Linux-信号量
信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限,当信号量值大于 0 时,则可以访问,否则将阻塞。PV 原语是对信号量的操作,一次 P 操作使信号量减1,一次 V 操作使信号量加1。信号量主要用于进程或线程间的同步和互斥这两种典型情况。信号量数据类型为:sem_t。
2025-09-08 20:24:09
339
原创 Linux-条件变量
与互斥锁不同,条件变量是用来等待而不是用来上锁的,条件变量本身不是锁!条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。条件不满, 阻塞线程当条件满足, 通知阻塞的线程开始工作条件变量的类型: pthread_cond_t。
2025-09-08 17:11:31
516
原创 Linux-读写锁
当有一个线程已经持有互斥锁时,互斥锁将所有试图进入临界区的线程都阻塞住。但是考虑一种情形,当前持有互斥锁的线程只是要读访问共享资源,而同时有其它几个线程也想读取这个共享资源,但是由于互斥锁的排它性,所有其它线程都无法获取锁,也就无法读访问共享资源了,但是实际上多个线程同时读访问共享资源并不会导致问题。在对数据的读写操作中,更多的是读操作,写操作较少,例如对数据库数据的读写应用。为了满足当前能够允许多个读出,但只允许一个写入的需求,线程提供了读写锁来实现。
2025-09-08 15:49:03
367
原创 Linux-死锁(DeadLock)
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
2025-09-08 10:58:39
674
原创 Linux-互斥锁Mutex
在线程里也有这么一把锁:互斥锁(mutex),也叫互斥量,互斥锁是一种简单的加锁的方法来控制对共享资源的访问,互斥锁只有两种状态,即加锁( lock )和解锁( unlock )。互斥锁的操作流程如下:1)在访问共享资源后临界区域前,对互斥锁进行加锁。2)在访问完成后释放互斥锁导上的锁。3)对互斥锁进行加锁后,任何其他试图再次对互斥锁加锁的线程将会被阻塞,直到锁被释放。互斥锁的数据类型是: pthread_mutex_t。
2025-09-08 10:04:46
768
原创 Linux-同步与互斥
现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。都需要访问/使用同一种资源多个任务之间有依赖关系,某个任务的运行依赖于另一个任务这两种情形是多任务编程中遇到的最基本的问题,也是多任务编程中的核心问题,同步和互斥就是用于解决这两个问题的。**互斥:**不同任务之间的若干程序片段,当某个任务运行其中一个片段时,其他任务就不能运行他们之间的任意程序片段,只能等到该任务运行完这个程序片段后才可以运行。最基本的场景就是:一个公共资源在同一时刻只能被一个进程或线程使用。
2025-09-08 09:51:08
460
原创 Linux-线程属性
Linux下线程的属性是可以根据实际项目需要,进行设置,之前我们讨论的线程都是采用线程的默认属性,默认属性已经可以解决绝大多数开发时遇到的问题。如我们对程序的性能提出更高的要求那么需要设置线程属性,比如可以通过设置线程栈的大小来降低内存的使用,增加最大线程个数。//线程的分离状态//线程调度策略//线程的调度参数//线程的继承性//线程的作用域//线程栈末尾的警戒缓冲区大小//线程的栈设置//线程栈的位置//线程栈的大小主要结构体成员:线程分离状态。
2025-09-04 10:40:30
616
原创 LInux-线程常用操作函数
在一个线程中调用pthread_create()创建新的线程后,当前线程从pthread_create()返回继续往下执行,而新的线程所执行的代码由我们传给pthread_create的函数指针start_routine决定。如果thread线程被别的线程调用pthread_cancel异常终止掉,retval所指向的单元里存放的是常数PTHREAD_CANCELED。如果thread线程是自己调用pthread_exit终止的,retval所指向的单元存放的是传给pthread_exit的参数。
2025-09-04 10:24:49
801
原创 Linux-线程
线程是进程的一个实体,是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。在许多经典的操作系统教科书中,总是把进程定义为程序的执行实例,它并不执行什么, 只是维护应用程序所需的各种资源,而线程则是真正的执行实体。进程有自己的地址空间,线程使用进程的地址空间,也就是说,进程里的资源,线程都是有权访问的,比如说堆啊,栈啊,静态存储区什么的。
2025-09-04 10:06:22
627
原创 Linux-守护进程
守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字。守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任何终端上显示。
2025-09-03 14:28:03
387
SocketTool4.zip
2025-10-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅