随笔分类 - 【Java后端从零单排】
摘要:Java 8 新引入的 Optional 和 Stream 功能很强大,用的好可以大大简化代码,提高效率。同时,大数据编程框架的源码以及业务代码大量使用了流式编程的思想。所以,这一块必须熟练掌握。 但是,流式编程不是 "the silver bullet" ,有些场景使用可能 overkill ,让
阅读全文
摘要:日志框架的上,下两篇把大部分的内容都涵盖了,有些额外的小知识点(但是同样十分重要),放到这里来说。 知识点1:Log4j Properties File 配置详解 关于Logger 一般来说,一定(最好)要配一个 rootLogger ,告诉 log4j 默认情况下的 logger 的配置情况。 #
阅读全文
摘要:上篇 首先,本文会简单介绍日志框架是什么。 其次,本文会讲解 JUL + JCL + Log4j + Slf4j 等如何实际使用。 下篇 然后,本文会探讨当项目中不同 jar 包使用不同日志框架时的兼容性问题。 最后,本文会介绍一个关于日志框架的实际 Debug 的例子。 桥接 如果使用了多个 lo
阅读全文
摘要:上篇 首先,本文会简单介绍日志框架是什么。 其次,本文会讲解 JUL + JCL + Log4j + Slf4j 等如何实际使用。 下篇 然后,本文会探讨当项目中不同 jar 包使用不同日志框架时的兼容性问题。 最后,本文会介绍一个关于日志框架的实际 Debug 的例子。 日志框架 - 综述 打 l
阅读全文
摘要:如何优雅地抛 Exception ,细节很关键。 准备工作 定义了一个工具类,用来抛异常 public class SomeUtils { public static void service() throws Exception{ throw new InvalidClassException("
阅读全文
摘要:当我们自己跑一个小程序时,可以用类似java app.jar的命令直接跑。而在实际的生产/开发环境,除了classpath外,还会加上一大堆JVM运行参数。 下面,就对一个实例进行分析: -Xms140G // 最小堆 -Xmx140G // 最大堆 -Xss10M // 栈空间 -XX:Metas
阅读全文
摘要:关于异常Exception,相信大家在开发中都多多少少遇到过,也应该知道要Catch住Exception。本文从实战出发,从头再把这个知识点梳理下。 概述 Exception和Error都继承自Throwable。结构如下: Throwable Error VirtualMachineError O
阅读全文
摘要:当线上发生了性能问题时,需要我们快速定位问题。本文模拟了一次内存泄漏,从零教学一步步手动排查。 模拟事故现场 使用如下代码模拟内存泄漏。起了几个问题线程(在不停地创建很大的StringBuilder)。另外还有一些常规线程。 import java.util.List; import java.ut
阅读全文
摘要:相信很多同学都多多少少听过Generic-泛型这个概念。下面就结合实际的例子对泛型进行讲解和剖析。 为什么要用泛型 泛,有多的意思。型,即为类型。结合起来,就是可以用泛型来指代“多种类型”,从而可以复用函数或类。 举例:写一个echo函数用来输出List种某两个位置的值。 当List里面装的是Str
阅读全文
摘要:为什么要索引 查询数据库,当数据量很大时,往往很慢,为了加快查询速度,程序员们想了一个办法,就是建立索引。但是天下没有免费的午餐,当插入新的数据时,系统会自动更新索引,所以在空间(storage)和时间(update time)上有一定地额外的开销。 总结:为什么要索引?是为了查的更快。 索引的原理
阅读全文
摘要:问题 笔者对于本地调试已经有很多经验了,一般流程是:在IDE中设置断点,配置参数,开始调试。这里的程序是跑在本地的机器上的。 而在实际开发或者生产环境中,应用都是部署在某个服务器上的,服务器上的机器性能更强大,而且可以起集群协同处理。 由于本地的机器的资源限制(笔者的台式机6核16G内存),对于大型
阅读全文
摘要:初识 A container object which may or may not contain a non-null value. 笔者理解,Optional是一个容器类。将Object放到Optional中,从而可以使用容器的一些特性,比如链式编程(Stream)等。 具体应用起来,可以分为
阅读全文
摘要:背景 在开发中,遇到这种情况,多个线程同时工作,突然一个线程遇到了fetal的错误,需要立即终止程序,等人工排查解决了问题之后重新启动。但是这样会有一个问题,程序终止时,其他线程可能正在进行重要操作,比如发一个message到另一个模块,并更新数据库状态。突然终止,可能会让这个操作只完成一半,从而导
阅读全文
摘要:什么是数据库表分区 数据库表分区(Partitioning),即将一个大的数据表(Table)及其索引(Index)切分更小的部分。这些分区可以有不同的名字,甚至是存储方式。 Oracle Partitioning Overview 为什么要做分区 存储均衡:可以分摊大量数据到不同存储介质中。 方便
阅读全文
摘要:什么是方法引用 我们知道了什么是Lambda Expression以及如何使用,那么,Method References又是什么呢?Oracle Java Docs中这样说: They are compact, easy-to-read lambda expressions for methods
阅读全文
摘要:默认情况 - 双等号==,比较的是内存地址。 - equals(),默认比较的是内存地址。 - hashCode(),默认返回的是object的内存地址。 String中方法改写的情况 经常会遇到需要override equals()和hashCode()的情况,比如String就改写了这两个方法。
阅读全文
摘要:什么是Lambda Expression 对于Lambda Expression,我的理解是,它是一个函数表达式,如下: (int x, int y) -> x - y 符号左边定义了函数的输入,右边定义了输出。在上面的例子中,我们定义了一个关于x,y的函数,这个函数的作用是计算两者之差。那么它的类
阅读全文