自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Hashmap

常见的Hash表结构有:布隆过滤器、bitmap、HashSet、HashMap、ConcurrentHashMapJDK的HashMapHashMap不能由get是否为空来判断是否存在某个键如果key存在,那么覆盖,不存在则存入整个键值对。HashMap的一些参数默认初始化长度为16默认负载因子0.75当table被使用75%以上时会二倍扩容,是效率和空间的折中,比如ArrayList扩容1.5因为扩容代价比较小,HashMap需要reHash等等。transient Set<

2021-03-14 00:42:18 306

原创 Java并发_11 Callable

Future和CallableFuture和CallableRunnable和缺陷没有返回值不能抛出checked Exception为什么设计成这样Callable接口Future接口Callable和Future的关系Future的五个抽象方法Future代码演示get基本用法和lambda的Callable接口多个任务,使用Future数组获取结果永远抛出ExecutionException执行过程中的异常抛出和isDone线程池的submit方法返回Future对象用FutureTask来创建Fut

2021-03-03 16:38:36 562 1

原创 Java并发_10 AQS

AQSAQS为什么需要AQS ?AQS的作用AQS的重要性、地位AQS内部原理解析statestate表示的状态控制线程抢锁和配合的FIFO队列期望协作工具类去实现的获取/释放等重要方法获取释放应用实例、源码解析AQS在CountDownLatch中构造函数getCountcountDownawait总结AQS在Semaphore中AQS在ReentrantLock中unlocklock总结释放锁加锁AQS实现一次门闩AQSAbstractQueuedSynchronizer为什么需要AQS ?锁和

2021-03-03 16:37:33 722 1

原创 Java并发_9 控制并发流程

控制并发流程控制并发流程什么是控制并发流程?CountDownLatch倒计时门门两个典型用法主要方法注意点Semaphore信号量什么是信号量使用流程重要方法示例:其它用法一次性获取或释放多个许可证条件等待注意点Condition接口(又称条件对象)作用基本使用实现生产者消费者使用注意CyclicBarrier循环栅栏示例CyclicBarrier和CountDownLatch的区别作用不同:可重用性不同:结果:控制并发流程什么是控制并发流程?控制并发流程的工具类,作用就是帮助我们程序员更容易得让线

2021-03-01 19:54:31 644

原创 Java并发_8.2 并发容器

并发容器-2并发容器-2CopyOnWriteArrayList诞生的历史和原因适用场景读写规则CopyOnWriteArrayList可以在迭代过程中修改数组实现原理缺点源码分析数据结构使用的锁构造函数addget并发队列Queue (阻塞队列、非阻塞队列)为什么要使用队列并发队列简介QueueBlockingQueue各并发队列QueueBlockingQueue(继承queue的接口)deque:(double-ended queue)阻塞队列BlockingQueue阻塞功能∶最有特色的方法主要方法

2021-02-24 21:54:01 724

原创 Java数据结构 Hashmap

Hash表有:布隆过滤器、bitmap、HashSet、HashMap、ConcurrentHashMapJDK的HashMapHashMap不能由get是否为空来判断是否存在某个键如果key存在,那么覆盖,不存在则存入整个键值对。HashMap的一些参数默认初始化长度为16默认负载因子0.75当table被使用75%以上时会二倍扩容,是效率和空间的折中,比如ArrayList扩容1.5因为扩容代价比较小,HashMap需要reHash等等。数组中链表超过8转红黑树,为什么是8?这

2021-02-21 22:23:26 196

原创 Java并发_8.1 并发容器

并发容器-1并发容器-1并发容器概览集合类中进入历史的同步容器VectorHashtableCollections安全化HashMap和ArrayListConcurrentHashMap(重点)Map回顾Map接口:HashMap红黑树(了解,原因:联想到了ml的过拟合,泛化能力较弱)HashMap关于并发的特点为什么需要ConcurrentHashMap为什么不用Collections.synchronizedMap() 和Hashtable?为什么HashMap线程不安全?JDK7的Concurren

