技术阅读周刊第第7️⃣期

news2025/1/23 9:22:48

技术阅读周刊,每周更新。

历史更新

  • 20231013:第一期

  • 20231022:第二期

  • 20231027:第三期

  • 20231103:第四期

  • 20231107:第五期

  • 20231117:第六期

What is a JWT? Understanding JSON Web Tokens

URL: https://supertokens.com/blog/what-is-jwt

本文主要讲了一些 JWT 的基本原理,以及优缺点e55fb2bf5df352150829515d8a340cae.png

  • JWT 的生成规则 <header>.<body>.<signature>

    • 使用证书+签名算法创建签名 Key

    • 将 header 和 body 的空格换行都去掉后进行 base64,然后使用 . 拼接起来。

    • 将刚才拼接的字符串使用 Base64 + HMACSHA256 生成签名。

    • 最终将 <header>.<body>.<signature> 拼接成 JWT

Base64URLSafe(   HMACSHA256("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJhYmNkMTIzIiwiZXhwaXJ5IjoxNjQ2NjM1NjExMzAxfQ", "NTNv7j0TuYARvmNMmWXo6fKvM4o6nv/aUi9ryX38ZH+L1bkrnD1ObOQ8JAUmHCBq7Iy7otZcyAagBLHVKvvYaIpmMuxmARQ97jUVG16Jkpkp1wXOPsrF9zwew6TpczyHkHgX5EuLg2MeBuiT/qJACs1J0apruOOJCg/gOtkjB4c=")
)
Results in:
3Thp81rDFrKXr3WrY1MyMnNK8kKoZBX9lg-JwFznR-M
  • 验证 JWT

    • 先获取 header,校验头里的签名类型和算法

    • 获取 body,然后按照之前的方式 Base64 + HMACSHA256 生成签名

    • 判断两者签名是否相同,不同则验证失败

    • 判断过期时间是否过期

  • JWT 的优点

    • 安全性:使用非对称加密保证数据不被篡改

    • 高效,无状态:不需要单独使用数据库存储数据,只使用算法就能验证

  • 缺点

    • 因为他的独立性和无状态,除非是 token 过期了,不然很难撤销

    • 依赖于第一步里生成的签名 Key,一旦这个 Key 被泄露就会被伪造。

Go 开发中的十大常见陷阱[译]

URL: https://tomotoes.com/blog/the-top-10-most-common-mistakes-ive-seen-in-go-projects/

最近在  Reddit 上看到一个帖子,让推荐一本 Go 相关的书籍,大部分都是推荐的 “100 Go Mistakes and How to Avoid Them”,目前还没有中译版本,不过作者之前写过一个十个错误的博客,也可以预先看看。

  • 未知的枚举值,将枚举的未知值设置为 0

  • 自动优化的基准测试

  • 被转移的指针,日常开发中建议传值,速度会更快。

loop:  
  for {  
    select {  
    case <-ch:  
    // Do something  
    case <-ctx.Done():  
      break loop  
    }  
  }
  • 出乎意料的 break,在 select 语句中想要退出 for 循环,可以使用标签。

  • 正确传递错误上下文,使用 https://github.com/pkg/errors

  • 扩容切片有性能损耗,如果知道长度可以在初始化时指定长度。

  • 正确使用 context

  • 做好函数抽象,可以参考 io.Reader/io.Writer

  • 在 goroutine 中使用循环调用的时候需要额外赋值,这个在  1.22 已经修复了。

Dapr: A Portable, Event-Driven Runtime for Building Distributed Applications | by Seifeddine Rajhi | Nov, 2023 | Medium

URL: https://medium.com/@seifeddinerajhi/dapr-a-portable-event-driven-runtime-for-building-distributed-applications-c2ea8254406c

本文介绍了 Dapr 是什么,以及给了一个入门示例

95d3dfa3fecf42c767a9ac51b89ab621.png
image.png
  • Dapr 是 Distributed Application Runtime 的简称,翻译过来就是分布式应用运行时。

  • 你可以使用任何语言,任何框架、运行在任何地方构建你的分布式应用程序

  • Dapr 抽象了我们应用开发中所需要的大部分 API,所有与这些 API 交互的 SDK 都是由 Dapr 提供,所以我们不需要关系他的底层是什么。

3 years managing Kubernetes clusters, my 10 lessons. | by Herve Khg | Nov, 2023 | Medium

URL: https://hervekhg.medium.com/3-years-managing-kubernetes-clusters-my-10-lessons-b565a5509f0e

