面试-基础篇
点击蓝色“SpringForAll社区”关注我哟
前言
上一篇文章我们完成了简历的编写,接下来就该进行技术了,技术这块主要会围绕如下几个方面。
1、java基础
集合框架
list与set的区别
ArrayList、LinkedList、Vector的区别
Map、Set、List、Queue、Stack的特点与用法
map在for循环状态下使用remove()为何会抛出异常
set与list的区别
结合使用场景去描述线程安全的集合类以及优化,cow模式
hashmap的实现
此处需要深入了解源码,及hashmap多线程环境下会出现什么问题,这个几乎是必问,结合jdk1.7与jdk1.8的区别hashtable与concurrenthashmap
concurrenthashmap结合源码,jdk1.7与1.8的区别线程安全的各种集合类,cow模式等
final关键字,finally关键字
异常的分类及处理,结合aop
面向对象的五大职责
结合项目或者某些源码进行描述classloader的加载机制
重写equals时为何要重写hashcode(),不重写会出现什么问题
java基础类型的向上转型,丢失精度问题
String类为何是不可变的,string的equals方法是如何实现的?
接口与抽象类的区别,为何要这样设计?
重载与重写
IO的优化,NIO
Object有哪些通用方法?
String、StringBuffer与StringBuilder的区别
一致性hash
Java对象的生命周期
2、多线程与并发
wait()和notify()
多线程环境下让3个线程依次按顺序执行,如何实现?
创建线程的几种方式,应用场景?
继承thread类,实现runnable或者callable接口线程和进程有什么区别?
用 wait-notify 写一段代码来解决生产者-消费者问题?
用java写一个线程安全的单例模式
double check和枚举类型两种方式,延伸会问为何要double-check,枚举为何是线程安全的notify()与notifyAll()有什么区别?
如何获得线程的堆栈信息?
线上服务器cpu 100%了,该如何排查问题?
i++ 操作在多线程环境下会出现什么问题?怎么解决?考虑使用AtomicInteger等相关的类
fork-join框架是什么?
可重入锁是什么,有哪些?
同步方法与同步代码块,有何区别,使用场景?
同步代码块中抛出异常会发生什么?
volatile 变量和 atomic 变量有什么不同?
ReentrantLock与synchronized
启动线程的方法是哪个?
同步类容器和并发类容器有何区别,使用场景分别是?
CyclicBarrier 和 CountDownLatch 有什么不同?
java内存模型
线程优化的方案
可以参考cow模式,以及concurrenthashmap的优化锁力度等方面入手volatile与synchronized
ThreadLocal线程局部变量
多线程的设计模式 Future-task,master-worker,Guarded Suspension,生产者消费者等
设计一个高并发的系统,需要考虑哪些点?
什么是线程池,你在项目中使用过哪些?
线程池的几种方式要记清楚,底层使用的都是同一个构造方法,要清楚的知道每个参数的含义,线程池大小的优化,从io密集型和计算密集型方面去回答线程池中任务满了,会怎么处理?
什么是阻塞式方法,自己去设计一个该怎么实现?
CountDownLatch
队列(有界和无界)如何实现?
数据结构与算法
两个有序的数组合并成一个数组,写代码实现?
给两个数组分别定义一个下标,最大长度是数组长度减一,按位循环比较两个数组,较小元素的
放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标超过数组长度时
退出循环,此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素
放入新数组,大功告成。
反转一个链表
斐波那契数列
两种方式实现,递归和非递归
树相关的数据结构
此处会问二叉树,排序树,avl树,红黑树,B树,B+树等相关的应用场景
各种排序算法需要简单了解下
冒泡,快速排序,堆排序,二分法等等相关的都需要了解下
推荐阅读:
点击原文阅读更多
点个“好看”支持一下鸭
点鸭点鸭点鸭
↓↓↓