自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

浮尘笔记

多年以来学习和收藏的技术笔记,整理了一下发布出来,觉得有用的可以学习或参考一下。如果存在误差的地方欢迎大家及时指正。

  • 博客(116)
  • 资源 (4)
  • 收藏
  • 关注

原创 Linux常用命令汇总

Linux常用命令汇总,不断更新

2023-12-01 14:22:10 693

原创 数据库中索引的底层原理和SQL优化

从数据结构上来说,在 MySQL 里面索引主要是 B+ 树索引。它的查询性能更好,适合范围查询,也适合放在内存里。MySQL 的索引又可以从不同的角度进一步划分。比如说根据叶子节点是否包含数据分成聚簇索引和非聚簇索引,还有包含某个查询的所有列的覆盖索引等等。数据库使用索引遵循最左匹配原则。但是最终数据库会不会用索引,也是一个比较难说的事情,跟查询有关,也跟数据量有关。在实践中,是否使用索引以及使用什么索引,都要以 EXPLAIN 为准。

2024-05-06 14:42:11 985 2

原创 phpspreadsheet导出Excel报错问题汇总

PHP导出Excel出现的问题汇总和解决方案,phpspreadsheet实现导出Excel的方法封装

2024-03-27 18:52:57 281

原创 怎么保证微服务应用的高可用性?

早期某个系统调用第三方接口的时候,缺乏监控和告警,只有等用户出现问题联系客服的时候,或者业务方发现出现故障报告过来的时候才知道出问题了,这样对用户体验很不好。后面接入了监控和告警之后,在第三方接口出问题的短时间内,就能得到通知,然后快速启动各种容错预案,并且通知业务方和第三方。

2024-03-11 19:35:19 934 1

原创 微服务架构中的 隔离和超时控制

如果要构建高可用和高性能的微服务架构,依然少不了“隔离”的使用。因为 在出现故障的时候,隔离可以把影响限制在一个可以忍受的范围内。一般的原则是 核心与核心隔离,核心与非核心隔离。隔离应该怎么样做才能做到 提升可用性、提升性能和提升安全性的目标呢?其实可以采取如下的措施:机房隔离、实例隔离、分组隔离、连接池隔离和线程池隔离、第三方依赖隔离等。超时控制是指在规定的时间内完成操作,如果不能完成,那么就返回一个超时响应。比如这个问题:调用某个接口时的超时时间应该设定为多久?以及你为什么认为这个超时设置是合理的?

2024-02-26 18:58:08 949

原创 MacBook的nginx出现13: Permission denied 的问题分析和解决办法

说明是nginx没有权限访问这个CSS文件,查看了文件权限没问题,那么需要从nginx配置方面排查原因。原因在于,如果省略了group,nginx会认为组名和用户名一样。更换了电脑,发现网站的样式都没有了,直接访问CSS文件。然后重启nginx即可。

2024-02-19 16:22:53 659

原创 微服务架构中的 限流和压测

限流是为了保证系统可用性,防止系统因为流量过大而崩溃的一种服务治理手段。从算法上来说,有令牌桶、漏桶、固定窗口和滑动窗口算法。还有动态限流算法,或者说自适应限流算法,比较有名的就是参考了 TCP 拥塞控制算法 BBR 衍生出来的算法。这些算法之间比较重要的一个区别是能否处理小规模的突发流量。从限流对象上来说,可以是集群限流或者单机限流,也可以是针对具体业务来做限流。比如说在登录的时候,可以针对 IP 进行限流。又或者在一些增值服务里面,非付费用户也会被限流。触发限流之后,具体的措施也可以非常灵活。

2024-01-02 11:57:44 982

原创 Linux删除了大文件为什么磁盘空间没有释放?

rm命令删除文件的时候,只是删掉了inode数据,而文件的实际数据部分在 inode 被清除掉之后,会被覆盖并写入新的内容。但是如果文件在删除的时候是被打开的(有一个进程正在使用该文件,文件被进程锁定或者有进程一直在向这个文件写数据等)状态,那么进程依旧可以读取该文件,系统就会认为该文件的磁盘空间一直被占用。虽然删除了 access_log 文件,但是由于 nginx 进程还在一直向这个文件写入内容,文件的 inode 并没有清除掉,系统内核认为文件并未删除,这才出现空间不释放的情况。

2023-12-01 11:41:35 287

原创 微服务架构中的 熔断和降级

