无题
基于小波变换的数字水印技术数字水印通常可以分为鲁棒数字水印和易损数字水印两类,从狭义上讲,数字水印一般特指鲁棒数字水印,本章主要针对鲁棒数字水印进行案例讲解与分析。鲁棒数字水印主要用于在数字作品中标示著作权信息,利用这种水印技术在多媒体内容的数据中嵌入标示信息。在发生版权纠纷时,标示信息用于保护数据的版权所有者。用于版权保护的数字水印要求有很强的鲁棒性和安全性。
易损数字水印与鲁棒水印的要求相反,主要用于完整性保护,这种水印同样是在内容数据中嵌入不可见的信息。当内容发生改变时,这些水印信息会发生相应的改变,从而可以鉴定原始数据是否被篡改。易损水印必须对信号的改动很敏感,人们根据易损水印的状态就可以判断数据是否被篡改过。不同领域对数字水印有不同的要求,但一般而言,鲁棒数字水印应具备如下特点。
(1)不可感知性: 就是嵌入水印后的图像和未嵌入水印的图像,必须满足人们感知上的需求,在视觉上没有任何差别,不影响产品的质量和价值。
(2)鲁棒性: 嵌入水印后的图像在受到攻击时,水印依然存在于载体数据中,并可以被恢复和检测处理。
(3)安全性: 嵌入的水印难以被篡改或伪造,只有授权 ...
无题
事务隔离
索引
jwt
微服务
多线程
乐观/悲观
limit 1000000
aqs
g1 cms
redis
tcp拥塞控制
jmm
jvm
可达性分析
接雨水
协程
Spring SpringMVC SpringBoot
cas 和 volatile
3握4挥
拦截与过滤区别
Session
循环队列
无题
MySQL8.0.26-Linux版安装1. 准备一台Linux服务器云服务器或者虚拟机都可以;
Linux的版本为 CentOS7;
2. 下载Linux版MySQL安装包https://downloads.mysql.com/archives/community/
3. 上传MySQL安装包4. 创建目录,并解压mkdir mysqltar -xvf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar -C mysql
5. 安装mysql的安装包cd mysqlrpm -ivh mysql-community-common-8.0.26-1.el7.x86_64.rpm rpm -ivh mysql-community-client-plugins-8.0.26-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-8.0.26-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-compat-8.0.26-1.el7.x86_64.rpmyum install ope ...
分析
注解@ApiModel使用场景:在实体类上边使用,标记类时swagger的解析类
什么是SwaggerOpenAPI规范(OpenAPI Specification 简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程,目前版本是V3.0,并且已经发布并开源在github上。
Swagger是符合OpenAPI规范的接口开发工具,支持从设计和文档到测试和部署的整个API生命周期的开发
作用范围
API
使用位置
对象属性
@ApiModelProperty
用在出入参数对象的字段上
协议集描述
@Api
用于controller类上
协议描述
@ApiOperation
用在controller的方法上
Response集
@ApiResponses
用在controller的方法上
Response
@ApiResponse
用在 @ApiResponses里边
非对象参数集
@ApiImplicitParams
用在controller的方法上
非对象参数描述
@Ap ...
Redis09-消息队列
Redis消息队列基于List的消息队列消息队列(Message Queue),字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色:
消息队列:存储和管理消息,也被称为消息代理(Message Broker)
生产者:发送消息到消息队列
消费者:从消息队列获取消息并处理消息
Redis提供了三种不同的方式来实现消息队列:
list结构:基于List结构模拟消息队列
PubSub:基本的点对点消息模型
stream: 比较完善的消息队列模型
基于List结构模拟消息队列消息队列(Message Queue),字面意思就是存放消息的队列。而Redis的list数据结构是一个双向链表,很容易模拟出队列效果。队列是入口和出口不在一边,因此我们可以利用:LPUSH结合RPOP、或者RPUSH结合LPOP来实现。不过要注意的是,当队列中没有消息时RPOP或LPOP操作会返回null,并不像JVM的阻塞队列那样会阻塞并等待消息。因此这里应该使用BRPOP或者BLPOP来实现阻塞效果。
基于List的消息队列有哪些优缺点?
优点:
利用Redis存储,不受限于JVM内存上限
基于R ...
Redis08-分布式锁
分布式锁的核心是实现多进程之间互斥,而满足这一点的方式有很多,常见的有三种:
MySQL
Redis
Zookeeper
互斥
利用mysql本身的互斥锁机制
利用setnx这样的互斥命令
利用节点的唯一性和有序性实现互斥
高可用
好
好
好
高性能
一般
好
一般
安全性
断开连接,自动释放锁
利用锁超时时间,到期释放
临时节点,断开连接自动释放
注意redis的超时释放
解决方法:释放锁的时候判断一下锁标识
==使用Redis事务(Redis只保证了原子性,不能保证一致性,要不然再加上乐观锁进行判断,复杂==
==使用简单的Lua脚本,在一个脚本中编写多条Redis命令,确保多条命令执行时的原子性。==
样例:
-- 比较标识的一致性if(redis.call('get', KEYS[1]) == ARGV[1]) then -- 释放锁 redis.call('del', key)endreturn 0
基于Redis的分布式锁实现思路:
利用set nx ex获取锁,并设 ...
Redis07-秒杀
全局唯一ID一般的订单会出什么问题呢?
第一点:数据量大
第二点:要具备唯一性(数据量过大时分表,可能出现重复id的问题)
因此要使用==全局唯一ID==在分布式系统下用来生成全局唯一ID的工具
需要满足:
唯一性
高可用
高性能
递增性(有利于索引和插入)Redis的incr
安全性(自增不能规律过于明显)
为了增加ID的安全性,我们可以不直接使用Redis自增的数值,而是拼接一些其它信息:
全局唯一ID生成策略:.
UUID
Redis自增snowflake算法
数据库自增
Redis自增ID策略:
每天一个key,方便统计订单量.
ID构造是时间戳+计数器
下单时需要判断两点:
秒杀是否开始或结束,如果尚未开始或已经结束则无法下单
库存是否充足,不足则无法下单
==高并发情况下会出现超卖==
乐观锁的实现方式:
版本号法
CAS
1.悲观锁:添加同步锁,让线程串行执行
优点:简单粗暴
缺点:性能一般
2.乐观锁:不加锁,在更新时判断是否有其它线程在修改
优点∶性能好
缺点∶存在成功率低的问题
修改秒杀业务,要求同一个优惠券,一个用户只能下一 ...
Redis06-缓存
缓存缓存就是数据交换的缓冲区(称作Cache [ kae]] ),是存贮数据的临时地方,一般读写性能较高。
优点
降低后端的负载
提高读写效率,降低响应的时间
成本
数据一致性成本
代码维护成本
运维成本
缓存更新策略
内存淘汰
超时剔除
主动更新
说明
不用自己维护,利用Redis的内存淘汰机制,当内存不足时自动淘汰部分数据。下次查询时更新缓存。
给缓存数据添加TTL时间,到期后自动删除缓存。下次查询时更新缓存。
编写业务逻辑,在修改数据库的同时,更新缓存。
一致性
差
一般
好
维护成本
无
低
高
业务场景:低一致性需求:使用内存淘汰机制。例如店铺类型的查询缓存高一致性需求:主动更新,并以超时剔除作为兜底方案。例如店铺详情查询的缓存
主动更新
由缓存的调用者,在更新数据库的同时更新缓存
缓存与数据库整合为一个服务,由服务来维护一致性。调用者调用该服务,无需关心缓存一致性问题。
调用者只操作缓存,由其它线程异步的将缓存数据持久化到数据库,保证最终一致。
缓存更新策略的最佳实践方案:1.低一致性需求:使用Redis自带的内存淘汰机制2 ...
Redis05-短信登陆
短信登陆导入的表格
tb_user:用户表
tb_userLinfo:用户详情表
tb_shop:商户信息表
tb_shop_type:商户类型表
tb_blog:用户日记表(达人探店日记)
tb_follow:用户关注表
tb_voucher:优惠券表
tb_voucher_order:优惠券的订单表
为什么使用Redis
1.怎么基于session
2.验证码如何比对
3.是否要将所有的数据存入session?
==集群的session共享问题==
session共享问题:多台Tomcat并不共享session存储空间,当请求切换到不同tomcat服务时导致数据丢失的问题。
session的替代方案应该满足:
数据共享
内存存储
kev、value结构(和session一样)
使用Redis!
首先每个Tomcat可以去访问Redis,Redis是内存存储的,且Redis就是key,value结构
问题:
保存验证码
存储在Redis中类型:String,那么key是什么?手机号(确保每个手机号有自己的验证码,不仅可以
保存用户信息
存储在Redis中类型:Hash ...
后端
[toc]
1.请你说说Java的特点和优点,为什么要选择Java
Java语言的特点是:一次编译,到处运行,即平台无关性;是纯粹的面向对象的语言。
JAVA语言的优点有:内置的类库简化了开发人员的设计工作;具有较好的安全性和健壮性;开发人员不需要对内存的使用进行管理。
选择JAVA的原因是:使用范围很广,安卓操作系统的应用软件目前大部分还是使用JAVA语言编写。
2.请你说说Java基本数据类型和引用类型
Java的数据类型分为基本数据类型和引用数据类型两大类。 基本数据类型共有八大类,这八大数据类型又可分为四小类,分别是整数类型(byte/short/int/long)、浮点类型(float、double)、字符类型(char)和布尔类型(boolean)。其中,int是最常用的整数类型,double是最为常用的浮点类型,除了布尔类型之外的其他7个类型,都可以看做是数字类型,它们相互之间可以进行类型转换。 引用类型包括数组、类、接口类型,还有一种特殊的null类型,所谓引用数据类型就是对一个对象的引用,对象包括实例和数组两种。
8种基本数据类型的变量的值存放在栈内存,有 ...