自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

呼延十

呼延十

  • 博客(97)
  • 收藏
  • 关注

原创 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 291 1

原创 lucene系列(三)DirectWriter源码分析

前言本文学习下 Lucene 在存储大量整数时使用到的编码方法。介绍DirectWriter 用 bit 编码方式进行数组压缩的功能,它在整个数组的所有元素都不大的情况下能带来不错的压缩效果。DirectWriter 是 Lucene 为整型数组重编码成字节数组的工具,它的底层包含一系列编码器,将整型数组的所有元素按固定位长度的位存储。它按 Bit 存储,预留长度过长会浪费空间,短了会因为截断导致错误。因此需要在数组中查找最大值,由它的长度作为存储的长度。假设有一组数据{4,5,9,0},它们的二

2021-01-31 16:13:05 247

原创 Lucene系列(二)int的变长存储与zigzag编码

前言lucene 代码量还是比较多的,在没有看的很明白的情况下,先写一写新学到的工具类的一些操作吧~也是收获很多。在 lucene 写入索引文件时,为了节省空间,经常会对数据进行一些压缩,这篇文章介绍一种对 int, long 类型有用的压缩方式。即变长存储。它在 lucene 中的应用十分广泛,有事没事就用一下,因此为了熟练的理解代码,我们还是来一探究竟吧~在 lucene8.7.0 版本的代码中,它没有单独定义成类,可能是因为是一个小的功能点吧~对变长数据的写入实现在org.apache.lu

2021-01-31 16:04:59 485

原创 Lucene系列(一)什么是Lucene

前言上一个系列还没有完结,我又来开新坑啦~接触搜索/推荐相关工作,也有两年了。工作里对lucene的接触不少,却也不精。最近工作里没有那么忙,因此想通过学习源码的方式,来对lucene进行一个系统的学习。此外,听闻lucene源码堪称面对对象设计届的典范,也想从中吸收一些代码设计/开发方面的知识。最近老是感觉自己写的代码有问题,想尝试优化却感觉非常吃力,经常一顿操作下来提升的很有限。lucene简介以下内容来自维基百科:Lucene是一套用于全文检索和搜索的开放源码程序库,由Apache软件基

2021-01-30 18:22:52 332

原创 Redis系列(十一)Redis命令全集

背景介绍publicDBstringlistsetssorted setshashesstreamsbitmapshyperloglogsgeospatial index背景介绍以下摘自:Redis 官网。Redis is an open source (BSD licensed), in-memory data structure store, used as ...

2020-02-05 14:01:09 219

原创 Redis系列(十)Redis对象系统

前言介绍类型编码和底层数据结构五种常见的对象类型类型检查与命令多态内存回收对象共享对象淘汰:空转时长总结参考文章联系我前言其实关于本文,我犹豫再三。对象系统值得写一篇文章吗?从技术上来讲,当然是值。但是对于我们大部分人来说,它都是隐身的。写的话,顺序放在哪里?在 Redis 系列(九)底层数据结构之五种基础数据类型的实现中其实就提到了,那么应该在此之前先介...

2020-02-04 10:11:36 162

原创 Idea 发布最适合程序员的字体!

作为 编译期界的大佬, JetBrains公司一直致力于提供更好的编码环境.前两天, JetBrain推出了一个新的字体 JetBrain Mono. 号称是最适合程序员的编码的字体, 我赶紧尝了尝鲜, 体验了一天之后发现确实好看, 因此推荐给大家.首先是官网 JetBrain Mono字体.看一下官方的示例:.是不是看起来很棒, 怎么安装呢?如果你的IDEA 是2019.3 之后的...

2020-01-21 15:46:16 18149

原创 Redis系列(九)底层数据结构之五种基础数据类型的实现

前言定义字符串对象intrawembstr浮点数如何保存?编码转换条件总结列表对象总结集合对象intsethashtable总结有序集合对象ziplist 编码skiplist 编码总结散列对象ziplist 编码hashtable 编码总结全文总结参考文章联系我前言Redis 已经是大家耳熟能详的东西了,日常...

