记一次阿里面试
来源:互联网 发布:fft算法 c语言 编辑:程序博客网 时间:2024/05/18 22:55
过了电面,但是现场面试时遇到一个"变态"面试官,挂了。当然也确实是自己实力还不够,他问了很多数据库事务的问题,问我有没有研究过某个rpc框架的源码。最后是一道多线程编程题,我太紧张没有想出来。回家之后静下心来想,其实也不难。。
问题:实现一个计税接口ITaxService方法 List<TaxRateResultDTO> taxService(List<TaxFundDTO> list); list参数中的元素最大有99个。
这个接口方法内部需要调用TaxResultDTO quoteTax(TaxPaymentDTO p); 该方法的rt是50ms。
DTO转换有两个工具方法:
TaxPaymentDTO convert(TaxFundDTO f);
TaxRateResultDTO convert(TaxResultDTO r);
接口实现的rt不得超过3s。
回家之后,想到一个简陋的方案如下:
public class TaxService { ExecutorService executorService = Executors.newFixedThreadPool(2); public List<TaxRateResultDTO> taxService(List<TaxFundRateDTO> list) { List<TaxRateResultDTO> result = new ArrayList<TaxRateResultDTO>(); List<Future<TaxRateResultDTO>> futures = new ArrayList<Future<TaxRateResultDTO>>(); for(TaxFundRateDTO taxFundRateDTO : list) { futures.add(executorService.submit(new Task(taxFundRateDTO))); } for(Future<TaxRateResultDTO> future : futures) { try { result.add(future.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } executorService.shutdown(); return result; } class Task implements Callable<TaxRateResultDTO> { private TaxFundRateDTO taxFundRateDTO; public Task(TaxFundRateDTO taxFundRateDTO) { this.taxFundRateDTO = taxFundRateDTO; } @Override public TaxRateResultDTO call() { return convert(quoteTax(convert(taxFundRateDTO))); } } private TaxResultDTO quoteTax(TaxPaymentDTO taxPaymentDTO) { try { Thread.sleep(50L); } catch (InterruptedException e) { e.printStackTrace(); } return new TaxResultDTO(); } private TaxPaymentDTO convert(TaxFundRateDTO taxFundRateDTO) { return new TaxPaymentDTO(); } private TaxRateResultDTO convert(TaxResultDTO taxResultDTO) { return new TaxRateResultDTO(); } public static void main(String[] args) { List<TaxFundRateDTO> list = new ArrayList<TaxFundRateDTO>(); for(int i = 0; i < 99; i++) { list.add(new TaxFundRateDTO()); } long start = System.currentTimeMillis(); List<TaxRateResultDTO> i = new TaxService().taxService(list); System.out.println((System.currentTimeMillis() - start) / 1000.0); }}
只需要两个线程,rt就可以低于3s;但是当我把线程数量改成1的时候,rt就超过5s了。这道题把rt设定为3s,掐的很准:D)
阅读全文
0 0
- 记一次阿里面试
- 记一次阿里实习生电话面试
- 记一次阿里电话面试(java技术岗)
- 记一次阿里C/C++研发岗电话面试
- 记一次阿里复试
- Java Web架构知识整理——记一次阿里面试经历
- Java Web架构知识整理——记一次阿里面试经历
- Java Web架构知识整理——记一次阿里面试经历
- Java Web架构知识整理——记一次阿里面试经历
- Java Web架构知识整理——记一次阿里面试经历
- Java Web架构知识整理——记一次阿里面试经历
- Java Web架构知识整理——记一次阿里面试经历
- Java Web架构知识整理——记一次阿里面试经历
- 【面试总结】记一次面试
- 记一次阿里电面
- 记阿里实习面试
- 记第一次阿里面试
- 记一次非正式面试
- 2.9 linux存储管理-页面的换入
- DX9鼠标拾取网格轨迹
- Java用socket实现简单的一对一通信
- 浅谈可重入函数与不可重入函数
- 一个高效、稳定、强大的Android刷新库
- 记一次阿里面试
- 关于选择脚本的问题
- 生成函数 应用
- Java Colections 集合类 —— List、ArrayList、Set(HashSet)
- leetcode 417. Pacific Atlantic Water Flow
- 通知与协议代理的区别
- 用PLSQL给自己发一份邮件
- Big Data (2)
- Java中String,StringBuffer都是final类