2021-02-21 22:20:07 635

原创 Java并发_7 final

final和不变性final和不变性什么是不变性( Immutable )final的作用早期现在3种用法:修饰变量、方法、类final修饰变量final instance variable(类中的final属性)final static variable (类中的static final属性)final local variable (方法中的final变量)总结final修饰方法final修饰类注意点不变性和final的关系怎么能够达到不可变栈封闭对final的理解测试那么如果使用方法获取的字符串那么也

2021-02-19 23:00:11 103

原创 Java并发_6 CAS

CASCAS什么是CAS算法本质应用场景乐观锁并发容器源码:分析Java如何利用CAS实现原子操作Unsafe缺点CAS的深度拓展CAS的ABA问题CAS的底层原理关于volatilelock前缀的作用volatile伪共享CAS什么是CASCompareAndSwap,是一种思想和算法,由CPU指令保证原子性。我认为V的值应该是A,如果是的话那我就把它改成B,如果不是A(说明被别人修改过了),那我就不修改了,避免多人同时修改导致出错。CAS有三个操作数︰内存值V、预期值A、要修改的值B,当且仅当

2021-02-19 19:21:09 366

原创 Java并发_5 原子类

原子类原子类什么是原子类,有什么作用?6类原子类纵览Atomic*基本类型原子类AtomicInteger的常用方法使用范例Atomic*Array数组类型原子类源码Atomic*Reference引用类型原子类把普通变量升级为原子类使用场景示例源码注意点Adder累加器(long)演示原因分析LongAdder带来的改进sum源码应用场景的区分Accumulator累加器源码使用场景原子类什么是原子类,有什么作用?java.util.concurrent.atomic中的都是原子类,具有不可分割的性

2021-02-19 19:14:47 466

原创 Java并发_4.2 锁

Java的锁-2共享锁和排它锁什么是共享锁和排它锁读写锁的作用读写锁的规则ReentrantReadWriteLock具体用法代码读锁和写锁的交互方式选择使用的规则公平非公平源码升降级总结自旋锁和阻塞锁概念缺点原理和源码分析自写自旋适用场景可中断锁锁优化Java虚拟机对锁的优化自旋锁和自适应锁消除锁粗化自我修炼优化锁共享锁和排它锁以ReentrantReadWriteLock读写锁为例什么是共享锁和排它锁排他锁,又称为独占锁、独享锁,synchronized也是独享排他锁。共享锁,又称为读锁,获

2021-02-18 20:06:07 540

原创 Java并发_4.1 锁

Java的锁-1Java的锁-1Lock接口简介为什么synchronized不够用?为什么需要Lock?方法介绍lock();tryLock();tryLock(long time, TimeUnit unit);lockInterruptibly();unlock()可见性保证happens-beforelock的可见性锁的分类思维导图乐观锁和悲观锁为什么会诞生非互斥同步锁互斥同步锁的劣势什么是乐观锁和悲观锁悲观锁乐观锁典型例子悲观锁:synchronized和lock接口乐观锁:原子类、并发容器Git

2021-02-17 15:35:54 702 1

原创 Java并发_3 ThreadLocal

