2018最新的java面试题

时间:2020-11-30 15:36:21

这几天面试了几家公司,下面是我比较深刻的面试题库总结(受益匪浅)

第二家:

第一:在java中你知道的锁有哪些?详细说说乐观锁、悲观锁、同步锁?为什么有的可以加上锁有的不可以加上锁,它们会有哪些讲究?

第二:说说你知道的集合,并说说它们之间的不同点?每个集合有什么用,在什么场景下使用当前的集合?那么hashtable线程安全,底层是怎么实现线程安全的?

第三:说说java6、java7、java8的区别?你现在项目中问什么用jdk1.7,那么jdk1.7和jdk1.6的区别是什么?

第四:说说设计模式有哪些?什么是单例模式?单例模式中的双重判断,解决了什么问题?单例模式为什么要这么用?什么场景下使用单例模式?什么是工厂模式?为什么要用到工厂模式?最好spring中的设计模式也要说说?

第五:什么是多线程,什么是单线程,有什么用,什么时候用多线程,什么时候用单线程?

第六,数据库相关问题,针对Mysql(必问):

给题目让你手写SQL。

有没有SQL优化经验。

Mysql索引的数据结构。

SQL怎么进行优化。

SQL关键字的执行顺序。

有哪几种索引。

什么时候该(不该)建索引。

Explain包含哪些列。

Explain的Type列有哪几种值。

mysql的数据引擎有哪些,是通过什么来选择数据库引擎的?你在设计表的时候对于数据库应该注意哪些?那么数据库中怎么建索引?数据库中你知道的索引有哪些?

第七:tomcat服务器的类型,怎么进行选择,tomcat的优化?

第八:说说spring?Spring的通知有哪些?Ioc的原理?Ioc的底层是什么,怎么管理类和对象?解释一下spring中Aop?2

第九:什么是分布式集群?什么是分布式缓存?在分布式缓存中怎么确定在哪个服务器上?

第十:什么是dubbo,在商城项目中dubbo如何使用?

第十一:ngnix是什么?有什么用,应用场景是?它怎么跳转服务器?通过什么方式来确定转换服务器?

第十二:说说前端框架有哪些?在项目中怎么去选择这些框架?它们的应用场景是什么?

第十三:说说项目中订单的流程?你们怎么设置它的id?怎么解决高并发造成的订单重复问题?订单中的几种状态?

第十四:在做项目中你写过的工具有哪些?这些东西在什么情况下用比较好?怎么去提高系统中的性能?

第十五:说说分布式系统有哪些,有什么用,以及各系统的应用场景?

第一家:

第一:你目前用的linux的型号是,为什么要用这个型号?

第二:说说你最熟悉的项目?(怎么扩展权限?说说你的权限是怎么做的?描述下你的项目的面向群体?应用场景?各个功能?树怎么实现?各个表之间的关系?老师属于用户吗,在老师中添加数据的话,用户表中是否会添加一条数据?关于权限的话牵扯到了几张表?等等)

第三:项目中支付是怎么做的?怎么解决多支付?怎么解决错支付?怎么解决退款方式?

第四:当用户注册完登录后的这些数据存放在哪里比较好?(token限时)

注意:

1)写SQL:写SQL很常考察group by、内连接和外连接。2)手写代码:手写代码一般考单例、排序、线程、消费者生产者。我建议排序算法除了冒泡排序,最好还能手写一种其他的排序代码。试想:如果一般面试者都写的冒泡排序,而你写的是快速排序/堆排序,肯定能给面试官留下不错的印象。

下面是快速排序的代码:

