![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA基础
文章平均质量分 94
Y_YoungSun
技术宅男
展开
-
某Java大佬在地表最强Java企业(阿里)面试总结
某Java大佬在地表最强Java企业(阿里)面试总结一面1.1、HashMap和Hashtable的区别继承:Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。锁:Hashtable 中的方法是Synchronize的,而HashMap中的方法在缺省情况下是非Synchronize的。方法:HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因转载 2021-02-08 16:59:18 · 162 阅读 · 0 评论 -
ConcurrentHashMap与红黑树实现分析Java8
本文学习知识点1、二叉查找树,以及二叉树查找带来的问题。2、平衡二叉树及好处。3、红黑树的定义及构造。4、ConcurrentHashMap中红黑树的构造。在正式分析红黑树之前,有必要了解红黑树的发展过程,请读者耐心阅读。二叉查找树红黑树的起源得从二叉查找树(二叉排序树)说起。先来看二叉查找树的定义:1、要么为一颗空树,要么就是一颗具有如下特性的二叉树。2、左子节...转载 2018-09-20 10:20:57 · 1370 阅读 · 0 评论 -
Java集合-ConcurrentHashMap工作原理和实现JDK8
概述本文主要介绍ConcurrentHashMap在JDK8中的源码实现和原理。在JDK8中,开发人员几乎把ConcurrentHashMap的源码重写了一遍,源码由之前的2000多行增加到了6300行左右,因此实现也就复杂很多。在学习之前,最好先了解下如下知识:1、ReentrantLock的实现和原理。2、Synchronized的实现和原理。3、硬件对并发支持的CAS操作及JV...转载 2018-09-20 10:46:21 · 509 阅读 · 0 评论 -
Java集合-ConcurrentHashMap工作原理和实现JDK7
概述本文学习知识点1.ConcurrentHashMap与HashMap的区别。2.数据存储结构。3.如何提高并发读写性能。4.put和get方法源码实现分析。5.size方法如何实现。与HashMap的区别1.ConcurrentHashMap和HashMap都是Map的实现,提供key,value的读写。2.都继承自AbstractMap类,但实现的接口不同,如下...转载 2018-09-20 10:46:58 · 114 阅读 · 0 评论 -
MySQL存储引擎中的MyISAM和InnoDB区别详解
在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问。为了解开这个谜题,搜寻了网络,找到了如下信息:MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transa...转载 2018-09-20 12:46:16 · 103 阅读 · 0 评论 -
就是要你懂Java中volatile关键字实现原理
前言我们知道volatile关键字的作用是保证变量在多线程之间的可见性,它是java.util.concurrent包的核心,没有volatile就没有这么多的并发类给我们使用。本文详细解读一下volatile关键字如何保证变量在多线程之间的可见性,在此之前,有必要讲解一下CPU缓存的相关知识,掌握这部分知识一定会让我们更好地理解volatile的原理,从而更好、更正确地地使用volati...转载 2018-09-20 14:00:37 · 221 阅读 · 0 评论 -
Spring源码初探-IOC(4)-Bean的初始化-循环依赖的解决
前言在实际工作中,经常由于设计不佳或者各种因素,导致类之间相互依赖。这些类可能单独使用时不会出问题,但是在使用Spring进行管理的时候可能就会抛出BeanCurrentlyInCreationException等异常 。当抛出这种异常时表示Spring解决不了该循环依赖,本文将简要说明Spring对于循环依赖的解决方法。循环依赖的产生和解决的前提循环依赖的产生可能有很多种情况,例如:...转载 2018-09-21 09:08:36 · 86 阅读 · 0 评论 -
B树和B+树的总结
B树为什么要B树磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动。盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的读写。那么这就存在一个定位到磁盘中的块的过程,而定位是磁盘的存取中花费时间比较大的一块,毕竟机械运动花费的时候要远远大于电子运动的时间。当大规模数据存储到磁盘中的时候,显然定位是一个非常花费时间的过程,但是...转载 2018-09-21 15:09:16 · 129 阅读 · 0 评论 -
有return的情况下try catch finally的执行顺序
有return的情况下try catch finally的执行顺序结论:1、不管有木有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返...原创 2018-12-02 01:05:24 · 196 阅读 · 0 评论 -
Java中的四种引用类型(强、软、弱、虚)
为什么需要不同的引用类型从Java1.2开始,JVM开发团队发现,单一的强引用类型,无法很好的管理对象在JVM里面的生命周期,垃圾回收策略过于简单,无法适用绝大多数场景。为了更好的管理对象的内存,更好的进行垃圾回收,JVM团队扩展了引用类型,从最早的强引用类型增加到强、软、弱、虚四个引用类型。引用类图引用类图StrongRerence为JVM内部实现。其他三类引用类型全部继承自...转载 2018-09-20 10:07:58 · 234 阅读 · 0 评论 -
ThreadLocal内存泄漏真因探究
ThreadLocal原理回顾 ThreadLocal的原理:每个Thread内部维护着一个ThreadLocalMap,它是一个Map。这个映射表的Key是一个弱引用,其实就是ThreadLocal本身,Value是真正存的线程变量Object。也就是说ThreadLocal本身并不真正存储线程的变量值,它只是一个工具,用来维护Thread内部的Map,帮助存和取。注意上图的虚线...转载 2018-09-20 10:03:31 · 504 阅读 · 0 评论 -
Java泛型深入理解+泛型面试题
在面向对象编程语言中,多态算是一种泛化机制。例如,你可以将方法的参数类型设置为基类,那么该方法就可以接受从这个基类中导出的任何类作为参数,这样的方法将会更具有通用性。此外,如果将方法参数声明为接口,将会更加灵活。在Java增加泛型类型之前,通用程序的设计就是利用继承实现的,例如,ArrayList类只维护一个Object引用的数组,Object为所有类基类。[java] view plain co...转载 2018-06-25 18:07:38 · 402 阅读 · 0 评论 -
Java 回调函数透彻理解
在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。 在Java里面,我们使用接口来实现回调。 这篇文章中的解说定义非常好:http://blog.csdn.net/sweetwxh/article/details/2067139 所谓的回调,就是程序员A写了...转载 2018-06-27 13:24:05 · 513 阅读 · 0 评论 -
深入理解Java的接口和抽象类
对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 若有不正之处,请多多谅解并欢迎批评指正,不甚感激。 请...转载 2018-06-27 16:23:38 · 89 阅读 · 0 评论 -
Java7 ConcurrentHashMap详解
Java7 ConcurrentHashMapConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一些。整个 ConcurrentHashMap 由一个个 Segment 组成,Segment 代表”部分“或”一段“的意思,所以很多地方都会将其描述为分段锁。注意,行文中,我很多地方用了“槽”来代表一个 segment。简单理解就是,...转载 2018-07-26 11:49:34 · 116 阅读 · 0 评论 -
为并发而生的 ConcurrentHashMap(Java 8)
HashMap 是我们日常最常见的一种容器,它以键值对的形式完成对数据的存储,但众所周知,它在高并发的情境下是不安全的。尤其是在 jdk 1.8 之前,rehash 的过程中采用头插法转移结点,高并发下,多个线程同时操作一条链表将直接导致闭链,死循环并占满 CPU。当然,jdk 1.8 以来,对 HashMap 的内部进行了很大的改进,采用数组+链表+红黑树来进行数据的存储。rehash 的过...转载 2018-07-26 11:50:56 · 121 阅读 · 0 评论 -
ConcurrentHashMap1.7和1.8的不同实现
ConcurrentHashMap在多线程环境下,使用HashMap进行put操作时存在丢失数据的情况,为了避免这种bug的隐患,强烈建议使用ConcurrentHashMap代替HashMap,为了对更深入的了解,本文将对JDK1.7和1.8的不同实现进行分析。JDK1.7数据结构jdk1.7中采用Segment + HashEntry的方式进行实现,结构如下:Concu...转载 2018-07-26 12:00:59 · 125 阅读 · 0 评论 -
JAVA中的COPYONWRITE容器
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。...转载 2018-08-28 17:41:28 · 125 阅读 · 0 评论 -
Spring 循环引用 ——理解singleton与prototype初始化的区别
所谓的循环引用,就是A依赖B,B又依赖A,A与B两个对象相互持有。像下面这种情况: class A{ B b; public A(B b) { this.b=b; }}class B{ A a; public B(A a ) { this.a=a; } }我们知道spring在获取对象或者在加载的时候,触发依赖注入。例如触发A对象的依赖注入,发现...转载 2018-09-25 13:29:43 · 1019 阅读 · 1 评论 -
java 泛型详解-最详细
1. 概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)...转载 2018-06-25 17:21:55 · 126 阅读 · 0 评论