ThreadLocal两大使用场景,用途场景1:场景2:1.当每个线程都需要某一个工具类的时候当每个线程都使用同一个工具类对象的时候ThreadLocal的第一种使用2.当每个线程都需要传递同一个参数时ThreadLocal解决信息共享ThreadLocal直接使用,然后各自赋值根据共享对象的生成时机不同,选择initialValue或set来保存对象。ThreadLocal的优点ThreadLocal原理主要方法:protected T initialValue()public void set(T va

2021-02-17 15:31:52 819 1

原创 Javase_2.6网络net

Javase 2.6 网络基础protocol–协议软件结构C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。两种架构各有优势,但都离不开网络。网络编程,就是在一定的协议下,实现两台计算机的通信的程序。网络通信协议TCP/IP协议: 传输控制协议/因特网互联协议( Transmission Control Protocol/Intern

2021-02-04 13:18:37 174

原创 Javase_2.5文件和IO

Javase 2.5 文件和IOFile类File类、递归、字节流、字符流、缓冲流、转换流、序列化流、打印流1.1 概述java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。获取当前工程路径System.out.println(System.getProperty("user.dir"));1.2 构造方法public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。pu

2021-02-04 13:15:17 251

原创 Javase_2.4多线程

Javase 2.4 多线程并发与并行并发:指两个或多个事件在同一个时间段内发生。并行:指两个或多个事件在同一时刻发生(同时发生)单核处理器的计算机肯定是不能并行的处理多个任务的,只能是多个任务在单个CPU上并发运行。同理,线程也是一样的,从宏观角度上理解线程是一起运行的,但是从微观角度上分析却是串行运行的,即一个线程一个线程的去运行,当系统只有一个CPU时,线程会以某种顺序执行多个线程,我们把这种情况称之为线程调度。线程与进程进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内

2021-02-04 13:08:46 173

原创 Javase_2.2异常

Javase 2.2 异常概念异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行.优点:将检测错误(抛出声明)从处理中分离出来。通过对根本逻辑上的问题进行抛出声明,比如除零;或者业务逻辑上不需要自己处理的,提醒调用者的一些问题抛出,比如你给的名字为空,但是没有名字不能进行;或者通过抛

2021-02-04 13:06:49 122

原创 Javase_2.1object_compare_clone

Javase_2.1 object_compare_cloneObject类:toString方法:print原理:打印对象public void println(Object x) { String s = String.valueOf(x);//对对象调用String中的valueOf synchronized (this) { print(s); newLine(); }}public static String valueOf

2021-02-04 13:05:03 141

原创 JavaWeb_MySQL_1.1基础

数据库的基本概念DataBase 简称:DB前端:展示等等后端:连接点:连接数据库JDBC,后面可以用mybatis。连接前端:servlet,spring ,spring mvc控制视图跳转,传数据给前端数据库: 存数据,持久化。txt,excel。数据库的特点:持久化存储数据的(对于内存中变量)。查询速度快,管理方便(对于文件)。本质还文件系统,以文件的形式保存在服务器上。方便存储和管理数据所有的关系型数据库都可以使用通用的SQL语句管理。DBMS databas

2021-01-28 12:45:34 193

原创 Java数据结构_Hashmap

Hash表:布隆过滤器、bitmap、HashSet、HashMap、ConcurrentHashMapJDK的HashMap如果key存在,那么覆盖,不存在则存入整个键值对。hashCodehashCode 表示对象在 hash 表中的位置,对于同一个对象来说,多次调用,返回相同的 hashCode。如果 Object.equal () 相等,Object.hashCode () 也必然相等。重写时也建议保证此特性。如果 Object.equal () 相等,这并不要求 Object.ha

2021-01-27 13:38:09 121 1

原创 Java并发_2 线程池

线程池线程池线程池简单方法:线程池的好处线程池适合应用的场合创建和停止线程池线程池构造函数的参数corePoolSize和maxPoolSize判断顺序特点:keepAliveTimeThreadFactoryWorkQueue线程池手动和自动创建的选择newFixedThreadPool在自动创建线程池的时候,会出现OOM情况newSingleThreadExecutorCachedThreadPoolnewScheduledThreadPool正确的创建线程池的方法线程数量设定为多少?停止线程池的正确

2021-01-16 22:20:17 93

原创 Java并发_1.2 多线程同步机制

基础:可见性:可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。**可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。**也就是一个线程修改的结果。另一个线程马上就能看到。比如:用volatile修饰的变量,就会具有可见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。

2021-01-16 22:04:42 83

原创 Java并发_1.1 工具分类

内容:1.并发工具:线程池:Excutor各种锁:悲观锁、乐观锁、共享锁、公平锁、可重入锁、自旋锁原子类:atomic包并发容器:ConcurrentHashMap、CopyOnWriteArrayList、各种阻塞队列2.两种战略:ThreadLocal:空间换时间final:以不变应万变3.两大原理:CAS原理AQS框架4.一种领导力并发流程控制能力并发工具分类:1.为了并发安全;为了线程安全(底层原理)互斥同步:使用各种互斥同步的

2021-01-16 21:49:30 1401

原创 Javase 包装类

包装类基本类型有8个,每个基本类型都有一个对应的封装类,每个封装类中都封装了对应的基本类型属性。包装类能让基本类型具有生命力,融入许多对应方法,可以用作泛型。byteshortintlongfloatdoublecharbooleanByteShortIntegerLongFloatDoubleCharacterBoolean8个封装类都重写了toString方法和equals方法,equals比较的不是地址了,比较的是对象封装的基本类型值构造

2021-01-16 21:36:19 188 1

原创 Javase_1.4.1 数组与集合

JavaSE 1.4.1 数组与集合:数组:动态初始化指定长度,静态初始化指定内容。数组一旦创建,长度无法改变。int[] arrayDynamic = new int[100]; //动态初始化int[] arrayA = {10,20,30}; //静态省略,不能拆分int[] arrayA1 = new int[]{10,20,30}; //静态初始化//静态初始化拆分int[] arrayA2;arrayA2 = new int[]{10,20,30}; 动态初始化数组

2021-01-16 21:15:43 204

原创 Java_String

String:不可变,每次变更都会产生新的对象,因此有性能问题;StringBuffer:解决了可变问题,线程安全;StringBuilder:解决了可变问题,非线程安全;子串是指原字符串的一部分,一整块;子序列指的是字符串在原字符串中每个字符顺序相同。String:lang,不需要import常量,创建之后永不可变。因此相同内容可以共享使用,节省内存。效果上是char[]型数组,但底层原理是byte[]字节数组。print的不是地址记忆:只要改变字符串就会返回一个String之前前面c

2021-01-14 14:42:08 339

原创 Javase_1.3API

Java 1.3 APIlang是language的缩写。只有java.lang包内不需要导包,别的包内都需要导。Scanner:Util因为Scanner是Util包(utility)所以需要importimport java.util.Scanner;Scanner的重载中没有无参构造方法。一般使用system.in 代表从键盘输入:Scanner sc = new Scanner(System.in);int num = sc.nextInt();String str = sc.

2021-01-14 13:37:53 148

原创 Javase_1.2面向对象

面向对象:三大特征:封装,继承,多态。(抽象)类(是一组相关属性和行为的集合):类是一类事物的秒速,抽象的;对象是一类事物的实例,是具体的。通常情况下,类不能直接使用,需要根据类创建一个对象,才能使用。import 包名称.类名称;import cn.zly.java02.demo.Student;如果和当前的类属于同一个class可以不导。创建:​ 类名称 对象名 = new 类名称();使用:对象名加点​ 若对象成员变量没有赋值,则输出默认值。1.成员变量直接定义在类当中,在方法

2021-01-14 13:35:54 199

原创 Javase_1.1fundation

JavaSE 1.1 基础知识关于数据基本类型概览byteshortintlongfloatdoublecharboolean8位16位32位64位32位64位16位8位下划线的作用数据太长,可以使用下划线分割方便浏览:100_000_000 。好看,没有实际效果。浮点数据格式化"%4.2f",number : %整个长度度.精度(小数点后面)转换码。浮点计算为什么不准:2进制无法表示十进制小数点,除不尽。如1/10,在16进制中为1

2021-01-14 12:52:33 176

空空如也

空空如也

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

TA关注的人

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