面试题(高级)


java 线程池的实现原理,threadpoolexecutor关键参数解释

hashmap的原理,容量为什么是2的幂次

为什么要同时重写hashcode和equals

ConcurrentHashMap如何实现线程安全?

介绍Java多线程的5大状态,以及状态图流转过程

介绍下Synchronized、Volatile、CAS、AQS,以及各自的使用场景

B+树和红黑树时间复杂度

如果频繁老年代回收怎么分析解决

JVM内存模型,新生代和老年的回收机制

mysql limit分页如何保证可靠性

java nio,bio,aio,操作系统底层nio实现原理

Spring IOC,autowired如何实现

Spring事务传播机制

线程死锁排查

MySQL引擎及区别,项目用的哪个,为什么

RPC为什么用http做通信?

RPC两端如何进行负载均衡?

mycat分库分表、读写分离的实现

分布式数据如何保证数据一致性

高并发请求处理,流量削峰措施有哪些
谈谈你参与过的最有挑战的技术项目

Redis持久化RDB和AOF 的区别

MQ底层实现原理

详细介绍下分布式 一致性Hash算法

nginx负载均衡的算法

Nginx 的 upstream目前支持 哪4 种方式的分配

分布式集群部署后,从应用端哪些需要怎么调整

Dubbo默认使用什么注册中心,还有别的选择吗?

mongoDB、redis和memcached的应用场景,各自优势

谈谈你性能优化的实践案例,优化思路?
两千万用户并发抢购,你怎么来设计?

1. Dubbo和SpringCloud的RPC区别
(1)服务的调用方式:Dubbo使用的是RPC远程调用,而SpringCloud使用的是 Rest API
RPC最主要的缺陷就是服务提供方和调用方式之间依赖太强,我们需要为每一个微服务进行接口的定义,并通过持续继承发布,需要严格的版本控制才不会出现服务提供和调用之间因为版本不同而产生的冲突
而REST是轻量级的接口,服务的提供和调用不存在代码之间的耦合,只是通过一个约定进行规范,但也有可能出现文档和接口不一致而导致的服务集成问题,但可以通过swagger工具整合,是代码和文档一体化解决,所以REST在分布式环境下比RPC更加灵活
(2)服务的注册中心:Dubbo使用第三方ZooKeeper作为其底层的注册中心,实现服务的注册和发现,SpringCloud使用Eureka实现注册中心,当然SpringCloud也可以使用ZooKeeper实现,
2. RabbitMQ使用场景
(1)客户 对 平台下单,平台 对 第三方下单,平台对第三方下单是将消息加入到队列中进行消费,对三方下单完成后,会返回追踪号和派送贴,将他们和下单结果保存到数据库中
(2)Excel表导出
3. Ridis使用场景
hibernate缓存,数据的缓存,
4. HashMap 扩容规律
当前数据存储的数量(即size())大小必须大于等于阈值时,扩大一倍;默认大小为16,负载因子0.75,阈值12
5. CAS机制
6. 分库分表
 
 
多线程面试:
1. dd
public class Test {
    private static volatile Boolean b = true;
    public static void main(String[] args) throws InterruptedException {
        new Thread() {
            @Override
            public void run() {
                for(;;) {
                    if(b == !b) {
                        System.out.println("----------b:"+b);
                        System.exit(0);
                    }else {
                        System.out.println("=");
                    }
                }
            }
        }.start();
        Thread.sleep(100);
        new Thread() {
            public void run() {
                for(;;) {
                    b = !b;
                    System.out.println("bb:"+b);
                }
            };
        }.start();
    }
}
View Code

题目:程序的运行结果?a. 死循环 b.停止

输出结果:若干个(数量不定)"="后,程序exit停止

关键为b == !b,这一步程序为4步:

1. 获取b;2.获取第二个b;3.对第二个b进行取反;4. 计算第一个b和取反后的b

在第一步和第二步之间,b的值有可能会改变,结果就有可能成为 true==!false,所有这个看运气若干轮后会停止。

原文地址:https://www.cnblogs.com/yifanSJ/p/9129192.html