一些面试java

来源:互联网 发布:python替换中文字符串 编辑:程序博客网 时间:2024/06/05 10:55

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

1. java自动装箱和拆箱

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

List<Integer> list =new ArrayList();list.add(1);//自动装箱称Integerint val = list.get(0);//自动拆箱Integer o =2;//自动装箱称Integerint 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.
 

0 0
原创粉丝点击