0%

以前喜欢买书来看,有空捧着一本书静静的读着,这种感觉仿佛时间都停止了,现在参加了工作,时间变得相对少些,所以看电子书的频率高些(微信读书和Kindle),因为电子书看着方便,但对眼睛有伤害,看时间长了会眼睛疲劳,不过能过看书的瘾,也挺好^_^

Read more »

Java虚拟机定义了程序执行期间使用的各种运行时数据区域。如下图所示:

image

在Java虚拟机规范的描述中,虚拟机栈、本地方法栈和程序计数器是线程私有的,而像堆、方法区(Jdk8之前)、元空间(JDK8之后)属于所有线程共享区域。除了程序计数器外,虚拟机内存的其他几个运行时区域都有可能发生OutOfMemoryError(OOM)异常的可能,Java doc对OutOfMemoryError的描述是没有空闲内存,并且垃圾回收器也无法提供更多内存。

Read more »

相信把Java当做生产力工具的同学肯定对gc比较熟悉的,JVM团队在这块下了很多的功夫创造了很多垃圾收集器,不过有些垃圾收集器随着技术的发展被淘汰了,有些是最新开发的,技术很先进,效果很出众。下面介绍下有哪些垃圾收集器以及相关参数。

Read more »

在线上应用对JVM参数设置不合理的情况下,有可能发生OOM(Out of Memory Error),不过OOM也分很多种,可以参考:OutOfMemoryError详细介绍,下面就以我遇到的堆OOM来分析下相关日志信息。

通常OOM时会触发 Linux 内核里的 Out of Memory (OOM) killer,OOM killer会杀掉某个进程以腾出内存留给系统用,不致于让系统立刻崩溃。详细原因分析参考:linux 终端报错 Out of memory: Kill process[PID] [process name] score问题分析,在应用启动之前,需要打印GC日志以及保存JVM错误日志,设置以下JVM参数:

1
2
3
4
5
-XX:+PrintGCDetails
-XX:HeapDumpPath=targetDir
-XX:ErrorFile=targetDir\\hs_err_pid%p.log
-Xloggc:targetDir\\gc.log
-XX:HeapDumpPath=targetDir
Read more »

很久没有用现在的笔记本连过RabbitMQ,今天在Windows上装了一下RabbitMQ,然后启用管理界面,发现怎么都启用不了,一直提示:Plugin configuration unchanged.,查看服务发现MQ的服务都关闭了,为什么会自动关闭服务呢?我们来查看下MQ的日志,路径是:C:\Users\明山\AppData\Roaming\RabbitMQ\log\rabbit@DESKTOP-Q1D3TT5.log,在文件末尾,发现有下面的错误:

Read more »

序幕

旁白:纵观天下大势,分久必合,合久必分,风云变幻,成王败寇。汉室衰微,天下英雄逐鹿中原。曹操为除董卓散家财起兵,天意相助,然刘备先投后反曹操,引出事端,后刘备奔逃,曹操计围关羽,遣张文远劝关降曹,这才引出曹公信义放关羽的故事。

Read more »

图(Graph)这个数据结构在平时开发中遇到的比较少,但我认为它是十分重要的,因为从真实的世界中来看,很多东西都可以抽象为图的表示,比如人际关系,地理位置,天马行空的东西都可以抽象为图,所以它比链表等基础数据结构高级一点点,也比较复杂,属于非线性结构。数学中有一个图论的分支也是与其有关。了解图在程序世界的存储方式,我们可以更加细致地刻画图的结构,让其为我所用,岂不妙哉?

Read more »

平时我们用MySQL,字符编码方式一般是 utf8 或者 utf8mb4,至于MySQL内部是如何处理编码问题的在日常开发中并没有十分关注,遇到最多的问题也无非是表中中文乱码和表情无法存储。对于编码不一致的问题,出问题是在所难免的,我们需要系统地了解下在MySQL内部字符集是如何配置和转化的。

Read more »

咳咳,趁着2019年的小尾巴,总结下这一年我都干了些什么吧。最近几年每年年初几乎都要立flag,其实flag不是说我今年一定要搞成什么样子,而是让自己能够坚持做一件事情,至少正儿八经地定一个目标。

Read more »

在维基百科中,关于分治算法(divide-and-conquer)的介绍如下:在计算机科学中,分治法是建基于多项分支递归的一种很重要的算法范式。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个概念非常好理解,一个操作的计算规模很大,直接计算比较困难,如果可以将该问题分解为多个子问题进行计算,并且合并这些计算结果与原计算结果期望一致,那么这样就再好不过了。

单从上述概念来理解,我们不难发现,利用分治算法有一个分解与合并的过程,至于分解后的小规模问题如果解决,可以继续利用分治思想继续进行分解,直至可以直接计算。这就形成了递归。所以利用分治算法求解问题一般有三个步骤:

  1. 分解:将原问题分解为若干个规模较小,相对独立,与原问题形式相同的子问题。
  2. 解决:若子问题规模较小且易于解决时,则直接解。否则,递归地解决各子问题。
  3. 合并:将各子问题的解合并为原问题的解。
Read more »