因为面试常用的都是一些基础题,所以在此总结了一下,分享给大家。
1.List和Set的区别
首先要搞清楚java中有序和无序的概念
有序指的是存储顺序与添加顺序相同,并且可以通过下标访问,List就是这样。
无序刚好相反,指的是存储顺序与添加顺序无关,没有下标,当然也不可能通过下标访问,Set就是如此。
这里需要注意的是,有序、无序中的“序”与我们平常所说的“顺序”无关。
而TreeSet是无序,但又是排好序的。即添加顺序与存储顺序无关,但是其中的对象实现了排序。
a、List,Set都是继承自Collection接口
b、List特点:元素有放入顺序,元素可重复 ; Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)
c、List接口有三个实现类:LinkedList,ArrayList,Vector ,Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet
2.HashMap和HashSet的实现原理
HashMap的实现原理如下:HashMap实现原理分析
3.什么是分布式?分布式与集群的区别
4.接口和抽象类的区别
5.类和对象的区别
类是定义一个对象的数据和方法的蓝本,对象是类的实例,可以从一个类中创建许多实例。例如有一个Person类,实例化之后的男人和女人就是对象。
6.什么是泛型
使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。例如:类型转换错误,在编译的时候不会报错,但是运行的时候才会,使用泛型就可以保护类型的安全。再比如,同样的方法,只是返回的类型不一样,这样用泛型就可以重用代码,不用写两个相同的方法。
7.值传递和引用传递
8.类加载器
9.Java api中集合类的区别
10Js闭包
js闭包和java的里面的引用传递差不多是同样的里面,引用的是内存地址。
11.Linux下编译当前文件夹下面所有java文件的命令
12.Java的垃圾回收机制
13.事务的隔离级别
14.jdk和jre的区别
15.null==object和object==null的区别
null == object表示去object的内存中查看该内存空间是否为空,判断的是内存空间的容量是否为空,object对象并没有初始化。
object == null 表示首先初始化object对象,并判断该对象是否为空,这才是正确的用于判断对象是否为空的用法
16.为什么java是与平台无关的语言
java的跨平台不是java源程序的跨平台 ,如果是这样,那么所以语言都是跨平台的,java源程序先经过javac编译器编译成二进制的.class字节码文件(java的跨平台指的就是.class字节码文件的跨平台,.class字节码文件是与平台无关的),.class文件再运行在jvm上,java解释器(jvm的一部分)会将其解释成对应平台的机器码执行,所以java所谓的跨平台就是在不同平台上安装了不同的jvm,而在不同平台上生成的.class文件都是一样的,而.class文件再由对应平台的jvm解释成对应平台的机器码执行。
最后解释下机器码和字节码的区别: 一,机器码,完全依附硬件而存在~并且不同硬件由于内嵌指令集不同,即使相同的0 1代码意思也可能是不同的。换句话说,根本不存在跨平台性。比如,不同型号的CPU,你给他个指令10001101,他们可能会解析为不同的结果;二,我们知道JAVA是跨平台的,为什么呢?因为他有一个jvm,不论那种硬件,只要你装有jvm,那么他就认识这个JAVA字节码。至于底层的机器码,咱不用管,有jvm搞定,他会把字节码再翻译成所在机器认识的机器码。
17.常用算法
18.常用设计模式
单例模式、工厂模式、适配器模式、代理模式、观察者模式、中介者模式
19.Maven、gradle、SVN、Git
Gradle是一种构建工具,它可以帮你管理项目中的差异,依赖,编译,打包,部署......,你可以定义满足自己需要的构建逻辑,写入到build.gradle中供日后复用.
Gradle不是一种编程语言,它不能帮你实现软件中的任何实际功能
Maven和Gradle都是构建工具,用于管理项目中的差异、依赖、编译、打包、部署等
SVN和Git是版本控制工具
20.Spring中的aware接口
BeanNameAware
接口是为了让自身Bean
能够感知到,获取到自身在Spring容器中的id属性。
同理,其他的Aware
接口也是为了能够感知到自身的一些属性。比如实现了ApplicationContextAware
接口的类,能够获取到ApplicationContext
,实现了BeanFactoryAware
接口的类,能够获取到BeanFactory
对对象
21.IO和NIO的区别
a.IO是面向流的 NIO是面向缓冲区的
b.IO是阻塞的 NIO是非阻塞的,可以异步进行
c.NIO有选择器,使其可以做到一个线程同时管理多个通道
d.具体链接 IO和NIO的区别
22.int和Integer的区别
23.==和equal的区别
24.final作用
a) final可以修饰类,这样的类不能被继承。
b) final可以修饰方法,这样的方法不能被重写。
c) final可以修饰变量,这样的变量的值不能被修改,是常量。
25.java容器有哪些
26.ArrayList 和 LinkedList 的区别是什么
27.ArrayList和Vector的区别
28.Array和ArrayList的区别
Array可以包含基本类型和对象类型,ArrayList只能包含对象类型
Array大小固定,ArrayList的大小是动态变化的。
ArrayList提供了更多的方法和特性:比如 :addAll(),removeAll(),iterator()等等。
对于基本数据类型,集合使用自动装箱来减少编码工作量。但是,当处理固定大小基本数据类型的时候,这种方式相对较慢。
29.哪些集合类是线程安全的
线程安全(Thread-safe)的集合对象:Vector 、HashTable 、StringBuffer 、ConcurrentMap
非线程安全的集合对象:ArrayList 、LinkedList、HashMap、HashSet、TreeMap、TreeSet、StringBulider
30.Iterator 和 ListIterator 有什么区别
31.Callable,Runnable的区别及用法
32.线程池的五种状态
33.线程池中 submit()和 execute()方法有什么区别
线程池中 submit()和 execute()方法有什么区别
34.sleep()和wait()方法的区别
35.Java中如何保证线程安全性
36.死锁的四个必要条件?如何避免和预防
37.threadlocal原理及常用应用场景
38.volatile和synchronized的作用和区别
volatile和synchronized的作用和区别是什么?
39.synchronized和Lock的区别
两者区别:
1.首先synchronized是java内置关键字,在jvm层面,Lock是个java类;
2.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;
3.synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工
释放锁(unlock()方法释放锁),否则容易造成线程死锁;
4.用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待
下去,而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了;
5.synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者皆可)
6.Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。
40.synchronized、ReentrantLock以及Atomic的区别
synchronized、ReentrantLock以及Atomic的区别