大二小米实习数据开发一面
自我介绍
- "123"和 new String("123")有什么区别
答:关于字符串String赋值,String a="123", 这种方式比String a = new String("123");效率高多了。后者其实会创建两个对象。 "123"是一个常量池里的对象,new出来的对象是存放在内存堆中的,new出来的又是一个对象。 - String a = "123"和 String b = new String("123")
a==b
a.equals(b)
这两个结果是什么
答:false,true,顺便说了一下String类里的equals被重写了 - 重写equals需要注意哪些问题?
答:一定要和hashCode一起重写 - 为什么?
答:通过源码我们能看到,String对象在调用equals方法比较另一个对象时,除了认定相同地址值的两个对象相等以外,还认定对应着的每个字符都相等的两个String对象也相等,即使这两个String对象的地址值不同(即属于两个对象),这样就有可能产生相同的hashCode。 - ReentrantLock 原理
答:不会。 - 简历上说你了解一些设计模式,介绍一下
答:单例模式,简单工厂模式,装饰模式,代理模式 - 装饰模式和代理模式的区别
答:不会(我感觉要翻车了) - 知道几种单例模式
答:懒汉模式,饿汉模式,多线程下的单例模式 - 多线程下的单例模式叫什么名字?
答:不知道(有名字么?) - java中创建线程的方式
答:创建线程有4种方式,第一种是继承Thread对象,第二种是实现Runnable接口,第三种是实现Callable接口,第四种是用线程池。 - 你知道有几种线程池?
答:三种,第一种是一池固线程,第二种是一池一线程,第三种是一池多线程。 - 线程有多少种状态?
答:五种,新建,准备,运行,阻塞,死亡。 - 你知道守护线程嘛?它的作用是什么?
答:我举个例子,比如说JVM的垃圾回收机制,在主程序运行的时候他不断在工作,一直在默默付出,但是我们并不能察觉,但他一直在JVM运行过程中一直在进行垃圾回收。 - Callable和Runable的区别?
答:- 如上面代码所示,callable的核心是call方法,允许返回值,runnable的核心是run方法,没有返回值
- call方法可以抛出异常,但是run方法不行(没答出来)
- callable和runnable都可以应用于executors。而thread类只支持runnable(没答出来)
- 有没有能使线程的状态从运行状态变成就绪状态。
答:wait和yied - 知道sleep嘛?sleep和wait的区别是什么。
答:不会 - 你知道线程协作么?
答:JUC下有一个叫做闭锁CountDownLatch,有些操作,是要等其它线程的计算全部完成才能执行,这就是闭锁。为此,JUC提供了CountDownLatch,传入一个整数,在其它线程里可以使这个整数减1,当这个整数为0的时候,对应的操作才会执行。 - MySql索引?
答:不会 - JVM内存模型简单说一下,每个部分的作用?
答:这块答的比较长,参考我的博文:JVM - 简单说一说垃圾回收算法。
答:答的也挺长的,还是参考我的博文JVM - 那你刚刚提到了标记,你知道多少种标记方式呢?
答:两种,引用计数法和可达性分析 - 可达性分析原理讲一下。
答:参考JVM - java的垃圾回收器你知道多少
答:不会 - linux常用命令
答:(回答不太好) - MR工作流程
答:挺多的,参考我的文章MapReduce面试题 - 我们来做两道算法题吧
(1)有序链表的合并(秒了)
(2)有序链表数组合并(想了一会儿,写出来了)