自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Linux使用rz、sz命令进行文件上传下载

命令的安装rz和sz命令可以让我们很方便的将文件在本地和服务器之间上传和下载。我所使用的阿里云服务器,系统是Ubuntu系统,当输入rz命令,系统将出现以下提示。很明显,我们需要根据提示安装lrzsz。sudo apt-get updatesudo apt-get install lrzsz使用rz命令进行文件上传使用xshell登录服务器,当我们输入rz命令,系统将会出现弹框,我们选择需要上传的文件进行上传即可。使用sz命令进行文件下载使用xshell登录服务器,输入sz

2020-06-27 01:02:02 64

原创 MongoDB之Spring Data MongoDB

这里创建springboot工程,使用spring data mongodb,首先需要创建工程,引入坐标。<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>2.1.8.RELEASE</version></dependency&

2020-06-26 19:43:20 126

原创 MongoDB之基本使用

MongoDB简介MongoDB是为了快速开发互联网Web应用而设计的数据库系统。MongoDB的设计目标是极简、灵活、作为Web应用栈的一部分。MongoDB的数据抹香香是面向文档的,所谓文档是一种类似于JSON的结构,简单理解MongoDB这个数据库中存的是各种各样的JSON(BSON)。下载安装MongoDB(Ubuntu)安装MongoDBsudo apt-get install mongodb查看MongoDB版本mongo -version连接MongoDBmo

2020-06-26 19:25:30 54

原创 Java并发编程之AQS原理

AQS框架基本特性与结构Java并发包当中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、独占获取、共享获取等,而这个行为的抽象就是基于AbstractQueuedSynchronize简称AQS。AQS是一个抽象同步框架,可以用来实现一个依赖状态的同步器。AQS核心AQS核心有三点:自旋:控制线程不跳出逻辑LockSupport类中有park(线程阻塞)、unpark...

2019-12-03 16:24:26 102

原创 Spring之Bean的生命周期

