CoreJava
文章平均质量分 81
恐龙弟旺仔
保持热爱,保持进步
展开
-
非Spring环境下的自定义加载配置文件(分层次加载)
前言: 上一篇文章中,我们讲了如何在Spring环境下自定义加载配置文件。 毕竟现在Spring开发是一种通用方式,项目中不使用Spring的还真是不多见。 但是有一种情况,就是如果我们开发的是一个通用中间件产品,最少依赖原则,希望用户依赖最少,那么基于该需求,笔者就简单介绍下如何在非Spring环境下自定义加载配置文件。环境准备: 当然,m...原创 2020-03-07 13:38:04 · 1471 阅读 · 0 评论 -
序列化与反序列化的那些事
前言: 昨天开始构思要写一篇文章来说明一下序列化与反序列化。 因为看到zookeeper的自定义序列化Jute,而且还自定义了通信协议。 之前感觉这些都我来说都是很牛逼的存在,从来没想过要做这些东西,但是仔细一想,好像也么有很难实现的地方吧,当然这都是后话,我们先一点点分析,先写一下序列化与反序列化的事情,后面再手撸一个RPC的调用。1.为什么需要序列化?...原创 2020-02-24 22:28:27 · 292 阅读 · 0 评论 -
JDK源码解析之ArrayList
前言: 之前写了关于Mybatis、Spring、Tomcat的源码解析,现在准备开始写一下JDK的源码解析系列文章。 网络上已经有很多大神级的JDK类解析文章,相比而言,无论是深度还是文笔都让笔者自惭形秽。 但是为了让自己对JDK源码的印象更加深刻,所以还是准备献丑了。 从自己的角度来描述一下对JDK相关类的理解,欢迎指正 从网络上截一个图...原创 2019-01-08 16:07:10 · 388 阅读 · 0 评论 -
JDK源码解析之LinkedList
前言: 上一篇博客 介绍了我们最常用的一种集合类型ArrayList,看完源码之后,我们知道,其底层是基于数组来实现的。 今天介绍一下另外一种List,底层是基于链表来实现的。 从网络上截一个图(如有侵权,请联系作者),简单表示下链表结构 可以看到,证个链表有head和tail元素,每一个元素都有element(当前元素值)、pre(指向上一个元素)、...原创 2019-01-08 16:11:57 · 328 阅读 · 0 评论 -
JDK源码解析之CopyOnWriteArrayList
前言: 之前介绍了关于List的常用两种实现类:ArrayList、LinkedList。也从源码的角度介绍下这两种List的使用场景。 但是在多线程的场景中,这两种List类型就不适合使用了。我们需要使用多线程安全的List类来完成集合操作。 JDK也会我们提供了线程安全的List。本篇文章就介绍下Vector和CopyOnWriteArrayList...原创 2019-01-08 16:17:17 · 431 阅读 · 0 评论 -
JDK源码解析之Stack
前言: Stack一般来说用的比较少点,因为其数据结构特殊性,所以在一些特殊的场景,还是能发挥出巨大作用的。 Stack(栈):参照java.util.Stack的注释来看,它具有后进先出的特性(LIFO)。 从网络上截一个图(如有侵权,请联系作者),简单表示下链表结构 可以看到,其主要操作就是入栈和出栈操作,a0元素是最早入栈的,现在在栈底,an是最后...原创 2019-01-08 16:20:37 · 351 阅读 · 0 评论 -
JDK源码解析之Queue与其实现类PriorityQueue
前言: 前文介绍了Stack这种数据结构类型,它符合后进先出(LIFO)的操作顺序。 今天介绍与其相反操作顺序的一种数据结构,Queue(队列),它符合先进先出(FIFO)的操作顺序 从网络上截一个图(如有侵权,请联系作者),简单表示下队列结构 a1是最先进入队列的元素,现在排在队头,an是最后入队的元素,排在队尾 执行出队操作的时候,最先进...原创 2019-01-08 16:24:25 · 368 阅读 · 0 评论 -
JDK源码解析之ArrayBlockingQueue
前言: 之前介绍的关于Queue的实现类,LinkedList、PriorityQueue都是非线程安全的队列,那么有没有线程安全的Queue实现类呢? 当然是有的,在java.util.concurrent中有几个关于Queue的线程安全实现/** * @see java.util.concurrent.ArrayBlockingQueue * @see java....原创 2019-01-08 16:30:59 · 355 阅读 · 0 评论 -
JDK源码解析之AbstractQueuedSynchronizer
前言: JDK中的锁大致可以分为两类:Synchronized和CAS。 CAS的使用中,有直接使用的,比如AtomicInteger;有间接使用的比如ReentrantLock。关于AtomicInteger的分析可参考笔者的上一篇博客: CAS间接实现的典型代表是ReentrantLock和ReentrantReadWriteLock。 本文先不具体介绍...原创 2019-01-15 17:56:58 · 372 阅读 · 0 评论 -
JDK源码解析之AtomicInteger及CAS
前言: JDK中的锁大致可以分为两类:Synchronized和CAS。 CAS的使用中,有直接使用的,比如AtomicInteger;有间接使用的比如ReentrantLock。 本文就说一下直接使用CAS的AtomicInteger类,看其是如何直接使用的 1.CAS CAS是Compare and Swap(比较并交换)的简称 CAS...原创 2019-01-15 18:00:44 · 371 阅读 · 0 评论 -
JDK源码解析之ReentrantLock
前言: 之前说过,JDK有两种锁的方式,一种是Synchronized,一种就是CAS 基于CAS实现的Unsafe我们无法直接使用,我们一般就是使用ReentrantLock来实现锁的功能 那么本文我们就来看下ReentrantLock是如何实现CAS锁的 建议读者也看一下关于AbstractQueuedSynchronizer的源码解析,AQS作为...原创 2019-01-15 18:06:12 · 406 阅读 · 0 评论 -
JDK源码解析之HashMap
前言: 关于HashMap的源码解析网上已经有很多大神级别的文章,看的笔者心生敬佩,真心不敢写了。 但是每次聊到HashMap的时候,总会有知识点是模糊的,应该还是眼高手低的缘故,所以还是决心写一下(很多参考大神的文章) 注意:笔者的JDK是1.8.3版本的,所以包括之前写的JDK源码解析系列都是这个版本的 1.有关于哈希表 哈希表这种数据结构,本质...原创 2019-01-10 11:08:28 · 451 阅读 · 0 评论 -
JDK源码解析之LockSupport
前言: 之前关于AQS和ReentrantLock的介绍中,在获取锁和释放锁的操作中,有一个类被反复使用到,就是LockSupport.java 在AQS.lock()方法中,调用到了LockSupport.park(Object blocker)方法 在AQS.unlock()方法中,调用到了LockSupport.unpark(Thread thread)方法...原创 2019-01-16 12:01:01 · 442 阅读 · 0 评论 -
JDK源码解析之ThreadPoolExecutor
前言: 线程池的使用在java开发中屡见不鲜,我们一般会这样使用// 1.创建一个固定线程数的线程池ExecutorService threadPool = Executors.newFixedThreadPool(5);// 2.提交任务threadPool.submit(new Runnable() { @Override public void run(...原创 2019-01-17 16:25:42 · 453 阅读 · 0 评论 -
JDK源码解析之HashSet
前言: 集合类型三巨头:List、Set、Map 在之前的博客中已经讲了关于List的实现类、Map的实现类,现在还有Set相关的没有介绍过了。 为什么先介绍Map后介绍Set呢?按理说Set应该比Map的实现更简单点啊? 当然,这是笔者的一点小心思,看过源码的都知道,Set是基于Map来实现的,所以想了解Set,必须先了解Map ...原创 2019-01-10 17:32:54 · 257 阅读 · 0 评论 -
JDK源码解析之LinkedHashMap
前言: 在上一篇博客中,我们系统的介绍了HashMap,HashMap是非线程安全的类,一般情况下作为局部变量使用是完全可以的。 HashMap的存放是无序的,按照一定的规则映射的,所以,遍历其元素的顺序与添加的顺序是不一致的。 如果我们想按照添加的顺序来遍历元素该如何做呢? 那就需要使用本次介绍的LinkedHashMap来完成了。 注意:由于...原创 2019-01-10 17:28:45 · 263 阅读 · 0 评论 -
深入理解Java虚拟机学习笔记
一:java内存区域 堆内存区域概图及相关参数对照图 Java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的内存区域。这些区域各有各的用户以及创建、销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则随着用户线程的启动和结束而创建和销毁。 主要包括以下几个内存区域: 1:程序计数器(Program Counter ...原创 2017-11-28 14:25:49 · 549 阅读 · 0 评论 -
学习使用Eclipse MAT分析OOM问题
准备工作:1.Eclipse安装MAT插件,在help->Eclipse marketPlace里查询Memory,可以看到Memory Analyzer1.*版本 插件,选择install即可,安装完成后重启Eclipse2.设置JDK参数为 -Xmx10m -Xms10m -XX:+HeapDumpOnOutOfMemoryError,如果希望将异常信息保存到特定目录,可...原创 2017-10-16 10:27:04 · 1072 阅读 · 0 评论 -
Eclipse使用自定义Maven
1.下载maven到本地2.编辑环境变量 MAVEN_HOME,pathMAVEN_HOME指向maven解压后的地址;path后添加 %MAVEN_HOME%\bin即可3.编辑$MAVEN_HOME/conf/setting.xml文件,添加阿里云的mirror<mirror> <id>nexus-aliyun</id> ...原创 2017-11-03 14:27:53 · 356 阅读 · 0 评论 -
Java面试之基础篇(上)
题目来源于网络后面是笔者自己提供的答案,仅供参考,如有错误,欢迎指正 一、基础篇1.1、Java基础 面向对象的特征:继承、封装和多态 final, finally, finalize 的区别 Exception、Error、运行时异常与一般异常有何异同 请写出5种常见到的runtime exception int 和 Integer...原创 2018-10-12 11:13:10 · 4977 阅读 · 3 评论 -
多线程编程题目
1.现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?// 创建线程对象,执行打印方法 private static class ForthObject extends Thread{ public ForthObject(String name){ super(name); } @Override pub...原创 2018-11-05 15:26:24 · 2438 阅读 · 5 评论 -
java面试(进阶二篇)解答
题目来自于网络,答案是笔者整理的。仅供参考,欢迎指正题目来源:https://mp.weixin.qq.com/s?__biz=MzI1NDQ3MjQxNA==&mid=2247485604&idx=1&sn=d624680e941b7cd6e2b3ce02c2698f6e&chksm=e9c5f115deb278037dece675d58e9b8e0e796...原创 2018-11-05 16:05:23 · 4335 阅读 · 2 评论 -
java面试(进阶三篇)解答
题目来自于网络,答案是笔者整理的。仅供参考,欢迎指正来源: https://mp.weixin.qq.com/s?__biz=MzI1NDQ3MjQxNA==&mid=2247485723&idx=1&sn=f5c3bfbfab9fe01e6d4979e4f315f024&chksm=e9c5f0aadeb279bcff0b81842f09adc1bbf0f4d...原创 2018-11-05 16:10:15 · 2582 阅读 · 0 评论 -
java面试(进阶四篇)解答
题目来自于网络,答案是笔者整理的。仅供参考,欢迎指正来源: https://mp.weixin.qq.com/s?__biz=MzI1NDQ3MjQxNA==&mid=2247485779&idx=1&sn=3b06b9923df7f40f887ead8b8a53e50e&chksm=e9c5f0e2deb279f47fbfc3a12a70896bf95fa8c...原创 2018-11-05 16:14:31 · 3352 阅读 · 0 评论 -
java面试(进阶五篇)解答
题目来自于网络,答案是笔者整理的。仅供参考,欢迎指正来源: https://mp.weixin.qq.com/s?__biz=MzI1NDQ3MjQxNA==&mid=2247485897&idx=1&sn=25f71098bd5421722db2511730eb8f50&chksm=e9c5f078deb2796e2dd7759f69e6411040b23a6...原创 2018-11-05 16:19:12 · 3314 阅读 · 0 评论 -
Netty4关于ChannelInboundHandler的使用说明
前言: Netty中处理输入输出字节的最重要的类就是ChannelInboundHandler(处理输入字节)、ChannelOutboundHandler(处理输出字节) 下面我们从最简单的使用到复杂使用来回顾一下关于这些Handler的处理 Netty版本说明:笔者使用的是netty-4.1.10版本,以下代码均基于此编写1.服务端 服务...原创 2018-11-19 09:09:29 · 10280 阅读 · 1 评论 -
Netty4实现心跳检测及IdleStateHandler源码分析
1.什么是心跳检测? 判断对方是否正常运行,一般采用定时发送简单的通讯包,如果在指定时间内未接收到对方响应,则判定对方已经宕掉。用于检测TCP的异常断开。 心跳包一般就是客户端发送给服务端的简单消息,如果服务端几分钟内没有收到客户端消息,则视为客户端已经断开,这个时候就主动关闭客户端的通道。 2.使用Netty实现服务端心跳检测 下面我们编写服务端代码,服务端...原创 2018-11-19 09:15:08 · 955 阅读 · 0 评论 -
Netty4实现HTTP请求、响应
前言:我们所编写的项目多以BS为主,用户通过浏览器访问我们的服务器发送的请求以HTTP请求为主,本例就以Netty4来实现一个接收HTTP请求的服务器,并根据用户请求返回响应1.Netty中HTTP请求和响应类请求(FullHttpRequest)/** * Combine the {@link HttpRequest} and {@link FullHttpMessage}, s...原创 2018-11-19 11:25:56 · 24377 阅读 · 0 评论 -
eclipse 如何debug jdk源码(转)
原英文地址:http://stackoverflow.com/questions/18255474/debug-jdk-source-cant-watch-variable-what-it-is问题效果图:解决后的效果:具体步骤:1.制作可调试的rt.jar包1.1 .在D盘新建jdk7_src及jdk7_rt-debug两个文件夹1.2.复制JDK源码将环境变量中配置的java_home地址或者...转载 2018-04-12 10:18:13 · 305 阅读 · 0 评论