微服务架构中,如果需要保障可用性,其中一个方式就是 熔断。熔断在微服务架构里面是指 当微服务本身出现问题的时候,它会拒绝新的请求,直到微服务恢复。通过熔断机制可以给服务端恢复的时间,比如 CPU 使用率已经超出负载了,此时服务端触发了熔断,那么新来的请求就会被拒绝,因此,服务端的 CPU 使用率就会在一段时间内降到100%以内。

2023-11-20 18:13:18 454

原创 微服务的注册发现和微服务架构下的负载均衡

为什么需要服务注册与发现?一般来说,服务集群会部署在不同的机房和不同的机器上,监听不同的端口。当客户端收给服务端发送请求,怎么知道应该发送给哪个机器?这就需要用到“注册中心”。 最少连接数、最少活跃请求数和最快响应时间,都可以看作是选择了单一的指标来代表一个节点的负载,在实际工作中可以利用这个思路来设计自己的负载均衡算法。比如说在 CPU 密集型的应用里面可以设计一个负载均衡算法,每次筛选 CPU 负载最低的节点,但是难点是需要考虑 怎么采集到所有服务端节点的 CPU 负载数据。

2023-11-14 13:20:58 654

原创 Go语言Gin框架前后端分离项目开发工程化实例

Go语言Gin框架前后端分离项目开发工程化实例,后端通过模拟用户注册登录接口以及中间件校验,项目代码构建发布,前端使用Vue实现了一个简单的页面,然后调用后端接口。

2023-11-07 07:34:33 558

原创 Go语言Gin框架Logrus日志管理和token身份验证

RSA加密是一种非对称加密,可以在不直接传递密钥的情况下完成解密,这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。Logrus是一个结构化的Go日志框架,功能强大,具有高度的灵活性,它提供了自定义插件的功能,有TEXT与JSON两种可选的日志输出格式。相比RSA,ECDSA优势是可以使用更短的密钥,来实现与RSA相当或更高的安全,RSA加密算法也是一种非对称加密算法,在公开密钥加密和电子商业中RSA被广泛使用。

2023-10-31 10:47:40 335

原创 Go语言Gin框架中使用MySQL数据库的三种方式

在Gin框架中使用MySQL的最简单的方式就是直接处理SQL语句;xorm是一个Go语言的ORM库,通过它可以很方便的操作数据库。它的设计重点是高性能和易用性。XORM支持多种数据库,包括MySQL、PostgreSQL、SQLite、Oracle和SQL Server,并提供了丰富的查询语言。XORM还支持事务和缓存机制,可以提高数据库操作的性能。

2023-10-17 14:17:28 653

原创 使用ELK收集解析nginx日志和kibana可视化仪表盘

收集nginx的文件日志并写入到队列(kafka/redis),然后在另一台机器上消费队列中的日志数据并流转到。kibana dashboard 是一个统计数据展示面板,可以通过不同的维度进行统计和展示。我这里用kibana7.17.12版本演示,不同版本的kibana界面可能不一样。然后打开ES的页面,账号:elastic,密码就是你刚才设置的密码。然后重新启动kibana,再次访问,需要输入账号和密码。输入y开始设置,六种密码设置完成后,需要再次重启ES。,需要设置以下六种账户的密码。

2023-08-31 16:07:20 1649

原创 使用ELK(ES+Logstash+Filebeat+Kibana)收集nginx的日志

使用ELK(ES+Logstash+Filebeat+Kibana)收集nginx的日志

2023-08-24 16:58:52 1793

原创 ELK中Logstash的配置和用法

Logstash的配置和用法,以及在ELK中收集系统日志并展示到kibana中的过程。Logstash是一个开源的、服务端的数据处理pipeline(管道),它可以接收多个源的数据、然后对它们进行转换、最终将它们发送到指定类型的目的地。Logstash是通过插件机制实现各种功能的,可以在下载各种功能的插件,也可以自行编写插件。Logstash实现的功能主要分为接收数据、解析过滤并转换数据、输出数据三个部分,对应的插件依次是input插件、filter插件、output插件。

2023-08-22 16:02:42 1817 1

原创 Go语言Gin框架使用HTTPS以及安全认证

HTTPS和HTTP的主要区别:1、https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议。3、http的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输,身份认证的网络协议,比http协议安全。

2023-08-14 13:35:00 1106

原创 Go语言Gin框架中使用swagger、cookie、session

Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格。。接下来会在项目根目录生成一个docs目录:然后定义两个方法,分别是POST和GET接下来,启动服务,访问,可以看到自动生成了接口文档以及类似postman的调试工具。

2023-08-14 11:41:11 159

原创 Elasticsearch的一些基本概念

