面试准备
relife1
人之所恶在好为人师,不实知,谨慎言
展开
-
ArrayList
为了春招,系统地复习一下Java相关的知识,应该不会写源码解析,完全是给自己看的,如果足够幸运,有幸进入大厂,重新写下给别人看的注意点ArrayList不是线程安全的,如果要在多线程情况下使用,使用List list = Collections.synchronizedList(new ArrayList(...));ArrayList底层是通过数组实现的,这里有一个注意点,这个底层数...原创 2019-01-24 18:29:21 · 508 阅读 · 0 评论 -
Java并发队列原理
面试准备,无法保证理解正确性,慎,欢迎纠正前言并发队列与普通队列的区别的确就在于并发二字,而并发的的基础就是线程安全,如何实现线程安全是我们最重要的需要理解的部分.线程安全的保证无非就是可见性和原子性(有序性一般不说).接下来的各种队列主要就这两点的实现来说.非阻塞队列非阻塞队列即不使用锁的队列,主要使用CAS操作保证原子性ConcurrentLinkedQueueConcurre...原创 2019-01-30 14:03:34 · 198 阅读 · 0 评论 -
数据库索引
前情可以说是完全为了面试了,我还没有工作,自己做的项目也还没有用过索引,如何添加索引,可以在菜鸟教程自己看,这里说一下使用的意义和底层的数据结构正文为什么使用索引如果在概念上说索引,就不能只局限于数据库,这个概念在很多方面都有涉及,我印象很深的就是操作系统中的文件系统还有内存管理中的页表的设计,我觉得在概念上都类似数据库索引;数据库为什么要使用索引,其实很简单,就是你读书为什么要看目录...原创 2019-02-08 11:54:22 · 163 阅读 · 0 评论 -
ReentrantLock等锁原理
面试准备,无法保证理解的正确性,慎,欢迎纠正注意这些锁是并发包下的锁,实现原理全是基于AQS,还使用了CAS操作,先了解一下AQS和CASReentrantLock可重入锁,是一种独占锁,即同时只有一个线程可以获取锁,其他尝试获取锁的线程会被放在锁的AQS阻塞队列中,重入的意思是指同一个线程可以多次获取锁.公平锁和非公平锁. ReentrantLock内部有两个内部类Nonfair...原创 2019-01-29 18:42:30 · 345 阅读 · 0 评论 -
ThreadLocal
面试准备,无法保证理解正确性,慎,欢迎纠正ThreadLocal为什么需要threadlocal在多线程程序中,线程安全是最重要的一点,其实也就是保证共享变量被合理的共享或保证非共享变量不被共享,threadlocal是解决后者的.最常用的是web服务器中,当多个用户并发访问,某个用户信息肯定不能被其他用户线程获取,这就需要使用threadlocal保存每个用户线程的信息,互不干扰...原创 2019-01-29 16:00:34 · 177 阅读 · 0 评论 -
CAS 和 AQS
这是面试准备过程的学习笔记,不能保证理解的正确性,慎,欢迎纠正CAS和AQS其实并不是一类,只是这两个可能从名字容易搞混,所以放在一起说一下CAS要说Java中的CAS,还是要先说一下自旋锁,有人认为二者是同一样东西,但我认为CAS操作是实现自旋锁的一部分.在锁的基础上,未进入临界区的线程应该处于一种怎样的状态,有两种情况,一是阻塞自身线程,等待释放锁,这明显就是互斥锁,第二种是...原创 2019-01-29 12:49:57 · 5337 阅读 · 0 评论 -
数据库事务
面试准备,仅为一家之言,无法保证理解正确性,慎,欢迎纠正数据库事务ACIDA : Atomic:原子性:指数据库事务要么完成,要么不做.是一个不可分割的原子操作;C:consistency: 一致性:指事务完成要保证业务逻辑数据一致;即业务是A账户向B账户转账,无论怎么转,事务完成后必须保证A账户和B账户的总额不变;I:Isolation: 隔离性: 指不同事务有自己的执行空间,各...原创 2019-02-03 14:06:03 · 9739 阅读 · 3 评论 -
volatile和JMM
面试准备,同样是学习的过程,无法保证正确,慎,欢迎纠正正文JMM原子性原子性指一个操作是不可被中断的.jvm定义了8中原子操作:lock:将主内存中的变量锁定,为一个线程所独占unclock:将lock加的锁定解除,此时其它的线程可以有机会访问此变量read:将主内存中的变量值读到工作内存当中load:将read读取的值保存到工作内存中的变量副本中。...原创 2019-01-28 12:35:24 · 384 阅读 · 0 评论 -
线程生命周期
面试准备,因为是学习过程中的笔记,所以无法保证所有理解都是正确的,慎,欢迎纠正正文线程说到线程,自然要说进程,具体的我不想说多,一般都学过操作系统,定义理论什么的考试都考过了,说一下书上看到的最好的关于线程进程的理解.简单来说,进程像是一个容器,比如一个房子,房子里面有卧室,厨房,书房,洗手间等,当然,还有一家三口,当妈妈带女儿外出时,爸爸一个人在家,这时爸爸就像一个线程,想干什么干什...原创 2019-01-28 11:37:09 · 133 阅读 · 0 评论 -
Spring IOC底层分析
仅为面试准备,无法保证理解正确性,慎,欢迎纠正前言关于IOC底层的东西,我这里只是说一下大致的流程,不涉及具体的代码(能力有限).正文IOC初始化IOC容器的初始化分为三个过程以及我们在使用spring时的代码对应(不是完全一一对应,这是顶层的方法,内部有较多的细节):Resource定位:ClassPathReource resource = new ClassPathRe...原创 2019-02-01 16:08:14 · 411 阅读 · 0 评论 -
垃圾收集机制
慎看,一些是自己的理解,不能保证正确性,完全是自己学习路上的一个记录注意点判断对象已死判断对象已死一定和引用相关,这里介绍一下引用和其分类.一般的理解是:引用代表另一块内存的起始地址,这种定义无法描述一些特殊的情况,所以将引用分为四中类型,引用强度逐渐减弱:强引用:强引用就是一般认为的引用,类似Object o = new Object();.只要强引用还在,GC就不会回收对象...原创 2019-01-27 13:36:46 · 219 阅读 · 0 评论 -
JVM类加载机制
为了春招,系统地复习一下Java相关的知识,应该不会写源码解析,完全是给自己看的,如果足够幸运,有幸进入大厂,重新写下给别人看的注意点类从被加载到被卸载的生命周期如下: 加载 -> (验证 -> 准备 -> 解析)(连接) -> 初始化 -> 使用 -> 卸载 ; 虽然写下来是这样的的顺序,但是不同阶段间可能交叉进行原创 2019-01-26 21:26:41 · 209 阅读 · 0 评论 -
Java内存模型(板块划分)
为了春招,系统地复习一下Java相关的知识,应该不会写源码解析,完全是给自己看的,如果足够幸运,有幸进入大厂,重新写下给别人看的注意点JVM的版本很多,细节多有不同,这里说的是Hotspot VM.最主要的就是Heap,也就是堆.堆是线程共享的堆主要分为年轻代(Young)和老年代(Old),常规的默认值是,年轻代:老年代 = 1/4~1/3 ;写下主要是为了防止被问到,其实...原创 2019-01-26 13:14:11 · 223 阅读 · 0 评论 -
ConcurrentHashMap
这里需要说明一下,本人才疏学浅,写下这些东西,完全是暂时记下自己的一些理解,无法保证理解的正确性,想要学习ConcurrentHashMap的还是不要看.慎注意点为什么使用ConcurrentHashMap,是因为需要在一个线程安全的映射集合类,那为什么不使用HashTable呢?其实就是我在HashTable的博客中说到的,HashTable的锁粒度实在太大,虽然保证了线程安全,但...原创 2019-01-25 17:35:52 · 499 阅读 · 0 评论 -
Vector
为了春招,系统地复习一下Java相关的知识,应该不会写源码解析,完全是给自己看的,如果足够幸运,有幸进入大厂,重新写下给别人看的注意点Vector其实就是线程安全的变长数组,底层和ArrayList也较为类似,就是扩容时复制数组扩容Vector的扩容和ArrayList有一些不一样,是通过capacityIncrement这个值来进行扩容,如果这个值<=0,则默认扩容至原来的两倍...原创 2019-01-25 11:40:22 · 138 阅读 · 0 评论 -
HashTable
为了春招,系统地复习一下Java相关的知识,应该不会写源码解析,完全是给自己看的,如果足够幸运,有幸进入大厂,重新写下给别人看的注意点HashTable和HashMap都实现了Map接口,所以需要对比着说HashTable也是使用拉链法,即底层使用数组和链表实现哈希表.默认值可能有些不同HashTable的底层数组的初始长度为11负载因子一样,都是0.75扩容大小是...原创 2019-01-25 11:24:38 · 990 阅读 · 0 评论 -
HashMap
为了春招,系统地复习一下Java相关的知识,应该不会写源码解析,完全是给自己看的,如果足够幸运,有幸进入大厂,重新写下给别人看的注意点HashMap底层是数组和链表的结构,也就是数组中的元素是链表,在同一个链表中的值,都是键通过hash后相同的键值对.下面说的对键求hash值都是值对键的hashcode值进行运算.先说一下一些默认值:默认初始容量是16,也就是说底层数组的长度负...原创 2019-01-24 23:02:19 · 153 阅读 · 0 评论 -
LinkedList
为了春招,系统地复习一下Java相关的知识,应该不会写源码解析,完全是给自己看的,如果足够幸运,有幸进入大厂,重新写下给别人看的注意点说个题外话,我仔细回想了一下,发现我没有在项目中使用过这个集合类,在算法题中也很少用到,所以应该没多少可以说的LinkedList底层是通过链表实现的,是一个双向链表底层的双向链表是通过一个内部类实现的.private static class E...原创 2019-01-24 18:54:09 · 158 阅读 · 0 评论 -
设计模式一
这里只是简单记录我学习过程中的对各种设计模式的理解,没有具体实现代码前情学习设计模式,我觉得最重要的不止是如何使用,还有为什么使用,甚至后者比之前者有过之而无不及.有一本书《大话设计模式》很受欢迎,我觉得原因其是将各种设计模式的使用环境设计成一个个场景,用对话的形式来表示;所以我会从为什么使用/使用场景和如何使用两个方面来叙述;正文单例模式使用原因 : 在我们的系统中,有一些对象我...原创 2019-02-16 18:50:53 · 189 阅读 · 0 评论