2020-01-21 10:18:35 462

原创 Redis系列(八)底层数据结构之紧凑列表

前言定义总结参考文章联系我前言Redis 已经是大家耳熟能详的东西了,日常工作也都在使用,面试中也是高频的会涉及到,那么我们对它究竟了解有多深刻呢?我读了几本 Redis 相关的书籍,尝试去了解它的具体实现,将一些底层的数据结构及实现原理记录下来。本文将介绍 Redis 中底层的 listpack(紧凑列表) 的实现方法。 它是 Redis 的 Stream 用到的数据结构之一...

2020-01-20 08:59:06 290

原创 Redis系列(七)底层数据结构之跳跃表

前言定义层级问题顺序问题排名问题总结参考文章联系我前言Redis 已经是大家耳熟能详的东西了,日常工作也都在使用,面试中也是高频的会涉及到,那么我们对它究竟了解有多深刻呢?我读了几本 Redis 相关的书籍,尝试去了解它的具体实现,将一些底层的数据结构及实现原理记录下来。本文将介绍 Redis 中底层的 skiplist(跳跃表) 的实现方法。 它是 Redis 中有序集...

2020-01-19 09:09:14 240

原创 Redis系列(六)底层数据结构之字典

前言定义字典哈希表哈希算法哈希冲突扩容与缩容渐进式 hash原理小应用思考问题:为什么缩容不用考虑 bgsave?总结参考文章联系我前言Redis 已经是大家耳熟能详的东西了,日常工作也都在使用,面试中也是高频的会涉及到,那么我们对它究竟了解有多深刻呢?我读了几本 Redis 相关的书籍,尝试去了解它的具体实现,将一些底层的数据结构及实现原理记录下来...

2020-01-17 08:55:20 362

原创 Redis系列(五)底层数据结构之整数集合

前言定义整数集合的升级整数集合分级的好处不支持降级总结参考文章联系我前言Redis 已经是大家耳熟能详的东西了,日常工作也都在使用,面试中也是高频的会涉及到,那么我们对它究竟了解有多深刻呢?我读了几本 Redis 相关的书籍,尝试去了解它的具体实现,将一些底层的数据结构及实现原理记录下来。本文将介绍 Redis 中底层的 intset(整数集合) 的实现方法。 它是...

2020-01-16 09:21:21 159 1

原创 Redis系列(四)底层数据结构之快速列表

前言定义优劣ziplist 切割大小压缩深度总结参考文章联系我前言Redis 已经是大家耳熟能详的东西了,日常工作也都在使用,面试中也是高频的会涉及到,那么我们对它究竟了解有多深刻呢?我读了几本 Redis 相关的书籍,尝试去了解它的具体实现,将一些底层的数据结构及实现原理记录下来。本文将介绍 Redis 中底层的 quicklist(快速列表) 的实现方法。 它是 Re...

2020-01-15 09:35:04 277

原创 Redis系列(三)底层数据结构之压缩列表

前言定义压缩列表的定义压缩列表节点的定义新增节点问题:级联更新总结参考文章联系我前言Redis 已经是大家耳熟能详的东西了,日常工作也都在使用,面试中也是高频的会涉及到,那么我们对它究竟了解有多深刻呢?我读了几本 Redis 相关的书籍,尝试去了解它的具体实现,将一些底层的数据结构及实现原理记录下来。本文将介绍 Redis 中底层的 ziplist(压缩列表) 的...

2020-01-14 10:47:57 232

原创 Redis系列(二)底层数据结构之双端链表