一篇文档包含了一系列的字段,类似数据库表中一条记录,字段的类型可以指定或者通过Elasticsearch自动推算,支持数组,支持嵌套。Elasticsearch是面向文档的,文档是所有可搜索数据的最小单位。每一个文档都有一个元数据,元数据是用于标注文档的相关信息的。索引(Index)是文档的容器,是一类文档的结合。可以查看集群的健康度。

2023-08-13 16:30:07 1220

原创 Go语言Gin框架json类型参数请求和数据校验

Gin框架提供了Bind,可以根据请求Body数据,将数据赋值到指定的结构体变量中。Gin框架中的的bind方法,主要是将结构体与请求参数进行绑定,请求参数json对应的key就是结构体对应的字段。如果是请求三方接口(比如微信登录),需要将对方接口需要的参数封装后发送HTTP请求,然后接收对方的返回。生成uuid的方法:go get github.com/satori/go.uuid,然后。如果需要复杂的校验,可以使用一些专业的库来完成,其中。使用 dive关键字表示进入到嵌套结构体进行判断。

2023-08-08 16:34:57 635

原创 Go语言Gin框架的基本用法

Gin框架官网:https://gin-gonic.com/zh-cn/,新增一个Go文件,引入 github.com/gin-gonic/gin 即可使用Gin框架。使用Gin框架自带的 `BasicAuth` 方法可以快速实现一个用户登录校验的中间件。

2023-08-02 12:29:42 280 1

原创 Elasticsearch搜索引擎系统入门

Elasticsearch是一个分布式搜索引擎系统,可以实现大数据近实时分析。Elasticsearch起源于Lucene,Lucene是基于Java语言开发的搜索引擎库类,创建于1999 年,2005年成为Apache顶级开源项目。Lucene 具有高性能、 易扩展的优点,但也有一些局限性:只能基于 Java语言开发,原生并不支持水平扩展。2004 年Shay Banon基于Lucene 开发了Compass,2010年Shay Banon重写了Compass, 取名Elasticsearch。

2023-07-30 21:48:41 401

原创 Ubuntu系统开发环境搭建和常用软件

Ubuntu系统常用的开发环境搭建和软件安装

2023-07-21 16:12:22 2501 6

原创 MongoDB基础入门

MongoDB是一个使用C++语言编写的基于分布式文件存储的数据库,是一个开源的、高性能、高扩展、无模式的文档型数据库,这里的文档指的是以JSON为数据模型的文档数据库。MySQL的数据库中存储的是表,MongoDB的数据库中存储的是集合,集合就是一组文档,集合中的文档可以是各式各样的,例如,{“name”:“zhangsan”}和{“age”: 3},它们的键不同,值的类型也不同,但是它们可以存放在同一个集合中。上面说了MongoDB中没有“表”和“行”的概念,取而代之的是“集合”和“文档”。

2023-07-01 13:38:19 1233 1

原创 我是怎么把win11一步一步变成Mac的

之前很长一段时间在MacBook上面开发习惯了,然后因为一些原因现在换到了windows上面,不管是使用上还是系统上都很不习惯,因此做了一些改造,慢慢的有点像mac了。

2023-06-29 13:14:03 6028

原创 Go语言的TCP和HTTP网络服务基础

TCP/IP 网络模型实现了两种传输层协议:TCP 和 UDP,实现网络编程,不仅可以基于应用层协议的HTTP,也可以直接基于传输层暴露给用户的网络编程接口:Socket(套接字)。Go语言的socket服务端程序通常采用一个 Goroutine 处理一个连接,主要关键词是Listen和Accept;使用 http.Get函数获取一个HTTP请求的返回信息,http.Server类型是基于 HTTP 协议的服务端,其中ListenAndServe方法的功能是:监听一个基于 TCP 协议的网络地址。

2023-06-18 21:14:01 1510

原创 Go 语言标准库常用的代码包

Cap方法提供的是内容容器的容量,不是内容长度。如果存在两个迭代变量,那么赋给第一个变量的值 就是当前字节序列中的某个 UTF-8 编码值的第一个字节所对应的那个索引值,赋给第二个变量的值 是这个 UTF-8 编码值代表的那个 Unicode 字符,其类型会是rune。strings.Builder与string值存储内容的方式是一样的:其中有一个内容容器,是一个byte类型的切片(字节切片),底层数组是一个字节数组,都是通过一个unsafe.Pointer类型的字段指向了底层字节数组的指针值。

2023-06-14 19:25:29 691

原创 分布式系统和高可用架构设计方案

