java常见面试题及部分答案

时间:2024-10-25 21:04:38

1.Redis常见的存储数据类型

list(列表类型) set(集合类型) zset(有序集合类型) string(字符串类型) hash(散装类型)

2.log4j的级别

debug:日志的最低级别,一般一些操作,代码,异常,错误等都会输出,

info:info输出的日志是可以最终给用户看到的,用户可以看懂的日志。

error:输出错误,错误的问题比异常要大,但是错误和异常并不一样。

warn:记录系统做出的警告,输出日志。

fatal:fatal输出的是一些比较严重的错误。

3.事务的传播行为和隔离级别

传播行为:一般我们在做项目的时候,都会把事务设置在service层,当我们调用service的一个方法的时候对数据库进行更新操作,事务的传播行为可以保证事务的一致性和原子性,要么都成功要么都失败。

可以在spring的配置文件中设置事务如:propagation_required。

propagation_required:如果当前存在事务就加入到当前事务中,如果不存在就创建一个事务。(最常用)

propagation_supports:如果当前存在事务,则加入该事务,如果不存在就以非事务的方式执行。

propagation_requires_new:不管当前是否存在事务,都会新建一个事务。

propagation_not_supports:以非事务的方式执行,如果当前存在事务则挂起该事务。

等等,总共有七个选项。

隔离级别:

读未提交

读已提交

可重复读

可串行化

4.$和#的区别

#比较安全  可以防止sql注入  在预编译阶段#{}中的内容将会用一个占位符'?'代替,在进入DBMS(数据库管理)的时候才会解析。

$安全性低  不可以方式sql注入    在预编译阶段${}中的内容就是动态添加的内容。

5.分布式 框架的锁

6.手写单例(多线程模式下的单例)

7.count(1)和count(*)的区别

分情况讨论:

如果你的表没有主键count(1)比count(*)速度快,

如果有主键列count(1)也是比count(*)快的,

如果表只有一列那count(*)是比较快的,

count(1)是列扫描,count(*)是全局扫描。

8.spring boot和spring的区别

9.sorl在项目中哪里使用了

10.Redis的使用场景

分布式锁与单线程机制

排行榜

最新列表

位操作

队列

计数器

缓存——热数据

11.Linux的常用命令 杀死进程