![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 95
呼延十
呼延
展开
-
lucene系列(四)DirectMonotonicWriter源码分析
前言来学习一下DirectMonotonicWriter类的代码. 源码版本: 8.7.0介绍先上一下源码注释:Write monotonically-increasing sequences of integers. This writer splits data into blocks and then for each block, computes the average slope, the minimum value and only encode the delta from the原创 2021-01-31 16:19:39 · 312 阅读 · 1 评论 -
lucene系列(三)DirectWriter源码分析
前言本文学习下 Lucene 在存储大量整数时使用到的编码方法。介绍DirectWriter 用 bit 编码方式进行数组压缩的功能,它在整个数组的所有元素都不大的情况下能带来不错的压缩效果。DirectWriter 是 Lucene 为整型数组重编码成字节数组的工具,它的底层包含一系列编码器,将整型数组的所有元素按固定位长度的位存储。它按 Bit 存储,预留长度过长会浪费空间,短了会因为截断导致错误。因此需要在数组中查找最大值,由它的长度作为存储的长度。假设有一组数据{4,5,9,0},它们的二原创 2021-01-31 16:13:05 · 254 阅读 · 0 评论 -
Lucene系列(二)int的变长存储与zigzag编码
前言lucene 代码量还是比较多的,在没有看的很明白的情况下,先写一写新学到的工具类的一些操作吧~也是收获很多。在 lucene 写入索引文件时,为了节省空间,经常会对数据进行一些压缩,这篇文章介绍一种对 int, long 类型有用的压缩方式。即变长存储。它在 lucene 中的应用十分广泛,有事没事就用一下,因此为了熟练的理解代码,我们还是来一探究竟吧~在 lucene8.7.0 版本的代码中,它没有单独定义成类,可能是因为是一个小的功能点吧~对变长数据的写入实现在org.apache.lu原创 2021-01-31 16:04:59 · 501 阅读 · 0 评论 -
Lucene系列(一)什么是Lucene
前言上一个系列还没有完结,我又来开新坑啦~接触搜索/推荐相关工作,也有两年了。工作里对lucene的接触不少,却也不精。最近工作里没有那么忙,因此想通过学习源码的方式,来对lucene进行一个系统的学习。此外,听闻lucene源码堪称面对对象设计届的典范,也想从中吸收一些代码设计/开发方面的知识。最近老是感觉自己写的代码有问题,想尝试优化却感觉非常吃力,经常一顿操作下来提升的很有限。lucene简介以下内容来自维基百科:Lucene是一套用于全文检索和搜索的开放源码程序库,由Apache软件基原创 2021-01-30 18:22:52 · 348 阅读 · 0 评论 -
使用自定义注解实现接口参数校验
1.前言在接口的开发中,我们有时会想让某个接口只可以被特定的人(来源)请求,那么就需要在服务端对请求参数做校验.这种情况我们可以使用interceptor来统一进行参数校验,但是如果很多个接口,有不同的的设定值,我们总不能写很多个interceptor,然后按照patn逐一添加吧?面对这种情况,我们可以选择自定义一个注解,由注解来告诉我们,这个接口允许的访问者是谁.注:在本文的示例中,仅实...原创 2019-01-21 00:10:59 · 2014 阅读 · 0 评论 -
数据结构-堆
介绍堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。定义堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称...原创 2019-01-16 01:49:44 · 216 阅读 · 0 评论 -
单例模式的N种写法
1.前言写完这个题目,我感觉自己好像"孔乙己"啊,回字的四种写法要不要学啊~我们经常会用到单例模式,但是我对他一直没有一个统一的的认识,比如我清楚好多种单例的写法,但是每一种是怎么演化来的?具体解决了什么问题?这块就没有那么清晰了,因此此文对单例模式进行一个总结,同时手撸一下代码加深理解.2.介绍单例模式,即某一个类在整个系统中有且仅有一个实例.经常用来读取配置,获取连接等等.3.实现...原创 2019-01-31 14:22:30 · 231 阅读 · 0 评论 -
Java类加载的执行顺序
前言那一年,呼延十又回想起被加载顺序支配的恐惧,笔试题上,好几个类,几个方法,几个输出语句,让你按照顺序写出输出.我真的是有一句…但是呢,我们还是有了解一下的必要的,在编码过程中有许多的应用.正文经常用来比较顺序的,无非就是静态代码块,普通代码块,静态方法和普通方法.这里直接说一下结论:先静态后普通最后构造方法,先父类后子类.看一下实际的例子:package daily;/**...原创 2019-01-29 00:34:39 · 248 阅读 · 0 评论 -
Java的序列化与反序列化
前言Java的序列化与反序列化是Java中比较重要的一个知识,本文将总结一下,怎么使用序列化功能以及经常遇到的一些问题的解答.什么是Java的序列化JDK提供给我们的,可以将某一个对象转化为二进制字节流保存,并从字节流恢复对象的一种技术.我们可以再网络传输对象,或者持久化对象时使用这项技术.怎么进行序列化与反序列化Java中通过继承Serializable接口来获得序列化与反序列化的能...原创 2019-01-29 21:16:30 · 240 阅读 · 0 评论 -
OOM,StackOverFlow以及死锁的测试
这篇文章主要是记录自己做的一些小的测试.主要包括内存溢出,栈溢出,以及死锁问题.PS:文章中使用了Arthas工具,用来动态监控JVM的一些资源,非常好用,强烈安利一下.OOMOutOfMemory ,内存不够用了,一般是什么原因呢?给应用程序分配的内存太小,只能通过增大内存来解决.内存泄漏.有一部分内存"无用"了,但是因为编码问题导致的没有被垃圾回收掉,产生了泄漏,最终导致了内...原创 2019-03-07 00:12:17 · 617 阅读 · 0 评论 -
阿里开源的Java动态追踪工具Arthas使用
本文仅测试及学习Arthas命令的使用方式,对原理不做探讨,有兴趣的胖友可以戳下方美团博客的链接,讲解的十分不错.相关链接arthas中文官方网站美团博客关于java动态追踪的一篇文章,讲解了部分原理,推荐阅读官方的命令参考手册介绍arthas是什么?能做什么?这里copy官方文档的一段话来告诉大家.Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。当你遇到以...原创 2019-03-07 11:30:06 · 2214 阅读 · 0 评论 -
Java中Executors中提供的4种线程池
前言了解一下线程池的源码实现.ThreadPoolExecutorjdk中关于线程池一个比较核心的类是ThreadPoolExecutor,先来看一下他的实现.构造方法public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, ...原创 2019-03-08 00:11:34 · 355 阅读 · 0 评论 -
Vector源码阅读
前言前面已经学习过ArrayList和LinkedList的区别,今天再来学习一下List<E>接口的另一个实现类Vector.Vector 可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。不过,Vector 的大小是可以增加或者减小的,以便适应创建 Vector 后进行添加或者删除操作。Vector与ArrayList没有太大区别,都具有List&l...原创 2018-12-23 18:17:14 · 552 阅读 · 0 评论 -
LinkedHashMap源码阅读(JDK8)
LInkedHashMap是基于HashMap的,因此如果不太清楚HashMap的实现的话,请先阅读HashMap 源码阅读 我们都知道,HashMap 是无序的,也就是说,遍历时候的顺序与访问的顺序无关.而在一些场景下,我们即需要HashMap的特性,又需要它能够保持一定的顺序呢?JAVA 在 JDK1.4 以后提供了 LinkedHashMap 来帮助我们实现了有序的 HashMap...原创 2018-12-16 19:41:28 · 925 阅读 · 0 评论 -
java8的DateTime API使用详解
java8里面新增了一套处理时间和日期的API,为什么要搞一套全新的API呢,因为原来的java.util.Date以及Calendar实在是太难用了。如果你有过在程序中处理时间的经验你就会知道,在java8以前,处理时间是多么让人痛苦。举个简单的小栗子:如果你需要查询当前周的订单,那么你需要先获取本地时间,然后根据本地时间获取一个Calendar,然后对Calendar进行一些时间上的加减...原创 2018-11-27 19:51:56 · 1991 阅读 · 2 评论 -
HashTable和HashMap的区别
在前面的一片文章写了HashMap的源码阅读,这次来说一下HashTable的一些知识。在阅读源码过后,我发现HashMap与HashTable的实现方式基本一致,因此这篇文章不再介绍HashTable中每个方法的源码实现,知识列举两者的区别与联系,有兴趣的读者可以点击上面的链接去看一下HashMap的实现。区别1.HashTable不能存储空值,而HashMap可以。在HashTabl...原创 2018-11-04 00:10:56 · 80 阅读 · 0 评论 -
Java 中JSON的使用
Java Json本章节我们将为大家介绍如何在 Java 语言中使用 JSON。类库选择Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。下面是几个常用的 JSON 解析类库。Gson:谷歌开发的 JSON 库,功能十分全面。FastJson:阿里巴巴开发的 JSON 库,性能十分优秀。Jackson:社区十分活跃且更新速度很快。以下教程基于 ...原创 2018-11-03 00:21:27 · 1067 阅读 · 0 评论 -
java 读取键盘输入
在工作中其实很少用到java读取键盘输入的情况,但是在各种网站刷题时却经常碰到,同时,在日常写一些测试方法的时候,如果通过键盘读取输入也是十分方便的,因此简要的做一个总结,方便后续查看及使用。System.in的read方法public static void input1() throws IOException { int i = System.in.read(); Syste...原创 2018-11-11 17:14:10 · 15030 阅读 · 1 评论 -
spring aop统一进行日常及异常的处理
什么是AOP以下摘自百度百科:在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程...原创 2018-11-13 21:03:41 · 7144 阅读 · 0 评论 -
HashMap 源码阅读
HashMap是什么想必大家都是知道的,日常开发中经常使用,而且常驻于笔试题目及面试中,那么今天将从源码的角度来深入理解一下HashMap。PS:本文以下分析基于jdk1.7,1.8的改动会在文后总结。1.什么是HashMap?HashMap是基于哈希表的Map接口实现,是一个key-value型的数据结构。他在性能良好的情况下,存取的时间复杂度皆为O(1).要知道数组的获取时间复杂度为O...原创 2018-11-12 13:45:40 · 1067 阅读 · 0 评论 -
ConcurrentHashMap 源码阅读
PS.本文基于JDK1.8前言大家都知道HashMap是线程不安全的,想要在并发的环境中使用,用什么呢?HashTable?采用syncgronized加锁,导致效率及其底下.在java5之后jdk提供了另一个类,ConcurrentHashMap,极大的提升了并发下的性能.这次将阅读ConcurrentHashMap的源码并记录关键知识.实现原理数据结构与HashMap的数据结构同步...原创 2018-11-18 17:26:16 · 986 阅读 · 0 评论 -
java中抽象类和接口的区别
面试中经常会问到这个问题,那么我们到底应该怎么回答呢?语法方面首先,在java语言中,抽象类和接口在语法方面就是有一些区别的,总结整理如下:相同点都是位于较上层的抽象层.都不能被实例化.都可以只声明方法,不实现.不同点抽象类可以有不抽象的方法,即某个方法有默认的实现,而接口不可以.使用抽象类使用extends关键字集成,而接口使用implement关键字来实现.抽象类可以...原创 2018-11-19 00:00:58 · 1101 阅读 · 0 评论 -
java中的volatile关键字详解
前言在学习ConcurrentHashMap源码的过程中,发现自己对并发编程简直是一无所知,因此打算从最基础的volatile开始学习.volatile虽然很基础,但是对于毫无JMM基础的我来说,也是十分晦涩,看了许多文章仍然不能很好的表述出来.后来发现一篇文章(参考链接第一篇),给了我一些启示:用回答问题的方式来学习知识及写博客,因为对我这种新手来说,回答别人的问题,总比自己"演讲"要来的...原创 2018-11-22 23:38:42 · 8494 阅读 · 1 评论 -
String-StringBuilder-StringBuffer异同
字符串在编程中使用的非常频繁,同时又是面试中的常见题型,那么我们的对字符串相关类String,StringBuilder,StringBuffer的理解真的正确吗?今天就通过对三个类源码的阅读,来进一步加强理解。目录String概述StringBuilder 和StringBuffer异同性能比较结论扩展(详细源码阅读及方法解析) String概述 ![](http://...原创 2018-11-25 01:33:39 · 1055 阅读 · 0 评论 -
ArrayList和LinkedList的区别
PS:推荐大家先去了解一下链表这个数据结构。ArrayList和LinkedList可以说是日常业务开发中最常使用的容器类了,同时,他们的区别也是面试高发区,虽然很简单,但是我们总是不能说的完整,今天就通过对他们源码的阅读来进一步加深理解。首先,看他们类的定义可以发现:他们都是实现了List接口,这个接口干了什么呢?这个接口定义了对列表的一些基本操作,如add,contains,ind...原创 2018-11-25 01:36:40 · 1062 阅读 · 0 评论 -
Java8-Date-Time-使用案例
PS:本文的代码保证正确性,原则是:下一次使用时直接copy可用.工作中遇到新的需求会更新此文.对日期及时间的处理,我们都不陌生,但是总会有你不熟悉的新需求产生,毕竟产品经理的奇思妙想是很多的.本文记录日常工作中使用到的获取特殊时间点的一些方式,不一定出厂最优解,但我会努力改进至最优解.时间戳转换为LocalDateTimelong showTime = System.curren...原创 2018-11-29 00:07:18 · 1008 阅读 · 0 评论