欢迎来到知了堂!
联系电话:知了堂-电话号码 028-62016472

阿里巴巴校招Java面试题总结及答案-知了堂

阿里巴巴校招Java面试题总结及答案

其他系列文章:
乐视校招Java面试题总结及答案
腾讯校招Java面试题总结及答案
阿里巴巴校招Java面试题总结及答案
微店校招Java面试题总结及答案
蘑菇街校招Java面试题总结及答案

招银科技校招Java面试题总结及答案

  1.HashMap和HashTable的区别,及其实现原理。

  HashTable底层是用HashMap实现的,与HashMap的区别是,HashTable是按存入顺序排序的,而HashMap不是。HashMap的原理是有一个大的table数组组成,每个数组元素是一个Entry。为了处理冲突,通常会将Entry用链表实现。

  ArrayList,LinkedList 和Vector的区别和实现原理。

  ArrayList是基于数组的可变长数组,因为这个特性,所以它更适合实现get和set;LinkedList是基于双向链表的,所以比较适合实现插入和删除等操作;但以上两个都是非线程安全的,Vector的实现和ArrayList差不多,改进的地方是使用synchronized实现了线程安全。

  TreeMap和TreeSet区别和实现原理。

  其中 TreeMap 是 Map 接口的常用实现类,而 TreeSet 是 Set 接口的常用实现类。TreeSet 底层是通过 TreeMap 来实现的(如同HashSet底层是是通过HashMap来实现的一样),因此二者的实现方式完全一样。而 TreeMap 的实现就是红黑树算法。

  相同点:

  TreeMap和TreeSet都是有序的集合,也就是说他们存储的值都是拍好序的。

  TreeMap和TreeSet都是非同步集合,因此他们不能在多线程之间共享,不过可以使用方法Collections.synchroinzedMap()来实现同步

  运行速度都要比Hash集合慢,他们内部对元素的操作时间复杂度为O(logN),而HashMap/HashSet则为O(1)。

  不同点:

  最主要的区别就是TreeSet和TreeMap非别实现Set和Map接口

  TreeSet只存储一个对象,而TreeMap存储两个对象Key和Value(仅仅key对象有序)

  TreeSet中不能有重复对象,而TreeMap中可以存在

  TreeMap的底层采用红黑树的实现,完成数据有序的插入,排序。

  ConcurrentHashMap实现原理(锁分离技术)。String和StringBuffer,StringBuilder区别和联系,String为啥不可变,在内存中的具体形态。

  String:字符串常量,字符串长度不可变。

  StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用StringBuffer,如果想转成String类型,可以调用StringBuffer的toString()方法。

  StringBuilder:字符串变量(非线程安全)。在内部,StringBuilder对象被当作是一个包含字符序列的变长数组。

  StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。

  2.java中多线程机制,实现多线程的两种方式(继承Thread类和实现Runnable接口)的区别和联系。
 

  3.java线程阻塞调用wait函数和sleep区别和联系,还有函数yield,notify等的作用。

  wait是Object的方法,sleep是Thread类的方法;

  wait让出CPU资源的同时会放弃锁,sleep让出CPU资源的同时不会释放锁;

  wait需要notify或者notifyall来唤醒,sleep在沉睡指定时间后,会自动进入就绪状态;

  4.java中的同步机制,synchronized关键字,锁(重入锁)机制,其他解决同步的方volatile关键字ThreadLocal类的实现原理要懂。

  5.java中异常机制

  Throwable是Error和Exception的父类,Error一般是指JVM抛出的错误,不需要捕获,Exception是程序错误,需要捕获处理;

  6.comparable接口和comparator接口实现比较的区别和用法,Arrays静态类如下实现排序的。

  7.问快排的优化,怎么选基准,我就说随机化,防止退化。谈谈快排,于是3种快排4种优化方式,以及partition函数的应用。

  3种快排,是指3中基数的选择方法:固定位置、随机、三数取中;

  4种优化:(1)当待排序序列的长度分割到一定大小后,使用插入排序;

  (2)在一次分割结束后,可以把与Key相等的元素聚在一起,继续下次分割时,不用再对与key相等元素分割;

  (3)优化递归操作;

  (4)使用并行或多线程处理子序列;

  随机化可以解决当数组有序或者部分有序时的退化,但是当数组元素全部重复的时候,时间复杂度依然很高;

  三数取中:对待排序序列中low、mid、high三个位置上数据进行排序,取他们中间的那个数据作为枢轴,并用0下标元素存储枢轴。这个方法还是无法解决重复数组的问题。

  在一次分割结束后,可以把与Key相等的元素聚在一起,继续下次分割时,不用再对与key相等元素分割,可以明显提高重复数组的效率。

  STL中的Sort函数:当数据量较大时采用快速排序,分段递归。一旦分段后的数据量小于某个阀值,为避免递归调用带来过大的额外负荷,便会改用插入排序。而如果递归层次过深,有出现最坏情况的倾向,还会改用堆排序。STL采用的做法称为median-of-three,即取整个序列的首、尾、中央三个地方的元素,以其中值作为枢轴。

  8.在栈上为什么不能用变量做数组的长度,堆上可以吗?

  9.项目:QQ聊天系统,怎么实现的,客户端为什么要用TCP和UDP结合,用UDP协议有什么好处,消息是怎样定义的,怎样区分不同的 消息,怎么知道使用锁的。我给他说了epoll、线程池,Reactor模式,以及自己实现的哈希表,线程之间怎样同步等。

        版权声明:本文来源于网络,由知了堂搜集整理,仅供大家学习Java时使用


        要参加校招的小伙伴们,知了堂针对校招专门开设“校招冲刺”课程,在校阶段,通过线上直播快速弥补基础编程知识,暑假参加线下课程,切实体验企业的真实项目。达到企业校招所需人才要求。(添加知妹儿QQ:2567083467详细了解查看《计算机科班生如何规划职业生涯?几个方向任你选》文章详细了解。

  • 签订就业合同
  • 100%就业
  • 先就业后付款
  • 脱产班
  • 周末班
立即咨询