(1)阿里巴巴三面面试题(部分题):
-
String和StringBuffer的区别
-
gc的概念,如果A和B对象循环引用,是否可以被GC? 两个对象相互引用,是会不会被GC没有直接关系。‘ 采用的GC Roots可达性来决定是否会被GC回收。
-
Java中的内存溢出是如何造成的?
-
String s = “123”;这个语句有几个对象产生?
-
Error、Exception和RuntimeException的区别,作用又是什么?
-
列举3个以上的RuntimeException
-
reader和inputstream区别
-
hashCode的作用
-
Object类中有哪些方法,列举3个以上(可以引导)
-
任意对象x,在调用println方法后,都会自动调用x.toString方法,输出对象所对应的字符串
hashcode、equals、toString
-
当一个对象和一个字符串通过 + 连接时,系统会自动调用对象.toString()
当字符串连接的是基本类型时,也会调用toString方法,将其内容转化为字符串 -
char型变量中能不能存贮一个中文汉字?为什么?
-
列举几个Java Collection类库中的常用类
- List、Set、Map是否都继承自Collection接口?
Map没有继承于Collection接口 从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。
- HashMap和Hashtable的区别
1.如果冲突数量小于8,则是以链表方式解决冲突。 2.而当冲突大于等于8时,就会将冲突的Entry转换为红黑树进行存储。 3.而又当数量小于6时,则又转化为链表存储。 而在HashTable中, 都是以链表方式存储。
HashMap 哈希扩容必须要求为原容量的2倍,而且一定是2的幂次倍扩容结果,而且每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入;
而Hashtable扩容为原容量2倍加1;
- HashMap中是否任何对象都可以做为key,用户自定义对象做为key有没有什么要求?
HashMap中的key可以是任何对象,包括用户自定义的对象。但是,如果使用自定义对象作为key,需要重写hashCode()和equals()方法。如果不重写这两个方法,HashMap将无法正确地处理自定义对象作为key的情况。¹²³
希望这可以帮到您。
- interface 和 abstrat class的区别 是否可以继承多个接口,是否可以继承多个抽象类?
- 启动一个线程是用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方法。
- 了解过哪些JDK8的新特性,举例描述下相应的特性?
- 对sql进行优化的原则有哪些?
- servlet生命周期是生命与cgi的区别?
- StringBuffer有什么优势?为什么快?
(2)美团四面面经:
一面:
- 自我介绍
- 项目介绍及其亮点
- Java的8种数据类型有哪些?
- 问了Integer缓存数据的范围?
- 紧接着问了Object类有哪些方法?
- 问到这里然后拿出了一个题,面试官有小纸条,题目在上面,String A = “123”; String B = new String(“123”);,问生成了几个String对象?
- 由于提到了wait,顺带问了wait和sleep有什么区别?
1、sleep是Thread的静态方法,wait是Object的方法,任何对象实例都能调用。 2、sleep不会释放锁,它也不需要占用锁。 wait会释放锁,但调用它的前提是当前线程占有锁 (即代码要在synchronized中)。 3、它们都可以被interrupted方法中断。
- 由于还提及了hashcode,面试官接着问我,hashcode用在哪里?
- 果不其然,面试官说,讲一讲hashmap?
- 这里提及了hashMap是非线程安全的,面试问我为啥不是线程安全的,举几个例子?
当多个线程同时对HashMap进行put操作时,可能会导致数据覆盖或者数据丢失的问题。比如,当两个线程同时对同一个key进行put操作时,可能会出现数据覆盖的问题。²³
举个例子,假设有两个线程同时对HashMap进行put操作,其中一个线程执行了put(key1, value1)操作,另一个线程执行了put(key2, value2)操作。如果这两个key的hash值相同,那么它们就会被放到同一个bucket中。如果这两个线程同时执行了resize操作,那么就可能会出现死循环的问题。²³
希望这些信息能够帮到你。如果你有更多问题,请随时问我。
- 我本以为要接着问ConCurrentMap,额,出乎我的意料,并没有问,可能觉得我hashmap准备的很充分,然后接着问了我JVM了解吗?
- 让我说意思JVM的分为哪几块?
- 由于提及到了内存溢出,面试官问我内存溢出和内存泄漏的区别?
- 这里问完我就去问了数据库,4大特性是啥,举个例子?
- 数据的隔离级别有啥,每个隔离级别举个例子?
- 接着问我计算机网络,问了我7层有哪7层?
- 接着问了我TCP在哪层,UDP在哪层,HTTP在哪层?
- 问到这里就结束了,然后面试官问我有啥想问的,我就问如何评价我的面试表现?
二面:
- 自我介绍
- 项目介绍,及其亮点介绍。
- 然后问了我集合了解吗,让我说话ArrayList和LinkedList的区别?
- 继续问我linkedList可以用for循环遍历吗?
能不用尽量不用,因为底层是链表,它使用for循环进行遍历,访问每一个元素都是从头开始访问,然后直到找到这个元素,比如:
找第三个节点:需要找到第一个节点,然后找到第二个节点,然后才是第四个节点,不是从第三个节点开始的,所以非常慢,可以使用迭代器进行遍历;
- 介绍一下ConCurrenthashmap
- 来看看这道题,说着拿出来一个小纸条
- 然后问我单利模式了解不,写一个单例模式?
- 接着问了我虚拟机了解吗,介绍一些虚拟机的内存模型?
- 介绍一些你了解的垃圾回收算法?
- 问到这里,问了我你知道SurvivorRatio这个参数为啥初始是默认的8:1:1吗?
- 突然又问,二叉树了解吗,写一个二叉树的深度搜索遍历?
三面:
- 照例自我介绍和项目介绍;
- 上来就让我手撕一个单例模式
- 让我讲了讲代码是啥啥意思?
- 由于我的项目中提及到JVM,所以给我出了一个场景题,垃圾会收器中,标记清除多次后,由于采用的是标记清除算法,那么你觉得可能会出现什么问题?
- 这里提及到了full gc,问我,哪些情况会产生full GC,哪些情况产生minor GC?
- 除了你项目中的内存溢出问题,你还知道哪些关于内存溢出内存泄漏的?
- 然后给我出了一个动态规划的手写代码题,说来写个代码吧,大体是在n*m的矩阵方格中,找一个最大的正方形是几乘几的,有点忘了。
四面(HR面):
- 自我介绍啊
- 为啥想来美团啊,对美团了解多少?
- 心中的互联网公司排序
- 腾讯和美团选哪个啊?
- 自己的优点和缺点
- 还有什么问题