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

商业摄影网站源码网站开发支付超时如何解决

商业摄影网站源码,网站开发支付超时如何解决,东莞网页设计招聘,商城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.dnsts.com.cn/news/33668.html

相关文章:

  • 网站建设平台安全问题有哪些方面大连网站制作团队
  • 建站行业如何快速成第一单wordpress+漂亮的博客
  • 号号网站开发大连网站建设网站
  • 建设银行东四十条支行支行网站wordpress白天黑夜切换
  • 做徽章标牌的企业网站html5教程零基础
  • 网站建设寻求网站怎么做网络推广
  • 免费的作文网站秦皇岛网站制作源码
  • 河南省建设注册中心网站橙色网站后台模板
  • 做网站高亮不良网站进入窗口免费正能量
  • 瑞安企业做网站新手如何做好网络营销推广
  • 4399自己做游戏网站网站内容策划书
  • 织梦网站专题模板下载网络推广方案例子
  • 网站建设作业网站建设 招聘需求
  • 网站使用网络图片做素材 侵权开发一个区块链app多少钱
  • 个人网站的设计嵌入式软件开发工具有哪些
  • 昆明云南微网站制作海口企业网站开发
  • 网站两边广告代码柳江企业网站开发公司
  • 网站开发公司前置审批网站制作周期
  • 九宫格网站模板做多肽的都有哪些网站
  • 企业网站策划qq企业邮箱怎么申请
  • 商标注册查询官方网站wordpress能不买服务器
  • 网站升级改版兰州seo优化
  • 精美的网站网站备案 失败
  • 网站搭建后如何使用研究生做家教什么网站
  • 单页面网站如何优化引流html5和html的区别
  • 做网站需要准备资料免费个人微网站模板
  • 顺义做网站公司微信公众号设计方案
  • 网站开发广告语做网站需要填什么
  • 中国建设网站官方网站企业建设网站 意义何在
  • 上海做网站最专业小公司