2019-08-22 java 面试总结

 

1.并发包下的集合

JUC

CopyOnWriteArrayList:

CopyOnWriteArrayList顾名思义就是在写操作之前先复制一份,这样读操作不用加锁,写操作在复制的集合上修改,然后将新集合赋值给旧的引用,并通过volatile 保证其可见性,当然写操作的锁是必不可少的了。

       正式因为这种利用空间换时间的思想,CopyOnWriteArrayList需要注意内存占用问题,比较好的实践是,尽量在添加的时候做批量添加。

ConcurrentHashMap:

      (1)它在并没有在读操作上加锁,只是在写操作上进行了加锁——volatile应用和happen-before原则。

      (2)分段加锁:ConcurrentHashMap把自己分成多个段(segment),每个段其实是一个小HashTable,如果多个线程访问的段不同,那么就可以进行并发操作,其实主要思想就是加锁的粒度更小了而已。

      (3)对于需要对整个集合加锁的方法,比如size(),它会按顺序加锁,操作完毕后,再按加锁顺序释放锁。
 

2.Java锁
     sync 异常会不会释放:会释放https://huxian99.github.io/2017/06/10/cj3qymo4j000wowxkgart4ujm/

synchronized关键字经过编译后,会在同步块的前后分别形成monitorenter和monitorexit两个字节码指令,每条monitorenter指令都必须执行其对应的monitorexit指令,为了保证方法异常完成时这两条指令依然能正确执行,编译器会自动产生一个异常处理器,其目的就是用来执行monitorexit指令(图中14-18、24-30为异常流程)

3.双亲委派机制

这种设计有个好处是,如果有人想替换系统级别的类:String.java。篡改它的实现,但是在这种机制下这些系统的类已经被Bootstrap classLoader加载过了,所以并不会再去加载,从一定程度上防止了危险代码的植入。
4.dubbo 容器注册 zk
5.mq 失败重发 反馈

赢时胜 金融

1.order 大数据量处理
2.thread 线程中断 几种new的方式

  1. 使用stop方法强制使线程退出,但是该方法不太安全所以已经被废弃

  2. 设置标记位,可以使线程正常退出

  3. 使用Thread类中的一个interrupt()可以中断线程

通过Callable和Future创建线程

package com.thread;
 
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
 
public class CallableThreadTest implements Callable<Integer>
{
 
	public static void main(String[] args)
	{
		CallableThreadTest ctt = new CallableThreadTest();
		FutureTask<Integer> ft = new FutureTask<>(ctt);
		for(int i = 0;i < 100;i++)
		{
			System.out.println(Thread.currentThread().getName()+" 的循环变量i的值"+i);
			if(i==20)
			{
				new Thread(ft,"有返回值的线程").start();
			}
		}
		try
		{
			System.out.println("子线程的返回值:"+ft.get());
		} catch (InterruptedException e)
		{
			e.printStackTrace();
		} catch (ExecutionException e)
		{
			e.printStackTrace();
		}
 
	}
 
	@Override
	public Integer call() throws Exception
	{
		int i = 0;
		for(;i<100;i++)
		{
			System.out.println(Thread.currentThread().getName()+" "+i);
		}
		return i;
	}
 
}

3.mybatis 原理及一二级缓存
4.sql 优化 及不走索引情况 or


软通:
1.分布式锁
2.mybatis 缓存
3.多线程的使用 count downlantch 多个
4.Springboot注解
5.autoware resource 比较
6.线程池
7.mysql 索引 及向左匹配原理
8.jvm  收集器 g1
9.Springboot encance
10.java 类加载原理
11.Java 类加载器 多个    extend类加载器

12 redis 跳表

 

 

Semaphore 信号量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值