电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOCX文档下载
分享到微信 分享到微博 分享到QQ空间

面试常问的JAVA基础知识点包含容器、多线程、垃圾回收机制、反射JVM等

  • 资源ID:195021438       资源大小:215.90KB        全文页数:14页
  • 资源格式: DOCX        下载积分:5金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要5金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

面试常问的JAVA基础知识点包含容器、多线程、垃圾回收机制、反射JVM等

此文档为个人整理,未经允许严禁转载,谢谢配合!JAVA基础知识1 容器1.1 容器有哪些?JAVA的容器主要分为两大类:Collection和Map。Java中的容器集合分为两大阵营,一个是Collection,一个是MapCollection下分为Set,List,QueueSet的常用实现类有HashSet,TreeSet等List的常用实现类有ArrayList,LinkedList等Queue的常用实现类有LinkedList,ArrayBlockingQueue等Map下没有进一步分类,它的常用实现类有HashMap,ConcurrentHashMap等1.2 Collection 和 Collections 有什么区别?Collection是一个集合接口,提供了一系列对集合对象进行基本操作的通用方法,所有集合都是他的子类。Collections是一个工具类,它服务于Collection框架,它用于对集合对象进行排序、搜索等操作。1.3 List、Set和Map的区别?区别:元素是否可以重复、元素是否有序。1.4 HashMap和HashTable的区别?1) HashMap不是线程安全的,HashTable是线程安全的,因此HashMap的效率略高。2) HashMap允许键值为空,HashTable不允许。3) HashTable是同步的,HashMap不是同步的。4) HashMap的底层数组默认是16,一定是2的指数;hashtable默认是11,每次扩充2+15) 一般不建议使用Hashtable(1)HashTable是遗留类,内部实现很多没优化和冗余。(2)即使在多线程环境下,现在也有同步的ConcurrentHashMap替代,没有必要因为是多线程而用HashTable。HashMap和TreeMap的区别:TreeMap在可以实现按照键值排序。LinkedHashMap:输入和输出的顺序相同。Weakhashmap:key采用弱引用,key不再被外部引用时就会被GC回收,而hashmap是强引用,只有key从hashmap删除才会被GC回收。1.5 HashMap的原理:HashMap 基于 Hash 算法实现的,我们一般用HashMap存储key-value类型的数据,它的底层是一个数组,当我们调用put(key,value)方法的时候,首先会对key进行计算得出一个hash值,然后根据hash值计算出(key,value)存放在数组上的位置这个时候我们会遇到两种情况:一是数组上该位置为空,可以直接放入数据;还有一种情况是该位置已经存放值了,这就发生了哈希冲突。在现在使用较为普遍的JDK1.8中是这样处理哈希冲突的:先用链表把冲突的元素串起来,如果链表的长度达到了8,并且哈希表的长度大于64,则把链表转为红黑树。(在JDK1.7中没有转化为红黑树这一步,只用链表解决冲突)细节:HashMap如何确定Key存放在数组的位置?Key的hashcode()得到hash值(4字节),然后把hash值的高16位和低16位异或的结果与数组的长度-1的值进行按位与操作得到的结果就是key在数组里存放的下标。为什么不直接用key的hashcode而要把高16位和低16位异或?通常数组的长度不会超过216,如果不异或的话高16位就不会起作用了。所以把高16位和低16位异或,使得高位的影响稀释到低位中,使得计算key位置的操作能够充分散列均匀。为什么要把链表转为红黑树?阈值为啥是8?在极端情况下,比如说key的hashCode()返回的值不合理,或者多个密钥共享一个hashCode,很有可能会在同一个位置产生严重的哈希冲突。这种情况下,如果我们仍然使用链表把多个冲突的元素串起来,这些元素的查询效率就会从O(1)下降为O(N)。为了能够在这种极端情况下仍保证较为高效的查询效率,HashMap选择把链表转换为红黑树,红黑树是一种常用的平衡二叉搜索树,添加,删除,查找元素等操作的时间复杂度均为O(logN)至于阈值为什么是8,这是HashMap的作者根据概率论的知识得到的。当key的哈希码分布均匀时,数组同一个位置上的元素数量是成泊松分布的,同一个位置上出现8个元素的概率已经接近千分之一了,这侧面说明如果链表的长度达到了8,key的hashCode()肯定是出了大问题,这个时候需要红黑树来保证性能,所以选择8作为阈值。HashMap的扩容原理?Hashmap里面维护了一个容量值和一个加载因子,当数组里的元素个数超过容量值*加载因子后就会触发扩容机制。,默认每次扩充为原来的二倍。首先得到新的容量值和新的扩容阈值,默认都是原来大小的两倍。然后根据新容量创建新的数组最后把元素从旧数组中迁移到新数组中在JDK1.7中,迁移数据的时候所有元素都重新计算了hash,并根据新的hash重新计算数组中的位置。在JDK1.8中,这个过程进行了优化:如果当前节点是单独节点(后面没有接着链表),则根据该节点的hash值与新容量减一的值按位与得到新的地址。如果当前节点后面带有链表,则根据每个节点的hash值与旧数组容量进行按位与的结果进行划分。如果得到的值为0,这些元素会被分配回原来的位置;如果得到的结果不为0,则分配到新位置,新位置的下标为当前位置下标加上旧数组容量。如果被除数是2的幂次方,对数组长度取余的方法就等价于对数组长度减一的值进行按位与操作。计算机中位运算的效率远高于取模运算。1.6 ArrayList 和 LinkedList 的区别是什么?数据结构实现(本质区别:底层实现不同):ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实现。随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数据存储方式,所以需要移动指针从前往后依次查找。增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其他数据的下标。综合来说,在需要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除操作较多时,更推荐使用 LinkedList。1.7 如何实现数组和 List 之间的转换?数组转list:Arrays.asList(array)List转数组:list.toArray()1.8 ArrayList和Vector线程:Vector是线程安全的,Arraylist不是线程安全的。Vector对外提供的方法都是synchronized修饰的。性能:ArrayList的性能略高于Vector。都可以根据需要扩容,vector每次扩大一倍,arraylist每次扩大50%1.9 Queue中的poll和remove有何区别?相同点:都是返回第一个元素,并在队列中删除返回的对象。不同点:如果没有元素poll()会返回 null,而 remove()会直接抛出 NoSuchElementException 异常1.10 迭代器 Iterator 是什么?怎么用?有何特点?Iterator 接口提供遍历任何 Collection 的接口。Iterator 的特点是更加安全,因为它可以确保,在当前遍历的集合元素被更改的时候,就会抛出 ConcurrentModificationException 异常。1.11 Iterator 和 ListIterator 有什么区别?Iterator可以遍历 Set 和 List 集合,而 ListIterator 只能遍历 List。Iterator 只能单向遍历,而 ListIterator 可以双向遍历(向前/后遍历)。ListIterator 从 Iterator 接口继承,然后添加了一些额外的功能,比如添加一个元素、替换一个元素、获取前面或后面元素的索引位置。1.12 Java集合的fail-fast和fail-safe机制?fail-fast是一种错误检测机制,Java在适合单线程使用的集合容器中很好地实现了fail-fast机制,举一个简单的例子:在多线程并发环境下,A线程在通过迭代器遍历一个ArrayList集合,B线程同时对该集合进行增删元素操作,这个时候线程A就会抛出并发修改异常,中断正常执行的逻辑。fail-safe机制更像是一种对fail-fast机制的补充,它被广泛地实现在各种并发容器集合中。回头看上面的例子,如果线程A遍历的不是一个ArrayList,而是一个CopyOnWriteArrayList,则符合fail-safe机制,线程B可以同时对该集合的元素进行增删操作,线程A不会抛出任何异常。要理解这两种机制的表象,我们得了解这两种机制背后的实现原理:我们同样用ArrayList解释fail-fast背后的原理:首先ArrayList自身会维护一个modCount变量,每当进行增删元素等操作时,modCount变量都会进行自增。当使用迭代器遍历ArrayList时,迭代器会新维护一个初始值等于modCount的expectedModCount变量,每次获取下一个元素的时候都会去检查expectModCount和modCount是否相等。在上面举的例子中,由于B线程增删元素会导致modCount自增,当A线程遍历元素时就会发现两个变量不等,从而抛出异常。CopyOnWriteArrayList所实现的fail-safe在上述情况下没有抛出异常,它的原理是:当使用迭代器遍历集合时,会基于原数组拷贝出一个新的数组(ArrayList的底层是数组),后续的遍历行为在新数组上进行。所以线程B同时进行增删操作不会影响到线程A的遍历行为。1.13 如何一边遍历一边删除Collection的元素?2 多线程2.1 什么是线程、守护线程?线程是操作系统进行独立运算调度的最小单元,被包含在进程中,是进程中的实际运作单位。线程和进程的区别:进程是资源分配的最小单元,线程是程序执行的最小单元。进程拥有自己的资源空间,线程共享进程中的资源。一个进程中包括多个线程,线程是轻量级的进程。守护线程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。在 Java 中垃圾回收线程就是特殊的守护线程。2.2 创建线程的方式?创建线程有三种方式:继承 Thread 重写 run 方法;实现 Runnable 接口,重写run方法;实现 Callable 接口,重写call方法。Callable<Object> oneCallable = new Tickets<Object>();FutureTask<Object> oneTask = new FutureTask<Object>(oneCallable); Thread t = new Thread(oneTask);t.start();runable和callable的区别:callable有返回值、call方法可以抛出异常,可以拿到一个future对象。2.3 start和run的区别?系统调用一个线程类的start方法之后,这个线程处于就绪状态,而非运行状态,调度过程中,JVM调用run方法完成实际的操作。如果直接调用run方法,这个方法就会被当做一个普通的方法被调用,程序中仍然只有主线程这一个线程。也就是说start()方法能够异步的调用run方法。也就是说只有通过调用线程的start方法才能真正达到

注意事项

本文(面试常问的JAVA基础知识点包含容器、多线程、垃圾回收机制、反射JVM等)为本站会员(孙盼)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.