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

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

历史更新

  • 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.hqwc.cn/news/216596.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode—2824.统计和小于目标的下标对数目【简单】

2023每日刷题&#xff08;三十九&#xff09; Leetcode—2824.统计和小于目标的下标对数目 实现代码 class Solution { public:int countPairs(vector<int>& nums, int target) {int n nums.size();sort(nums.begin(), nums.end());int left 0, right left 1;i…

数据结构与算法编程题21

判别两棵树是否相等。 #define _CRT_SECURE_NO_WARNINGS#include <iostream> using namespace std;typedef char ElemType; #define ERROR 0 #define OK 1typedef struct BiNode {ElemType data;BiNode* lchild, * rchild; }BiNode, * BiTree;bool Create_tree(BiTree&a…

数据库的事务的基本特性,事务的隔离级别,事务隔离级别如何在java代码中使用,使用MySQL数据库演示不同隔离级别下的并发问题

文章目录 数据库的事务的基本特性事务的四大特性(ACID)4.1、原子性&#xff08;Atomicity&#xff09;4.2、一致性&#xff08;Consistency&#xff09;4.3、隔离性&#xff08;Isolation&#xff09;4.4、持久性&#xff08;Durability&#xff09; 事务的隔离级别5.1、事务不…

STM32-SPI1控制AD7705(Sigma-Delta-ADC芯片)

STM32-SPI1控制AD7705&#xff08;Sigma-Delta-ADC芯片&#xff09; 原理图手册说明功能方框图引脚功能 片内寄存器通信寄存器&#xff08;RS2、RS1、RS00、0、0&#xff09;设置寄存器时钟寄存器数据寄存器&#xff08;RS2、RS1、RS00、1、1&#xff09;测试寄存器&#xff08…

CFO的GenAI应用指南

CFO应该采取的最重要行动是识别最大的创造价值的机会&#xff0c;然后确保他们获得所需的资金和其他资源。GenAI拥有成为革命性技术的潜力&#xff0c;但它不会改变金融和经济学的基本原则&#xff1a;一家公司必须产生高于资本成本的回报。 技术改变了每一项业务&#xff0c;往…

Java核心知识点整理大全13-笔记

Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全2-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全3-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全4-笔记-CSDN博客 Java核心知识点整理大全5-笔记-CSDN博客 Java核心知识点整理大全6…

设备管理系统-设备管理软件

一、为什么要使用设备管理系统 1.企业扩张快&#xff0c;设备配置多&#xff0c;管理混乱。 2.设备数量多&#xff0c;存放地点多&#xff0c;查找麻烦。 3.同类设备单独管理, 困难。 4.设备较多时相关信息统计容易出错&#xff0c;错误后修改困难。 二、凡尔码设备管理软件的…

LabVIEW绘制带有多个不同标尺的波形图

LabVIEW绘制带有多个不同标尺的波形图 通过在同一波形图上使用多个轴&#xff0c;可以使用不同的标尺绘制数据。请按照以下步骤操作。 将波形图或图表控件放在前面板上。 1. 右键点击您要创建多个标尺的轴&#xff0c;然后选择复制标尺。例如&#xff0c;如果要为一个…

Jenkins与Docker的自动化CI/CD流水线实践

Pipeline 有诸多优点&#xff0c;例如&#xff1a; 项目发布可视化&#xff0c;明确阶段&#xff0c;方便处理问题 一个Jenkins File文件管理整个项目生命周期 Jenkins File可以放到项目代码中版本管理 Jenkins管理界面 操作实例&#xff1a;Pipeline的简单使用 这里是比较…

【C++代码】链表

算法&#xff1a;搜索、查找、排序、双指针、回溯、分治、动态规划、贪心、位运算、数学等。 数据结构&#xff1a;数组、栈、队列、字符串、链表、树、图、堆、哈希表等。 数据结构是为实现对计算机数据有效使用的各种数据组织形式&#xff0c;服务于各类计算机操作。不同的…

解决 Invalid bound statement (not found): XXXX 异常

解决Invalid bound statement not found 异常 异常环境解决 异常环境 1、异常提示找不到 listQuery2方法 Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.huaw.mapper.excel.ExcelWorkBookMapper.listQuery2 2、MyBatis…

超越噪音,让音乐重获新生:iZotope RX 10音频降噪修复软件

在音乐制作或者音频处理的过程中&#xff0c;噪音往往是一个让人头痛的问题。无论是环境噪音&#xff0c;还是设备产生的噪音&#xff0c;都会对音频质量产生重大影响。而现在&#xff0c;我们有了iZotope RX 10&#xff0c;这款专业的音频降噪修复软件&#xff0c;可以将你从噪…