Java面试篇二

1、mysql有哪些索引

  • 普通索引

  • 唯一索引

  • 主键索引

  • 组合索引

  • 全文索引

2、mysql索引底层为什么用b+树

  • 数据结构是非叶子节点+单项链表组成,b树没有采用单项链表会出现索引回查(回旋查找)的问题

3、redis的锁如果循环调用会不会出问题,如果在释放锁的时候出错了,如何保证锁成功释放?

4、linux如何将a服务器的文件复制到b服务器

  • 使用scp实现服务器A向服务器B传输文件

5、linux如何查看当前cpu进程

  • 使用top命令,它监视Linux上的进程,CPU和内存的使用情况

6、cpu到100%了如何定位问题

  • 找到最耗CPU的进程

  • 找到最耗CPU的线程

  • 查看堆栈,定位线程在干嘛,定位对应代码

7、mysql慢查询的优化方案

  • 首先可以检查有没有走索引,如果没有可以优化走索引

  • 如果走了索引,可以查看是不是走的最优索引

  • 如果已经是最优索引了,就可以去看查询的字段是不是都是必须的,如果查询了很多字段,在返回数据的时候,就会导致比较慢

  • 再接着查看表中的数据是不是比较多了,是不是已经到了要分库分表的时候了(比如字段比较多有几百万行了)

  • 最后可以看下硬件是不是该升级了

8、对象的回收是怎么回收的(普通对象,spring对象)

9、用到哪些设计模式

  • 单例模式

  • 工厂方法模式

  • 抽象工厂模式

  • 代理模式

  • 装饰者模式

  • 观察者模式

10、Mysql 查询成绩倒数五名,怎么查

  • SELECT * FROM `comment` ORDER BY `id` DESC LIMIT 5

11、学生表里面有5条重复数据 需要删除4条重复数据 怎么操作

  • 用distinct 联合去重

12、list里面的字符串想要统计出现的次数怎么操作?

13、线程池数量建立多少比较合适

  • 最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目

14、synchronized和lock的区别

  • synchronized是关键字,Lock是接口

  • synchronized是隐式的加锁,lock是显式的加锁

  • synchronized可以作用于方法上,lock只能作用于方法块

  • synchronized底层采用的是objectMonitor,lock采用的AQS

  • synchronized只支持非公平锁,lock支持非公平锁和公平锁

15、常见的限流算法

  • 漏桶算法

  • 令牌桶算法

  • 固定时间窗口

  • 滑动时间窗口

16、redis缓存雪崩 击穿 穿透

  • 缓存雪崩:大量请求访问redis,redis这个时候大量的key同时失效,请求直接打到数据库去了,这就是缓存雪崩

  • 缓存击穿:请求访问redis,redis不存在,然后又访问数据库,数据库也不存在,就导致两次无用查询,这就是缓存击穿

  • 缓存穿透:大量请求访问同一个key,然后这个key刚好失效,大量请求就打到数据库去了,这就是缓存穿透

17、项目中除了用来当锁,redis还有什么别的作用

  • 用作缓存热点数据,降低数据库的压力

18、redis如何保证和数据库数据一致性

  • 双删

19、如果想让hashmap线程安全的话怎么办?

  • 使用HashTable代替HashMap

  • 使用ConcurrentHashMap

20、concurrenthashmap为什么是线程安全的 底层用的是什么锁方式?

  • 在1.7的时候,ConcurrentHashMap它基本上延续了HashMap的设计,采用数组加链表的形式,和HashMap不同的是ConcurrentHashMap中的数组设计分是大数组Segment和小数组HashEntry,大数组Segment就像数据库,HashEntry就像数据库中的表,存储着数据。因为Segement本身是基于ReentrantLock锁操作,这样就能保证多个线程同时访问Concurrent HashMap时,同一时间只能有一个线程能够操作相应的节点,就样就保证了ConcurrentHashMap的线程安全

  • 在1.7的时候,ConcurrentHashMap虽然是线程安全的,但因为底层是数组加链表的形式,在大多情况下,因为要遍历整个链表,会降低访问性能。所有在1.8后就采用了数+链表+红黑树的方式优化了ConcurrentHashMap的实现。在1.8ConcurrentHashMap的源码中,是使用的CAS+Volatile或者synchronized的方式保证线程安全

21、接口慢的话怎么优化?

  • 接口慢可能是因为数据库慢查询,可能未加索引,索引失效,join过多,in的值太多等等

  • 也有可能是业务逻辑太复杂

  • 锁设计不合理

  • 问题解决:优化数据库的查询等

22、如何检测死锁

  • Jstack命令

  • JConsole工具

23、如果线程池的队列满了,还往里面加线程,能加得进去吗?

  • 要么释放闲置的线程 要么加大线程池的深度 如果都无法做到 保证程序不会溢出的情况下 提示用户线程满了

24、了解semaphore吗

  • 举一个例子:就比如有一个停车场一共有五个车位,那么最多就只能停五辆车,只有停车场有位置的时候,车才能停进来。semaphore(信号量)可以用作限流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值