分布式系统中全局ID生成策略思考

-- Pageviews

snowflake

在我们的实际开发过程中,几乎所有的业务场景所产生的数据都需要一个唯一ID作为核心标识,用来流程化管理。比如常见的:

  • 订单:order_no, 查订单详情,物流状态等;
  • 支付:trade_no, 查询支付流水,支付状态等;
  • 短信:template_no, 查询短信模板详情;
  • 任务:task_no, 查询任务详情,任务状态等;
  • 版本:version, 数据的版本管理;

那么如何生成的唯一标识呢?网上大部分博客都会介绍UUID,SnowFlake算法、以及类雪花算法MongoDB ObjectId的生成算法。传送门

每日算法-时间轮

-- Pageviews

timewheel

最近做了一个订单15分钟过期变更状态机的功能,中间想过以定时任务来实现,考虑到定时任务存在一定的时间误差,于是在系统中引入了时间轮算法。

时间轮是一种环形的数据结构,类似于时钟,秒针、分针、时针分别为一层,每层分成多个格子,每个格子中存放任务集合,一个单独的线程推进时间一格一格的移动,并执行格子中的任务。它常用于延时任务,在Netty、akka、Quartz、Zookeeper等高性能组件中都存在时间轮定时器的踪影。

点击查看java版时间轮实现

每日算法-约瑟夫环问题

-- Pageviews

josephring

最近开始在做算法题,不全是为了找工作,为了面试,旨在不断思考,锻炼思维,同时查阅别人的解题方法,开拓自己的思路。在遇到实际问题时,可以有料参考,有迹可循。

约瑟夫问题

这个问题是以弗拉维奥·约瑟夫命名的,他是1世纪的一名犹太历史学家。他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中。
他们讨论是自杀还是被俘,最终决定自杀,并以抽签的方式决定谁杀掉谁。约瑟夫斯和另外一个人是最后两个留下的人。约瑟夫斯说服了那个人,他们将向罗马军队投降,不再自杀。
约瑟夫斯把他的存活归因于运气或天意,他不知道是哪一个。 —— 【约瑟夫问题】维基百科

解题秘诀:只关心最终活着那个人的序号变化

Processon获取文件数

-- Pageviews

processon
ProcessOn是一个在线作图工具的聚合平台,
它可以在线画流程图、思维导图、UI原型图、UML、网络拓扑图、组织结构图等等,
您无需担心下载和更新的问题,不管Mac还是Windows,一个浏览器就可以随时随地的发挥创意,规划工作。

不得不说ProcessOn是一个很好用的作图工具,但是免费的文件数仅9个,完全不够用,官方有两种方式对此进行升级

每日算法-布隆过滤器

-- Pageviews

BloomFilter

最近身边的朋友讨论「布隆过滤器」的频次有点多,刚好自己也不太了解,于是乎研究一下。学习一个知识,首先了解该知识能带来的价值是什么,那么撇开算法本身,先来了解下这个东西的实际应用场景,大概的场景有以下几种:

  • 解决缓存穿透问题
  • 网络爬虫对URL去重
  • 垃圾邮件过滤
  • 秒杀系统

什么是布隆过滤器

本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构,它的特点是高效地插入和查询,而根据查询结果可以判断某个对象 一定不存在或者可能存在

相比于传统的List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是得到结果是概率性的,而不是确切的,同时布隆过滤器还有一个缺陷就是 数据只能插入不能删除

热门平台短视频地址解析水印去除

-- Pageviews

douyin-vs-kuaishou

解析模块

使用方法:
  1. 1、打开短视频APP,点开某个视频,点击右下角分享按钮,在分享弹框中点击复制链接或通过分享到微信QQ等获取分享链接
  2. 2、将刚才复制的链接粘贴到下面的输入框,然后按Enter键,例如:https://v.douyin.com/GBGy9c/

SpringBoot实战(六)Mybatis

-- Pageviews

spring-springboot-thymeleaf

ORM框架的本质就是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句SQL的hibernate,一个是可以灵活调试动态sql的mybatis,两者各有特点,在企业级系统开发中可以根据需求灵活使用。发现一个有趣的现象:传统企业大都喜欢使用hibernate,互联网行业通常使用mybatis。