自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JUC - 控制并发流程

1. 什么是控制并发流程在我们不控制并发的时候,线程进可能跑,受线程调度器控制,而不受程序员控制;如果我现在想让一些线程先执行,一些线程在最后执行,就要使用并发流程的工具类,让线程之间相互合作,来满足业务需求;比如让线程A等待线程B执行完再执行等策略类作用说明Semaphore信号量,可以通过控制许可证的数量来保证线程之间的配合线程只有在拿到许可证后才能继续运行...

2020-03-31 21:58:14 198

原创 锁的分类

大部分图片来源不可不说的Java“锁”事1. 乐观锁与悲观锁悲观锁(互斥同步锁)悲观锁的思想就是,如果我不锁住这个资源,别人就会来争抢,就会造成数据结果的错误,所以每次悲观锁就会为了保证结果的正确性,在每次获取并修改数据的时候把数据锁住,让别人无法访问数据(典型的就是synchronizd和lock),但是这样的思想会有缺陷① 阻塞和唤醒会带来性能的劣势在线程的挂起与唤醒会发生上下文切...

2020-03-31 13:17:33 197

原创 JUC - 为了线程安全 - 读写锁

1. 共享锁和排它锁排它锁排它锁又称独占锁,获得了以后既能读又能写,,其他没有获得锁的线程不能读也不能写,典型的xynchronized就是排它锁共享锁共享锁又称读锁,获得了共享锁以后可以查看但无法修改和删除数据,其他线程也能获得共享锁,也可以查看但不能修改和删除数据在没有读写锁之前,那么我们虽然保证了线程安全,但是也浪费了一定的资源,因为多个读操作同时进行并没有线程安全问题Reent...

2020-03-31 12:38:13 254

转载 线程池源码分析

Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理1. 线程池架构① 最顶层的是一个Executor接口,仅定义了一个方法② 随后是ExecutorService,继承自Executor的接口,做了方法的扩展,可以说是真正的线程池接口看里面有一个submit方法,也是用于提交线程的,但是我们看在顶级接口Executor中的execute也是...

2020-03-30 16:32:06 144

转载 字典树

字典树1. 基本概念Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的基本性质:根节点不包含字符,除根节点...

2020-03-29 14:50:44 98

原创 SpringMVC - 适配器模式

1. 什么是适配器模式关于适配器模式可以详细信息可以看我写的这一篇适配器模式,这里简要概述一下:适配器模式就是为了解决已经存在的类的接口不符合我们的需求,从而使用适配器将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作2. SpringMVC中哪里使用了适配器关于SpringMVC执行流程的分析可以看SpringMVC执行流程,这里还是简单说...

2020-03-29 13:30:07 1003

原创 适配器模式

结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性1. 背景在现实生活中,经常出现两个对象因接口...

2020-03-29 12:35:21 131

原创 关于protected的理解

java的访问控制是停留在编译层的,也就是它不会在.class文件中留下任何的痕迹,只在编译的时候进行访问控制的检查。其实,通过反射的手段,是可以访问任何包下任何类中的成员,例如,访问类的私有成员也是可能的1. 我的问题对于protected,网上给的作用权限是这样说的:被 protected 修饰的成员对于本包和其子类可见,这样的说法太含糊,对我也造成了不小的困扰clone方法在Ob...

2020-03-27 22:12:40 758

转载 泛型

泛型就这么简单1. 什么是泛型Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常.泛型:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型2. 为什么要泛型早期Java是使用Object来代表任意类型的,但是向下转型有强转的问题,这样程序就不太安全首先,我们来试想一下:没有泛型,集合会怎么样Collec...

2020-03-27 20:44:28 118

原创 浮点数的精度丢失

Java BigDecimal详解1. 计算机如何保存浮点数根据IEEE 浮点标准,任意一个二进制浮点数V可以表示成下面的形式V = (-1)s× 2M × 2Es:符号位,s=0为正数,S=1为负数M表示有效的数字E表示指数位比如十进制的11.0,写成二进制就是1011.0,用IEEE标准表示就是(-1)0 × 1.011 × 23 ,s=0,M=1.011,E=3对于单精度...

