BAT面试题

1,多线程顺序执行

**join()和newSingleThreadExecutor()**
 public static void main(String[] args) {
//        try {
//            thread1.start();
//            //main线程必须等待join线程执行完毕
//            thread1.join();
//            thread2.start();
//            //main线程必须等待join线程执行完毕
//            thread2.join();
//            thread3.start();
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }

        //创建只有一个线程的线程池,底层是无界阻塞队列: LinkedBlockingQueue
        ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.submit(thread1);
        executor.submit(thread2);
        executor.submit(thread3);
        executor.shutdown();
    }

2,synchronize的同步原理

在这里插入图片描述

synchronized锁什么时候释放?

  1. 获取锁的线程执行完毕,会释放锁
  2. 线程执行出现异常会释放锁

synchronized和lock的区别?

  1. Lock可以主动去释放锁, synchronized是被动的释放锁;
  2. Lock实现了比较丰富的锁,包含ReentrantLock,ReadLock,WriteLock 锁等;
  3. Lock是一个接口,由java语言实现;synchronized是一个关键词,是内置c语言实现
  4. 竞争资源比较激烈的情况,Lock锁性能要强

3,Mysql中的 binlog

binlog是一个二进制的日志文件,记录MySQL的数据更新或者潜在更新(删除一条不存在的数据)。
主从复制就是依靠binlog。
在这里插入图片描述
binlog日志格式有3种:

  1. statement(默认): 基于SQL语句 insert
  2. row 基于行模式,update table set value = x ; 10000条,记录10000条变更的数据
  3. mixed : 根据SQL语句进行判断,选择第一种还是第二种

4,cookie和session的联系和区别

分布式可以使用Redis存放,
在这里插入图片描述

5,消息的选型:rabbitMQ,activeMQ,Kafka,rocketMQ

  1. 从社区活跃度:rabbitMQ活跃度最高;
  2. 持久化消息比较:ActiveMq 和RabbitMq 都支持;
  3. 综合技术比较:包含可靠性,灵活的路由,集群,事务,高可用的队列,消息排序,问题追踪,可视化管理工具,插件系统等等。rabbitmq和kafka最好;
  4. 高并发:rabbitMQ最好,底层实现语言erlang天生具备高并发高可用特性;
  5. 关注点比较:rabbitmq比kafka成熟,在可用性,稳定性,可靠性上rabbitmq胜于kafka;
  6. kafka比较适合大数据的场景,同时kafka定位主要在日志等方面,因为kafka设计的初衷就是处理日志。
    在这里插入图片描述
    参考链接:消息的选型

6,Redis集群和分布式寻址算法

节点之间的通信机制:集中式和gossip协议。
分布式寻址算法:

  1. hash算法(缺点:增加和减少节点时缓存命中率下降,导致大量缓存重建)
  2. 一致性hash算法(自动缓存迁移)+ 虚拟节点(自动负载均衡)
  3. Redis cluster 的hash slot 算法

判断节点宕机:ping了之后,指定超时时间内没有返回pong,认为pfail; ping给其他节点,如果超过半数节点都认为pfail了,那么就会变成fail。
参考链接:Redis集群模式和分布式寻址

7、HashMap和TreeMap的区别
HashMap基于哈希表,无序;TreeMap基于红黑树,常用于排序
参考链接:HashMap和TreeMap的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值