- 博客(116)
- 收藏
- 关注
原创 常用英语单词总结(每天翻看下)
dockerdocker history 查看镜像的历史docker export 容器id > 文件名.tar 导出容器(本质:导出镜像文件)docker import redis.tar redis.V1 导入export import (镜像名)save load (容器名)docker build 生成镜像from 指定基础镜像run 一次构建一...
2019-12-05 10:19:11
343
原创 Go语言基础之包
Go 中的包是用来组织代码的基本单位。一个包中可以包含多个 .go 文件,这些文件共同组成一个逻辑模块。使用包可以实现代码复用、职责划分和命名空间隔离。例如,在之前的章节中我们频繁使用了fmt这个内置包。")我们可以根据自己的需要创建自定义包。一个包可以简单理解为一个存放.go文件的文件夹。该文件夹下面的所有.go文件都要在非注释的第一行添加如下声明,声明该文件归属的包。其中:package:声明包的关键字packagename:包名,可以不与文件夹的名称一致,不能包含。
2026-04-19 20:59:09
87
原创 Go语言基础之结构体
类型别名与类型定义表面上看只有一个等号的差异,我们通过下面的这段代码来理解它们之间的区别。//类型定义//类型别名结果显示a的类型是,表示main包下定义的NewInt类型。b的类型是int。MyInt类型只会在代码中存在,编译完成时并不会有MyInt类型。使用type和structtype 类型名 struct {字段名 字段类型字段名 字段类型类型名:标识自定义结构体的名称,在同一个包内不能重复。字段名:表示结构体字段名。结构体中的字段名必须唯一。字段类型:表示结构体字段的具体类型。
2026-04-19 08:10:26
186
原创 Go语言基础之map
是 Go 语言中声明映射(字典)类型的语法,用于存储键值对集合。KeyType必须为可比较类型(如intstring、固定长度的数组等,不可为切片或函数)。ValueType可以是任意类型,包括嵌套的map或其他复杂结构。map类型的变量默认初始值为nil,需要使用make()函数来分配内存。语法为:空映射声明需使用makevar m1 map[string]int // 未初始化,值为 nil,操作会 panicm2 := make(map[string]int) // 已初始化,可安全操作。
2026-04-11 11:32:02
251
原创 Go语言基础之切片
name:表示变量名T:表示切片中的元素类型// 声明切片类型var a []string //声明一个字符串切片 告诉 Go 语言:“我以后可能会用到一个字符串切片”。但是你 没有给它分配任何内存var b = []int{} //声明一个整型切片并初始化 仅声明了变量 b ,还加上了 {} ,这表示你 显式地初始化 了它。你告诉 Go 语言:“给我建一个切片,虽然我现在不往里面放数据,但我要它真真切切地存在”。
2026-03-22 20:31:57
405
原创 Go语言基础之数组
var 数组变量名 [元素数量]T数组变量名:自定义的变量名称,遵循 Go 的变量命名规则。元素数量:数组的长度,必须是常量表达式(编译时确定)。T:数组元素的类型,可以是任何有效的 Go 数据类型(如intstringfloat64等)。//定义一个长度为 5 的整型数组定义一个长度为 3 的字符串数组并初始化。
2026-03-21 21:58:59
278
原创 Go语言基础之基本数据类型
整型分为以下两个大类:按长度分为:int8、int16、int32、int64对应的无符号整型:uint8、uint16、uint32、uint64。
2026-03-21 16:39:23
179
原创 Go语言基础之变量和常量
const (6、多常量声明中的iotaconst (第一行iota初始值为0,所以A = iota赋值为0。中,iota仍然是0(因为这是同一行的常量声明),所以。当前iota仍然是0,直到遇到下一个常量声明(即C, D)才会递增。第二行C, D由于C, D是一个新的常量声明,iota会递增为1。C隐式继承了前一个表达式的模式,即iota,所以C = 1。D也继承了前一个表达式的模式,即iota + 1,所以。
2026-03-21 10:50:14
216
原创 pc端手机号验证码登陆页面
useContext 使用 存储全局用户信息。登陆接口,使用阿里云服务发送短信。创建页面路由 制定接口规范。为什么不用redux。
2023-07-11 18:28:19
621
原创 第七章 环境软件的安装
系统偏好设置 - 通用 - 首选以标签页显示文稿-始终。nvm install 18.7.0 安装指定的版本。nvm use 18.6.0 切换到别的版本。按住 CMD + shift + p。安装 mysql Workbench。nvm ls 查看当前安装的版本。配置同一个项目,在不同的选项卡。node -v node版本。安装多个node版本。
2023-07-11 01:48:58
229
原创 第五章 React18的并发渲染原理
遍历完 想恢复中断的 最多只能恢复子节点fiber链表同步:都在渲染 绘制并发:需要调用startTransition才有并发workerLoopConcurrent 只有一次渲染 绘制shouldYield 执行的时间超过5毫秒时间分片就会被中断一下 就会执行插入更高优先级的任务直到没有操作 才会commit render渲染 绘制。
2023-07-11 00:11:41
437
原创 第三章 技术选型
和服务器端运行时,它可以使客户端准确获取到需要的数据,没有任何冗余。必须有人可以兜底,可以解决。修改的版本最好可以上下兼容。核心项目不要用最新的技术。2、使用TypeScript编程。1、最像JAVA的node框架。5、告诉增长的star数。3、丰富的第三方模块。4、强大的脚手架工具。
2023-07-10 22:37:57
325
原创 第二章 标准的项目开发流程
针对产品需求文档 PRD 进行讨论。产品经理,研发部门,前端,后端。5、接口设计评审,提供接口文档。4、技术方案评审 (前后端)9、提测报告(给测试人员)8、冒烟用例(前后端)12、发布上线/验证。
2023-07-10 22:17:24
369
原创 第十二章 elk
ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比 Logstash,最左边的是业务服务器集群,上面安装了filebeat做日志采集,同时把采集的日志分别发送给两个logstash服务。logstash服务把接受到的日志经过格式处理,转存到ES DataNode。ES DataNode 会把收到的数据,写磁盘,建索引库。日志分布在多台不同的服务器上,业务一旦出现故障,需要一台台查看日志。单个日志文件巨大,无法使用常用的文本工具分析,检索困难;
2023-07-08 15:13:40
862
原创 第十二章 kafka
Producer即生产者,消息的产生者,是消息的入口。:Broker是,每个服务器上有一个或多个kafka的实例,我们姑且认为每个broker对应一台服务器。每个kafka集群内的broker都有一个不重复的编号,如图中的broker-0、broker-1等……主要负责处理读和写的请求:消息的主题,可以理解为消息的分类,kafka的。在每个broker上都可以创建多个topic。:Topic的分区,每个topic可以有多个分区,分区的作用是做负载,提高kafka的吞吐量。
2023-07-06 22:16:48
757
原创 第十章 服务降级
降级的最终目的是保证核心服务的高可用。过程就是丢卒保帅,有些服务是无法降级的,比如支付。当我们的服务器压力剧增为了保证核心功能的可用性 ,而选择性的降低一些功能的可用性,或者直接关闭该功能。这就是典型的丢车保帅了。就比如贴吧类型的网站,当服务器吃不消的时候,可以选择把发帖功能关闭,注册功能 关闭,改密码,改头像这些都关了,为了确保登录和浏览帖子这种核心的功能。降级的原理:就是降低次要功能的可用性实用性,增加核心功能的高可用性。降级的实现原理是多样多样的。
2023-07-06 14:50:24
210
原创 第九章 elasticsearch集群与商品搜索
1、支持复杂的查询;2、ES从一出生就是为分布式、集群化而 生的,不仅方便横向扩展、动态增加节点创建索引的时候,定义3个分片,每个分片1个副本集,一个就有6个分片如图,不论我们有多少个es实例,当用户需要对es进行增删改查的时候,连接任何一台节点都行,es内部会进行转发。这也是es集群的个性之一。
2023-07-06 13:35:18
662
原创 第八章 实现商品详情数据异构及静态化
2 、直接模式,对于部分高并发请求, 为了提高吞吐率, 有必要砍掉一些环节和应用来实现快速响应,如上图,这里我们将普通模式中的php-fpm和php框架砍掉了。1、 普通模式,用户获得redis数据需要经过nginx,lua-nginx-module是nginx的lua模块。nginx直接从redis获取数据。对应的ngnix配置。
2023-07-06 12:46:22
816
原创 第七章 商品详情三
3、前端访问商品详情页: 先请求的mongodb中的聚合数据,借此实现页面展示(前端部分略),而对于有部分数据,是需要买家点击后才显示的, 这类数据是在 买家点击后到redis异构数据中去请求数据。2、数据worker(192.168.232.100)作为rabbitmq的消费者,对消息进行消费, 并将库存数据放入mongodb集群和redis,mongodb中的是聚合数据(),而redis当中的 是异构数据。
2023-07-06 11:34:21
253
原创 第六章 rabbitmq高可用集群
在服务之间会采用mq进行消息通信,而rabbitmq本身也如同consul一样,如果只有一个节点那么就可能出现宕机的问题,并且基于mq的特点我们是可以在多个服务之间使用同一个mq来相互通信,因此高可用的架构设计就必不可少。
2023-07-06 10:43:36
1067
原创 第五章 商品服务发现与客户服务通信
正常来说consul是会向服务去做心跳检测的;这个操作很简单只需要基于consul的参数进行配置即可处理好,当然在这之前我们需要了解当前rpc的运行协议是什么。运用tcp来实现rpc通信;consul心跳检测只需要修改配置即可实现。这里我们可以利用一个shell脚本设置.env内容处理。
2023-07-05 22:23:01
1439
原创 第四章 商品详情分析与高可用负载均衡
ii:可以选择将商品详情单独拆分成一个服务,将它放到商品模块,但实际场景中,商品详情可以单独部署成一个服务,这个实现起来也很简单,增加商品详情服务器然后注册到consul即可。我们采用了数据聚合,将其他服务和模块的数据聚合到商品详情下的mongodb,前端请求mongodb获得聚合完成数据。对于商品模块以及首页等查询多,几乎无插入的内容,我们可以考虑不同层面的缓存策略以便可以更好的提高查询的效率;也就是说需要获取以及展示的数据就非常的多,因此在根据不同的唯度拆分的情况下就需要从不同的服务获取相关的数据。
2023-07-05 19:06:28
138
原创 第三章 ngnix动态负载均衡
1. worker进程重启的过程会等待现有的请求处理完毕(需要一定的时间) 2. 重启的过程中无法 处理请求-可能会造成一定的性能消耗(可能会堆积一些用户的请求无法处理)我们正常的情况就是,如果需要额外增加一台服务器,则会出现一个情况,就是它需要我们进行重启才能生效;client【0】 -》 nginx(upstream xx { 【1】 }) -》consul (【2】)《- 服务(【3】)【3】:服务在启动的时候通过put向consul注册自己的信息。【2】:如同一个数据库记录服务器的信息。
2023-07-05 18:56:43
1642
原创 第二章 swoft 快速入门
RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”。目前分布式系统架构 ,微服务中不同的系统之间的远程通信和相互调用的重要的环节。客户端通过发送一个规定的rpc协议,请求服务的注册中心,由服务注册中心检索可用服务并且实现调用转发,服务内容由代码服务器在启动的时候,注册到服 务中心。服务中心暂时利用redis存储内容。
2023-07-05 18:31:56
713
1
原创 redis常见知识点总结
1、redis的使用场景限流降级秒杀排行榜2、限流流量达到一定的阀值时会拒绝一部分流量限流的算法漏桶计数器请求来了+1操作超出时间间隔的充置。如一分钟的访问次数不能超过100个当有突发性并发时如1秒内瞬间发送200个请求。会有临界问题漏桶算法中的临界问题指的是当桶中的数据量接近桶的最大容量时,由于数据处理和发送速度是固定的,这时就有可能发生大量的丢包现象。
2023-06-28 14:37:07
949
原创 hyperf笔记
客户端发起一个请求,服务端并不是每次都创建线程去处理,而是通过io多路复用技术,把多个请求复用到同一个select上,达到一个线程处理多个请求。当这些注解在被读取到后,就会被放进容器中,然后利用php反射技术去解析这些注解,根据对应的信息去做对应的处理。某个类或者方法,不需要new实例化,只需要通过inject注入,最后再声明下,就可以在对象中使用这个类。客户端发起一个请求,服务端就需要生成对应的线程去处理,一个线程处理一次请求。服务器接收到请求后,会验证客户端携带的token,通过后,就会返回请求数据。
2022-10-17 13:40:56
1217
原创 ngnix笔记
与上面的select没有太大的区别,管理着多个描述符,对描述符进行轮询,但是没有最大文件描述符的数量限制。当连接有IO流事件产生的时候,epoll就会告诉进程是哪个连接有事件发生,然后进程就会去处理这个连接。根据客户端请求的url,里面会包含jpg ,png,.php等,来判断请求是否是静态资源。主要是通过异步非阻塞的事件驱动模型 和 多进程机制 实现高性能的。调用后select会阻塞,知道有数据,或者超时,函数才会返回。采用独立的进程,可以让进程互不影响。认证 注册 登录 权限验证。
2022-10-14 18:11:22
615
原创 linux笔记
内核是单线程处理工作的,多个动作的话,需要等待内核去完成后,这个时候就会出现网络IO模型。程序发送一个请求通过socket 再通过协议 再由系统内核去完成某个动作。websocket http都是基于tcp udp演变而来的。在一个文件夹中递归查询包含test字符串的文件。io模型就是当系统正在忙的时候的处理方式。非交互且面向字节流的编辑器。
2022-10-13 14:29:53
894
原创 docker笔记
1、docker流程1.客户端docker builddocker pulldocker run2.docker主机container容器images镜像3.仓库2、docker底层原理docker会在本机中寻找镜像,如果有该镜像,就会以它为模板,生产实例;如果没有,就会去docker hub上查找镜像,查找到就会下载到本地,并且以它为模板,生产实例。3、docker是什么‘docker是一个cs结构的系统,docker的守护进程运行在主机上,然互通过socket连接客户端,docker接收到命令后管理运行
2022-10-12 11:22:36
262
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