自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

why

why的学习历程

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

原创 高并发高效内存管家

仿写 google 的 tcmalloc,实现在多线程⾼并发的场景下的内存分配器,多个线程可以无锁的进行申请内存并将内存碎片进行合并,解决了多线程下的锁竞争问题、内存申请效率问题、内存碎片问题。

2025-02-27 09:30:00 1004

原创 【Linux网络】网络层——IP协议和网段划分之内外网

IP地址用于识别网络中的设备,分为私有(内网)和公有(外网)地址。内网地址用于局域网,不直接暴露于互联网,如192.168.x.x。外网地址则全球唯一,可在互联网上直接通信。路由负责在不同网络间转发数据包,基于IP地址和路由表。网段是具有相同网络地址的IP地址集合,由子网掩码定义。内外网通过路由器连接,路由器使用NAT技术将内网私有地址转换为外网公有地址,实现内外网通信。

2024-10-29 22:50:12 915

原创 【Linux网络】基于TCP的全连接队列与文件、套接字、内核之间的关系

套接字是网络通信的基本接口,允许程序发送和接收数据。在服务器端,监听套接字用于接受客户端的连接请求。一旦客户端请求到达并完成TCP三次握手,请求会被放入全连接队列,等待服务器通过`accept()`调用来处理。内核在此过程中扮演核心角色,管理套接字的生命周期,维护全连接队列,并处理网络数据的传输。简而言之,套接字是通信的端点,全连接队列是已完成握手的连接请求的缓冲区,而内核则负责协调和管理这些操作,确保网络通信的顺利进行。

2024-10-29 08:00:00 1278

原创 【Linux网络】传输层协议UDP与TCP

UDP和TCP是两种主要的网络传输协议。UDP是一种无连接的协议,它不保证数据包的顺序或可靠性。它通过发送数据包而不进行任何确认来实现快速传输,适合对实时性要求高的应用,如视频流和在线游戏。UDP的头部开销小,只有8个字节,这有助于减少延迟。TCP是一种面向连接的协议,它确保数据包的顺序和可靠性。在数据传输前,TCP会建立一个连接,并通过确认和重传机制来保证数据的完整性。TCP适合需要可靠传输的应用,如网页浏览和文件传输。TCP的头部开销较大,通常是20个字节,这可能会增加一些延迟。

2024-10-27 22:24:08 1420

原创 【MySQL】数据库事务管理

其中隔离级别越严格,安全性越高,但数据库的并发性能也就越低,往往需要在两者之间找一个平衡点。不可重复读的重点是修改和删除:同样的条件, 你读取过的数据,再次读取出来发现值不一样了幻读的重点在于新增:同样的条件, 第1次和第2次读出来的记录数不一样。

2024-10-25 22:36:33 1223

原创 【MySQL】视图与用户管理——MySQL

同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。order by 可以用在视图中,但是如果从该视图检索数据 select 中也含有 order by ,那么该视图。如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户。*.* : 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)库.* : 表示某个数据库中的所有数据对象(表,视图,存储过程等)MySQL中的用户,都存储在系统数据库mysql的user表中。

2024-10-24 23:57:44 785

原创 【MySQL】MySQL索引特征

MySQL索引是一种数据库对象,用于提高数据检索效率。它允许数据库引擎快速找到表中数据,而无需扫描整个表。索引可以基于一个或多个列创建,支持排序和分组操作。常见的索引类型包括B-Tree索引、哈希索引、全文索引和空间索引。索引可以显著减少数据检索时间,但会占用额外的磁盘空间,并可能降低插入、删除和更新操作的性能。因此,合理设计索引对于优化数据库性能至关重要。

2024-10-24 21:15:25 978

原创 【redis】基础指令|数据结构总览|单线程架构分析

Redis的全局命令用于管理数据库和执行通用操作。其数据结构丰富多样,包括字符串、列表、集合、有序集合和哈希表等,支持复杂的数据操作;Redis采用单线程架构,通过高效的内存操作和优化的命令执行流程,实现高性能的数据处理。

2024-10-23 22:20:20 1005 1

原创 【redis】初识非关系型数据库——redis

Redis是一个开源的高性能键值对数据库,以其出色的读写速度而闻名。它支持多种类型的数据结构,如字符串、列表、集合、有序集合和哈希表。Redis支持数据持久化,可以作为数据库、缓存或消息代理使用。由于其单线程模型和高效的内存存储机制,Redis非常适合需要快速访问的场景。它常用于提高网站性能、实现会话缓存、排行榜等功能。此外,Redis还提供了丰富的特性,如事务、发布/订阅、Lua脚本等,使其在多种应用场景中都非常有用。

