一堆

消息队列

activemq

java基础

  1. Java的类加载是否一定遵循双亲委托模型?

    在实际开发中,我们可以通过自定义ClassLoader,并重写父类的loadClass方法,来打破这一机制

2.序列化

数据结构

  1. arraylist 一直边放数据一边取数据会怎么样

  2. list 扩容 默认10 1.5倍扩容

    map 默认16 2倍扩容 负载因子(阈值超这个扩容)

    concurrentHashMap 定位segement

    默认情况下segmentShift为28,segmentMask为15,再哈希后的数最大是32位二进制数据,向右无符号移动28位,意思是让高4位参与到hash运算中, (hash >>> segmentShift) & segmentMask的运算结果分别是4,15,7和8,可以看到hash值没有发生冲突。

线程

  1. synchronized https://www.jianshu.com/p/d53bf830fa09

  2. lock

  3. volatile

  4. Java中如何停止一个线程?

    Java提供了很丰富的API但没有为停止线程提供API。JDK 1.0本来有一些像stop(), suspend() 和 resume()的控制方法但是由于潜在的死锁威胁因此在后续的JDK版本中他们被弃用了,之后Java API的设计者就没有提供一个兼容且线程安全的方法来停止一个线程。当run() 或者 call() 方法执行完的时候线程会自动结束,如果要手动结束一个线程,你可以用volatile 布尔变量来退出run()方法的循环或者是取消任务来中断线程。

    -线程间共享数据?

  5. 为什么wait, notify 和 notifyAll这些方法不在thread类里面?

    一个很明显的原因是JAVA提供的锁是对象级的而不是线程级的,每个对象都有锁,通过线程获得。如果线程需要等待某些锁那么调用对象中的wait()方法就有意义了。如果wait()方法定义在Thread类中,线程正在等待的是哪个锁就不明显了。简单的说,由于wait,notify和notifyAll都是锁级别的操作,所以把他们定义在Object类中因为锁属于对象

      final Segment segmentFor(int hash) {
           return segments[(hash >>> segmentShift) & segmentMask];
       }
  1. a b c 顺序执行
public class SignTest implements Runnable{

    private String name;
    private Object prev;
    private Object self;

    private SignTest(String name, Object prev, Object self) {
        this.name = name;
        this.prev = prev;
        this.self = self;
    }

    public static void main(String[] args) {

        Object a = new Object();
        Object b = new Object();
        Object c = new Object();
        SignTest pa = new SignTest("A", c, a);
        SignTest pb = new SignTest("B", a, b);
        SignTest pc = new SignTest("C", b, c);


        new Thread(pa).start();
        try {
            Thread.sleep(100);  //确保按顺序A、B、C执行
            new Thread(pb).start();
            Thread.sleep(100);
            new Thread(pc).start();
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

    @Override
    public void run() {
        int count = 10;
        while (count > 0) {
            synchronized (prev) {
                synchronized (self) {
                    System.out.print(name);
                    count--;

                    self.notify();
                }
                try {
                    prev.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

        }

    }

数据库

  1. 表里有很多数据怎么取出其中10条

  2. explain https://www.cnblogs.com/yycc/p/7338894.html

  3. 主键生成策略

  4. mysql https://blog.csdn.net/qq_32483145/article/details/80191323

  5. SHOW PROCESSLIST显示哪些线程正在运行。show processlist;只列出前100条,如果想全列出请使用show full processlist;

  6. show OPEN TABLES where In_use > 0;

  7. 什么是死锁?
    死锁: 是指两个或两个以上的进程在执行过程中。因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等竺的进程称为死锁进程。
    表级锁不会产生死锁.所以解决死锁主要还是针对于最常用的InnoDB。
    死锁的关键在于:两个(或以上)的Session加锁的顺序不一致。
    那么对应的解决死锁问题的关键就是:让不同的session加锁有次序。
    死锁的解决办法?
    1.查出的线程杀死 kill
    SELECT trx_MySQL_thread_id FROM information_schema.INNODB_TRX;
    2.设置锁的超时时间
    Innodb 行锁的等待时间,单位秒。可在会话级别设置,RDS 实例该参数的默认值为 50(秒)。
    生产环境不推荐使用过大的 innodb_lock_wait_timeout参数值
    该参数支持在会话级别修改,方便应用在会话级别单独设置某些特殊操作的行锁等待超时时间,如下:
    set innodb_lock_wait_timeout=1000; —设置当前会话 Innodb 行锁等待超时时间,单位秒。

缓存

redis https://www.cnblogs.com/linianhui/p/what-problem-does-redis-solve.html

容器

tomcat调优

框架相关

  1. spring boot负载策略 https://www.baidu.com/link?url=goATHgdXFocrFYoYOfY02qWwlxoU_sfp2DZw8aCpaTE7MfbtGej7Nz6jvSw5i6xYzMJJw_F-bItCr3w3rR2qMofPyLt0OQsRB1J320y92xi&wd=&eqid=c21003a2001b2c2e000000025d2b4e6c

  2. ribbon和feign区别

    1.启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients
    
    2.服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明
    
    3.调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐
    
     Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可
    
     不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致
    

其他

分布式数据一致性

分布式事务 tx-lcn

高并发高可用

jvm&调优

幂等
rest 接口设计规范

你可能感兴趣的:(一堆)