Fork me on GitHub

随笔分类 -  备战阿里

摘要:如何使用 概述 ConcurrentHashMap: 线程安全; 其将整个Hash桶进行了分段segment,也就是将这个大的数组分成了几个小的片段segment,而且每个小的片段segment上面都有锁存在,那么在插入元素的时候就要先找到应该插入到哪一个片段segment,然后再在这个片段上面进行 阅读全文
posted @ 2016-07-19 16:53 郑斌blog 阅读(3614) 评论(0) 推荐(2) 编辑
摘要:类声明: 概述: 线程不安全; <Key, Value>两者都可以为null; 不保证映射的顺序,特别是它不保证该顺序恒久不变; HashMap使用Iterator; HashMap中hash数组的默认大小是16,增长方式一定是2的指数倍; HashMap的数据结构: 在Java语言中,最基本的结构 阅读全文
posted @ 2016-07-19 12:21 郑斌blog 阅读(1361) 评论(0) 推荐(1) 编辑
摘要:结点类: 单向链表类: 单向链表的反转: 在线编程: 牛客网——《剑指Offer》-反转链表 阅读全文
posted @ 2016-07-17 11:46 郑斌blog 阅读(651) 评论(0) 推荐(0) 编辑
摘要:什么是数据库事务? 数据库事务有严格的定义,必须同时满足4个特性:原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),简称ACID。 原子性:表示组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有的操作执行成功,整个事务 阅读全文
posted @ 2016-07-17 11:39 郑斌blog 阅读(541) 评论(0) 推荐(0) 编辑
摘要:相关概念 存储结构: 遍历: 遍历算法: 声明二叉树结点类 声明二叉树类 和 由先根遍历与中根遍历构造二叉树 建立一颗二叉树必须明确以下两点: 先根次序或后根次序反映双亲与孩子结点的层次关系,中根次序反映兄弟结点间的左右次序。所以,已知先根和中根两种遍历序列,或中根和后根两种遍历序列才能够唯一确定一 阅读全文
posted @ 2016-07-16 23:54 郑斌blog 阅读(1251) 评论(0) 推荐(0) 编辑
摘要:官方对ThreadLocal的描述: "该类提供了线程局部(thread-local)变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其get或set方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal实例通常是类中的private static字段,它们 阅读全文
posted @ 2016-07-15 19:38 郑斌blog 阅读(4652) 评论(0) 推荐(3) 编辑
摘要:1.for循环方法: 代码灵活,但效率低。 2.System.arraycopy()方法: 通过源码可以看到,其为native方法,即原生态方法。自然效率更高。 3.Arrays.copyOf()方法: 同样看源码,它的实现还是基于System.arraycopy(),所以效率自然低于System. 阅读全文
posted @ 2016-07-14 18:32 郑斌blog 阅读(48615) 评论(0) 推荐(3) 编辑
摘要:在Java中一个类包括:构造块、构造方法、静态块、main方法、普通方法。 通过下面的例子将看出一个类中各种方法的执行顺序: 可以得出:首先JVM加载这个类(执行静态块)-》执行类的入口main方法-》构造块-》构造方法-》执行调用方法 如果有父类呢?JVM首先会检查当前类的父类是否加载,若没有则加 阅读全文
posted @ 2016-07-14 17:37 郑斌blog 阅读(1352) 评论(0) 推荐(0) 编辑
摘要:首先看在JVM的堆中,按代的划分: Young:主要是用来存放新生的对象。 Old:主要存放应用程序中生命周期长的内存对象。 Permanent:是指内存的永久保存区域,主要存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域. 它和存放Instance 阅读全文
posted @ 2016-07-14 12:21 郑斌blog 阅读(797) 评论(0) 推荐(0) 编辑
摘要:概念补充 并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。 并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另一个CPU上。 所有的GC算法都将堆划分成了老年代和新生代。 阅读全文
posted @ 2016-07-13 10:58 郑斌blog 阅读(895) 评论(0) 推荐(1) 编辑
摘要:java.lang.Throwable:作为所有异常的超类; Exception(异常):分为 RuntimeException(运行时异常,不受检异常)和编译异常 运行时异常:表示 JVM 在运行期间出现错误,比如 NullPointerException、IndexOutOfBoundsExce 阅读全文
posted @ 2016-07-11 21:59 郑斌blog 阅读(522) 评论(0) 推荐(0) 编辑
摘要:单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处: 1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。 2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。 3、有些类如交易 阅读全文
posted @ 2016-07-11 08:38 郑斌blog 阅读(802) 评论(0) 推荐(0) 编辑
摘要:Java提供的原子类是靠 sun 基于 CAS 实现的,CAS 是一种乐观锁。关于乐观锁与悲观锁。 原子变量类相当于一种泛化的 volatile 变量,能够支持原子的和有条件的读-改-写操作。AtomicInteger 表示一个int类型的值,并提供了 get 和 set 方法,这些 Volatil 阅读全文
posted @ 2016-07-10 15:01 郑斌blog 阅读(8409) 评论(2) 推荐(1) 编辑
摘要:乐观锁 乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condi 阅读全文
posted @ 2016-07-10 12:13 郑斌blog 阅读(4190) 评论(0) 推荐(0) 编辑
摘要:一、基本概念 先补充一下概念:Java 内存模型中的可见性、原子性和有序性。 可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步 阅读全文
posted @ 2016-07-08 22:50 郑斌blog 阅读(329522) 评论(42) 推荐(135) 编辑
摘要:这是美团一面面试官的一个问题,后来发现这是一道面试常见题,怪自己没有准备充分:i++;在多线程环境下是否存在问题?当时回答存在,接着问,那怎么解决?。。。好吧,我说加锁或者synchronized同步方法。接着问,那有没有更好的方法? 经过一番百度、谷歌,还可以用AtomicInteger这个类,这 阅读全文
posted @ 2016-07-08 12:47 郑斌blog 阅读(22449) 评论(1) 推荐(0) 编辑
摘要:一、装箱、拆箱定义 如果一个int型量被传递到需要一个Integer对象的地方,那么,编译器将在幕后插入一个对Integer构造方法的调用,这就叫做自动装箱。而如果一个Integer对象被放到需要int型量的地方,则编译器将幕后插入一个队intValue方法的调用,这就叫做自动拆箱。 所以说,对于- 阅读全文
posted @ 2016-07-07 22:58 郑斌blog 阅读(818) 评论(0) 推荐(0) 编辑
摘要:三个主要的反射类 Class反射对象描述类语义结构,可以从Class对象中获取构造函数、成员变量、方法类等元素的反射对象,并以编程的方式通过这些反射对象对目标类对象进行操作。这些反射对象类在java.reflect包中定义,下面是最主要的三个反射类: Constructor:类的构造函数反射类,通过 阅读全文
posted @ 2016-07-01 16:06 郑斌blog 阅读(702) 评论(0) 推荐(0) 编辑
摘要:类加载器双亲委派模型,如下图所示: 双亲委派模型的工作过程 如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜 阅读全文
posted @ 2016-07-01 13:06 郑斌blog 阅读(1180) 评论(0) 推荐(0) 编辑
摘要:类装载工作由ClassLoader及其子类负责,ClassLoader是一个重要的Java执行时系统组件,它负责在运行时查找和装入Class字节码文件。JVM在运行时会产生三个ClassLoader:根装载器、ExtClassLoader(扩展类装载器)和AppClassLoader(系统类装载器) 阅读全文
posted @ 2016-07-01 09:45 郑斌blog 阅读(7908) 评论(4) 推荐(5) 编辑