- 博客(103)
- 收藏
- 关注
原创 【项目】视频点播
搭建视频共享点播服务器,可以让所有人通过浏览器访问服务器,实现视频的上传查看,以及管理并播放的功能。主要是完成服务器端的程序业务功能的实现以及前端访问界面 html 的编写,能够支持客户端浏览器针对服务器上的所有视频进行操作。项目名称:视频共享点播系统项目功能:搭建一个共享点播系统,服务器支持用户通过前端浏览器访问服务器,获取展示与观看和操作的界面,最终实现视频的上传以及观看和删改查等基础管理功能。开发环境及工具:centos7.6vimg++gdbmakefilevscode等。
2025-03-06 21:51:29
1042
原创 高并发内存池
今天要学习的项目的原型是Google开源项目tcmalloc,全称,即线程缓存的malloc,实现了高效的多线程内存管理,用于替代系统的内存分配相关函数(此项目可以说是顶尖C++高手写出来了的,我们学习他不是为了造更好的轮子,而是学习其思想,学习如何去思考问题,我将把tcmalloc最核心的框架简化后拿出来,模拟实现一个自己的高并发内存池。所谓“池化技术”,就是程序先向系统申请过量的资源,然后自己管理,以备不时之需。之所以要申请过量的资源,是因为每次申请该资源都有较大的开销。
2025-02-18 21:59:44
918
转载 王道计组笔记摘选:第七章 输入/输出系统
而中断过程发生的时间一般是随机的,CPU在执行某个主程序时收到中断源提出的中断申请,就发生中断过程,而中断申请一般由硬件电路产生,申请提出时间是随机的。,是CPU用来控制输入/输出操作的指令,由CPU译码后执行。在具有通道结构的机器中,I/O指令不实现I/O数据传送,主要完成启、停I/O设备,査询通道和I/O设备的状态,及控制通道进行其他一些操作等。可以由中断屏蔽字来改变,反映的是正在处理的中断是否比新发生的中断的处理优先级低(屏蔽位为“0”,对新中断开放),若是,则中止正在处理的中断,转到新中断去处理,
2024-12-04 21:18:10
141
转载 王道计组笔记摘选:第六章 总线
3.总线的特性机械特性:尺寸、形状、管脚数、排列顺序电气特性:传输方向和有效的电平范围功能特性:每根传输线的功能(地址、数据、控制)时间特性:信号的时序关系。
2024-12-03 23:45:14
120
转载 王道计组笔记摘选:第四章 指令系统
一台计算机中所有机器指令的集合,称为这台计算机的指令系统。引入指令系统后,避免了用户与二进制代码直接接触,使得用户编写程序更为方便。另外,
2024-11-28 00:26:36
96
转载 王道计组笔记摘选:第三章 存储系统
按存取方式分类:1> 随机存储器(RAM)。存储器的任何一个存储单元的内容都可以随机存取,而且存取时间与存取单元的物理位置无关,主要用作主存或高速缓冲存储器。2> 只读存储器(ROM)。存储器的内容只能随机读出而不能写入。。即使断电,内容也不会丢失。3> 串行访问存储器。对存储单元进行读/写操作时,需按其物理位置的先后顺序寻址,包括顺序存取存储器(如磁带)与直接存取存储器(如磁盘断电后,存储信息即消失的存储器,称为易失性存储器,如RAM。
2024-11-27 01:00:42
139
原创 对称加密&非对称加密&中间人攻击的应对措施:数字签名
最开始客户端与服务端互相不知道公钥,那么就需要互相告知自己的公钥,交换公钥的过程是不加密的,黑客就可以拿到公钥S和C,但是就算黑客拿到了两个公钥,它也破解不了报文。由于浏览器内置了公钥A,客户端就可以检测签名是否正确,域名是否是目标域名,从而确认该公钥确实来自于服务器,随后执行混合加密过程,生成对称密钥C,完成真正的加密通信。这些算法是公开的,但是密钥不是公开的,只要通信双方的密钥不泄露,就算别人知道使用了哪一个算法,也无法解密密文。依据哈希算法的特性,如果两个数据的哈希值不同,那么这两个数据一定不同。
2024-11-25 01:14:04
1001
原创 MySQL:一条 SQL 的执行过程详解
到此,关于Buffer Pool、Redo Log Buffer 和undo log、redo log、bin log 概念以及关系就基本差不多了。我们再回顾下Buffer Pool 是 MySQL 的一个非常重要的组件,因为针对数据库的增删改操作都是在 Buffer Pool 中完成的Undo log 记录的是数据操作前的样子redo log 记录的是数据被操作后的样子(redo log 是 Innodb 存储引擎特有)
2024-10-10 22:26:26
1087
原创 Linux系统目录结构介绍
bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给root使用的指令。/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里。
2024-10-10 21:46:16
802
原创 Docker: Docker Vs. 虚拟机
在计算机技术中,虚拟化(Virtualization)是一种资源管理技术。它是将计算机的各种实体资源,如:服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用更好的方式来利用这些资源。虚拟化的目的是为了在同一个主机上运行多个系统或应用,从而提高系统资源的利用率,并带来降低成本、方便管理和容错容灾等好处。Docker是一个开源的应用容器引擎,它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到安装了任何 Linux 发行版本的机器上。
2024-09-25 09:03:29
1333
原创 Redis:缓存
一个是查询操作,一个是更新操作的并发,首先,没有了删除cache数据的操作了,而是先更新了数据库中的数据,此时,缓存依然有效,所以,并发的查询操作拿的是没有更新的数据,但是,更新操作马上让缓存的失效了,后续的查询操作再把数据从数据库中拉出来。缓存空间是有限的,如果缓存空间满了,再往缓存里写数据时就会有额外开销,影响Redis性能。不是的,比如,一个是读操作,但是没有命中缓存,然后就到数据库中取数据,此时来了一个写操作,写完数据库后,让缓存失效,然后,之前的那个读操作再把老的数据放进去,所以,会造成脏数据。
2024-09-25 08:00:00
1495
原创 Redis:分片技术(Redis Cluster)详解
前面两篇文章,和保障了高可用,就读写分离而言虽然slave节点扩展了主从的读并发能力,但是和是无法进行扩展,就只能是master节点能够承载的上限。如果面对海量数据那么必然需要构建master(主节点分片)之间的集群,同时必然需要吸收高可用(主从复制和哨兵机制)能力,即每个master分片节点还需要有slave节点,这是分布式系统中典型的纵向扩展(集群的分片技术)的体现;所以在Redis 3.0版本中对应的设计就是Redis Cluster。
2024-09-25 02:00:00
3487
原创 Redis:哨兵机制
在上文主从复制的基础上,如果主节点出现故障该怎么办呢?在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制,它有效地的问题。
2024-09-24 09:40:14
1187
原创 Redis:主从复制
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。主从复制的作用数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。负载均衡。
2024-09-24 09:04:25
1232
原创 Redis:事务
Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。
2024-09-24 08:25:32
973
原创 Redis:持久化
压缩:Redis 默认采用 LZF 算法对生成的 RDB 文件做压缩处理,压缩后的文件远远小于内存大 小,默认开启,可以通过参数 config set rdbcompression {yes|no} 动态修改。2)父进程执行fork创建子进程,fork过程中父进程会进行阻塞,通过 info stats 命令查 latest_fork_usec 选项,可以获取最近⼀次 fork 操作的耗时,单位为微秒。AOF 的主要作用是解决了数据持久化的实时性,目前已经是 Redis 持久化的主流方式。
2024-09-23 22:06:20
1659
原创 Redis:常用命令总结
ziplist(压缩列表):当有序集合的元素个数小于 zset-max-ziplist-entries 配置(默认 128 个),同时每个元素的值都小于 zset-max-ziplist-value 配置(默认 64 字节)时,Redis 会用 ziplist 来作 为有序集合的内部实现,ziplist 可以有效减少内存的使用。type 命令实际返回的就是当前键的数据结构类型,它们分别是:string(字符串)、list(列 表)、hash(哈希)、set(集合)、zset(有序集合),
2024-09-22 17:38:15
7742
原创 MySQL:函数式编程连接MySQL库
我们可以在ld.so.conf 文件中指定很多目录(/lib 和 /usr/lib 除外,它们会自动包含在其中),动态装入器将在其中查找共享库,文件中所有的路径都会被搜索到。文件,它反映了我们对 /etc/ld.so.conf 所做的更改。执行完mysql_store_result以后,其实数据都已经在MYSQL_RES 变量中了,下面的api基本就是读取MYSQL_RES 中的数据。该函数会调用MYSQL变量中的st_mysql_methods中的 read_rows 函数指针来获取查询的结果。
2024-09-21 10:11:46
882
原创 MySQL:用户管理
这里root创建一个test的数据库,并将数据库内任意表的权限全部给与user01用户。这里的user()是个函数,相当于调用了此函数去查询当前用户的信息。是指,将root用户的数据库读取等权限赋予你所指定的用户。注:查看权限也需要在root权限下!刷新系统权限表,即时生效。
2024-09-20 21:43:01
421
原创 MySQL:事务(概念&操作&隔离)
在MySQL中,我们把共同完成一个功能而组成的多条SQL语句,称为一个事务。一个事务最重要的问题就是:不能被打断,即原子性,一个事务要么还没开始,要么已经完成。另外的,一个数据库中,一般不止一个用户在操作,如果一个用户正在修改数据,另一个用户在读取数据,也会导致错误。此时就需要对多个事务进行隔离。一个完整的事务,包含以下四个特性:以上四个特性简称为。通过指令,查看各个引擎的信息:其中表示事务,主流引擎中支持事务,而不支持事务。表示打开自动提交,自动提交情况下每一条语句都会被视为一个事务,为了让我们的事
2024-09-17 21:05:25
1494
原创 MySQL:索引知识
在 MySQL中,数据存储结构以及索引的作用至关重要。本篇博客将概述 MySQL 数据的存储与检索原理,探讨数据库性能优化的关键知识。
2024-09-17 20:11:18
1280
原创 MySQL:常用函数
函数用于格式化小数点位数,第二个参数表示要保留的小数点位数。四个字符,由于是中文字符,所以最后占用了。函数用于对密码加密,原理也是哈希函数。用于截取字符串,其第三个参数可省略。用于替换字符串中的指定字串。函数用于生成随机数,范围是。函数用于对一个字符串通过。加密后的数据位数更多些。
2024-09-15 17:33:38
471
原创 MySQL:基本查询操作
观察一下之前的查询,会发现我们一直在对列做限制,而每次查询出来的行数目是一样的。如果说我们想对数据的值做限制,比如“数学成绩大于等于60分”,那么就需要。在计算表达式时,如果指定了表,那么这个表有几行,表达式就计算多少次。这次的查询中,没有指定表名,也没有使用表的列,那么表达式默认只计算一次,输出一行。假设已经查询好数据,排序完成了,如果只需要取用前三条数据,这要如何完成?插入失败时,只替换部分指定的值,保留部分原先的值。MySQL中,有两种删除数据的方法,分别是。插入时,也可以直接替换,只需把。
2024-09-15 17:27:20
1575
原创 MySQL:表的约束
每次插入数据时,如果没有指定自增长的列,那么该列填入auto_increment,随后auto_increment + 1。如果指定了自增长的列,那么就把插入的值与auto_increment对比,如果新来的值更大,就更新auto_increment的值为新来的值 + 1。它对列的约束不是硬性的,而是给维护该数据库的程序员看的,当程序员看到该列的列描述后,就知道这个列要放入什么数据,从而形成一个软性约束。主键用于约束每一行数据之间的唯一性,被指定为主键的列不允许重复,不能为空,且一张表只能有一个主键。
2024-09-14 21:33:29
853
原创 MySQL:表中的数据类型
BUT,因为varchar类型每个字符串占用的字节数不确定,所以读取内存时,不知道这个字符串读取到啥时候结束,只要存入的字符串没有超过指定长度,那么该字符串占用多少内存,就实际开辟多少内存。所以在整个字符串的首部,需要开辟1 - 3 byte,来存储这个字符串的长度。会有精度损失,不适合存储对精度要求高的小数,因此MySQL推出了。在插入较大的整数时,整数也会有损失,比如插入。码中是控制字符,不可输出,所以我们看不到。来存储,与大部分编程语言不同,编程语言中。,我们尝试对其插入数据,来测试其范围。
2024-09-14 16:30:44
1459
原创 MySQL:库表的基本操作
由于我把数据类型变小了,此时有可能会发生数据精度丢失,一般不建议这样操作。时的语句,直接执行该语句,格式比较混乱,一般来说建议将末尾的分号。文件并不是简单的拷贝一份数据库,而是保留了整个数据库的。由于我不处于任何一个数据库中,此处值为。在数据库对应的目录中,会存在一个文件。:如果数据库存在,就不创建该数据库。修改数据,主要是指修改数据库使用的。数据库中的表的本质,就是多个文件!:字符存储时,采用的编码方式。:字符读取时,采用的编码方式。,其内部存储了数据库对应的。中执行,而不是数据库中。
2024-09-14 15:43:11
915
转载 C++:关于IO流
在C++中,额外增加了许多IO的特殊机制,这些机制都在头文件中。C++是在C语言基础上改进的语言,要兼容C语言的绝大部分内容,自然包括C语言本身的IO机制。对于标准输入而言,C++使用、,而C语言使用、。它们的功能相同,挑选一个使用即可,但是免不了会有用户两个版本交替使用,此时就可能带来同步问题。因此C++中没有自己的缓冲区,而是与共用缓冲区,这样就算混用两者,也不会造成输出错误。但是正因为兼容了,就要去做很多额外的工作,那么的效率就会下降,为此,C++也提供了接口用于处理C/C++之间的同步问题。默认,也
2024-09-13 16:15:23
996
1
转载 C++:新—类型转换
以上所有类型转换,都是旧式的,是基础C语言的显式与隐式的规则,衍生出来的各种类型转换。:从 派生类指针/引用 向 基类指针/引用 的转换,本质上是赋值兼容,一般来说是安全的。的转换不是指编译器帮你确认安全,而是说程序员自己确定了这个转换是安全的之后,再用。修改的变量,其实修改的是栈区中的数据,没有修改寄存器的数据,因此访问。实际上,C++的常量不存储在常量区,而是存储在栈区,而编译器会对。注意的是,类型转换的返回值是固定的,所以。即可,因为这是一个比较安全的行为。这是非常激进的指针类型转换,在编译期完成,
2024-09-12 23:11:10
1138
原创 C++:智能指针
内存泄漏是指程序在后,忘记或无法释放已经不再使用的内存,从而导致系统内存资源被逐渐耗尽的问题。这种情况下,即使程序本身并没有出现逻辑错误,也会因为内存泄漏而导致程序运行时间越来越长,甚至最终崩溃。RAII就是一种自动管理资源的机制,其可以帮助程序员自动释放资源,来避免内存泄漏,C++中,智能指针就是基于RAII产生的。
2024-09-12 20:51:39
1180
原创 Linux网络:五种IO模型 & IO多路转接之select
5.异步IO:内核将数据拷贝完成后,通知应用程序(注意:与信号驱动拷贝相比,异步IO数据从内核拷贝到用户区是由系统进行的,用户空间直接进行IO操作即可。(一次等待多个文件描述符,任意一个就绪的概率增大,IO效率提高),详情看下面的介绍。recv,read,write,send这些IO接口进行IO时,都先要等待数据就绪,再进行拷贝操作。:fd_set位图被系统修改,需要检测的文件描述符中,就绪的文件描述符被设置到这个位图中返回给用户区。eg:设置0号文件描述符属性,让标准输出变成非阻塞,观察现象。
2024-09-10 00:18:32
802
原创 Linux网络:数据链路层协议 MAC帧&ARP协议
(丢包重传,流量控制,拥塞控制,滑动窗口等等)IP协议在进行通信时,先将数据交付给下一跳主机(发送数据的主机A一定和下一跳网络处于同一网络段,一定是局域网通信)TCP的机制保证了IP传输数据的可靠性。以太网:负责局域网通信细节不同的,他们使用的通信细节不同(以太网,令牌环网等)。
2024-09-09 22:24:09
1150
原创 Linux网络:网络层协议 IP
将一个网络划分子网后,把原本的主机号位置的一部分给了子网号,余下的才是给了子网的主机号。其形式如下:做子网划分后的IP地址:网络号+子网号+子网主机号如:192.168.1.100/25,其子网掩码表示:255.255.255.12825个1子网掩码:11111111.11111111.11111111.10000000=255.255.255.128。
2024-09-09 22:03:51
1621
1
原创 Linux网络:传输层协议 TCP协议的特性(2)
滑动窗口快速重传延迟应答捎带应答可靠性方面校验和序列号(按序到达)确认应答超时重发连接管理流量控制拥塞控制。
2024-09-09 20:53:14
967
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人