JVM的BUG!?Java类静态初始化里启线程,居然导致main函数阻塞!!! 先来看这个代码是咋写的public class Lazy { public static boolean init = false; static { Thread t = new Thread(() -> init = true); t.start(); try { t.join(); ...
《深入理解计算机系统》1.3:计算机系统漫游 目录系统之间利用网络通信重要主题Amdahl定律并发和并行计算机系统中抽象的重要性系统之间利用网络通信现代系统经常通过网络和其他系统连接到一起,从一个单独的系统来看,网络可视为一个IO设备。当系统从主存复制一串字节到网络适配器时,数据流经过网络到达另一台机器,而不是比如说到达本地磁盘驱动器。相似地,系统可以读取从其他机器发送来的数据,并把数据复制到自己的主存。我...
《深入理解计算机系统》1.2:计算机系统漫游 目录高速缓存至关重要存储器层次结构操作系统管理硬件进程虚拟内存文件高速缓存至关重要hello程序的机器指令最初是存放在磁盘上,程序加载时,它们被复制到主存;当处理器运行时,指令又从主存复制到处理器。相似地,数据串"hello, world"开始时在磁盘上,然后被复制到主存,最后从主存复制到显示设备。这些复制,都是开销。系统设计者的一个主要目标就是使这些复制操作尽...
《深入理解计算机系统》1.1:计算机系统漫游 目录信息 = 位+上下文系统的硬件组成1.总线2.I/O设备3.主存4.处理器运行hello程序信息 = 位+上下文系统中的所有信息,包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。比如在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符...
Flyway简介与应用(SpringBoot整合Flyway) 目录什么是Flyway?为什么要使用Flyway?SpringBoot集成Flyway基本概念1.Versioned Migrations2.Repeatable Migrations使用其它什么是Flyway?Flyway是一款开源的数据库版本管理工具,Flyway可以独立于应用实现管理并跟踪数据库的变更,Flyway根据自己的约定,不需要复杂的配置就可以...
《CleanCode-代码整洁之道》读书笔记 一本非常经典的书,读了之后,我感觉在如何写出简洁优雅的高质量代码方面对我很有启发。书中从各个方面,列举了许多原则与标准,但我们写代码的时候,不可能将这些东西都清楚记着并时刻提醒自己不能“违规”,这样就如同负重前行,不仅走得慢,还会累死。所以我个人总结了以下几条比较通用且重要的规则: 1. 一切代码与注释都是有实际意义的,没有冗余,整洁干净 2. 代码能通过所有测试,运行高效 3....
Java中的IO技术简介 Linux网络IO模型简介1.阻塞IO模型2.非阻塞IO模型3.IO复用模型4.信号驱动IO模型5.异步IOIO多路复用技术Java的IO发展简史BIO伪异步IONIOAIO四种IO的对比[最好列出表格]...
2PC,3PC,Paxos,ZAB 首先我们要了解,什么是分布式一致性问题? 这个问题,我还真没找到明确定义。不过我个人的理解是:在一个分布式系统中,如何使多方达到一致性状态的问题,包括不同数据副本之间的一致性,数据修改的一致性,决策的一致性等等。关于这个问题,人们提出了许多经典的解决方案,下面我们就简单介绍几种。2PC 是Two-Phase-Commit的缩写,即二阶段提交,是计算机网络尤其是在数据库领域内,为...
分布式入门:从集中式到分布式 本文主要想简单介绍一下分布式的一些特点,分布式存在的一些问题以及分布式事务。集中式与分布式 既然讲到分布式,我们首先讲一讲集中式。曾经很长一段时间,由于大型主机强势地发展,集中式才是主流。大型机拥有卓越的性能和良好的稳定性,人们都喜欢将服务部署在一台大型机上。但集中式存在着一些问题:大型机价格昂贵,经济成本高。大型机运维人才培养成本高,需要运维人员掌握其技术细节。集中式有明显的单点问...
自主实现RPC工具-myrpc 源码位置:https://github.com/AsPhilosopher/myrpc 源码下载:https://download.csdn.net/download/jobsandczj/10309380 RPC(Remote Procedure Call),远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。在如今分布式盛行的年代,这一...
数据库唯一序列号生成方案 首先,我们得知道为什么需要制定数据库唯一序列号生成方案,难道MySQL的主键自增长不好用吗?当然不是。由于现在的业务数据量越来越大,有时候将数据放在一张表里,压力非常大,所以要进行分库分表。一旦进行了分库分表,用MySQL自带的自增长主键就会有问题了。如何保证生成一个唯一的不重复的主键,这是一个严肃的问题。 我今天介绍一种方案,也是我公司的实现方案之一。几个模块如下: 1. 先定义一张表,
自创简易加密算法 前几日和同事聊天,说到经常忘记密码,但记在一些地方,又不放心。我们就想,要是实现一个加密算法,每次记录加密结果,需要时再解密,那问题不就迎刃而解了嘛。后来根据需求,设计了一个基于异或的对称加密算法。算法非常简单:1.先定义一个由一系列不规则字符组成的盐值(SALT),然后生成一个密钥,密钥是一个整数数组,里面的值随机生成,对应盐值字符串的下标。2.加密时,根据密钥与盐值生成一个用来加密
阿里开发规范终极版整理(精简) Java开发规范命名【规范】类名使用UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外: ( 领域模型的相关命名 )DO / BO / DTO / VO 等。正例: MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion反例: macroPolo / UserDo / XMLService /
CopyOnWriteArrayList与ConcurrentHashMap原理解析 CopyOnWriteArrayList这两个都是非常常用的并发类,先从CopyOnWriteArrayList讲起。这个类我们从名字可以看出,他是在进行写操作时进行复制,因而其它线程进行读操作时不会出现并发问题。它的实现也很简单,我们来看一段简单源码:public boolean add(E e) { final ReentrantLock lock = this.lock;
ServiceLoader原理解析 最近在公司的项目里看到了ServiceLoader这个类,就好奇地去了解了一下。我们都知道,根据一个类去找它的父类或者接口那很简单。毕竟类加载的时候,相关信息都加载进去了。但反过来就不简单了,那就是根据接口去找所有实现类。这个类主要作用就是加载某个接口的实现类。类似的功能,我以前用注解的形式实现过。就是扫描包,然后根据注解信息判断是否是某个类的子类,然后进行加载。但这显然是个不大好的方法,
Java并发编程-活跃度问题 在讲问题前,我先说明一下什么是活跃度?一个并发应用及时执行的能力称作活跃度。我主要讲死锁问题,顺带介绍一下饥饿,弱响应性和活锁。死锁死锁这个词大家都听过,我先来罗列一下产生死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3) 不剥夺条件:进程已获得的资源,在末使用
TCP为啥要三次握手,四次挥手? 三次握手“三次握手”,可以说是一个家喻户晓的名词,但为什么要这么麻烦,要握三次呢?不能一两次就解决咯,省得这么麻烦。那自然是有原因的。我们先来说一说三次挥手的简单过程:下面我们说说为什么需要三次握手,还是上图吧:其实三次握手一个很重要的原因,是为了避免服务器资源浪费。有时候,客户端发的第一次请求由于网络延迟等原因,没有及时到达服务器。因此客户端已经将这个请求
Executor框架相关类及原理 在并发编程中,经常会用到Executor这个框架,Executor就是Runnable和Callable的调度容器,今天我就来总结一下几个常用的类及相关原理。Runnable这个在多线程里几乎无所不在,连Thread类都是它的实现类。publicinterface Runnable { /** * When an object implementing inte