(1)阿里巴巴三面面试题(部分题):

  1. String和StringBuffer的区别

  2. gc的概念,如果A和B对象循环引用,是否可以被GC? 两个对象相互引用,是会不会被GC没有直接关系。‘ 采用的GC Roots可达性来决定是否会被GC回收。

  3. Java中的内存溢出是如何造成的?

  4. String s = “123”;这个语句有几个对象产生?

  5. Error、Exception和RuntimeException的区别,作用又是什么?

  6. 列举3个以上的RuntimeException

  7. reader和inputstream区别

  8. hashCode的作用

  9. Object类中有哪些方法,列举3个以上(可以引导)

  10. 任意对象x,在调用println方法后,都会自动调用x.toString方法,输出对象所对应的字符串

hashcode、equals、toString

  1. 当一个对象和一个字符串通过 + 连接时,系统会自动调用对象.toString()
    当字符串连接的是基本类型时,也会调用toString方法,将其内容转化为字符串

  2. char型变量中能不能存贮一个中文汉字?为什么?

  3. 列举几个Java Collection类库中的常用类

image.png

  1. List、Set、Map是否都继承自Collection接口?

 Map没有继承于Collection接口 从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。

  1. HashMap和Hashtable的区别

1.如果冲突数量小于8,则是以链表方式解决冲突。 2.而当冲突大于等于8时,就会将冲突的Entry转换为红黑树进行存储。 3.而又当数量小于6时,则又转化为链表存储。 而在HashTable中, 都是以链表方式存储。

HashMap 哈希扩容必须要求为原容量的2倍,而且一定是2的幂次倍扩容结果,而且每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入;
而Hashtable扩容为原容量2倍加1;

  1. HashMap中是否任何对象都可以做为key,用户自定义对象做为key有没有什么要求?

HashMap中的key可以是任何对象,包括用户自定义的对象。但是,如果使用自定义对象作为key,需要重写hashCode()和equals()方法。如果不重写这两个方法,HashMap将无法正确地处理自定义对象作为key的情况。¹²³

希望这可以帮到您。

  1. interface 和 abstrat class的区别 是否可以继承多个接口,是否可以继承多个抽象类?
  2. 启动一个线程是用run()还是start()?多线程有几种实现?同步和并发是如何解决的?什么叫守护线程,用什么方法实现守护线程(Thread.setDeamon()的含义) 如何停止一个线程? 解释是一下什么是线程安全?举例说明一个线程不安全的例子。解释Synchronized关键字的作用。 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
  • 启动一个线程应该使用start()方法,而不是run()方法。start()方法会在新的线程中执行run()方法,而run()方法只会在当前线程中执行。
  • Java中有两种实现多线程的方式:继承Thread类和实现Runnable接口。
  • 同步和并发问题可以通过使用synchronized关键字来解决。synchronized关键字可以用来保证同一时刻只有一个线程访问某个对象或代码块。
  • 守护线程是一种特殊的线程,当所有非守护线程都结束时,守护线程也会自动结束。可以通过Thread.setDaemon()方法将一个线程设置为守护线程。
  • 可以使用interrupt()方法来停止一个线程。当一个线程调用interrupt()方法时,该线程会收到一个InterruptedException异常,可以在catch块中处理该异常来停止该线程。
  • 线程安全指多个线程同时访问某个对象或代码块时,不会出现数据不一致或其他问题。例如,在多个线程同时访问同一个变量时,如果没有进行同步处理,则可能会出现数据不一致的问题。
  • 举例说明一个不安全的例子:多个线程同时对同一个变量进行自增操作,由于自增操作不是原子性操作,因此可能会出现数据不一致的问题。
  • synchronized关键字可以用来保证同一时刻只有一个线程访问某个对象或代码块。当一个线程进入某个对象的synchronized方法后,其它线程不能进入该对象的其他synchronized方法,但可以进入非synchronized方法。
  1. 了解过哪些JDK8的新特性,举例描述下相应的特性?
  2. 对sql进行优化的原则有哪些?
  3. servlet生命周期是生命与cgi的区别?
  4. StringBuffer有什么优势?为什么快?

(2)美团四面面经:

一面:

  1. 自我介绍
  2. 项目介绍及其亮点
  3. Java的8种数据类型有哪些?
  4. 问了Integer缓存数据的范围?
  5. 紧接着问了Object类有哪些方法?
  6. 问到这里然后拿出了一个题,面试官有小纸条,题目在上面,String A = “123”; String B = new String(“123”);,问生成了几个String对象?
  7. 由于提到了wait,顺带问了wait和sleep有什么区别?

1、sleep是Thread的静态方法,wait是Object的方法,任何对象实例都能调用。 2、sleep不会释放锁,它也不需要占用锁。 wait会释放锁,但调用它的前提是当前线程占有锁 (即代码要在synchronized中)。 3、它们都可以被interrupted方法中断。

  1. 由于还提及了hashcode,面试官接着问我,hashcode用在哪里?
  2. 果不其然,面试官说,讲一讲hashmap?
  3. 这里提及了hashMap是非线程安全的,面试问我为啥不是线程安全的,举几个例子?

当多个线程同时对HashMap进行put操作时,可能会导致数据覆盖或者数据丢失的问题。比如,当两个线程同时对同一个key进行put操作时,可能会出现数据覆盖的问题。²³

举个例子,假设有两个线程同时对HashMap进行put操作,其中一个线程执行了put(key1, value1)操作,另一个线程执行了put(key2, value2)操作。如果这两个key的hash值相同,那么它们就会被放到同一个bucket中。如果这两个线程同时执行了resize操作,那么就可能会出现死循环的问题。²³

希望这些信息能够帮到你。如果你有更多问题,请随时问我。

  1. 我本以为要接着问ConCurrentMap,额,出乎我的意料,并没有问,可能觉得我hashmap准备的很充分,然后接着问了我JVM了解吗?
  2. 让我说意思JVM的分为哪几块?
  3. 由于提及到了内存溢出,面试官问我内存溢出和内存泄漏的区别?
  4. 这里问完我就去问了数据库,4大特性是啥,举个例子?
  5. 数据的隔离级别有啥,每个隔离级别举个例子?
  6. 接着问我计算机网络,问了我7层有哪7层?
  7. 接着问了我TCP在哪层,UDP在哪层,HTTP在哪层?
  8. 问到这里就结束了,然后面试官问我有啥想问的,我就问如何评价我的面试表现?

二面:

  1. 自我介绍
  2. 项目介绍,及其亮点介绍。
  3. 然后问了我集合了解吗,让我说话ArrayList和LinkedList的区别?
  4. 继续问我linkedList可以用for循环遍历吗?

能不用尽量不用,因为底层是链表,它使用for循环进行遍历,访问每一个元素都是从头开始访问,然后直到找到这个元素,比如:

找第三个节点:需要找到第一个节点,然后找到第二个节点,然后才是第四个节点,不是从第三个节点开始的,所以非常慢,可以使用迭代器进行遍历;

  1. 介绍一下ConCurrenthashmap
  2. 来看看这道题,说着拿出来一个小纸条
  3. 然后问我单利模式了解不,写一个单例模式?
  4. 接着问了我虚拟机了解吗,介绍一些虚拟机的内存模型?
  5. 介绍一些你了解的垃圾回收算法?
  6. 问到这里,问了我你知道SurvivorRatio这个参数为啥初始是默认的8:1:1吗?
  7. 突然又问,二叉树了解吗,写一个二叉树的深度搜索遍历?

三面:

  1. 照例自我介绍和项目介绍;
  2. 上来就让我手撕一个单例模式
  3. 让我讲了讲代码是啥啥意思?
  4. 由于我的项目中提及到JVM,所以给我出了一个场景题,垃圾会收器中,标记清除多次后,由于采用的是标记清除算法,那么你觉得可能会出现什么问题?
  5. 这里提及到了full gc,问我,哪些情况会产生full GC,哪些情况产生minor GC?
  6. 除了你项目中的内存溢出问题,你还知道哪些关于内存溢出内存泄漏的?
  7. 然后给我出了一个动态规划的手写代码题,说来写个代码吧,大体是在n*m的矩阵方格中,找一个最大的正方形是几乘几的,有点忘了。

四面(HR面):

  1. 自我介绍啊
  2. 为啥想来美团啊,对美团了解多少?
  3. 心中的互联网公司排序
  4. 腾讯和美团选哪个啊?
  5. 自己的优点和缺点
  6. 还有什么问题