自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 收藏
  • 关注

原创 了解OAuth2.0

开发授权(OAuth)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片、视频、联系人列表等),而无需将用户名和密码提供给第三方应用。OAuth 允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下里的2小时内)访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户可以授权第三方网站他们存储在另外服务提供者的某些特定信息,而非所有内容。

2023-06-20 11:24:59 576 1

原创 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 348

原创 Vue.js初学

Vue.js从零开始1、简单认识Vue.jsVue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。2、Vue.js安装CDN引入直接下载然后引入,script方式引用npm方式安装注意开发环境版本(vue.js)和生产环境版

2020-11-19 16:57:49 8551 14

原创 dockerfile结合go应用程序的简单应用

示例的dockerfile使用了多阶段的构建的方式,首先在一个专门用于构建的构建容器中编译应用程序,然后再将编译好的可执行文件复制到最终的容器镜像中,这种方式可以减小最终镜像的大小,因为这种最终得到的docker镜像只会包含最终容器和可执行文件,而没有编译该可执行文件需要的编译环境。第二阶段的步骤大致是,选定最终容器的镜像,然后将第一阶段编译出的可执行文件复制到现容器中,设置环境变量,定义运行命令。示例的Dockfile包含了Docker多阶段构建,第一个用于构建Go应用程序,另一个用于最终的容器镜像。

2024-01-31 17:45:23 1210 1

原创 利用Caddy实现http反向代理

Caddy是一个开源的,使用Golang编写的,支持HTTP/2的Web服务端。它的一个显著特征就是默认启用HTTPS。和nginx类似。

2023-11-07 16:44:48 1906

原创 结合OIDC和Cookie实现SSO

OIDC是一个协议,简单来讲就是OIDC规定有一个中心的Provider能够认证用户的凭据并且授权,即会返回AccessToken和IDToken等给受信任的Client,因为IDToken是JWT格式且包含登录用户的唯一标识,所以Client能够轻松地解析IDToken获取用户信息甚至存储到自身的数据库中。这里选用OIDC的原因是Client能够很好地解析IDToken获取用户信息。

2023-07-25 19:23:03 338

原创 搭建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 1058 1

原创 深入浅出理解OIDC

OIDC是OAuth2.0的增强,OIDC的核心是IDToken。相较于OAuth2.0,在授权流程多返回了IDToken,并且OIDC的Identity Provider还提供ID Token的认证服务。对于第三方应用程序(RP)来说可以更加安全地获取到登录用户的个人信息和唯一标识,使得第三方应用程序可以自己存储已登录用户的个人信息,但是不需要提供认证服务,因为认证服务是交由了Identity Provider。

2023-07-19 15:42:15 2260

原创 由浅入深了解超文本传输协议http

超文本传输协议HyperTextTransferPHTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。通过HTTP或HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。HTTP是一个客户端(client)和服务端(server)之间请求和应答的标准,通常使用TCP协议。通过使用浏览器、网络爬虫或者其他工具,客户端发起一个HTTP请求到服务器上的指定端口(默认端口为80)。

2023-02-24 17:05:13 1201

原创 面向对象的S.O.L.I.D原则

改变类的原因不应该超过一个,即一个类应该只有一个职责。实例:面积计算器上述名为的类最好只进行一项功能:计算面积。。正确的做法应该是再有另外一个类:对面积进行格式化(JSON、XML、Stdin等)输出。这样就有了两个类:计算面积的类,对计算出来的面积进行格式化打印的类。

2023-01-17 16:47:35 438

原创 乐观锁和悲观锁

乐观锁和悲观锁区别

2022-12-01 16:40:04 490

原创 读取配置文件godotenv

Go读取配置文件库godotenv

2022-10-11 18:09:44 811

原创 go的解析命令行库go-flags

Go的标准库flag由于其有不支持短选项,选项定义比较繁琐,默认只支持有限的数据类型。为了解决这些问题,出现了不少第三方解析命令行选项的库,go-flags就是其中一个。go-flags提供了比标准库flag更多的选项,它利用结构体的标签tag和反射提供了一个方便、简洁的接口。除了基本的功能,还提供了其他丰富的特性:支持短选项-v和长选项-verbose支持短选项合写,如-aux同一选项可以设置多个值支持所有基础类型和map类型,甚至函数支持命名空间和选项组等等…

2022-09-02 16:27:52 791

原创 go的解析命令行库flag

flag和log一样是Go的标准库。flag用于解析命令行的选项。

2022-09-02 16:27:18 393

原创 go的日志库logrus

logrus完全兼容Go的标准日志库log。同时它还支持文本、JSON两种日志输出格式。

2022-08-17 16:34:56 763

原创 Stream入门

Stream是Redis5.0版本新增加的数据结构,主要用于消息队列(MQ,MessageQueue)。

2022-07-19 17:21:28 800

原创 Go的依赖注入库dig

