Gitee

微信抢红包过期失效实战案例

妖精的绣舞 提交于 2020-10-29 07:45:15
前言 微信红包业务,发红包之后如果24小时之内没有被领取完就自动过期失效。 架构设计 业务流程 老板发红包,此时缓存初始化红包个数,红包金额(单位分),并异步入库。 红包数据入延迟队列,唯一标识+失效时间 红包数据出延迟队列,根据唯一标识清空红包缓存数据、异步更新数据库、异步退回红包金额 代码案例 这里我们使用 Java 内置的 DelayQueue 来实现, DelayQueue 是一个***的 BlockingQueue ,用于放置实现了 Delayed 接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的,即队头对象的延迟到期时间最长。 老板发了10个红包一共200人民币,假装只有9个人抢红包。 发红包,缓存数据进入延迟队列: /** * 有人没抢 红包发多了 * 红包进入延迟队列 * 实现过期失效 * @param redPacketId * @return */ @ApiOperation(value="抢红包三",nickname="爪哇笔记") @PostMapping("/startThree") public Result startThree(long redPacketId){ int skillNum = 9; final CountDownLatch latch = new CountDownLatch(skillNum);//N个抢红包

将本地目录推送到Git远程仓库

孤人 提交于 2020-10-29 01:34:00
1. 先在github或者码云上创建一个公开或私有项目:例如demo 2. 在本地也就是要推送的项目目录中使用 git init 进行初始化,把其变成git可以管理的仓库 git init 3. 若要忽略本地的文件或文件夹不被提交到git远程仓库 ,则需要在项目根目录下创建 .gitignore 文件 touch .gitignore 4. 打开文件,编辑内容,写如要忽略的文件,例如: .idea # python中的一个隐藏文件,自动生成的,不需要提交 *.py[cod] #一些没有用的附带文件,直接忽略即可 按照上诉操作后,保存,那么这些文件就不会被提交了。 5. 将文件夹下所有文件从工作区保存到暂存区 git add .命令 git add . 6. 把文件从暂存区提交到仓库区(本地的仓库) git-commit -m “此处写注释内容” git commit -m '注释内容' 7. 关联远程仓库 (第一次使用需要添加远程仓库的地址) git remote add origin git @git仓库的地址 #注意,此处的地址将https://省略 注意,此处的地址将https://省略 或者 git remote add origin 你git仓库的地址 7. 将远程库与本地同步(如果远程仓库里面有文件等内容需要执行以下这一步) git pull --rebase

STM32在线升级OTA,看这一篇就够啦~

≡放荡痞女 提交于 2020-10-28 20:28:34
❝ 本文是博主在学习OTA时,up主阿正推荐学习的文章,原作者leafguo,写的非常简洁明了,在获得授权后整理发布,可以在文末点击阅读原文跳转到原文章。 ❞ 简介 本文主要讲解在线升级(OTA)的基础知识, 主要是针对 IAP OTA 从 原理分析 , 分区划分 , 到 代码编写 和 实验验证 等过程阐述这一过程. 帮助大家加深对OTA的认识. 1. OTA基础知识 什么是BootLoader? BootLoader 可以理解成是引导程序, 它的作用是启动正式的 App应用程序 . 换言之, BootLoader 是一个程序, App也是一个程序, BootLoader程序 是用于启动 App程序 的. STM32中的程序在哪儿? 正常情况下, 我们写的程序都是放在STM32片内Flash中(暂不考虑外扩Flash). 我们写的代码最终会变成二进制文件, 放进Flash中 感兴趣的话可以在 Keil >>> Debug >>> Memory 中查看, 右边Memory窗口存储的就是代码 接下来就可以进入正题了. 进行分区 既然我们写的程序都会变成二进制文件存放到Flash中, 那么我们就可以进一步对我们程序进行分区. 我使用的是 F103RB-NUCLEO开发板 ,他的Flash一共128页, 每页1K.见下图: 以它为例, 我将它分为三个区. BootLoader区 、

这些肺腑之言,送给想搞副业的程序员们

霸气de小男生 提交于 2020-10-28 20:11:14
本公众号的大多数读者应该都是从事程序开发或者相关,或许在北京上海深圳,或许在南京武汉广州,或许在郑州合肥,或许在其他一些二线三线城市。 大多数程序员其实是单纯而又朴实的,晚上可能在骂老板抠门、产品经理SB,但明天早上依然会早起去挤地铁,认真写每一行代码,因为高堂明镜悲白发,朝如青丝暮成雪,一天天老去的父母,需要我们赡养; "笑看妻子愁何在,漫卷诗书喜欲狂”, 一天天长大 的孩子,需要我们去养育。 哪个程序员曾经不是不为五斗米而折腰的男子,如今却不得过着李白洗尿布一样的生活? 所以,尽管有时候我们有千万种不愿意,但还是不得说这言不由衷的话,做着自己不想做的事情—— 因为我们缺钱 。 今天,我们就和大家讨论一下程序员如何提高收入,当然,由于个人经历经验有限,难免是一家之言,文中内容仅供参考,欢迎温和地提出意见和建议。 程序员们的主要收入来源 这个标题其实不言自明的,程序员们,当然对于大多数上班族,工作是收入的主要来源。看到群里很多学生讨论 offer 薪资的时候,动辄就月薪 30 k 甚至如 45 k以及更高的,虽然不排除确实存在这一类的 SP 或者 SSP offer。但是大多数人会是这类高收入者或者幸运儿吗?月薪 30 k 意味着什么?意味着在一个小城市两口之家半年多的生活费,意味着在中国广大农村一家两三年的生活成本。老板都不是傻子,你能干多少活才会给你多少钱,那么 30 k

表驱动+状态机法AD传感器驱动检测框架

旧城冷巷雨未停 提交于 2020-10-28 14:39:09
接上前面两篇文章: 基于事件型表驱动法菜单框架之小熊派简易气体探测器实战项目开发(上) 基于事件型表驱动法菜单框架之小熊派简易气体探测器实战项目开发(中) 今天这篇文章不作为气体探测器实战项目的最后一节,因为很多功能还在编写中,前两天在世伟兄的开源群里提到了传感器检测框架,群友反应说:杨工有空你要多搞点这种框架出来分享分享,感觉很有用啊! 今天分享的这个传感器驱动检测框架也是我在副业里给客户做的那些项目里用得最多的骚技能(但主业上的产品我几乎就没用过,还是我说的那句话: 没有明确需求的产品,别提什么复用性和高逼格 ),所以今天就拿出来说一说。 看下之前这个项目里写的这个气体传感器MQ-2的检测流程: void Test_CallBack(void) { static uint8_t Count_AMI = 0; static uint8_t Refresh_flag = 0 ; int smoke_value = 0 ; static uint8_t display_result_flag = 0 ; if (Flow_Cursor.flow_cursor == TEST_PAGE && detect_logic.Start_Detect == 1) { switch(detect_logic.Detect_Step) { case BASE_LINE: Count_AMI++ ;

基于事件型表驱动法菜单框架之小熊派简易气体探测器实战项目开发(中)

匆匆过客 提交于 2020-10-28 13:58:28
上次我们分享了事件驱动型的菜单框架,也实现了一个基本的小项目,如下: 基于事件型表驱动法菜单框架之小熊派简易气体探测器实战项目开发(上) 但是怎么看怎么都觉得界面不爽,单纯显示文字的方式实在是太单调了,如果想要显示颜色丰富的图片,MCU资源受限又很难直接在程序中直接定义图片大数组。 于是,我选择在SD卡中放图片,通过Fatfs去读取SD卡中的图片来进行显示,图片都是我自己在阿里图库上找的开源素材,然后用PS自己P的: 废话不多说,来看看实际效果吧!演示视频如下: 这样看起来效果就舒服一点啦。 1、新增功能项 本节分享的内容相较于上篇文章修改/增加了如下功能: 底层配置 修改LCD寄存器,提升LCD刷屏速度 增加Fatfs、SD卡读写功能 应用逻辑 增加模拟长按开机识别 增加开机LOGO以及其它UI的显示 增加菜单(阈值设置、设置、调试模式、仪器信息) 1.1、关于底层配置 1.1.1、提升屏刷新速度 由于要刷图,所以只能想办法尽量提升屏的刷新速度,于是在LCD手册里有这么一个寄存器,可以提升屏的刷新速度: 在LCD驱动初始化代码里,这个寄存器默认配置的是60Hz,也就是0x0F这个值 /* Frame Rate Control in Normal Mode */ LCD_Write_Cmd(0xC6); // LCD_Write_Data(0x0F); //60HZ LCD

个人简介

纵饮孤独 提交于 2020-10-28 12:10:36
源码链接(码云):https://gitee.com/dongshuaishuai/personal_profile.git (可能别人进不去) 百度云:https://pan.baidu.com/s/1f8SX44gYCqi6JNuGQsfkUw 提取码:7jd9 页面展示: 代码展示: //插入图片 <div id="section"> <img src="悟空.jpg" align="middle"> </div> //插入背景图 <body background="true.jpg"> <style ="background-repeat: no-repeat; background-size: 100% 100%; background-attachment: fixed;"> </style> </body> //添加地图 <iframe src="map.html" width="700" height="300" frameborder="0" scrolling="0"> </iframe> //添加背景音乐 <embed src="have%20a%20nice%20day.mp3" hidden="true" autostart="true" loop="true"/> //css代码 #nav{ line-height:normal; float:left;

编程体系结构(05):Java多线程并发

不问归期 提交于 2020-10-28 10:41:14
本文源码: GitHub·点这里 || GitEE·点这里 一、多线程导图 二、多线程基础 1、基础概念 线程是操作系统能够进行运算调度的最小单位,包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 2、创建方式 继承Thread类、实现Runnable接口、基于Callable和Future接口、Timer是后台线程、线程池。 3、线程状态 状态描述:初始状态、运行状态、阻塞状态、等待状态、超时等待状态、终止状态。 4、执行机制 JVM中一个应用是可以有多个线程并行执行,线程被一对一映射为服务所在操作系统线程,调度在可用的CPU上执行,启动时会创建一个操作系统线程;当该线程终止时,这个操作系统线程也会被回收。 5、内存模型 在虚拟机启动运行时,会创建多个线程,数据区中有的模块是线程共享的,有的是线程私有的: 线程共享:元数据区、堆Heap; 线程私有:虚拟机栈、本地方法栈、程序计数器; 单个CPU在特定时刻只能执行一个线程,所以多线程通过几块空间的使用,然后不断的争抢CPU的执行时间段。 三、常见概念 1、线程优先级 线程调度器倾向执行线程优先级高的线程,线程优先级高说明获取CPU资源的概率高,或者获取的执行时间分片多,被执行的概率高但不代表优先级低的一定最后执行。 2、守护线程

git配置:本地仓库提交到远程仓库

送分小仙女□ 提交于 2020-10-28 04:41:52
前提:1.已安装git  一:创建公钥,一台机子匹配一个公钥 桌面右键选择 Git Bash Here 打开命令行输入: ssh-keygen -t rsa -C "xxx@xxx.com" 连点三次回车得到一个 id_rsa.pub 文件,记事本打开全部复制到码云的SSH公钥保存. 测试公钥: ssh -T git@gitee.com 一:全局设置绑定git git config --global user.name "xxx" git config --global user.email "xxx@outlook.com" 创建/初始化存储库: git init 查看工作目录和暂缓区状态: git status 提交到暂缓区: git add . //注意这里加个点代表全部文件 提交到存储库: git commit -m "add files" 关联已有仓库: git remote add origin https://gitee.com/XXXXX.git git push -u origin master 至此,本地仓库项目上传到GIT仓库完成。 来源: oschina 链接: https://my.oschina.net/u/4342612/blog/3332064

Spring WebFlux + React搭建后台管理系统(5): antd pro v5 ProTable使用

梦想与她 提交于 2020-10-27 19:52:51
本篇配合antdpro的 ProTable实现简单的CRUD操作: 官方网站 更改了ProTable获取数据 改写UpdateForm内容,实现新增用户 更改用户信息 删除用户信息 修改删除需要admin权限处理 效果图 1. 设置自己的tableItem 跟据自己的数据编写Table使用的tableItem类: export interface UserDetails { key : number ; username : string ; avatar : string ; createBy : string ; createTime : Date ; email : string ; frozen : number ; id : number ; lastUpdateBy : string ; lastUpdateTime : Date ; mobile : string ; password : string ; roles : Array < string > ; } 2. 编写columns hideInForm, type="form" 时不显示,使用新增的使用用到 renderText:通过函数设置样式 valueEnum:用来设置枚举分类 option时,render的第二个元素为row内容 const columns : ProColumns <