1.服务整体流程图

消费者通过代理对象(proxy查看:)对远程服务发起调用,经过一编码发送给服务端,服务端通过解码发送到dispatcher分发到线程池中,最后线程池调用具体的服务

2.服务调用

源码地址+注释,dubbo版本是2.6.x版本:https://github.com/adward-liu/dubbo/tree/2.6.x-liu

 

package com.alibaba.dubbo.common.bytecode;import com.alibaba.dubbo.common.bytecode.ClassGenerator;
import com.alibaba.dubbo.demo.DemoService;
import com.alibaba.dubbo.rpc.service.EchoService;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;public class proxy0
implements ClassGenerator.DC,
EchoService,
DemoService {public static Method[] methods;private InvocationHandler handler;public String sayHello(String string) {Object[] arrobject = new Object[]{string};//InvocationHandler 反射调用 arrobject 参数集合Object object = this.handler.invoke(this, methods[0], arrobject);return (String)object;}public Object $echo(Object object) {Object[] arrobject = new Object[]{object};Object object2 = this.handler.invoke(this, methods[1], arrobject);return object2;}public proxy0() {}public proxy0(InvocationHandler invocationHandler) {this.handler = invocationHandler;}
}

使用arthas反编译之后的代码 获取的代理类:com.alibaba.dubbo.common.bytecode.proxy0,当调用sayHello的方法是,实际调用的是this.handler.invoke(this, methods[0], arrobject);方法,invoker实例

下面是该实例的具体代码

public class InvokerInvocationHandler implements InvocationHandler {private final Invoker<?> invoker;public InvokerInvocationHandler(Invoker<?> handler) {this.invoker = handler;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {String methodName = method.getName();Class<?>[] parameterTypes = method.getParameterTypes();if (method.getDeclaringClass() == Object.class) {return method.invoke(invoker, args);}if ("toString".equals(methodName) && parameterTypes.length == 0) {return invoker.toString();}if ("hashCode".equals(methodName) && parameterTypes.length == 0) {return invoker.hashCode();}if ("equals".equals(methodName) && parameterTypes.length == 1) {return invoker.equals(args[0]);}//创建netty发送对象的RpcInvocationreturn invoker.invoke(new RpcInvocation(method, args)).recreate();}}

其中InvokerInvocationHandler中属性invoker是:MockClusterInvoker,其中设置服务降级mock,可以参照:https://www.jianshu.com/p/d71c7771b9c9,mocker具体配置:如果是force强制走mock,实现类是接口名+Mock

@Overridepublic Result invoke(Invocation invocation) throws RpcException {//invocation RpcInvocation  methodName,  parameterTypes, argumentsResult result = null;// //dubbo的服务降级策略,失败之后会走mock方法,打到服务降级的策略,https://www.jianshu.com/p/d71c7771b9c9String value = directory.getUrl().getMethodParameter(invocation.getMethodName(), Constants.MOCK_KEY, Boolean.FALSE.toString()).trim();if (value.length() == 0 || value.equalsIgnoreCase("false")) {//no mock//如果没有mock配置,不走mock逻辑result = this.invoker.invoke(invocation);} else if (value.startsWith("force")) {if (logger.isWarnEnabled()) {logger.info("force-mock: " + invocation.getMethodName() + " force-mock enabled , url : " + directory.getUrl());}//force:direct mock//force开头,强制进行mock //这个force只能通过override触发 接口名+Mockresult = doMockInvoke(invocation, null);} else {//fail-mock//服务降级try {result = this.invoker.invoke(invocation);} catch (RpcException e) {if (e.isBiz()) {throw e;} else {if (logger.isWarnEnabled()) {logger.warn("fail-mock: " + invocation.getMethodName() + " fail-mock enabled , url : " + directory.getUrl(), e);}result = doMockInvoke(invocation, e);}}}return result;}

invoker方法调用AbstractClusterInvoker

   public Result invoke(final Invocation invocation) throws RpcException {checkWhetherDestroyed();LoadBalance loadbalance = null;// binding attachments into invocation.Map<String, String> contextAttachments = RpcContext.getContext().getAttachments();if (contextAttachments != null && contextAttachments.size() != 0) {((RpcInvocation) invocation).addAttachments(contextAttachments);}//获取所有的invoker,参考RegistryDirectory中的dolist方法,后续详解List<Invoker<T>> invokers = list(invocation);if (invokers != null && !invokers.isEmpty()) {//获取默认的负载均衡策略loadbalance = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(invokers.get(0).getUrl().getMethodParameter(RpcUtils.getMethodName(invocation), Constants.LOADBALANCE_KEY, Constants.DEFAULT_LOADBALANCE));}RpcUtils.attachInvocationIdIfAsync(getUrl(), invocation);return doInvoke(invocation, invokers, loadbalance);}

该方法主要就是为了获取invoker集合以及负载均衡的策略,doInoker主要的代码逻辑在DubboInvoker //TODO负载均衡策略

 protected Result doInvoke(final Invocation invocation) throws Throwable {RpcInvocation inv = (RpcInvocation) invocation;final String methodName = RpcUtils.getMethodName(invocation);//添加path以及version信息inv.setAttachment(Constants.PATH_KEY, getUrl().getPath());inv.setAttachment(Constants.VERSION_KEY, version);ExchangeClient currentClient;if (clients.length == 1) {currentClient = clients[0];} else {currentClient = clients[index.getAndIncrement() % clients.length];}try {//获取调用方式boolean isAsync = RpcUtils.isAsync(getUrl(), invocation);boolean isOneway = RpcUtils.isOneway(getUrl(), invocation);int timeout = getUrl().getMethodParameter(methodName, Constants.TIMEOUT_KEY, Constants.DEFAULT_TIMEOUT);if (isOneway) {//异步调用 无返回值boolean isSent = getUrl().getMethodParameter(methodName, Constants.SENT_KEY, false);currentClient.send(inv, isSent);RpcContext.getContext().setFuture(null);return new RpcResult();} else if (isAsync) {//异步调用 有返回值ResponseFuture future = currentClient.request(inv, timeout);//FutureAdapter 适配器 将jdk中future与ResponseFuture结合 get实际调用的是ResponseFuture的get方法RpcContext.getContext().setFuture(new FutureAdapter<Object>(future));return new RpcResult();} else {//同步调用RpcContext.getContext().setFuture(null);//阻塞 直到获取到返回值 DefaultFuture 默认实现类//发送消息return (Result) currentClient.request(inv, timeout).get();}} catch (TimeoutException e) {throw new RpcException(RpcException.TIMEOUT_EXCEPTION, "Invoke remote method timeout. method: " + invocation.getMethodName() + ", provider: " + getUrl() + ", cause: " + e.getMessage(), e);} catch (RemotingException e) {throw new RpcException(RpcException.NETWORK_EXCEPTION, "Failed to invoke remote method: " + invocation.getMethodName() + ", provider: " + getUrl() + ", cause: " + e.getMessage(), e);}}

doinoker默认是走同步调用(FailoverClusterInvoker 失败策略,后单独开一篇文章讲解),这里有个非常有意思的类是DefaultFuture,感觉像是jdk自带的模样,异步、同步的实现都在这个类中实现,贴出代码一目了然,比较重要的几个方法

RpcContext.getContext().setFuture(null);
//阻塞 直到获取到返回值 DefaultFuture 默认实现类
//发送消息
return (Result) currentClient.request(inv, timeout).get();类DefaultFuture 堵塞代码public class DefaultFuture implements ResponseFuture {// invoke id.private final long id;private final Channel channel;private final Request request;private volatile long sent;public DefaultFuture(Channel channel, Request request, int timeout) {this.channel = channel;this.request = request;//这个id非常重要this.id = request.getId();this.timeout = timeout > 0 ? timeout : channel.getUrl().getPositiveParameter(Constants.TIMEOUT_KEY, Constants.DEFAULT_TIMEOUT);//通过id进行绑定FUTURES.put(id, this);CHANNELS.put(id, channel);}public static void received(Channel channel, Response response) {try {//根据id获取对应的futureDefaultFuture future = FUTURES.remove(response.getId());if (future != null) {future.doReceived(response);} else {logger.warn("The timeout response finally returned at "+ (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()))+ ", response " + response+ (channel == null ? "" : ", channel: " + channel.getLocalAddress()+ " -> " + channel.getRemoteAddress()));}} finally {CHANNELS.remove(response.getId());}}@Overridepublic Object get(int timeout) throws RemotingException {if (timeout <= 0) {timeout = Constants.DEFAULT_TIMEOUT;}if (!isDone()) {long start = System.currentTimeMillis();lock.lock();try {//等待 直到处理完while (!isDone()) {//等待有消息返回的时候 signaldone.await(timeout, TimeUnit.MILLISECONDS);if (isDone() || System.currentTimeMillis() - start > timeout) {break;}}} catch (InterruptedException e) {throw new RuntimeException(e);} finally {lock.unlock();}if (!isDone()) {throw new TimeoutException(sent > 0, channel, getTimeoutMessage(false));}}return returnFromResponse();}@Overridepublic boolean isDone() {return response != null;}private Object returnFromResponse() throws RemotingException {Response res = response;if (res == null) {throw new IllegalStateException("response cannot be null");}if (res.getStatus() == Response.OK) {return res.getResult();}if (res.getStatus() == Response.CLIENT_TIMEOUT || res.getStatus() == Response.SERVER_TIMEOUT) {throw new TimeoutException(res.getStatus() == Response.SERVER_TIMEOUT, channel, res.getErrorMessage());}throw new RemotingException(channel, res.getErrorMessage());}}

思考一个问题,dubbo有如此多的请求,请求数据与返回数据是对应关系是怎么设计的呢?(提示DefaultFuture有个requestId,这个id与dubbo)答案见最后截图

消费端正式调用send方法currentClient.request(inv, timeout),我们可以HeaderExchangeChannel的request方法中看到netty发送request信息,有兴趣的可以看一下dubbo的数据包以及编解码

调用的整体类图

proxy0#sayHello(String)—> InvokerInvocationHandler#invoke(Object, Method, Object[])—> MockClusterInvoker#invoke(Invocation)—> AbstractClusterInvoker#invoke(Invocation)—> FailoverClusterInvoker#doInvoke(Invocation, List<Invoker<T>>, LoadBalance)—> Filter#invoke(Invoker, Invocation)  // 包含多个 Filter 调用—> ListenerInvokerWrapper#invoke(Invocation) —> AbstractInvoker#invoke(Invocation) —> DubboInvoker#doInvoke(Invocation)—> ReferenceCountExchangeClient#request(Object, int)—> HeaderExchangeClient#request(Object, int)—> HeaderExchangeChannel#request(Object, int)—> AbstractPeer#send(Object)—> AbstractClient#send(Object, boolean)—> NettyChannel#send(Object, boolean)—> NioClientSocketChannel#write(Object)

整体的消费端调用结束

当服务提供者接收到netty传来的信息就会解码,获取对应的类名、方法名以及参数名称数值,线程池分发调用具体的处理逻辑(AllChannelHandler),具体的执行逻辑在ChannelEventRunnable#run方法的decode

@Override/*处理请求和响应消息,这里的 message 变量类型可能是 Request,也可能是 Response*/public void received(Channel channel, Object message) throws RemotingException {ExecutorService cexecutor = getExecutorService();try {//ChannelEventRunnable处理cexecutor.execute(new ChannelEventRunnable(channel, handler, ChannelState.RECEIVED, message));} catch (Throwable t) {//TODO A temporary solution to the problem that the exception information can not be sent to the opposite end after the thread pool is full. Need a refactoring//fix The thread pool is full, refuses to call, does not return, and causes the consumer to wait for time outif(message instanceof Request && t instanceof RejectedExecutionException){Request request = (Request)message;if(request.isTwoWay()){String msg = "Server side(" + url.getIp() + "," + url.getPort() + ") threadpool is exhausted ,detail msg:" + t.getMessage();Response response = new Response(request.getId(), request.getVersion());response.setStatus(Response.SERVER_THREADPOOL_EXHAUSTED_ERROR);response.setErrorMessage(msg);channel.send(response);return;}}throw new ExecutionException(message, channel, getClass() + " error when process received event .", t);}}

 

 

 

 

 

 

 

 

 

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Java 在Excel中添加分离型饼图、环形图

    一、概述 Excel中可支持多种不同类型的图表&#xff0c;本文介绍如何绘制分离型饼图和环形图。其中&#xff0c;分离型饼图的绘制可分为整体分离型&#xff08;即设置饼图分离程度&#xff09;和局部分离&#xff08;即设置点爆炸型值&#xff09;两种情况。下面将以Java程序代…...

    2024/3/23 17:28:05
  2. 万岳网校平台源码丨在线教育平台源码安卓版

    随着网络时代的到来&#xff0c;线上线下已经逐渐的产生同步的效应&#xff0c;不管是在商业方面还是在教育当中&#xff0c;尤其是体现在在线教育这一领域&#xff0c;这样一来不管是老师还是学生都获益良多&#xff0c;对于整个社会的进步有着非常正面的影响。由此可知在线教…...

    2024/3/23 17:28:04
  3. vue+echarts 实现日历坐标系+热力图 按月隔开的图表

    预览(由于图表过长&#xff0c;用div包裹后实现滚动) 实现分隔思路 日历坐标系不自带分隔&#xff0c;就用边框粗细来实现伪分隔还有一种分隔思路是使用多张热力图图表&#xff0c;这意味着series中会有多个对象&#xff0c;而且不方便传值echarts官方实例中不带文字的显示&am…...

    2024/3/23 17:28:04
  4. DCNv2 RuntimeError: Error compiling objects for extension

    最近使用CenterNet的时候&#xff0c;由于在DLA34中用到了DCN&#xff0c;所以需要编译DCNv2&#xff0c;但是每次都会出问题&#xff0c;最近做一个小结 1、Pytorch版本&#xff1a;1.6 2、DCN选择&#xff1a;https://github.com/lbin/DCNv2&#xff0c;这个链接中针对pytorc…...

    2024/3/23 17:28:03
  5. Java_抽象类

    /* * 抽象方法&#xff1a;就是加上abstract关键字&#xff0c;然后去掉大括号&#xff0c;直接分号结束 * 抽象类&#xff1a;抽象方法所在的类必须是抽象类才行 * * 如何使用抽象类和抽象方法&#xff1a; * 1.不能直接创建new抽象类对象 * 2.必须用一个子类来继承抽象父类 …...

    2024/3/23 17:28:01
  6. 三点教会你怎么选购数据线

    科技不断创新&#xff0c;技术不断被开发&#xff0c;手机早已从以往只具备单一通话的功能向智能化、科技化多方面发展&#xff0c;手机电量开始变得不耐用&#xff0c;也已不再是以往几天一充&#xff0c;如今是少则一天一充&#xff0c;多则一天几充。而数据线作为手机的必备…...

    2024/3/23 17:28:00
  7. Burp Suite进行账号密码爆破

    下面讲解一般的弱口令破解 1、在登录页面抓包 2、发送给测试器 3、确认是否为要爆破的登录页面的IP和端口号 4、选择攻击&#xff08;爆破&#xff09;类型 5、标记攻击&#xff08;爆破&#xff09;位置 6、放字典 7、开始攻击&#xff08;爆破&#xff09;...

    2024/3/23 17:28:00
  8. AI中台——智能聊天机器人平台的架构与应用(分享实录)

    导读&#xff1a;随着“中台”战略的提出&#xff0c;目前宜信中台建设在思想理念及架构设计上都已经取得了很多成果。宜信是如何借助中台化的思想打造“AI中台”及相关的智能产品呢&#xff1f;本次直播&#xff0c;宜信科技中心AI中台团队负责人王东老师分享了宜信AI中台的具…...

    2024/3/26 12:46:42
  9. 亚马逊无货源模式靠谱么?

    一个人一个电脑一个电铺一个月一万元&#xff0c;很难么&#xff1f; 今天案例的主角是一位95后刚毕业进入工作的一个女生- 珮文。23岁的她在2020年8月16日通过公司面试进入亚马逊运营实习岗位。经过公司跨境部导师的培训&#xff0c;每个月可以赚到三万人民币的净利润&#x…...

    2024/3/23 17:27:57
  10. H5基于canvas实现电子签名并生成PDF文档

    前言 电子签名通俗来说就是通过技术手段实现在电子文档上加载电子形式的签名&#xff0c;其作用类似于纸质合同上的手写签名或加盖的公章。虽然电子签名多年来合法性一直遭到质疑&#xff0c;但其在企业工作流审批、请柬、单据保全等场景应用广泛&#xff0c;最近的项目中就有…...

    2024/3/23 17:27:56
  11. Spring整合Mybatis源码分析

    一、MapperScan注解解析 MapperScan(basePackages "com.ziroom.springboot.springbootsourcetest.mapper")Retention(RetentionPolicy.RUNTIME) Target(ElementType.TYPE) Documented Import(MapperScannerRegistrar.class) Repeatable(MapperScans.class) public …...

    2024/3/23 13:17:43
  12. 漏洞复现—Spring CVE-2016-4977/CVE-2017-4971/CVE-2017-8046/CVE-2018-1270/CVE-2018-1273

    Spring CVE-2016-4977/CVE-2017-4971/CVE-2017-8046/CVE-2018-1270/CVE-2018-1273基础知识漏洞原理涉及版本漏洞复现CVE-2016-4977CVE-2017-4971CVE-2017-8046CVE-2018-1270CVE-2018-1273参考资料&#xff1a;基础知识 Spring框架是由于软件开发的复杂性而创建的。Spring使用的…...

    2024/3/23 13:17:43
  13. 用echarts力导向图做类似neo4j的关系图,支持点击某个节点显示与此节点相关的多一层关系,再次点击删除此节点下关系

    实现功能: 初始加载P1相关的人物(a1,a2,a3,a4)以及关系,点击P1相关人物(a1),加载关于a1相关的人物和关系,同时展示P1相关的人物关系;如果a1相关人物关系已经在图上显示,再次点击此节点,则关闭此节点相关的人物关系展示 最初版本,逻辑可能会有些混乱,后面有时间再…...

    2024/3/23 13:17:41
  14. 人群计数之DM-count:Distribution Matching for Crowd Counting

    DM_count 这是继Bayes Loss之后又一针对损失函数提出的人群计数方法。 着眼点&#xff1a;损失函数&#xff1b;分布匹配&#xff1b; 存在的问题&#xff1a; 使用高斯模糊生成真值密度图&#xff1a;论文中提到生成的密度图是一个密集的真值矩阵&#xff0c;而点注释图是…...

    2024/3/23 13:17:40
  15. 爬虫中遇到中文乱码解决方法

    1.requests 设置响应的编码 response.encoding response.apparent_encoding2.scrapy 中间件中添加如下代码 def process_response(self, request, response, spider):response HtmlResponse(urlresponse.url,bodyresponse.body,encodingGB2312)return responseGB2312不行…...

    2024/3/25 17:07:50
  16. 达梦数据库创建定时作业

    达梦数据库创建定时作业1、新建代理环境2、新建定时全备、增备作业2.1 作业名及作业描述2.2 作业步骤2.2.1 常规2.2.2 作业步骤2.2.3 作业调度2.2.4 DDL2.2.5 增备与全备全备的区别3、定时作业执行SQL脚本3.3.1 常规3.3.2 作业步骤3.3.2.1 调用系统存储过程使用DM管理工具代理作…...

    2024/3/25 14:33:28
  17. 查看图片出现 net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)

    解决nginx出现net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK) 的问题 解决方法&#xff1a; 在ngixn.conf http 下配置 proxy_buffer_size 64k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; 原因可能是因为header过大&#xff0c;调整一下即可...

    2024/3/23 17:27:54
  18. VS2017使用opencv读取视频在release下出错

    VS2017使用opencv4.0读取视频&#xff0c;在debug下可以运行&#xff0c;在release下出现下述问题。 &#xff08;1&#xff09; (进程 696)已退出,返回代码为: -1073741819。 &#xff08;2&#xff09; [ERROR:0] VIDEOIO(cvCreateCapture_MSMF(filename)): raised C exc…...

    2024/3/23 17:27:57
  19. C++:类模板

    C&#xff1a;类模板 &#xff08;仅作学习复习记录&#xff09; 一、类模板作用&#xff1a; 建立一个通用类&#xff0c;类中的成员数据类型可以不具体制定&#xff0c;用一个虚拟的类型来代表。 template<typename T> #template:声明创建模板 #typename:表明其后面…...

    2024/3/23 17:27:51
  20. MSJRO.tlh(100) : error C2146: syntax error : missing ‘;‘ before identifier ‘ConflictTables‘报错

    转载自&#xff1a;丛壮的博客 我的工程原来是别人在xp系统上开发的&#xff0c;最近要进行更新和改造&#xff0c;转移到了win7之后不能用&#xff0c;感谢这位老师的博客&#xff0c;提醒我跟windows系统有关 MSJRO.tlh(100) : error C2146: syntax error : missing ‘;’ b…...

    2024/3/23 17:27:50

最新文章

  1. 递增的三元子序列-数组334-c++

    利用栈的暴力解法&#xff0c;O(n^2)的时间复杂度&#xff0c;但是leetcode报错超时。 #include <stack>class Solution { public:bool increasingTriplet(vector<int>& nums) {int m nums.size();int n 2;for (int i 0; i < m - 3; i) {stack<int&g…...

    2024/3/28 23:27:38
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Python爬虫-批量爬取星巴克全国门店

    前言 本文是该专栏的第22篇,后面会持续分享python爬虫干货知识,记得关注。 本文笔者以星巴克为例,通过Python实现批量爬取目标城市的门店数据以及全国的门店数据。 具体的详细思路以及代码实现逻辑,跟着笔者直接往下看正文详细内容。(附带完整代码) 正文 地址:aHR0cHM…...

    2024/3/27 14:26:14
  4. ​HTTP与HTTPS:网络通信的安全卫士

    ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…...

    2024/3/28 21:31:03
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/3/28 16:59:55
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/3/28 4:39:34
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/3/28 5:03:31
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/3/28 19:59:46
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/3/28 21:57:52
  10. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/3/28 9:07:44
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/3/28 18:09:48
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/3/28 21:57:50
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/3/28 9:58:22
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/3/28 10:24:59
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/3/28 19:51:36
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/3/28 19:36:32
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/3/28 17:15:47
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/3/28 8:42:54
  19. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/3/28 8:14:39
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/3/28 19:58:12
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/3/28 21:57:45
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/3/28 8:24:01
  23. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/3/28 5:29:22
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/3/28 9:26:43
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57