在如今的互联网应用体系架构中,因系统的庞大和复杂程度,一个系统往往会被拆分为不同的子系统,这样便于水平扩展和解耦。但是同时也增加了整个系统的复杂性,因为不同的子系统通过网络通信,而网络又是不可靠的,如何在这种环境下保证各节点数据备份的一致性;而若干个子系统的崩溃又如何保证整个系统的可用性;这都是一个分布式系统需要考虑和解决的问题。此篇作为分布式入门,讨论一下经典的CAP理论,和一些基础的分布式系统下的概念、问题和解决方案。
- 2020年6月9日...more
理解GC算法与收集器
2019年10月2日...moreJava语言最独有的特点之一就是有一套自治的内存管理模型,即JVM(Java Virtual Memory),它帮助我们管理对象的生存周期,所以我们在平时的开发任务中可以专注于功能的具体实现。在JVM有一个称为GC(Garbage Collection)的关键过程,它将会按照一定的规则去整理和清除内存中的对象。本文整理了几种不同的GC算法,学习它们将帮助我们了解当一个Java程序运行起来的时候,JVM到底是怎样管理内存的。
事务的ACID及其实现
2019年9月16日...more在软件开发中,后端的实质就是操作数据,储存数据,那就要与各种数据库打交道。在数据库中,为了保证数据的一致性,规定了一个“事务”的概念,它是一系列数据库操作的集合。ACID是事务的四个重要的特性,理解这四个特性及它们的实现原理可以在一定程度上理解数据库到底是怎样工作的。
理解工厂模式
2019年8月4日...more工厂设计模式是众多设计模式当中我最早接触的设计模式,也是一种应用最为广泛的设计模式,属于创建型设计模式。在Spring框架中,也有很经典的应用。在我对其进行了解的时候,发现有几种不同的工厂模式,本文对这几种工厂模式之间的差别进行一下分析和解读。
编程语言的类别
2019年4月9日...more目前的工作中,已经学习到了三种语言,Java,JS,Python。在说到这些语言时,经常会听到别人对它们的不同称呼,例如说Java是静态语言;Python、JS是脚本语言;Java是强类型而Python、JS是弱类型;Python、JS是解释型语言等。很好奇这些分类到底是怎么划分的,在查阅相关资料后对这些语言类别做了一些整理和归纳。
关键字synchronized
2018年11月5日...moresynchronized是Java中用来处理多线程的字段,也是我刚开始接触多线程时碰到的字眼,此篇记录下关于synchronized的一些理解和学习记录。
理解数据库事务
2018年10月20日...more事务是数据库提供的一种功能,为了保证数据操作的安全性。在数据库中,一个事务可以是一条语句,也可以是多条语句的联合。事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。
线程安全的级别与实现
2018年7月18日...more在之前的理解中,以为一个类要么是线程安全的,要么是不安全的,但其实这里面还有细分和区别。此篇讨论一下多线程的不同安全级别,以及操作系统和程序是如何来实现线程安全的。
抓包分析TCP的三次握手
2018年6月6日...more本篇记录一下利用wireshark抓tcp封包来分析tcp三次握手的过程,巩固一下网络基础知识。
JDK中的多线程
2018年4月18日...more开始在在多线程的坑中摸爬滚打。。
分治与递归的分析
2018年3月7日...more此篇基于我在分析快速排序的时间复杂度时遇到的问题,我没能较好地理解它的运算模式。分治与递归是这个算法重要的两个部分,也比较难弄透,这篇详细分解下。
快速排序的O(nlogn)是如何计算的
2018年2月19日...more在学习算法的过程当中,涉及到了算法的效率问题,这里有一个时间复杂度可以用来衡量算法在时间上的消耗,当时看冒泡排序的时间复杂度很好理解,但是快速排序的nlogn就弄不明白了,决定研究一下。
深入理解HashMap
2018年1月25日...more之前浅显地了解过HashMap是由数组加上链表实现的,但是一直没有真正理解到他的结构到底是怎样的,现在记录下自己学习HashMap的过程和理解,本篇研究了put与resize的源码实现、HashMap的关于桶大小及扩展的一些细节、以及jdk1.8做了哪些优化。