面试问题记录(二)

数据库的隔离级别
什么情况下会出现重复读
脏读?
  • 脏读是指在一个事务处理过程中读取了另一个未提交的事务的数据。
  • 当一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得到的数据不一致
幻读?
  • 幻读的重点在于插入与删除,即第二次查询会发现比第一次查询数据变少或者变多了
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)的原因?
  • 是否有递归
  • 是否有大量的循环或死循环
  • 全局变量是否过多
  • Array、List、map数据是否过大
  • 看这里
  • 可以while(true){某个方法}试一下
hashmap的底层结构?线程安全吗?为什么?有什么解决方案吗?
  • jdk1.7及以前数组+链表;jdk1.8以后数组+链表(红黑树)
  • 不安全,底层没有加锁;可以用concurrentMap代替,或者Collections.synchronizedMap()
读过哪些源码?
  • -
Linux命令会用吗?
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值