这几天面试了几家公司,下面是我比较深刻的面试题库总结(受益匪浅)
第二家:
第一:在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命令。