`

常见面试题

阅读更多

1,什么是线程安全 (参考书:https://book.douban.com/subject/10484692/)

   如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

 

2,都说String是不可变的,为什么我可以这样做呢

   String a = "1";

   a = "2";

   答: String  a 表示定义一个字符串对象a ,“1” 是一个字符串常量是不可以变的,“2”也是一个字符串常量是不可以变的,a=“2” 表示 "2" 的引用给了 a。

  

3,HashMap的实现原理

  

  答:HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。

  

4,写出三种单例模式,如果能考虑线程安全最好

  

  第一种(懒汉,线程不安全):

 1 public class Singleton {  
 2     private static Singleton instance;  
 3     private Singleton (){}   
 4     public static Singleton getInstance() {  
 5     if (instance == null) {  
 6         instance = new Singleton();  
 7     }  
 8     return instance;  
 9     }  
10 }  
11 

 

 

这种写法lazy loading很明显,但是致命的是在多线程不能正常工作。

第二种(懒汉,线程安全):

 

 1 public class Singleton {  
 2     private static Singleton instance;  
 3     private Singleton (){}
 4     public static synchronized Singleton getInstance() {  
 5     if (instance == null) {  
 6         instance = new Singleton();  
 7     }  
 8     return instance;  
 9     }  
10 }  
11 

这种写法能够在多线程中很好的工作,而且看起来它也具备很好的lazy loading,但是,遗憾的是,效率很低,99%情况下不需要同步。

第三种(饿汉):

 

1 public class Singleton {  
2     private static Singleton instance = new Singleton();  
3     private Singleton (){}
4     public static Singleton getInstance() {  
5     return instance;  
6     }  
7 }  
8 

这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化,虽然导致类装载的原因有很多种,在单例模式中大多数都是调用getInstance方法, 但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化instance显然没有达到lazy loading的效果。

第四种(饿汉,变种):

 

 1 public class Singleton {  
 2     private Singleton instance = null;  
 3     static {  
 4     instance = new Singleton();  
 5     }  
 6     private Singleton (){}
 7     public static Singleton getInstance() {  
 8     return this.instance;  
 9     }  
10 }  
11 

表面上看起来差别挺大,其实更第三种方式差不多,都是在类初始化即实例化instance。

第五种(静态内部类):

 1 public class Singleton {  
 2     private static class SingletonHolder {  
 3     private static final Singleton INSTANCE = new Singleton();  
 4     }  
 5     private Singleton (){}
 6     public static final Singleton getInstance() {  
 7         return SingletonHolder.INSTANCE;  
 8     }  
 9 }  
10 

 

这种方式同样利用了classloder的机制来保证初始化instance时只有一个线程,它跟第三种和第四种方式不同的是(很细微的差别):第三种和第四种方式是只要Singleton类被装载了,那么instance就会被实例化(没有达到lazy loading效果),而这种方式是Singleton类被装载了,instance不一定被初始化。因为SingletonHolder类没有被主动使用,只有显示通过调用getInstance方法时,才会显示装载SingletonHolder类,从而实例化instance。想象一下,如果实例化instance很消耗资源,我想让他延迟加载,另外一方面,我不希望在Singleton类加载时就实例化,因为我不能确保Singleton类还可能在其他的地方被主动使用从而被加载,那么这个时候实例化instance显然是不合适的。这个时候,这种方式相比第三和第四种方式就显得很合理。

第六种(枚举):

1 public enum Singleton {  
2     INSTANCE;  
3     public void whateverMethod() {  
4     }  
5 }  
6 

这种方式是Effective Java作者Josh Bloch 提倡的方式,它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象,可谓是很坚强的壁垒啊,不过,个人认为由于1.5中才加入enum特性,用这种方式写不免让人感觉生疏,在实际工作中,我也很少看见有人这么写过。
 

第七种(双重校验锁):

 

 1 public class Singleton {  
 2     private volatile static Singleton singleton;  
 3     private Singleton (){}   
 4     public static Singleton getSingleton() {  
 5     if (singleton == null) {  
 6         synchronized (Singleton.class) {  
 7         if (singleton == null) {  
 8             singleton = new Singleton();  
 9         }  
10         }  
11     }  
12     return singleton;  
13     }  
14 }  
15 

 

5,ArrayList和LinkedList有什么区别

 

    答:ArrayList底层是可变数据,查询快,增删慢

          ArrayList底层是链表数据结构,增删快,查询慢

 

6,实现线程的2种方式

    

    继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程

   

 

7,JVM的内存结构

 

   答:堆区,栈区,方法区,寄存器,本地方法区

 

8,Lock与Synchronized的区别

 

  答:synchronized是在JVM层面实现的,因此系统可以监控锁的释放与否,而ReentrantLock使用                 代码实现的,系统无法自动释放锁

 

   

9,数据库隔离级别有哪些,各自的含义是什么,MYSQL默认的隔离级别是是什么。

 

  答: 数据库的隔离级别:

 

           ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

  ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。(mysql默认)

  ③ Read committed (读已提交):可避免脏读的发生。

  ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。

 

 

 

10,请解释如下jvm参数的含义:

-server -Xms512m -Xmx512m -Xss1024K 

-XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=20 XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly。

 

-Xms512m              ( Java能够分配的内存)
-Xmx512m              ( JAVA能够分配的最大内存)
-XX:PermSize=512M      (非堆内存初始值)
-XX:MaxPermSize=512M   (非堆内存最大值)
-XX:ReservedCodeCacheSize=64m  (eclipse缓存)

 

 

分享到:
评论

相关推荐

    vue常见面试题.zip vue常见面试题.zip

    vue常见面试题.zip vue常见面试题.zipvue常见面试题.zip vue常见面试题.zipvue常见面试题.zip vue常见面试题.zipvue常见面试题.zip vue常见面试题.zipvue常见面试题.zip vue常见面试题.zipvue常见面试题.zip vue常见...

    cobol常见面试题

    cobol常见面试题 cobol常见面试题

    java常见面试题(史上最全最经典)

    java常见面试题(史上最全最经典-希望对你有用).基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法。历年常见面试题型,涵盖...

    java常见面试题汇总

    java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见...

    Web 常见面试题

    该文档整理了web常见面试题,包括一下内容: 1. 谈谈你对http协议的理解,http 常见的状态码有哪些 2. GET 和 POST 的区别(4个) 3. http 中重定向和请求转发的区别(8个) 4. Cookie 和 Session
区别 5. 什么...

    mysql常见面试题汇总

    mysql常见面试题汇总,mysql常见面试题汇总 mysql常见面试题汇总,mysql常见面试题汇总 mysql常见面试题汇总,mysql常见面试题汇总 mysql常见面试题汇总,mysql常见面试题汇总 mysql常见面试题汇总,mysql常见面试题...

    大数据常见面试题2022

    大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022大数据常见面试题2022...

    2022年最新Docker 常见面试题汇总

    2022年最新Docker 常见面试题汇总 适用人群:即将要面试docker容器管理岗位的小伙伴,也适用于后期打算往docker容器化方向发展的小伙伴 内容概要:面试题较新,帮你轻松应对各大厂面试哦!

    java常见面试题

    java常见面试题,初级java面试题,java初级,java,java常见面试题

    Vue常见面试题及网友回答

    Vue常见面试题及网友回答,收集来自阿里云社区,包括v-model, key, methods,错误处理,参数传递,父子组件,定时器,vue声明周期等问题

    java常见面试题(史上最全最经典-希望对你有用)

    java常见面试题(史上最全最经典-希望对你有用).基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法。

    软件测试常见面试题分享

    软件测试面试题软件测试常见面试题分享软件测试常见面试题分享软件测试常见面试题分享软件测试常见面试题分享软件测试常见面试题分享软件测试常见面试题分享软件测试常见面试题分享软件测试常见面试题分享软件测试...

    Java常见面试题集--面试题全面综合.pdf

    Java常见面试题集--面试题全面综合

    Sql常见面试题

    Sql常见面试题

    (完整版)单片机常见面试题.doc

    (完整版)单片机常见面试题.doc

    高并发常见面试题(深入底层).docx

    花费数天时间整理的常见大厂问的高并发常见面试题,里面有代码(深入底层+代码解读)

    Oracle常见面试题

    Oracle数据库常见面试题,分享下,赶紧好的支持下

    Sql常见面试题.docSql常见面试题.docSql常见面试题.docSql常见面试题.docSql常见面试题.doc

    Sql常见面试题.docSql常见面试题.docSql常见面试题.docSql常见面试题.docSql常见面试题.docSql常见面试题.docSql常见面试题.docSql常见面试题.docSql常见面试题.doc

    Java消息队列常见面试题2022

    Java消息队列常见面试题,2022年最新,104页,祝您斩获高薪offer! Java消息队列常见面试题,2022年最新,104页,祝您斩获高薪offer! Java消息队列常见面试题,2022年最新,104页,祝您斩获高薪offer! Java消息...

Global site tag (gtag.js) - Google Analytics