自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

山楂小王的博客

21 The best PF of all time 22 多一点计划 47 少一点操劳》》》https://github.com/wj89757

  • 博客(48)
  • 资源 (2)
  • 收藏
  • 关注

原创 xxl-job的搭建以及部署

0. 什么是xxl-jobXXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。1. 文档地址1. xxl-job开发文档2.xxl-job社区交流1. 配置xxl-job-admin1. 修改application.properties主要修改下面几个配置server.port=8017server.servlet.context-path=/newjobspring.datasource

2020-07-26 20:59:18 5620

原创 Java锁比较全的入门整理

一、锁的7大分类需要首先指出的是,这些多种多样的分类,是评价一个事物的多种标准,比如评价一个城市,标准有人口多少、经济发达与否、城市面积大小等。而一个城市可能同时占据多个标准,以北京而言,人口多,经济发达,同时城市面积还很大。同理,对于 Java 中的锁而言,一把锁也有可能同时占有多个标准,符合多种分类,比如 ReentrantLock 既是可中断锁,又是可重入锁。根据分类标准我们把锁分为以下 7 大类别,分别是:偏向锁/轻量级锁/重量级锁;可重入锁/非可重入锁;共享锁/独占锁;公平锁/非公

2020-07-26 20:57:48 515

原创 Redis从入门到深入-布隆过滤器(20)

1. 布隆过滤器前言不知道从什么时候开始,本来默默无闻的布隆过滤器一下子名声大燥,在面试中面试官问到怎么避免缓存穿透,你的第一反应可能就是布隆过滤器,缓存穿透=布隆过滤器成了标配,但具体什么是布隆过滤器,怎么使用布隆过滤器不是很清楚,那今天我们就来把他说清楚,讲明白。。1.1 缓存穿透大家看下这幅图,用户可能进行了一次条件错误的查询,这时候redis是不存在的,按照常规流程就是去数据库找了,可是这是一次错误的条件查询,数据库当然也不会存在,也不会往redis里面写值,返回给用户一个空,这样的操作一次

2020-07-29 23:36:47 262

原创 Redis从入门到深入-服务端配置(19)

1. 服务端设定设置服务器以守护线程的方式运行daemonize yes|no绑定主机地址bind 127.0.0.1设置服务端口号port 6379设置数据库数量databases 162. 日志配置设置服务器以指定日志记录级别loglevel debug|verbose|notice|warning日志记录文件名logfile 端口号.log注意:日志级别开发期设置为verbose即可,生产环境中配置为notice,降低写日志io的频度3

2020-07-29 23:35:41 128

原创 Redis从入门到深入-删除策略(18)

1. 删除策略1.1 过期数据redis中的数据特征redis是一种内存级数据库, 所有数据均存放在内存中, 内存中的数据可以通过TTL指令获取其状态XX:具有时效性的数据-1:永久有效的数据-2:已经过期的数据或被删除的数据或未定义的数据过期的数据真的删除了吗?1.2 数据删除策略1.定时删除2.惰性删除3.定期删除1.3 时效性数据的存储结构1.4 数据删除策略的目标在内存占用与CPU占用之间寻找一种平衡,顾此失彼都会造成整体redis性能的下降, 甚

2020-07-29 23:34:59 165

原创 Redis从入门到深入-锁(17)

1. 锁1.1 基于特定条件的事务执行业务场景天猫双11热卖过程中,对已经售罄的货物追加补货,4个业务员都有权限进行补货。补货的操作可能是一系列的操作,牵扯到多个连续操作,如何保障不会重复操作?业务分析多个客户端有可能同时操作同一组数据,并且该数据一旦被操作修改后,将不适用于继续操作在操作之前锁定要操作的数据,一旦发生变化,终止当前操作解决方案对key添加监视锁, 在执行exec前如果key发生了变化, 终止事务执行watch key1 [key2.....]

2020-07-29 23:34:15 133

原创 Redis从入门到深入-Redis-事务(16)

