- 博客(29)
- 收藏
- 关注
原创 深入源码分析StringBuffer和StringBuilder
深入源码分析StringBuffer和StringBuilder 众所周知,StringBuffer是线程安全,StringBuilder线程不安全,所以StringBuilder性能略高,那还有没有其他细节上的特性呢?让我们从源码分析 StringBuffer和StringBuilder都继承了AbstractStringBuilder类 AbstractStringBuilder类关键源码 ...
2018-10-05 15:58:52
492
原创 深入源码分析String类
深入源码分析String类 String类基本情况 不可变类,使用了final修饰,不可被继承 一旦创建String对象,包含这个对象的字符序列不可被改变 底层使用字符数组 char value[] 实现类序列化接口,可序列化的 效率较低,其每次增删改操作都会重新创建一个新的String对象,会造成对象堆积,触发垃圾回收机制,若小范围对象生成,可能只会触发minor GC,大范围的话,就会触发...
2018-10-05 15:56:43
507
原创 Java Excel和CSV类型数据文件自动录入小工具
Excel和CSV类型数据文件自动录入小工具 GitHub链接 jar包和依赖包链接:https://pan.baidu.com/s/1QsA6wzu1ofIBbXQbXm9TAw 密码:tdop 依赖包 java8 dom4j-1.6.1.jar poi-3.7-20101029.jar (POI Excel文件处理) poi-ooxml-3.7-20101029.jar poi-oo...
2018-08-17 15:15:23
921
原创 理解Java中的多态和instanceof
多态 事物 存在的多种形态 多态的前提 有继承关系 有方法重写 有父类引用指向子类对象 多态成员访问特点 成员变量 编译看左边(父类),运行看左边(父类)。 成员方法 编译看左边(父类),运行看右边(子类)。动态绑定 静态方法 编译看左边(父类),运行看左边(父类)。 静态和类相关,算不上重写,只是子类运行时覆盖了父类的静态方法,所以访问还是看父类。 只有非静态成...
2018-08-01 17:29:20
822
原创 Java-缓存不可变类
不可变类 不可变类的意思是创建该类实例后,该实例的实例变量是不可改变的。 Java中的8个包装类和java.lang.String类都是不可变类,当创建它们的实例后,其实例变量不可改变。 如果需要创建自定义的不可变类,遵循以下规则: 使用private和final修饰符来修饰该类的成员变量 提供带参数构造器,用于根据传入参数来初始化类中的成员变量 仅为该类的成员变量提供getter方法,不...
2018-08-01 17:17:18
490
原创 全面理解Java中的final修饰符
final修饰符 final 可用于修饰类、变量和方法,用于表示它修饰的类、方法和变量不可改变。 final修饰的大都应用于基本类型域,或不可变类。 不可变类:如果类中的每个方法都不会改变其对象,这种类是不可变的类。例如String类。 对于可变类,使用final修饰只是表示存储在对象变量中的对象引用不会再指向其他对象,不过这个对象中的属性可以更改。 final修饰特点 修饰类时...
2018-08-01 17:15:30
3757
原创 Java中组合关系
组合 组合关系概述 实现类的复用除了继承外,还可以使用组合的方式,把该类当成另一个类的组合成分,从而允许新类直接复用该类的public方法。 不管继承还是组合,都允许在新类(对于继承就是子类)中直接复用旧类的方法。 组合是把旧类对象作为新类的成员变量组合起来,用以实现新类的功能,用户看到的是新类的方法,而不能看到被组合对象的方法。因此,通常要在新类里使用private修饰被组合的旧类对象...
2018-08-01 17:07:37
12414
原创 全面理解Java中继承关系
Java面向对象(三) 继承和final实例 继承 概述 继承是面向对象思想的三大特性之一,使类与类之间产生特殊 - 一般的关系,即is-a关系。 继承是从已有类中派生出新的类,新的类能吸收已有类的属性和方法,并且能拓展新的属性和行为。 在Java中使用extends关键字表示继承,语法表示为: class 子类 extends 父类{} 子类被称为派生类,父类又被称为超类。 子类...
2018-07-23 21:06:05
13182
1
原创 理解Java中的静态域、代码块和内存区域图
Java面向对象(二) 静态域、代码块和内存区域图 静态域 将域定义成static后,每个类中只有一个这样的域,与类相关的,也称为类成员。但是每个对象对于所有的实例域却都有自己的一份拷贝。 静态域会随着类的加载而加载并初始化,存在于方法区内存中的字节码文件的静态区域中。 优先于对象存在,先有方法区的类加载,后才可能会有堆内存的对象实例化。 静态域会被所有的对象共享,也称为共享区。 一般共...
2018-07-23 21:04:50
4445
3
原创 理解Java中的类与对象以及方法
Java面向对象(一) 类与对象以及方法 面向对象概述 面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。 在OOP中,不必关心对象的具体实现,只要能够满足用户的需求即可。 类 类是构造对象的模板或蓝图。 Java编写的所有代码都位于某个类的内部。 Java中的类文件时以.java为后缀的代码文件,在每个类文件中最多只允许出现一个public...
2018-07-23 21:03:11
1078
1
原创 理解Java中的线程组、线程池和Callable接口
线程组 线程组概述 线程池 为什么会有线程池?(线程池概述) 内置线程池 Future 接口 实现多线程的第三种方式 线程组 线程组概述 Java中用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。 默认情况下,所有的线程都属于主线程组。 public final ThreadGroup getThrea...
2018-07-17 20:31:58
707
原创 理解Java中的互斥锁ReentrantLock和Condition
互斥锁 Lock和sychronized机制的主要区别 Lock接口 lock unlock tryLock Condition接口 - 条件 await signal signalAll 一个实例 互斥锁 JDK1.5版本提供了java.util.concurrent.locks包,该包中提供了锁和等待条件的接口和类,可以用于代替JDK1.5之前的synchro...
2018-07-17 20:29:01
605
原创 Java中的多线程基础知识
JavaSE回顾-多线程基础知识整合 多线程 基本概念 程序(program) 进程(process) 线程(thread) Java中的线程 多线程的用处 时间片 并行和并发 同步和异步 临界区 阻塞和非阻塞 问题引入 多线程的实现方式 方式一: 继承Thread类 方式二:实现Runnable接口(常用,优点多) 为什么实例效果不明显? 多线程的两种实现方式的区别 匿名内部类实现线...
2018-07-17 20:21:43
453
原创 Java线程安全和死锁问题
线程安全 线程安全级别 常见的线程安全类 多线程中的线程安全问题 多窗口卖票问题 死锁问题 写一个死锁程序 避免死锁的方式 单例模式的线程安全问题 单例模式 饿汉式-线程安全 懒汉式-非线程安全 线程安全 如果你的代码在多线程下执行和在单线程下执行永远都能获得一样的结果,那么你的代码就是线程安全的 线程安全级别 1、不可变 像String、...
2018-07-11 18:08:39
1103
原创 Java多线程回顾-同步代码
同步代码 需要同步的情况 当多线程并发,有多段代码同时执行时,希望某一段代码执行的过程中,CPU不要切换到其他线程上,此时就需要同步。 如果有两段代码是同步进行的,那么同一时间只能执行其中一段,在一段代码没执行结束之前,不会执行另外一段代码。 同步代码块操作 使用synchronized关键字加上一个锁对象来定义一段代码,这就称为同步代码块。 如果多个同步代码块使用同一个锁对...
2018-07-11 18:03:42
269
原创 理解Java的线程的实例方法和线程状态转换图
线程相关实例方法 获取线程ID- getId 获取和设置线程的名字 线程对象是否处于活动状态 - isAlive 获取当前线程的对象 休眠线程-sleep 加入线程-join 让出线程-yield 设置线程优先级 中断线程-Interrupt 守护线程-Deamon wait()和notify()/notifyAll() wait() notify() notifyAll() ☆ sle...
2018-07-11 18:00:31
1189
原创 Java中多线程常用的两种方式和Callable方式
多线程的实现方式 方式一: 继承Thread类 Thread类实现了Runnable接口,在java.long包下。 创建执行线程方法一:将类继承Thread类,重写Thread类的run方法。接下来就可以分配并启动该子类的实例。 具体步骤: 继承Thread类 重写run方法 将执行的代码写在run方法中 创建Thread类的子类对象 使用start方法开启线程。 注意:调用run方...
2018-07-11 17:55:39
1660
原创 Java多线程的一些必备基本概念
多线程 基本概念 程序(program) 为了完成特定任务、用某种语言编写的一组指令的集合。即一段静态的代码,静态对象。 进程(process) 程序的一次执行过程,或者是正在运行的一个程序,是动态过程。 动态过程:有自身的产生、存在和消亡的过程。 程序是静态的,而进程是动态的。 线程(thread) 进程可以进一步细化为线程,是一个程序内部的一条执行路径。...
2018-07-11 17:51:11
218
原创 JavaSE回顾-基础语法
JavaSE 回顾-基础语法 1. Java语言的特性 1.1 简单性 1.2 面向对象 1.3 分布式 1.4 健壮性 1.5 安全性 1.6 体系结构中立 1.7 可移植性 1.8 解释型 1.9 高性能 1.10 多线程 1.11 动态性 2. Java 基本语法注意点 2.1 类名 2.2 main方法 2.3 注释 2.4 数据类型 2.4.1 整型 2.4.2 ...
2018-07-05 16:49:01
652
原创 Git的常用知识
Git的常用知识 1. Git的常用操作 1.1 本地库初始化 1.2 设置签名 1.2.1 项目级/仓库级别签名 1.2.2 系统用户级签名 1.2.3 级别优先级 1.3 基本操作 1.3.1 状态查看操作 1.3.2 添加操作 1.3.3 暂存区删除操作 1.3.4 提交操作 1.3.5 查看日志 1.3.6 前进后退 1.3.7 reset命令的三个参数对比 1.3.7 删除文件并...
2018-06-28 14:02:22
360
原创 Java8新特性-Stream API 常用完整版
流(Stream) 1. 流的概念 2. 流的操作步骤 2.1. 创建Stream 2.1.1 通过Collection 系列集合提供的串行流:stream()、并行流: paralleStream() 2.1.2 通过Arrays中的静态方法stream(T[] array) 获取数组流 2.1.3 通过Stream类中的静态方法 of() 2.1.4 使用Stream类的静态方法 iter...
2018-06-18 19:20:23
12223
3
原创 Java8新特性-方法引用、构造器引用和数组引用
1. 方法引用 1.1. 对象::实例方法名 1.2. 类::静态方法名 1.3. 类::实例方法名 2. 构造器引用 3. 数组引用 1. 方法引用 若lambda体中的内容有方法已经实现了,我们可以使用‘方法引用’, 可以理解为方法引用是lambda表达式的另外一种表现形式。双冒号形式 主要有三种语法格式 使用要求(注意点): - L...
2018-06-13 15:33:59
373
原创 mysql 按照指定字段的指定数据进行排序 filed函数
filed函数 filed(coulmn,str1,str2,str3…) tableA中有某一列columA,该列的值包含(0,1,2,3,4,5) 当前的需求为查询结果不包含3和5,且按2,1,0,4的规则进行排序 mysql的实现方式: select * from A where columA in(‘2’, ‘1’, ‘0’) order by FIELD(c...
2018-06-12 20:22:09
10151
1
转载 解决java下载文件中文文件名乱码问题(ie,谷歌,火狐)
解决java下载文件中文文件名乱码问题(ie,谷歌,火狐) response.setCharacterEncoding("utf-8"); response.setContentType("application/msword"); String fileName="设备.doc"; if (requ
2018-06-12 20:16:01
11010
6
原创 使用Jedis连接Redis3.x集群操作
一、实验环境:1.服务器为centos6.4版本系统2.redis安装版本为3.2.93.jedis版本为jedis-2.9.03.jedis依赖commons-pool包版本为commons-pool2-2.2.jar二、Jedis操作集群java测试代码:/** *@throwsException *redis3.x集群下的API存储 */ ...
2018-06-12 20:11:02
2529
原创 redis3.x集群-删除集群中的节点
1. 如果删除的节点是主节点,那么此节点中有哈希槽,需要把删除的节点中的哈希槽转移到其他节点中,执行下面命令,还是转移哈希槽的那个命令。1)先删除从节点# cd/usr/local/redis-3.2.9/src/# ./redis-trib.rb del-node 192.168.8.150:7000 90b99192b544286e67fdbf93d210ad98d51e14c3注意:其中的...
2018-06-12 20:10:15
1648
原创 redis3.x集群-添加新节点到集群中
1.新增一个redis,更改端口号为7006,同样放到7006文件夹中。[root@server redisCluster]#mkdir 7006[root@server redisCluster]# cp./7000/7000.conf ./7006/7006.conf[root@server redisCluster]#vi ./7006/7006.conf2.启动该redis节点服务。#...
2018-06-12 20:09:37
2615
原创 redis3.x集群的搭建
Redis3.x版本中加入了对集群的支持,其中包括sharding分片,支持master slave,支持atuo failover 自动故障切换。最主要的区别于早期3.x版本之前的是内部支持了atuo failover,当主机宕机后,备机会自动顶上变成主机。HashSolt(哈希槽)其中引入了HashSolt(哈希槽)的概念,即在集群搭建中,redis集群内部会自动地给集群中的各个redis节点...
2018-06-12 20:08:51
745
原创 Java8-Lambda表达式基础语法和内置四大核心函数式接口
Lambda表达式 1. 基础语法 1.1. 语法格式一 无参数,无返回值 1.2. 语法格式二 有一个参数,无返回值 1.3. 语法格式三 有两个或两个以上参数,有返回值 2. 函数式接口 2.1. 自定义一个函数式接口: 2.1.1 方案一:写具体实现方法再直接使用 2.1.2 方案二: 先使用lambda表示具体实现方法体,再进行接口中的方法调用,传入具体值: 3. Jav...
2018-06-12 20:04:41
2670
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