传统单体服务架构代码数量庞大,牵一发而动全身,一个很小的改动都可能影响整个服务。正所谓不要把所有的鸡蛋装在一个篮子里,代码和数据库不在一个项目里,尽可能的避免了冲突和改动带来的风险。随着集群规模大了之后,很有可能出现集群宕机和磁盘损坏,分布式系统就是将大的服务拆分成很多个微小的服务,将数据库(存储介质)和代码(计算能力)分布到不同的服务器上,目的在于解决单台机器计算和IO性能问题,以及单机存储空间不足的问题。微服务是分布式系统的一种具体落地方案。

2023-06-10 20:30:00 1200

原创 数据结构与算法12:图、广度优先、深度优先

树表达的是层级化的结构,图表达的是网络化的结构。图的应用:社交网络和地图交通网络。图的存储方式1:邻接矩阵,依赖一个二维数组,空间换时间;图的存储方式2:邻接链表,底层依赖一个链表,时间换空间。图的算法分为广度优先搜索(BFS)和深度优先搜索(DFS),主要实现在图中从一个顶点出发到另一个顶点的路径。广度优先搜索需要使用队列来实现,深度优先搜索用的是回溯思想,可以使用栈来实现的。深度优先和广度优先的时间复杂度都是 O(边的个数),空间复杂度是 O(顶点的个数)。

2023-06-08 17:21:18 1377

原创 消息队列kafka使用技巧和常见问题

消息队列主要解决应用耦合、异步消息、流量削锋等问题,是大型分布式系统不可缺少的中间件。消息生产者 只管把消息发布到 MQ 中而不用管谁来取,消息消费者 只管从 MQ 中取消息而不管是谁生产的,这样生产者和消费者都不用知道对方的存在。对于一些流转步骤较多,或者耗费时间过长的场景,就可以使用消息队列。比如用户下订单成功后,可以通过消息队列异步发送信息,异步处理赠送积分等等。

2023-06-06 12:08:20 1089

原创 Redis面试核心技术点和缓存相关问题

Redis单线程有一个最大好处就是 节省线程切换的开销,更不用考虑并发读写带来的复杂操作场景,大大节省了线程间切换的时间。单线程模型避免了多线程的频繁上下文切换,这也避免了多线程可能产生的竞争问题。Reids 核心是基于非阻塞的 IO 多路复用机制。优先查询缓存,如果缓存未命中则查询数据库,将结果写入缓存;数据更新时先更新数据库,再删除缓存,然后一段时间后再延迟删缓存(防止并发场景下操作出现问题)。

2023-06-05 16:35:42 493

原创 数据结构与算法11:堆

堆是一个完全二叉树,对于一个堆层序遍历,从上层往下层遍历后的数据应该是有序的。大顶堆的每个节点值都大于等于子树中的节点值,小顶堆的每个节点值都小于等于子树中的节点值。堆排序可以实现O(nlogn)时间复杂度,O(1)空间复杂度。堆的常见应用:优先级队列、计算排行榜中前K个数据、求中位数、计算接口的 99% 响应时间。

2023-06-03 20:42:48 1167

原创 数据结构与算法10:递归树、Trie树、B+树

对于很多业务场景需要使用“二分思想”的情况下,基本上都可以拆解为二叉树这种数据结构来处理,比如归并排序、快速排序、二分查找、跳表等。归并排序的递归树是一棵满二叉树,在二分的过程中的时间复杂度是O(logn)。Trie树也叫“字典树”,它是一种专门处理字符串匹配的数据结构。B树是⼀种多叉平衡查找树,而且⾮叶⼦节点和叶⼦节点都会存储数据;B+树是只有叶⼦节点才会存储数据。

2023-06-02 02:15:00 752

原创 数据结构与算法09:二叉树

要存储一棵二叉树,可以选择基于指针的二叉链式存储法,也可以选择基于数组的顺序存储法。二叉树又分为:普通二叉树、满二叉树、完全二叉树、非完全二叉树等。完全二叉树的叶子节点都在最底下两层,最后一层的叶子节点都靠左排列。遍历二叉树的三种方法:前序遍历、中序遍历、后序遍历,这里的“序”指的是根节点的遍历顺序。二叉搜索树中序遍历后,可以输出一个从小到大的有序数据队列,时间复杂度是 O(n),非常高效。

2023-05-31 23:55:57 422

原创 数据结构与算法08:二分查找和哈希算法

二分查找是一种针对有序数据集合的查找算法,查找数据的时候每次都与区间的中间数据比对大小,将待查找的区间缩小为之前的一半,直到找到要查找的元素。二分查找的时间复杂度是O(logn),随着数据量的增大,查找的效率会很高效。哈希算法是把任意长度的原始数据通过散列算法转换成一个新的固定长度的数据输出,这个输出值就是哈希值。哈希算法常见的应用:安全加密、唯一标识、数据校验、散列函数、负载均衡、数据分片、分布式存储。

