秒杀项目
秒杀项目
项目视频
项目地址:houWenK/SecKill: 用于学习的秒杀项目 (github.com)
项目笔记:秒杀项目 | houWenk’s Blog (houwenke.top)
软件架构
技术
版本
SpringBoot
2.6.13
MyBatis Plus
3.5.2
MySql
8
Redis
7.2
RebbitMQ
3.13.3-management
数据库表
基础功能登录页LoginController
商品列表页GoodsController
商品详情页SeckillOrderController
订单详情页OrderController
秒杀功能大致经过三个阶段的优化
在该项目中核心就是秒杀的实现:不能超卖、不能重复抢
不能超卖在doSeckill中通过update的排他性实现(乐观锁)。而在doSeckill1中通过redis预减库存(redis的原子性实现)
不能重复抢通过唯一索引实现,默认建表时没有添加,压测可以把用户加少点商品多一点就可以复现重复购买
优化不过就是把数据库的重复访问,能 ...
ADB常用命令
ADB常用命令基本命令版本信息1adb version
查看已经连接的设备/模拟器列表1adb devices
应用管理查看应用列表查看所有应用1adb shell pm list packages
查看系统应用1adb shell pm list packages -s
查看第三方应用1adb shell pm list packages -3
获取已启动应用包名1adb shell dumpsys activity top | findstr ACTIVITY
安装应用1adb install [-l] [-r] [-t] [-s] [-d] [-g] <apk-file>
参数
含义
-l
将应用安装到保护目录 /mnt/asec
-r
允许覆盖安装
-t
允许安装 AndroidManifest.xml 里 application 指定 android:testOnly=“true” 的应用
-s
将应用安装到 sdcard
-d
允许降级覆盖安装
-g
授予所有运行时权限
卸 ...
python装饰器
python装饰器简介python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。
简单的装饰器123456789101112131415161718import time def count_time(func): def wrapper(): t1 = time.time() func() print("执行时间为:", time.time() - t1) return wrapper @count_time # 语法糖def baiyu(): print("我是攻城狮白玉") time.sleep(2) if __name__ == '__main__': # baiyu = count_time(baiyu) # 因为装饰器 count_time(baiyu) 返回的是函数对象 wrapper,这条语句相当于 baiyu = ...
Deepfm模型解析
Deepfm模型解析简介对于一个基于CTR预估的推荐系统,最重要的是学习到用户点击行为背后隐含的特征组合。在不同的推荐场景中,低阶组合特征或者高阶组合特征可能都会对最终的CTR产生影响。但是现存的方法总是忽视了高阶或低阶组合特征的联系,或者要求专门的特征工程,因此建立了DeepFM模型,将FM与DNN结合起来。
模型演变和各模型间的对比CTR的任务要求CTR的数据特点1、输入中包含类别型和连续型数据。类别型数据需要one-hot,连续型数据可以先离散化再one-hot,也可以直接保留原值
2、维度非常高且数据非常稀疏
CTR的预估重点CTR预估重点在于学习组合特征。其中,组合特征包括二阶、三阶甚至更高阶的,阶数越高越复杂,越不容易学习。Google的论文研究得出结论:高阶和低阶的组合特征都非常重要,同时学习到这两种组合特征的性能要比只考虑其中一种的性能要好。
那么关键问题转化成:如何高效的提取这些组合特征。一种办法就是引入领域知识人工进行特征工程。这样做的弊端是高阶组合特征非常难提取,会耗费极大的人力。而且,有些组合特征是隐藏在数据中的,即使是专家也不一定能提取出来,比如著名的“尿布与 ...
YOLOv5的Android部署,基于NCNN
NCNN是什么ncnn 是腾讯公司开源的一个专为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初,就深刻考虑手机端的部署和使用,无需第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。
模型转化当我们训练了自己的检测模型后,就需要一种中介,通过它,可以实现在不同框架之间进行转换。 Open Neural Network Exchange 简称 ONNX,意思是开放神经网络交换格式,它就是我们需要的中介。
安装依赖库
1pip install onnx coremltools onnx-simplifier
执行命令
1python models/export.py --weights runs/exp2/weights/best.pt
同时在 best.pt 的同级目录,还生成了 best.onnx、best.mlmodel 和 best.torchscript.pt
接下来使用工具 onnx-simplifier 来简化 onnx ...
yolov7笔记(二)
detect.py代码解析yolov7官方源码下载地址:https://github.com/WongKinYiu/yolov7
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 ...
yolov7笔记(一)
YOLOV7是什么YOLO算法作为one-stage目标检测算法最典型的代表,其基于深度神经网络进行对象的识别和定位,运行速度很快,可以用于实时系统。YOLOV7是目前YOLO系列最先进的算法,在准确率和速度上超越了以往的YOLO系列。了解YOLO是对目标检测算法研究的一个必须步骤。
网络框架架构图总览
CBS模块解读
对于CBS模块,我们可以看从图中可以看出它是由一个Conv层,也就是卷积层,一个BN层,也就是Batch normalization层,还有一个Silu层,这是一个激活函数。
silu激活函数是swish激活函数的变体,两者的公式如下所示
$$silu(x)=x⋅sigmoid(x)$$
$$swish(x)=x⋅sigmoid(βx)$$
从架构图中我们可以看出,CBS模块这里有三种颜色,三种颜色代表它们的卷积核(k)和步长(s)不同。
首先最浅的颜色,也就是第一个CBS模块的颜色,它是一个1x1的卷积,stride(步长为1)。
其次稍浅的颜色,也就是第二个CBS模块的颜色,它是一个3x3的卷积,stride(步长为1)。
最 ...
CNN笔记
卷积神经网络的组成
定义
卷积神经网络由一个或多个卷积层、池化层以及全连接层等组成。与其他深度学习结构相比,卷积神经网络在图像等方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他浅层或深度神经网络,卷积神经网络需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。
结构图
CNN网络层级结构
卷积层
激活层
池化层
全连接层
卷积层 卷积层通过卷积核的过滤提取出图片中局部的特征
卷积操作
实际上,CNN在训练过程中会自行学习这些过滤器的值。 我们拥有的过滤器数量越多,提取的图像特征就越多,并且我们的网络在识别看不见的图像中的图案方面会变得越好。但是在训练过程之前,我们仍然需要指定一些超参数,例如卷积核的数量,卷积核大小,网络的体系结构等。特征图的大小和三个参数有关系:
深度:特征图的深度等于卷积核的个数。
步长:步长是将卷积核滑过输入矩阵的像素数。 当步长为1时,我们将卷积核一次移动一个像素。步长较大将产生较小的特征图。
零填充:用于控制特征图的大小;有利于卷积核学习到输入图像周边的信息。
激活层 所谓激活,实 ...
加入看板娘与自定义看板娘
下载依赖https://github.com/stevenjoezhang/live2d-widget
首先将依赖文件存放在本地,下载下面的资源到本地的..\themes\butterfly\source,并且命名为live2d-widget-master
而后打开链接https://moonshuo.cn/live2d-widget-master/autoload.js
下载作者的js文件,替换live2d-widget-master文件夹下的文件
下载依赖的模组点击下载下方的链接live2d: 看板娘动态动画,可以为网页增加相应动作 (gitee.com),并且命名为live2d_api,也放在..\themes\butterfly\source下面
打开主题配置文件,复制以下的代码到其中
12live2d: enable: true
在butterfly主题inject中引入js文件
1- <script defer src="/live2d-widget-master/autoload.js"></script>
...