文章分类 - Java
摘要:这一节聊一下ReentrantLock的源码,这个也是面试中必不可少的内容,希望本文能让你有收获。 一、锁的分类 首先ReentrantLock分为公平锁和非公平锁两种,默认情况下创建的是非公平锁。在ReentrantLock的内部是存在一个Sync的内部类,公平锁和非公平锁都是这个类的子类。 /*
阅读全文
摘要:ReentrantLock也是Java面试中必不可少的一个环节,所以这里就分析一下其中的源码。 一、AQS AQS是JUC中非常重要的一个基类,其中提供了构建同步工具类提供了基础框架。那就先来看看这个基类中的一些重点内容。 static final class Node 首先是Node内部类,我们知
阅读全文
摘要:再来看一下LinkedHashMap的源码分析,这个数据结构可以方便我们构建LFU时使用,因为其实内部的数据存储是利用了HashMap的功能,然后额外通过一个链表来记录元素之间的顺序关系。 public class LinkedHashMap<K,V> extends HashMap<K,V> im
阅读全文
摘要:因为上文中已经详细的说明了HashMap,这里在聊ConcurrentHashMap的时候,相差不大的部分就不再重复了,因为实现的原理都相差不多。这里就只说一下put操作吧 一、Put操作 final V putVal(K key, V value, boolean onlyIfAbsent) {
阅读全文
摘要:看到最近好多同学在准备面试,作为服务端的开发人员Java的集合一定是一个绕不开的话题。想说的是很多同学每次都是临阵磨枪,刷了一些相关的面试题,挑选的看一部分源码。这样的结果就是自己没有一个全面的理解,面试过后一段时间就基本都忘记了。所以这次想整理一下Java集合相关的源码分析,尽量做到每一行代码都有
阅读全文
摘要:我们知道在计算金额的时候要用BigDecimal来处理,但是如果使用不当也会出现精度的问题,先来看一段代码: @Test public void test1() { BigDecimal n1 = new BigDecimal("0.05"); BigDecimal n2 = new BigDeci
阅读全文
摘要:每次在需要的时候都会去看源码,但是一直没有整理出来,这次借着这个机会整理一下。本文不会记录所有的源码内容分析,因为这种文章在网上随便都能搜到,不想复制粘贴。这里只想记录以下几个问题: 在什么场景下需要使用ThreadLocal ThreadLocal 与 Thread 的关联关系以及面试中经常被问到
阅读全文
摘要:最近开始回顾整理一些Jvm的知识点,记录一下,如有描述不准确的地方还望大家评论指出,共同进步。 一、可达性分析算法 在Jvm的HotSpot虚拟机中使用的是可达性分析算法来确定内存中的对象是否要被回收,那么首先来说一下可达性分析算法是怎么玩的呢?他的基本思路就是通过一系列成为GC Roots 的根对
阅读全文
摘要:单例模式应该是面试过程中被问到最多的一个设计模式了,但是面试中通过一个单例模式其实可以考察的知识点非常的多,本文从单例模式出发,力求把沿途的知识点都带上,单例相关的内容看这一篇就足够了。 一、什么是单例模式 首先还是一起再复习一遍单例模式的定义:单例模式是指在内存中只会创建且仅创建一次对象的设计模式
阅读全文
摘要:一、Stream介绍 stream是流式处理的一个关键的抽象,包括Stream,IntStream,LongStream 和 DoubleStream等等,首先我们来看一下类之间的关系 最上层的接口是AutoCloseable接口,因为我们知道流式处理会涉及到一些资源,所以为了能够被正确的释放,这里
阅读全文
摘要:网上找了很多帖子,基本都是通过反向代理 (https://jrebel.qekang.com/{GUID}/) 的方式。但是现在好像是行不通了。最终还是基于laiyuns大神的方式完成了操作成功,下面记录一下。 一、首先是下载适合系统的工具 通过 https://github.com/ilanyu/
阅读全文
摘要:在Java中我们一定都使用过正则表达式,因为正则在很多语言中都有实现,但是可能在使用中有些不同,这里我们就打开java.util.regex包,来看看相关源码,了解一些背后的原理,一起拾起我们曾经忽略的点点滴滴。 一、Pattern类 看Pattern的源码,我们首先能看到Pattern是被fina
阅读全文
摘要:Java的开发过程离不开日志的处理,但是很多时候我们并不清楚日志这个家族之间的事情,有很多的日志组件,我们之前使用的Log4j,后来的logback,再或者Log4j2 这些日志组件之间到底是什么关系,接下来会全面的分析一下,文章内容会比较长,大家也可以根据自己的需求进行跳跃查看。 一、概述 首先我
阅读全文
摘要:最近对HashMap的扩容问题很感兴趣,看了源码记录一下吧。 相信大家之前在面试的时候一定被问到过,hashmap在使用的过程中遇到过什么异常的情况没有(比如死循环)。那么产生异常情况的原因基本都是多线程同时操作一个HashMap对象导致的是吧,那下面我们就来具体的看一下源码,思考一下多线程到底是怎
阅读全文
摘要:今日在通 CloseableHttpClient 进行Http请求的时候遇到的一个传递过去的中文乱码的问题。 请求的参数是通过 StringEntity 来封装的,是一个Json的字符串,之前传递的时候也没有问题,但是这次转换的时候就报错了 所以猜测可能是传递的内容的问题,后来通过对上游调用的分析发
阅读全文
摘要:在互联网的实际场景中,将长连接转换成短连接的需求是非常常见的,在大厂的面试中出现的频率也是比较高的,进行就针对这个话题聊一聊。 首先对于一个短连接转换的系统来说,一定要包括这两个接口: 将长连接转换成短连接 通过短连接跳转到原来的长连接 所以对于系统来说是要将短连接和对应的长连接存储到磁盘上的,这里
阅读全文
摘要:最近在看源码的时候发现项目中总是出现一些十六进制的写法,一直不知道是什么意思。最近查了一些资料,今天在这里记录一下,希望有相同困扰的童鞋一定要静下心来看完整篇文章。 二进制与十六进制 原码 反码 补码 按位与 按位或 为什么要与0xFF进行按位与 1.二进制与十六进制 首先要说说为什么要聊二进制与十
阅读全文
摘要:今天测试同学反馈有一个运行了很久的程序,最近的崩溃率很高,通过日志查询发现,这是一个查询进度的接口,进度结果的精度是小数点后两位。 但是日志中却有很多的超过这个精度的结果,简化了一下代码: 这里首先是将progress的精度转换为小数点后两位,然后再进行乘以100 ,目的是为了转换成100%的结果,
阅读全文

浙公网安备 33010602011771号