精通JAVA
文章平均质量分 76
精通JAVA
会飞的IT蜗牛
当你的才华撑不起你的野心时,你就应该静下心来学习
展开
-
详解 Java 泛型
java原创 2023-02-06 17:58:00 · 298 阅读 · 1 评论 -
接口优化技巧,那叫一个优雅!
java 接口原创 2023-02-03 14:14:51 · 351 阅读 · 0 评论 -
灰度发布是什么?
java原创 2023-01-18 15:44:17 · 821 阅读 · 0 评论 -
优雅API接口设计
java API接口原创 2023-01-18 14:42:56 · 290 阅读 · 0 评论 -
HashSet和LinkedHashSet
一、HashSet实现原理总结HashSet的实现原理总结如下:①是基于HashMap实现的,默认构造函数是构建一个初始容量为16,负载因子为0.75 的HashMap。封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 PRESENT,它是一个静态的 Object 对象。②当我们试图把某个类的对象当成 HashM...原创 2022-03-13 08:06:58 · 886 阅读 · 0 评论 -
ArrayList和LinkedList实现原理
一、ArrayList实现原理ArrayList就是动态数组,ArrayList并不是线程安全的,允许 null 的存在,是有序的,初始容量大小为10,当超过容量后,会进行扩容,以原来容量的1.5倍来扩容,如之前的容量为10,下次扩容扩大到10 + 5,ArrayList的最大长度为 2^32 .当删除数组中间的元素,后面的元素都会向前移动。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝,这种操作的代价是很高的,因此,如果可预知数据量的多少...原创 2022-03-13 08:07:12 · 1362 阅读 · 0 评论 -
HashMap工作原理
HashMap 内部是如何存储数据的?工作原理是什么?java1.7 hashMap 底层实现是数组+链表.java1.8 hashMap 底层实现是数组+链表+红黑树.1、hashmap 是怎么保存数据的?在hashmap 中有这样一个结构Node implenets Map.entity{hashkeyvaluenext}当我们像hashMap 中放入数据时,其实就是一个Enity{...原创 2022-03-13 08:07:23 · 351 阅读 · 0 评论 -
BIO、NIO、AIO、 的原理及区别与应用场景
同步阻塞IO(JAVA BIO):BIO【同步阻塞】在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,其实就是服务端创建一个ServerSocket, 然后就是客户端用一个Socket去连接服务端的那个ServerSocket, ServerSocket接收到了一个的连接请求就创建一个Socket和一个线程去跟那个Socket进行通讯。接着客户端和服务端就进行阻塞式的通信,客户端发送一个请求,服务端Socket进行处理后返回响应,在响应返回前,客户端那边就阻塞等待,什么事情也...原创 2022-03-13 08:07:37 · 469 阅读 · 1 评论 -
list去重方法
List去重方案 方案一:借助Set的特性进行去重 方案二 : 利用set集合特性保持顺序一致去重 方案三 : 使用list自身方法remove()-->不推荐 方案四 : 遍历List集合,将元素添加到另一个List集合中 方案5 : 使用Java8特性去重 1.方案一:借助Set的特性进行去重/** * 去除重复数据 * 由于Set的无序性,不会保持原来顺序 * @param list */public static List<String&原创 2022-03-13 08:07:49 · 1579 阅读 · 0 评论 -
CAS原理
CAS的英文为Compare and Swap 翻译为比较并交换。CAS加volatile关键字是实现并发包的基石。没有CAS就不会有并发包,synchronized是一种独占锁、悲观锁,java.util.concurrent中借助了CAS指令实现了一种区别于synchronized的一种乐观锁。什么是乐观锁与悲观锁?悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样当第二个线程想拿这个数据的时候,第二个线程会一...原创 2022-03-14 07:28:17 · 388 阅读 · 0 评论 -
Java NIO 零拷贝
一、什么是零拷贝零拷贝描述的是CPU不执行拷贝数据从一个存储区域到另一个存储区域的任务,这通常用于通过网络传输一个文件时以减少CPU周期和内存带宽。二、零拷贝给我们带来的好处:减少甚至完全避免不必要的CPU拷贝,从而让CPU解脱出来去执行其他的任务减少内存带宽的占用通常零拷贝技术还能够减少用户空间和操作系统内核空间之间的上下文切换三、Linux系统的“用户空间”和“内核空间”从Linux系统上看,除了引导系统的BIN区,整个内存空间...原创 2022-03-14 07:28:38 · 1072 阅读 · 0 评论 -
SPI机制是什么?
一、SPI机制是什么?spi全称为 (Service Provider Interface),是JDK内置的一种服务提供发现机制。SPI是一种动态替换发现的机制,一种解耦非常优秀的思想。spi的工作原理: 就是ClassPath路径下的META-INF/services文件夹中, 以接口的全限定名来命名文件名,文件里面写该接口的实现。然后再资源加载的方式,读取文件的内容(接口实现的全限定名), 然后再去加载类。spi可以很灵活的让接口和实现分离, 让api提供者只...原创 2022-03-14 07:28:59 · 17885 阅读 · 4 评论 -
Get 和Post请求的区别
GET和POST是HTTP请求的两种基本方法最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。HTTP协议中的两种发送请求的方法HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,...原创 2022-03-14 07:29:15 · 124 阅读 · 0 评论 -
HTTP与HTTPS的区别
一、HTTP与HTTPS的区别HTTP 的URL 以http://开头,而HTTPS 的URL 以https://开头 HTTP 是不安全的,而 HTTPS 是安全的 HTTP 标准端口是80 ,而 HTTPS 的标准端口是443 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层 HTTP 无法加密,而HTTPS 对传输的数据进行加密 HTTP无需证书,而HTTPS 需要CA机构wosign的颁发的SSL证书二、什么是Http协议无状态协议?怎么解决H..原创 2022-03-14 07:29:45 · 699 阅读 · 0 评论 -
IPv6和IPv4的区别
IPv6和IPv4的区别:其实是IP地址数量不同。IPv6,顾名思义,就是IP地址的第6版协议。我们现在用的是IPv4,你的外网地址可能是这样一串数字:59.123.123.123。IPv4的地址是32位,总数有43亿个左右,还要减去内网专用的192、170地址段,就更少了。IPv6的地址是128位的,大概是43亿的4次方,地址极为丰富,几乎是取之不尽的,打个比方,地球上的每一粒沙子都能分配到自己的地址。目前上网是共用公网IP,换成IPv6之后,连路灯都可以有独立IP。...原创 2022-03-14 07:29:31 · 784 阅读 · 0 评论 -
从地址栏输入URL到显示页面都发生了什么?
主要分下面六步:1、DNS解析2、TCP连接3、发起HTTP请求4、处理请求5、浏览器渲染6、TCP连接断开1、DNS解析如我们在浏览器中输入www.atest.com,浏览器会发送一个DNS查询请求报文,其内容为域名www.atest.com 所对应的IP地址是什么?DNS 的查询请求报文需要使用运输层的UDP协议封装成UDP用户数据报文,其首部中的源端口字段值在短暂端口号49151~65535中挑选一个未被占用的端口号用来表示DNS客户端进程进程,例如...原创 2022-03-14 07:30:12 · 360 阅读 · 0 评论 -
TCP与UDP的区别
一、前言TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。二、TCP/IP网络模型计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。TCP/IP 是互联网相关的各类协议族的总称,比如:TCP,UDP,IP,FT...原创 2022-03-14 07:29:59 · 70932 阅读 · 7 评论 -
Java关键字final、static使用总结
一、final根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。final类不能被继承,没有子类,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。final不能用于修饰构造方法。注意:父类的private成员方法是不能被子类方法覆盖的,因此pr...原创 2022-03-14 07:30:38 · 810 阅读 · 0 评论 -
TreeMap排序是怎么样的?
1.TreeMap是如何实现去重和排序的?TreeMap实现了SortedMap接口,它是一个key有序的Map类。TreeMap的默认排序规则:TreeMap并不是根据插入的顺序来排序,而是根据key元素的 compareTo 方法来排序。Map<Integer, Object> map = new TreeMap<>();map.put(5, new Object());map.put(10, new Object());m...原创 2022-03-14 07:30:55 · 10196 阅读 · 0 评论 -
hashmap面试题
hashmap1.8中的hash函数简单的说就是对key做hashCode操作,然后将得到的32为散列值向右位移16位,再与hashCode做异或计算。实质上是把一个数的低16位与他的高16位做异或运算static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}首先 h = ...原创 2022-03-17 16:34:35 · 1690 阅读 · 0 评论 -
volatile是否存在伪共享问题?
1.什么是伪共享和共享?在探讨LongAdder是如何解决伪共享问题之前,我们要先梳理清一个概念,什么是伪共享和共享?共享在Java编程里面我们可以这样理解,有一个Share类,它有一个value的属性。如下:public class Share{ int value;}我们初始化Share的一个实例,然后启动多个线程去操作它的value属性,此时的Share变量被多个线程操作的这种情况我们称之为共享。大家都知道...原创 2022-03-12 14:51:04 · 539 阅读 · 0 评论 -
volatile的原理
一、前言 volatile关键字是Java虚拟机提供的的最轻量级的同步机制,它作为一个修饰符,用来修饰变量。它保证变量对所有线程可见性,禁止指令重排,但是不保证原子性。volatile是如何保证可见性的呢?我们先来看下java内存模型(jmm)Java虚拟机规范试图定义一种Java内存模型,来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台上都能达到一致的内存访问效果。 为了更好的执行性能,java内存模型并没有限制执行引擎使用处理器的特定寄...原创 2022-03-12 14:47:11 · 166 阅读 · 0 评论 -
垃圾回收器
一、垃圾回收器1.Serial 年轻代 串行回收器,采用的是复制回收算法 ,单线程的2.PS(Parallel Scavenge) 年轻代 并行回收器,采用的是复制回收算法,多线程的3.ParNew 年轻代,配合CMS的并行回收,采用的是复制回收算法,多线程的4.Serial Old 老年代,串行回收器,采用的是标记整理回收算法,单线程的5.Parallel Old 老年代,并行回收器,采用的是标记整理回收算...原创 2022-03-12 09:09:13 · 230 阅读 · 0 评论 -
JVM基本原理,内存模型
一、前言根据 JVM 规范,JVM 内存共分为虚拟机栈VM stack、堆heap、方法区Method Area、程序计数器Program Counter Register、本地方法栈Native Method Stack五个部分。如下图,咋们分别对这五个区域进行详细的原理讲解。方法区:它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译(JIT)后的代码等数据。由于程序中所有的线程共享一个方法区,所以访问方法区的信息必须确保线程是安全的。如果有两个线程同时...原创 2022-03-12 08:57:21 · 204 阅读 · 0 评论 -
ArrayList.contains(Object)
查看list中是否有这个值,时间复杂度是 O(n)底层实现:public boolean contains(Object o) { return indexOf(o) >= 0;}遍历了n次public int indexOf(Object o) { if (o == null) { for (int i = 0; i < size; i++) if (elementData[i]==null)原创 2022-03-12 07:48:47 · 102 阅读 · 0 评论 -
ArrayList底层(1.7和1.8)变化
jdk1.7:当实例化ArrayList时,创建长度为10的object[ ] ;jdk1.8:当实例化是,创建object[ ] ,初始化为 { },并没有长度。当添加第一个元素时,创建长度为10的数组。1.7类似,饿汉式1.8类似,懒汉式1.8的优点:延迟数组的创建,节省内存....原创 2022-03-12 07:49:13 · 458 阅读 · 0 评论 -
hashMap1.8做了哪些优化?
一、数据结构最大的变化就是,数据结构做了优化。在Java1.7中,HashMap的数据结构为数组+单向链表。Java1.8中变成了数组+单向链表+红黑树。jdk1.7:插入key-value时主要有两个步骤:1.根据key的hash值,找到key-value要存放的桶(bucketIndex),也就是对应数组元素的下标。2.当不同key发生哈希冲突时,key-value会以单向链表的形式存储,并使用头插法插入。jdk1....原创 2022-03-09 14:57:17 · 2321 阅读 · 0 评论 -
双亲委派机制的原理?为什么要使用双亲委派机制?有什么缺点,可以打破这个机制吗,如何打破?
一、类加载器类加载器是分层级的,遵循**双亲委派**机制:最上层是**Bootstrap ClassLoder**,加载java的**核心类库**,加载java安装目录下的**lib目录**的class文件第二层是**Ext ClassLoder**,加载一些java的**其他类库**,加载java安装目录下的**lib/ext**目录下的class第三层是**Application ClassLoder**,应该程序类加载器,这个类加载器是...原创 2022-03-08 15:33:40 · 378 阅读 · 0 评论 -
Java中ArrayList remove会遇到的坑
List.remove()有两个:一个public E remove(int index);一个 public boolean remove(Object o);如果按照数组下标删除,则返回删除的值,如果按照数组对象删除,则返回true or flase这个方法是删除第一个Obejct1.遍历移除listpublic static void main(String[] args) { List<Integer> array ...原创 2022-03-09 15:12:19 · 1190 阅读 · 0 评论 -
面试官:详细说说你对序列化的理解
一、前言凡事都要问为什么,在讲解序列化概念和原理前,我们先来了解一下为什么需要序列化。二、为什么要序列化?如果光看定义我想你很难一下子理解序列化的意义,那么我们可以从另一个角度来感受一下什么是序列化。都玩过游戏么?玩过的同学应该知道游戏里有一个叫『存档』的功能,每次不想玩的时候可以把当前进度存档,下次有时间想玩的时候,直接载入存档就可以接着玩了,这样的好处是之前的游戏进度不会丢失,要是每次打开都重新玩估计大家也没什么耐心了。...原创 2022-03-10 06:00:38 · 189 阅读 · 0 评论