![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后端
文章平均质量分 82
F3nGaoXS
这个作者很懒,什么都没留下…
展开
-
利用Caddy实现http反向代理
Caddy是一个开源的,使用Golang编写的,支持HTTP/2的Web服务端。它的一个显著特征就是默认启用HTTPS。和nginx类似。原创 2023-11-07 16:44:48 · 2225 阅读 · 0 评论 -
结合OIDC和Cookie实现SSO
OIDC是一个协议,简单来讲就是OIDC规定有一个中心的Provider能够认证用户的凭据并且授权,即会返回AccessToken和IDToken等给受信任的Client,因为IDToken是JWT格式且包含登录用户的唯一标识,所以Client能够轻松地解析IDToken获取用户信息甚至存储到自身的数据库中。这里选用OIDC的原因是Client能够很好地解析IDToken获取用户信息。原创 2023-07-25 19:23:03 · 390 阅读 · 0 评论 -
搭建OIDC Provider,以Golang为例
具体要不要在访问资源的时候检查token是否过期可以根据需求,也可以在前端采用各种策略(如轮询)来检查用户token是否过期,过期即要求用户重新登录,此时的access_token就会是最新的了,访问资源的时候就不需要再重新刷新access_token了。在Github注册然后登录用户后,我们就能在我的Github里创建和查看自己的Repository(代码仓库,以下简称“Repo”),同时我有两个App,一个叫Gitee,Gitlab,这两个App实现了能够访问用Github登录的用户的Repo。原创 2023-07-21 11:04:50 · 1244 阅读 · 1 评论 -
面向对象的S.O.L.I.D原则
改变类的原因不应该超过一个,即一个类应该只有一个职责。实例:面积计算器上述名为的类最好只进行一项功能:计算面积。。正确的做法应该是再有另外一个类:对面积进行格式化(JSON、XML、Stdin等)输出。这样就有了两个类:计算面积的类,对计算出来的面积进行格式化打印的类。原创 2023-01-17 16:47:35 · 443 阅读 · 0 评论 -
乐观锁和悲观锁
乐观锁和悲观锁区别原创 2022-12-01 16:40:04 · 490 阅读 · 0 评论 -
读取配置文件godotenv
Go读取配置文件库godotenv原创 2022-10-11 18:09:44 · 873 阅读 · 0 评论 -
go的解析命令行库go-flags
Go的标准库flag由于其有不支持短选项,选项定义比较繁琐,默认只支持有限的数据类型。为了解决这些问题,出现了不少第三方解析命令行选项的库,go-flags就是其中一个。go-flags提供了比标准库flag更多的选项,它利用结构体的标签tag和反射提供了一个方便、简洁的接口。除了基本的功能,还提供了其他丰富的特性:支持短选项-v和长选项-verbose支持短选项合写,如-aux同一选项可以设置多个值支持所有基础类型和map类型,甚至函数支持命名空间和选项组等等…原创 2022-09-02 16:27:52 · 806 阅读 · 0 评论 -
go的解析命令行库flag
flag和log一样是Go的标准库。flag用于解析命令行的选项。原创 2022-09-02 16:27:18 · 402 阅读 · 0 评论 -
go的日志库logrus
logrus完全兼容Go的标准日志库log。同时它还支持文本、JSON两种日志输出格式。原创 2022-08-17 16:34:56 · 783 阅读 · 0 评论 -
Stream入门
Stream是Redis5.0版本新增加的数据结构,主要用于消息队列(MQ,MessageQueue)。原创 2022-07-19 17:21:28 · 838 阅读 · 0 评论 -
Go的依赖注入库dig
什么是dig?dig是uber的开源的实现了依赖注入的一个库。如果你熟悉Java的话,我相信你对大名鼎鼎的Spring以及SpringIoC一定会有所了解,SpringIoC就是Java的依赖注入的实现。而dig则是golang的依赖注入的实现,不过dig很小巧且简洁,只不过易用性相较于SpringIoC会差一点。第一个dig应用从配置文件中读取配置信息利用读取到的配置信息初始化简单的App对象最后对User对象进行打印安装库由于需要读取配置文件,所以我们需要用到godotenv库,如果你原创 2022-05-19 19:08:54 · 1035 阅读 · 0 评论 -
kubernetes的学习
kubernetes的学习本篇学习笔记总结自https://k8s.easydoc.net/,https://www.bilibili.com/video/BV1Tg411P7EB/安装k8s集群主节点需要的组件docker(也可以是其他容器运行时)kubectl 集群命令行交互工具kubeadm 集群初始化工具工作节点需要的组件docker(也可以是其他容器运行时)kubelet 管理 Pod 和容器,确保他们健康稳定运行。kube-proxy 网络代理,负责网络相关的工作部原创 2022-04-06 15:20:11 · 356 阅读 · 0 评论 -
第一个gRPC-web项目
第一个gRPC-web项目1、什么是gRPC-web?简单来说,gRPC-web就是gRPC的JavaScript版本的client实现2、gRPC-web工作流程由于浏览器的特性,gRPC-web其实没办法直接向gRPC-server发送HTTP/2请求的,只有通过envoy代理,将来自gRPC-web的HTTP/1的请求转换为gRPC-server能够接收的HTTP/2请求3、安装gRPC-web相关依赖在使用下列命令前确保开发环境已经安装node全局安装protoc-gen-grpc-原创 2021-12-23 10:37:59 · 2431 阅读 · 1 评论 -
gRPC以及gRPC在go语言当中的应用
gRPC在go语言当中的应用,第一个gRPC应用请确保在进行后续的步骤时,确保电脑中有protobufMacOS可以利用brew install protobuf安装1、创建新的go项目项目名称:gitee.com/qingke.wu/hello-grpc/pbgo mod init gitee.com/qingke.wu/hello-grpc/pb.├── Makefile #常用的make命令,如go run,go test├── client #客户端├──原创 2021-12-22 17:58:04 · 467 阅读 · 0 评论 -
初识gRPC
初识gRPC1、认识RPCRPC(Remote Procedure Call,远程过程调用)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议。RPC协议构建于TCP或UDP,或者是HTTP。允许开发者直接调用另一台服务器上的程序,而开发者无需另外的为这个调用过程编写网络通信相关代码,使得开发网络分布式程序在内的应用程序更加容易。RPC采用客户端/服务器端的工作模式,请求服务即客户端,服务提供者即是服务器端。当执行一个远程过程调用时,客户端程序首先先发送一个带有参数的原创 2021-12-22 17:56:49 · 295 阅读 · 0 评论 -
初识protobuf
protobuf在go语言中的应用1、什么是protobuf?protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。你可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而不破坏原创 2021-12-22 17:55:13 · 150 阅读 · 0 评论 -
docker学习
docker学习1、安装dockerhttps://www.runoob.com/docker/macos-docker-install.html选择匹配自己操作系统的版本进行安装,如果比较慢的话可以使用阿里的开源镜像站下载:http://mirrors.aliyun.com/docker-toolbox/2、配置docker镜像源加速由于docker下载镜像默认是从dockerhub上下载,会比较慢,所以建议配置国内的镜像源,具体配置方法参看:https://www.runoob.com/d原创 2021-12-17 11:04:58 · 1268 阅读 · 0 评论 -
Gin框架的学习
什么是Gin?Gin 是一个用 Go (Golang) 编写的 web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架, 由于 httprouter,速度提高了近 40 倍。 如果你是性能和高效的追求者, 你会爱上 Gin。中文官方文档地址安装Gin使用Go Modules安装Gin$ go get -u github.com/gin-gonic/gin第一个Gin应用创建main.go,注意目录结构,同时需要确保go.mod中已经引入gin│ go.mod│原创 2021-11-02 17:16:09 · 531 阅读 · 0 评论 -
golang的学习
非0基础的Golang的学习Golang的优势极简单的部署方式可直接编译成机器码不依赖其他库直接运行可部署静态类型的语言编译时能检查出隐藏的大多数问题语言层面的并发天生支持充分利用多核强大的标准库runtime系统调度机制高效的GC垃圾回收丰富的标准库简单易学25个关键字C语言简洁基因,内嵌C语法支持面向对象特征(继承、封装、多态)跨平台性“大厂”领军Google、fackbookTencent、Baidu(运维)、JDm原创 2021-11-01 18:41:16 · 243 阅读 · 0 评论 -
Redis原理和Jedis
Redis原理和JedisRedis是什么?Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。(B/S架构)Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。原创 2021-10-08 17:32:09 · 364 阅读 · 0 评论 -
利用Java手写LinkedList
利用Java手写LinkedList和ArrayList不同的是,LinkedList是采用链表实现的,链表的特点就是每个节点存储的是value和下个节点的地址,所以不存在类似ArrayList的扩容问题,添加节点只需要一个新的节点对象然后链表末尾指向它就可以了。参考Java官方的LinkedList实现:java.util.LinkedList。不过Java官方使用双向链表实现。链表和节点链表有n多个链表节点组成,每个节点存储的都是元素+下个节点的内存地址。如何得到节点中存储的元素实际上是通过从链原创 2021-08-30 12:50:44 · 244 阅读 · 0 评论 -
利用Java来手写ArrayList
利用Java来手写ArrayList几乎所有的语言都会有数组,Java也不例外。数组有个特点就是在初始化的时候必须确定长度,即使容量到达了也无法自动扩容,无法满足需求,所以我们可以利用动态数组(ArrayList)来实现可以自动扩容的数组。参考Java官方的ArrayList实现:java.util.ArrayList。ArrayList的底层还是数组,相当于数组的强化版,能够进行自动扩容并且进行数据的增删改查。注意:以下利用动态数组来表示ArrayList,利用数组来表示Object[]私有属原创 2021-08-19 13:01:51 · 313 阅读 · 0 评论 -
Spring简单剖析
1、Spring概述Spring是什么Spring是一个 开源的 轻量级的 Java SE或Java EE 开发应用框架,其目的是简化企业级应用程序的开发。Spring框架提供日志记录、性能统计、安全控制、异常处理等面向切面的功能,还提供数据库事务管理:本身有一套简单的JDBC访问实现,同时还提供与第三方数据访问框架的集成,还提供一套web层的框架SpringMVC。所以Spring框架是超级粘合平台,不仅自身提供基础功能,还提供与其他技术或其他框架整合的能力,使得Java SE和Java EE开发原创 2021-08-04 15:21:02 · 196 阅读 · 0 评论 -
快速看懂UML类图
快速看懂UML类图参考自:https://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html1、查看UML类图示例顶层车的类图结构是<<abstract>>,表示车是一个抽象类;它有两个继承类:小汽车和自行车。它们之间关系是实现关系,用带空心箭头的虚线表示;小汽车与SUV之间也是继承关系,具体是泛化关系,用带空心箭头的实现表示;小汽车与发动机是组合关系,用带实心箭头的实线表示;学生与班级之间是聚合关系,原创 2021-05-28 13:39:32 · 242 阅读 · 0 评论