暂时未有相关云产品技术能力~
个人博客:https://linzyblog.netlify.app/
简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/weixin_46618592/article/details/129004869?spm=1001.2014.3001.5502
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/weixin_46618592/article/details/127776709?spm=1001.2014.3001.5501
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/weixin_46618592/article/details/128916888?spm=1001.2014.3001.5501
gRPC为每个gRPC方法调用提供了Token认证支持,可以基于用户传入的Token判断用户是否登陆、以及权限等,实现Token认证的前提是,需要定义一个结构体,并实现credentials.PerRPCCredentials接口。
拦截器本质上就是一个特定类型的函数,所以实现拦截器只需要实现对应类型方法(方法签名相同)即可。
发生会话密钥交换。在此过程中,客户端和服务器必须就密钥达成一致,以建立安全会话确实在客户端和服务器之间的事实——而不是在中间试图劫持会话的东西。
Client发送完成后需要手动调用Close()或者CloseSend()方法关闭stream,Server端则return nil就会自动 Close。
Protobuf 是 Google 的序列化/反序列化协议,可以轻松定义服务和自动生成客户端库。gRPC 使用此协议作为其接口定义语言 (IDL) 和序列化工具集。
Any以字节的形式包含任意序列化的消息,以及作为该消息类型的全局唯一标识符并解析为该消息类型的URL。要使用Any类型,您需要 import google/protobuf/any.proto
RPC是一种方法,而HTTP是一种协议。两者都常用于实现服务,在这个层面最本质的区别是RPC服务主要工作在TCP协议之上(也可以在HTTP协议),而HTTP服务工作在HTTP协议之上。由于HTTP协议基于TCP协议,所以RPC服务天然比HTTP更轻量,效率更胜一筹。
通过采用此方法,Counter类型可以自由地用做其它结构体的任何字段的类型,而无需担心此类型中维护的64位字段值可能不是8字节对齐的。 此方法的缺点是,对于每个Counter类型的值,都有7个字节浪费了。而且此方法使用了非类型安全指针。
出现需要外键引用多个表的情况,不可能删除原来表结构,重新添加一个外键ID再建表,所以我们可以建立一个交叉表。让Addres不再依赖于User表或者Order表。
要定义一个 belongs to 关系,数据库的表中必须存在外键。默认gorm使用(关联属性类型 + 主键)组成外键名,如上面的例子User + ID 组成UserID,UserID就作为Profile的外键。
在项目开发中,我们可能会随时调整声明的模型,比如添加字段和索引,使用 GORM 的自动迁移功能,可以始终让我们的数据库表结构保持最新。
Conn接口是使用Redis数据库的主要接口。通过调用redis.Dial()来创建连接。创建连接完成操作后,必须调用连接关闭方法Conn.Close()。
键值不要太短,就好是简洁表达含义的键值,例如:”u:1000:pwd”和”user:1000:password”,前者虽然简短,但是后者更容易阅读,一眼就知道键值的含义,并且后者增加的空间消耗相对较小。不过这个算个人习惯,没有人必须要求你该怎么写。
时间复杂度:O(227 + nlog(n) + T * log(n)),227是DFS打表的时间,nlog(n)是vertor排序的时间,T*log(n)是询问次数和二分搜答案的时间。(如果算错了,评论或者私信指出谢谢)
Redis通常将全部数据存储在内存中,会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,但只是用于重启后将数据加载回内存,相当于一个数据备份作用。
非结构数据,根据定义是指数据结构不规则或不完整,没有任何预定义的数据模型,不方便用二维逻辑表来表现数据,例如网页日志、文本文档、图像、视频和音频文件等。
EXPOSE指令告诉Docker容器在运行时监听指定的网口。可以指定端口侦听的协议类型是TCP还是UDP,如果不指定协议类型,默认为TCP。
数据卷:设计用来持久化数据的,它的生命周期独立于容器,不会因为容器被删除后自动删除,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的 数据卷。
镜像是一个只读模板,带有创建Docker容器的说明。通常,一个镜像基于另一个镜像,并带有一些额外的定制。例如,您可以构建一个基于ubuntu镜像的镜像,但是要安装Apache web服务器和您的应用程序,以及运行应用程序所需的配置细节。
在定义函数(结构等)时候,可能会有多种类型传入。只有在真正使用才知道是什么类型,此时就可以用一个更加宽泛的类型(必须存在一定约束,只能在那些类型的范围内使用)暂时占位。这个类型就叫泛型
该docker images命令采用一个可选[REPOSITORY[:TAG]]参数,将列表限制为与参数匹配的镜像。如果您指定 REPOSITORY但 no TAG,该docker images命令会列出给定存储库中的所有镜像。
Dockerfile 文件是用于定义 Docker 镜像生成流程的配置文件,文件内容是一条条指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建;这些指令应用于基础镜像并最终创建一个新的镜像
我们发布一个项目,可能需要Redis、Mysql、Node.js的环境,电脑上运行只需要一分钟,而环境配置可能一天都不一定,充电两小时用时五分钟的概念。
题目要求我们找到字符串数组中存在字符串是其他单词的子字符串,看到题目给我们的n的范围是[1,100],所以我们可以通过暴力枚举用两个for循环一层指子串一层指找存在这个子串的单词,找到则找下个一个子串
你可以像普通属性一样将数据绑定到模板中的计算属性。Vue 知道 reverseMsg 依赖于 message ,因此当message 发生改变时,所有依赖 reverseMsg 的绑定也会更新。而且最妙的是我们以声明的方式创建了这个依赖关系:计算属性的 getter 函数没有副作用,它更易于测试和理解。
创建包管理工具,此命令会在当前目录中初始化和创建一个新的go.mod文件,手动创建go.mod文件再包含一些module声明也等同该命令,而go mod init命令便是帮我们简便操作,可以帮助我们自动创建。
它有两个配置文件,model.conf和policy.csv。 其中,model.conf存储了访问模型,policy.csv存储了特定的用户权限配置。 Casbin的使用非常精炼。 基本上,我们只需要一个主要结构:enforcer。 当构建这个结构时,model.conf和policy.csv将被加载。
PERM模式由四个基础 (Policy, Effect, Request, Matcher) 组成,描述了资源与用户之间的关系。
由于 JSON 不像 XML 那样冗长,因此在对其进行编码时,它的大小也更小,这使得 JWT 比 SAML 更紧凑。这使得 JWT 成为在 HTML 和 HTTP 环境中传递的不错选择。
First、Last 方法会根据主键查找到第一个、最后一个记录, 它仅在通过结构体 struct 或提供 model 值进行查询时才起作用。
Snake Case命名风格,就是各个单词之间用下划线(_)分隔,首字母大写区分一个单词,例如: CreateTime的Snake Case风格命名为create_time
Logger中间件将日志写入gin.DefaultWriter,即使配置了GIN_MODE=release。
对绑定解析到结构体上的参数,自定义验证功能。比如我们想name不为空的同时,不能为admin的时候,就无法 binding 现成的方法。
多文件上传就是一次可以上传多个文件,不需要一个文件一个文件上传,这也便于上传文件的人。
POST 请求的参数一般通过 body 传递给服务器. body 中的数据格式有很多种。
Gin 是一个用 Go (Golang) 编写的 Web 框架,由于 httprouter,它具有 martini 的 API,性能提高了 40 倍。具有高性能的优点。