Fork me on GitHub
ShenWenFang


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

Java线程面试题

发表于 2018-06-03 | 分类于 基础面试题 | 阅读次数:
字数统计: 12,195 字 | 阅读时长 ≈ 43 分钟
Java线程面试题前言​ 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。   在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问题像在Java并发编程的过程中遇到了什么挑战,Java内存模型 ...
阅读全文 »

Java 红黑树源码解读

发表于 2018-06-03 | 分类于 红黑树 | 阅读次数:
字数统计: 8,417 字 | 阅读时长 ≈ 38 分钟
Java 红黑树源码解读目录红黑树的介绍红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树。红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征: 任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。除了具备该特性之外,红黑树还包括许多额外的信息。 红黑树的每个节点上都有存储位表示节点的颜色,颜色是红(Red)或黑(Black)。红黑树的特性:【1】 每个节点或者是黑色,或者是红色。【2】 根节点是黑色。【3】 每个叶子节点是黑色。 [注意:这里叶子节点,是指为空的叶子节点!]【4】 如果一个节点是红色的,则它的子节点必须是黑色的。【5】 ...
阅读全文 »

Java Map 用法、遍历、排序和常用 API

发表于 2018-06-03 | 分类于 Map | 阅读次数:
字数统计: 2,240 字 | 阅读时长 ≈ 11 分钟
Java map 用法、遍历、排序和常用APIjava.util 中的集合类包含 Java 中某些最常用的类。最常用的集合类是 List 和 Map。 Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。 本文主要介绍java map的初始化、用法、map的四种常用的遍历方式、map的排序以及常用api。 Map用法类型介绍Java 自带了各种 Map 类。这些 Map 类可归为三种类型: 通用Map,用于在应用程序中管理映射,通常在 java.util 程序包中实现HashMap、Hashtable、Properties、Li ...
阅读全文 »

ConcurrentHashMap 源码解读

发表于 2018-06-03 | 分类于 ConcurrentHashMap | 阅读次数:
字数统计: 14,205 字 | 阅读时长 ≈ 61 分钟
Java 8 ConcurrentHashMap 源码解读 ConcurrentHashMap 当之无愧是支持并发最好的键值对(Map)集合。在日常编码中,出场率也相当之高。在jdk8中,集合类 ConcurrentHashMap 经 Doug Lea 大师之手,借助volatile语义以及CAS操作进行优化,使得该集合类更好地发挥出了并发的优势。与jdk7中相比,在原有段锁(Segment)的基础上,引入了数组+链表+红黑树的存储模型,在查询效率上花费了不少心思。 基础数据结构ConcurrentHashMap内存存储结构图大致如下: 概述1、设计首要目的:维护并发可读性(get、迭代相 ...
阅读全文 »

IntelliJ IDEA 调试教程

发表于 2018-06-03 | 分类于 IntelliJ IDEA | 阅读次数:
字数统计: 1,215 字 | 阅读时长 ≈ 4 分钟
IntelliJ IDEA 调试教程在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的,有的人keymap是mac版的,有的是Windows版的。我的就是Windows,而且修改keymap为eclipse的keymap,因为我算是eclipse转过来的吧。 看图,每一个按钮(按钮对应图中的数字)都是什么功能 rerun XXX,这个就是直接重新跑某个程序。 这个相当于eclipse里面的f8,直接跑完,到下一个断点停下,没有就直接跑完程序。 停止项目或 ...
阅读全文 »

IntelliJ IDEA 版本控制的使用

发表于 2018-06-03 | 分类于 IntelliJ IDEA | 阅读次数:
字数统计: 4,484 字 | 阅读时长 ≈ 17 分钟
版本控制的使用IntelliJ IDEA 下的版本控制介绍这一章节放在这么靠前位置来讲是因为版本控制在我心目中的地位比后面的实战知识点都来得重要。不管是个人开发或是团队开发,版本控制都是可以很好地被使用的,目前我找不到任何开发者不使用版本控制的理由。而且对于 IDE 来讲,集成版本控制的本身就是它最大的亮点之一,很多开发者也是为此而使用它。 在本章节中也会对 IntelliJ IDEA 的相关版本控制进行了介绍,会开始涉及到一些 IntelliJ IDEA 人性化设置,也希望你能从这一讲开始认识到 IntelliJ IDEA 的优雅。 很多人认为 IntelliJ IDEA 自带了 SV ...
阅读全文 »

HashMap 的源码分析

发表于 2018-06-03 | 分类于 HashMap | 阅读次数:
字数统计: 7,682 字 | 阅读时长 ≈ 32 分钟
JDK1.8 HashMap源码分析HahsMap实现了Map接口。其继承关系如下图: HashMap有两个影响性能的重要参数:初始容量和加载因子。容量是Hash表中桶的个数,当HashMap初始化时,容量就是初始容量。加载因子是衡量hash表多满的一个指标,用来判断是否需要增加容量。当HashMap需要增加容量时,将会导致rehash操作。默认情况下,0.75的加载因子在时间和空间方面提供了很好的平衡。加载因子越大,增加了空间利用率但是也增加了查询的时间。 构造器底层结构JDK1.8之前的结构在JDK1.7之前,HashMap采用的是数组+链表的结构,其结构图如下:左边部分代表Hash表, ...
阅读全文 »

HashMap 的扩容机制

发表于 2018-06-03 | 分类于 HashMap | 阅读次数:
字数统计: 1,635 字 | 阅读时长 ≈ 7 分钟
扩容机制扩容(resize)就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组的长度,以便能装入更多的元素。当然Java里的数组是无法自动扩容的,方法是使用一个新的数组代替已有的容量小的数组,就像我们用一个小桶装水,如果想装更多的水,就得换大水桶。 我们分析下resize的源码,鉴于JDK1.8融入了红黑树,较复杂,为了便于理解我们仍然使用JDK1.7的代码,好理解一些,本质上区别不大,具体区别后文再说。 12345678910111213 1 void resize(int newCapacity) { ...
阅读全文 »
1…101112
ShenWenFang

ShenWenFang

每一个你不满意的现在,都有一个你没有努力的曾经。

96 日志
36 分类
23 标签
RSS
© 2017 — 2020 ShenWenFang