- 博客(263)
- 收藏
- 关注
原创 服务器限流方案与算法
固定窗口算法实现简单,性能高,但是会有临界突发流量问题,瞬时流量最大可以达到阈值的2倍。为了解决临界突发流量,可以将窗口划分为多个更细粒度的单元,每次窗口向右移动一个单元,于是便有了滑动窗口算法。滑动窗口当流量到达阈值时会瞬间掐断流量,所以导致流量不够平滑。想要达到限流的目的,又不会掐断流量,使得流量更加平滑?可以考虑漏桶算法!需要注意的是,漏桶算法通常配置一个FIFO的队列使用以达到允许限流的作用。由于速率固定,即使在某个时刻下游处理能力过剩,也不能得到很好的利用,这是漏桶算法的一个短板。
2025-05-14 01:17:31
823
原创 redis相关-数据库和缓存如何保证一致性?
好了,总结一下这篇文章的重点。1、想要提高应用的性能,可以引入「缓存」来解决。记住这点,缓存主要是为了提高性能,所以一般不要去费力去做强一致性,我们追求最终一致性即可。下面大多数高并发下数据不一致的情况都可以分布式锁解决,但是严重影响性能。2、引入缓存后,需要考虑缓存和数据库一致性问题,可选的方案有:「更新数据库 + 更新缓存」、「更新数据库 + 删除缓存」。但是无论哪种方案,都需要设置缓存过期时间兜底。
2025-05-12 02:27:06
970
原创 mysql是怎么发送数据给客户端的?如果读取大量数据超过客户端内存会oom么——游标?生成器yield?mysql unbuffered query?
我的主机内存只有100G,现在要全表扫描一个200G大表,会不会把DB主机的内存用光?逻辑备份时,可不就是做整库扫描吗?若这样就会把内存吃光,逻辑备份不是早就挂了?所以大表全表扫描,看起来应该没问题。这是为啥呢?假设,我们现在要对一个200G的InnoDB表db1. t,执行一个全表扫描。InnoDB数据保存在主键索引上,所以全表扫描实际上是直接扫描表t的主键索引。这条查询语句由于没有其他判断条件,所以查到的每一行都可以直接放到结果集,然后返回给客户端。那么,这个“结果集”存在哪里呢?
2025-05-07 02:58:26
722
原创 ThinkPHP5.1之容器注入(IOC)和门面模式(facade)
容器注入:也叫 依赖注入容器,用户在客户端使用容器来进行类管理,还可以将类的实例(对象)做为参数,传递给类方法,自动触发依赖注入。简单的讲就是将工具类打包成一个容器,在客户端完成工具类的实例化为对象,再以参数的方式直接传递给工作类的方法。容器:也称服务容器,简称(IOC)类似于:[即插即用]的工具,最大限度的简化外部对象的调用实现步骤有三步:创建工具类//数据库操作类class Db//数据库连接return ‘数据库连接成功//数据验证类//数据验证。
2025-05-06 06:40:20
989
原创 计算机操作系统-计算机网络-Reactor与Proactor
如果把I/O操作改为异步就能够进一步提升性能,这就是异步网络模型Proactor。Proactor翻译为“主动器”。Reactor可以理解为“来了事件我通知你,你来处理”,而Proactor可以理解为“来了事件我来处理,处理完了我通知你”。这里的“我”就是操作系统内核,“事件”就是有新连接、有数据可读、有数据可写的这些I/O事件,“你”就是我们的程序代码。
2025-05-06 04:24:48
112
原创 计算机原理-操作系统-调度方式(串行并行并发)区别以进程与线程、协程的区别
进程:你打开的一个个app,就是一个一个的进程,作为进程,它们最好是彼此隔离的,一个崩溃不影响另一个。线程:比如你打开音乐软件,播放、渲染ui、下载 分别是不同的线程去完成,否则给你的感觉就像被卡住了一样协程:线程是MB级别,协程是KB级别,可以理解成线程里的一个执行流,更小更轻量首先,这些划分都是为了尽可能的榨干cpu而存在的。进程就像是操作系统给你开的“工厂”。每个进程有它自己的厂房(内存空间)、机器(CPU 资源)、员工(线程)。所有程序在运行时,都是以进程的形式存在。
2025-05-06 04:19:18
1030
原创 协程的开销,不要滥用协程
转自 开发内功修炼协程开销测试上一节介绍了协程的诞生背景,那么我想说的是,毕竟协程的封装虽然轻量,但是毕竟还是需要引入了一些额外的代价的。那么我们来看看这些额外的代价具体多小吧。1、协程切换CPU开销测试过程是不断在协程之间让出CPU。核心代码如下。代码语言:javascript代码运行次数:0运行AI代码解释for i :=0;i<1000000;i<1000000;i++{
2025-05-06 02:23:15
232
原创 异步回调地狱的解决,为什么需要协程——以js为例讲述发展历程(Promise、async/await、生成器)
本文所讲的协程仅是说明为什么回调地狱通过协程解决和专门讲协程那篇文章结合起来看。
2025-05-06 01:29:40
622
原创 单线程可以异步回调么?——彻底搞懂JavaScript单线程异步执行机制
浏览器JavaScript的作用是操作DOM,这就决定了它只能是单线程的,否则会带来很复杂的问题。例如,假如JavaScript有两个线程,一个线程在某个DOM节点上添加内容,另一个线程是删除了这个节点,这时浏览器应该以哪个线程为准?
2025-05-06 01:01:03
129
原创 JAVA IO体系
在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流。在 Java 的 IO 体系中,类将近有 80 个,位于java.io包下,感觉很复杂,但是这些类大致可以分成四组:基于字节操作的 I/O 接口:InputStream 和 OutputStream基于字符操作的 I/O 接口:Writer 和 Reader基于磁盘操作的 I/O 接口:File基于网络操作的 I/O 接口:Socket。
2025-05-05 22:12:57
561
原创 计算机网络-计算机操作系统-linux IO多路复用的具体代码实现实例
转自 https://blog.csdn.net/A152419/article/details/137795711I/O 多路复用通过操作系统提供的特定系统调用, 在一个线程中监听多个I/O事件。当其中任何一个I/O事件就绪(可读、可写或异常)时,线程就会被唤醒,并且可以针对就绪的事件执行相应的操作,而不需要阻塞等待。函数参数:nfds:委托内核检测的这三个集合中最大的文件描述符 + 1内核需要线性遍历这些集合中的文件描述符,这个值是循环结束的条件。
2025-05-05 20:45:46
970
原创 在 golang 中是如何对 epoll 进行封装的?
同步编码方式的优点是符合人的直线思维。在这种模式下的代码很容易写,写出来也容易理解,但是缺点就是性能奇差。因为会导致频繁的线程上下文切换。所以现在 epoll 是 Linux 下网络程序工作的最主要的模式。现在各种语言下的流行的网络框架模型都是基于 epoll 来工作的。区别就是各自对 epoll 的使用方式上存在一些差别。主流各种基于 epoll 的异步非阻塞的模型虽然提高了性能,但是基于回调函数的编程方式却非常不符合人的的直线思维模式。开发出来的代码的也不那么容易被人理解。
2025-05-05 19:33:32
1013
原创 计算机网络-操作系统-C10k问题以及协程
c10k主要针对tcp连接c10k主要是cpu问题,过多的线程或者进程导致cpu主要上下文切换被占满,而非网卡吞吐量不行耗时主要在等待网卡数据接收完(这个主要限制是带宽网速 而非网卡性能)并发送到内核这一步,内核复制到用户空间其实相对还好,以及之后要再发给网卡。首先,我们的服务器软件都是代码写的,比如c或者go,它上层是一个进程。首先我们先看网卡接收数据这一步,数据包传输是有序的,但是可能会分成多个包所以,网卡接收数据,如果只有一个包,那就是有序的。
2025-05-05 18:42:49
784
原创 操作系统-计算机网络-Linux-网络socket套接字详解,UDP和TCP不同
用一幅图来小结一下建连的操作:connect:需要阻塞等待三次握手的完成。accept:需要等待可用的已完成的连接,如果已完成连接队列为空,则被阻塞。我们要注意,正常自己用电脑的话,都是自己去主动向服务端建立连接,而这个端口是自己指定的,一般每个软件用的端口都不一样,所以正常软件不是特别在意性能和关注listen、accept等函数,也无需实现服务端这么麻烦的东西,而且也不用一直循环去监听端口,相对简单很多和性能影响小但是如果是服务端,那就要一直循环监听端口,比如80和443那影响可就大了。
2025-05-05 18:09:53
944
原创 操作系统-IO相关,内核态用户态、系统调用、零拷贝、DMA、两阶段写、写时拷贝、PageCache等
DMA的全称为直接存储器访问(Direct Memory Access)。它是单片机一个用于把数据从一个地址空间转移到另一个地址空间的具有类似“拷贝”功能的控制器模块,然而不同于其他发送数据的模块,DMA的发送数据过程是不需要CPU干预的,DMA总线与CPU总线不冲突,只有发送结束了会产生中断通知CPU;早期 I/O 操作,内存与磁盘的数据传输的工作都是由 CPU 完成的,而此时 CPU 不能执行其他任务,会特别浪费 CPU 资源。
2025-05-05 01:02:23
790
原创 计算机操作系统-什么是阻塞\非阻塞,同步\非异步,它们真正的区别在哪?
比如你调用一个文件,然后系统就去准备,但是这时候你这个线程就被暂停了,等到数据准备好,系统告诉你好了,你就绪准备运行把,这不就是异步的?如果从这个角度理解异步,那就感觉很容易实现啊,就像你调用一个函数,那当然是函数好了,然后return告诉你结果。首先是,很多时候,我们确实要等待服务响应完成后才能进行下一步,比如你要调用一个关键的接口,根据接口返回值来进行操作,那这明显就得是同步的 不能是异步的。但是有时候,比如你打开一个网页,很多图片不需要加载完,就可以先滑动看其他内容,这时候就应该是异步的。
2025-05-05 00:25:26
795
原创 计算机网络——键入网址到网页显示,期间发生了什么?
服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后得到客户端密钥,然后用客户端密钥对返回数据进行对称加密,这样数据就变成了密文。客户端收到服务器端的数字证书之后,会对其进行检查,如果不通过,则弹出警告框。服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过。客户端收到服务器发返回的密文,用自己的密钥(客户端密钥)对其进行对称解密,得到服务器返回的数据。客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。
2025-04-30 02:36:52
576
原创 死锁到底是什么和永久阻塞的区别在哪?
而这个是永久阻塞 ,虽然主协程永久阻塞了 分协程还在干活 而如果有分协程向done发送了数据 则就可以退出阻塞。死锁是:所有的还没结束运行的groutine都陷入了永久阻塞状态 外力无法把它们拉出来。区分的意义是:如果只是永久阻塞 只会内存泄露 为了区分内存泄露和死锁 我们要区分开。永久阻塞是:多个groutine,只有一个进入了阻塞状态 其他还是正常执行的。需要特别指出的是 main方法结束 所有协程也会结束 不管是不是永久阻塞状态。但是这个是死锁 因为分协程退出了。会先输出1再报错死锁。
2025-04-29 05:54:24
148
原创 mysql大量数据迁移(内含mysql表空间的介绍)
要看量有多大、业务是否可以暂停迁移 等这个过程可以用于数据备份、数据迁移、数据整合等多种场景。
2025-04-29 01:18:25
417
原创 Mysql日志undolog undolog binlog relaylog与更新一条数据的执行过程详解
回滚日志(undo log)重做日志(redo log)归档日志(binlog)错误日志(errorlog)慢查询日志(slow query log)一般查询日志(general log)中继日志(relay log)其中,前三种比较重要,涉及数据库的acid,而后面几种相对不这么重要回滚日志undo log 主要用于回滚与事务的隔离性和mvcc实现重做日志redo log和binlog 可以。
2025-04-25 17:56:17
849
原创 CAP原理,zookeeper是强一致性么?为什么zookeeper不满足线性一致性依然可以实现分布式锁?
接下来我们总结一下本文内容。文章开头我们介绍了zookeeper的一致性模型,zookeeper仅对写操作提供线性一致性保证,无论多少个客户端的写操作在zookeeper集群全局有序。而对于跨客户端的读操作,zookeeper仅能提供类似于最终一致性的保证。接下来我们介绍了三种锁的实现方式,首先介绍了最简单的实现方式,仅仅使用create命令不能创建同名节点的特性实现加锁逻辑,本质上也是利用zookeeper写线性一致性保证。
2025-04-22 01:05:29
871
原创 计算机网络——常见的网络攻击手段
XSS 攻击,全称跨站脚本攻击(Cross-Site Scripting),这会与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,因此有人将跨站脚本攻击缩写为XSS。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。对于链接跳转,如 <a href=“xxx” 等,要校验内容,禁止以script开头的非法链接。不相信用户的输入,对输入进行过滤,过滤标签等,只允许合法值。
2025-04-19 14:59:00
1436
原创 数据库-Mysql为何使用可重复读(Repeatable read)为默认隔离级别?可重复读没什么必要,推荐用读已提交
先看另一篇博客,可重复读其实没啥必要。而且一般的DBMS系统,默认都会使用读提交(Read-Comitted,RC)作为默认隔离级别,如Oracle、SQL Server等,而MySQL却使用可重复读(Read-Repeatable,RR)。要知道,越高的隔离级别,能解决的数据一致性问题越多,理论上性能的损耗更大,且并发性越低。隔离级别依次为: SERIALIZABLE > RR > RC > RU为什么mysql要这样呢在读已提交(Read Commited)级别下,出现不可重复读问题怎么办?
2025-04-17 20:07:35
782
原创 数据库隔离性的实现——mvcc(快照读,当前读、read view、undo log)等——mysql为例
事务是在 MySQL 引擎层实现的,我们常见的 InnoDB 引擎是支持事务的,事务的四大特性是原子性、一致性、隔离性、持久性,我们这次主要讲的是隔离性。当多个事务并发执行的时候,会引发脏读、不可重复读、幻读这些问题,那为了避免这些问题,SQL 提出了四种隔离级别,分别是读未提交、读已提交、可重复读、串行化,从左往右隔离级别顺序递增,隔离级别越高,意味着性能越差,InnoDB 引擎的默认隔离级别是可重复读。
2025-04-17 19:34:49
945
原创 零散-乱七八糟 不好分类 放这
spm_id_from=autoNext&vd_source=1519960bcbf662e869de75526373a49f 这个是不建议购买的硬盘型号 其中特别注意 希捷的酷鱼系列 不是smr就是有问题的CMR。说到自动化转发应用,喜欢折腾的小伙伴应该都用过 Tasker 这款神器,不过它操作过于复杂,上手难度太高,所以今天给大家分享这款安卓 SmsForwarder 短信转发器,目的很简单,通过监控安卓手机短信,然后根据规则转发给指定的手机。Mac也有和Linux一样有wine。
2025-04-16 13:14:43
274
原创 零散-互联网黑话 argot、jargon
深入研发整合通用性覆盖场景整体项目认知拆分承载未来可持续性规划落后协同方法可感知的技术价值实现业务梳理积累知识库策略收敛茧房水平和垂直方向的提升多维度标签化维度情报网结构化分析入参出参阶段性分析数据支撑双周回顾链路长度架构部署带宽浪费矩阵产品价值重定位。
2025-04-16 13:14:25
286
原创 读书笔记-开不动的印钞机
一、以债为锚直到1971年人类才正式放弃以贵金属作为纸币发行之锚的做法,从这个时候开始,人类进行了以债为锚发行纸币的新时代。要理解这一点,我们必须回头,重新认识货币的历史。金银币的铸造标准问题。当然了这两个问题其实是一个问题:贵金属币是否必须足值?牛顿以其科学界崇高的威望压制住了争议,坚持以货币单位为贵金属币的标注单位这就意味着自此之后,英国的贵金属币可以不足值将政府信用与货币发行相捆绑,这恰恰是牛顿爵士在经济学领域做出的突破性贡献。
2025-04-16 13:14:05
959
1
原创 Redis ——消息队列
延时队列相比于普通队列最大的区别就体现在其延时的属性上,普通队列的元素是先进先出,按入队顺序进行处理,而延时队列中的元素在入队时会指定一个延迟时间,表示其希望能够在经过该指定时间后处理。从某种意义上来讲,延迟队列的结构并不像一个队列,而更像是一种以时间为权重的有序堆结构。
2025-04-16 13:13:46
771
1
原创 线性代数笔记
矩阵运算的实质是变换向量空间 秩不同 矩阵运算的形状也会不同。矩阵乘法等后判断矩阵的秩——用筛网的那个例子 还挺有启发性的。若经过矩阵映射后 在直线上 则有解 不在 则无解。(这里视频讲的太模糊了 不容易看懂==)为什么会又这些形状的矩阵?
2025-04-16 13:12:06
172
原创 Html5教程笔记
区别作者:陈龙链接:https://www.zhihu.com/question/60601491/answer/347356545来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。看了目前所有的答案,都没有回答到点子上!HTML关注的是如何写页面(Page),HTML5关注的是如何开发应用(APP)!同意广义上的HTML5包含HTML5/ES6+/CSS3/WebGL/Canvas/SVG/Web RTC等整个Web技术家族的观点。现在流行的什么H5产业、H5游戏都是
2025-04-16 13:11:13
247
1
原创 XML教程
XML和HTML的区别html用于展示数据,xml用于传输数据xml没有任何定义好的标签,比如html的p那样实体引用xml规范cssxml也能用cssxslt可以将xml转化为html
2025-04-16 13:10:58
121
1
原创 读书笔记-相对论笔记
有些信念可以坚持,但是有些常识是错的。物理学和哲学的最显著区别就在于,物理学需要观测 实验,而非空想。伽利略的相对论:人无法做实验区分静止与匀速运动。也可以叫不特殊论,无论你的速度多块,你的坐标系都不特殊。爱因斯坦的相对论:不仅仅是力学试验 一切现象都无法区分静止与匀速运动之后广义相对论指出 加速运动其实也没什么特殊光速只是一个数学方程的解麦克斯韦方程组光其实也是电磁波 所以 一切其实都是质子原子电子 或者能量?光其实就是特定频率的电磁波 而能够被人眼睛捕捉。
2025-04-16 13:10:06
272
1
原创 java-Spring boot 笔记
所有的技术框架的发展似乎都遵循了一条主线规律:从一个复杂应用场景 衍生 一种规范框架,人们只需要进行各种配置而不需要自己去实现它,这时候强大的配置功能成了优点:发展到一定程度之后,人们根据实际生产应用情况,选取其中实用功能和设计精华,重构出一些轻量级的框架,之后为了提高开发效率,嫌弃原先的各类配置过于麻烦,于是开始提倡“约定大于配置”,进而衍生出一些一站式的解决方案是的这就是Java企业级应用->J2EE->spring->springboot的过程。
2025-04-16 13:09:54
431
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人