最近在面试,所以就把一些面试题做一下整理
一。java基础
1. i++ 和 ++i
在面试中遇到过这样一道题:i++和 || 相遇 短路原则,我们来看一下下面的代码:
package org.example;
public class Test02 {
int i = 0, j = 0;
public static void main(String[] args) {
Test02 test02 = new Test02();
test02.method01();
System.out.println("i:"+test02.i);
System.out.println("j:"+test02.j);
int i = 0, j = 0;
int a = i++;
int b = ++j;
System.out.println("a:"+a);
System.out.println("b:"+b);
}
public void method01(){
i++;
++j;
}
}
我们来想一想输出答案是什么呢?
输出答案是:
i:1
j:1
a:0
b:1
我们看到:i++ 和 ++j 后,出了i++ 是0之外其他的都是1
我们再来看下面的这段代码:
package org.example;
public class Test03 {
int i = 0, j = 0;
public static void main(String[] args) {
Test03 test02 = new Test03();
test02.method02();
System.out.println("i:"+test02.i);
}
public void method02(){
boolean flag = (0 < 3) || i++ > 10;
}
}
在method方法中注意 短路原则,所以i还是0
我们看执行结果:
"C:\Program Files\Java\jdk-10.0.2\bin\java.exe" "-javaagent:I:\dev_tools\idea\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=58490:I:\dev_tools\idea\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath H:\WORKSPACE_TINGYUN\study\springboot\test01\target\classes org.example.Test03
i:0
2.java中的IO都有哪些?字符流和字节流有什么区别,什么情况下用字节流,什么时候用字符流,字符流与字节流之间怎么转换?
答:
InputStream,OutputStream是字节流,Reader、Writer是字符流
一般有FileInputStream、FileOutputStream、ByteArrayInputStream、ByteArrayOutputStream
详见这篇博客: https://blog.csdn.net/lwang_it/article/details/78886186
3.一个文件1.txt文件如何转换成字节数组?
4.集合都有哪些?List都有哪些实现?ArrayList、Vector、LinkedList底层实现原理是什么?这三者之间的区别是什么?
答:
ArrayList和Vector底层是数组实现的,所以查询比较快,增删改比较慢
LinkedList底层是链表实现的,所以增删改比较快,查询比较慢
ArrayList是非线程安全的,而Vector是线程安全的
5.Set都有哪些实现,TreeSet、HashSet、LinkedHashSet分别有什么特点
答:https://www.cnblogs.com/wl0000-03/p/6019627.html
6.HashMap、HashTable、ConcurrentHashMap分别有什么特点,他们之间的区别是什么,都在分别在什么场景下用这三种Map
7.HashMap底层实现原理、jdk1.7和jdk1.8中HashMap有什么区别?HashMap的扩容机制和扩容原理?
8.java的反射机制是什么?对此有什么理解。
答:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
详见:https://www.cnblogs.com/songanwei/p/9386749.html
9.java 的垃圾回收机制以及原理?以及垃圾回收算法都有哪几种,分别说一说你对他们的理解
10.java中的队列和栈有什么区别?
11.一个java类加载的过程以及原理?
12.java中静态变量和成员变量有什么区别?他们是如何加载的
13.jvm调优,在实际工作中有没有过jvm调优的经验?分享一下
14.抽象类和接口分别是什么,他们之间的区别是什么?
15.final、finally、 finalize的区别和用法
16.Object类中都有哪些方法
17.在java 中 == 和 equals()的区别?
18.jdk1.8的新特性都有哪些?分别说一下,以及在项目中是怎么使用的?
19.Http协议包含哪些?Https是什么实现加密的?
二。MySQL
1.MySQL调优,如何进行sql优化
2.sql的执行流程
3.sql的存储过程
4.有哪些情况下索引会失效
5.索引有哪些?索引的底层是什么数据结构?索引的原理
6.有一个联合索引a,b,那么在后面三个查询条件中,a=?,b=?,a=? and b=?中 那几个条件用到了联合索引
答:联合索引遵循最左原则,a=?, 和 a=? and b=? 用到了联合索引。 而 b=? 没有用到ab的联合索引
7.MySQL中索引排序的问题:a和b两个字段都有索引,查询条件中 where a=? order by b 中 a和b的索引是否都用到了?
答:https://blog.csdn.net/zengxuewen2045/article/details/51226860
8.MySQL中有哪些存储引擎?InnoDB和MyISAM各有什么特点或者说他们有什么区别?
9.事物的隔离级别和传播机制,Mysql中默认的隔离级别是哪个?
三。并发
1.进程和线程的区别
2.线程都有哪些状态?
3.join(),yield(),sleep(),wait() 这些方法分别是什么意思?sleep()和wait()有什么区别?
4.说明一下什么线程安全和非线程安全,用一个实际的例子说明一下
5.synchronized 和 ReetrantLock 之间的区别?简单说一下 ReetrantLock 的实现原理
6.说一下 ReetrantReadWriteLock
7.说一下AQS是什么,谈谈对AQS的理解
8.谈一谈对JUC的理解,JUC中都有些什么类,分别谈一下
四。Spring框架
1.说一下对Spring框架的理解
2.IOC和AOP
3.SpringMVC 的执行流程
4.SpringMVC中的注解
5.RequestBody和ResponseBody的区别?
6.Spring中的事务是如何做的以及是怎么理解的?
五。MyBatis
1.MyBatis中 # 和 $ 有什么区别,什么情况下用到了 $
2.MyBatis中的缓存机制有哪些?
六。SpringBoot
1.如何理解SpringBoot,以及谈一谈SpringBoot和Spring的区别?
2.SpringBoot中用到了什么新技术?
3.SpringBoot的starter怎么理解?
4.SpringBoot中的 @SpringBootApplication 注解怎么理解?
5.SpringBoot中的项目是如何运行的?
6.SpringBoot项目是如何部署的?
七。Redis
1.Redis中有哪些数据结构,分别在什么情况下用什么数据结构
2.项目中哪些场景下用到了Redis,分别是怎么用的
八。分布式微服务以及SpringCloud、Dubbo、Zookeeper
1.如何理解分布式,微服务这些名词,以及跟传统的分布式和SOA架构的区别?
2.SpringCloud都有哪些技术
3.SpringBoot和SpringCloud有什么关系和区别
4.SpringCloud中有哪些注解
5.SpringCloud中如何实现链路监控的,以及什么是熔断和降级
6.zookeeper中是如何实现数据一致性的有个什么算法?
7.zookeeper、Eureka有什么区别
8.什么是Dubbo,Dubbo和SpringCloud有什么特点和区别?