treemap

滴滴海外市业务面试经历

大憨熊 提交于 2021-02-03 12:43:44
滴滴海外部现在正处在发展阶段,需要的人会更多些。但是他们的面试还是要有一定的深度扩展,很遗憾我没有达到公司的要求。现在对我面试中遇到的问题总结下。 1,java多线程 ConcurrentHashMap 分段锁具体实现 2,线程间的通信机制有哪些。 3,CyclicBarrier和CountDownLanch之间的区别。 4,Lock接口 tryLock具体实现 5,线程池种类,你用过哪种线程池,各个线程池的特点,实现机制 6,阻塞队列实现原理,LinkedBlockingQueue为啥用两把锁 7,GC算法有哪些。 8,HashMap,HashSet,TreeSet,TreeMap实现 9,优先级队列是如何实现的。 10,JVM的结构 11,垃圾回收算法 12CMS实现机制 stop the world在CMS下的具体实现。 而CMS主要分为 initial Mark, Concurrent Mark, ReMark,Concurrent Sweep等阶段,initial Mark和Remark占整体的时间比较较小,它们会Stop the world. Concurrent Mark和Concurrent Sweep会和用户线程一起运行。虽然CMS减少了stop the world的次数,不可避免地让整体GC的时间拉长了 13, Linux里面的命令 14

Java 集合系列之三:Set基本操作

ⅰ亾dé卋堺 提交于 2021-02-01 01:45:21
1. Java Set 1. Java Set 重要观点 Java Set接口是Java Collections Framework的成员。 Set不允许出现重复元素-----------无重复 Set不保证集合中元素的顺序---------无序 Set允许包含值为null的元素,但最多只能有一个null元素。 Set支持泛型(类型的参数化),我们应尽可能使用它。将Generics与List一起使用将在运行时避免ClassCastException。 先去看Map,Set的实现类都是基于Map来实现的(如,HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,LinkedHashSet是通过LinkedHashMap来实现的)。 2. Java Set类图 Java Set接口扩展了Collection接口。Collection接口 externs Iterable接口。 一些最常用的Set实现类是HashSet,LinkedHashSet,TreeSet,SortedSet,CopyOnWriteArraySet。 AbstractSet提供了Set接口的骨干实现,以减少实现List的工作量。 3. Java Set 方法 boolean add(E e) // 如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。 boolean

Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同

风流意气都作罢 提交于 2021-01-30 10:54:14
《Java集合详解系列》是我在完成夯实Java基础篇的系列博客后准备开始写的新系列。 这些文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star、fork哈 文章首发于我的个人博客: www.how2playlife.com 今天我们来探索一下HashSet,TreeSet与LinkedHashSet的基本原理与源码实现,由于这三个set都是基于之前文章的三个map进行实现的,所以推荐大家先看一下前面有关map的文章,结合使用味道更佳。 本文参考 http://cmsblogs.com/?p=599 HashSet 定义 public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable HashSet继承AbstractSet类,实现Set、Cloneable、Serializable接口。其中AbstractSet提供 Set 接口的骨干实现,从而最大限度地减少了实现此接口所需的工作。 ==Set接口是一种不包括重复元素的Collection,它维持它自己的内部排序,所以随机访问没有任何意义。== 本文基于1

java多线程并发编程

我只是一个虾纸丫 提交于 2021-01-22 05:09:32
知识体系图 : 1、线程是什么? 线程是进程中独立运行的子任务。 2、创建线程的方式 方式一:将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法 方式二:声明实现 Runnable 接口的类。该类然后实现 run 方法 推荐方式二,因为接口方式比继承方式更灵活,也减少程序间的耦合。 3、获取当前线程信息? Thread.currentThread() 4、线程的分类 线程分为守护线程、用户线程。线程初始化默认为用户线程。 setDaemon(true) 将该线程标记为守护线程或用户线程。 特性:设置守护线程,会作为进程的守护者,如果进程内没有其他非守护线程,那么守护线程也会被销毁,即使可能线程内没有运行结束。 5、线程间的关系? 某线程a 中启动另外一个线程 t,那么我们称 线程 t是 线程a 的一个子线程,而 线程a 是 线程t 的 父线程。 最典型的就是我们在main方法中 启动 一个 线程去执行。其中main方法隐含的main线程为父线程。 6、线程API一览:如何启动、停止、暂停、恢复线程? (1)start() 使线程处于就绪状态,Java虚拟机会调用该线程的run方法; (2)stop() 停止线程,已过时,存在不安全性: 一是可能请理性的工作得不得完成; 二是可能对锁定的对象进行“解锁”,导致数据不同步不一致的情况。 推荐 使用

How to sort alphanumeric keys in Hashmap in best possible manner?

隐身守侯 提交于 2021-01-20 11:57:34
问题 I have map like Map<String,Integer> mp = new TreeMap<>(); mp.put("R1", 00); mp.put("R0", 11); mp.put("R2", 22); mp.put("R3", 33); mp.put("R5", 55); mp.put("R8", 88); mp.put("R4", 44); mp.put("R6", 66); mp.put("R9", 99); mp.put("R7", 77); mp.put("R11", 1111); mp.put("R14", 1414); mp.put("R10", 1010); mp.put("R12", 1212); mp.put("R13", 1313); mp.put("R15", 1515); mp.put("R17", 1717); mp.put("R19", 1919); I want to sort based upon keys. TreeMap is not working because of alphanumeric, getting

java的集合学习