2020-03-27 20:02:29 376

原创 最大公因数和最小公倍数

1. 最大公约数① 暴力穷举暴力穷举法的思路:从两个数之间找最小的数,然后用这个数往下减,若是两个数都能够被整除,那个数就是最大公约数int maxNumber(int m, int n) { int temp = m > n ? n : m; for (int i = temp; i > 0; i--) { if (m % i == 0 && n ...

2020-03-27 13:52:26 229

原创 Set

Set接口继承自Collection,是一个不允许出现重复元素,并且无序的集合,有两个很重要的实现HashSet和TreeSet1. 怎么判断对象是否相等要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢?这就是Object.equals方法了。但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了。也就是说,如果集合中现在已经有1000个元...

2020-03-25 19:16:43 83

转载 Java可变参数

Java 中的变长参数1. 什么是可变参数在 Java 5 中提供了变长参数,允许在调用方法时传入不定长度的参数。变长参数是Java的一个语法糖,本质上还是基于数组的实现void foo(String... args);void foo(String[] args);//方法签名([Ljava/lang/String;)V // public void foo(String[] ar...

2020-03-25 18:09:15 90

转载 Arrays.asList分析

Arrays.asList使用指南1. java.util.Arrays.asList() 的一般用法List 是一种很有用的数据结构,如果需要将一个数组转换为 List 以便进行更丰富的操作的话,可以这么实现:String[] myArray = { "Apple", "Banana", "Orange" }; List<String> myList = Arrays.asL...

2020-03-25 17:53:03 164

原创 JVM - 运行时数据区

1. 运行时数据区内部结构内存是非常重要的系统资源,是硬件和CPU的中间仓库和桥梁,承载着操作系统和应用程序的实时运行;JVM内存布局规定了Java在运行过程中内存申请,分配,管理的策略,保证了JVM的高效稳定运行,不同的JVM对于内存的划分方式和管理机制存在部分差异(比如方法区的不同)一个JVM的实例对应着一个Runtime实例,一个Runtime实例就相当于对应着一个运行时数据区2...

2020-03-25 12:47:37 345

原创 JVM - 类加载子系统

学习清单:深入探讨 Java 类加载器老大难的 Java ClassLoader 再不理解就老了好怕怕的类加载器1. 类加载子系统的作用类加载过程即是指JVM虚拟机把.class文件中类信息加载进内存,并进行解析生成对应的class对象的过程类加载器子系统负责从文件系统或者忘了中加载class文件,class文件在文件头有特定的标识(cafe baby)ClassLoade...

2020-03-24 13:42:54 446

转载 JVM - 从源码到机器码

转载JVM基础系列第4讲:从源代码到机器码,发生了什么?1. JVM的整体结构java虚拟机是用来解释jvm字节码文件的(为什么我不说java字节码,因为多语言自由编程的支持,只要被解释成符合标准的字节码文件的语言都能在jvm虚拟机上运行)2. 前端编译器: 从源代码到字节码对于 Java 虚拟机来说,输入的是字节码文件,而不是 Java 文件。那么对于 Java 语言而言,其实怎么将 ...

2020-03-24 09:34:02 941

转载 原型模式

原型模式(原型设计模式)详解1. 原型模式的定义与特点有些对象创建过程复杂,而且需要频繁修改,原型模式就是通过复制的方式进行快速创建,通过对创建的原型实例进行修改得到想要的实例例如,现在想要一套麻将,我先生产出一个原型,然后对这个原型进行复制,然后修改花色2. 原型模式的结构与实现由于 Java 提供了对象的 clone() 方法,所以用 Java 实现原型模式很简单原型模式包含以下主...

2020-03-23 20:41:52 68

原创 建造者模式

建造者模式在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 OPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计算机的采购员。生活中这样的例子很多,如游戏中的不同角色,其性别、个性、能...

2020-03-23 20:02:09 150

原创 JUC - 底层原理 - AQS

浅谈Java并发编程系列(九)—— AQS结构及原理分析1. AQS是干什么的最开始在jdk1.6以前只有synchronized的重量级锁,调用的是底层的native方法,也就是会去调用操作系统的函数,因为要操作操作系统的函数所以有用户态–>内核态的状态的切换,所以是重量级这个时候Doung Lea大哥看不惯了,开发了JUC这个包,让解决同步不要再去操作系统层面去做,可想而知比syn...

2020-03-22 23:00:28 426

转载 JVM内存结构 VS Java内存模型 VS Java对象模型

JVM内存结构 VS Java内存模型 VS Java对象模型1. JVM内存模型Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。其中有些区域随着虚拟机进程的启动而存在,而有些区域则依赖用户线程的启动和结束而建立和销毁JVM内存结构,由Java虚拟机规范定义。描述的是Java程序执行过程中,由JVM管理...

2020-03-21 18:36:38 138

原创 线程安全问题和锁 - 锁

2. 阻塞式的解决方案(synchronized,lock)2.1 synchronizedsynchronized (对象){ //临界区}synchronized保证了临界区的代码的原子性总的说来,synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分类,synchronized可作用于instance变量、ob...

2020-03-21 15:47:17 209

原创 线程的通讯

多个线程并发执行时,在默认情况下CPU是随机切换线程的,有时我们希望CPU按我们的规律执行线程,此时就需要线程之间协调通信1. 线程通信的方式概述|--休眠唤醒方式: |--Object的wait、notify、notifyAll |--Condition的await、signal、signalAll|--CountDownLatch:用于某个线程A等待若干个其他线程执行完之后,它才执行...

2020-03-21 15:17:28 101

原创 线程顺序输出

1. 固定运行顺序必须先 2 后 1 打印1.1 wait&notifypublic class WaitAndNotifyall { //用来同步的对象 public static Object lock = new Object(); // t2 运行标记, 代表 t2 是否执行过 public static boolean t2isprint = f...

2020-03-21 15:13:21 437

原创 Park & Unpark

Park & Unpark它们是 LockSupport 类中的方法// 暂停当前线程LockSupport.park(); // 恢复某个线程的运行 LockSupport.unpark(暂停线程对象)wait,notify 和 notifyAll 必须配合 Object Monitor 一起使用,而 park,unpark 不必park & unpa...

2020-03-21 15:02:01 361

原创 join

1. 为什么需要join()static int r = 0; public static void main(String[] args) throws InterruptedException { test1(); } private static void test1() throws InterruptedException { log.debug("开始");...

2020-03-21 14:32:13 143

原创 JUC - 为了线程安全 - 互斥同步 - ReentrantLock

ReentrantLock相对于 synchronized 它具备如下特点可中断 (可以在取消等待锁,终止等待)被动的避免死等对比synchronized,synchronized获得的锁不可中断,也就是说线程A一直在等待锁,可以让求他线程终止他的等待可以设置超时时间,被动的避免死等这个的意思是说,线程A等待锁,我们可以让大他再等待了一定时间后,如果还没等待的锁就放弃等待可...

2020-03-21 12:04:18 155

原创 wait和notify

wait和notifywait方法是当前拥有了锁的线程发现自己不满足自己想要的运行条件,于是释放锁,进入wait状态,等待满足条件以后被唤醒1. 为什么要使用wait和notify假设现在有一些员工(线程)要使用同一把算盘(共享资源)工作,为了保证线程的安全性,他们的老板就设置了一个房间(synchronized锁),在一个时间只有一个线程可以进入这个房间进行工作,但是现在,有一个员工小南进...

2020-03-21 10:35:04 125

原创 死锁

死锁死锁是指两个或两个以上的进程(线程)在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。如下图所示,线程 A 持有资源 2,线程 B ...

2020-03-21 09:01:06 469

原创 我实例化了接口?

在学习多线程的时候,遇到了这样一种创建线程的方法Thread t = new Thread(new Runnable() { @Override public void run() { //do something } });可是Runnable明明是一个接口啊,为什么我在...

2020-03-20 20:42:53 73

原创 HashMap的几个难点

1. 关于hash方法static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}当我们put的时候,首先计算 key的hash值,这里调用了 hash方法,hash方法实际是让key.hashCode()与...

2020-03-20 18:21:01 966

原创 抽象类和接口和多态

1. 抽象类抽象类是用来捕捉子类的通用特性的,从设计层面来说,抽象类是对类的抽象,是一种模板设计[public] abstract class ClassName { abstract void fun();}模板式设计就像ppt里面的模板,如果用模板A设计了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A了,如果它们的公共部分需要改动,则只需要改动模板A就可以...

2020-03-20 13:55:50 596

转载 数据库 - 范式

范式就是一张数据表的表结构所符合的某种设计标准的级别1NF符合1NF的关系中的每个属性都不可再分,一范式是关系数据库的基础,但字段是否真的不可拆分,根据你的设计目标而定如下就不符合1NF1NF是所有关系型数据库的最基本要求只满足1NF会存在一些问题,以下表为例① 数据冗余过大: 每一名学生的学号、姓名、系名、系主任这些数据重复多次。每个系与对应的系主任的数据也重复多次② 插入异...

2020-03-19 21:58:19 233

原创 数据库 - 视图

视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成1. 基本概念我理解的就是将一条select语句进行了封装,封装的结果就是一个视图,在使用者看来视图就是一个表(数据来源于里面select语句查询出来的结果),但...

2020-03-19 18:38:42 140

原创 数据库 - TCL - 事务

1. 事务的四大特性事务具有4个基本特征,分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Duration),简称ACID① 原子性事务的原子性是指事务必须是一个原子的操作序列单元。事务中包含的各项操作在一次执行过程中,只允许出现两种状态之一,要么都成功,要么都失败任何一项操作都会导致整个事务的失败,同时其它已经被执行的操作都将...

2020-03-19 18:01:20 140

原创 数据库 - DDL

DDL语言:Data Define Language数据定义语言,用于对数据库和表的管理和操作1. 库的管理创建数据库CREATE DATABASE stuDB;CREATE DATABASE IF NOT EXISTS stuDB;删除数据库DROP DATABASE stuDB;DROP DATABASE IF EXISTS stuDB;2. 表的管理2.1 创建表语法...

2020-03-19 17:56:28 136

原创 数据库 - DQL - 联合查询

联合查询说明:当查询结果来自于多张表,但多张表之间没有关联,这个时候往往使用联合查询,也称为union查询语法:select 查询列表 from 表1 where 筛选条件 unionselect 查询列表 from 表2 where 筛选条件 特点:1. 多条待联合的查询语句的查询列数必须一致,查询类型、字段意义最好一致,因为最后结果集的列名和表1的一致2. unio...

2020-03-19 17:22:23 119

原创 数据库 - DQL - 分页查询

分页查询应用场景:当页面上的数据,一页显示不全,则需要分页显示分页查询的sql命令请求数据库服务器——>服务器响应查询到的多条数据——>前台页面语法:select 查询列表from 表1 别名join 表2 别名on 连接条件where 筛选条件group by 分组having 分组后筛选order by 排序列表limit 起始条目索引,显示的条目数#①起...

2020-03-19 17:13:50 115

原创 数据库 - DQL - 子查询

子查询说明:当一个查询语句中又嵌套了另一个完整的select语句,则被嵌套的select语句称为子查询或内查询,外面的select语句称为主查询或外查询分类:按子查询出现的位置进行分类:|--select后面 要求:子查询的结果为单行单列(标量子查询)|--from后面 要求:子查询的结果可以为多行多列|--where或having后面 要求:子查询的结果必须为单列 |--单行...

2020-03-19 17:10:21 181

原创 数据库 - DML

DML(Data Manipulation Language)数据操纵语言:insert update delete 对表中的数据的增删改1. 插入语法:插入单行:insert into 表名(字段名1,字段名2 ,...) values (值1,值2,...);插入多行:insert into 表名(字段名1,字段名2 ,...) values (值1,值2,...),(值1,...

2020-03-19 14:12:17 125

空空如也

空空如也

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

TA关注的人

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