一些面试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();
- java面试一些总结
- 一些java面试内容
- java一些面试问题
- 一些JAVA面试知识点
- 一些面试java
- 摘:一些面试 java
- java一些面试问题
- java面试的一些试题
- java 面试的一些总结
- java JEE 一些链接/面试
- java面试的一些问题
- Java面试的一些总结
- java面试一些常用的问题
- java面试中一些String常见问题
- 一些java笔试和面试的知识点
- java程面试中一些问题
- Java线程的一些面试知识
- java中一些小知识点(面试)
- 关于iOS textView文字长短限制
- Affinity Propagation (AP) 聚类
- 深度学习(五十二)变分贝叶斯自编码器(下)
- dubbo分布式项目开发____dubbo控制台管理
- iOS GPUImage研究序一:内置滤镜
- 一些面试java
- 文本框输入数字显示千位分隔符,大写提示
- HashMap HashTable和ConcurrentHashMap
- Android 带着Cookie访问一个网页
- MYSQL中GROUP BY进行数据统计
- sublime 配置python 环境
- 静态存储区、堆区和栈区
- Ubuntu怎样安装 OpenJDK 8 in Ubuntu 14.04 & 12.04 LTS
- CodeForces