前言定义优劣双向链表无环链表带有头指针和尾指针带有长度计数器总结参考文章联系我前言Redis 已经是大家耳熟能详的东西了,日常工作也都在使用,面试中也是高频的会涉及到,那么我们对它究竟了解有多深刻呢?我读了几本 Redis 相关的书籍,尝试去了解它的具体实现,将一些底层的数据结构及实现原理记录下来。本文将介绍 Redis 中最基础的 linkedlist(双端链...

2020-01-13 08:58:54 255

原创 Redis系列(一)底层数据结构之简单动态字

前言定义优劣高性能获取字符串长度杜绝缓冲区溢出减少修改字符串产生的内存分配次数,提高修改字符串性能二进制安全兼容部分 C 语言的库函数总结SDS 限制为512M问题参考文章联系我前言Redis 已经是大家耳熟能详的东西了,日常工作也都在使用,面试中也是高频的会涉及到,那么我们对它究竟了解有多深刻呢?我读了几本 Redis 相关的书籍,尝试去了解它的具体实现,将...

2020-01-07 11:06:45 219

原创 Maven本地子模块互相依赖

很多时候,我们自己的项目有许多的子模块,之间互相有依赖,但是我们没有私服来发布打好的jar包.最常见的就是本地有一个Util包, 随手写的其他项目想要引用, 却苦于没有私服. 把代码扔到同一个项目, 强迫症有忍不住.这个问题Maven是有解决方案的.本质上还是打包发布,只是不再发布到远端的Maven仓库,而是打包完成之后, 将这个jar包安装到本地的maven即可.首先,在你的util子模块...

2020-01-06 09:10:16 5410

原创 后缀数组(Suffix Array)在字符串匹配中的应用

前言首先抛出一个问题: 给定300w字符串A, 之后给定80w字符串B, 需要求出 B中的每一个字符串, 是否是A中某一个字符串的子串. 也就是拿到80w个bool值.当然, 直观的看上去, 有一个暴力的解法, 那就是 双重循环, 再调用字符串德contains方法, 想法很美好, 现实很残酷. 如果你真的这么实现了(是的, 我做了.), 就会发现,效率低到无法接受.具体的效率测评在后文给出...

2020-01-01 21:27:19 781

原创 Trie树的基本原理及应用

前言理论知识[什么是 Trie 树](#什么是 trie 树)[Trie 的优劣势](#trie 的优劣势)[Trie 的应用场景](#trie 的应用场景)编码实现参考文章联系我前言在做用户 query 理解的过程中,有许多需要使用词典来"识别"的过程。在此期间,就避免不了使用 Trie 树这一数据结构。因此今天我们来深入的学习一下 Trie 树相关的理论知识,并且...

2019-12-17 21:54:36 615

原创 AWK(简易的文本处理脚本语言)入门学习

前言由于最近的工作内容的关系, 经常需要对文本文件做一些处理. 每次都要写个脚本来处理实在是有点麻烦. 这时候想起来很久以前稍微接触过的AWK, 来做这个工作真的是再合适不过了.因此, 趁着这个机会, 把AWK深入学习一点,记录在此.概述AWK是一门解释型的编程语言。在文本处理领域它是非常强大的,它的名字来源于它的三位作者的姓氏:Alfred Aho, Peter Weinberger 和...

2019-12-05 09:38:08 467

原创 用深度学习解决NLP中的命名实体识别(NER)问题(深度学习入门项目)

前言离线训练样本数据训练数据编码模型搭建加载数据评估模型在线预测tensorflow serving 介绍模型保存格式加载模型客户端请求运行环境相关链接本文源码已经上传至 github.: https://github.com/HuBlanker/Keras-Chinese-NER本文主要理论依据论文:Bidirectional LSTM-CR...

2019-12-01 21:42:54 2456

原创 使用FastText构建你的第一个文本分类器!

前言简介原理实际应用下载安装处理数据训练调优demo相关文章前言最近在做一些意图识别方面的工作,所以尝试一下用 fasttext 做一个文本分类器,学习记录如下。简介首先,我们使用 fasttext 的目的是什么?是文本分类,即对一个词语,给出它所属于的类别。文本分类的目标是将文档(如电子邮件,博文,短信,产品评论等)分为一个或多个类别。 这些类别可以是根据评论分...

2019-11-21 11:01:54 607

原创 [设计模式]-模板方法模式

前言在上一篇文章责任链模式中提到了模板方法模式,因此这里简单介绍一下.模板方法模式比较简单,或者说比较常用.在开发过程中,许多人在不知不觉的情况下就会使用,只要他具有良好的面对对象思维.比如当你写了Dog和Cat两个类,发现很多相同的代码,你自然就会将相同模块提取抽象成父类,然后将一些公共的方法放到父类中,这样子就基本实现了模板方式模式.介绍(摘自《Head FIrst 设计模式》)在一...

2019-03-20 00:33:47 138

原创 [设计模式]-责任链模式

1.介绍使多个对象都有机会处理请求,从而避免请求的发送者与接受者之间的耦合关系. 将多个接受者连成一条链,沿着该链处理请求,知道请求被处理为止.类图角色抽象处理者: 定义了处理请求的接口或者抽象类,提供了处理请求的的方法和设置下一个处理者的方法。具体处理者: 实现或者继承抽象这角色,具体的实现处理逻辑.实例与代码责任链模式有纯的和不纯的.纯的:当前接收者要么处理,要么传递给下一个...

2019-03-19 20:57:02 183

原创 二分法查找及有重复值的二分法

前言最近也在进行一些面试嘛,也见识到了很多各种各样的题目,其中就有一些和二分查找相关的.二分查找,在有序的数组中快速找到目标值.这个算法在上学的时候学过,之后就没有看过了,因为比较"简单"嘛~.然而在面试过程中,我在二分查找及类似题目上栽了三次…所以今天做一个总结.注意:下文的代码中没有进行参数校验,实际使用时需要进行参数校验普通写一个二分查找class Solution: ...

2019-03-18 00:15:36 7337 4

原创 Java中Executors中提供的4种线程池

前言了解一下线程池的源码实现.ThreadPoolExecutorjdk中关于线程池一个比较核心的类是ThreadPoolExecutor,先来看一下他的实现.构造方法public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, ...

2019-03-08 00:11:34 346

原创 阿里开源的Java动态追踪工具Arthas使用

本文仅测试及学习Arthas命令的使用方式,对原理不做探讨,有兴趣的胖友可以戳下方美团博客的链接,讲解的十分不错.相关链接arthas中文官方网站美团博客关于java动态追踪的一篇文章,讲解了部分原理,推荐阅读官方的命令参考手册介绍arthas是什么?能做什么?这里copy官方文档的一段话来告诉大家.Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。当你遇到以...

2019-03-07 11:30:06 2201

原创 OOM,StackOverFlow以及死锁的测试

这篇文章主要是记录自己做的一些小的测试.主要包括内存溢出,栈溢出,以及死锁问题.PS:文章中使用了Arthas工具,用来动态监控JVM的一些资源,非常好用,强烈安利一下.OOMOutOfMemory ,内存不够用了,一般是什么原因呢?给应用程序分配的内存太小,只能通过增大内存来解决.内存泄漏.有一部分内存"无用"了,但是因为编码问题导致的没有被垃圾回收掉,产生了泄漏,最终导致了内...

2019-03-07 00:12:17 601

原创 [随缘一题]实现交易计算盈利

来源:根据先进先出原则实现交易.例如:buy 100 share(s) at $20 eachbuy 20 share(s) at $24 eachbuy 200 share(s) at $36 eachsell 150 share(s) at $30 each得出计算结果 940.优先卖掉持有时间最长的.解题思路直接使用Arraylist保存,卖出时从第一个开始即可.当然...

2019-02-24 16:52:54 162

原创 [随缘一题]后缀表达式(逆波兰表达式)转换

来源:维基百科-后缀表达式目标将中缀表达式转换为后缀表达式,比如((5+2) * (8-3))/4 转换为5 2 + 8 3 - * 4 /.解题思路将表达式的字符逐一处理,如果是数字(变量)则直接输出,如果是字符入栈,并按以下规则进行处理.+/-: 低优先级,所以将栈中的所有运算符出栈,之后将自己入栈.*or/:高优先级,将栈中的其他乘除运算符出栈,之后将自己入栈.(: 左括号则...

2019-02-24 16:50:20 306

原创 [随缘一题]回溯法解决N皇后问题

来源:维基百科-N皇后问题解题思路采用回溯法,即逐一位置放置,然后放置下一行,如果下一行没有合法位置,则回溯到上一行,调整位置,直到得到所有值.实现代码/** * solve the N-Queen problem */public class NQueen { //the number of chess board,example 8 private static fi...

2019-02-24 16:46:22 209

原创 单例模式的N种写法

1.前言写完这个题目,我感觉自己好像"孔乙己"啊,回字的四种写法要不要学啊~我们经常会用到单例模式,但是我对他一直没有一个统一的的认识,比如我清楚好多种单例的写法,但是每一种是怎么演化来的?具体解决了什么问题?这块就没有那么清晰了,因此此文对单例模式进行一个总结,同时手撸一下代码加深理解.2.介绍单例模式,即某一个类在整个系统中有且仅有一个实例.经常用来读取配置,获取连接等等.3.实现...

2019-01-31 14:22:30 225

原创 Java的序列化与反序列化

前言Java的序列化与反序列化是Java中比较重要的一个知识,本文将总结一下,怎么使用序列化功能以及经常遇到的一些问题的解答.什么是Java的序列化JDK提供给我们的,可以将某一个对象转化为二进制字节流保存,并从字节流恢复对象的一种技术.我们可以再网络传输对象,或者持久化对象时使用这项技术.怎么进行序列化与反序列化Java中通过继承Serializable接口来获得序列化与反序列化的能...

2019-01-29 21:16:30 238

原创 Java类加载的执行顺序

前言那一年,呼延十又回想起被加载顺序支配的恐惧,笔试题上,好几个类,几个方法,几个输出语句,让你按照顺序写出输出.我真的是有一句…但是呢,我们还是有了解一下的必要的,在编码过程中有许多的应用.正文经常用来比较顺序的,无非就是静态代码块,普通代码块,静态方法和普通方法.这里直接说一下结论:先静态后普通最后构造方法,先父类后子类.看一下实际的例子:package daily;/**...

2019-01-29 00:34:39 241

原创 使用自定义注解实现接口参数校验

1.前言在接口的开发中,我们有时会想让某个接口只可以被特定的人(来源)请求,那么就需要在服务端对请求参数做校验.这种情况我们可以使用interceptor来统一进行参数校验,但是如果很多个接口,有不同的的设定值,我们总不能写很多个interceptor,然后按照patn逐一添加吧?面对这种情况,我们可以选择自定义一个注解,由注解来告诉我们,这个接口允许的访问者是谁.注:在本文的示例中,仅实...

2019-01-21 00:10:59 1994

原创 [随缘一题]-实现栈

来源:lintcode-495.实现栈描述实现一个栈,可以使用除了栈之外的数据结构解题思路这个题真的是…皮.用ArrayList试试.import java.util.ArrayList;/** * created by huyanshi on 2019/1/17 */public class Stack { private ArrayList<Integer&...

2019-01-18 00:10:28 186

原创 TOP-K问题

前言TOP-K问题是面试中的常见题型,具体表现为:海量数据求最大(最小)的K个值.比如:给定1亿个乱序的整数,求其中最大的1000个今天一步一步来分析这种题目的解决办法,以及用到的算法思想.依赖此文中会依赖到快速排序,堆排序等排序算法,以及数据结构堆.如果你对上述两者的原理有所了解,可以继续往下看.如果不了解,可以点击链接先看一下基础~.好,进入正题.(以给定1亿个乱序的整数...

2019-01-16 23:25:49 3466 1

原创 数据结构-堆

介绍堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。定义堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称...

2019-01-16 01:49:44 208

原创 面试常用排序算法总结

layout: postcategory: [算法,排序,面试]tags:算法面试排序前言面试的死亡高发区是什么?手写快排.其他的排序算法也经常会问到,虽然在工作中,我们很少有需要自己手写排序算法的机会,但是这种入门级的算法却是证明我们能力的一种简单方法.因此要熟悉掌握.这篇文章,详细记录常用的一些排序算法,留以备忘.本文所有代码可在github上下载查看.传送门为了...

2019-01-14 15:49:06 429

原创 linux进价命令(sort,comm,unip等)

1. sedsed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。func...

2019-01-12 21:23:14 2192

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除