不羁岁月 提交于 2021-01-19 07:14:17
说到集合,通常初学者会想到数组,可以说数组和集合还是有着根本的区别。初学者不妨了解一下这些区别: 一、数组声明了它容纳的元素的类型,而集合不声明,如 int[] array = new int[3] 或者 int[] array = new int[]{1,2,3}; 二、数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改变大小,集合提供更多的成员方法,能满足更多的需求。 三、数组的存放的类型只能是一种(基本类型/引用类型),集合存放的类型可以不是一种(不加泛型时添加的类型是Object)。 四、数组是java语言中内置的数据类型,是线性排列的,执行效率或者类型检查都是最快的。 让我们直接深入主题,所有集合都是位于java.util包下,他们主要可以由两个接口派生成的:Collection和Map,Collection和Map是Java集合的框架的根接口,Collection框架接口树形图如下图所示: 其中Set和List接口分别代表了无序集合和有序集合,Queue是java提供的队列的实现。 而Map框架的树形图如图下所示: 下面我们就来一一介绍这些集合。 Set HashSet类 HashSet是Set接口典型的实现,我们一般要使用到Set集合的时候就用HashSet这个类

学习Java集合

倖福魔咒の 提交于 2021-01-15 07:06:05
1、列表 List接口(继承于Collection接口)及其实现类 List接口及其实现类是 容量可变 的列表,可 按索引访问 集合中的元素。 特点:集合中的元素 有序、可重复 ; 列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。 实现类: ArrayList 实现一个数组,它的规模可变并且能像链表一样被访问。它提供的功能类似 Vector类但 不同步 ,它是以 Array方式实现的List, 允许快速随机存取 。 LinkedList 实现一个链表,提供最佳顺序存取,适合插入和移除元素。由这个类定义的链表也可以像栈或队列一样被使用。提供 最佳顺序存取 , 适合插入和移除元素 。 2、集 Set接口(继承于Collection接口)及其实现类 特点:集合中的元素 不按特定方式排序 ,只是简单的把对象加入集合中,就像往口袋里放东西。 对Set中成员的 访问和操作是通过 Set中对象的引用进行的 ,所以集中 不能有重复对象 。 Set也有多种变体,可以实现排序等功能,如TreeSet,它把对象添加到集中的操作将变为按照某种比较规则将其插入到有序的对象序列中。 它实现的是SortedSet接口,也就是加入了对象比较的方法。通过对集中的对象迭代,我们可以得到一个升序的对象集合。 实现类: HashSet 能够快速定位一个元素,要注意的是: 存入

Java集合系列(一):集合的定义及分类

一曲冷凌霜 提交于 2021-01-13 07:38:39
1. 集合的定义 什么是集合呢? 定义:集合是一个存放对象的引用的容器。 在Java中,集合位于java.util包下。 2. 集合和数组的区别(面试常问) 提到容器,就会想起数组,那么 集合和数组的区别是什么呢? (这里是重点,面试可能问的比较多) 数组和集合都是Java中的容器 数组的长度是固定的,集合的长度是可变的 数组只能存储相同数据类型的数据,这里的数据类型可以是基本数据类型,也可以是引用类型 集合可以存储不同数据类型的对象的引用(但一般情况下,我们会使用泛型来约定只使用1种数据类型),但不能存储基本数据类型 空口无凭,我们来点代码配合理解,首先,我们看下如下的数组代码: String[] platformArray = new String[3]; platformArray[0] = "博客园"; platformArray[1] = "掘金"; platformArray[2] = "微信公众号"; platformArray[3] = "个人博客"; 运行代码就会发现, platformArray[3] = "个人博客"; 会引发 java.lang.ArrayIndexOutOfBoundsException 异常。 而使用集合时就不存在这个问题,因为集合在声明时不需要指定长度并且长度会根据放入元素的多少而变化: List<String>

基础面试题整理

ⅰ亾dé卋堺 提交于 2021-01-12 23:03:26
基本概念 关键字 finalize Java 有几种修饰符?分别用来修饰什么 volatile transient变量有什么特点 super什么时候使用 public static void 写成 static public void会怎样 说明一下public static void main(String args[])这段声明里每个关键字的作用 请说出作用域public, private, protected, 以及不写时的区别 sizeof 是Java 的关键字吗 static switch 操作符 数据结构 基础类型 (Primitives) 类型转换 数组 队列 ArrayList、Vector、LinkedList的存储性能和特性 String StringBuffer HashMap HashSet Set Hash 算法 LinkedHashMap List Map Collections 什么是 B+ 树, B- 树,列出实际的使用场景。 接口 对象 拷贝 (clone) 比较 构造器 不可变对象 如何对一组对象进行排序 方法 GC 概念 GC 收集器有哪些 GC 策略 收集方法 JVM 参数 类加载器 (ClassLoader) 内存管理 jstack,jstat,jmap,jconsole怎么用 32 位 JVM 和 64 位 JVM 的最大堆内存分别是多数

面试真题-----hashMap原理

ぃ、小莉子 提交于 2021-01-12 04:37:24
HashMap详解 JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等 简介 Java为数据结构中的映射定义了一个接口java.util.Map HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度。 HashMap最多只允许一条记录的键为null,允许多条记录的值为null 。非线程安全。 如果需要满足线程安全,可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap Hashtable:Hashtable是遗留类,很多映射的常用功能与HashMap类似,不同的是 它承自Dictionary类 。线程安全。并发性不如ConcurrentHashMap,因为ConcurrentHashMap引入了分段锁。 LinkedHashMap:LinkedHashMap是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的,也可以在构造时带参数,按照访问次序排序。 TreeMap:TreeMap实现SortedMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器