一些面试java

最近一直在找工作京东 阿里这些都去过好几次的,但是结果都是一样。所以,还是自己能力不行吧,虽然自己觉得答的不那么差。在这里做一个总结吧,我想随着我面试失败次数的增加,文章内容也会不断修改,大公司一般问的干货比较多,话不多说.

1. java自动装箱和拆箱

java将基本数据类型自动转成相对应的对象(int->Integer)叫自动装箱,反之(Integer->int)叫自动拆箱。因为装拆箱动作是JVM完成的,所以是自动。

		List<Integer> list =new ArrayList();
		list.add(1);//自动装箱称Integer
		int val = list.get(0);//自动拆箱
		Integer o =2;//自动装箱称Integer
		int o2 = o;//自动拆箱

其弊端是在循环过程中容易创建多个Integer对象

		Integer i;
		for(int j=0;j<100;j++){
			j+=1;
		}

2. HashMap ,HashTable,ConcurrentHashMap(这几个自己看去)

3. ArrayList 的Fail-Fast机制

Fail-Fast 快速失败的意思。主要是针对多线程情况下对ArrayList的一种错误检测机制。例如:正在迭代ArrayList,同时又在对ArrayList进行操作(add,remove),那么程序就会抛出ConcurrentModificationException。

List<String> l = new ArrayList();
		l.add("a");
		l.add("b");
		l.add("c");
		for(String str:l){
			System.out.println(str);
			l.add("d");
		}
解决办法:使用CopyOnWriteArrayList替代,原理:CopyOnWriteArrayList在进行iterator()的时候COWIterator会将ArrayList的数据进行备份。

4. 说一说Executor,Executors,ExescutorService,AbstractExecutorService,ThreadPoolExecutor

ThreadPoolExecutor继承AbstractExecutorService实现ExecutorService继承Executor

Executors用来创建ExescutorService实例

Executor声明void execute()方法。

ExecutorService基于Executor声明了其他方法Future submit()

AbstractExecutorService实现了submit()

ThreadPoolExecutor实现了execute()

5. 异步编程(Future)

同步编程

package com.zhuyang.redeem;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Test {

	public static void main(String[] args) throws Exception {
		long start = System.currentTimeMillis();
		Test t = new Test();
		List<Integer> count = new ArrayList();
		count.add(t.getNumber());
		count.add(t.getNumber());
		count.add(t.getNumber());
		count.add(t.getNumber());
		// 运行4次
		int total = 0;
		for (int i = 0; i < count.size(); i++) {
			total += count.get(i);
		}
		long end = System.currentTimeMillis();
		System.out.println("运算结束 耗时:" + (end - start) + "ms  totle:" + total);
		System.out.println("退出main线程!");
	}

	public int getNumber() throws Exception {
		Thread.sleep(1000);// 等一秒
		return new Random().nextInt(100);

	}
}

异步编程

package com.zhuyang.redeem;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;

public class Test {

	public static void main(String[] args) throws Exception {
		new Test().exec();
	}

	private void exec() throws InterruptedException, ExecutionException {
		long start = System.currentTimeMillis();
		List<FutureTask<Integer>> futureTasks = new ArrayList();
		ExecutorService executorService = Executors.newFixedThreadPool(10);
		Callable<Integer> worker = new Callable<Integer>() {
			public Integer call() throws Exception {
				Integer res = new Random().nextInt(100);
				Thread.sleep(1000);
				System.out.println("任务执行:获取到结果 :"+res);
				return  res;
			}
		};
		for (int i = 0; i < 4; i++) {
			// 创建一个异步任务
			FutureTask<Integer> futureTask = new FutureTask<Integer>(worker);
			futureTasks.add(futureTask);
			// 提交异步任务到线程池,让线程池管理任务 特爽把。
			// 由于是异步并行任务,所以这里并不会阻塞
			executorService.submit(futureTask);
		}
		int count = 0;
		for (FutureTask<Integer> futureTask : futureTasks) {
			// futureTask.get() 得到我们想要的结果
			// 该方法有一个重载get(long timeout, TimeUnit unit) 第一个参数为最大等待时间,第二个为时间的单位
			count += futureTask.get();
		}
		long end = System.currentTimeMillis();
		System.out.println("线程池的任务全部完成:结果为:" + count + ",main线程关闭,进行线程的清理");
		System.out.println("使用时间:" + (end - start) + "ms");
		// 清理线程池
		executorService.shutdown();
	}

}

6. Synchronized和ReentrantLock

都可以用于同步,都是重入锁(递归锁,在持有锁的情况下可继续获得自身的锁,不需要等待锁,否则容易造成死锁)。ReentrantLock使用更灵活,必须在finally调用unlock();

7. java CAS
8. volatile关键字
9. 序列化和反序列化
10. 对称加密和非对称加密
11. Dubbo的大概流程,注册需要哪些信息
12.zookeeper分布式环境选主
13. spring ioc
BeanFactory-->XMLReader-->BeanDefinition-->newInstance-->setProperty
14. Spring bean默认是单利还是多利
单利(我特么居然说是单利,傻逼)
15. 说一说单利怎么写
枚举类,双重检查
16. jvm GC算法
标记清除, 复制整理,标记整理,分代收集
17. JMM java内存模型
这个牵涉太多,想到哪儿说哪儿
18. mysql索引
算法B+树能迅速找到数据所在地址。最左匹配原则。
19 mysql常用引擎
InnoDB和MySam  InnoDB支持事务处理
20. Redis事务
CAS(乐观锁)。 watch multi exec.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值