自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 CountDownLatch、CyclicBarrier、Semaphore

1、CountDownLatch:CountDownLatch只能使用一次;countDown():计数器的值依次减1;实现减法计数器:public class CountDownLatchTest { public static void main(String[] args) { /*优先执行,执行完毕之后,才能执行 main*/ /*1、实例化...

2020-03-24 16:30:25 205

原创 Forkjoin框架

Forkjoin是JDK1.7提供的多线程并发处理框架,本质上是对线程池的一种补充;它的核心思想就是将一个大型任务拆分成很多个小任务,分别执行,最后再将小任务的结果进行汇总本质就是:一个线程任务拆分成多个线程并发执行工作窃取:A、B两个线程同时执行,A的任务比较多,B先执行完了,此时B将A的一部分拿过来,替A执行,从而提升效率;Forkjoin框架的使用需要用到两个类:F...

2020-03-23 18:18:42 235

原创 生产者消费者模型

生产者消费者模型:有一个容器来盛放商品,左边有生产者生产该商品,并将生产的商品放入该容器中;右边有消费者,从容器中拿走商品;容器中商品的个数不可能为负数;当容器中没有商品时,消费者无法消费;当容器中满的时候,生产者不能再生产商品了;下面来实现该现象:(1)使用synchronized的方式/* * 生产者消费者模型 * synchronized、wait/notify的方式 * *...

2020-03-23 18:17:54 205

原创 synchronized使用

synsynchronized的使用方法:1、synchronized修饰方法(1)synchronized修饰非静态方法: 锁的是方法的调用者import java.util.concurrent.TimeUnit;class Data { /*synchronized修饰非静态方法,锁的是即方法的调用者,即 调用func1方法的对象*/ public s...

2020-03-23 17:22:19 210

原创 JVM的组成

JVM可以分为5个部分,分别是:(1)类加载器(2)运行时数据区(3)执行引擎(4)本地库接口(5)本地方法库其基本流程为:运行时数据区中的程序计数器、虚拟机栈、本地方法栈、堆、方法区;前三个是线程私有的,后两个是线程共享的;类加载器:加载字节码文件到内存;执行引擎:对JVM指令进行解析,翻译成机器码,解析完成后提交到操作系统中;本地库接口:供java调用的融合了不同开...

2020-02-18 23:51:52 3438

原创 自定义ClassLoader

ClassLoader是整个JVM运行机制的入口,程序通过ClassLoader将编译好的字节码文件加载到内存中,生成Class,进而创建对象,之后才能进行各种运算、解析,最终生成机器码提交到操作系统中;ClassLoader的作用是将字节码文件加载到内存中,所以要先有字节码文件1、创建java文件public class FileJava { public FileJava() ...

2020-02-18 23:33:09 2502 1

原创 redis的哨兵模式

能够从后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库;而如果原来的主库又恢复了,则原来的主库就会变成从库;

2019-12-09 22:38:33 136

原创 Linux下各个目录的含义

Linux的文件系统是采用层级式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录;在Linux世界里,一切皆文件;/bin:存放经常使用的目录;/sbin:存放系统管理员使用的系统管理程序;/home:普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的;/root:系统管理员,超级权限者的用户主目录;/l...

2019-12-02 15:16:02 413

原创 Redis的主从复制master-slave

master-slave是指:主机数据更新后根据配置和策略,自动同步到备机的master/slave机制,master以写为主,slave以读为主;redis的主从复制配置是在从库上配置的,配置的命令为:slaveof 主库IP 主库端口下面是配置的过程示意图:一、更改配置(1)拷贝多个redis.conf文件(2)在redis6380.conf 和redis6381.conf这两个...

2019-11-30 09:51:40 538

原创 redis的事务

事务:可以一次执行多个命令,本质是一组命令的集合,一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞;一个队列中,一次性,顺序性,排他性地执行一系列命令MULTI:开启事务EXEC:调用执行命令DISCARD:取消事务redis中事务的三个特点:(1)正常执行时(2)放弃事务DISCARD,事务中的命令就都无法执行了(2)在事务开启后,在将各条命令...

2019-11-29 10:39:39 84

原创 redis的数据类型及应用(三)

5、set(1) sadd key value value…:添加元素(2) smembers key :获取列表中的值(3)sismember key value :判断元素是否存在(4)scard key :获取集合里面的元素个数(5)srem key value :删除集合中元素(6)srandmember key 某个整数n(随机出几个数):在集合key中随机选出n个数(7)...

2019-11-29 10:32:02 113 1

原创 redis数据类型及应用(二)

3、list(1)lpush(2)lrange(3) lpop 和 pop(4)lindex:按照索引下标获得元素(从上到下)(5)llen key:获取key的长度(6) lrem key num value :删除key中num个value值(7)ltrim key 开始index 结束index:截取指定范围内的值后再赋值给key(8)rpoplpush 源列表 目的列表...

2019-11-28 11:40:31 97

原创 redis数据类型以及用法(一)

redis有5大数据类型:String(字符串)Hash(哈希,类似java的Map)List(列表)Set(集合)Zset(sorted set,有序集合)字符串(String):是最基本的类型,String类型是二进制安全的,意思是:redis的String可以包含任何数据,比如:jpg图片或者序列化的对象;一个redis中字符串value最多可以是512M;哈希(Hash)...

2019-11-27 20:47:28 206

原创 Linux(CentOS)中Redis的安装

1、首先去redis.io官网上下载redis的包,如图所示;2、将该包上传到Linux中,将该包放到Linux的 /opt目录下,可以使用xft将文件上传到Linux中,也可以安装vm tool工具后,直接将该压缩包拖拉到Linux中(现在新版本的linux都自带了vm tool 工具,就可以不用再安装了)3、解压该压缩包使用命令:tar -zvxf redis的包名4、解压完成...

2019-11-27 19:41:08 283

原创 Redis

Redis是一个全开源免费的,用C语言编写的,是一个单线程、高性能的内存数据库,是基于内存运行并支持持久化的nosql数据库,是一个key-value数据库;Redis主要是用来做缓存,但不仅仅只能做缓存,比如:redis实现分布式锁、队列、回话缓存;Redis:**(1)**支持持久化,有RDB持久化和AOF持久化两种方式;持久化就是将内存中的数据写入到硬盘中;而如果Redis突然出错罢...

2019-11-11 16:40:37 135 1

原创 SpringMVC的部分注解

@Controller:标识Spring MVC Controller处理器,用来创建处理HTTP请求的对象;@RequestMapping:@RequestMapping相关参数1.value:指定url请求的实际地址,是@RequestMapping的默认值@RequestMapping(“hello”)等同于 @RequestMapping(value=“hello”)2.met...

2019-11-10 14:59:59 84

原创 SpringMVC的执行流程

SpringMVC

2019-11-10 13:54:15 101

原创 ConcurrentHashMap的读操作不需要加锁

public V get(Object key) { Node<K,V>[] tab; Node<K,V> e, p; int n, eh; K ek; int h = spread(key.hashCode()); if ((tab = table) != null && (n = tab.length) &...

2019-11-08 11:57:48 1915

原创 隔离级别,myisam和innodb的区别

隔离级别有四种:read uncommitted 读取未提交内容read committed 读取提交内容repeatable read 可重读serializable 可串行化大多数数据库默认的隔离级别是read committed,但是mysql的隔离级别是repeatable read;脏读:某个事务已更新一份数据,另一个事务在此时读取了更新后的数据,但是由于某种原因,前面的那个...

2019-11-07 23:52:25 820

原创 BIO、NIO

BIO:是一种阻塞的IO客户端:import java.io.IOException;import java.net.Socket;import java.util.Scanner;public class Client { public static void main(String[] args) { try { Socket s...

2019-11-03 19:20:05 79

原创 对象的深拷贝、浅拷贝

(一)浅拷贝:是拷贝的一个引用;比如说:对象A,对A进行浅拷贝之后,拷贝出来一个对象B,则B与A会指向同一个引用,如图所示:class Person { private String name; private int age; public Person(String name, int age) { this.name = name; ...

2019-11-02 23:48:45 284

原创 equals、 hashCode

一、Object类的equals和hashCode方法::public boolean equals(Object obj) { return (this == obj); } public native int hashCode();可以看到Object类的equals方法是判断引用是否相等(和==的作用一样),而不是比较对象中内部的值二、String...

2019-10-20 23:46:51 132

原创 String的拼接字符串的底层实现原理

下面代码:public class Test1 { public static void main(String[] args) { String str1="hello"; String str3="hello word!"; String str4=str1+"word!"; System.out.println(str...

2019-09-13 23:15:12 1968

原创 Integer和int类型值比较

今天复习时,遇到了Integer类型与int类型的值比较,就写了一段代码来测试一下结果:public class Test9 { public static void main(String[] args) { Integer i01 = 12; int i02 = 12;//基本数据类型 Integer i03 = Integer.v...

2019-09-13 22:11:12 1515

原创 集合框架

Collection接口:Collection接口中有两个方法是List接口和Set接口共有的:add()和iterator()方法;但是List接口又自己添加了新方法:get()、set()方法,这两个方法是List独有的;List接口允许存放重复的数据,但Set接口不允许存放重复数据;(1)List:ArrayList:是基于数组实现的,其修改数据和查找数据效率更高;Linked...

2019-09-11 12:00:18 80

原创 String、StringBuilder函数传参的执行过程

下面一段代码,结果是什么:public class StringbuilderAppend { public static void test(StringBuilder x,StringBuilder y){ x.append(y); y=x; } public static void main(String[] args) { ...

2019-09-11 10:38:17 655 1

原创 Java中方法参数传递是值传递还是引用传递?

Java

2019-08-30 23:31:47 1046 1

原创 归并排序

归并排序的思想:将数组分为左右两部分,分别将左半部分数组排为有序数组,将右半部分数组排为有序数组,然后再将两部分数组排序合并;在对左半部分数组和右半部分排序时,又引用了上面的思想,所以就引入了递归思想;import java.util.Arrays;public class GuiBing { public static void GuiBingSort(int[] array) {...

2019-08-27 20:12:50 100

原创 try...catch...finally语句块返回值

猜测一下,下面的代码返回值是多少?是10? 11? 12? 13? public static int print() { int a = 10; try { a = 11; return a; }catch (Exception e) { a = 12; }fin...

2019-08-24 23:48:55 378

原创 synchronized上锁

synchronized的作用是:给对象加上锁,就像是把一个笼子锁上,这个笼子的钥匙只有一把,一次只有一个人能拿到这把钥匙开锁;你只有拿到锁的钥匙,你才能打开笼子,否则你就只能等待,直到拿到钥匙;来一段代码来看看加与不加synchronized的区别:不加synchronized:public class Test1 { public static void main(String[...

2019-08-21 23:32:30 220

原创 线程池

·为什么要使用线程池?使用线程池是为了节省资源,如果每次有任务要来执行,每次都重新创建一个线程,使用完之后再销毁,创建和销毁线程池的代价是很大的,这很划算不来;所以才引进了线程池;且使用了线程池后,如果当有任务进来时,如果此时线程池内有空闲线程可以来处理该任务,那么就可以直接执行该任务,不用再等待创建线程池了;·线程池的使用public ThreadPoolExecutor(int cor...

2019-08-20 10:42:15 864

原创 String类型的两种实例化区别

String类型有两种实例化的方法:一种是直接赋值,如String str=“abc”;另一种是通过new来实例化,如:String str=new String(“abc”); public static void main(String[] args) { String str1="abc"; String str2="abc"; Str...

2019-08-20 10:28:42 334

原创 wait、notify、notifyAll方法

1.wait()使当前执行代码的线程进行等待;wait()方法执行后,当前线程释放对象锁2.notify()唤醒等待的线程;在notify()方法后,会释放对象锁,但当前线程不会马上释放该对象锁,要等到执行notify()方法的线程将程序执行完,也就是退 出同步代码块之后才会释放对象锁。public class Test { public static void main(S...

2019-08-19 23:06:28 219

原创 反射

Class对象的获取有三种方式:(1)任何类的对象可以通过调用Object类提供的getClass()取得该类Class对象;(2)“类名称.class”可以直接根据某个具体类来取得其Class对象(3)调用Class类的静态方法Class.forName(String className)传入类的全名称来取得其Class对象根据反射取得一个类的Class对象后,可以通过反射来实例化对象...

2019-08-14 23:33:54 73

原创 Writer、Reader

字符流分为两种:Reader(字符输入流)、Writer(字符输出流)Reader是一个抽象类,要进行文件读取,使用子类FileReader;Writer是一个抽象类,要将数据输入到文件中,使用子类FileWrite;Reader的**read()**方法: public static void main(String[] args) { File infile = n...

2019-08-10 20:30:09 201

原创 InputStream、OutputStream

字节流分为两种:InputStream(输入字节流)、OutputStream(输出字节流);如何区分是该用InputStream,还是OutputStream:从某个文件中读取数据到终端中用InputStream;终端向某个文件中输入数据用OutputStream,而这个终端在写代码时,可以理解为:你写代码时所用的这个软件界面。InputStream对象从文件中读取数据的方法是read,O...

2019-08-10 19:33:49 368

原创 AOP

AOP:Aspect Oriented Program ,面向切面编程;AOP是基于动态代理实现的,不是基于动态代理;在AOP中有几个关键术语:横切关注点:方法,我认为就是那个静动态代理中代理对象新添加的那个业务,Aspect(切面):将横切关注点(Accross Cutting Point)模块化到一个类里,这个类叫做切面类;Advice(通知):通知目标对象,将横切关注点作用在方法...

2019-08-07 22:44:42 69

原创 静态代理、动态代理

静态代理:基于接口,一个静态代理只能代理一个类interface ISubject {//真实业务 void eat();}class RealSubject implements ISubject {//真实对象 @Override public void eat() { System.out.println("吃饭"); }}publi...

2019-08-07 21:50:56 95

原创 单例模式

单例模式分为两种:饿汉式单例模式、懒汉式单例模式单例模式就是指类只有一个实例化对象;且要注意的是:单例模式的构造方法是私有的,这样的其他处的代码就无法通过调用该类的构造方法来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。饿汉式单例模式:在一开始就进行初始化,创建了实例化对象懒汉式单例模式:什么时候用就什么时候创建实例化对象饿汉式:public class Singl...

2019-07-20 18:55:52 66

原创 MyBatis逆向生成工具

generatorConfig.xml文件<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://myba...

2019-07-17 18:22:39 213

空空如也

空空如也

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

TA关注的人

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