【2021持续更新】大数据面试题整理-Java篇

导语

此专栏博文会整理日常工作与面试中最常用到的大数据相关组件与Java语言的架构、概念、知识点,方便大家进行查阅。
涉及到的面试题以及答案均为博主搜罗整理,并加上自己的理解编写而成。同时博主会在部分题目的下方添加管遇此题深入理解的博文连接,方便读者的深入理解。
希望大家可以通过此篇博文对于大数据相关概念有一个更深入的理解
还有哪些想看的面试题,读者可以在评论区补充,博主会在一天内进行更新!!!
最后预祝大家新的一年升职加薪,工资涨涨涨!

语言特性

string,stringgbuffer,stringbuilder区别:

共同之处:

  • 三者共同之处:都是final类,不允许被继承

不同之处:

  • String:不可变字符串,初始化时可以赋空值,每次对String的操作都会生成一个新的String对象,效率较低且浪费大量内存空间。
  • StringBuffer:可变字符串、效率低、线程安全;StringBuffer对象默认生成16个字节的缓冲容量,当字符串大小超过容量时,会自动增加容量。
  • StringBuilder:可变字符序列、效率高、线程不安全;与StringBuffer一样都继承和实现了同样的接口和类,方法除了没使用synch修饰以外基本一致

深入阅读:String,StringBuffer与StringBuilder的区别??

== 和equals区别

对于理解==和equals的区别,我们首先需要了解Java中的基本数据类型与引用类型
基本数据类型: Byte,short,int,long,double,folat,boolean,char,这八种数据变量中直接存储值,无equals方法。
引用类型: 除以上基本类型之外的都是引用类型,像String类型属于引用类型,变量中存储的是引用地址,对应的地址中存储数据。
equals

  • 只有引用类型含有此方法,比较的是两个引用类型中的引用地址的值是否相同。

==

  • 对于基本类型:比较的就是基本类型的值是否相同。
  • 对于引用类型:比较的就是引用地址是否相同。

深入阅读:浅谈Java中equals()和==的区别

ArrayList和LinkedList的区别

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于双链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

深入阅读 :ArrayList和linkedList的区别

HashTable和HashMap区别

  • HashTable:线程安全,不允许键值为null,效率稍低。继承自Dictonary类。
  • HashMap:线程不安全,允许键值为null,效率稍高。实现了Serializable接口支持序列化,实现了Cloneable接口能被克隆。继承自abstractMap。

深入阅读: HashMap和Hashtable的区别

并发与多线程

Thread 类中的start() 和 run() 方法有什么区别?

  • 通过start()方法来启动一个线程,此时线程处于就绪状态,可以被JVM来调度执行,在调度过程中,JVM通过调用线程类的run()方法来完成实际的业务逻辑,当run()方法结束后,此线程就会终止,所以通过start()方法可以达到多线程的目的。
  • 如果直接调用线程类的run()方法,会被当做一个普通的函数调用,程序中仍然只有主线程这一个线程,即start()方法呢能够异步的调用run()方法,但是直接调用run()方法确实同步的,无法达到多线程的目的。

volatile 变量是什么?

volatile是一个特殊的修饰符,只有成员变量才能使用它。在Java并发程序缺少同步类的情况下,多线程对成员变量的操作对其它线程是透明的。volatile变量可以保证下一个读取操作会在前一个写操作之后发生。线程都会直接从内存中读取该变量并且不缓存它。这就确保了线程读取到的变量是同内存中是一致的。

深入阅读:Java并发编程:volatile关键字解析

什么是线程池? 为什么要使用它?

创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程。从JDK1.5开始,Java API提供了Executor框架让你可以创建不同的线程池。比如单线程池,每次处理一个任务;数目固定的线程池或者是缓存线程池。

深入理解:Java并发编程:线程池的使用

还有哪些想看的面试题,读者可以在评论区补充,博主会在一天内进行更新。

猜你喜欢

转载自blog.csdn.net/mrliqifeng/article/details/113117440