- 博客(126)
- 收藏
- 关注
原创 MySQL事务
事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。原子性(Atomicity,或称不可分割性):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。
2024-08-13 18:09:12
1310
19
原创 MySQL索引
而此时IO的基本单位就是Page。页目录中存数据的主键和对应数据的地址,通过每个几个数据存一个,因为主键是有序的,可以通过比较找到就可以大概定位到那个数据附近的地址,可能还需要遍历,但是这次遍历的代价就很低了。目录页的本质也是页,普通页中存的数据是用户数据,而目录页中存的数据是普通页的地址。这时我们就可以使用一个目录项来指向某一页,而这个目录项存放的就是将要指向的页中存放的最小数据的键值,和页内目录不同的地方在于,这种目录管理的级别是页,而页内目录管理的级别是行,其中,每个目录项的构成是:键值+指针。
2024-08-08 23:42:26
963
22
原创 MySQL表的约束
当我们对stu和myclass建立了外键约束后,stu的class_id就只能是myclass中id列的值,如果是别的MySQL就会拦截,同理如果我们想要删除是myclass中id列的值,如果stu的class_id还有对应的值,那么MySQL也会拦截不让删除。这个世界是数据很多都是相关性的,建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。默认值的生效:数据在插入的时候不给该字段赋值,就使用默认值。
2024-08-05 15:54:20
1773
20
原创 MySQL的数据类型
varchar的(L)中L表示的是最大的字符长度,但是MySQL会根据我们实际存入的大小为我们开辟空间,就类似于我们顺序表中的capacity,但是因为这样就需要多开1~3个字节为我们维护实际用来多少空间的信息,所以如果varchar存满的话,有3字节是存在维护信息的,实际存储的65532个字节。如果定义的是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 99.99,所以浮点数和整型不一样,浮点数定义unsigned 会使数据表示范围减少一半。
2024-08-04 11:42:56
1304
17
原创 IO多路转接
调用epoll_create创建一个epoll模型;调用epoll_ctl, 将要监控的文件描述符进行注册;调用epoll_wait, 等待文件描述符就绪;
2024-08-03 23:40:01
1097
6
原创 MySQL的库操作和表操作
为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。执行删除之后,数据库内部看不到对应的数据库,对应的数据库文件夹被删除,级联删除,里面的数据表全部被删。db1.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中。
2024-07-28 22:59:36
1339
18
原创 MAC、ARP、NAT
所以对于一次ARP的请求,不管是MAC报头还是ARP报头的目的以太网地址都是广播地址FF:FF:FF:FF:FF:FF这个局域网的所有主机都会对这个报文进行解析,得到ARP的数据报,对比目的IP之后是自己的就留下构建应答报文,不是话就丢弃,应答因为知道了对方的MAC地址,就不需要进行广播了,所以其他的主机收到了并不会对MAC报头进行解析,直接丢弃,所以请求和应答各个主机的做法也是不同的。如果不符,则直接丢弃。在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
2024-07-26 15:15:24
1695
20
原创 IP协议和路由转发
路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口,Flags中的U标志表示此条目有效(可以禁用某些 条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发。每一个局域网都会存在自己专属的和局域网的网络号,而路由的过程就是不断的比对网络号进行路由,路由到局域网在根据主机号找到对应的主机,所以IP就提供了将数据包从A主机送到B主机的能力。网关就是下一跳的地址。
2024-07-24 19:31:27
1233
21
原创 TCP协议
首先建立连接是需要有成本的,不管是客户端还是服务器,都是需要成本的,如果是一次握手,单台主机就可以通过某种手段大量的向服务器发送请求,这样服务器直接就建立连接的话,单台主机就可能使服务器瘫痪,二次握手也是这样,收到客户端的的请求就建立连接,也会导致这样的问题,这样大量的向服务器发送SYN的问题为iSYN洪水问题。如果是三次握手,就保证了一定是客户端先建立连接,然后才是服务器建立连接,这样就不容易出现上述的问题,当然上述的问题对于三次握手依然存在,但是想要单台主机就做到就比较困难了。为什么要进行三次握手。
2024-07-19 16:16:40
2559
27
原创 UDP协议
所以UDP在发送报文前只需要把把头的结构化字段填好,然后防止报文的前面就可以像服务器进行请求了,但是不管是服务器还是客服端,都一定存在大量的UDP报文,所以OS也一定要对这么多的报文进行管理,所以OS也会存在对报文描述的结构体,报文本质就是数据,所以就是一段缓冲区,所以描述报文的结构体里面一定会存在指针。UDP的报头非常简单,存在16位源端口和16为目的端口,16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度,如果校验和出错, 就会直接丢弃。UDP协议是传输层的协议,是在应用层之下的。
2024-07-17 18:11:24
1147
18
原创 HTTPS
数字指纹(数据摘要),其基本原理是利⽤单向散列函数(Hash函数)对信息进行运算,⽣成⼀串固定⻓度的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改。摘要常见算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比。
2024-07-16 17:41:48
1651
15
原创 守护进程(精灵进程)
因为已经成为一个独立的会话,已经没必要和用户交互什么的了,但是代码中可能还存在打印什么的函数,所以可以把标准输入输出错误流重定向给/dev/null 这个文件是Linux中都有的一个文件,Linux会自动的把写入到这里的内容丢弃。每次我们远端登录Linux,OS会给我提供bash和一个终端,用来给我们用户提供命令行服务,这就叫做一个会话,然后我们在该终端下启动的所有进程,都是默认在当前会话中的一个进程组(一个进程也可以自成进程组)。守护进程是一个独立的会话,不隶属于任何一个bash的会话。
2024-07-14 18:15:54
622
20
原创 网络基础知识
答案是可以的,它们可以直接通过Mac地址进行广播,对于不是发给自己的直接丢弃,是发给自己的就进行解包,但是局域网中通知只允许一台主机在局域网中发消息,如果多台主机同时进行发送消息,就会发生消息碰撞,这就是一个碰撞域,所以局域网本身就是一个临界资源,碰撞避免和检测重发就是进行互斥访问。TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。因为每个层之间的协议是不一样的,无法通信。
2024-07-01 23:03:29
1633
25
原创 生产者消费者模型
当然这个生产消费模型最重要的也是生产数据和消费数据两个接口,对于生产者来说,刚开始需要先申请信号量,然后生产数据,生产完之后需要归还消费者的信号量,因为生产了一个数据,就可以允许生产者进来消费一个了,对于生产者同理,但是不管是生产者还是消费者,它们的信号量都可能不是1,所以在生产数据和消费数据的过程中可能会存在多个执行流同时进入,所以在生产和消费的过程中还是需要加锁的。信号量的本质是一把计数器,当一个资源被分成多份,可以被多个线程共用的时候,就可以使用信号量。: 解耦、支持并发、支持忙闲不均。
2024-05-29 19:04:56
952
27
原创 线程互斥和同步
比如说上面的抢票逻辑,假设没有票之后线程不退出还要接着抢票,工作人员会过一段时间放一批票进去,那么如果不用条件变量的话,没有票后,线程就会疯狂的申请锁和释放锁,会不断地消耗CPU资源,所以我们希望的是没票了你就在那等,工作人员放票之后通知你,你在抢,不通知你就一直在那等。这是因为我们在等待的时候,前提就是我们申请了一遍锁,然后访问临界资源不满足条件开始等待,这样就会面临锁在我自己这里,我自己被阻塞了,导致后面线程无法进来,所以需要把自己的锁传进去,这个函数会进行解锁操作,再醒来时,会自动重新申请锁资源。
2024-05-28 21:12:10
798
24
原创 C++中的类型转换
强制类型转换关闭或挂起了正常的类型检查,每次使用强制类型转换前,程序员应该仔细考虑是否还有其他不同的方法达到同一目的,如果非强制类型转换不可,则应限制强制转换值的作用域,以减少发生错误的机会。强烈建议:避免使用强制类型转换。static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型进行转换。因此C++提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。
2024-05-24 23:55:33
524
24
原创 线程的概念和控制
我们使用的所有的线程的函数都不是系统直接提供的,是原生线程库提供的,而原生线程库一定不只会有我们一个进程用,所以原生线程库中一定会存在多个进程创建的多个线程,所以线程库一定要把我们多个进程创建的线程给管理好,所以线程库中会存在描述线程的结构体,结构体中有很多线程的数据(属于哪个进程,线程id等),然后再用数据结构把各个描述线程的结构体管理起来。对上提供线程控制的接口。因为线程是在进程的地址空间中运行的,并且线程创建更简单,只需要复制进程的PCB,只有一小部分的数据是私有的,大部分数据都和进程是一样的。
2024-05-23 22:41:46
1607
19
原创 进程信号 signal
如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。由于信号处理函数的代码是在用户空间的,处理过程比较复杂,举例如下: 用户程序注册了SIGQUIT信号的处理函数sighandler。当前正在执行main函数,这时发生中断或异常切换到内核态。在中断处理完毕后要返回用户态的main函数之前检查到有信号SIGQUIT递达。
2024-05-15 23:11:59
1113
31
原创 【进程间通信】共享内存
共享内存的通信方式,不会提供同步机制,共享内存是直接裸露给所有的使用者的,所以一定要注意共享内存的使用安全问题。共享内存可以提供较大的空间。共享内存是所有进程间通信中速度最快的。可以减少数据拷贝的次数。为什么说共享内存是最快的?这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据,也就会减少很多的数据的拷贝。
2024-05-08 23:32:56
1183
39
原创 【进程间通信】管道和命名管道
一个文件被打开了两次,因为他们打开的方式不一样,所以他们的标记为也一定不一样,它们在内存中的file结构体一定是存在两份的,但是文件的属性和操作集合都是一样的,所以文件属性和操作集合以及文件缓冲区是存在一份的,每个file结构体中会有一些基本的属性(读写位置等等),其次还会有一些指针,分别指向自己的属性和方法集合以及缓冲区。我们可以看到fd数字是一个文件描述符数组,所以Linux管道是复用了很多文件部分的代码的,所以在通信的时候很多还是文件的操作。管道是Unix中最古老的进程间通信的形式。
2024-05-04 18:36:35
1321
43
原创 文件系统和软硬链接
图中圈红的就是我们自己文件的inode。对于普通文件来说,创建一个普通文件只需要通过inode位图找到一个没有用过的inode,然后把位图修改成1,通过inode表,索引找到inode,把属性填进去,把内容放进block中,修改blocd的位图,把内容存在的block的下标填入自己的block数组中,就搞定了。文件分为打开的文件和没有被打开的文件,而只有打开的文件是在内存的,也就是我们之前讲的,然而大部分文件都不是被打开的(当前不需要被访问的),它们都在磁盘中存放,显而易见,他们也是需要被管理的。
2024-04-21 17:00:55
1434
45
原创 如何在本地创建一个贪吃蛇小游戏node.js服务并实现无公网IP远程游玩
文章目录前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口5.固定公网地址正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。前言Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation(原为 Node.js Foundation,
2024-04-18 16:03:20
1729
30
原创 如何本地搭建开源导航页配置服务Dashy并发布到公网分享好友使用
Dashy是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航页。一款功能超强大,颜值爆表的可定制专属导航页工具结合cpolar内网工具,我们实现无需部署到公网服务器,即可实现公网访问Dashy,下面我们介绍配置方法。
2024-04-11 17:15:16
1868
53
原创 如何本地部署Elasticsearch+cpolar实现公网查询与管理内网数据
Elasticsearch是一个基于Lucene库的分布式搜索和分析引擎,它提供了一个分布式、多租户的全文搜索引擎,具有HTTP Web接口和无模式JSON文档,同时也是是一个非常强大的工具,可以用于各种用途,例如日志分析、搜索引擎、安全分析等等。隧道创建成功后,点击左侧的状态——在线隧道列表,查看所生成的公网访问地址,有两种访问方式,一种是http 和https,由于本地是https,我们只需要使用https地址即可。为了更好地演示,我们在前述过程中使用了cpolar生成的隧道,其公网地址是随机生成的。
2024-03-26 16:55:57
2350
42
原创 Wagtail安装运行并结合内网穿透实现公网访问本地网站界面
Wagtail是一个用Python编写的开源CMS,建立在Django Web框架上。Wagtail是一个基于Django的开源内容管理系统,拥有强大的社区和商业支持。它专注于用户体验,并为设计人员和开发人员提供精确控制。它能快速实现页面的表达,对于我这种对新实现的功能想要找到地方进行展示,但前端能力又不太行的同学基于django 一直会对django的稳定版本进行支持Wagtail由开发人员为开发人员构建。
2024-02-26 15:54:41
1622
36
原创 如何使用Docker部署MongoDB并结合内网穿透实现远程访问本地数据库
本文主要介绍如何在Linux Ubuntu系统使用Docker快速部署MongoDB,并结合cpolar内网穿透工具实现公网远程访问本地数据库。MongoDB服务端可以运行在Linux、Windows、MacOS平台,可以存储比较复杂的数据类型,支持的查询语言非常强大,几乎可以实现类似关系数据库单表查询的绝大部分功能,还可以对数据建立索引。直接实用包管理器安装MongoDB比较复杂,使用Docker安装部署MongoDB则相对简单快速,下面就和大家分享一下具体操作流程。
2024-02-22 17:17:54
1840
39
原创 如何使用安卓平板远程Ubuntu服务器通过VS Code远程开发
在安卓使用vscode主要是连接一个远程的code-server服务,code-server服务安装在什么系统,调用的就是什么系统的环境,如这里使用ubuntu进行安装code-server,那使用的就是ubuntu环境,如需要go,python,java开发,需要在Ubuntu安装相关环境,创建的文件夹和项目也是在Ubuntu里面.这种方式其实在访问vscode的时候利于可以随时随地进行连接使用,且不受设备影响。
2024-02-20 15:17:06
5383
49
原创 如何使用docker compose安装APITable并远程访问登录界面
vika维格表作为新一代数据生产力平台,是一款面向 API 的智能多维表格。它将复杂的可视化数据库、电子表格、实时在线协同、低代码开发技术四合为一,就连一行代码都不懂的普通职员都能轻松上手获得 IT 能力,从而极大降低企业数字化成本。如果你正在寻找快捷可定制的业务系统、安全可靠的可视化数据库、高效协同的办公工具,那么vika维格表能满足你的丰富想象。结合cpolar内网穿透,可以让你一键拥有自己的多维表格平台,并实时进行公网远程访问,可以私有化部署、代码修改,自主掌控数据并灵活定制你所需要的。
2024-01-29 20:01:56
2074
52
原创 如何安装MeterSphere并实现无公网ip远程访问服务管理界面
MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能,全面兼容 JMeter、Selenium 等主流开源标准,有效助力开发和测试团队充分利用云弹性进行高度可扩展的自动化测试,加速高质量的软件交付,推动中国测试行业整体效率的提升。下面介绍在Linux 中部署MeterSphere 并且结合cpolar 内网穿透实现远程也可以访问MeterSphere 界面!
2024-01-25 15:55:51
1780
47
原创 如何通过内网穿透实现公网访问Portainer管理监控Docker容器
Portainer 是一个轻量级的容器管理工具,可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可视化的界面,使得用户可以更加方便地管理 Docker 容器、镜像、网络和数据卷等资源。下面介绍如何将本地Portainer 管理界面结合cpolar内网穿透工具实现远程任意浏览器访问!远程访问的好处是可以方便地管理远程的 Docker 容器和镜像,无需登录到远程服务器进行操作。
2024-01-15 15:14:33
1545
34
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人