什么是dig?dig是uber的开源的实现了依赖注入的一个库。如果你熟悉Java的话,我相信你对大名鼎鼎的Spring以及SpringIoC一定会有所了解,SpringIoC就是Java的依赖注入的实现。而dig则是golang的依赖注入的实现,不过dig很小巧且简洁,只不过易用性相较于SpringIoC会差一点。第一个dig应用从配置文件中读取配置信息利用读取到的配置信息初始化简单的App对象最后对User对象进行打印安装库由于需要读取配置文件,所以我们需要用到godotenv库,如果你

2022-05-19 19:08:54 963

原创 第一个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 2383 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 458

原创 初识gRPC

初识gRPC1、认识RPCRPC(Remote Procedure Call,远程过程调用)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议。RPC协议构建于TCP或UDP,或者是HTTP。允许开发者直接调用另一台服务器上的程序,而开发者无需另外的为这个调用过程编写网络通信相关代码,使得开发网络分布式程序在内的应用程序更加容易。RPC采用客户端/服务器端的工作模式,请求服务即客户端,服务提供者即是服务器端。当执行一个远程过程调用时,客户端程序首先先发送一个带有参数的

2021-12-22 17:56:49 284

原创 初识protobuf

protobuf在go语言中的应用1、什么是protobuf?protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。你可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而不破坏

2021-12-22 17:55:13 138

原创 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 1266

原创 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 516

原创 golang的学习

非0基础的Golang的学习Golang的优势极简单的部署方式可直接编译成机器码不依赖其他库直接运行可部署静态类型的语言编译时能检查出隐藏的大多数问题语言层面的并发天生支持充分利用多核强大的标准库runtime系统调度机制高效的GC垃圾回收丰富的标准库简单易学25个关键字C语言简洁基因,内嵌C语法支持面向对象特征(继承、封装、多态)跨平台性“大厂”领军Google、fackbookTencent、Baidu(运维)、JDm

2021-11-01 18:41:16 235

原创 Java的序列化和反序列化

Java的序列化和反序列化什么是序列化和反序列化?**序列化(Serialize)**指将Java对象存储到硬盘文件(流)中的过程,即保存当前Java的状态。**反序列化(Deserialize)**指将序列化的对象转为Java对象。实现对象序列化和反序列化需要实现序列化和反序列化的Java对象需要实现Serializable接口(该接口没有任何方法需要实现,是个标志接口,即交由JVM识别的类)Student.java:public class Student implements Ser

2021-10-28 13:14:49 102

原创 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 346

原创 利用Java手写LinkedList

利用Java手写LinkedList和ArrayList不同的是,LinkedList是采用链表实现的,链表的特点就是每个节点存储的是value和下个节点的地址,所以不存在类似ArrayList的扩容问题,添加节点只需要一个新的节点对象然后链表末尾指向它就可以了。参考Java官方的LinkedList实现:java.util.LinkedList。不过Java官方使用双向链表实现。链表和节点链表有n多个链表节点组成,每个节点存储的都是元素+下个节点的内存地址。如何得到节点中存储的元素实际上是通过从链

2021-08-30 12:50:44 237

原创 利用Java来手写ArrayList

利用Java来手写ArrayList几乎所有的语言都会有数组,Java也不例外。数组有个特点就是在初始化的时候必须确定长度,即使容量到达了也无法自动扩容,无法满足需求,所以我们可以利用动态数组(ArrayList)来实现可以自动扩容的数组。参考Java官方的ArrayList实现:java.util.ArrayList。ArrayList的底层还是数组,相当于数组的强化版,能够进行自动扩容并且进行数据的增删改查。注意:以下利用动态数组来表示ArrayList,利用数组来表示Object[]私有属

2021-08-19 13:01:51 302

原创 Spring简单剖析

1、Spring概述Spring是什么Spring是一个 开源的 轻量级的 Java SE或Java EE 开发应用框架,其目的是简化企业级应用程序的开发。Spring框架提供日志记录、性能统计、安全控制、异常处理等面向切面的功能,还提供数据库事务管理:本身有一套简单的JDBC访问实现,同时还提供与第三方数据访问框架的集成,还提供一套web层的框架SpringMVC。所以Spring框架是超级粘合平台,不仅自身提供基础功能,还提供与其他技术或其他框架整合的能力,使得Java SE和Java EE开发

2021-08-04 15:21:02 192

原创 前后端使用利用WebSocket进行通信

前后端使用利用WebSocket进行通信1、前后端如何连接服务端利用SpringBoot启动一个WebSocket服务,同时暴露出该服务的应用路径,客户端则利用该应用路径进行连接。需要注意的是,在服务端只需要启动一个WebSocket服务,而每一个客户端就是一个WebSocket应用。就有点像:服务端是古老的电话接线员,而客户端就是打电话的人。假如用户A想要给用户B打电话就需要先打电话到接线员那,然后接线员再接通用户B。不过WebSocket可以实现广播和私聊。2、前端初始化WebSocket对

2021-06-02 17:53:01 31605 10

原创 Vue实例的生命周期

