数据库的隔离级别
什么情况下会出现重复读
脏读?
- 脏读是指在一个事务处理过程中读取了另一个未提交的事务的数据。
- 当一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得到的数据不一致
幻读?
- 幻读的重点在于插入与删除,即第二次查询会发现比第一次查询数据变少或者变多了
spring事务的隔离级别?spring事务的传播行为?
spring boot的@RestController?
- 是@ResponseBody和@Controller的组合注解
@RequestParam和@RequestBody的区别
- 在GET请求中,不能使用@RequestBody
- 在POST请求,可以使用@RequestBody和@RequestParam,但是如果使用@RequestBody,对于参数转化的配置必须统一
get请求和post请求的区别和用法
- 他们本质上都是TCP连接,并没有区别,但是由于HTTP的规定和浏览器的限制,会在使用过程中有所不同:
- get请求把参数放在URL中,post请求通过request body传递参数
- get请求会产生一个TCP数据包,post会产生2个TCP数据包。即get请求是一次性将header和data发送给服务器并得到响应;post请求则是先发送header,服务器响应100 continue,客户端再发送data,服务器响应。
get请求和post请求,@RequestParam和@RequestBody都可以用吗?
- @RequestBody,顾名思义,要放在请求体中,只能用于post请求,需要在ajax中声明contentType:”application/json”,并且json中的key要和Java bean的属性一致。
- @RequestParam,get和post请求都可以
Redis是多线程还是单线程?为什么?不应该是多线程比单线程效率高吗?
- 单线程
- 避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
- 多线程是可以提高性能,但是具体到每个线程的话是严重降低了效率。Redis里的一些list、hash等复杂的结构,比如在很长的list后面加个元素,在hash中添加或删除一个对象,如果是多线程的情况下,可能需要加非常多的锁,导致同步的开销大大增加。
spring boot热部署?
- 添加依赖spring-boot-devtools
spring boot中你用到了什么?
- -
用过分布式吗?
- 无
websocket和http有什么不一样吗?
- WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。
- HTTP是单向的。
- WebSocket是需要浏览器和服务器握手进行建立连接的。
- 而http是浏览器发起向服务器的连接,服务器预先并不知道这个连接。
挥手有几次?为什么?
- 4次。确保数据能够完成传输
4次挥手过程:
1、先由客户端向服务器端发送一个FIN,请求关闭数据传输。
2、当服务器接收到客户端的FIN时,向客户端发送一个ACK,其中ack的值等于 FIN+SEQ
3、然后服务器向客户端发送一个FIN,告诉客户端应用程序关闭。
4、当客户端收到服务器端的FIN是,回复一个ACK给服务器端。其中ack的值等于FIN+SEQ
线程的创建有几种?
spring的属性注入方式有哪几种?
- 构造器注入
- setter注入
- 注解注入
注解注入有哪几种方式?
- @Component:可以用于注册所有bean
- @Repository:主要用于注册dao层的bean
- @Controller:主要用于注册控制层的bean
- @Service:主要用于注册服务层的bean
spring的AOP的原理?
- 动态代理
- 实现接口则默认用JDKProxy
- 不实现接口则使用cglib
mybatis和hibernate有什么区别?
- mybatis需要维护SQL和结果映射
mybatis的#和$有什么区别?
MySQL建立索引有什么原则?
- 对于查询频率高的字段创建索引
- 对排序、分组、联合查询频率高的字段创建索引
- 不宜创建过多索引
- 选择唯一索引
- 尽量选择字段数据量少的字段
我建了三个字段的索引,我只用了其中两个,索引是否有效?
-
- -
删除一张表(表数据)有哪些方式?他们有什么区别?
- delete from table_name
- truncate table table_name
- truncate删除后不记录在日志中,无法回滚
- truncate删除后自增ID会重置
- truncate相当于保留表结构,重新创建了一张表
- truncate之后,这张表所占用的空间会恢复到初始大小
- delete会记录在日志中,可以回滚
- delete不会减少占用的空间
- delete范围可以是整张表,也可以是某些数据,truncate只能是整张表
JVM的内存模型?
- 栈区:存放局部变量表、操作栈、动态链接、方法出口
- 堆:保存对象实例
- 程序计数器:字节码行号
- 方法区:存储类加载信息、常量、静态变量等
JVM栈溢出(StackOverflowError)的原因?
hashmap的底层结构?线程安全吗?为什么?有什么解决方案吗?
- jdk1.7及以前数组+链表;jdk1.8以后数组+链表(红黑树)
- 不安全,底层没有加锁;可以用concurrentMap代替,或者Collections.synchronizedMap()
读过哪些源码?
- -