2023-05-31 14:20:12 1235

原创 数据结构与算法07:高效的排序算法

如果要对大规模的数据排序,可以考虑使用归并排序和快速排序,可以实现O(nlogn)的时间复杂度。归并排序和快速排序使用的是“分而治之”的思想,就是把一个无序的数组从中间分成前后两部分,然后对这两个部分再次分割,整个实现过程可以使用递归的方式。还有三种时间复杂度是O(n)的排序算法:桶排序、计数排序、基数排序,这三种排序算法时线性排序的,不涉及元素之间的比较操作。

2023-05-30 16:56:13 783

原创 数据结构与算法06:递归和简单的排序

递归是将一些有规律的重复问题分解为同类的子问题的方法,也就是在函数中自己调用自己。常见的排序算法有下面这些:冒泡排序、插入排序、选择排序、归并排序、快速排序、堆排序、计数排序、基数排序、桶排序。使用排序算法时需要关注三个方面:是否基于比较,是否是原地排序算法,是否是稳定的排序算法。在开发中更倾向于使用插入排序算法。

2023-05-30 00:23:43 412

原创 数据结构与算法05:跳表和散列表

对有序链表增加“索引”,改造后的数据结构就叫做 跳表(跳跃表),跳表的空间复杂度是 O(n),在跳表中查询任意数据的时间复杂度是O(logn),跳表中插入和删除操作的时间复杂度也是 O(logn)。散列表的本质是一个数组,可以在O(1)的时间复杂度查找元素。常用的散列冲突解决方法有两类,分别是:开放寻址法 和 链表法。散列表中装载因子越大,说明空闲位置越少,也就是冲突越多,散列表的性能会下降。

2023-05-29 18:25:27 1099

原创 数据结构与算法04:队列

队列主要包含两个操作:入队(在队列尾部插入一个数据)和出队(从队列头部删除一个数据) ,队列也是一种操作受限的线性表数据结构,队列可以用数组来实现,也可以用链表来实现。队列中需要定义两个指针:一个是指向队头的head 指针,另一个是指向队尾的 tail 指针。在循环队列中,最关键是要确定好队空和队满的判定条件,循环队列的入队操作和出队操作的时间复杂度都是O(1)。阻塞队列是一个 “生产者——消费者模型”。

2023-05-28 18:24:15 1558

原创 数据结构与算法03:栈

先进后出,后进先出的数据结构就是栈,可以理解为一个纸箱子,往箱子里面放书,一本一本叠上去,取得时候只能从上面取最后放进去的书,最早放进去的最后才会被取出来。栈只允许在一端插入和删除数据,当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,就应该首选“栈”这种数据结构。虽然栈限定降低了操作的灵活性,但这使得栈在处理只涉及一端新增和删除数据的问题时效率更高。

2023-05-26 22:15:00 777 2

GeoLite2-City.mmdb

GeoLite2-City.mmdb 解析位置信息的数据库

2023-08-30

Postman_v4.1.3[Chrome插件]

Chrome浏览器的Postman插件,鉴于很多同学不方便FQ安装postman,用这个压缩包可以离线使用chrome的postman插件

2019-03-14

Go语言实战.pdf

Go语言实战 人民邮电出版社 2017年3月第一版

2019-03-14

ThinkPHP5.0完全开发手册.pdf

ThinkPHP V5.0——为API开发而设计的高性能框架 ThinkPHP是一个免费开源的,快速、 简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发 和简化企业应用开发而诞生的。 ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能 和至简的代码的同时,也注重易用性。 遵循 Apache2 开源许可协议发布,意味着你可以免费使用 ThinkPHP,甚至允许把你基于ThinkPHP开发的应用开源或商业产品发布/销售。

2019-03-14

《Go语言编程》高清完整版电子书.pdf

本书首先引领读者快速浏览 Go 语言的全貌, 迅速消除读者对这门语言的陌生感, 然后循序渐进地介绍 了 Go 语言的面向过程和面向对象的编程语法, 其中穿插了一些与其他主流语言的比较以让读者理解 Go 语 言的设计动机, 接着探讨了 Go 语言最为重要的并行编程方法, 之后介绍了网络编程、 工程管理、 安全编程、 开发工具等非语法相关但非常重要的内容, 最后为一系列关于 Go 语言的文章, 可以帮助读者更深入了解这 门全新的语言。 本书适合所有层次的开发者阅读。

2019-03-14

空空如也

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

TA关注的人

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