java 面试的常用问题

ArrayList 和 LinkedList 的区别?

数据结构层面:ArrayList 是动态数组的数据结构,LinkedList是链表的数据结构

数据操作层面:

      对于随机访问get和set,ArrayList优于LinkedList

      对于新增和删除操作add和remove,LinedList比较占优势

HashMap 底层是数组+链表 ,是hash表

hashmap的hash冲突怎么解决?

再哈希法等

Redis数据类型?

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

string 类型的值最大能存储 512MB

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

Redis 的 Set 是 string 类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

Redis 穿透?雪崩?

kafka 相关

kafka 可以脱离zookeeper 单独存在吗?

不能, 因为zookeeper 是管理和 协调 kafka节点

kafka有几种保存策略?

按照过期时间保存,按照数据大小保存

线程池相关

ExecutorService 的参数相关?

springboot 相关

1、在用@Scheduled实现定时执行的时候,发现这个默认是单个运行的,同一时刻只会有一个任务执行。如果你写了多个方法任务,如果其中一个正在执行,则另一个任务会等待,直到另一个执行完!

如果要同时运行多个定时任务只需要在启动类加入

/**
     *
     *〈简述〉修复同一时间无法执行多个 定时任务问题
     *〈详细描述〉
     * @author 
     * @return
     */
@Bean
public TaskScheduler taskScheduler(){
   ThreadPoolTaskScheduler taskExecutor = new ThreadPoolTaskScheduler();
   taskExecutor.setPoolSize(50);
   return taskExecutor;
}

2、springboot 启动之前,怎样执行之前就进行一些数据初始化了?

mysql 相关

1、索引的类型

  旧版的MySQL的全文索引只能用在MyISAM表格的char、varchar和text的字段上。 

  不过新版的MySQL5.6.24上InnoDB引擎也加入了全文索引

(1)normal 普通索引

表示普通索引,大多数情况下都可以使用

(2)unique唯一索引

使用最多的索引类型

表示唯一的,不允许重复的索引,可设置为unique

唯一索引:加速查询 + 列值唯一(可以有null)

主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个

组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并

               注意: 组合索引有顺序可言,例如索引‘ABC’ 必须从左到右连续,才会全部生效,不然只有第一个A索引生效

(3)full Text 全文索引

    表示全文收索,在检索长文本的时候,效果最好,但是在检索的时候数据量比较大的时候,现将数据放入一个没有全局索引的表中,然后在用Create Index创建的Full Text索引,要比先为一张表建立Full Text然后在写入数据要快的很多,FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。为了解决WHERE name LIKE “%word%"这类针对文本的模糊查询效率较低的问题

(4)spatial 空间索引

   空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON。MYSQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间索引。创建空间索引的列,必须将其声明为NOT NULL,空间索引只能在存储引擎为MYISAM的表中创建

2.索引的方法

(1)BTREE(B树(可以是多叉树)) {主流使用}
(2)HASH(key,value) 这种方式对范围查询支持得不是很好

3、为什么主键索引比其他索引快?为什么索引快?

4、事务的隔离级别

   读未提交  :有脏读

   读已提交 : 不可重复读

   可重复读:

   串行化

5、事务的传播

(1)PROPAGATION_REQUIRED:如果有事务, 那么加入事务, 没有的话新建一个

@Transactional(propagation = Propagation.REQUIRED)(默认)
public void methodA() {
 methodB();
// do something
}
 
@Transactional(propagation = Propagation.REQUIRED)
public void methodB() {
    // do something
}

(2)PROPAGATION_SUPPORTS:如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行

@Transactional(propagation = Propagation.SUPPORTS)

(3)PROPAGATION_MANDATORY:

如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

 (4)PROPAGATION_REQUIRES_NEW

 需要使用 JtaTransactionManager作为事务管理器。 
它会开启一个新的事务。如果一个事务已经存在,则先将这个存在的事务挂起

(5)PROPAGATION_NOT_SUPPORTED 总是非事务地执行,并挂起任何存在的事务。

 (6)PROPAGATION_NEVER 总是非事务地执行,如果存在一个活动事务,则抛出异常。

(7)PROPAGATION_NESTED 如果一个活动的事务存在,则运行在一个嵌套的事务中。 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值