java
天高任鸟飞-海阔凭鱼跃
天高任鸟飞 海阔凭鱼跃
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LinkedBlockingQueue
import java.util.UUID;import java.util.concurrent.LinkedBlockingQueue;public class LinkedBlockingQueueTest { public static void main(String[] args) { try { LinkedBlockingQueue<String> linkedBlockingQueue = new LinkedBlock..原创 2022-02-03 22:47:27 · 850 阅读 · 0 评论 -
ArrayBlockingQueue
import java.util.UUID;import java.util.concurrent.ArrayBlockingQueue;public class ArrayBlockingQueueTest2 { public static void main(String[] args) { try { ArrayBlockingQueue<String> arrayBlockingQueue = new ArrayBlockingQ..原创 2022-02-03 22:11:42 · 580 阅读 · 0 评论 -
SLF4J和Logback和Log4j和Logging的区别与联系
前言 Java帝国在诞生之初就提供了集合、线程、IO、网络等常用功能,从C和C++领地那里吸引了大量程序员过来加盟,但是却有意无意地忽略了一个重要的功能: 输出日志。 对于这一点,IO大臣其实非常清楚, 日志是个很重要的东西, 因为程序运行起来以后, 基本上就是一个黑盒子,如果程序的行为和预料的不一致,那就是出现Bug了,如何去定位这个Bug 呢? 臣民们能用的工具有两个,第一个就是单步调试,一步步地跟踪,查看代码中变量的值, 这种办法费时费力, 并且只能在程...转载 2021-10-29 10:16:35 · 272 阅读 · 0 评论 -
hashmap
jdk7 hashmaphashmap的 成员变量有节点数组,加载因子,当前hashmap数据个数,扩展阀值(当元素个数达到这个阀值时就扩充)。默认加载因子是0.75,默认初始化大小是16,默认最大数量是2的30次方,因为int是4字节,32位,最高位是符号位,所以最多可以左移30位,而不能移动到处在最高位的符号位!。是由数组和链表实现的,根据key算出hashcode,根据hashcode和数组长度求余数得到数组下标,数组下标相同的构成同一个链表。下标相同的元素插入链表时采用的是头插法。hash原创 2020-10-11 03:15:32 · 160 阅读 · 1 评论 -
JDK8新特性
Lambda表达式用来替代匿名函数,可以将一个函数赋值给一个变量作为参数传入另一个函数,java的闭包原则:可推导就是可省略,比如说参数类型,返回值// 1. 不需要参数,返回值为 5 {}只有一行代码,可以省略() -> 5 // 2. 接收一个参数(数字类型),返回其2倍的值,()只有一个参数可以省略 x -> 2 * x // 3. 接受2个参数(数字),并返回他们的差值 (x, y) -> x – y // 4. 接收2个int原创 2020-09-13 22:52:54 · 166 阅读 · 0 评论 -
堆,阻塞队列,优先级队列
ArrayBlockingQueue :LinkedBlockingQueue (Integer.MAX_VALUE)SynchronusQueue(无锁,不存储元素)ConcurrentLinkedQueue (无锁)非阻塞,不能用于线程池,线程安全, 无界,入队不用等待cas(不用切换线程上下文,乐观锁) 长期占用CPUheadtail :指向最后一个或者倒数第二个节点平均入队两次tail移动一次,提高性能1、PriorityBlockingQueue数组,线程安全,排...原创 2020-09-10 22:36:45 · 238 阅读 · 0 评论 -
t != (t = tail) 可以为 true ?!
这个表达式出现在ConcurrentLinkedQueue的源码中,就是这么简短的一个表达式,搞的我是一头雾水,一脸懵逼。总是产生一种错觉,就是它应该永远为“false”。(在我心里括号最先执行,给t赋值tail,在比较左边t和右边t。)下面就来分析下 t != (t = tail) 为啥子可以为true.模拟一下场景:public class Test{ public static void main(String[] args) { Object t = new O转载 2020-09-10 22:35:38 · 570 阅读 · 0 评论 -
2020-09-06
一、Iterator和ListIterator的区别Iterator: 只能按次序从前往后遍历,只能读,ListIterator 1)允许我们向前、向后两个方向遍历 List; 2)在遍历时可以修改List 的元素 3)制定元素开始遍历二、CopyOnWriteArrayListCopyOnWriteArrayList 写时复制:写操作的时候,把List复制一份做写操作,操作完复制回去弱点: 弱一致性 浪费内存 三、Hash...原创 2020-09-06 23:44:42 · 115 阅读 · 0 评论 -
CopyOnWriteArrayList
特性public class CopyOnWriteArrayList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable {特性基本与arrayList一致,底层也是数组结构基本属性private static final long serialVersionUID = 8673264195747942595L;//序列化版本号//全局锁final transien原创 2020-09-06 23:23:33 · 174 阅读 · 0 评论 -
LinkedList
特性public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable1、继承于 AbstractSequentialList ,本质上面与继承 AbstractList 没有什么区别,AbstractSequentialList 完善了 AbstractList 中原创 2020-09-06 23:21:25 · 127 阅读 · 0 评论 -
Java 基本数据类型 及 == 与 equals 方法的区别
Java数据类型分为基本数据类型与引用数据类型。 1 基本数据类型byte:Java中最小的数据类型,在内存中占1个字节(8 bit),取值范围-128~127,默认值0short:短整型,2个字节(16 bit),取值范围-32768~32717,默认值0int:整型,用于存储整数,在内存中占4个字节,取值范围-2147483648~2147483647,默认值0long:长整型,在内存中占8个字节-2^63~2^63-1,默认值0Lfloat:浮点型,在内.转载 2020-09-06 22:54:14 · 191 阅读 · 0 评论 -
ArrayList
特性实现了三个标记接口:RandomAccess, Cloneable, java.io.Serializablepublic class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable1、RandomAccess支持随机访问(基于下标),为了能够更好地判断集合是ArrayList还原创 2020-09-04 09:48:01 · 257 阅读 · 0 评论 -
sleep,wait,await,park的区别,看这一篇就够了
引子大家知道,我最近在招人,今天遇到个同学,他的源码看过一些,然后我就开始了AQS连环问。我:说说AQS的大致流程?他:AQS包含一个状态变量,一个同步队列……balabala……互斥锁balabala,共享锁balabala……我:AQS中除了同步队列,还有什么队列?他:还有个Condition,Condition中有个条件队列……我:条件队列和同步队列有什么区别?他:条件队列balabala,然后调用LockSupport.park()进入休眠,等待被唤醒,……,balaba转载 2020-08-05 14:19:32 · 6714 阅读 · 6 评论 -
Unsafe类
Unsafe类的介绍Java中基于操作系统级别的原子操作类sun.misc.Unsafe,它是Java中对大多数锁机制实现的最基础类。请注意,JDK 1.8和之前JDK版本的中sun.misc.Unsafe类可提供的方法有较大的变化,本文基于JDK 1.8。sun.misc.Unsafe类提供的原子操作基于操作系统直接对CPU进行操作,而以下这些方法又是sun.misc.Unsafe类中经常被使用的:java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作,主转载 2020-07-25 13:33:23 · 1144 阅读 · 0 评论 -
JDK1.8 HashMap$TreeNode.rotateLeft 红黑树左旋
红黑树介绍1.节点是红色或黑色。2.根节点是黑色。3.每个叶子节点都是黑色的空节点(NIL节点)。4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点JDK1.8 HashMap$TreeNode.rotateLeft 红黑树左旋的图示如下...转载 2020-06-28 01:04:23 · 348 阅读 · 0 评论 -
java 补码反码
java 原码、反码、补码计算 以及 取反(~)运算1. 原码、反码、补码:(1)在Java中,所有数据的表示方式都是以补码形式来表示(2)正数:原码、反码、补码相同(3)负数:符号位为1,其余各位是对原码取反,然后整个数加1(4)~按位取反(反码加1称为补码。)步骤就是先求出这个数(因为java存的数是补码)的原码,然后对原码取反得到X,这个X就是我们要求的那个数的补码2. 取反(~)运算(1)n=37 ,二进制数就是 100101因为在Java中,所有数据的表示方式.原创 2020-06-26 00:01:55 · 402 阅读 · 0 评论 -
java中的关键字transient,这篇文章你再也不发愁了
https://baijiahao.baidu.com/s?id=1636557218432721275&wfr=spider&for=pc这个关键字的作用其实我在写java的序列化机制中曾经写过,不过那时候只是简单地认识,只要其简单的用法,没有深入的去分析。这篇文章就是去深入分析一下transient关键字。先给出这篇文章的大致脉络首先,介绍了transient的基本概念和基本用法、然后,介绍深入分析一下transient关键字,并介绍几个需要掌握的问题最后,来个总结.转载 2020-06-05 23:36:50 · 181 阅读 · 0 评论 -
java中使用Lambda表达式的5种语法
https://www.cnblogs.com/kangkaii/p/8419082.html1,标准写法思考下述情况:String[] arr = {"program", "creek", "is", "a", "java", "site"};Arrays.sort(arr, (String m, String n) -> Integer.compare(m.length(...转载 2019-11-01 14:35:11 · 1041 阅读 · 0 评论 -
Java工程师成神之路(2019正式版)
https://blog.youkuaiyun.com/hollis_chuang/article/details/87686522 主要版本 更新时间 备注v1.0 2015-08-01 首次发布v1.1 2018-03-12 增加新技术知识、完善知识体系v2.0 2019-02-19 结构调整,更适合从入门到精通;进一步完善知识体系; 新...转载 2019-02-19 17:38:13 · 2931 阅读 · 0 评论 -
理解线程池的原理
线程池源码分析转载 2018-07-13 17:42:32 · 319 阅读 · 0 评论 -
quartz 数据库表含义解释
https://blog.youkuaiyun.com/dqswuyundong/article/details/53084725一、表信息解析:1.1.qrtz_blob_triggers: 以Blob类型存储的触发器。1.2.qrtz_calendars:存放日历信息, quartz可配置一个日历来指定一个时间范围。1.3.qrtz_cron_triggers:存放cron类型的...转载 2019-09-10 14:27:18 · 1563 阅读 · 0 评论 -
Java 10的10个新特性,将彻底改变你写代码的方式!
Java 9才发布几个月,很多玩意都没整明白,现在Java 10又要来了。这时候我真想说:线上用的JDK 7,甚至JDK 6,而JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK 10……刚学Java的同学是不是感觉一脸蒙逼?就连我这个老司机也同样感觉如此!Java 更新越来越快,我们做技术的也要跟上步伐,不然总会慢别人一拍,这新东西从国外到国内应用一般要好几年的时间...转载 2018-08-17 14:48:06 · 210 阅读 · 0 评论 -
java运算符 与(&)、非(~)、或(|)、异或(^)
最近看HashMap源码,遇到了这样一段代码:1 static final int hash(Object key) {2 int h;3 return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);4 }于是我整理学习了以下知识:1.十进制转二进制...转载 2018-08-17 10:06:29 · 221 阅读 · 0 评论 -
Java并发之彻底搞懂偏向锁升级为轻量级锁
https://blog.youkuaiyun.com/fycghy0803/article/details/74910238 网上有许多讲偏向锁,轻量级锁的文章,但对偏向锁如何升级讲的不够明白,有些文章还相互矛盾,经过对jvm源码(biasedLocking.cpp)的仔细分析和追踪,基本升级过程有了一个清晰的过程,现将升级流程阐述如下: 因为偏向锁,锁住对象时,会写入对象头相应的标识,我们...转载 2018-08-17 09:37:26 · 1726 阅读 · 0 评论 -
单据号生成
com.yonyou.uap.billcode.AbstractBillCodeProvider#getBatchBillCodes com.yonyou.uap.billcode.AbstractBillCodeProvider#isgetRandomCode com.yonyou.uap.billcode.AbstractBillCodeProvider#getBillcode...原创 2018-07-31 09:45:18 · 807 阅读 · 0 评论 -
Mybatis源码分析----Mybatis数据源与连接池(1)
对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题。本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池。 本文首先会讲述MyBatis的数据源的分类,然后会介绍数据源是如何加载和使用的。紧接着将分类介绍UNPOOLED、POOLED和JNDI类型的数据源组织;期间我们会重点讲解POOLED类型的数据源和其实现的连接...转载 2018-07-13 16:43:16 · 327 阅读 · 0 评论 -
《Java虚拟机规范》阅读(三):Class文件格式
http://www.cnblogs.com/zhuYears/archive/2012/02/07/2340347.html 每一个Class都对应着唯一的一个类或借口的定义信息。这里,我们称为"Class文件格式"只是通俗的将任意一个符合有效的类或借口的格式这么称呼,但是它并不一定是以磁盘文件的形式存在。 每个Class文件都是由8字节为单位的字节流组成转载 2016-01-14 07:56:05 · 157 阅读 · 0 评论 -
《Java虚拟机规范》阅读(二):编译
http://www.cnblogs.com/zhuYears/archive/2012/02/03/2334131.html Java虚拟机通过系列类加载器加载Class文件,然后读取其中的字节码指令进行工作的。而Class文件则是通过Java编译器编译Java源代码得到的,如下图: 理解编译器是如何与Java虚拟机协同工作的,对编译器开发人员来说很有好处转载 2016-01-14 07:51:26 · 195 阅读 · 0 评论 -
《Java虚拟机规范》阅读(一):简介和Java虚拟机结构
http://www.cnblogs.com/zhuYears/archive/2012/01/31/2332754.html前言 说到学习jvm,其实我本人并不认为学习完以后会对目前工作有什么太大的帮助。但是为了深入了解java体系,使自己在看待问题上能够看到更本质的部分还是必须要学习的。同时对于自己的技术也是一个深入。 闲话少说,这个系列主要是阅读Java虚拟机转载 2016-01-14 07:46:12 · 216 阅读 · 0 评论 -
JAVA本地方法详解,什么是JAVA本地方法?
https://blog.youkuaiyun.com/wi__wi/article/details/51085907前言:JAVA中有两种方法:JAVA方法和本地方法JAVA方法是由JAVA编写的,编译成字节码,存储在class文件中本地方法是由其它语言编写的,编译成和处理器相关的机器代码本地方法保存在动态链接库中,即.dll(windows系统)文件中,格式是各个平台专有的JAVA...转载 2018-08-21 16:36:23 · 7264 阅读 · 0 评论 -
锁降级 以保证数据的可见性
https://blog.youkuaiyun.com/ibcve/article/details/79247807 读写锁ReentrantReadWriteLock简介ReentrantReadWriteLock是ReadWriteLock接口的实现,ReentrantReadWriteLock中有两个静态内部类:ReadLock读锁和WriteLock写锁,这两个锁实现了Lock接口,Ree...转载 2018-09-18 13:45:11 · 426 阅读 · 0 评论 -
logback的使用和logback.xml详解
https://www.cnblogs.com/warking/p/5710303.html一、logback的介绍Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch。它当前分为下面下个模块:logback-core:其它两个模块的基础模块 logback-classic:它是log4j的一个改良版本,同时它完整实现了s...转载 2018-10-19 10:26:21 · 138 阅读 · 0 评论 -
6 道 BATJ 必考的 Java 面试题
https://blog.youkuaiyun.com/luoyang_java/article/details/87785630题目一请对比 Exception 和 Error,另外,运行时异常与一般异常有什么区别?考点分析:分析 Exception 和 Error 的区别,是从概念角度考察了 Java 处理机制。总的来说,还处于理解的层面,面试者只要阐述清楚就好了。我...转载 2019-03-23 17:25:38 · 151 阅读 · 0 评论 -
深入理解Java对象的创建过程:类的初始化与实例化
https://blog.youkuaiyun.com/justloveyou_/article/details/72466416摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完成类的初始化。在类初始化过程中或初始化完毕后,根据具体情况才会去...转载 2019-03-23 16:24:29 · 135 阅读 · 0 评论 -
JAVA中的术语:句柄是啥意思
句柄的本质:一个唯一的整数,作为对象的身份id,区分不同的对象,和同类中的不同实例。程序可以通过句柄访问对象的部分信息。句柄不代表对象的内存地址。句柄和指针的区别:程序不能通过句柄直接阅读文件中的信息,指针是可以的。从所起的作用这点来说,句柄就是弱化后的指针,更安全,功能减少。如果句柄不再I/O文件中,毫无用处。...原创 2019-03-02 21:13:12 · 765 阅读 · 0 评论 -
Java中的main函数到底有什么功能呢?没有main函数其他都不能执行吗?
main()方法的声明为:public static void main(String args[])。必须这么定义,这是程序的入口,Java的规范。为什么要这么定义,和JVM的运行有关系。当一个类中有main()方法,执行命令“java 类名”则会启动虚拟机执行该类中的main方法。由于JVM在运行这个Java应用程序的时候,首先会调用main方法,调用时不实例化这个类的对象,而是...原创 2019-03-05 19:47:02 · 1712 阅读 · 0 评论 -
两种动态代理方式及其区别(代理模式)
https://blog.youkuaiyun.com/lz1170063911/article/details/79835248 什么是动态代理?假如我有一个user对象,该对象里面有4个方法,增、删、改、查,外界能直接调用这4个方法吗?拿百度来说,你能随便对百度上的内容进行增、删、改、查操作吗?你最多能执行查的操作,增、删、改的操作是不能执行的,你必须要加一个权限操作,应该看看你是否有权限执行...转载 2019-01-29 14:38:44 · 874 阅读 · 1 评论 -
java主线程捕获子线程中的异常
https://blog.youkuaiyun.com/wild46cat/article/details/80808555 本文主要参考:《think in java》好,下面上货。正常情况下,如果不做特殊的处理,在主线程中是不能够捕获到子线程中的异常的。例如下面的情况。package com.xueyou.demo.theadexceptiondemo; public class ...转载 2019-01-22 11:01:23 · 3877 阅读 · 0 评论 -
TCP长连接和短连接的区别
https://www.cnblogs.com/onlysun/p/4520553.html 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次挥手,所以说每个连接的建立都是需要资源消耗和时间消耗的 示意图: ...转载 2018-12-12 15:48:17 · 197 阅读 · 0 评论 -
https://www.cnblogs.com/dolphin0520/p/3932921.html
Java并发编程:线程池的使用https://www.cnblogs.com/dolphin0520/p/3932921.html Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为...转载 2018-11-20 13:57:24 · 529 阅读 · 0 评论
分享