自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(121)
  • 资源 (1)
  • 收藏
  • 关注

原创 社心3章:社会信念和判断(一)

How do we perceive our social worlds?Chapter 1 noted a significant fact about the human mind: Our preconceptions guide how we perceive and interpret information. We construe the world through belief-tinted glasses. "Sure, preconceptions matter," peo

2024-09-14 13:25:24 1078

原创 菜单权限功能设计

给用户分配的菜单,需要一个角色菜单表记录它们的关联。有些菜单中还有按钮等操作单元,我们统一可以记录角色和这些按钮操作的关系。按照角色分配菜单权限,所以分配的对象是菜单。我们需要维护一个角色表。, 核心字段就是角色的唯一标识,比如 role_id。

2024-09-09 15:29:39 342

原创 社心3章:社会信念和判断(二)

ILLUSORY CORRELATIONIt is easy to see a correlation where none exists. When we expect to find significant relationships, we easily associate random events, perceiving an illusory correlation. William Ward and Herbert Jenkins (1965) showed people the result

2024-08-26 09:33:42 634

原创 elasticsearch文档Mapping

当Elasticsearch在文档中发现一个新的字段。

2024-08-14 17:30:19 207

原创 elasticsearch文档 Query DSL

Elasticsearch支持两种类型的 geo 数据: geo_point 字段支持 lat / lon 对,geo_shape 字段支持点、线、圆、多边形等。

2024-08-14 17:25:09 302

原创 elasticsearch文档 Compound queries

例如下面语句,scenery字段含义 "解放" , description字段还有"测试" 的文档,如果匹配了第一个,返回的字段包含first,匹配了第二个,返回的字段包含second,都匹配,则first、second都有。布尔查询是用于匹配出和组合中的其他查询匹配的文档。它由一个或更多的布尔子句组成,每个子句是一个类型化的事件。布尔查询采用的是 “更多匹配更好分数” 的策略,所以一个文档对于must 或 should子句的匹配会被加到一起来计算最终的_score分数。

2024-08-14 15:00:51 290

原创 elasticsearch使用

由于Elasticsearch不能以root用户身份允许,需要创建一个新用户,并将Elasticsearch文件夹的所有权改为该用户。Elasticsearch可能需要调整系统级别的限制,如文件描述符数量和内存映射区域大小。下载得到 elasticsearch-7.9.3-linux-x86_64.tar.gz。需要编辑 /etc/sysctl.conf文件,在最后增加一行。

2024-08-13 14:03:21 205

原创 数据库xorm使用注意事项

golang程序用xorm构建like查询的时候,得处理以上通配符的情况,测试人员也会特别测试"_"、"%"做为查询条件的情况。对"_" 要进行转义操作,改为"\_"。业务上做的查询逻辑,通常会根据某个业务字段进行模糊搜索。但是对于 “_” 、“%” 字符进行模糊搜索时,会搜出全部数据。这是因为在关系型数据库的like语句中,百分号、下划线都是通配符。

2024-08-12 15:00:16 139

原创 接口签名 - 一个实践过的方案(三)

接口签名的方案,请看签名的文章这里给一个在golang的框架中,用middleware实现的代码实例。创建文件 signature_middleware.go。

2024-08-08 16:42:38 637

原创 接口签名 - 一个实践过的方案(二)

我们签名方案定了,这里要进行具体实现,方案内容参考我的文章。

2024-08-08 14:26:25 736

原创 接口签名 - 一个实践过的方案(一)

参与到签名的header的key的集合,使用英文逗号分割放到 key为 tw-signature-headers 的 Header中,客户端与服务端根据这个值进行选取并拼接签名串。将待签名字符串(StringToSign)使用 UTF-8 编码后得到Byte数组,然后使用加密算法对 Byte数组进行签名,签名使用 APP Secret的值作为key,最后使用十六进制进行转码,形成最终签名。客户端需要将以下内容放入到http请求的header中,请求给到服务端网关,API网关会做签名比对。

2024-08-08 10:36:58 751

原创 微服务间的鉴权

keycloak中创建领域realm,在领域中可以创建很多客户端,如果是微服务项目,就是很多微服务和前端项目作为客户端。keycloak在实现客户端之间访问的令牌时,可以生成与用户无关的token,这种token主要用于服务到服务(Service-to-Service, S2S)的认证和授权。Keycloak支持多种机制来生成和管理这些令牌,其中最常见的是使用OAuth2.0的客户端凭证(Client Credentials)授权流程。

2024-08-02 10:36:12 360

原创 keycloak了解说明

