Austin

HashMap原理分析(JDK1.8)

        HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。HashMap类不保证映射的顺序,特别是它不保证该顺序恒久不变。

HashMap的数据结构

        在Java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
Alt text
        从上图中可以看出,HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。

阅读更多
MySQL中的几种引擎介绍

( ̄∞ ̄)

前言

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySql的核心就是存储引擎

存储引擎查看

MySQL给开发者提供了查询存储引擎的功能,我这里使用的是MySQL5.5,可以使用:

1
SHOW ENGINES

阅读更多
浅谈线程中的 wait() 和 sleep()

\( ̄︶ ̄)/

        wait() 方法和 sleep() 方法都可以使线程挂起,起到的效果看似相同,但其实二者之间存在许多差异。

相同点:

(1) 都可以使线程在程序的调用处阻塞指定的毫秒数,然后回到可运行状态。

(2) wait() 和 sleep() 都可以通过 interrupt() 方法打断线程的暂停状态(不建议使用该方法)。

注:对线程对象调用 interrupt() 方法时,如果该线程对象处于 wait / sleep / join 状态时,该线程会立刻抛出 InterruptedException,在catch() {} 中直接 return 即可安全地结束线程;如果该线程正在执行的是普通代码,那么该线程不会抛出 InterruptedException。

阅读更多
Dubbo的集群容错和负载均衡

o_O

容错机制

        Dubbo中常见容错机制包括 failover,failsafe,failfase,failback,forking,缺省为failover重试。

Failover  失败自动切换
当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过retries=”2”来设置重试次数(不含第一次)。

Failfast  快速失败
只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。

Failsafe  失败安全
出现异常时,直接忽略,通常用于写入审计日志等操作,调用信息丢失。可用于生产环境 Monitor。

阅读更多
数据库的事务隔离级别

( ̄ε ̄;)

事务的四个特性

数据库事务(Transaction)是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。一方面,当多个应用程序并发访问数据库时,事务可以在应用程序间提供一个隔离方法,防止互相干扰。另一方面,事务为数据库操作序列提供了一个从失败恢复正常的方法。

事务具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离型(Isolation)、持久性(Durability),简称ACID。

1 原子性(Atomicity)
事务的原子性是指事务中的操作不可拆分,只允许全部执行或者全部不执行。

阅读更多
悲观锁和乐观锁

@_@

       悲观锁还是乐观锁是人们定义的一种概念,可以认为是一种思想。其实不仅仅是关系型数据库系统中有乐观锁和悲观锁的概念,像memcached、hibernate、tair等都有类似的概念。
       针对于不同的业务场景,应该选用不同的并发控制方式。所以,不要把乐观并发控制和悲观并发控制狭义的理解为DBMS中的概念,更不要把他们和数据中提供的锁机制(行锁、表锁、排他锁、共享锁)混为一谈。其实,在DBMS中,悲观锁正是利用数据库本身提供的锁机制来实现的。
    下面具体介绍一下悲观锁和乐观锁。

阅读更多
数据库的锁机制

(=^_^=)

       在计算机科学中,特别是程序设计、操作系统、多处理机和数据库等领域,并发控制(Concurrency Control)是确保及时纠正由并发操作导致的错误的一种机制。
       数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。下面举例说明并发操作带来的数据不一致性问题:

阅读更多
JVM的类加载机制

( ̄Q ̄)╯

类加载过程

如下图所示,JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。
Alt text

阅读更多
JVM中的垃圾收集算法及回收器

(# ̄▽ ̄#)

垃圾收集算法

标记 - 清除算法

标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。在标记阶段首先通过根节点,标记所有从根节点开始的对象,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。
标记清除算法主要不足有两个:一是效率问题,标记和清除两个过程效率都不高;另一个是标记清除之后会产生大量的空间碎片,因为回收后的空间是不连续的,这样给大对象分配内存的时候可能会提前触发full gc。

阅读更多
首页 归档 分类 标签 关于 搜索