Vue实例的生命周期1、生命周期图示来自于Vue官网:生命周期图示[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HH2a2VJ4-1622541299561)(md_img/lifecycle.png)]由来自官网的图示我们可以看到,vue实例在整个生命周期中会有很多个钩子函数(在达到某事件时会调用的函数)有:beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroyde

2021-06-01 17:59:14 638 10

原创 快速看懂UML类图

快速看懂UML类图参考自:https://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html1、查看UML类图示例顶层车的类图结构是<<abstract>>,表示车是一个抽象类;它有两个继承类:小汽车和自行车。它们之间关系是实现关系,用带空心箭头的虚线表示;小汽车与SUV之间也是继承关系,具体是泛化关系,用带空心箭头的实现表示;小汽车与发动机是组合关系,用带实心箭头的实线表示;学生与班级之间是聚合关系,

2021-05-28 13:39:32 202

原创 MyBatis常用标签及标签使用技巧

MyBatis常用标签及标签使用技巧MyBatis的常用标签有很多,比如<sql id="">:预定义可以复用的sql语句<include refid="">:根据id引用定义的sql语句<trim>:空白补全,配合<if>标签使用<if test="">:条件判断,该语句返回的true,则该标签内的语句就生效<bind name="" value="">:创建一个变量,并且可以绑定到上下文1、统一的增删改通过我暂时的开

2021-05-10 18:40:33 1358 4

原创 一张图搞懂SpringBoot AOP的5个通知的交织顺序

一张图搞懂SpringBoot AOP5个通知的交织顺序每个通知都分为开始和结束:环绕通知开始->(前置通知开始,前置通知结束)->(切点)->(正常返回通知开始,正常返回通知结束)或(异常返回通知开始,异常返回通知结束)->(后置通知开始,后置通知结束)->环绕通知结束...

2021-03-06 00:25:43 437

原创 JWT认证原理,并整合SpringBoot

JWT认证原理,并整合SpringBoot1、JWT是什么?JWT是Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。2、JWT的结构JWT由三部

2020-12-25 15:36:27 333 1

原创 vue三大重点之vue-router

vue三大重点之vue-router1、什么是vue中的前端路由思想?所谓后端路由就是用户在浏览器地址请求url然后后端的controller就会跳转到对应的这个url请求的页面。前端路由则是用户在浏览器地址请求url的时候服务器就会一次性把所有的静态资源都给请求下来了(html+css+js),然后在前端里通过js里写一些判断逻辑然后将对应的html页面加载出来。甚至单页面富应用的话就只请求一个html页面,但是后续切换页面的时候则会直接利用js生成新的html代码从而加载到页面上。2、浏览器不改

2020-11-23 13:28:25 148

原创 vue三大重点之vue cli

vue三大重点之vue-cli1、什么是vue-cli?vue-cli(vue脚手架)就是vue官方的基于webpack的用于快速初始化构建vue项目的工具。就像建房子最开始的骨架需要用到的脚手架一样,它是一个能提高开发者工作效率的工具。能够辅助开发者快速地搭建好vue项目所需要地项目目录以及架构。因为vue-cli是基于webpack的,所以它有许多webpack的影子,但是却简化了webpack的相关配置。相当于vue-cli是webpack用于vue的个性化定制版,并且官方简化了许多配置。2、

2020-11-23 13:27:23 135

原创 ES6处理异步的方式promise

ES6处理异步的方式promise1、promise初使用大多数情况我们发起网络请求的时候都是利用Ajax异步请求。所以这个时候Ajax在没有得到请求的结果时是线程是异步的。在ES6的新语法中就有了promise这样一个类来更加优美地处理异步和异步的嵌套。假如我们想要发起一个请求一,然后利用请求一得到的结果再发起请求二,再利用请求二的结果发起请求三,嵌套下去,我们的代码就会像这样: $.ajax({// 请求1 success(res) { $.ajax({// 请求2

2020-11-11 18:43:43 128

原创 利用vue封装TabBer导航栏

利用vue封装TabBer导航栏1、利用vue-cli2构建项目需要在构建项目的时候安装vue-router2、搭建项目文件路径asset里存放图片和css,同时创建一个img文件夹存放图片,再建立一个tabbar子文件夹存放tabbar需要的图片。分别是导航栏未被选中和被选中的图片。components里就存放公共的组件,比如轮播、导航栏等。router里就存放router路由组件了。views就具体存放页面的组件,比如主页(home)、分类(category)、购物车(shopcart)

2020-11-10 18:26:59 492 1

原创 webpack简单入门

webpack1、关于webpack什么是webpack?webpack可以看做是将模块自动打包的工具,它会自动分析项目结构,然后将一些浏览器不能直接运行的扩展语言(TypeScript等)打包为合适的结构以便用户的浏览器能够进行解析。为什么要用webpack?因为在Vue中可能会用到大量的文件以及文件依赖以及项目结构,所以就推荐使用webpack来辅助打包。怎么使用webpack因为webpack的运行环境依赖node.js,所以需要先自行安装node.js。装好node.js

2020-10-19 18:30:01 170

空空如也

空空如也

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

TA关注的人

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