作者描述他三年的 kubernetes 集群管理的十条经验

  • 在云环境使用 kubernetes,这会比自己维护要简单很多,即便是自己维护也不会让自己的业务能力得到成长,或者收益性价比不高

  • 使用代码来部署应用,避免直接在控制台用命令操作,这样难以记录操作。

  • 避免过度使用 helm,同时要对充分理解其中的配置项;这个也很重要。

  • 不要直接迁移应用到 kubernetes,往往需要做相关的适配。

  • 非必要不要使用 Mesh

  • 避免过多的使用管理工具,kubernetes 的管理工具有很多,但大部分操作就靠 kubectl 就够用了。

  • 一定要记得定义资源的限制(内存和 CPU),避免程序 bug 导致 kubernetes 集群出现问题

  • 尽量不要在 Pod 中存储数据,推荐使用 NAS、云存储

  • 配置 HPA,可以根据负载自动扩容 Pod

  • 不要畏惧改变,每年需要对 kubernetes 进行升级,升级前需要充分阅读 ReleaseNote.

Ten Optimization Tricks to Make Your Java Application Run Faster | by lance | Javarevisited | Medium

URL: https://medium.com/javarevisited/ten-optimization-tricks-to-make-your-java-application-run-faster-9742f568ed6f

十个优化让 Java 应用更快

  1. 循环拼接字符串使用 StringBuilder

  2. 线程池代替自定义线程

  3. 容器类预先分配大小

  4. 用枚举代替常量

  5. 用 NIO 代替传统 IO

  6. 用位移操作

  7. 多使用单例模式

  8. 减少锁的范围

  9. 尽量少使用全局变量

  10. 多使用基础数据类型

文章链接:

  • https://supertokens.com/blog/what-is-jwt

  • https://tomotoes.com/blog/the-top-10-most-common-mistakes-ive-seen-in-go-projects/

  • https://medium.com/@seifeddinerajhi/dapr-a-portable-event-driven-runtime-for-building-distributed-applications-c2ea8254406c

  • https://hervekhg.medium.com/3-years-managing-kubernetes-clusters-my-10-lessons-b565a5509f0e

  • https://medium.com/javarevisited/ten-optimization-tricks-to-make-your-java-application-run-faster-9742f568ed6f

PS:最近也在更新视频号,也会有一些技术干货,动动小手帮主播点播关注c339fa310e770f1e8c589993f3ef48c5.jpeg

275f7552998c81c64c6d29671b7c89e6.jpeg

往期推荐

升级到 Pulsar3.0 后深入了解 JWT 鉴权

五分钟k8s实战-Istio 网关

k8s-服务网格实战-配置 Mesh(灰度发布)

k8s-服务网格实战-入门Istio

如何优雅重启 kubernetes 的 Pod 

38e422b123ad6f315f2e741a54841732.gif

点分享

d78bd03f235ba3034fbba44a6ca8d08b.gif

点收藏

429fa14678cab69d26a7b50fcf46b20a.gif

点点赞

3fd6504e578a0fb32795d442909057ef.gif

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1268447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CPU虚拟化的过程

VMCS 是Virtual Machine Control Structure。是 Intel 实现 CPU 虚拟化&#xff0c;记录 vCPU 状态的一个关键数据结构。VMCS 数据结构主要包含以下信息。 Guest-state area&#xff0c;即 vCPU 的状态信息&#xff0c;包括 vCPU 的基本运行环境&#xff0c;例如寄存器等。Hos…

git-4

1.在GitHub上创建个人仓库 现在仓库中有LICENSE文件&#xff0c;但本地没有这个文件&#xff0c;该怎么办呢&#xff1f;往下看 2.把本地仓库同步到GitHub 3.不同人修改了不同文件如何处理&#xff1f; 两个人在同一个分支上&#xff0c;两个人修改了不同文件 其中一人&…

11月第4周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!

飞瓜轻数发布2023年11月20日-11月26日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数、带货数据等维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营…

【LeetCode:907. 子数组的最小值之和 | 贡献法 乘法原理 单调栈】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Spark将execl表格文件导入到mysql中

