- 博客(18)
- 收藏
- 关注
原创 MySQL基础(一):数据库、库表操作、数据类型与约束
本文从数据库基本概念入手,介绍 MySQL 的客户端/服务端结构、登录方式,以及数据库和表的组织关系;随后按照 CRUD 思路讲解库和表的创建、查看、修改与删除,并结合实际存储目录理解其底层对应关系。在此基础上进一步梳理常见数据类型、备份恢复及 NULL、默认值、主键、自增长、唯一键、外键等表约束,为后续表中数据的增删查改打下基础。
2026-09-06 13:06:54
235
13
原创 【网络】套接字(Socket)编程——TCP版
本文系统讲解 TCP Socket 编程,从 socket、bind、listen、accept、connect、read/write 等核心接口出发,完成基础 TCP 通信,并逐步演进为多进程、多线程、线程池服务器。随后结合进程组、会话、控制终端与 setsid 实现守护进程,最后从内核角度理解三次握手、四次挥手、连接队列、Socket 缓冲区、全双工、字节流及 Socket 封装,完整串联 TCP 服务器开发主线。
2026-09-01 16:37:50
591
14
原创 我写了一个按住 Ctrl 就能告诉你快捷键的小工具:ShortcutHUD
本文介绍 ShortcutHUD 的设计与发布过程。它是一款 Windows 快捷键 HUD 工具,可根据当前应用与按下的 Ctrl、Alt、Shift、Win 等修饰键,实时显示高价值快捷键,并支持自定义快捷键、快捷键录制、中英文界面与便携版运行。项目采用 PyInstaller 打包,无需用户安装 Python,并通过 GitHub Releases 提供下载,同时兼顾源码用户与后续 macOS 跨平台扩展。
2026-08-28 21:18:54
330
14
原创 网络套接字(socket)编程——UDP
本文从端口号、网络字节序和 Socket 基础概念出发,系统讲解 UDP 网络编程中的 socket、bind、recvfrom、sendto 等核心接口,并完成基础 Echo 通信。在此基础上进一步实现网络模块与业务逻辑解耦、远程 Bash、Windows 与 Linux 跨平台通信以及 UDP 多人聊天室,同时通过多线程解决客户端收发阻塞问题,并结合 /dev/pts 实现输入输出分离,完整贯通 UDP Socket 编程的基本流程与实际应用。
2026-08-24 14:26:14
873
13
原创 网络协议、OSI参考模型、局域网通信与跨网络通信——网络的基础认知
本文摘要(148字): 网络通信看似简单,实则需要解决硬件差异、数据组织、寻址转发等复杂问题。网络协议作为通信规则,需采用分层设计降低复杂度——OSI七层模型将问题拆解为应用、传输、网络等层级,TCP/IP五层模型则进一步优化为实用体系。协议栈通过内核空间(实现TCP/IP核心协议)与用户空间(运行应用程序)协作,数据从上到下封装后经网卡发出。理解协议分层、数据封装和操作系统对协议栈的实现,是掌握网络通信机制的关键。后续将深入分析数据如何在各层间流转。
2026-08-20 10:35:27
391
16
原创 计算机网络的历史与生态
本文介绍了计算机网络的基本概念与发展历程。主要内容包括:1. 计算机网络的核心是实现计算机间的信息交换与资源共享;2. 区分了internet(泛指互联网)与Internet(特指全球因特网);3. 从电话网络引入"交换"概念,对比电路交换、报文交换和分组交换的特点;4. 分组交换成为计算机网络的重要基础;5. 回顾ARPANET(阿帕网)的建立过程及IMP设备的作用;6. 强调网络协议的重要性,使不同计算机能互相通信;7. 简述从NCP到TCP/IP协议的发展历程,TCP/IP成为现代互联网的基础协议体系
2026-08-19 13:15:31
354
12
原创 Linux线程从入门到实战
本文深入讲解了Linux多线程编程的核心概念与实践。主要内容包括: 线程本质:Linux内核中没有真正的线程概念,而是通过轻量级进程(LWP)模拟实现,所有执行流在内核中都是task_struct。 进程与线程关系: 进程是资源分配的基本单位 线程是调度的基本单位 线程共享进程地址空间,但拥有独立栈和寄存器 线程特性: 创建代价比进程小 线程异常会导致整个进程崩溃 具备私有数据(线程ID、栈等)和共享资源(文件描述符等) 线程控制:介绍了pthread库的常用接口,包括线程创建、终止和等待等操作。 线程安全
2026-08-18 11:14:26
564
6
原创 Linux进程控制:从fork到exec,手写一个简易Shell
本文围绕 Linux 进程控制主线,依次讲解 fork 创建进程、exit/_exit 退出、wait/waitpid 回收以及 exec 进程替换,并在最后自主实现一个简易 Shell。结合写时拷贝、退出码与 errno、僵尸进程和真实 WSL 运行结果,串起完整的进程生命周期。
2026-08-09 11:48:00
533
12
原创 Linux进程概念
本文摘要: 程序运行前需从磁盘加载到内存,基于冯诺依曼体系的存储程序思想,CPU仅能执行内存中的指令。内存作为CPU与外设间的缓冲,减少等待时间以提升效率。多程序运行时,操作系统通过“先描述再组织”方式管理进程:内核用task_struct结构体描述进程属性(如标识、状态、优先级等),并通过内嵌链表组织所有进程。Linux采用list_head实现双向链表,通过偏移量计算从链表节点定位到完整的进程结构。进程管理本质是对内核数据结构的操作,确保资源合理分配与调度。
2026-08-03 10:21:54
1054
8
原创 Linux 环境基础开发工具的使用:yum/dnf、Vim、GCC/G++、GDB、Makefile
🌈🔥💪行动胜于空谈,实践出真知在 Linux 环境下进行 C/C++ 开发,常用的工具主要有软件包管理器 yum/dnf、编辑器 Vim、编译器 GCC/G++、调试器 GDB,以及自动化构建工具 Make/Makefile。这些工具的使用以命令为主,适合整理成一篇随用随查的笔记。下面按照日常开发顺序,对常用操作进行汇总。
2026-08-03 09:59:00
262
3
原创 Shell运行原理与Linux权限
本文介绍了Linux Shell的运行原理、用户权限管理及文件权限机制。Shell作为命令行解释器,解析用户输入并执行命令,部分命令由Shell直接执行,部分通过创建子进程完成。Linux用户分为root和普通用户,通过su切换或sudo提权执行特定操作。文件权限分为拥有者、所属组和其他用户三类,通过ls -l查看权限信息,系统按顺序确定用户权限。实践操作包括用户创建、删除、切换及权限管理,强调安全使用root权限的重要性。
2026-07-28 17:51:39
400
11
原创 Linux 常用命令大全:从入门到实战,一篇掌握日常高频指令
服务器上的root用户权限很高,如果一直使用root进行日常操作,误操作可能影响整个系统,因此通常需要创建普通用户。在Windows中打开一个文件夹,系统会直接显示其中的文件和子目录;参数为目录时,列出目录中的文件和子目录;参数为文件时,显示该文件的相关信息。Windows中可以通过剪切、粘贴移动文件,在Linux命令行中可以使用。Windows中可以通过右键新建文件夹,在Linux命令行中则需要使用。文件已经存在时,更新文件的时间属性。:删除子目录后,如果父目录也变成空目录,则继续删除父目录。
2026-07-27 21:51:21
220
8
原创 Git 学习总帖(二):远程仓库、GitHub 与多人协作,从 GitHub 到 Git Flow
可以用 PR,也可以本地合并。初学时为了练命令,可以本地 merge。工作中更建议 PR。假设现在feature-1已经合进了master,此时master变新了。再合并feature-2时,可能会冲突。比较稳的做法是:先让feature-2合并最新的master,在feature-2上解决冲突。如果有冲突,就在feature-2git add .git commit -m "解决 feature-2 与 master 的冲突"如果你是本地练习 merge,那还要继续回到master。
2026-06-15 19:44:33
318
8
原创 Git 版本控制入门:从安装、提交到分支合并,一篇文章讲清常用操作
工作区 --git add--> 暂存区 --git commit--> 本地仓库然后再慢慢掌握版本回退、撤销修改、分支合并、冲突解决和 stash。git status:随时看当前状态;git addgit commit:完成一次提交;git loggit reflog:查看历史,找回版本;git reset:撤销和回退;git branchgit switchgit merge:分支开发;git stash:临时保存未完成工作。
2026-06-13 16:01:45
295
8
原创 Linux日志系统实战:从可变参数到日志分类详解
本文介绍了Linux系统中日志功能的基本实现方法。主要内容包括:1.日志的组成要素(等级、时间、描述等);2.可变参数的使用方法(va_list等四件套);3.日志等级的定义与转换;4.时间获取方法(localtime函数);5.日志输出的三种方式(屏幕、单文件、分类文件);6.完整日志类的实现代码。文章详细讲解了如何通过系统调用和标准库函数构建一个功能完整的日志系统,支持不同等级的日志记录和多种输出方式,为程序调试和运行监控提供了实用工具。
2026-04-08 23:59:53
381
10
原创 一篇文章带你彻底玩转异或运算
a&(-a),这样我们就能得到a的最后一个1,别着急说不懂,我们来举个例子int a=12;-a=~a+1;(这个不知道的自行去看原码补码反码)我们可以看到,除了他最后的1那个位置,即倒数第三位在&之后不是0,剩下的全是0很好,我们能用这种方法得到最后一个1我们得到这个之后让他和数组中的所有数字&一下,结果为0的说明这位上不是1,结果不为0的说明这位上是1,那么好,我们达成了我们的目的,将数组分成两类且a,b不在同一类。请试着自己写一下代码,代码仅供参考int num1=0;i++)
2025-11-18 23:29:06
879
5
原创 类和对象速通(上)
我们看到,函数较短还好,如果过长都写在类里就显得臃肿。以上面的print函数为例,写一个声明与定义的分离class Date...//省略//分号...//省略//实现cout<<_year<<"年"<<_month<<"月"<<_day<<"日"<<endl;与命名空间那块的玩法类似,没错,类会形成一个类域,与前面的知识贯通起来了有没有。要记住写法哦。赋值运算符重载与拷贝构造之间的区别拷贝构造是用一个已经存在的对象初始化另一个对象赋值运算符重载是两个已经存在的对象之间的复制拷贝。
2025-05-07 13:35:22
989
14
原创 初识C++(上)
①定义命名空间,我们要用到namespace关键字,后面跟上一个你喜欢的标识符(“二狗”,“小帅”怎么起随你心意),后面再跟上一个{}不必加上;,命名空间可存放的内容多种多样,可以是变量、函数、类型等②namespace本质是定义一个域,独立于全局域之中,没有指定的情况下编译器不会调用里面的内容(你问我该如何使用,咱们等会再谈)③不同的namespace可以定义同名,编译器会认为是同一个namespace,不会冲突,如果怕里面定义的变量发生冲突,命名空间也可以嵌套定义。
2025-02-18 19:18:39
1095
7
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