当前位置: 首页 > news >正文

商城网站建设大连flash个人网站源码

商城网站建设大连,flash个人网站源码,wordpress 上传附件按钮美化,余姚做网站设计的实战场景 这是广州某500-900人互联网厂的面试原题 手写并发优化解决思路 我们要调用对方的RPC接口#xff0c;我们的RPC接口每调用一次对方都会阻塞50ms 但是我们的业务要批量调用RPC#xff0c;例如我们要批量调用1k次#xff0c;我们不可能在for循环里面写1k次远程调用…实战场景 这是广州某500-900人互联网厂的面试原题 手写并发优化解决思路 我们要调用对方的RPC接口我们的RPC接口每调用一次对方都会阻塞50ms 但是我们的业务要批量调用RPC例如我们要批量调用1k次我们不可能在for循环里面写1k次远程调用因为我们1次就会阻塞50ms我们for循环弄1k次那么就要等待1k×50ms 我们还要保证返回的结果是按照我们的请求顺序的 场景介绍我们这边是C端的我们不可能修改对方的代码所以我们只能尽可能优化我们自己的代码提高接口效率 解决思路 1.通过Hash算法来分批运算最后把结果存到mapInteger,String里面然后来取因为我们的顺序由id从低到高所以我们可以通过id在map里面根据顺序取出然后放到我们的List里面 2.我们for循环然后每一次循环都开启一个异步线程将结果存到Map里面然后我们最终存到List。但我一开始有个问题就是我没等全部执行完就存到我们的Map里面了因为我不会写那个全局等待的代码......破防了 我最终的解决思路是2 package com.kira.scaffoldmvc.appender;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; import java.util.stream.IntStream;public class RpcBatchRequestTest {static RpcService rpcService new RpcService();public static void main(String[] args) throws ExecutionException, InterruptedException {// rpc 请求参数ListInteger requestIds IntStream.range(0, 1000).boxed().collect(Collectors.toList());// rpc 调用ListString results batchGetDetails(requestIds);// 输出for (String result : results) {System.out.println(result);}// 预期输出// details 0// details 1// details 2// .......// details 999}/*** 某个 rpc service 的接口只提供单个调用* 此处需要做一个封装多次请求后返回** 要求按照顺序返回** param ids* return*/public static ListString batchGetDetails(ListInteger ids) throws ExecutionException, InterruptedException { // 单次调用 // RpcService rpcService new RpcService(); // String rpcResult rpcService.rpcGetDetailsById(1);ListString listnew ArrayList();HashMapInteger,String mapnew HashMap();ListCompletableFutureVoid futures new ArrayList();//for循环里面的每一个都开启一个forfor(int i0;iids.size();i){int finalI i;CompletableFuture futureCompletableFuture.supplyAsync(() - {String s rpcService.rpcGetDetailsById(ids.get(finalI));map.put(finalI, s);return s;}); futures.add(future);}//futures.toArray(new CompletableFuture[0])) 将future数组转成CompletableFuture数组//如果你传入 new CompletableFuture[0]Java 会动态调整数组大小以适应 futures 中的元素数//addOf()等待所有Completable异步线程都执行完CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();// TODO 在此处实现批量调用for(int i0;iids.size();i){list.add(map.get(i));}return list;} }class RpcService {public String rpcGetDetailsById(int id) {// 模拟 rpc service 耗时try {Thread.sleep(50L);} catch (InterruptedException e) {throw new RuntimeException(e);}return details id;} } 分批推送的解决思路 每批为500份 package com.kira.scaffoldmvc.appender;import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; import java.util.stream.IntStream;public class RpcBatchRequestTest2 {static RpcService rpcService new RpcService();public static void main(String[] args) throws ExecutionException, InterruptedException {// rpc 请求参数ListInteger requestIds IntStream.range(0, 1000).boxed().collect(Collectors.toList());// rpc 调用ListString results batchGetDetails(requestIds);// 输出for (String result : results) {System.out.println(result);}}/*** 按批次异步调用 RPC 接口并确保按顺序返回** param ids 请求 ID 列表* return 按顺序返回的结果列表*/public static ListString batchGetDetails(ListInteger ids) throws ExecutionException, InterruptedException {int batchSize 500; // 每批大小ListCompletableFutureListString batchFutures new ArrayList();// 按批次切分数据for (int i 0; i ids.size(); i batchSize) {int start i;int end Math.min(i batchSize, ids.size());ListInteger batch ids.subList(start, end);// 异步处理每个批次CompletableFutureListString batchFuture CompletableFuture.supplyAsync(() - batch.stream().map(rpcService::rpcGetDetailsById) // 调用 RPC 方法.collect(Collectors.toList()));batchFutures.add(batchFuture);}// 等待所有批次完成并收集结果ListString results new ArrayList();CompletableFuture.allOf(batchFutures.toArray(new CompletableFuture[0])).join();for (CompletableFutureListString future : batchFutures) {results.addAll(future.get());}return results;} }class RpcService2 {public String rpcGetDetailsById(int id) {// 模拟 rpc service 耗时try {Thread.sleep(50L);} catch (InterruptedException e) {throw new RuntimeException(e);}return details id;} }
http://www.hkea.cn/news/14579554/

相关文章:

  • 建设银行儿童网站广州市医院网站建设哪家好
  • asp 网站 模板网页设计视频网站
  • 网站开发报告多少页合适青岛专用网站制作
  • 免费直播网站网站制作 代码编辑
  • 广州app设计公司北京seo网络优化师
  • 网站的关键词策略广州做网站建设的公司
  • 中国建设银行卖狗年纪念币官方网站国际域名注册查询
  • Vs做的网站调试时如何适应网页个人可以做公益网站吗
  • 网站流量分析方法宣传片拍摄合同模板
  • 网站建设思维做网站太麻烦了
  • 凉山州城乡规划建设局网站门户地方网站 策略
  • 做某个网站接口违法做的比较好的猎头网站
  • 霸州网站优化杭州装饰网站建设方案
  • 网站logo的作用网络推广代理怎么做
  • php wordpress 开源网站seo如何做
  • 软件前端开发需要学什么没有网站可以做seo吗
  • 网站备案是什么一回事青岛宣传片制作公司
  • 展示产品的网站东莞网站seo公司
  • 莘县网站制作wordpress上传sh文件夹
  • 门户网站建设汇报材料学校网站建设联系电话
  • wordpress一键还原seo服务运用什么技术
  • 厦门网站开发公司找哪家一个公司网站备案
  • 营销网站建设哪家快典当行网站策划
  • 自己怎样开网站个人网站建设图片素材
  • h5平台网站开发网站建设策划案
  • 互联网seo是什么意思企业网站优化费用
  • 沈阳设计网站公司哪家好网站编辑的岗位职责
  • 中文html网站模板下载做鞋子有什么好网站
  • asp.net网站开发菜鸟wordpress照片小工具
  • 夫妻网络网站建设设计师兼职平台