1. 事务简介1.1 什么是事务redis执行指令过程中, 多条连续执行的指令被干扰, 打断, 插队redis事务就是一个命令执行的队列, 将一系列预定义命令包装成一个整体(一个队列) 。当执行时,一次性按照添加顺序依次执行,中间不会被打断或者干扰。一个队列中,一次性、顺序性、排他性的执行一系列命令1.2 事务的基本操作-开启开启事务multi作用设定事务的开启位置,此指令执行后,后续的所有指令均加入到事务中1.3 事务的基本操作-关闭执行事务exec作用设

2020-07-29 23:33:40 135

原创 Redis从入门到深入-Redis持久化-RDB&AOF(15)

1. RDB与AOF区别1.1 RDB与AOF的选择之惑对数据非常敏感, 建议使用默认的AOF持久化方案AOF持久化策略使用everysecond,每秒钟fsync一次。该策略redis仍可以保持很好的处理性能,当出现问题时,最多丢失0-1秒内的数据。注意:由于AOF文件存储体积较大, 且恢复速度较慢数据呈现阶段有效性, 建议使用RDB持久化方案数据可以良好的做到阶段内无丢失(该阶段是开发者或运维人员手工维护的,且恢复速度较快,阶段点数据恢复通常采用RDB方案注意:利用RDB实

2020-07-29 23:31:15 145

原创 Redis从入门到深入-Redis持久化-AOF(14)

1. RDB的弊端弊端存储数据量较大,效率较低基于快照思想,每次读写都是全部数据,当数据量巨大时,效率非常低大数据量下的IO性能较低基于fork创建子进程, 内存产生额外消耗宕机带来的数据丢失风险解决思路不写全数据,仅记录部分数据改记录数据为记录操作过程对所有操作均进行记录,排除丢失数据的风险2. AOF概念AOF(append only file) 持久化:以独立日志的方式记录每次写命令, 重启时再重新执行AOF文件中命令,达到恢复数据的目的。与RDB相比可

2020-07-29 23:30:59 135

原创 Redis从入门到深入-Redis持久化-RDB(13)

1. 持久化简介1.1 什么是持久化利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化。1.2 为什么要进行持久化防止数据的意外丢失,确保数据安全性1.3 持久化过程保存什么将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程2. RDB-启动save2.1 谁,什么时间,干什么事情谁:redis操作者(用户)什么时间:即时(随时进行)

2020-07-29 23:29:19 155

原创 Redis从入门到深入-Java操作Redis(12)

1. Jedis1.1 Jedis简介Java语言连接redis服务JedisSpringData RedisLettuceC、C++、C#、Erlang…1.2 HelloWord(Jedis版)连接redisJedis jedis = new Jedis(“localhost”, 6379);操作redisjedis.set("name","test");jedis.get("name");关闭redis连接jedis.close();1.3

2020-07-29 23:29:00 165

原创 Redis从入门到深入-Key通用操作(11)

1. key通用操作1.1 key特征key是一个字符串, 通过key获取red is中保存的数据1.2 key应该设计哪些操作?对于key自身状态的相关操作, 例如:删除, 判定存在, 获取类型等对于key有效性控制相关操作, 例如:有效期设定, 判定是否有效, 有效状态的切换等对于key快速查询操作, 例如:按指定策略查询key1.3 key基本操作删除指定keydel key获取key是否存在exists key获取key的类型type key

2020-07-29 23:26:39 153

原创 Redis从入门到深入-Redis数据类型实践案例(10)

1. 数据类型实践案例1.1 业务场景人工智能领域的语义识别与自动对话将是未来服务业机器人应答呼叫体系中的重要技术,百度自研用户评价语义识别服务,免费开放给企业试用,同时训练百度自己的模型。现对试用用户的使用行为进行限速,限制每个用户每分钟最多发起10次调用1.2 解决方案设计计数器, 记录调用次数, 用于控制业务执行次数。以用户id作为key,使用次数作为value在调用前获取次数,判断是否超过限定次数不超过次数的情况下,每次调用计数+1业务调用失败,计数-1为计数器设置生命周期为指定

2020-07-28 09:06:04 167

原创 Redis从入门到深入-sorted_set实现实时订阅推送(09)

1. 问题分析有一个功能叫做领劵的订阅推送。什么是领劵的订阅推送?就是用户订阅了该劵的推送,在可领取前的一分钟就要把提醒信息推送到用户的app中。本来这个订阅功能应该是消息中心那边做的,但他们说这个短时间内做不了。所以让我这个负责优惠劵的做了-.-!。具体方案就是到具体的推送时间点了,coupon系统调用消息中心的推送接口,把信息推送出去。下面我们分析一下这个功能的业务情景。公司目前注册用户6000W+,是哪家就不要打听了。。。比如有一张无门槛的优惠劵下单立减20元,那么抢这张劵的人就会比较多,我们保守

2020-07-28 09:04:09 255 1

原创 Redis从入门到深入-Sorted_set的value(08)

1. sorted_set 类型新的存储需求,数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式需要的存储结构:新的存储模型,可以保存可排序的数据sorted_set类型:在set的存储结构基础上添加可排序字段2. sorted_set 类型数据的基本操作2.1 操作添加数据zadd <key> <score1> <member1> [score2 member2]获取全部数据zrange <key>

2020-07-28 09:03:49 162

原创 Redis从入门到深入-Set的value(07)

1.set类型1.1 set类型来源新的存储需求:存储大量的数据,在查询方面提供更高的效率需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询set类型:与hash存储结构完全相同,仅存储健,不存储值(nil),并且值是不允许重复的1.2 set类型数据的基本操作添加数据sadd <key> <member1> [member2]...获取全部数据smembers <key>删除数据srem <key>

2020-07-28 09:02:35 433

原创 Redis从入门到深入-List的value(06)

1. list类型1.1 List类型数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序list类型:保存多个数据,底层使用双向链表存储结构实现1.2 list类型数据基本操作添加/修改数据lpush <key> <value1> [value2]...rpush <key> <value1> [value2]...获取数据lrange &lt

2020-07-28 09:01:57 237

原创 Redis从入门到深入-Hash的value(05)

2. hash类型2.1 存储的困惑对象类数据的存储如果具有较频繁的更新需求操作会显得笨重2.2 hash类型新的存储需求,对一系列的存储的数据进行编组,方便管理,典型应用存储对象信息需要的存储结构:一个存储空间保存多个键值对数据hash存储结构优化如果field数量比较少,存储结构优化为类数组结构如果field数量比较多,存储结构使用HashMap结构2.3 hash类型数据的基本操作添加/修改数据hset <key> <field&g

2020-07-28 09:01:36 408

原创 Redis从入门到深入-Redis的字符串具体实现(04)

1. Redis的字符串实现Redis虽然是用C语言写的,但却没有直接用C语言的字符串,而是自己实现了一套字符串。目的就是为了提升速度,提升性能,可以看出Redis为了高性能也是煞费苦心。Redis构建了一个叫做简单动态字符串(Simple Dynamic String),简称SDS1.1 SDS 代码结构Redis的字符串也会遵守C语言的字符串的实现规则,即最后一个字符为空字符。然而这个空字符不会被计算在len里头。struct sdshdr{ // 记录已使用长度 int l

2020-07-28 08:59:50 118

原创 Redis从入门到深入-String的value(03)

1. string类型1.1 redis数据存储类型redis本身是一个Map,其中所有的数据都是采用key:value的形式存储数据类型指的是存储的数据的类型,也就是value部分的类型,key部分永远都是字符串1.2 string类型存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型存储数据的格式:一个存储空间保存一个数据存储内容:通常使用字符串,如果字符串以整数形式展示,可以作为数字操作使用1.3 基本操作添加/修改数据set key value

2020-07-28 08:59:26 329

原创 Redis从入门到深入-Redis的安装(02)

1. 基于Linux环境安装Redis1.1 基于Cent OS7安装Redis下载安装包wget http://download.redis.io/release/redis-?.?.?.tar.gz解压tar -xvf 文件名.tar.gz编译make安装make install1.2 Redis服务启动默认配置启动redis-serverredis-server --port 6379redis-server --port 6380指定配置文件启动redis

2020-07-28 08:56:06 80

原创 Redis从入门到深入-简介(01)

1. Redis1. 概念Redis(REmote DIctionary Server)是用C语言开发的一个开源的高性能键值对(key-value)数据库简单来说redis就是一个数据库,不过与传统数据库不同的是 redis的数据是存在内存中的,所以读写速度非常快,因此 redis被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis提供了多种数据类型来支持不同的业务场景。除此之外,redis支持事务、持久化、LUA脚本、LRU驱动事件、多种集群方案。2. 特征数据间没有必然

2020-07-28 08:55:10 98

原创 Java相关的Spring知识整理

一、Spring体系结构:Spring 有可能成为所有企业应用程序的一站式服务点,然而,Spring 是模块化的,允许你挑选和选择适用于你的模块,不必要把剩余部分也引入。下面的部分对在 Spring 框架中所有可用的模块给出了详细的介绍。Spring 框架提供约 20 个模块,可以根据应用程序的要求来使用。核心容器核心容器由spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Sp

2020-07-28 08:51:50 196

原创 SpringBoot入门及原理快速搭建

简介:Spring Boot是由Pivotal团队提供的, Spring家族中的一个全新的框架,它用来简化Spring应用程序的创建和开发过程,也可以说Spring boot能简化我们之前采用SpringMVC+Spring+Mybatis框架进行开发的过程。在以往我们采用SpringMVC+Spring+Mybatis框架进行开发的时候,搭建和整合三大框架,我们需要做很好工作,比如配置web.xml,配置Spring,配置Mybatis,并将它们整合在一起等,而Spring boot框架对

2020-07-27 17:44:13 294

原创 Mysql性能优化之Explain关键字

一、何谓索引?​ 索引,简单说,就是排好序,查找的快的一种数据结构;二、sql为何慢?​ 1、查询语句写的烂;​ 2、索引失效:(单值、复合)​ 3、关联查询太多​ 4、服务器调优(缓冲、线程数)三、索引优势与劣势;​ 优势:提高检索效率,降低IO成本;降低数据的排序成本,降低CPU的消耗;​ 劣势:索引也是一张表,该表保存了主键与索引字段,并指向实体

2020-07-27 17:42:59 152

原创 设计模式学习-策略模式&观察者模式&装饰者模式

一、设计模式二、什么是设计模式​ 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。在某些场景下,针对某类问题的某种通用的解决方案。​ https://www.cnblogs.com/pony1223/p/7608955.html三、设计模式的六大原则开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Lis

2020-07-27 17:42:15 365

原创 Java中HashMap知识整理

一. HashMap(JDK-1.8)0. 哈希表在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能**数组:**采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查找等方式,可将查找复杂度提高为O(logn);对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也为O(n)**线性链表:**对于链表的

2020-07-27 17:41:19 386

原创 Java日志处理之Log简析

loglog4j, slf4jlog4j是一个具体的日志实现框架,其他框架还包括log4j 2, logback, java.util.logging(JUL)slf4j(Simple Logging Facade for Java): 各种日志框架的一个抽象a simple facade or abstraction for various logging frameworks因此只单独引入slf4j是无法进行日志说出的,会出现以下信息SLF4J: Failed to load c

2020-07-27 17:39:27 263

原创 Java任务调度入门-Quartz&SpringTask对比

quartz引入quartz<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --><dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version&

2020-07-27 17:30:22 255

原创 Java中注解到底是如何工作的

注解@annotation?1.什么是注解?用一个词就可以描述注解,那就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。注解仅仅是元数据,和业务逻辑无关,所以当你查看注解类时,发现里面没有任何逻辑处理;<string name="app_name">AnnotationDemo</string>这里的"app_name"就是描述数据"AnnotationDemo"的数据,这是在配置文件中写的,注解是在源码中写的,如下所示:@Overridepub

2020-07-27 17:29:27 651

原创 小伙子,你又知道创建线程有几种方式吗?

一、继承Thread类创建线程类(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。(2)创建Thread子类的实例,即创建了线程对象。(3)调用线程对象的start()方法来启动该线程。public class ThreadClass { static class SubThread extends Thread { @Override public void run() {

2020-07-27 17:25:32 72

原创 Java IO三兄弟之BIO&NIO&AIO

一、Java中的IO原理首先Java中的IO都是依赖操作系统内核进行的,我们程序中的IO读写其实调用的是操作系统内核中的read&write两大系统调用。那内核是如何进行IO交互的呢?网卡收到经过网线传来的网络数据,并将网络数据写到内存中。当网卡把数据写入到内存后,网卡向cpu发出一个中断信号,操作系统便能得知有新数据到来,再通过网卡中断程序去处理数据。将内存中的网络数据写入到对应socket的接收缓冲区中。当接收缓冲区的数据写好之后,应用程序开始进行数据处理。对应抽象到java的

2020-07-27 17:19:27 152

原创 Java Lambda原理深度理解以及如何开发应用

1. 匿名内部类实现匿名内部类仍然是一个类,只是不需要程序员显示指定类名,编译器会自动为该类取名。因此如果有如下形式的代码,编译之后将会产生两个class文件:public class MainAnonymousClass { public static void main(String[] args) { new Thread(new Runnable(){ @Override public void run(){ System.out.println("Anonymous

2020-07-27 17:12:22 217

原创 SpringBean的几个问题以及原理

一、几个问题Spring中的bean是如何生成?Spring提供了哪些扩展点可以整合第三方框架Spring如何整合Mybatis的二、什么是SpringSpring管理bean(Java中的对象),初始化的操作,三、Spring IoC容器资源组件:Resource,对资源文件的描述,不同资源文件如xml、properties文件等,格式不同,最终都将被ResourceLoader加载获得相应的Resource对象;个人理解是。主配置文件.主配置作为所有配置的入口资源加载组件:

2020-07-26 21:11:41 107

原创 小白从零开始学ApacheFlink

1. Apache Flink 介绍来源:http://www.54tianzhisheng.cn/2018/10/13/flink-introduction/Apache Flink 是近年来越来越流行的一款开源大数据计算引擎,它同时支持了批处理和流处理,也能用来做一些基于事件的应用。使用官网的一句话来介绍 Flink 就是 “Stateful Computations Over Streams”。首先 Flink 是一个纯流式的计算引擎,它的基本数据模型是数据流。流可以是无边界的无限流,即一般

2020-07-26 21:07:35 407

原创 小白学习Java反射与动态代理

一、反射介绍1.0 动态语言和静态语言动态语言是一类在运行是可以改变其结构的语言:例如新的函数,对象,甚至代码可以被引进,已有的函数可以被删除或者是其他结构上的变化。通俗点就是说可以在运行时代码可以根据某些条件改变自身结构主要动态语言:Object-C、JavaScript、PHP、Python等静态语言与动态语言向对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++Java虽然不是动态语言,但Java可以称之为“准动态语言”。即Java有一定的动态性,我们可以利用反射

2020-07-26 21:06:05 156

原创 Java中异常的原理以及处理

一、什么是异常在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等等。异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出 java.lan

2020-07-26 21:04:45 563

原创 基于Spring开发-自定义标签及其解析

基于Spring开发——自定义标签及其解析​ https://blog.csdn.net/zzg1229059735/article/details/826699551.前言​ 在spring中使用过dubbo的人应该都配置过类似<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" /><dubbo:reference id="demoService" interf.

2020-07-26 21:03:19 122

原创 聊聊前端的Html布局

聊聊布局[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pUErNaId-1595768517862)(https://raw.githubusercontent.com/bxm0927/picture-link/master/markdown-note/2019-2-24005.png)]布局方法过时的布局方法表格布局(table)传统的布局方法定位(position)浮动(float)前沿的布局方法弹性盒子布局(Flexible Box Layo

2020-07-26 21:02:28 145

原创 关于Java8-stream的理解

ollection+ 数组Collection.stream()Collection.parallelStream()Arrays.stream(T array) or Stream.of()流的操作类型Intermediate: 一个流可以后面跟随零个或多个 intermediate 操作。其目的主要是打开流,做出某种程度的数据映射/过滤,然后返回一个新的流,交给下一个操作使用。这类操作都是惰性化的(lazy),就是说,仅仅调用到这类方法,并没有真正开始流的遍历Terminal: 一

2020-07-26 21:01:25 118

无人值守的自动化测试的实践之路.pdf

2020阿里巴巴研发效能峰会-无人值守的自动化测试的实践之路,如何更好的进行自动化测试,阿里巴巴自动化测试的探索道路

2020-07-26

网上订票系统

自己做的网上订票系统~有详细的数据库介绍 和关于做法

2015-06-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除