Java基础和底层面试题附答案

401 阅读3分钟

在大公司的面试里,最爱考的就是基础和底层的知识,可谓必考题,也是很多人薄弱的地方。在小公司的面试里,也有不少考基础的。整理一下基础知识和底层原理相关的高频面试题。为了方便自我检测,答案隐藏起来了,需要看答案的自行向右拖动滚动条查看。

目录:

Java篇

Java的基本数据类型和对应的占用空间 参考答案:www.runoob.com/java/java-b…

面向对象的三大特征?

                                                                                                                              封装、继承、多态。

什么是多态?

                                                                                                                     接口的多种不同实现方式就是多态。比如同一个接口,使用不同的实例,执行不同的操作。             (这个很重要,一定要理解,有点抽象,不理解的请自行百度。)
                                                                                                                     

局部内部类可以修改局部变量吗?

                                                                                                           不能。原因:因为局部内部类要访问局部变量,局部变量必须被声明为final,所以局部内部类无法修改局部变量。JDK1.8后,在局部内部类访问局部变量即使变量没有被声明为final也是自动认为该变量是final,所以局部内部类只能访问而无法修改局部变量。注意!!!成员内部类是可以修改局部变量的。
                                                                   

反射和clone创建对象会调用构造函数吗?

                                                                                                           反射会,clone不会。
                                                                   

JAVA创建对象的方式有几种?分别是什么?

                                                                                                         四种。分别是:
                                                                                                      1.用new关键字创建
                                                                                                      2.调用对象的clone方法
                                                                                                      3.利用反射,调用Class类的或者是Constructor类的newInstance()方法
                                                                                                      4.用反序列化,调用ObjectInputStream类的readObject()方法
                                                                   

多线程篇

Synchronized和Lock的区别

  参考答案:  https://blog.csdn.net/ldkjsdty/article/details/114333345                

volatile和synchronized的区别

  参考答案: https://blog.csdn.net/suifeng3051/article/details/52611233                

JVM启动的是多线程吗?

                                                                                                                    JVM启动至少启动了垃圾回收线程和主线程,所以是多线程的。

如何让主线程等待所有子线程执行完了再执行?

                                                                                                          方法:1.使用Thread的join()方法,在调用Thread的start()方法后调用Thread的jion()方法。Thread的join()方法的作用是让父线程等待子线程结束之后才能继续执行。
                                                                                                                 2.使用工具类CountDownLatch。
                                                                                                                 3.使用工具类CyclicBarrier。
                                                                                                                 4.使用线程池。
                                                                                                                 参考:https://blog.csdn.net/m0_37125796/article/details/81105099

Java进程间通信的方式有哪些

  参考答案:  https://www.cnblogs.com/fnlingnzb-learner/p/11664000.html                

数据结构篇

Set、List、Map的区别与联系? ArrayList和LinkedList区别? Vector和ArrayList 区别? 参考解析:blog.csdn.net/qq_39241239…

Map的有序和无序实现类有哪些?

                                                                                                                       1.HashMap、Hashtable不是有序的;

                                                                                                                      2.TreeMap和LinkedHashMap是有序的(TreeMap默认 Key 升序,LinkedHashMap则记录了插入顺序)。

JVM篇

对象被垃圾回收器回收前会调用什么方法?

                                                                                                             finalize()

java双亲委派机制及作用?

  参考答案:https://www.jianshu.com/p/1e4011617650                                                                                       

MySQL篇

MySQL索引在什么情况下会失效?

                                                                                                                    参考:https://www.jianshu.com/p/3ccca0444432。

算法篇

整理中...

Spring篇

Spring 中创建的Bean(例如Controller)默认是单例还是多例的?

                                                                                                                                       默认是单例的。
                                                                                                                                   

Spring框架中的三大核心思想是什么?

                                                                                                                       DI(依赖注入)
                                                                                                                       IOC(控制反转)
                                                                                                                       AOP(面向切面编程)

Spring MVC篇

整理中...

MyBatis篇

MyBatis的缓存机制?

																																					分为一级缓存和二级缓存,并预留了集成第三方缓存的接口,一级缓存默认开启,二级缓存需要手动开启;一级缓存只是相对于同一个SqlSession而言。
																																					更多参考:https://www.cnblogs.com/happyflyingpig/p/7739749.html

Redis篇

redis的数据类型有哪些?

																																						1.字符串(String)
																																						2.哈希(Hash)
																																						3.列表(List) 
																																						4.集合(Set)
																																						5.有序集合(sorted set)

Web篇

关闭浏览器后,session是否还存在?

                                                                                                                                       存在于浏览器上的唯一标识符JSESSIONID(sessionid)消失了,但是服务器中存放的sessionid并没有立马销毁。更多参考内容:             https://www.cnblogs.com/heyboom/p/11090616.html