2024-10-23 21:23:32 1496 1

原创 【MySQL】数据库表的内外连接——复合查询

MySQL中的复合查询允许使用UNION、UNION ALL合并多个SELECT语句的结果。内外连接(INNER JOIN、LEFT JOIN、RIGHT JOIN)用于连接多个表,INNER JOIN返回匹配的行,LEFT JOIN返回左表所有行和右表匹配行,RIGHT JOIN一样。单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选。

2024-09-29 22:58:49 1031

原创 【MySQL】数据库中的内置函数

MySQL数据库提供了大量的内置函数,这些函数可以帮助你执行各种操作,如字符串处理、数值计算、日期和时间处理等。MySQL内置函数包括字符串处理、数值计算、日期和时间、聚合、加密等类型,用于简化查询和数据处理。

2024-09-29 20:36:19 918

原创 【MySQL】数据库表的基本查询——增删查改

在MySQL中,对表进行增删查改操作是数据库管理的基础。增(Insert)操作用于添加新记录,使用`INSERT INTO 表名 (列1 ...) VALUES (值1 ...);`。删(Delete)操作用于移除记录,使用`DELETE FROM 表名 WHERE 条件;`,需注意慎用以防误删。查(Select)操作用于检索数据,基本形式为`SELECT 列名 FROM 表名 WHERE 条件;`,可配合`ORDER BY`进行排序,`LIMIT`限制结果数量。改(Update)操作用于修改现有记录.

2024-09-27 20:43:28 1206

原创 【MySQL】数据库数据类型与表的约束

数据库的数据类型包括整数(INT)、小数(FLOAT)、字符串(VARCHAR)、文本(TEXT)、日期时间(DATETIME)、布尔值(BOOLEAN)、枚举(ENUM)和JSON等,用于存储不同格式的数据。主键(PRIMARY KEY):唯一标识每条记录数据库表的约束用于确保数据的准确性和完整外键(FOREIGN KEY):关联两个表,维护引用完整性。唯一约束(UNIQUE):确保列中的值唯一。非空约束(NOT NULL):确保列不为空。检查约束(CHECK):限制列中的数据必须满足特定条件。

2024-09-27 00:42:54 1010

原创 【MySQL】数据库中(表)的增删查改

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准。collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准。注:创建一个engine是innodb的数据库,观察存储目录。注意:删除字段一定要小心,删除字段及其对应的列数据都没了。在users表添加一个字段,用于保存图片路径。不同的存储引擎,创建表的文件不一样。

2024-09-26 20:23:52 549

原创 【MySQL】数据库的操作

在MySQL中,对数据库(库)的操作主要包括:创建数据库:使用CREATE DATABASE语句创建一个新的数据库。选择数据库:使用USE语句选择一个数据库进行操作。查看数据库:使用SHOW TABLES查看当前数据库中的所有表,使用SHOW DATABASES查看所有数据库。查看表结构:使用DESCRIBE语句查看表的详细信息。删除数据库:使用DROP DATABASE语句删除一个数据库。……这些操作是数据库管理的基础,允许用户有效地组织和维护数据库结构。

2024-09-25 16:15:55 1451

原创 【MySQL】数据库基础认识

存储数据用文件就可以了,为什么还要弄个数据库?文件保存数据有以下几个缺点:文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便数据库存储介质:磁盘、内存。为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。

2024-09-25 14:34:16 1354

原创 【protobuf】ProtoBuf的学习与使用⸺C++

序列化协议通用性格式可读性序列化大小序列化性能适用场景JSON通用(json、xml已成为多种⾏业标准的编写⼯具)⽂本格式好轻量(使⽤键值对⽅式,压缩了⼀定的数据空间)中web项⽬。因为浏览器对于json数据⽀持⾮常好,有很多内建的函数支持。XML通用⽂本格式好重量(数据冗余,因为需要成对的闭合标签)低XML作为⼀种扩展标记语⾔,衍⽣出了HTML、RDF/RDFS,它强调数据结构化的能⼒和可读性。ProtoBuf独⽴。

2024-09-19 01:26:33 1835

原创 【Protobuf】初识protobuf以及详细安装教程

安装protobuf。聊一下什么是序列化反序列化,相信在Linux网络编程中我们提到过http在接收或发送时都要先制定一个协议,这个协议是一个类或结构体,而我们将一个对象通过网络传输转成字节序的过程叫做序列化,反之则为反序列化。3. 依赖⽣成的接⼝,将编译⽣成的头⽂件包含进我们的代码中,实现对.proto⽂件中定义的字段进⾏设置和获取,和对message对象进⾏序列化和反序列化。Protocol Buffers类⽐于XML,是⼀种灵活,⾼效,⾃动化机制的结构数据序列化⽅法,但是比XML更⼩、更快、更为简单。

