java汇总
文章平均质量分 63
汇总
郑能量TuT
这个作者很懒,什么都没留下…
展开
-
Elasticsearch安装,Linux单机
Elasticsearch安装,Linux单机原创 2022-07-27 17:36:57 · 246 阅读 · 1 评论 -
Java并发:CopyOnWriteArrayList实现原理及源码分析
CopyOnWriteArrayList实现原理及源码分析CopyOnWriteArrayList是Java并发包中提供的一个并发容器,它是个线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现,是一种读写分离的并发策略,我们也可以称这种容器为”写时复制器”,Java并发包中类似的容器还有CopyOnWriteSet。本文会对CopyOnWriteArrayList的...转载 2020-05-07 17:00:57 · 190 阅读 · 0 评论 -
Java并发:ConcurrentHashMap解读
Java7 基于分段锁的ConcurrentHashMapConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一些。整个 ConcurrentHashMap 由一个个 Segment 组成,Segment 代表”部分“或”一段“的意思,所以很多地方都会将其描述为分段锁。注意,行文中,我很多地方用了“槽”来代表一个 segment。简单理解...转载 2020-05-07 16:49:08 · 319 阅读 · 0 评论 -
Java并发:BlockingQueue解读
在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue首先,最基本的来说, BlockingQueue 是一个先进先出的队列(Qu...转载 2020-05-07 11:56:57 · 121 阅读 · 0 评论 -
Java并发:AtomicInteger源码分析——基于CAS的乐观锁实现
悲观锁与乐观锁我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换。切换涉及到清空寄存器,缓存数据。然后重新加载新的thread所需数据。当一个线程被挂起时,加入到阻塞队列,在一定的时间或条件下,在通过notify(),notifyAll()唤醒回来。在某个资源不可用的时候,就将c...转载 2020-04-26 12:34:56 · 146 阅读 · 0 评论 -
Java基础:Java容器之HashMap
HashMap 概述Map 是 Key-Value 对映射的抽象接口,该映射不包括重复的键,即一个键对应一个值。HashMap 是 Java Collection Framework 的重要成员,也是Map族(如下图所示)中我们最为常用的一种。简单地说,HashMap 是基于哈希表的 Map 接口的实现,以 Key-Value 的形式存在,即存储的对象是 Entry (同时包含了 Key 和 V...转载 2020-04-26 10:34:09 · 231 阅读 · 0 评论 -
Java基础:Java容器之ArrayList
ArrayList结构图ArrayList 是 java 集合框架中比较常用的数据结构了。继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化。允许 null 的存在。同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。ArrayList类简介1、Arra...转载 2020-04-21 16:44:20 · 175 阅读 · 0 评论 -
Java基础:java中HashSet详解
HashSet 的实现对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,查看 HashSet 的源代码,可以看到如下代码:public class HashSet<E> extends AbstractSet<E> implements Set&l...转载 2020-04-21 16:01:52 · 265 阅读 · 0 评论 -
Java基础:JAVA中BitSet使用详解
适用场景整数,无重复Bitset 基础Bitset,也就是位图,由于可以用非常紧凑的格式来表示给定范围的连续数据而经常出现在各种算法设计中。上面的图来自c++库中bitset的一张图。基本原理是,用1位来表示一个数据是否出现过,0为没有出现过,1表示出现过。使用用的时候既可根据某一个是否为0表示此数是否出现过。一个1G的空间,有 8102410241024=8.5810^9bit,也就...转载 2020-04-20 16:14:23 · 8109 阅读 · 0 评论 -
Java基础:JAVA Hashmap的死循环及Java8的修复
在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。 这个事情我4、5年前也经历过,本来觉得没什么好写的,因为Java的HashMap是非线程安全的,所以在并发下必然出现问题。但是,我发现近几年,很多人都经历过这个事(在网上查“HashMap Infinite Lo...转载 2020-04-20 15:37:15 · 1073 阅读 · 0 评论 -
Java基础:Java容器之LinkedList
定义实现List接口与Deque接口双向链表,实现了列表的所有操作,并且允许包括null值的所有元素,对于LinkedList定义我产生了如下疑问:1.Deque接口是什么,定义了一个怎样的规范?2.LinkedList是双向链表,其底层实现是怎样的,具体包含哪些操作?下文将围绕这两个问题进行,去探寻LinkedList内部的奥秘,以下源码是基于JDK1.7.0_79。结构类结构...转载 2020-04-20 15:01:31 · 177 阅读 · 1 评论 -
Java基础:java线程状态
线程的生命周期及五种基本状态上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点,Java中的多线程也就基本上掌握了。主要包括:Java线程具有五中基本状态新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就...原创 2020-04-17 14:45:05 · 20375 阅读 · 0 评论 -
Java基础:Java线程基础
操作系统中线程和进程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的...转载 2020-04-17 12:03:27 · 3222 阅读 · 0 评论 -
Java基础:攻破JAVA NIO技术壁垒2
SocketChannel说完了FileChannel和Buffer, 大家应该对Buffer的用法比较了解了,这里使用SocketChannel来继续探讨NIO。NIO的强大功能部分来自于Channel的非阻塞特性,套接字的某些操作可能会无限期地阻塞。例如,对accept()方法的调用可能会因为等待一个客户端连接而阻塞;对read()方法的调用可能会因为没有数据可读而阻塞,直到连接的另一端传来...转载 2020-04-17 11:51:46 · 124 阅读 · 0 评论 -
Java基础:攻破JAVA NIO技术壁垒1
现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。 学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能。再者,现在互联网的面试中上点level的都会涉及一下NIO或者AIO的问题(AIO下次再讲述,本篇主要讲述NIO),掌握好NIO也能帮助你获得一份较好的offer。 驱使博主写这篇文章的关键是网上关于NIO的文章并不是...转载 2020-04-16 18:11:16 · 164 阅读 · 0 评论 -
Java基础:Java IO流学习总结
IO是指对数据流的输入和输出,也称为IO流,IO流主要分为两大类,字节流和字符流。字节流可以处理任何类型的数据,如图片,视频等,字符流只能处理字符类型的数据。 IO流的本质是数据传输,并且流是单向的。Java流操作有关的类或接口:Java流类图结构IO流的分类字符流和字节流字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的...转载 2020-04-14 15:30:22 · 14458 阅读 · 0 评论 -
Java基础:面向接口编程详解
我想,对于各位使用面向对象编程语言的程序员来说,“接口”这个名词一定不陌生,但是不知各位有没有这样的疑惑:接口有什么用途?它和抽象类有什么区别?能不能用抽象类代替接口呢?而且,作为程序员,一定经常听到“面向接口编程”这个短语,那么它是什么意思?有什么思想内涵?和面向对象编程是什么关系?本文将一一解答这些疑问。面向接口编程和面向对象编程是什么关系首先,面向接口编程和面向对象编程并不是平级的,它并...转载 2020-04-03 15:14:43 · 10023 阅读 · 0 评论 -
Java基础:Java对象初始化过程
我们都知道,创建对象是由 new关键字调用构造方法 返回类实例。例如 : Person jack = new Person();这句话到底做了什么事情呢 ? 其实就是讲对象的初始化过程。1、 new 用到了Person.class,所以会先找到Person.class文件,并加载到内存中(用到类中的内容类就会被加载)2、执行该对象的static代码块(静态初始块)。(如果有的话,给Per...转载 2020-04-03 14:24:09 · 154 阅读 · 0 评论 -
Java基础:Java finally语句到底是在return之前还是之后执行?
网上有很多人探讨Java中异常捕获机制try…catch…finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下finally语句是不会被执行的try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。在t...原创 2020-04-03 14:18:44 · 25037 阅读 · 0 评论 -
Java基础:Java基础:Java的反射机制
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。【翻译于 官方文档】本篇将从以下几个方面讲述反射的知识:calss的使用方法的反射构造函数的反射成员变量的反射一、什么是class类在面向对象的世界里,万物皆对象。类是对象,类是ja...转载 2020-04-03 13:59:30 · 896 阅读 · 0 评论 -
Java基础:int与Integer区别
int与Integer的基本使用对比Integer是int的包装类;int是基本数据类型;Integer变量必须实例化后才能使用;int变量不需要;Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;Integer的默认值是null;int的默认值是0。int与Integer的深入对比(1)由于Integer变量实际上是对一个Integer对...转载 2020-04-03 11:10:25 · 5274 阅读 · 0 评论 -
Java基础:java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一
对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。本文参考java 泛型详解、Java中的泛型方法、 java泛型详解概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化...转载 2020-04-02 17:16:11 · 191 阅读 · 0 评论 -
Java基础:Java中重载与重写的区别
重载(Overloading)方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。重载的时候,方法名要一...转载 2020-04-02 16:37:18 · 61 阅读 · 0 评论 -
Java基础:Java 内部类和静态内部类的区别
内部类(Inner Class)和静态内部类(Static Nested Class)的区别:定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明 为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。外部类按常规的类访问方式使用内部 类,唯一的差别是...原创 2020-04-02 16:26:09 · 11361 阅读 · 0 评论 -
Java基础:Java 中的 ==, equals 与 hashCode 的区别与联系
概述== : 该操作符生成的是一个boolean结果,它计算的是操作数的值之间的关系equals : Object 的 实例方法,比较两个对象的content是否相同hashCode : Object 的 native方法 , 获取对象的哈希值,用于确定该对象在哈希表中的索引位置,它实际上是一个int型整数关系操作符 ==1、操作数的值基本数据类型变量在Java中有八种基本数据类型:...转载 2020-04-02 11:52:14 · 79 阅读 · 0 评论 -
Java基础:Java抽象类与接口的区别
谈谈Java抽象类与接口的区别?很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题。本文我们将仔细讨论这些话题。 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力。 在讨论它们之间的不同点之前,我们先看看抽象类、接口各自的特性。抽象类我们都知道在面向对象的领域一切都是对象,同时...转载 2020-04-01 17:36:11 · 124 阅读 · 0 评论 -
Java基础:谈谈final、finally、finalize的区别
final根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。 final类不能被继承,没有子类,final类中的方法默认是final的。 final方法不能被子类的方法覆盖,但可以被继承。 final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 fi...转载 2020-04-01 16:49:21 · 4434 阅读 · 0 评论 -
Java基础:面向对象六大原则
本文主要介绍了面向对象六大原则。单一职责原则(Single-Resposibility Principle)。“对一个类而言,应该仅有一个引起它变化的原因。”本原则是我们非常熟悉地”高内聚性原则”的引申,但是通过将”职责”极具创意地定义为”变化的原因”,使得本原则极具操作性,尽显大师风范。同时,本原则还揭示了内聚性和耦合生,基本途径就是提高内聚性;如果一个类承担的职责过多,那么这些职责就会相互...转载 2020-04-01 16:38:35 · 125 阅读 · 0 评论 -
Java基础:Java面向对象的特征
面向对象的三个基本特征是:封装、继承、多态。封装封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装的优点 1.将变化隔离 2.便于使用 3.提高重用性 4.提高安全性封装的缺点将变量等使用private修饰,或者封装进方法内,使其不能...转载 2020-04-01 15:56:53 · 114 阅读 · 0 评论