Netty(一)网络IO基础

在讨论IO的时候,参与者通常有两个角色:系统内核和用户进程。用户进程发送 IO请求过后,系统内核在准备好IO数据后,会通过内存拷贝的方式,将准备好的缓存IO数据共享给用户进程缓存。 网络I/O模型简介 根据UNIX网络编程对I/O模型的分类,提供了阻塞I/O模型、非阻塞I/O模型、I/O复用模型、信号驱动I/O模型、异步I/O这5种I/O模型。 1、阻塞I/O模型 最常用的模型,所有文件操作都是阻塞的。套接字socket在进程空间中调用recvfrom,其系统调用直到 ...

数据库(一)事务和隔离级别

数据库事务的四个特性(ACID) 1、原子性(Atomicity) 事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 2、一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。 ...

JVM(六)虚拟机类加载委派模型

双亲委派模型 当一个类装载器(class loader)被请求装载类时,它首先按照顺序在上层装载器、父装载器以及自身的装载器的缓存里检查这个类是否已经存在。简单来说,就是在缓存里查看这个类是否已经被自己装载过了,如果没有的话,继续查找父类的缓存,直到在bootstrap类装载器里也没有找到的话,它就会自己在文件系统里去查找并且加载这个类。 ClassLoader的loadClass方法 protected Class<?> loadClass(String name ...

JVM(五)虚拟机类加载机制

Java提供了动态的装载特性;它会在运行时的第一次引用到一个class的时候对它进行装载和链接,而不是在编译期进行。JVM的类装载器负责动态装载,基本上所有的类加载器都是 java.lang.ClassLoader类的一个实例。Java类装载器有如下几个特点: 层级结构:Java里的类装载器被组织成了有父子关系的层级结构。Bootstrap类装载器是所有装载器的父亲。 代理模式:基于层级结构,类的装载可以在装载器之间进行代理。当装载器装载一个类时,首先会检查它是否在父装载器中进行装载 ...

JVM(三)内存分配与回收策略

对象的分配的细节取决于当前使用哪一种垃圾收集器组合,以及和内存相关参数有关,本文主要讨论Serial/SerialOld收集器的内存分配和回收的策略,其他几种垃圾收集器可以自己去探讨。 先介绍下MinorGC和FullGC的概念。 新生代GC(MinorGC): 发生在新生代,Java对象大多都有朝生夕死的特性,MinorGC非常频繁,回收速度也比较快。 老年代GC(MajorGC/FullGC): 发生在老年代,出现MajorGC经常至少伴随一次的MinorGC,但非绝对。Ma ...

Shell常用命令

常用Linux命令 find + xargs 将当前目录下.bak的文件,移动到临时/tmp下面 find . -name "*.bak" | xargs -I '{}' mv {} /tmp 移动到/tmp临时目录下,不要使用rm -rf 命令防止误删,其中-I '{}'标识占位符 awk 分隔字符串,排序 grep charles /home/zhangcheng.log | awk '&#123 ...

Git常用命令

常用Git命令 git log 详细说明可查看 链接 git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \ --before="2008-11-01" --no-merges -- t/ git rebase git reset git merge git fetch

JavaSPI(二)ServiceLoader深入解析

SPI(Service Provider Interface) ,是JDK内置的一种服务提供发现机制,说到JavaSPI的服务提供发现机制,就必须要了解ServiceLoader的原理。在ServiceLoader使用到Thread.currentThread().getContextClassLoader(),线程上下文类加载器来加载发现的服务类。 1、线程上下文类加载器 ContextClassLoader是从JDK1.2开始引入的。类java.lang.Thread 中的方法g ...