2024-09-08 20:58:09 2666 2

原创 【Linux网络】应用层http协议&&cookie与session&&https协议

HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)都是应用层协议,用于Web服务器和客户端之间传输数据。它们在基本的通信机制和语义上是相同的,但HTTPS在HTTP的基础上增加了数据加密和安全性。HTTP:由于数据是明文传输,容易受到中间人攻击和其他安全威胁。HHTTP:不需要证书,没有额外的成本。HTTPS:需要从证书颁发机构(CA)获取SSL证书,可能涉及一定的费用和配置工作。TTPS:通过SSL/TLS提供了数据加密、完整性校验和身份验证,增强了安全性。

2024-08-29 08:00:00 967

原创 【Linux网络】基本网络命令&&socket编写TCP&&应用层&&实现简易计算器

我们在上篇博客中学习了使用socket套接字完成了UDP的网络编程,今天我们继续使用socket套接字完成TCP的学习。首先我们先来了解一些网络指令。通过TCP理解应用层相关内容,以及序列化反序列化,TCP全双工!

2024-08-20 08:00:00 852

原创 【Linux网络】Socket套接字&&编写UDP实现网络通信&&LinuxWindows跨平台通信

Socket是网络编程的核心,提供了进程间通信的端点。UDP是其中一种无连接的协议,适用于快速消息传递。首先,使用`socket()`创建套接字;其次,配置服务器的`sockaddr_in`或`sockaddr_in6`结构体并绑定端口;然后,客户端使用`sendto()`发送数据到服务器,服务器使用`recvfrom()`接收数据;通信结束后。UDP的特点是传输速度快,但不保证数据的可靠性、顺序或完整性,适用于对实时性要求高的应用场景。开发时要注意错误处理和资源管理,确保程序的健壮性和效率。

2024-08-14 19:46:01 993 1

原创 【Linux网络】Linux网络初探:开启网络世界的大门

网络协议定义了计算机之间如何传输和接收数据。它们规定了数据格式、传输顺序、差错检测和控制机制。OSI(Open Systems Interconnection)模型是一个概念框架,用于标准化不同系统间的网络通信。TCP/IP模型是互联网的基础,简化了OSI模型。网络传输基本流程和简单的网络地址管理

2024-08-08 18:44:37 1204 2

原创 【Linux进程篇】进程终章:POSIX信号量&&线程池&&线程安全的单例模式&&自旋锁&&读者写者问题

Linux进程和线程的管理涉及多种同步机制,以确保资源的合理分配和访问。信号量提供了一种灵活的资源管理方式;线程池优化了线程的创建和调度;线程安全的单例模式保障了全局状态的一致性;自旋锁提供了一种避免线程阻塞的锁机制;读者写者问题则是对共享资源访问控制的一种典型场景。这些概念共同支撑了复杂系统中的并发控制和数据一致性需求。

2024-08-07 15:26:38 1177

原创 【Linux进程篇】并发艺术:Linux条件变量与生产消费者模型的完美融合

在Linux多线程编程中,条件变量是用于线程间同步的一种机制,它允许线程在某些条件不满足时挂起,并在条件满足时被另一个线程唤醒。条件变量通常与互斥锁(mutex)结合使用,以保护共享资源的访问,防止数据竞争。生产者-消费者模型是条件变量应用的一个典型场景。在这个模型中,生产者线程生成数据并将其放入共享队列,而消费者线程从队列中取出数据进行处理。总结来说,Linux中条件变量是实现线程同步和协调生产者-消费者模型的关键工具,它通过与互斥锁的配合使用,确保了多线程程序中数据的一致性和线程的高效协作。

2024-08-05 20:01:46 853 1

原创 【Linux线程篇】线程安全守护者——线程互斥(互斥锁)

线程互斥是确保在多线程环境中,对共享资源的访问是串行化的机制。这是通过互斥锁(mutexes)实现的,互斥锁是一种同步原语,用来保护共享数据不被多个线程同时修改,从而避免数据竞争和一致性问题。互斥锁的工作原理是,当一个线程想要访问共享资源时,它必须首先尝试锁定互斥锁。如果互斥锁已经被其他线程锁定,请求线程将被阻塞,直到互斥锁被释放。一旦互斥锁被当前线程锁定,该线程就可以安全地访问共享资源。访问完毕后,线程必须释放互斥锁,允许其他线程访问资源。