在我的ubuntu虚拟机中,写一个docker-compose.yml文件,内容如下,安装一个keycloak、一个postgres数据库。启动成功后,我们通过vscode编辑器的docker-compose插件,能看到虚拟机中运行了容器。采用docker的方式运行一个keycloak应用,方便进行学习。, 并使用账户admin、admin登录即可。我们用8080端口访问,执行如下命令,启动容器。

2024-07-19 11:28:47 353

原创 单点登录介绍

我们开发的web应用,用户用浏览器访问我们的服务器,交互使用的http协议,http协议本身就是无状态的。多次http请求之间没有任何关联。我们用http请求资源,服务端肯定是希望能标识出用户的信息,他是谁,有没有权限。这个信息就可以通过会话机制来存取。浏览器请求到了服务器,服务器会创建一个会话,并且会将会话id作为响应的一部分发送给浏览器。浏览器把会话id存到cookie中。在后续的请求时带上这个cookie中的id,服务端就能知道是同一个用户了。基于上面的会话机制,我们可以把用户的登录态存到会话中。

2024-07-18 17:30:43 287

原创 OAuth

OAuth1.0 是一种用于授权的开放标准,它通过提供临时令牌访问用户资源,同时保护用户的数据安全。然而,由于存在安全漏洞和复杂性等问题,OAuth1.0在现代应用中使用逐渐减少。相比之下,OAuth2.0 提供了更高的安全性和更简单的流程,成为目前广泛使用的版本。对于需要集成OAuth授权功能的应用开发者来说,建议优先考虑使用OAuth2.0。

2024-07-17 17:13:52 1014

原创 sonarQube如何展示覆盖率?

sonar.tests告诉 SonarScanner 在哪些目录中查找测试代码,以便在代码质量分析中可以包含这些测试代码的信息(尽管测试代码本身不会直接分析以寻找代码异味或漏洞),但它们的存在和位置对于理解项目结构和进行代码覆盖率分析很重要。Sonar的覆盖率统计并不是由Sonar直接生成的,而是依赖于项目中的覆盖率工具来生成覆盖率报告,然后Sonar收集这些报告进行展示和分析。这是获取单测覆盖率最直接和常用的方法。但执行sonar扫描后,在sonar的平台上,就能看到对应项目的覆盖率信息。

2024-07-08 13:54:23 1160

原创 单元测试 go test

我们要测试自己写的一个function中逻辑是否对,一般会确定好外部依赖返回的值,我们要测定的是这些之外的代码逻辑是否正确。我们要测试的是QueryUser函数,它依赖IUser接口,后面写单测代码的时候,它就用的MockUser这个实现,调用get的时候,实际就是MockUser的get。首先要知道,我们进行mock,也就是模拟的都是一个接口,这个接口有我们具体的业务实现,而在单元测试的时候,我们用mock内容替代这个实现,返回我们想要的确定的值。有了gomock,就能非常方便的帮助我们做这件事。

2024-07-03 17:30:35 457

原创 prometheus监控数据

Prometheus四个数据类型中,Histogram类型就是一种直方图数据。histogram类型被用于记录样本数据的分布情况,特别是在跟踪请求延迟、响应时间等场景时非常有用。histogram通过预定义的“桶(buckets)来捕获数据的分布”。使用的时候,要定义一个Buckets数组,它标识所有样本数据落在的各个区间。每个样本数据都会把它归到一个bucket中并记录其总样本值(比如一个http请求的耗时) 和 样本数(一次请求)。

2024-06-24 15:38:28 373

原创 jmeter使用

在测试计划中,创建一个线程组。在jmeter中线程就是用户的概念,想模拟多个用户的请求,就创建一个线程组。比如我们创建如下我们执行一次看看表格结果:总结:线程数就是用户数量,配置10,也就这次执行中,会有10个线程(用户)模拟采样器配置的http请求。Ramp-Up配置50秒,就是在50秒内启动完所有线程,那么就是平均5秒1个。循环次数2,就是这些线程创建后就立马执行请求,会连续执行两次请求,中间没有间隔(想要调整间隔时间需要用到定时器)。

2024-06-21 10:38:11 180

原创 migrate使用

例如下面sql文件内容,故意写成两组Up命令,看似上面一组默认事务的,下面一组非事务,其实只要这个sql文件带一个Up notransaction,整个文件所有Up的sql语句都是事务的。执行的时候,下面第一个sql会插入成功,然后剩下三个都不行,因为整体Up的sql都是非事务的。对文件一行行读取并分析是命令提示行(up、down、state)还是注释,还是sql语句,然后把解析到的sql存到对应的切片中,上面ParseMigration结构体维护了两个切片,分别存up的语句和down的语句。

2024-05-11 17:28:42 1095

原创 2. 用go-kit整合grpc服务

