
后端
文章平均质量分 56
我一个搬砖人
小弟一个后端狗,大佬们带带我。
展开
-
go: 使用简单的计数器计算请求的qps
背景一个稳定的后端服务,需要具备相当的容灾能力。假设因为有事故出现,或者是由于活动等原因,导致有突发大量流量请求服务,此时要保证系统不会被打垮,依然能在力所能及的范围内提供服务。要应付以上场景,也就意味着系统具备限流能力。一些常用的限流方法有: 计数器算法,令牌桶算法,漏桶算法等。然而在工作中,我们可能希望做一些更加复杂的操作。 因此如果能够实时计算到当前系统的QPS,根据QPS判断进行不同操作,就能实现在不同的流量中的分级处理。 Qps计算Qps即每秒查询率,表示每一秒钟的请求量。明原创 2022-01-15 11:17:30 · 2380 阅读 · 2 评论 -
字节算法题:判断等式和不等式是否成立
之前字节面试的时候遇到这样一道题目:题目描述:给定一些等式或者不等式,验证式子是否可以成立。其中式子只会有=或者!=例子如下:例子1: input = ["a=b", "b=c"], output = true 例子2: input = ["a=b", "b=c", "a!=c"], output = false问题中只会有等于或者不等于,相等的字母可以理解为有相同的值,或者是在一个集合中。则初步分析之后,可以考虑以下想法:首先处理等式,将相等的关系记录下来。然后再查看.原创 2021-08-08 10:50:16 · 1324 阅读 · 1 评论 -
字节算法题:基于用户登录日志计算任一时间在线人数
在面试的时候遇到这样一道题。给定一些用户登录的日志,计算任意时间的在线人数。其中用户登录日志包括如下信息:type LoginLog struct { userId int loginTime int logoutTime int}根据题目,一天24小时,我们有一堆的用户登录日志。简单的做法是我们遍历获取日志,然后对于用户在线的这段时间,对每一个时间点对在线人数加一。则程序如下:func calOnlineUserCount(logList []*Lo原创 2021-07-16 11:18:48 · 3416 阅读 · 2 评论 -
Redis 6.0 多线程网络通信部分
Redis 6.0中新加入了多线程版本的网络通信。从总体来看,在开启多线程的情况下,会创建IO线程进行读写。但是对于内容的修改,读取等依然是通过主线程完成的。下面是从大佬偷来的一副时序图。https://zhuanlan.zhihu.com/p/144805500通过时序图,可以按照顺序查看过程。1.初始化整个sever的初始化是通过 server.c/initServer函数完成的其中可以看到里面做了一下比较重要的事情:1. 创建了事件循环。事件循环是red原创 2021-07-06 12:43:34 · 446 阅读 · 1 评论 -
各种排序算法(Golang版本)
1.快速排序快速排序是一种非稳定排序。func findPivot(nums []int, left int, right int) int { pivot := nums[left] // pivot的选择这里一直取第0个元素,可换成随机数 nums[left], nums[right] = nums[right], nums[left] var back = left - 1 var front = left for front < right原创 2021-07-02 22:32:18 · 628 阅读 · 2 评论 -
Redis数据结构之简单动态字符串(SDS)
这里写自定义目录标题欢迎使用Markdown编辑器1.简单动态字符串1.简单动态字符串功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页原创 2021-03-07 11:06:00 · 143 阅读 · 0 评论 -
go语言实现set数据结构
1.Setset是一种十分常用的数据结构。一般代码种使用的set的主要性质如下:1.元素去重2.进行交集,合集等计算3.查看元素是否存在然而,go语言并没有内置的set数据结构想要实现set,我们可以通过map简单实现特定类型的set。2.代码实现下面通过代码讲解如何实现string类型的set:(手敲的,不知有没有问题)type StringSet struct { dataMap map[string]byte}// 创建setfunc NewSet(elements ..原创 2021-02-01 23:13:14 · 2259 阅读 · 0 评论 -
缓存更新策略(go)
文章目录前言一、配置的使用和更新二、具体实现1.监测缓存过期2.监测配置修改总结前言在开发系统时,配置管理是十分重要的一部分。由于配置不经常变动,并且大多数情况下实时性要求不是特别高,因此将配置存在缓存中是很常用的一种方法。存在缓存中能够提高查找效率,但是也带来了新的问题:配置何时更新?怎么更新?一、配置的使用和更新许多服务器使用配置时,会选择将配置存在内存中。并且为了避免被多次初始化,读取配置的对象采用单例模式生成。同时应该满足以下特点:1.配置缓存有过期时间,一定时间后缓存过期,再次拉取数原创 2021-01-11 23:31:54 · 806 阅读 · 0 评论 -
python检测MySQL的DDL语句正确性
1.Inception库 Inception是一个开源系统,每个人或者每个公司都可以自由使用, 可以用于审核SQL语句的合法性。 Inception使用说明:https://inception-document.readthedocs.io/zh_CN/latest//*--user={username};--password={password};--host={host};--check=1;--port={port};*/inception_magic_start;...原创 2020-09-20 11:49:44 · 2316 阅读 · 0 评论 -
gorm RowsAffected() 返回0的问题
在项目中,经常需要更新数据,并且要获取到更新的条数从而做不同的操作。在gorm中提供了RowsAffected()的方法获取更新的条数。但是我们执行一下的代码会发现这个方法总是输出0,一点都不好使。db := DBagent.DB.Table("user_tab")err := db.Where( "id = ?", 1).Updates(updateInfo).Error()println(db.RowsAffected()) // 总是打印0这是因为gorm中,如Find,Crea.原创 2020-09-12 09:40:49 · 11138 阅读 · 0 评论 -
go语言Min,Max,Sum函数
在编写go程序时我们经常需要使用多变量的Min,Max函数。但是会发现官方代码中只提供了float类型的Min,Max函数,这是因为浮点型的数据判断会涉及到比较多的逻辑,而整数型的数据判断逻辑十分简单,可以十分轻松的实现。因此这里就分享一下Min,Max和Sum的代码实现。逻辑非常简单:const ( MININT64 = -922337203685477580 MAXINT64 = 9223372036854775807)func Max(nums... int64) i原创 2020-08-23 08:57:31 · 9156 阅读 · 0 评论 -
简单的ID生成器设计
1. ID生成器 在工作中,我们经常需要用到ID生成器。比如当当前系统与别的系统有一些数据需要同步时,为了实现幂等性,往往会为每一次同步请求设定一个全局统一的ID。可见ID生成器在许多项目中都有至关重要的多用。 ID生成器有许多的实现方式。 1. 比如用著名的UUID,这种方法可以简单的获取到全局唯一的ID。但是因为获得的ID是字符串,在一些需要纯数据的场合,处理起来效率没有这么高。...原创 2020-08-15 12:07:45 · 1884 阅读 · 0 评论