2024-07-23 19:15:06 1137

原创 【Linux线程篇】线程之力:Linux并发编程指南

Linux线程控制是指在Linux操作系统中,通过特定的系统调用和库函数来创建、同步和管理线程的操作。线程控制通常包括线程的创建(如使用`pthread_create`)、同步(如使用互斥锁`pthread_mutex_t`和条件变量`pthread_cond_t`)、通信以及终止(如使用`pthread_join`和`pthread_exit`)。这些操作允许程序员编写并发程序,以提高应用程序的性能和响应性。简而言之,Linux线程控制是操作系统提供的一种机制,用于管理和协调程序中的多个执行流。

2024-07-11 09:15:00 984

原创 【Linux线程篇】探索Linux多线程:并行编程的入门指南

Linux线程作为现代操作系统中不可或缺的并发机制,其在内核层和应用层的深入理解和应用对于开发高性能、高可靠性的软件系统至关重要。本文提供了一个全面的视角,帮助读者从理论到实践,构建对Linux线程的全面认识,并在实际开发中游刃有余地应用线程技术。

2024-07-08 23:43:08 1416

原创 【Linux信号篇】Linux中的信号拦截与响应

在Linux中,信号的阻塞和捕捉是进程管理意外事件的关键技术。通过信号阻塞,进程可以在执行关键任务时忽略某些信号,防止操作中断。信号捕捉则允许进程为特定信号设置处理函数,使得当信号发生时能够立即响应,进行必要的操作,如资源清理或状态记录。这两种策略共同提升了程序的稳定性和健壮性。

2024-07-08 09:30:00 798

原创 【Linux信号篇】进程控制的幕后英雄:信号概念和信号的产生

inux信号是操作系统用来通知进程发生了某些事件的一种机制。它们是进程间通信的一种形式,允许内核或其他进程向目标进程发送信息,告知其发生了某些需要处理的情况。信号可以由硬件事件(如键盘中断)或软件事件(如另一个进程请求终止)产生。Linux系统定义了多种信号,例如SIGINT(中断信号,通常由Ctrl+C产生)和SIGTERM(终止信号,用于请求进程优雅地结束)。进程可以忽略信号、捕获信号以执行自定义操作,或者设置默认处理行为。正确地处理信号对于编写稳定和健壮的Linux程序至关重要。

2024-07-06 09:00:00 915

原创 【Linux进程通信】system V下的共享内存

之前我们已经掌握了进程间的管道通信,匿名管道和命名管道。匿名管道必须进程要血缘关系,而命名管道不需要血缘关系,两个毫不相干的进程就可以进行通信。上面两种是基于文件的通信,今天我们继续来学习本地进程间的通信——共享内存

2024-07-01 09:30:00 809

原创 数据库大作业——音乐平台数据库管理系统

本项目设计并实现了一个音乐管理系统,旨在为用户提供一个高效、直观的音乐资源管理平台。系统核心功能包括用户管理、音乐库维护、播放列表编辑、智能搜索和个性化推荐。采用关系型数据库技术,确保数据的安全性和稳定性。本文详细介绍了系统的需求分析、系统设计、数据库设计、功能实现以及测试过程。在需求分析阶段,我们通过问卷调查和用户访谈收集了用户的需求和期望。系统设计阶段,我们采用了模块化设计方法,确保了系统的可扩展性和可维护性。数据库设计部分详细描述了数据模型、表结构和关系。功能实现部分展示了系统的主要界面和交互流程。

2024-06-18 23:52:56 3062 2

原创 【Linux进程通信】Linux进程间的无声对话:匿名管道与命名管道技术

Linux提供了两种进程间通信(IPC)机制:匿名管道和命名管道。匿名管道允许父子进程单向通信,生命周期仅限于进程及其子进程。而命名管道则支持多个不相关进程通过文件系统中的命名实体进行通信,具有更广泛的应用场景。两者均支持单向数据流,但可通过特定配置实现双向通信。开发者应根据通信需求、安全性和生命周期选择合适的IPC方式。

2024-06-18 09:30:00 1709

原创 【Linux文件篇】软硬链接与动静态库链接的实用指南

在软件开发中,链接技术是实现代码复用和模块化的关键。软硬链接和动静态库链接提供了不同的解决方案,以适应不同的开发需求。硬链接是文件系统中的一个指针,直接指向文件数据,允许多个文件名访问相同的数据块。软链接则类似于快捷方式,它包含指向另一个文件或目录的路径。静态库在编译时被整合进可执行文件,减少了运行时依赖,但增加了文件体积。动态库则在程序运行时加载,节省了磁盘空间,便于库的更新,但可能增加启动时间。