public class QuickSort {

public void quickSort(String[] strDate, int left, int right) {

String middle, tempDate;

int i, j;

i = left;

j = right;

middle = strDate[(i + j) / 2];

do {

while (strDate[i].compareTo(middle) < 0 && i < right)

i++; // 找出左边比中间值大的数

while (strDate[j].compareTo(middle) > 0 && j > left)

j--; // 找出右边比中间值小的数

if (i <= j) { // 将左边大的数和右边小的数进行替换

tempDate = strDate[i];

strDate[i] = strDate[j];

strDate[j] = tempDate;

i++;

j--;

}

} while (i <= j); // 当两者交错时停止

if (i < right) {

quickSort(strDate, i, right);// 从

}

if (j > left) {

quickSort(strDate, left, j);

}

}

public static void main(String[] args) {

String[] strVoid = new String[] { "11", "66", "22", "0", "55", "22",

"0", "32" };

QuickSort sort = new QuickSort();

sort.quickSort(strVoid, 0, strVoid.length - 1);

for (int i = 0; i < strVoid.length; i++) {

System.out.println(strVoid[i] + " ");

}

}

}

2.面试流程

1)让你自我介绍

2)问Java基础知识

3)问项目

4)情景问题,例如:你的一个功能上了生产环境后,服务器压力骤增,该怎么排查。

5)集合相关问题(必问):

HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现。

HashMap和Hashtable的区别。

ArrayList、LinkedList、Vector的区别。

HashMap和ConcurrentHashMap的区别。

HashMap和LinkedHashMap的区别。

HashMap是线程安全的吗。

ConcurrentHashMap是怎么实现线程安全的。

6)线程相关问题(必问):

创建线程的3种方式。

什么是线程安全。

Runnable接口和Callable接口的区别。

wait方法和sleep方法的区别。

synchronized、Lock、ReentrantLock、ReadWriteLock。

介绍下CAS(无锁技术)。

什么是ThreadLocal。

创建线程池的4种方式。

ThreadPoolExecutor的内部工作原理。

分布式环境下,怎么保证线程安全。

我:

7)JVM相关问题:

介绍下垃圾收集机制(在什么时候,对什么,做了什么)。

垃圾收集有哪些算法,各自的特点。

类加载的过程。 双亲委派模型。

有哪些类加载器。

能不能自己写一个类叫java.lang.String。

8)设计模式相关问题(必问):

先问你熟悉哪些设计模式,然后再具体问你某个设计模式具体实现和相关扩展问题。

9)数据库相关问题,针对Mysql(必问):

给题目让你手写SQL。

有没有SQL优化经验。

Mysql索引的数据结构。

SQL怎么进行优化。

SQL关键字的执行顺序。

有哪几种索引。

什么时候该(不该)建索引。

Explain包含哪些列。

Explain的Type列有哪几种值。

mysql的数据引擎有哪些,是通过什么来选择数据库引擎的?你在设计表的时候对于数据库应该注意哪些?那么数据库中怎么建索引?数据库中你知道的索引有哪些?

10)框架相关问题:

Hibernate和Mybatis的区别。

Spring MVC和Struts2的区别。

Spring用了哪些设计模式。

Spring中AOP主要用来做什么。

Spring注入bean的方式。

什么是IOC,什么是依赖注入。

Spring是单例还是多例,怎么修改。

Spring事务隔离级别和传播性。

介绍下Mybatis/Hibernate的缓存机制。

Mybatis的mapper文件中#和$的区别。

Mybatis的mapper文件中resultType和resultMap的区别。

Mybatis中DAO层接口没有写实现类,Mapper中的方法和DAO接口方法是怎么绑定到一起的,其内部是怎么实现的。

9)其他遇到问题:

介绍下栈和队列。

IO和NIO的区别。

接口和抽象类的区别。

int和Integer的自动拆箱/装箱相关问题。 常量池相关问题。

==和equals的区别。

重载和重写的区别。

String和StringBuilder、StringBuffer的区别。

静态变量、实例变量、局部变量线程安全吗,为什么。 try、catch、finally都有return语句时执行哪个。

介绍下B树、二叉树。

ajax的4个字母分别是什么意思。

xml全称是什么。

分布式锁的实现。

分布式session存储解决方案。

常用的linux命令。