后端开发
后端开发学习日志
孜孜不倦fly
这个作者很懒,什么都没留下…
展开
-
DMA和零拷贝
(1)mmap+write(两次系统调用,三次拷贝):调用mmap()系统函数会直接把内核缓冲区的数据映射到用户空间,应用进程和操作系统内核共享这些数据;(3)真正的零拷贝技术(一次系统调用,两次拷贝):支持SG-DMA的话,DMA将磁盘数据拷贝到内核缓冲区,再用DMA将数据从内核缓冲区拷贝到网卡缓冲区。“零”指的是没有在内存层面拷贝数据,全程没有CPU只有DMA在搬运数据。数据拷贝过程:磁盘缓冲区-(DMA)内核缓冲区-(CPU)用户缓冲区-(CPU)socket缓冲区-(DMA)网卡缓冲区。原创 2024-03-11 16:35:42 · 478 阅读 · 0 评论 -
MySQL实现事务隔离的原理
3.如果min_trx_id<trx_id<max_trx_id:在m_ids中,说明未提交,不可见;2.如果trx_id>max_trx_id,说明该版本在创建read view后才生成的,所以该版本对该事务不可见。1.如果trx_id<min_trx_id,说明已经提交了,该版本对该事务可见。create_trx_id:创建该read view的事务的事务id。max_trx_id:创建read view后,下一个事务的id。min_trx_id:m_ids的最小值。一、read view四个字段。原创 2024-03-11 11:51:20 · 384 阅读 · 0 评论 -
键入网址到网页显示,期间发生了什么?
6.服务器处理请求并返回响应。3.DNS解析(域名解析)2.生成http请求信息。7.接收响应并显示网页。5.发送http请求。原创 2024-03-10 17:18:31 · 136 阅读 · 0 评论 -
MySQL三种日志
2.WAL(write-ahead logging)先写日志技术:MySQL的写操作不是立即写到磁盘上的,而是先写到buffer pool里的缓存页生成脏页,再将脏页产生的变化写入到redo log buffer中,事务提交的时候将redo log buffer中内容循环写到磁盘中的redo log file中。2.在事物提交前,记录更新前的数据到undo log里,回滚的时候读取undo log来进行回滚。1.作用:用于备份(记录全量日志,不小心整个数据库的数据被删除了)、主从复制。原创 2024-03-10 16:59:46 · 744 阅读 · 0 评论 -
协程简单介绍
协程(Coroutine)是一种用户态的轻量级线程,它可以在单线程内实现多个执行线程的切换和调度,而无需依赖操作系统的线程管理机制。协程可以简化并发编程,因为它们可以在同一线程内执行多个任务,并且可以通过显式的切换来控制任务的执行顺序和并发度。总的来说,协程是一种轻量级的并发编程模型,具有低成本、高性能和简化编程等优点,适用于需要高并发性能和简洁代码的场景。由于协程是在单线程内执行的,因此可以避免多线程并发时的锁竞争和资源争夺问题,从而提高了并发程序的性能。,并在其中实现了一个简单的协程函数。原创 2024-03-09 15:38:26 · 463 阅读 · 0 评论 -
redis中的zset的原理
如果有序集合元素个数少于128个且元素值小于64字节,使用压缩列表(新版本已经废弃压缩列表改用listpack数据结构了)头结点直接创建最大层数(64),其他节点生成小于0.25的随机数就一直创建层,一旦随机数超过0.25就确定该节点层数。1.在链表的基础上改进而来的,是一种多层的有序链表。2.实现层级靠的是节点结构体中的zskiplistLevel结构体类型的level数组。(2)比较SDS类型数据大小,小的话访问该层下一个节点。(3)以上两种都不满足的情况下,跳到当前节点的下一层。原创 2024-03-08 17:10:35 · 823 阅读 · 1 评论 -
进程和线程的创建过程
进程和线程既有区别,也存在一定的联系,合理利用它们可以最大限度发挥系统资源,提升操作系统性能。进程的创建过程涉及到写时复制(Copy-on-Write,COW)机制。线程的创建相比进程要简单一些,因为线程是在进程内部创建的,它们共享进程的地址空间,包括代码段、数据段和堆等。线程创建时,虽然不需要进行写时复制,但线程之间需要同步机制(如互斥锁、信号量等)来控制对共享资源的并发访问。通过写时复制这种延迟拷贝策略,新进程的创建更加高效,避免了对整个进程地址空间的全拷贝操作。原创 2024-03-06 15:19:07 · 281 阅读 · 0 评论 -
Redis基本知识
1.AOF日志:Redis在执行完一条写操作命令后,把该命令以追加的方式写入到一个文件里面(先执行后写入),重启Redis时会读取该文件里的命令逐一操作来进行数据恢复。2.Redis采用的近似LRU算法:在Redis对象结构体中添加一个额外字段来记录此数据的最后一次访问时间,使用随机采样的方式淘汰数据。Redis是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,用于存储键值对、缓存、消息队列、分布式锁等。2.缓存击穿:频繁被访问的热点数据过期了,也会导致大量请求直接访问数据库。原创 2024-03-02 11:19:21 · 941 阅读 · 1 评论 -
Nginx基本知识
3.IP哈希算法:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。Nginx是高性能的HTTP和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。4.按权轮询算法:给每台服务器分配权重(硬件好的服务器权重设置大一些)原创 2024-03-01 21:21:02 · 358 阅读 · 0 评论 -
linux下搭建boost、muduo、mysql、nginx
要在root权限下执行。原创 2024-02-23 14:57:13 · 391 阅读 · 0 评论 -
CMakeLists常用指令
【代码】CMakeLists常用指令。原创 2024-02-08 12:00:00 · 501 阅读 · 0 评论 -
MySQL-进阶
1.主键索引(关键字primary,自动创建,只能有一个)、唯一索引(unique)、常规索引、全文索引(fulltext)(4)意向共享锁(IS):与表锁共享锁兼容,与表锁排他锁互斥;无索引会执行全表扫描,表太大时性能会很低。(1)聚集索引的选取:默认为主键索引,否则为第一个唯一索引,都没有的话会自动生成一个rowid座位隐藏的聚集索引。(2)B+Tree:叶子结点形成单项链表,非叶子节点仅起到索引作用,具体数据都是在叶子节点存放的。3.行级锁:每次锁住对应的行数据,锁定粒度小,锁冲突概率低,并发度高。原创 2024-02-06 11:42:06 · 497 阅读 · 0 评论 -
常用git指令
4.拉出远程仓库项目: git pull origin +main(分支名称)8.推回远程仓库项目:git push origin +main(分支名称)(1)切换到main分支:git checkout main。4.提交到仓库:git commit -m ‘注释’(2)合并分支a到main:git merge a。6.切换分支:git checkout 分支名称。8.删除分支:git branch -d 分支名。3.添加文件到仓库(缓冲区):git add。1.查看仓库状态:git status。原创 2024-01-31 10:38:14 · 569 阅读 · 0 评论 -
MySQL-基础
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。(3)幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了 “幻影”。关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率。实现:在多的一方建立外键,指向一的一方的主键。实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)原创 2024-01-29 19:17:29 · 1631 阅读 · 0 评论 -
了解云原生
云原生是一种构建和运行程序的方法。云原生(Cloud Native)是一个组合词,Cloud + Native。Native表示应用程序从设计之初即考虑到云的环境。K8s是容器的编排系统,用于容器的管理和内部的负载均衡(意思就是分摊到多个操作单元上进行执行)和微服务相对的就是单体应用。微服务的理论基础为康威定律,指导微服务该怎么切分。微服务架构具有服务解耦、内聚更强、变更更容易的特点。使用docker技术来提供实时保障和应用隔离的功能。开发和运维的合体,为云原生提供可持续交付的能力。原创 2024-01-28 12:52:59 · 550 阅读 · 0 评论 -
shell常见语法
【代码】Shell常用命令。原创 2024-01-26 21:56:38 · 136 阅读 · 0 评论 -
Linux常用命令
【代码】Linux常用命令。原创 2024-01-26 21:52:56 · 276 阅读 · 0 评论 -
使用gcc test.c -o app指令报错
报错信息:/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function _start': (.text+0x24): undefined reference to main'collect2: error: ld returned 1 exit status报错原因:.c...原创 2023-08-30 10:44:00 · 94 阅读 · 0 评论 -
解决没有进入docker的权限问题
在Docker默认情况下只有root用户或者在docker组中的用户才有权限访问Docker服务。原创 2024-01-18 22:11:38 · 846 阅读 · 2 评论 -
Ubuntu中用useradd创建用户后无法用su切换过去
没有设置密码,没有指定家目录和shell版本,就不能su切换到新用户。//-m自动创建home目录,-s指定shell版本。//切换到root权限。原创 2024-01-14 11:56:30 · 756 阅读 · 1 评论 -
ubuntu在使用su - root时提示认证失败
在ubuntu中,默认情况下,是没有开启root账户的,因此在输入密码的时候会显示认证失败。设置密码来激活root权限。原创 2024-01-14 11:55:59 · 986 阅读 · 1 评论 -
使用vim对文本进行操作的一些快捷键
1.dd:删除这光标所在这一行2.y5y:复制包括光标这一行以及往下共5行的文本3.p:粘贴文本至光标处原创 2023-08-04 11:58:00 · 49 阅读 · 0 评论 -
解决CentOS 7无法看到ens33 ip地址的办法
原创 2023-06-23 16:25:00 · 140 阅读 · 0 评论 -
解决使用锐捷网络时CentOS7在网络适配器为NAT模式下无法联网的问题
原因:锐捷网络会反复自动关闭该服务解决方法:1.使用脚本保持自动打开nat服务2.锐捷客户端下虚拟机VMware无法联网的问题(本人没有尝试过该方法)...原创 2023-06-28 21:46:00 · 84 阅读 · 0 评论 -
解决在VM虚拟机中ubuntu系统无法从本机复制粘贴的问题
推荐使用:sudo apt-get install open-vm-tools-desktopsudo reboot不推荐自带的安装vmware-tools的方法!原创 2023-07-20 14:57:00 · 425 阅读 · 0 评论