因为面试常用的都是一些基础题,所以在此总结了一下,分享给大家。
首先要搞清楚java中有序和无序的概念
有序指的是存储顺序与添加顺序相同,并且可以通过下标访问,List就是这样。
无序刚好相反,指的是存储顺序与添加顺序无关,没有下标,当然也不可能通过下标访问,Set就是如此。
这里需要注意的是,有序、无序中的“序”与我们平常所说的“顺序”无关。
而TreeSet是无序,但又是排好序的。即添加顺序与存储顺序无关,但是其中的对象实现了排序。
a、List,Set都是继承自Collection接口
b、List特点:元素有放入顺序,元素可重复 ; Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)
c、List接口有三个实现类:LinkedList,ArrayList,Vector ,Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet
HashMap和HashSet的区别
HashMap的实现原理如下:HashMap实现原理分析
分布式与集群的区别是什么?
接口和抽象类有什么区别
类是定义一个对象的数据和方法的蓝本,对象是类的实例,可以从一个类中创建许多实例。例如有一个Person类,实例化之后的男人和女人就是对象。
使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。例如:类型转换错误,在编译的时候不会报错,但是运行的时候才会,使用泛型就可以保护类型的安全。再比如,同样的方法,只是返回的类型不一样,这样用泛型就可以重用代码,不用写两个相同的方法。
Java中按值传递与按引用传递的区别
Java类加载器总结
js闭包和java的里面的引用传递差不多是同样的里面,引用的是内存地址。
Java垃圾回收机制
Java 事务及隔离级别
JDK、JRE、JVM三者间的关系
null == object表示去object的内存中查看该内存空间是否为空,判断的是内存空间的容量是否为空,object对象并没有初始化。
object == null 表示首先初始化object对象,并判断该对象是否为空,这才是正确的用于判断对象是否为空的用法
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搞定,他会把字节码再翻译成所在机器认识的机器码。
Java常用排序算法/程序员必须掌握的8大排序算法
单例模式、工厂模式、适配器模式、代理模式、观察者模式、中介者模式
Java开发中的23种设计模式详解
Gradle是一种构建工具,它可以帮你管理项目中的差异,依赖,编译,打包,部署......,你可以定义满足自己需要的构建逻辑,写入到build.gradle中供日后复用.
Gradle不是一种编程语言,它不能帮你实现软件中的任何实际功能
Maven和Gradle都是构建工具,用于管理项目中的差异、依赖、编译、打包、部署等
SVN和Git是版本控制工具
BeanNameAware
接口是为了让自身Bean
能够感知到,获取到自身在Spring容器中的id属性。
同理,其他的Aware
接口也是为了能够感知到自身的一些属性。比如实现了ApplicationContextAware
接口的类,能够获取到ApplicationContext
,实现了BeanFactoryAware
接口的类,能够获取到BeanFactory
对对象
a.IO是面向流的 NIO是面向缓冲区的
b.IO是阻塞的 NIO是非阻塞的,可以异步进行
c.NIO有选择器,使其可以做到一个线程同时管理多个通道
d.具体链接 IO和NIO的区别
int和Integer的区别
==和equal的区别
a) final可以修饰类,这样的类不能被继承。
b) final可以修饰方法,这样的方法不能被重写。
c) final可以修饰变量,这样的变量的值不能被修改,是常量。
java容器有哪些
ArrayList 和 LinkedList 的区别是什么
ArrayList和Vector的区别
Array可以包含基本类型和对象类型,ArrayList只能包含对象类型
Array大小固定,ArrayList的大小是动态变化的。
ArrayList提供了更多的方法和特性:比如 :addAll(),removeAll(),iterator()等等。
对于基本数据类型,集合使用自动装箱来减少编码工作量。但是,当处理固定大小基本数据类型的时候,这种方式相对较慢。
线程安全(Thread-safe)的集合对象:Vector 、HashTable 、StringBuffer 、ConcurrentMap
非线程安全的集合对象:ArrayList 、LinkedList、HashMap、HashSet、TreeMap、TreeSet、StringBulider
Iterator 和 ListIterator 有什么区别
Callable,Runnable的区别及用法
线程池的五种状态
线程池中 submit()和 execute()方法有什么区别
sleep()和wait()方法的区别
Java中如何保证线程安全性
死锁的四个必要条件?如何避免和预防
threadlocal原理及常用应用场景
volatile和synchronized的作用和区别是什么?
两者区别:
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锁适合代码少量的同步问题。
synchronized和Lock的区别
synchronized、ReentrantLock以及Atomic的区别
堆栈的区别
盏和队列区别
什么是双亲委派模型
Java的类加载过程
判断对象是否可以回收的方法
sql优化
redis 优缺点 使用场景
HashMap和Hashtable的区别
sleep,wait,yield,join的区别
redis缓存穿透以及解决办法
数据库字段为什么设置为Not Null更优化
垃圾回收算法以及垃圾回收器1 垃圾回收算法以及垃圾回收器2
CMS垃圾回收器
jvm-新生代与老年代GC
分代回收算法如何工作的