我们先简单看下如何构建一个grpc服务的,梳理出里面的主要关键点。

2024-04-23 17:27:46 1083 2

原创 1. 用go-kit整合http服务

首先endpoint层依赖service层,我们定义一个接口比如就叫IService,我们实例化endpoint的时候就提供一个具体的IService接口实现。上面我们说到Endpoint实现不是一个标准struct,如果是我们可以给他加上IService依赖,实例化的时候提供实现即可。现在我们的每个EndPoint已经 是一个函数类型实现,想要往里填入对IService接口的依赖,可以考虑使用闭包。闭包可以让函数类型的实现依赖外部的变量,而且在使用时在加载。

2024-04-23 11:41:57 720

原创 grpc使用

首先需要一个编译工具,对应的就是一个可执行文件比如protoc.exe,protoc运行是把.proto文件转换为 c++统一格式的内存数据, 然后由语言插件把内存数据转换为各自语言的代码文件,比如go语言就提供了protoc-gen-go插件。对于旧版本的protoc工具,只要安装完了protoc工具,就能使用protoc命令,把一个定义了grpc的.protoc文件转换为.go文件, 命令要用protoc --go_out=plugins=grpc:. hello.proto。

2024-04-23 11:20:52 919

原创 jeager的使用

服务之间调用时,为了确保各自创建的span能串成一个调用链,那么服务之间需要传递trace和span相关信息。jaeger规范了信息的 格式,有提供默认方式,也支持自定义。具体的说明,可以看官方文档,对于客户端包用的,里面也有使用说明。

2024-04-19 08:41:33 1204

原创 3.用go-kit整合链路追踪

项目中如果一个微服务要对其他服务暴露http api接口,需要把http client调用放到 pkg/sdk/go中实现。// ...1、拼接请求数据2、构建http client3、发送请求4、处理响应数据比如下面拿certs服务中实现的sdk举例子,代码在pkg/sdk/go/certs.go中。if err!= nil {项目采用了go-kit组件搭建,业务开发定义service接口,然后写个service实现。

2024-04-02 13:36:01 898

原创 链路追踪 - jeager

opentracing的官方文档。

2024-04-01 15:57:18 723

原创 阿里云oss使用

比如我们用上面的curl方式请求,就会拿到错误信息,看签名内容,可以发现这么请求时签名里面没用content-type内容,但是服务端签名时字符串是有octet-stream的,这样自然对不上。签名URL是用get方式获取文件,对于下载用的url,签名的时候会有content-type,用的什么,那么下载时客户端(浏览器、curl等)调用的时候也必须使用同样的content-type,否则就会提示签名错误。charset=UTF-8,所以我们生成下载的签名url时需要提供同样的content-type。

2024-03-06 17:09:21 1027

原创 正则表达式

2、如果文件名称本身就是【作业_20201020_1691998649_dd70c99c-338a-4f72-96b6-d4068dea00f0.zip】,经过处理就会变为【作业_20201020_1691998649_dd70c99c-338a-4f72-96b6-d4068dea00f0_1691998649_dd70c99c-338a-4f72-96b6-d4068dea00f0.zip】,我们还原的时候也就是要把最后的一组后缀去掉。整个后缀就是 _\d+_[-0-9a-zA-Z]+来匹配。

2024-03-05 11:28:54 588

原创 xorm使用

(现在已经不这么用了,得用reverse工具,下面步骤看看就得了,是以前那么用的)1、安装xorm可执行文件想要看源码,可以访问执行完上面的go install之后,xorm的相关代码会被下载到pkg/mod下,从里面找到cmd/xorm/template文件夹,拷贝出来。比如拷贝到/home/songweiwei/templates。里面内容如下。

2023-11-14 15:29:01 170

原创 golang闭包

闭包 函数类型

2022-11-19 22:19:28 951 1

原创 ArrayList、Vector、LinkedList区别

List

2022-06-19 10:55:30 554

原创 synchronized锁

2022-06-18 23:21:10 278

原创 ReetrantLock重入锁

2022-06-17 16:28:47 177

原创 java多线程知识点合集

java面试

2022-06-17 14:15:26 234

原创 线程池底层说明

线程

2022-06-16 14:27:33 174

原创 面试题:Redis的SDS你了解么?

redis字符串

2022-06-15 21:00:22 300

原创 面试题:如何为线程池设置合适的线程数?

线程

2022-06-15 19:21:52 836

原创 TCP四次挥手

http

2022-06-14 14:52:12 225

原创 为何设计为单线程?

单线程

2022-06-14 14:46:18 262

原创 B-、B+树的区别

mysql

2022-06-14 14:35:56 4578

空空如也

空空如也

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

TA关注的人

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