自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

三劫散仙

有问题关注微信公众号:我是攻城师(woshigcs)

  • 博客(902)
  • 资源 (17)
  • 论坛 (1)
  • 收藏
  • 关注

原创 记一次log4j不打印日志的踩坑记

起因前几天一个跑有java应用的生产集群(200多台物理机)升级了一个版本,重启后发现约有50台机器日志不能正常输出,但其程序确能正常的运行,在生产环境中,日志是非常重要的一个监控手段,如果没有日志输出,无疑是非常危险的。排查 & 解决发现这一情况后,立即开始从jdk环境和版本,cpu负载,内存gc,线程stack,死锁,磁盘容量等多方面排查,但均没有发现异常情况,唯一的一点信...

2019-09-22 02:00:25 517

原创 最近学车的一点经验

https://mp.weixin.qq.com/s?__biz=MzAxMzE4MDI0NQ==&mid=2650336733&idx=1&sn=7f89fd6d1f81741f77f4b65576c06812&chksm=83aac1e7b4dd48f1da097a30a822875e6df5094e9397c640b848fa33f2a62f773396acd...

2019-08-28 22:59:20 506 2

原创 在Java里面如何解决进退两难的jar包冲突问题?

如上图所示:es api组件依赖guava18.0,spark项目由于业务需要写入es所以需要依赖es ,但spark项目的环境又需要依赖guava14.0,如果换成高版本可能会报错,这个决定了你不能都使用统一的低版本或者高版本来规避此问题,因此必须面对现实。导致异常的原因简单说下:spark环境首先启动,导致jvm里面已经加载了guava14.0,这个时候jvm不会加载es依赖的...

2019-07-23 19:14:47 1279 1

原创 什么是操作系统的虚拟内存?

https://mp.weixin.qq.com/s?__biz=MzAxMzE4MDI0NQ==&mid=2650336679&idx=1&sn=1b727d7ddc6c069627d7b8fbb444aaf4&chksm=83aac19db4dd488b5186ed9d7f1ff14b89234ac8479708b89b107de39f173adef227921...

2019-07-17 10:07:53 1866

原创 复盘一个Elasticsearch排序问题的剖析