实现代码 excel所需的pom依赖 案例实现 实现代码 package excel_mysqlimport org.apache.spark.sql.SparkSession import java.util.Propertiesobject t1 {def main(args: Array[String]): Unit {val spark SparkSession.builder().appName("ExcelToMySQL") /…

力扣347. 前 K 个高频元素(java,最小堆,快速排序法)

Problem: 347. 前 K 个高频元素 文章目录 前言题目描述思路解题方法复杂度Code 前言 对于求取Top K一般有如下两种题型&#xff1a; 1.针对静态数据&#xff08;查询TopK操作&#xff09; 2.针对动态数据&#xff08;包括添加数据操作和查询TOPK操作&#xff09; 一般解决思路…

【数据结构】八大排序 (三)

目录 前言&#xff1a; 快速排序 快速排序非递归实现 快速排序特性总结 归并排序 归并排序的代码实现 归并排序的特性总结 计数排序 计数排序的代码实现 计数排序的特性总结 前言&#xff1a; 前文快速排序采用了递归实现&#xff0c;而递归会开辟函数栈帧&#xff0…

Echarts大屏-数据可视化

使用原生htmljavascript实现大屏展示,较为麻烦的为边框的四个小角使用伪元素生成,其余echarts使用如下快速上手 - Handbook - Apache ECharts 效果如下:

Docker、Kubernetes、OCI、CRI-O、containerd、runc 之间的关系以及它们是如何一起工作的?

最近网上看到一张图片&#xff0c;能够很清晰地展现出 Docker、Kubernetes、OCI、CRI-O、containerd、runc 之间的关系以及它们是如何在一起工作的&#xff0c;如下&#xff1a; 本文可以作为之前一篇文章&#xff08;《K8s、Docker、CRI、OCI 之间的爱恨情仇》&#xff09;的…

最新消息:滴滴 P0 事故原因,原因出来了

最新消息滴滴P0故障原因&#xff0c;是由于k8s集群升级导致的&#xff0c;后面又进行版本回退&#xff0c;由于现在大型互联网公司基本都是基于K8s进行部署的&#xff0c;如果K8s集群一出问题&#xff0c;上面运行的业务Pod和运维系统全部都得宕机&#xff0c;导致没法回滚。 …

算法通关村-----超大规模数据场景的问题

对20GB文件进行排序 问题描述 假设有一个20GB的文件&#xff0c;每行一个字符串&#xff0c;请说明如何对这个文件进行排序 问题分析 20GB的文件很难一次加载到内存中&#xff0c;可以采用分块策略&#xff0c;先使块内有序&#xff0c;在使块间有序。 实现思路 按照给定…

python安装PyHook3

pyhook 报错 “TypeError: KeyboardSwitch() missing 8 required positional arguments: ‘msg’, ‘vk_code’, ‘scan_code’, ‘ascii’, ‘flags’, ‘time’, ‘hwnd’, and ‘win_name’” 一、PyHook3简介 pyHook包为Windows中的全局鼠标和键盘事件提供回调。Python应…

Ubuntu上的常用软件配置

《立冬》——李白 〔唐代〕 冻笔新诗懒写&#xff0c;寒炉美酒时温。 醉看墨花月白&#xff0c;恍疑雪满前村。 对于Android开发者而言&#xff0c;折腾Android源码那是其乐无穷啊。但是有时候在Linux系统下会很不方便&#xff0c;这里特此记录一下常用的软件配置&#xff0c;希…

NX二次开发UF_CURVE_create_isocline 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_create_isocline Defined in: uf_curve.h int UF_CURVE_create_isocline(int face_cnt, tag_t faces [ ] , double direction [ 3 ] , const char * start_angle, const ch…

Python Xorbits库:编程无限可能性的新开端

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Xorbits是一个Python库&#xff0c;旨在扩展Python语言的功能&#xff0c;使开发者能够更加轻松地进行创新性编程。该库提供了各种工具和功能&#xff0c;包括但不限于&#xff1a; 异步编程支持&#xff1a; Xo…

HTML-CSS知识速查

HTML/CSS知识速查 文章目录 HTML/CSS知识速查[toc]网页的组成浏览器**为什么需要Web标准&#xff1a;** **web标准的构成&#xff1a;**HTMLHTML语法导读**1.1 HTML语法规则&#xff1a;**1.2 基本结构标签**1.3 标签的关系&#xff1a;**1. **包含关系&#xff08;Parent-Chil…

PostgreSQL-SQL联表查询LEFT JOIN 数据去重复

我们在使用left join联表查询时&#xff0c;如果table1中的一条记录对应了table2的多条记录&#xff0c;则会重复查出id相同的多条记录。 1、解决方法一 SELECT t1.* FROM table1 t1 LEFT JOIN table2 t2 ON t1.id t2.tid 第一种方法我们发现还是有重复数据 2、解决方法二…

Diffusion:通过扩散和逆扩散过程生成图像的生成式模型

在当今人工智能大火的时代&#xff0c;AIGC 可以帮助用户完成各种任务。作为 AIGC 主流模型的 DDPM&#xff0c;也时常在各种论文中被提起。DDPM 本质就是一种扩散模型&#xff0c;可以用来生成图片或者为图片去噪。 扩散模型定义了一个扩散的马尔科夫过程&#xff0c;每一步逐…

删除排序链表的重复元素I和II,多种解法和思考

删除排序链表的重复元素I https://leetcode.cn/problems/remove-duplicates-from-sorted-list/description/ 一个循环就可以了&#xff0c;如果当前节点和下一个节点值一样&#xff0c;当前节点不移动让next后移动一个&#xff0c;如果不一样则当前节点后移。 一个循环就可以…

mysql8报sql_mode=only_full_group_by(存储过程一直报)

1&#xff1a;修改数据库配置(重启失效) select global.sql_mode;会打印如下信息 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION里面包含 ONLY_FULL_GROUP_BY&#xff0c;那么就重新设置&#xff0c;在数据库中输入以下代码&#xff0c;去掉ONLY_FULL_GROU…