- 博客(58)
- 收藏
- 关注
原创 配置修改Vim编辑器中TAB键的缩进长度
set expandtab:该选项默认是关闭状态。设置该选项后,空格不会再转换为制表符,按下tab也不会产生制表符,而是使用空格填充。set noexpandtab:设置成 noexpandtab 时,则是用制表符表示一个缩进。一、使用vim打开配置文件~/.vimrc。(如果该文件不存在可以自己新建一个)set shiftwidth=4:含义是>>和<<右移和左移的空格数。set tabstop=4:含义是每隔8个字符设置一个制表位。四、使用source ~/.vimrc命令使得修改生效。
2024-11-12 16:24:12
343
原创 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
235
原创 Forkjoin框架
Forkjoin是JDK1.7提供的多线程并发处理框架,本质上是对线程池的一种补充;它的核心思想就是将一个大型任务拆分成很多个小任务,分别执行,最后再将小任务的结果进行汇总本质就是:一个线程任务拆分成多个线程并发执行工作窃取:A、B两个线程同时执行,A的任务比较多,B先执行完了,此时B将A的一部分拿过来,替A执行,从而提升效率;Forkjoin框架的使用需要用到两个类:F...
2020-03-23 18:18:42
270
原创 生产者消费者模型
生产者消费者模型:有一个容器来盛放商品,左边有生产者生产该商品,并将生产的商品放入该容器中;右边有消费者,从容器中拿走商品;容器中商品的个数不可能为负数;当容器中没有商品时,消费者无法消费;当容器中满的时候,生产者不能再生产商品了;下面来实现该现象:(1)使用synchronized的方式/* * 生产者消费者模型 * synchronized、wait/notify的方式 * *...
2020-03-23 18:17:54
224
原创 synchronized使用
synsynchronized的使用方法:1、synchronized修饰方法(1)synchronized修饰非静态方法: 锁的是方法的调用者import java.util.concurrent.TimeUnit;class Data { /*synchronized修饰非静态方法,锁的是即方法的调用者,即 调用func1方法的对象*/ public s...
2020-03-23 17:22:19
236
原创 JVM的组成
JVM可以分为5个部分,分别是:(1)类加载器(2)运行时数据区(3)执行引擎(4)本地库接口(5)本地方法库其基本流程为:运行时数据区中的程序计数器、虚拟机栈、本地方法栈、堆、方法区;前三个是线程私有的,后两个是线程共享的;类加载器:加载字节码文件到内存;执行引擎:对JVM指令进行解析,翻译成机器码,解析完成后提交到操作系统中;本地库接口:供java调用的融合了不同开...
2020-02-18 23:51:52
4137
原创 自定义ClassLoader
ClassLoader是整个JVM运行机制的入口,程序通过ClassLoader将编译好的字节码文件加载到内存中,生成Class,进而创建对象,之后才能进行各种运算、解析,最终生成机器码提交到操作系统中;ClassLoader的作用是将字节码文件加载到内存中,所以要先有字节码文件1、创建java文件public class FileJava { public FileJava() ...
2020-02-18 23:33:09
2535
1
原创 Linux下各个目录的含义
Linux的文件系统是采用层级式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录;在Linux世界里,一切皆文件;/bin:存放经常使用的目录;/sbin:存放系统管理员使用的系统管理程序;/home:普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的;/root:系统管理员,超级权限者的用户主目录;/l...
2019-12-02 15:16:02
456
原创 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
590
原创 redis的事务
事务:可以一次执行多个命令,本质是一组命令的集合,一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞;一个队列中,一次性,顺序性,排他性地执行一系列命令MULTI:开启事务EXEC:调用执行命令DISCARD:取消事务redis中事务的三个特点:(1)正常执行时(2)放弃事务DISCARD,事务中的命令就都无法执行了(2)在事务开启后,在将各条命令...
2019-11-29 10:39:39
98
原创 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
143
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
114
原创 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
229
原创 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
308
原创 Redis
Redis是一个全开源免费的,用C语言编写的,是一个单线程、高性能的内存数据库,是基于内存运行并支持持久化的nosql数据库,是一个key-value数据库;Redis主要是用来做缓存,但不仅仅只能做缓存,比如:redis实现分布式锁、队列、回话缓存;Redis:**(1)**支持持久化,有RDB持久化和AOF持久化两种方式;持久化就是将内存中的数据写入到硬盘中;而如果Redis突然出错罢...
2019-11-11 16:40:37
163
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
98
原创 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
1958
原创 隔离级别,myisam和innodb的区别
隔离级别有四种:read uncommitted 读取未提交内容read committed 读取提交内容repeatable read 可重读serializable 可串行化大多数数据库默认的隔离级别是read committed,但是mysql的隔离级别是repeatable read;脏读:某个事务已更新一份数据,另一个事务在此时读取了更新后的数据,但是由于某种原因,前面的那个...
2019-11-07 23:52:25
850
原创 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
88
原创 对象的深拷贝、浅拷贝
(一)浅拷贝:是拷贝的一个引用;比如说:对象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
314
原创 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
150
原创 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
2017
原创 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
1549
原创 集合框架
Collection接口:Collection接口中有两个方法是List接口和Set接口共有的:add()和iterator()方法;但是List接口又自己添加了新方法:get()、set()方法,这两个方法是List独有的;List接口允许存放重复的数据,但Set接口不允许存放重复数据;(1)List:ArrayList:是基于数组实现的,其修改数据和查找数据效率更高;Linked...
2019-09-11 12:00:18
89
原创 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
717
1
原创 归并排序
归并排序的思想:将数组分为左右两部分,分别将左半部分数组排为有序数组,将右半部分数组排为有序数组,然后再将两部分数组排序合并;在对左半部分数组和右半部分排序时,又引用了上面的思想,所以就引入了递归思想;import java.util.Arrays;public class GuiBing { public static void GuiBingSort(int[] array) {...
2019-08-27 20:12:50
112
原创 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
409
原创 synchronized上锁
synchronized的作用是:给对象加上锁,就像是把一个笼子锁上,这个笼子的钥匙只有一把,一次只有一个人能拿到这把钥匙开锁;你只有拿到锁的钥匙,你才能打开笼子,否则你就只能等待,直到拿到钥匙;来一段代码来看看加与不加synchronized的区别:不加synchronized:public class Test1 { public static void main(String[...
2019-08-21 23:32:30
244
原创 线程池
·为什么要使用线程池?使用线程池是为了节省资源,如果每次有任务要来执行,每次都重新创建一个线程,使用完之后再销毁,创建和销毁线程池的代价是很大的,这很划算不来;所以才引进了线程池;且使用了线程池后,如果当有任务进来时,如果此时线程池内有空闲线程可以来处理该任务,那么就可以直接执行该任务,不用再等待创建线程池了;·线程池的使用public ThreadPoolExecutor(int cor...
2019-08-20 10:42:15
945
原创 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
360
原创 wait、notify、notifyAll方法
1.wait()使当前执行代码的线程进行等待;wait()方法执行后,当前线程释放对象锁2.notify()唤醒等待的线程;在notify()方法后,会释放对象锁,但当前线程不会马上释放该对象锁,要等到执行notify()方法的线程将程序执行完,也就是退 出同步代码块之后才会释放对象锁。public class Test { public static void main(S...
2019-08-19 23:06:28
247
原创 反射
Class对象的获取有三种方式:(1)任何类的对象可以通过调用Object类提供的getClass()取得该类Class对象;(2)“类名称.class”可以直接根据某个具体类来取得其Class对象(3)调用Class类的静态方法Class.forName(String className)传入类的全名称来取得其Class对象根据反射取得一个类的Class对象后,可以通过反射来实例化对象...
2019-08-14 23:33:54
86
原创 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
220
原创 InputStream、OutputStream
字节流分为两种:InputStream(输入字节流)、OutputStream(输出字节流);如何区分是该用InputStream,还是OutputStream:从某个文件中读取数据到终端中用InputStream;终端向某个文件中输入数据用OutputStream,而这个终端在写代码时,可以理解为:你写代码时所用的这个软件界面。InputStream对象从文件中读取数据的方法是read,O...
2019-08-10 19:33:49
399
原创 AOP
AOP:Aspect Oriented Program ,面向切面编程;AOP是基于动态代理实现的,不是基于动态代理;在AOP中有几个关键术语:横切关注点:方法,我认为就是那个静动态代理中代理对象新添加的那个业务,Aspect(切面):将横切关注点(Accross Cutting Point)模块化到一个类里,这个类叫做切面类;Advice(通知):通知目标对象,将横切关注点作用在方法...
2019-08-07 22:44:42
79
原创 静态代理、动态代理
静态代理:基于接口,一个静态代理只能代理一个类interface ISubject {//真实业务 void eat();}class RealSubject implements ISubject {//真实对象 @Override public void eat() { System.out.println("吃饭"); }}publi...
2019-08-07 21:50:56
107
原创 单例模式
单例模式分为两种:饿汉式单例模式、懒汉式单例模式单例模式就是指类只有一个实例化对象;且要注意的是:单例模式的构造方法是私有的,这样的其他处的代码就无法通过调用该类的构造方法来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。饿汉式单例模式:在一开始就进行初始化,创建了实例化对象懒汉式单例模式:什么时候用就什么时候创建实例化对象饿汉式:public class Singl...
2019-07-20 18:55:52
74
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人