熟练掌握java是很关键的,大公司不仅仅要求你会使用几个api,更多的是要你熟悉源码实现原理,甚至要你知道有哪些不足,怎么改进,还有一些java有关的一些算法,设计模式等等。
(一) java基础面试知识点
java中==和equals和hashCode的区别
x.equals(y)返回true,即两个对象根据equals()方法比较是相等的,那么调用这两个对象中任意一个对象的hashCode()方法都必须产生同样的整数结果。如果x.equals(y)返回false,即两个对象根据equals()方法比较是不相等的,那么x和y的hashCode()方法的返回值有可能相等,也有可能不相等。反之,hashCode()方法的返回值不相等,一定能推出equals()方法的返回值也不相等,而hashCode()方法的返回值相等,equals()方法的返回值则可能相等,也可能不相等。
int、char、long各占多少字节数 (int 4 char 2 long 8)
int与integer的区别
探探对java多态的理解 --》父类引用指向子类对象,在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
String、StringBuffer、StringBuilder区别
String 常量字符串,StringBuffer多线程,StringBuilder单线程,性能不一样
抽象类和接口区别
接口是便于扩充功能的微型抽象类
抽象类:对一类事物的抽象。
接口:对某一行为抽象。
所以,个人觉得,两者最核心的区别是:使用动机对象的实例与抽象类是IS A的关系,与接口是HAS A的关系,抽象类本质是类的特殊形式,所以它也具有类的基本特征,使用抽象类主要是为了抽象子类可共用的数据和行为,待子类派生时减少重复代码。类实现某个接口更像是给这个类打了一个标签,表明这个类的实例符合某种标准,获得了某种能力。总之,抽象类和接口是两种不同的类型,使用的场景也不一样
接口的意义
泛型中extends和super的区别 extends 向下 super 向上
父类的静态方法能否被子类重写
因为静态方法从程序开始运行后就已经分配了内存,也就是说已经写死了。所有引用到该方法的对象(父类的对象也好子类的对象也好)所指向的都是同一块内存中的数据,也就是该静态方法。子类中如果定义了相同名称的静态方法,并不会重写,而应该是在内存中又分配了一块给子类的静态方法,没有重写这一说
静态内部类的设计意图
一个与外围对象有关系,一个没有关系,静态内部类不依赖外部类的实体
string 转换成 integer的方式及原理
parseInt 构造一个Integer对象 通过char 转换
(二) java深入源码级的面试题(有难度)
哪些情况下的对象会被垃圾回收机制处理掉?
讲一下常见编码方式?
utf-8编码中的中文占几个字节;int型几个字节?
3 4
静态代理和动态代理的区别,什么场景使用?
Java的异常体系
谈谈你对解析与分派的认识。
修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法?
Java中实现多态的机制是什么?
如何将一个Java对象序列化到文件里?
说说你对Java反射的理解
说说你对Java注解的理解
说说你对依赖注入的理解
说一下泛型原理,并举例说明
Java中String的了解
String为什么要设计成不可变的?
Object类的equal和hashCode方法重写,为什么?
(三) 数据结构
常用数据结构简介
并发集合了解哪些?
列举java的集合以及集合之间的继承关系
集合类以及集合框架
容器类介绍以及之间的区别(容器类估计很多人没听这个词,Java容器主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections),具体的可以看看这篇博文 Java容器类 http://alexyyek.github.io/2015/04/06/Collection/)
List,Set,Map的区别
List和Map的实现方式以及存储方式
HashMap的实现原理
HashMap数据结构?
HashMap源码理解
HashMap如何put数据(从HashMap源码角度讲解)?
HashMap怎么手写实现?
ConcurrentHashMap的实现原理
ArrayMap和HashMap的对比
HashTable实现原理
TreeMap具体实现
HashMap和HashTable的区别
HashMap与HashSet的区别
HashSet与HashMap怎么判断集合元素重复?
集合Set实现Hash怎么防止碰撞
ArrayList和LinkedList的区别,以及应用场景
数组和链表的区别
二叉树的深度优先遍历和广度优先遍历的具体实现
堆的结构
堆和树的区别
堆和栈在内存中的区别是什么(解答提示:可以从数据结构方面以及实际实现方面两个方面去回答)?
什么是深拷贝和浅拷贝
手写链表逆序代码
讲一下对树,B+树的理解
讲一下对图的理解
判断单链表成环与否?
链表翻转(即:翻转一个单项链表)
合并多个单有序链表(假设都是递增的)
(四) 线程、多线程和线程池
开启线程的三种方式?
线程和进程的区别?
为什么要有线程,而不是仅仅用进程?
run()和start()方法区别
如何控制某个方法允许并发访问线程的个数?
在Java中wait和seelp方法的不同;
谈谈wait/notify关键字的理解
什么导致线程阻塞?
线程如何关闭?
讲一下java中的同步的方法
数据一致性如何保证?
如何保证线程安全?
如何实现线程同步?
两个进程同时要求写或者读,能不能实现?如何防止进程的同步?
线程间操作List
Java中对象的生命周期
Synchronized用法
synchronize的原理
谈谈对Synchronized关键字,类锁,方法锁,重入锁的理解
static synchronized 方法的多线程访问和作用
同一个类里面两个synchronized方法,两个线程同时访问的问题
volatile的原理
谈谈volatile关键字的用法
谈谈volatile关键字的作用
谈谈NIO的理解
synchronized 和volatile 关键字的区别
synchronized与Lock的区别
ReentrantLock 、synchronized和volatile比较
ReentrantLock的内部实现
lock原理
死锁的四个必要条件?
怎么避免死锁?
对象锁和类锁是否会互相影响?
什么是线程池,如何使用?
Java的并发、多线程、线程模型
谈谈对多线程的理解
多线程有什么要注意的问题?
谈谈你对并发编程的理解并举例说明
谈谈你对多线程同步机制的理解?
如何保证多线程读写文件的安全?
多线程断点续传原理
断点续传的实现
(五)并发编程有关知识点
这个是一般Android开发用的少的,所以建议多去看看。
平时Android开发中对并发编程可以做得比较少,Thread这个类经常会用到,但是我们想提升自己的话,一定不能停留在表面,,我们也应该去了解一下java的关于线程相关的源码级别的东西。