什么是Bean的生命周期Bean的生命周期指的是Bean创建→初始化→销毁的过程我们可以自定义Bean初始化和销毁方法容器在Bean进行到当前生命周期的时候,来调用自定义的初始化和销毁方法。初始化与销毁——自定义方法我们创建一个Bike类public class Bike { public Bike() { System.out.println("Bike 构造方法");...

2019-12-03 16:01:08 60

原创 Spring之Bean的加载方法

@Configuration该注解作用在类上,告诉Spring这是一个配置类,与XML效果是一样的,我们接下来所使用的注解,需要在配置类中使用。ApplicationContext ac = new AnnotationConfigApplicationContext(MainConfig.class);@Bean将@Bean放在方法上使用,能够将Bean加入到IOC容器中,其返回...

2019-12-03 15:56:02 71

原创 设计模式之责任链模式

什么是责任链模式责任链设计模式主要构成有抽象处理者、具体处理者、客户类,在处理请求的时候,将请求通过客户类发送至处理链路上,这样链路上所有处理对象都有机会处理请求,使发送者与接收者之间解耦。使用场景当请求到来时,不知道由哪个具体对象去处理或者每个对象都需要处理请求的时候,可以使用责任链模式。比如在论坛发表一篇文章,后台需要经过一系列处理(过滤、敏感词等)才可以发表或进入数据库,这时...

2019-12-03 15:27:45 61

原创 设计模式之观察者模式

观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化。观察者模式包含四个角色:抽象主题(Subject)、具体主题、抽象观察者(Observer)、具体观察者观察者模式的实现我们创建一个彩票的主题,以购彩者作为观察者,向彩票主题进行注册,而彩票主题则向购彩者进行通知,来实现观察者模式。下面是一个...

2019-12-03 15:19:27 62

原创 Java基础之内省机制

内省机制Java中提供了一套API用来访问某个属性的getter/setter方法,这些API存放与包java.beans中,一般的做法是通过类Introspector的getBeanInfo方法来获取摸个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后...

2019-12-03 15:09:43 52

原创 MySQL之分组函数

分组函数分组函数是对表中的一组记录进行操作,每组返回一个结果。分组函数一共5个COUNT  求总数SUM    求总和AVG     求平均数MAX    求最大数MIN     求最小数分组函数的特点分组函数自动忽略NULL,例如下面的查询SELECT COUNT(time) FROM act_user;如果time中存在NULL字段,那么分组函数自动忽略。...

2019-10-19 11:38:14 88

原创 Redis的虚拟内存

应用场景对于大多数数据库而言,最好的运行方式就是讲所有数据都加载到内存中,之后的查询操作完全基于内存数据来实现,但这在实际的情况下并不多见,多数情况下只有部分数据可以被加载到内存中,在Redis中,有一个重要的概念,那就是key一般不会被交换,如果你的数据库中存在大量key,那么这种场景就不适合使用虚拟内存,如果恰恰相反,你的数据库中只包含少量key,而每一个key所包含的value很大,那么...

2019-08-29 21:51:16 195

原创 Java8新特性之方法引用

方法引用前面讲过Lambda表达式,而方法引用是Lambda表达式的一种特殊情况,或者说,是Lambda表达式的一种语法糖。方法引用的分类方法引用可以分为4类:1、类名::静态方法名2、引用名(对象名)::实例方法名3、类名::实例方法名4、构造方法引用:类名::new类名::静态方法名测试自定义学生类public class Student{ private...

2019-07-08 12:50:11 141

原创 Java8新特性之java.util.function包下的函数式接口

Function接口Function接口,是函数式接口,在用户实际使用的时候可以传递任意的操作给该函数,它可以用来传递行为。对于 Function<T,R>的参数,其表示传入T类型的对象,返回R类型的对象。public class FunctionTest{ public int compute(int a, Function<Integer,Intege...

2019-07-07 17:41:20 561

原创 Java8新特性之Lambda表达式

为什么需要Lambda表达式在Java中,我们无法将函数作为参数传递给一个方法,也无法声明返回一个函数方法。Lambda表达式为Java添加了缺失的函数式编程的特性,使我们能将函数当做一等公民看待,在Java中,Lambda表达式是对象,他们必须依附于一类特别的对象类型——函数式接口。下面是一个普通的Swing程序使用匿名内部类与Lambda的写法 JFrame jFrame=new J...

2019-07-05 10:47:21 360

原创 Java并发编程之阻塞队列

ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按FIFO(先进先出)原则对元素进行排序。LinkedBlockingQueue:是一个基于链表结构的阻塞队列,此队列按FIFO(先进先出)排序元素,吞吐量通常高于ArrayBlockingQueue。SynchronousQueue:一个不存储元素的阻塞队列,每个插入操作必须等到另一个线程调用移除操作,否则插入...

2019-06-05 16:07:50 53

原创 Android数据处理之SQLite数据处理

背景概述SQLite的特点小型、单文件形式、B-Tree结构效率高、可嵌入、开源跨平台、关系型数据库、支持事务实现方式介绍与对比创建数据库的方式context.openOrCreateDatabase(name,mode,cursorFactory) 继承SQLiteOpenHelper并重写抽象方法第一种方式打开或创建数据库,如果数据库存在,就打开,如果不存在...

2019-05-27 18:20:10 97

原创 Android数据处理之SharePreferences

概述与特点分析以键值对的方式进行存储 支持多种数据类型 特点与应用场景特点:存储位置(当前App所属的文件夹下shared_prefs目录)、访问权限(只要自己的App能够访问到)应用场景:非结构化存储,简便存储将数据存入SharedPreference获取SharedPreferences对象 获取SharedPreferences.Editor对象 edito...

2019-05-27 18:08:46 80

原创 Android数据处理之File数据处理

Assets中的数据处理Assets目录的文件位置assets目录位于项目文件下,其与java、res目录是平级的关系,我们可以在assets目录下放置我们需要的资源文件。对资源文件的读取通过AssetManager读取context.getAsset().open(fileName)通过文件路径读取file:///android_asset/fileName...

2019-05-27 17:56:21 111

原创 Redis的事务

简介Redis事务可以一次执行多个命令(允许在一个单独的步骤中执行一组命令),按顺序地串行化执行,执行过程中不会被其他命令插入,不许加塞。在输入 MULTI 命令开始,输入的命令会依次进入命令队列,但不会执行。输入 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余命令依然执行。在事务执行过程中,其他客户端提交的命令请求不会插入到事务执行命令序列中。R...

2019-05-24 17:06:02 54

原创 Redis发布订阅

简介Redis发布订阅是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis客户端可以订阅任意数量的频道。命令订阅频道:SUBSCRIBE channel [channel] #订阅给定的一个或多个频道的信息PSUBSCRIBE pattern [pattern] #订阅一个或多个符合给定模式的频道发布频道:PUBLI...

2019-05-24 17:02:58 113

原创 Java基础之自动装箱和拆箱

自动装箱和拆箱就是将基本数据类型和包装类之间进行的自动转换。JDK1.5 后,Java引入了自动装箱(autoboxing)、拆箱(unboxing)自动装箱基本类型的数据处于需要对象的环境中时,会自动转为”对象“以Integer为例,在JDK1.5以前,这样的代码 Integer i=5 是错误的,必须要通过Integer i=new Integer(5) 这样的语句来实...

2019-05-24 16:49:48 56

原创 Java基础之Arrays工具类的使用

JDK提供的java.util.Arrays类,包含了常用的数组操作,方便我们日常开发。Arrays类包含了:排序、查找、填充、打印内容等常见操作。打印数组int a[]= {1,2};System.out.println(a); //打印数组引用的值System.out.println(Arrays.toString(a)); //打印数组元素的值此处的Array...

2019-05-24 16:46:36 152

原创 Java基础之内部类的分类

在Java中内部类主要分为成员内部类(非静态内部类、静态内部类)、匿名内部类、局部内部类。成员内部类1)、非静态内部类非静态内部类必须存在一个外部类对象里。因此,如果有一个非静态内部类,那么一定存在对应的外部类对象。非静态内部对象单独属于外部类的某个对象。 非静态内部类可以直接访问外部类的成员,但是外部类不能直接访问非静态内部类成员。 非静态内部类不能有静态方法、静态属...

2019-05-21 16:42:39 48

原创 Java基础之浮点型变量和BigDecimal的使用

带小数的数据在Java中称为浮点型,浮点型可以分为float类型和double类型。 类型 占用存储空间 表数范围 float 4字节 -3.403E38~3.403E38 double 8字节 -1.798E308~...

2019-05-21 16:37:17 488

原创 Java基础之RandomAccessFile随机访问流

RandomAccessFile介绍随机访问文件,自身具备读写方法通过skipBytes(int x),seek(int x)来达到随机访问特点该对象既能读,又能写该对象维护了一个byte数组,并通过指针可以操作数组中的元素可以通过getFilePointer方法获取指针的位置,通过seek方法设置指针的位置其实该对象就是将字节输入流和输出流进行了封装该...

2019-05-21 16:29:49 570

原创 缓存设计与优化

缓存的受益与成本受益加速读写通过缓存加速读写速度:CPU L1/L2/L3 Cache、Linux page Cache加速硬盘读写、浏览器缓存、Ehcache缓存数据库结果。降低后端负载后端服务器通过前端缓存降低负载:业务端使用Redis降低后端MySQL负载等。成本数据不一致:缓存层和数据层有时间窗口不一致,和更新策略有关。 代码维护成本:多了一层缓存逻辑...

2019-05-21 16:22:33 216

原创 Redis实现分布式锁

锁的处理单应用中使用锁:单进程多线程使用 synchronized 或 Lock 实现该场景下的锁机制分布式应用中使用锁:多进程分布式锁的实现方式数据库的乐观锁基于zookeeper的分布式锁基于redis的分布式锁分布式锁的注意事项互斥性:在任意时刻,只有一个客户端能持有锁同一性:加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了避免死锁:即...

2019-05-06 16:21:14 60

原创 Redis使用JavaAPI

安装加载redis驱动包连接到Redis服务器//连接redis服务Jedis j=new Jedis("10.2.6.63",6379);//查看服务是否运行System.out.println(j.ping());String类型数据实例//连接redis服务Jedis j=new Jedis("10.2.6.63",6379);List<String...

2019-05-06 16:12:49 592

原创 Redis持久化的取舍和选择

Redis持久化的两种方式redis是一个支持持久化的内存数据库,也就是说,redis需要经常有内存中的数据同步到硬盘来保证持久化。为了保证数据数据的持久性,它提供了两种持久化方式。RDB方式 AOF方式RDB什么是RDBRDB是通过一条命令,将Redis内存中的数据完整的生成一个快照,然后保存到硬盘中,也就是RDB文件。RDB文件将内存中的数据以快照的方式写入二进...

2019-05-06 16:06:29 187

原创 Redis主从复制(Centos7)

主从复制1、主服务器可以拥有多个从服务器2、多个从服务器可以连接同一个主服务器外,还可以连接到其他从服务器3、主从复制不会阻塞主服务器,在同步数据时,主服务器可以继续处理客户端请求4、提供系统的伸缩性主从复制过程1、从服务器与主服务器建立连接,发送sync同步命令2、主服务器开启一个后台进程,将数据库快照保存到文件中,同时主服务器主进程会开始搜集新的写命令并缓存3、后台完成保...

2019-05-06 13:21:04 66

原创 Redis的高级命令

Redis服务相关命令redis-server:启动redis服务redis-cli:进入redis客户端redis-benchmark:性能测试工具redis-check-aof:aof文件进行检查工具redis-check-dump:rdb文件进行检查工具redis-sentinel:启动哨兵监控服务redis-server -v:查看redis版本号数据库操作命令...

2019-05-06 13:17:15 44

原创 Redis的基础数据类型详解

redis一共分为五种基本数据类型:string、hash、list、set、zset以下对Redis类型及所对应的命令进行介绍,注意:在Redis中,命令是忽略大小写的,而key是不忽略大小写的。String数据类型String类型是包含很多种类型的特殊类型,并且是二进制安全的,比如序列化的对象进行存储,比如一张图片进行二进制存储,简单字符串、数值等等。赋值SET key valu...

2019-05-06 13:14:33 44

原创 Redis的介绍及安装

NoSQL简介NoSQL泛指非关系型数据库,NoSQL数据库的四大分类:键值(Key-Value)存储数据库:这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。如Redis。列存储数据库:通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特定是指向了多个列,如HBase。文档类型数据库:该类型的数据库模型是版本化的文档,半结构化的文档以特定的格式...

2019-05-05 22:58:26 37

原创 Java并发编程之Lock接口的认识与使用

Lock介绍在Java中实现锁可以使用Synchronized关键字,也可以使用Lock接口所提供的实现类。ReentantLock是Lock的实现类,它除了能完成Synchronized所能完成的所有工作外,还提供了诸如可响应中断锁、可轮询锁请求、定时锁等避免多线程死锁的方法。Lock和Synchronized的区别都是可重入锁Lock需要显示地获取和释放锁,繁琐,当能让代码更...

2019-05-05 13:50:51 77

原创 等待唤醒机制实现生产者消费者模型

商城类public class Tmail { //产品数量 private int count; //产品的最大容量 public final int MAX_COUNT=10; //消费者生产产品 public synchronized void push(){ while(count>=MAX_COUNT){ try { System.out.print...

2019-05-04 14:35:56 142

原创 Java并发编程之ReadWriteLock读写锁

ReadWriteLock:读写锁如果可能发生线程安全问题,就直接上锁,虽然可以避免线程安全问题,但效率较低。我们可以将其按读与写进行分离,每一次只能有一个线程来进行写数据,但可以有多个线程进行读数据,写与写互斥、写与读互斥,但是读与读不需要互斥。读写锁互斥原则写—写 需要互斥读—写 需要互斥读—读 不需要互斥读写锁实例public class ReadWriteLock...

2019-05-04 14:31:28 123

原创 Java并发编程之Exchanger的使用

Exchanger介绍类Exchanger可以使2个线程之间进行数据传输,它比生产者、消费者模式使用wait/notify要更加方便。Exchanger的使用public class MyThread implements Runnable{ private Exchanger<String> exchanger=new Exchanger<>(); @O...

2019-05-04 14:25:12 166

原创 Java并发编程之Semaphore信号量控制

Semaphone介绍通过 Semaphore,可以很容易控制某一个资源可被同时访问的个数。它维护了当前访问的个数,提供同步机制来控制同时访问个数Semaphore 对象被实例化时,需要告诉它许可的个数,线程只有获取许可,才能对资源进行访问。Semaphore 提供了两个方法对资源的访问进行控制acquire():获取一个许可,如果没有,就等待release():操作完成后,释放一...

2019-04-20 17:11:19 116

原创 Java并发编程之CyclicBarrier

CyclicBarrier介绍CyclicBarrier运行一组线程相互等待,直到到达某个公共的屏障点。它是通过计数器来实现的,当某个线程调用了await()方法后,该线程就进入了等待状态,计数器执行加1操作,当计数器的值达到了设置的初始值的时候,调用await()进入等待状态的线程会被唤醒,继续执行他们后续的操作。由于CyclicBarrier在释放等待线程后可以重用,所以我们又称它为循环...

2019-04-20 17:07:34 61

原创 Java并发编程之CountDownLatch闭锁

CountDownLacth的介绍CountDownLatch:闭锁,在完成某些运算时,只有其他所有线程的运算全部完成,当前运算才会继续执行。闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活动直到其他活动都完成才继续执行:确保某个计算在其需要的所有资源都被初始化之后才继续执行确保某个服务在其依赖的所有其他服务器都已启动之后才启动等待直到某个操作所有参与者都准备就绪再继...

2019-04-20 15:16:27 202

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