7 三劫散仙

尚未进行身份认证

阿里巴巴高级工程师,专注研究和分享Java技术栈和大数据开发及大规模数据集群的SRE智能化运维,欢迎关注我的公众号(我是攻城师)woshigcs,我们一起学习,交流,进步。

等级
TA的排名 2k+

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

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

2019-09-22 01:59:39

最近学车的一点经验

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

2019-08-28 22:59:20

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

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

2019-07-23 19:14:47

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

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

2019-07-17 10:07:53

复盘一个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

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

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

2019-07-03 23:40:24

深入理解什么是LSM-Tree

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

2019-05-21 20:03:23

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

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

2019-03-22 19:58:23

Apache Flink在阿里的使用(译)

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

2019-02-21 21:21:21

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

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

2019-01-21 18:00:47

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

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

2019-01-10 21:54:58

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

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

2019-01-06 18:39:28

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

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

2019-01-04 18:44:57

操作系统之CPU知识扫盲

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

2018-12-22 13:58:42

关于Linux进程的基础知识

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

2018-12-17 16:04:18

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

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

2018-12-11 20:43:50

再谈方法调用与堆栈

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

2018-11-17 14:20:15

聊聊Java里面的引用传递

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

2018-11-16 21:33:46

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

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

2018-10-11 10:03:34

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

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

2018-10-11 09:57:47

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。