2024-06-13 23:53:11 1020

原创 【Linux文件篇】磁盘到用户空间:Linux文件系统架构全景

本文简要概述了文件管理系统从磁盘硬件到操作系统的整合过程。文章首先描述了磁盘硬件的工作原理,包括磁盘结构和数据存储方式。随后,讨论了文件系统如何利用这些硬件特性来实现数据的逻辑组织,包括文件和目录的创建、存储和检索。文章强调了操作系统中文件系统的关键功能,如权限控制、数据一致性和错误恢复机制。同时,指出了现代文件系统面临的挑战,例如高并发访问、大数据管理以及跨平台兼容性。

2024-06-13 09:30:00 2518

原创 【Linux文件篇】优化文件读写,加速数据处理策略——缓冲区

文件缓冲区是计算机编程中用于临时存储数据的内存区域,它在文件输入/输出操作中扮演着至关重要的角色。通过缓冲区,程序能够以更高效的方式处理数据,因为它减少了对磁盘等存储设备的直接访问次数,从而降低了I/O操作的开销。文件缓冲区的工作原理是将数据先写入到内存中的缓冲区,而不是直接写入磁盘。当缓冲区满时,数据才会被一次性写入磁盘,这个过程称为"刷新"。同样地,在读取数据时,操作系统会先从磁盘读取一定量的数据到缓冲区,程序再从缓冲区中读取所需的数据。

2024-06-10 21:46:59 1070

原创 【Linux文件篇】系统文件、文件描述符与重定向的实用指南

本文深入探讨了Linux操作系统中的文件系统,特别是系统文件的重要性和文件描述符的高效管理。文章首先介绍了系统文件的概念、作用以及它们在Linux系统中的组织结构。随后,详细解释了文件描述符的工作原理,包括它们是如何在程序中被创建、使用和关闭的。此外,文章还重点讨论了重定向技术,这是一种强大的命令行工具,允许用户改变程序的输入和输出流,从而提高数据处理的灵活性和效率。通过实际的命令示例和场景分析,本文旨在帮助读者更好地理解和掌握Linux文件系统的核心概念和高级技巧,无论是对于系统管理员还是开发人员,都能从

2024-06-10 09:30:00 1111

原创 【C++历练之路】C++11中的列表初始化&&声明新方法&&深入标准模板库的变革

在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中。

2024-06-07 09:30:00 1007

原创 【Linux进程篇】Linux进程管理应用——虚假的shell脚本

本文探讨了通过仿写Shell脚本来提高自动化任务效率的方法。首先概述了Shell脚本的基础知识,然后重点介绍了如何分析和优化现有脚本。文章还涵盖了错误处理和调试技巧,最后总结了一些高级脚本编写技巧,旨在帮助读者创建更高效、更稳定的自动化工具。

2024-06-05 23:13:47 1063

原创 【Linux进程篇】Linux中的等待机制与替换策略

进程等待和进程替换是操作系统中管理进程的两个关键概念。进程等待是当一个进程需要等待某个资源或事件时,它将暂停执行,直到条件满足。这有助于避免资源冲突和死锁,同时允许系统更高效地处理任务。进程替换则是在系统资源受限时,将某些进程从内存中移除,以便为其他更重要或更紧急的进程腾出空间。这种策略有助于优化系统性能,确保关键任务的顺利执行。通过合理设计进程管理策略,可以提高系统的稳定性和响应性。本文将深入探讨进程等待和进程替换的工作原理,包括它们的实现机制、调度算法以及在不同操作系统中的应用。

2024-06-05 09:30:00 1037

原创 【Linux进程篇】Linux进程管理——进程创建与终止

进程的创建和终止是操作系统中管理进程生命周期的两个基本操作。进程创建涉及为新程序分配资源、设置执行环境,并将其加入到调度队列中。这通常发生在程序启动、系统调用或父进程生成子进程时。进程终止则标志着一个进程的生命周期结束,无论是因为正常完成、异常退出还是外部干预。终止进程需要进行资源回收、状态清理,并确保不会留下悬挂的依赖或资源泄露。这两个过程对维护系统的稳定性和效率至关重要,它们要求操作系统具备精细的资源管理和调度策略。有效的进程管理能够提高系统性能,优化资源利用率,并确保用户和应用程序的流畅体验。

2024-05-29 22:55:46 1267 1

空空如也

空空如也

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

TA关注的人

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