最近线上的es查询的某个微服务接口,报了一个异常,如下:nested: SearchParseException[No mapping found for [count] in order to sort on];Caused by: SearchParseException[failed to parse search source 直接从异常上看,可以得到是因为mapping里面...

2019-07-15 21:13:58 705

原创 如何轻松理解二叉树的深度遍历策略

我们知道普通的线性数据结构如链表,数组等,遍历方式单一,都是从头到尾遍历就行,但树这种数据结构却不一样,我们从一个节点出发,下一个节点却有可能遇到多个分支路径,所以为了遍历树的全部节点,我们需要借助一个临时容器,通常是栈这种数据结构,来存储当遇到多个分叉路径时的,存暂时没走的其他路径,等走过的路径遍历完之后,再继续返回到原来没走的路径进行遍历,这一点不论在递归中的遍历还是迭代中的遍历中其实都是...

2019-07-03 23:40:24 528

原创 深入理解什么是LSM-Tree

前言十多年前,谷歌发布了大名鼎鼎的"三驾马车"的论文,分别是GFS(2003年),MapReduce(2004年),BigTable(2006年),为开源界在大数据领域带来了无数的灵感,其中在 “BigTable” 的论文中很多很酷的方面之一就是它所使用的文件组织方式,这个方法更一般的名字叫 Log Structured-Merge Tree。在面对亿级别之上的海量数据的存储和检索的场景下,我...

2019-05-21 20:03:23 12921 1

原创 18个高效使用Google搜索的技巧

前言如果把浩瀚的互联网资源比喻成是一个图书馆,那么google搜索引擎毫无疑问是这个图书馆的导航中心,通过google可以轻而易举得检索到绝大多数你需要的资料,然而大多数人可能并没有充分发挥谷歌搜索的潜力。如何才能更加高效,快速的利用好谷歌这个搜索引擎呢?这里有18个技巧用来提升你的检索效率。1.使用Tab面板使用谷歌使用结果完成后,在搜索栏的下面会出现多个Tab面板,默认分别...

2019-03-22 19:58:23 1976

原创 Apache Flink在阿里的使用(译)

Flink是未来大数据实时数据处理领域的首选框架,本文原文是阿里巴巴的搜索团队总监Xiaowei Jiang在Flink Forward 2016大会上分享的内容,后来被记录并移到Flink公司官网的Blog上(注意这个不是社区的官网,原名叫data Artisans,被阿里收购后改为ververica)。文章内容很不错,我这里也是抱着学习和了解的心态翻译了一下这篇文章,英语好的同学建议直接去...

2019-02-21 21:21:21 1505

原创 为什么单线程Redis性能也很出色

高性能的服务器,不一定是多线程实现的,也就是说多线程不一定比单线程效率高,这得分具体的情况。以redis为例,核心处理请求的线程只有一个,所以我们常常理解其仅仅只有一个线程,但准确来说其实并不是单线程的,比如日志的备份需要单独的fork一个进程或者线程去做备份等,那么redis何来单线程还能达到如此10万+的qps呢?其实这取决于具体的实现,redis采用了基于高性能Reactor的IO多路复用...

2019-01-21 18:00:47 512

原创 如何扩展python的logging组件支持json日志输出

这两天在优化公司一个python的项目,顺便研究了一下如何将python日志转成json格式,原来在Java的项目中搞过类似的事情,知道日志转成json之后有很多便利的之处,最常见的就是可以直接对接各种日志分析系统,如开源的ELK,将数据导入之后就能快速的进行查询和分析,方便做各种统计,监控或报警等。python里面的logging组件,其实已经是组件化了,有Logger组件,Handler组...

2019-01-10 21:54:58 2511 1

原创 为什么Java里面String类是不可变的

在Java里面String类型是不可变对象,这一点毫无疑问,那么为什么Java语言的设计者要把String类型设计成不可变对象呢?这是一个值得思考的问题Java语言的创建者James Gosling,曾经在一次采访中被人问到:什么时候应该使用不可变对象(immutable object),他回答:任何可以使用的时候都会使用。在这之前,我们先来简单了解一下,什么是不可变对象?不可变对象指...

2019-01-06 18:39:28 1447 1

原创 关于Java里面volatile关键字的重排序

Java里面volatile关键字主要有两个作用:(1)可见性(2)禁止指令重排序第一条可见性比较容易理解,就是使用volatile修饰的共享变量,如果有一个线程修改了值,其他的线程里面是立即可见的。原理是对volatile变量的读写,都会强制线程操作从主内存。第二条禁止指令重排序,能够保证局部的代码执行的顺序。假设我们现在有如下的一段代码: int a=2; ...

2019-01-04 18:44:57 519

原创 操作系统之CPU知识扫盲

(上图是一个拥有两个物理cpu的主板电路,图片来源于网络)前言CPU的英文全称是(Central Processing Unit),中文意思翻译中央处理器,是计算机的主要设备之一,功能主要是解释计算机指令以及处理计算机软件中的数据。计算机的可编程性主要是指对中央处理器的编程。关于冯·诺依曼结构冯·诺依曼结构(Von Neumann architecture)是一种将程序指令存储...

2018-12-22 13:58:42 530

原创 关于Linux进程的基础知识

前言在计算机里面,一个进程通常指的是一个运行程序的实例,它包含程序代码和其活动。依赖于具体的操作系统,一个进程启动后通常由若干个线程组成,多个线程可以同时并发的执行程序的指令,进程里面第一个启动的线程,通常称为主线程。进程的类型前台进程通常也指交互进程,这些进程一般都是通过linux终端会话创建的,换句话说必须有用户连接到系统上,然后开启一个进程,这种进程不会被系统函数或者创建。...

2018-12-17 16:04:18 152

原创 多个线程如何轮流打印ABC特定的次数?

之前的一篇文章,我给出了关于多线程应用的几个例子:都是基于Java里面Lock锁实现的,分别是:(1)两个线程轮流打印奇数和偶数(2)多个线程模拟买票(3)模拟生产者消费者今天再抛砖引玉,思考一下如何在多个线程中,轮流打印特定顺序的信息多少次。这类问题其实并不难,只要掌握了Java里面线程协作和锁的知识,就可以轻而易举的搞定:根据这些,我们来假设一个场景,使用三个线程轮...

2018-12-11 20:43:50 775

原创 再谈方法调用与堆栈

再谈方法调用与堆和栈在JVM里面,最重要的两个运行时数据区,无非就是堆和栈了。关于堆堆内存是被多个线程共享的,而栈内存是线程私有的。堆主要用来存储运行时所有的对象数据和各种数组,简单点说通过new创建的实例,都会在堆上分配空间。堆在虚拟机启动时创建,并且堆具有自动垃圾回收的功能,在Java的世界里,程序员是没办法直接销毁你所创建的对象的,一切必须由GC垃圾回收器来完成,也就是你用完后的...

2018-11-17 14:20:15 678

原创 聊聊Java里面的引用传递

聊聊Java里面的"引用传递"长久以来,在Java语言里面一直有一个争论,就是Java语言到底是值传递(pass-by-value)还是引用传递(pass-by-reference),有的人说是值传递,有的人说是引用传递,两边各执一词,从而误导了很多开发者,更有甚者告诉开发者说不必纠结Java到底是值传递还是引用传递,只要能用就行了,但事实真的是这样吗? 答案是否定的。为了弄清这两个概念,...

2018-11-16 21:33:46 142

理解计数排序算法的原理和实现

计数排序(Counting sort)是一种稳定的线性时间排序算法,其平均时间复杂度和空间复杂度为O(n+k),其中n为数组元素的个数,k为待排序数组里面的最大值。同样具有线性时间排序的算法还有桶排序和基数排序,这一点不要搞混。计数排序不是基于比较的排序,所以它的排序效率是线性的,在特定的场景下(已知数组的最大最小值,切数组元素整体量不是很大的情况下)排序效率极高,而基于比较排序的...

2018-10-11 10:03:34 670

原创 理解计数排序算法的原理和实现

计数排序(Counting sort)是一种稳定的线性时间排序算法,其平均时间复杂度和空间复杂度为O(n+k),其中n为数组元素的个数,k为待排序数组里面的最大值。同样具有线性时间排序的算法还有桶排序和基数排序,这一点不要搞混。计数排序不是基于比较的排序,所以它的排序效率是线性的,在特定的场景下(已知数组的最大最小值,切数组元素整体量不是很大的情况下)排序效率极高,而基于比较排序的算法,其时间...

2018-10-11 09:57:47 240

原创 深入理解Java类加载器机制

前言Java里面的类加载机制,可以说是Java虚拟机核心组件之一,掌握和理解JVM虚拟机的架构,将有助于我们站在底层原理的角度上来理解Java语言,这也是为什么我们学习一个新的知识时,如果不理解原理全靠死记硬背,我相信过不了几天便会忘记的一干二净。Java是一门跨平台的语言,而JVM虚拟机则在这中间扮演了非常重要的角色,对于我们编写的.java文件,在编译期间会被转换成二进制的class文...

2018-09-25 10:06:24 1052

原创 理解Java并发工具包线程池的设计

为什么需要线程池?答:主要原因是因为创建一个线程开销太大,尤其是对大量的小任务需要执行这种场景。在Java里面创建一个线程,需要包含的东西:(1)它为一个线程堆栈分配内存,该堆栈为每个线程方法调用保存一个帧(2)每个帧由局部变量数组,返回值,操作数栈,常量池组成(3)某些JVM会为本地方法分配一个本地栈(4)每个线程有一个程序计数器,用来告诉进程当前的指令执行到什么地方...

2018-09-12 21:25:58 1251

理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略

### 前言理解HashMap和ConcurrentHashMap的重点在于:(1)理解HashMap的数据结构的设计和实现思路(2)在(1)的基础上,理解ConcurrentHashMap的并发安全的设计和实现思路前面的文章已经介绍过Map结构的底层实现,这里我们重点放在其扩容方法,这里分别对JDK7和JDK8版本的HashMap+ConcurrentHash...

2018-09-06 11:31:21 213

原创 理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略

前言理解HashMap和ConcurrentHashMap的重点在于:(1)理解HashMap的数据结构的设计和实现思路(2)在(1)的基础上,理解ConcurrentHashMap的并发安全的设计和实现思路前面的文章已经介绍过Map结构的底层实现,这里我们重点放在其扩容方法, 这里分别对JDK7和JDK8版本的HashMap+ConcurrentHashMap来分析:JDK7...

2018-09-06 11:25:56 10998 2

原创 关于Java里面多线程同步的一些知识

# 关于Java里面多线程同步的一些知识对于任何Java开发者来说多线程和同步是一个非常重要的话题。比较好的掌握同步和线程安全相关的知识将使得我们则更加有优势,同时这些知识并不是非常容易就能熟练掌握的,实际上写出正确的并发代码是一件比较困难的事情。在Java的自带的库里面,已经包含了非常多实用的并发工具类,今天这篇文章,我们主要来学习Java里面synchronized关键字的相关知识。...

2018-07-18 10:20:26 195

关于Java里面多线程同步的一些知识

# 关于Java里面多线程同步的一些知识对于任何Java开发者来说多线程和同步是一个非常重要的话题。比较好的掌握同步和线程安全相关的知识将使得我们则更加有优势,同时这些知识并不是非常容易就能熟练掌握的,实际上写出正确的并发代码是一件比较困难的事情。在Java的自带的库里面,已经包含了非常多实用的并发工具类,今天这篇文章,我们主要来学习Java里面synchronized关键字的相关知识。...

2018-07-18 09:45:00 54

Java单例模式之双检锁深入思考

# Java单例模式之双检锁剖析### 前言单例模式在Java开发中是非常经典和实用的一种设计模式,在JDK的内部包的好多api都采用了单例模式,如我们熟悉的Runtime类,单例模式总的来说有两种创建方式,一种是延迟加载的模式,一种是非延迟加载的模式,今天我们来学习一下基于双检锁延迟加载的单例模式。### 什么是单例模式顾名思义,单例模式指的是在整个程序运行期间,...

2018-07-08 12:25:43 204

关于Java里面多线程同步的一些知识

# 关于Java里面多线程同步的一些知识对于任何Java开发者来说多线程和同步是一个非常重要的话题。比较好的掌握同步和线程安全相关的知识将使得我们则更加有优势,同时这些知识并不是非常容易就能熟练掌握的,实际上写出正确的并发代码是一件比较困难的事情。在Java的自带的库里面,已经包含了非常多实用的并发工具类,今天这篇文章,我们主要来学习Java里面synchronized关键字的相关知识。...

2018-07-08 12:23:08 90

重新认识同步与异步,阻塞和非阻塞的概念

# 重新认识同步与异步,阻塞和非阻塞的概念### 前言在实际的开发中,我们经常会听到同步,异步,阻塞,非阻塞这些编程概念,每次遇到的时候都会蒙圈,然后就各种查网上似是而非的资料,结果越查越迷糊,大部分文章都千篇一律,没有说到本质上的区别,所以下次再碰到这些概念,印象还是比较模糊,尤其是在一些场景下同步与阻塞,异步与非阻塞感觉没啥区别,但其实这四个术语描述的事物还真不是一回事。...

2018-07-06 14:30:41 80

原创 线程的基本知识总结

(一)创建线程的方式(1)实现Runnable接口(2)继承Thread类推荐使用接口,能够做到定义与实现分离,耦合更低(二)关于线程的优先级thread2.setPriority(Thread.MAX_PRIORITY)等级越高,优先运行(三)关于线程的yield的方法关于yield方法,是指当前线程可能运行不太重要的任务,可以通过这个方法 暗示操作系统线程调度我可以晚点执行,先把CPU资源让给...

2018-06-27 16:29:45 153

线程的基本知识总结

### (一)创建线程的方式(1)实现Runnable接口(2)继承Thread类推荐使用接口,能够做到定义与实现分离,耦合更低### (二)关于线程的优先级 thread2.setPriority(Thread.MAX_PRIORITY) 等级越高,优先运行### (三)关于线程的yield的方法关于yield方法,...

2018-06-27 16:27:01 61

原创 Java里面volatile关键字修饰引用变量的陷阱

Java里面volatile关键字修饰引用变量的陷阱如果我现在问你volatile的关键字的作用,你可能会回答对于一个线程修改的变量对其他的线程立即可见。这种说法没多大问题,但是不够严谨。严谨的回答应该是volatile关键字对于基本类型的修改可以在随后对多个线程的读保持一致,但是对于引用类型如数组,实体bean,仅仅保证引用的可见性,但并不保证引用内容的可见性。下面这些数据结构都属于引用类型,即...

2018-06-25 11:57:20 7087 4

原创 关于Java里面的字符串拼接,你了解多少?

关于Java里面的字符串拼接,你了解多少?前言字符串拼接是我们日常开发中很常见的操作,虽然常见,但要是使用不当的的话,很有可能让你的程序处理效率降低一大半,所以我们有必要来重新了解一下Java里面的字符串操作。基础知识回顾(1)关于字符串字面量String text="我是攻城师1";上面的这行代码是我们最常见的声明方式,它会创建一个对象,并放在字符串常量池里面,关于常量池的内容,可以参考我之前...

2018-06-25 11:48:35 809

原创 深入理解Java内存模型的语义

前言Java内存模型(JMM)给我们介绍了在当代不同的硬件架构情况下,多线程程序需要关注什么问题以及如何利用JMM来正确的处理这些问题。多线程带来的问题多线程程序主要关注两个问题:(1)共享变量可见性问题(2)代码重排序一致性问题Java内存模型的关键点JMM已经保证了as-if-serial原则,也就是Java的程序在单线程情况下,不管JIT做不做重排序,也不管代码指令在几个CPU上执行,看到的...

2018-06-25 11:47:48 254

Java里面volatile关键字修饰引用变量的陷阱

# Java里面volatile关键字修饰引用变量的陷阱如果我现在问你volatile的关键字的作用,你可能会回答对于一个线程修改的变量对其他的线程立即可见。这种说法没多大问题,但是不够严谨。严谨的回答应该是volatile关键字对于基本类型的修改可以在随后对多个线程的读保持一致,但是对于引用类型如数组,实体bean,仅仅保证引用的可见性,但并不保证引用内容的可见性。下面这...

2018-06-25 11:42:33 340

深入理解Java内存模型的语义

[img]https://www.logicbig.com/tutorials/core-java-tutorial/java-multi-threading/java-memory-model/images/jmm.png[/img]### 前言Java内存模型(JMM)给我们介绍了在当代不同的硬件架构情况下,多线程程序需要关注什么问题以及如何利用JMM来正确的处理这些问题。##...

2018-06-25 11:39:04 72

关于Java里面的字符串拼接,你了解多少?

# 关于Java里面的字符串拼接,你了解多少?### 前言字符串拼接是我们日常开发中很常见的操作,虽然常见,但要是使用不当的的话,很有可能让你的程序处理效率降低一大半,所以我们有必要来重新了解一下Java里面的字符串操作。### 基础知识回顾(1)关于字符串字面量[code="java"]```String text="我是攻城师1";```[...

2018-06-25 11:28:54 61

原创 如何证明Java多线程中的成员变量数据是互不可见的

前面的几篇文章主要介绍了Java的内存模型,进程和线程的定义,特点和联系,其中在Java多线程里面有一个数据不可见的问题而我们知道使用volatile可以解决,但是如何证明这个多线程修改共享数据是不可见的呢?很简单,看下面的一段代码: private static boolean keepRunning=true; public static void main(String[...

2018-06-21 10:10:06 740 3

如何证明Java多线程中的成员变量数据是互不可见的

前面的几篇文章主要介绍了Java的内存模型,进程和线程的定义,特点和联系,其中在Java多线程里面有一个数据不可见的问题而我们知道使用volatile可以解决,但是如何证明这个多线程修改共享数据是不可见的呢?很简单,看下面的一段代码:[code="java"]````java private static boolean keepRunning=true;...

2018-06-21 10:09:13 211 1

原创 给Java字节码加上”翅膀“的JIT编译器

给Java字节码加上”翅膀“的JIT编译器上面文章在介绍Java的内存模型的时候,提到过由于编译器的优化会导致重排序的问题,其中一个比较重要的点地方就是关于JIT编译器的功能。JIT的英文单词是Just In Time翻译成中文就是及时,恰好的意思,意在说明JIT编译器优化java的class文件里面的byte code是拿捏的恰到好处。JIT编译器是JRE里面的一个为了在运行时提升Java程序性...

2018-06-20 10:12:52 276

hadoop插件

基于Hadoop2.2的稳定版本的,eclipse插件,大家以后可以更方便的调试Hadoop程序了。

2013-12-17

luke4.6工具

luke4.6查看索引工具,最新版lucene的查看工具,本人测试过,可以正常使用!

2013-12-05

eclipse插件

hadoop1.2.0的eclipse插件,笔者经过测试可以完美运行,对于刚学习hadoop1。x的同学们,是一份不可多得的好资料。

2013-11-10

luke4.5的jar包

luke4.5的索引查看工具,最新版lucene的索引查看工具,用4.x版本的lucene的朋友们,可以使用luke4.5方便的查看,修改,更新索引了,支持4.5之前的所有lucene索引,有需要的朋友们,下载吧,LZ测试过,可以正常使用。

2013-10-29

Access驱动

jdbc Access驱动,兼容处理03,07+的Access,的增删改查。值得下载

2013-09-23

lucene4.3工具类

lucene4.3增删改查的的一个工具类,对新手来说是一份不可多得的入门资料。

2013-08-15

luke4.4索引查看工具

关于全文检索的最新版Lucene4.4,solr4.4的索引查看工具,新项目的开发的朋友们,可以下载下来,方便查询索引结构。

2013-08-15

网络爬虫heritrix

Heritrix是一个由纯java开发的,开源的Web网络爬虫,其性能优势完全可以和Nutch相媲美,二者各有优缺点!

2013-08-08

向LUCENE搜索引擎中加人中文同义词查询

介绍lucene同义词库的使用,想使用lucene同义词的朋友们,如果不知道原理的可以看下。

2013-08-08

lucene的索引工具

lucene的最新版本的索引查看工具,支持4.x以上的索引查看,分析,非常方便调试,官网只能支持到4.0,本工具支持最新的lucene及solr的4.3版本。

2013-07-18

solr各个热点功能详解

详细介绍了solr中,各个功能的UI页面的使用,以及使用solrj操作solr的代码,比较全面的总结了solr的各个功能点。是不可多得的好资料!

2013-07-11

开源搜索引擎solr的介绍及使用

对于solr,lucene,是当前比较火的开源搜索引擎,本文档提供了详细的描述信息

2013-07-11

JAVA EE必知的知识点

能够给JAVA使用者,打好一个坚实的基础,只要把里面的一些东西,掌握了,相信你的内容会更深厚的!!!

2013-07-11

solr4.3的IK分词器

最新版solr4.3的IK分词器,中文分词效果良好!对付一般的大众分词没有问题

2013-06-25

solrcold与zk集群

关于solr4.3solrcloud与zk+tomcat6.x集群,详细描述。

2013-06-17

Core Java SE 9 for the Impatient, 2nd Edition

非常不错的学习java 9的基础相关的知识,建议大家都学习一下

2018-05-28

protobuf-2.5.0.tar.gz

Hadoop2.x安装必须的通信包,google的protobuf协议,google官网已经下载不了了,特地传到此处,供大家使用! 在编译hadoop的时候,是必须要安装这个的,否则编译会失败的

2015-06-24

三劫散仙的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

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

TA关注的人 TA的粉丝

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