GitHub 1W star 成就达成! 起因感谢各位大佬的支持收获了人生第一个(很有可能也是唯一一个)1W star 项目。 从今年一月份创建项目至今 8 个月时间。 一共关闭了 27 个 issue,47 个 RP,总共有 11 位小伙伴参与维护。 神奇般的连续两个月上了 GitHub Java 热门榜首。 2018-08-17 Person > GitHub
如何成为一位「不那么差」的程序员 前言已经记不清有多少读者问过: 博主,你是怎么学习的?像我这样的情况有啥好的建议嘛? 也不知道啥时候我居然成人生导师了。当然我不排斥这些问题,和大家交流都是学习的过程。 因此也许诺会准备一篇关于学习方面的文章;所以本文其实准备了很久,篇幅较长,大家耐心看完希望能有收获。 以下内容仅代表我从业以来所积累的相关经验,我会从硬技能、软实力这些方面尽量阐述我所认为的 “不那么差的程序员” 应当做到 2018-08-12 Person
Netty(三) 什么是 TCP 拆、粘包?如何解决? 前言记得前段时间我们生产上的一个网关出现了故障。 这个网关逻辑非常简单,就是接收客户端的请求然后解析报文最后发送短信。 但这个请求并不是常见的 HTTP ,而是利用 Netty 自定义的协议。 有个前提是:网关是需要读取一段完整的报文才能进行后面的逻辑。 问题是有天突然发现网关解析报文出错,查看了客户端的发送日志也没发现问题,最后通过日志发现收到了许多不完整的报文,有些还多了。 于是想会不会 2018-08-03 Netty #拆包 #粘包 #protobuf
如何优雅的使用和理解线程池 前言平时接触过多线程开发的童鞋应该都或多或少了解过线程池,之前发布的《阿里巴巴 Java 手册》里也有一条: 可见线程池的重要性。 简单来说使用线程池有以下几个目的: 线程是稀缺资源,不能频繁的创建。 解耦作用;线程的创建于执行完全分开,方便维护。 应当将其放入一个池子中,可以给其他任务进行复用。 线程池原理谈到线程池就会想到池化技术,其中最核心的思想就是把宝贵的资源放到一个池子中;每次使 2018-07-29 Java 进阶 #Java #SpringBoot #ThreadPool #Hystirx
HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你! 前言Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据。 本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。 HashMap众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具体实现稍有 2018-07-23 Java 进阶 #Java #concurrent #ConcurrentHashMap #HashMap
Guava 源码分析(Cache 原理【二阶段】) 前言在上文「Guava 源码分析(Cache 原理)」中分析了 Guava Cache 的相关原理。 文末提到了回收机制、移除时间通知等内容,许多朋友也挺感兴趣,这次就这两个内容再来分析分析。 在开始之前先补习下 Java 自带的两个特性,Guava 中都有具体的应用。 Java 中的引用首先是 Java 中的引用。 在之前分享过 JVM 是根据可达性分析算法找出需要回收的对象,判断对象的存 2018-07-16 Guava #Cache
一次线上问题排查所引发的思考 前言之前或多或少分享过一些内存模型、对象创建之类的内容,其实大部分人看完都是懵懵懂懂,也不知道这些的实际意义。 直到有一天你会碰到线上奇奇怪怪的问题,如: 线程执行一个任务迟迟没有返回,应用假死。 接口响应缓慢,甚至请求超时。 CPU 高负载运行。 这类问题并不像一个空指针、数组越界这样明显好查,这时就需要刚才提到的内存模型、对象创建、线程等相关知识结合在一起来排查问题了。 正好这次借助之前 2018-07-08 Java 进阶 #Java #Thread #concurrent #JVM
Netty(二) 从线程模型的角度看 Netty 为什么是高性能的? 前言在之前的 SpringBoot 整合长连接心跳机制 一文中认识了 Netty。 但其实只是能用,为什么要用 Netty?它有哪些优势?这些其实都不清楚。 本文就来从历史源头说道说道。 传统 IO在 Netty 以及 NIO 出现之前,我们写 IO 应用其实用的都是用 java.io.* 下所提供的包。 比如下面的伪代码: 123456789ServeSocket serverSocket 2018-07-04 Netty #内存模型
一个学渣的阿里之路 前言最近有些朋友在面试阿里,加上 Java-Interview 项目的原因也有小伙伴和我讨论,近期也在负责部门的招聘,这让我想起年初那段长达三个月的奇葩面试经历🤣。 本来没想拿出来说的,毕竟最后也没成。 但由于那几个月的经历让我了解到了大厂的工作方式、对候选同学的考察重点以及面试官的套路等都有了全新的认识。 当然最重要的是这段时间的查漏补缺也让自己精进不少。 先交代下背景吧: 从去年 12 月 2018-06-21 Interview > Person
Guava 源码分析(Cache 原理) 前言Google 出的 Guava 是 Java 核心增强的库,应用非常广泛。 我平时用的也挺频繁,这次就借助日常使用的 Cache 组件来看看 Google 大牛们是如何设计的。 缓存 本次主要讨论缓存。 缓存在日常开发中举足轻重,如果你的应用对某类数据有着较高的读取频次,并且改动较小时那就非常适合利用缓存来提高性能。 缓存之所以可以提高性能是因为它的读取效率很高,就像是 CPU 的 L1、 2018-06-13 Guava #Cache