Java
子之乐鱼之乐
偷得浮生半日闲
展开
-
JMM Java内存模型
JMM Java内存模型1 CPU和内存的交互1.1.1 内存屏障(Memory Barrier)为什么需要内存屏障内存屏障的作用volatile型变量volatile型变量拥有如下特性2 Java内存区域2.1 五大内存区域2.1.1 程序计数器2.1.2 Java栈(虚拟机栈)2.1.3 本地方法栈2.1.4 堆2.2 对象的内存布局2.2.1 对象头【markword】2.2.2 实例数据2...转载 2019-08-13 13:36:59 · 316 阅读 · 0 评论 -
synchronized与ReenTrantLock详解
synchronized与ReenTrantLock详解相似点:功能区别:底层实现区别便利性区别细粒度和灵活度区别性能的区别:SynchronizedReentrantLock公平锁、非公平锁的创建方式:ReenTrantLock实现的原理:相似点:这两种同步方式有很多相似之处,它们都是加锁方式同步,而且都是阻塞式的同步,也就是说当如果一个线程获得了对象锁,进入了同步块,其他访问该同步块的线程...转载 2019-08-13 10:49:03 · 130 阅读 · 0 评论 -
Java中的锁分类
Java中的锁分类公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁偏向锁/轻量级锁/重量级锁自旋锁公平锁/非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反转或者饥饿现象。对于Java ReentrantLock而言,通过构造函数指定该锁是否是...转载 2019-08-13 11:00:37 · 77 阅读 · 0 评论 -
Java8日期处理
Java8日期处理使用示例示例 1、在 Java 8 中获取今天的日期示例 2、在 Java 8 中获取年、月、日信息示例 3、在 Java 8 中处理特定日期示例 4、在 Java 8 中判断两个日期是否相等示例 5、在 Java 8 中检查像生日这种周期性事件示例 6、在 Java 8 中获取当前时间示例 7、如何在现有的时间上增加小时示例 8、如何计算一周后的日期示例 9、计算一年前或一年后...转载 2019-08-13 09:26:22 · 106 阅读 · 0 评论 -
形参实参引用传递
Java中的形参和实参的区别以及传值调用和传引用调用参考资料1,Java实参和形参与传值和传引用https://blog.csdn.net/wanliguodu/article/details/556538762,Java中的形参和实参的区别以及传值调用和传引用调用https://blog.csdn.net/miniminiyu/article/details/520614011,名词...转载 2019-08-13 09:34:56 · 901 阅读 · 0 评论 -
原型模式
原型模式前言原型模式的定义与特点原型模式的结构前言在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。原型模式的定义与特点原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型...转载 2019-08-13 09:48:37 · 87 阅读 · 0 评论 -
深复制浅复制
深复制与浅复制:本质上都是基于原型模式的理念,复制本身即是以原对象的数据及结构为原型进行拷贝,深复制即是对于对象及其子对象(数据与结构)的完全克隆,而浅复制只是对对象本身克隆。Java中:浅复制只需对象实现cloneable接口即可,接口中对于clone()的实现即是浅复制;深复制则需重写clone()方法或自定义方法,一般最简单的深复制实现是将对象整个序列化为流式数据后再反序列化为O...原创 2019-08-13 09:52:30 · 141 阅读 · 0 评论 -
Java NIO内存映射文件
Java NIO 内存映射文件文件操作的四大方法文件操作的四大方法前提:内存的访问速度比磁盘高几个数量级,但是基本的IO操作是直接调用native方法获得驱动和磁盘交互的,IO速度限制在磁盘速度上 由此,就有了缓存的思想,将磁盘内容预先缓存在内存上,这样当供大于求的时候IO速度基本就是以内存的访问速度为主,例如BufferedInput/OutputStream等 而我们知道大多数OS...转载 2019-08-13 10:12:42 · 178 阅读 · 0 评论 -
流式文件操作
流式文件操作IO资源的自动释放流式文件内容追加流式文件读取读取文件最后一行(随机读取)清空文件IO资源的自动释放在try块中使用try( 申明及初始化IO资源 ) 数据流会在 try 执行完毕后自动被关闭;前提是,这些可关闭的资源必须实现 java.lang.AutoCloseable 接口。例子可见后面内容;流式文件内容追加 // 写一行 并 换行 private vo...原创 2019-08-22 19:21:59 · 488 阅读 · 0 评论 -
迭代器常见使用与集合遍历
迭代器常见使用手段前言List的遍历Map的遍历前言此处主要介绍对于List及Map的遍历方式。List的遍历 //第一种:for循环,指定下标长度,使用List集合的size()方法,进行for循环遍历 for (int i = 0; i < list.size(); i++) { String temp=list.get(i); ... } //第二种:...原创 2019-08-28 11:09:04 · 265 阅读 · 0 评论 -
简单的利用正则对字符串进行格式化并去除字母及中文字符外的特殊符号
样例 public static String replace(String str) { if(str==null){ return null; }else if(StringUtils.isBlank(str)){ return ""; } String regEx = "...原创 2019-08-28 11:14:09 · 669 阅读 · 0 评论 -
根据配置文件 ConfigurationProperties读取List、Map、Object、List Object 参数
前言在实际工程中,经常遇到有大段的硬编码数据,这些数据一般需要保存为List数组或者Map格式,但当这类型的硬编码数据达到一定量以后,就不适合放在代码文件中,而应该通过外部配置文件读取;这方面SpringBoot也提供了相关的支持,这边我主要总结了导入List或Map类型数据的使用方式及注意事项。List类型数据application.properties 中数据示例custom.con...转载 2019-08-29 11:16:27 · 4130 阅读 · 0 评论 -
Java进阶知识点博客阅读笔记
Java进阶知识点博客阅读笔记前言JAVA I/O字符串操作的线程安全性问题前言Java进阶知识点博客是一个非常好的知识点总结目录,这里主要按照个人需求挑选一些特定的内容进行进一步的学习、总结、归纳。JAVA I/O字符串操作的线程安全性问题1.首先明确String,StringBuffer,StringBuilder的区别:String是字符串常量,StringBuffer与Stri...原创 2019-08-29 13:58:12 · 191 阅读 · 0 评论 -
使用@Value注解注入值(配置文件读取)
0. 概述在 Spring 组件中使用 @Value 注解的方式,可以直接从 .properties,.yum 等配置文件获取配置信息便于实现项目的配置化运行。1. 配置方式1.1 使用1、@Value("#{configProperties[‘key’]}")2、@Value("${key}")1.2 默认值配置1、基础方式: ${key}:defaultvalue2. SpEL...原创 2019-08-30 14:47:07 · 4173 阅读 · 0 评论 -
多线程下ThreadLocal的使用
ThreadLocal入门ThreadLocal是什么首先,它是一个数据结构,有点像HashMap,可以保存key-value键值对,但是一个ThreadLocal只能保存一个,并且各个线程的数据互不干扰。ThreadLocal<String> localValue = new ThreadLocal();localValue.set("Here is a value");S...转载 2019-09-06 15:48:56 · 475 阅读 · 0 评论 -
Java知识图谱
java知识图谱转载 2019-08-13 09:17:37 · 106 阅读 · 0 评论 -
工厂模式
工厂模式简介定义工厂方法模式的优缺点工厂模式的结构简介在现实生活中社会分工越来越细,越来越专业化。各种产品有专门的工厂生产,彻底告别了自给自足的小农经济时代,这大大缩短了产品的生产周期,提高了生产效率。同样,在软件开发中能否做到软件对象的生产和使用相分离呢?能否在满足“开闭原则”的前提下,客户随意增删或改变对软件相关对象的使用呢?这就是本节要讨论的问题。模式的定义与特点定义工厂方法(Fa...转载 2019-08-12 20:19:25 · 84 阅读 · 0 评论 -
Java IO\NIO\AIO
Java IO\NIO\AIO概述同步与异步(synchronous/asynchronous)阻塞与非阻塞与IO结合BIO、NIO、AIO的概述一、IO流(同步、阻塞)1、概述2、分类3、字符流 (只用来处理文本数据)4、字节流 (用来处理媒体数据)5、Java Scanner类二、NIO(同步、非阻塞)三个主要组成部分(1)Channel(通道)(2)BuffercopyFile实例(NIO)...转载 2019-08-14 11:25:48 · 159 阅读 · 0 评论 -
随笔_一次使用阻塞队列进行线程并发控制的实践
一次使用阻塞队列进行线程并发控制的实践背景大致实现思路可能的问题背景目标:使用多线程消费来自kafka的数据要求:线程数可控制,代码简洁大致实现思路从Kafka分批拉取数据,每批数据分给多个线程并发处理(此处是公司包装的Kafka调用方式)并发控制分为两个部分:一方面对于封装的Kafka调用可以配置启用处理线程数,每个线程的执行是相对独立的(对于每个包内取出的数据采用平均分配的...原创 2019-08-20 13:30:26 · 178 阅读 · 0 评论 -
Java集合总结与比较
Java集合总结与比较1.线程安全的集合类:2. hashtable跟hashmap的区别3.扩容机制;4.简单的总结;5.获取异步的集合类的方式:1.线程安全的集合类:vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。statck:堆栈类,先进后出hashtable:...原创 2019-08-12 13:50:23 · 172 阅读 · 0 评论 -
Set主要实现类HashSet 与TreeSet和LinkedHashSet及其对比
HashSet 与TreeSet和LinkedHashSet的区别一、Set二、HashSet三、TreeSet四、LinkedHashSet一、Set 1.Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false。 2.Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说,只要两个对象用equals方法比较返回true,Se...转载 2019-08-12 13:36:45 · 411 阅读 · 0 评论 -
Map的主要实现类HashMap、HashTable、TreeMap及其对比
概要学完了Map的全部内容,我们再回头开开Map的框架图。第1部分 Map概括(01) Map 是“键值对”映射的抽象接口。(02) AbstractMap 实现了Map中的绝大部分函数接口。它减少了“Map的实现类”的重复编码。(03) SortedMap 有序的“键值对”映射接口。(04) NavigableMap 是继承于SortedMap的,支持导航函数的接口。(05) H...转载 2019-08-12 13:23:26 · 390 阅读 · 0 评论 -
List的三种实现类ArrayList、LinkedList、Vector及其对比
java中三种主要的List的实现类特性及其比较。转载 2019-08-12 11:38:46 · 549 阅读 · 0 评论 -
JavaCollection集合概览
该文章是要展示了java中集合类的主要框架与简单介绍转载 2019-08-12 11:29:35 · 190 阅读 · 0 评论 -
Java基础数据结构介绍
该概览主要讲述了Java中基础的数据结构,并不涉及具体实现与使用。相关内容来源于菜鸟教程介绍,https://www.runoob.com/java/java-data-structures.html转载 2019-08-12 10:26:58 · 104 阅读 · 0 评论 -
Java 操作集合的工具类:Collections
Java 操作集合的工具类:CollectionsCollectionsCollections对集合排序操作方法:(均为static方法)Collections对集合查找、替换方法集合 解决多线程并发访问集合时的线程安全问题CollectionsCollections 是一个操作 Set、List 和 Map 等集合的工具类Collections 中提供了一系列静态的方法对集合元素进行排序、...转载 2019-08-12 14:00:35 · 117 阅读 · 0 评论 -
迭代器使用(List/Map)
如何使用迭代器通常情况下,你会希望遍历一个集合中的元素。例如,显示集合中的每个元素。一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象,实现了Iterator 接口或ListIterator接口。迭代器,使你能够通过循环来得到或删除集合的元素。ListIterator 继承了Iterator,以允许双向遍历列表和...原创 2019-08-12 14:12:38 · 409 阅读 · 0 评论 -
开篇-知识结构概览
该篇博客主要用于整理个人已学习过或了解过的相关知识点;对于这些知识点应当按照各种内容的核心程度及需求层级逐步完成相关内容的同步及整理工作。 各个叶节点内容(可能也有部分中间节点的内容)主要采用单个博客的展示内容,并在完成单个博客的整理发布后在该篇提供统一的入口。原创 2019-08-12 10:28:47 · 190 阅读 · 0 评论 -
红黑树
https://www.cnblogs.com/ysocean/p/8004211.html图片较多建议连接查看 上一篇博客我们介绍了二叉搜索树,二叉搜索树对于某个节点而言,其左子树的节点关键值都小于该节点关键值,右子树的所有节点关键值都大于该节点关键值。二叉搜索树作为一种数据结构,其查找、插入和删除操作的时间复杂度都为O(logn),底数为2。但是我们说这个时间复杂度是在平衡的二叉搜索树上体...转载 2019-08-12 15:00:49 · 70 阅读 · 0 评论 -
单例模式
单例模式1. 使用Singleton的好处在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。2.应用场景:3.优缺点:4.注意事项:5.五种单例模式相关博客:1.https://blog.csdn.net/ljhljh8888/article/details/8017701/ 单例的好处2.https://www.cnblogs.com...原创 2019-08-12 20:04:05 · 141 阅读 · 0 评论 -
代理模式及反向代理
代理模式简介代理模式的定义与特点代理模式的优缺点代理模式的结构简介在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。在软件设计中,使用代理模式的例子也很多,例如,要访问的远程对象比较大(如视频或大...转载 2019-08-12 20:12:45 · 494 阅读 · 0 评论 -
JAVA8 Stream使用详解
Java8 新特性之 Stream 使用指南什么是 Stream关于 Stream(流),官方文档给出的描述是:Classes to support functional-style operations on streams of elements, such as map-reduce transformations on collections.翻译成中文也就是说:流是一个用于支持在元...转载 2019-09-09 13:40:06 · 473 阅读 · 0 评论