DPC_WATCHDOG_VIOLATION蓝屏分析

2023-11-18

https://blog.csdn.net/xiangbaohui/article/details/104849967/

DPC_WATCHDOG_VIOLATION蓝屏分析

1. 背景

今天在我们客户的电脑上面出现了一个蓝屏,并且反馈蓝屏码很奇怪是DPC_WATCHDOG_VIOLATION;本来PC上面没有安装我们的任何软件,这个问题与我们无关。但是出于对技术的好奇,本人分析了一下这个问题,并且这个问题本人以前也没有遇到过,因此写文记录一下这个分析过程。

1. 分析

1.1 初步分析

拿到dmp文件之后,我们先查看错误码信息:

DPC_WATCHDOG_VIOLATION (133)
The DPC watchdog detected a prolonged run time at an IRQL of DISPATCH_LEVEL
or above.
Arguments:
Arg1: 0000000000000000, A single DPC or ISR exceeded its time allotment. The offending
component can usually be identified with a stack trace.
Arg2: 0000000000000501, The DPC time count (in ticks).
Arg3: 0000000000000500, The DPC time allotment (in ticks).
Arg4: fffff8077ff73358, cast to nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, which contains
additional information regarding this single DPC timeout

从描述上面来看大概是这个意思:DPC看门狗检测到了在DPC或者DPC级别上面执行的太久了,导致蓝屏。这个就很奇怪了,难道Windows无法在DPC上面执行太久吗?还真是的,我们看一下这个的基本分析。

1.2 DPC WATCHDOG

应该是从Vista开始就引入了这样一个东西,当一个CPU连续处于DPC下面执行的时候,就可能超过某个值而导致蓝屏,我们可以逆向一下Windows代码看下:

从这里看,如果超过时间并且KeEnableWatchdogTimeout为真的话,那么引发133蓝屏。那么KeEnableWatchdogTimeout这个是什么时候初始化的呢?我们可以看到初始化的代码如下:

char __fastcall KeInitSystem(int a1)

{

//...

if (!HviIsAnyHypervisorPresent())

KeEnableWatchdogTimeout = 1;

//...

}

HviIsAnyHypervisorPresent这个函数返回cpuid指令是否由hypervisor实现,如果不是的话,那么开启WatchDog。

并且我们在ntoskrnl中可以看到如下定义:

这个两个分别代表DPC狗超时的最大时间和单个DPC最大的时间。

1.3 DPC超时时间获取

通过KeQueryDpcWatchdogInformation可以获取到当前处理器的DPC超时时间信息,如下:

NTSTATUS KeQueryDpcWatchdogInformation(
  PKDPC_WATCHDOG_INFORMATION WatchdogInformation
);
typedef struct _KDPC_WATCHDOG_INFORMATION {
  ULONG DpcTimeLimit;
  ULONG DpcTimeCount;
  ULONG DpcWatchdogLimit;
  ULONG DpcWatchdogCount;
  ULONG Reserved;
} KDPC_WATCHDOG_INFORMATION, *PKDPC_WATCHDOG_INFORMATION;

其中:

DpcTimeLimit : 当前处理器单个延迟过程调用的时间限制。如果已禁用DPC超时,则此值设置为0。

DpcTimeCount : 如果已启用DPC超时,则本次延迟过程调用的剩余时间。

DpcWatchdogLimit : 一系列延迟过程调用所允许的总时间限制。如果已禁用DPC看门狗,则此值设置为零。

DpcWatchdogCount : 如果启用DPC看门狗,则当前连续延迟过程调用序列的剩余时间值。

1.4 分析

有了上面这些基础知识以后我们就可以分析这个问题了:

2: kd> k

# Child-SP RetAddr Call Site

00 ffff8380`20bf5b08 fffff807`7fbee83d nt!KeBugCheckEx

01 ffff8380`20bf5b10 fffff807`7fa1f857 nt!KeAccumulateTicks+0x1cbe1d

02 ffff8380`20bf5b70 fffff807`804b91e1 nt!KeClockInterruptNotify+0xc07

03 ffff8380`20bf5f30 fffff807`7fa029e5 hal!HalRequestSoftwareInterrupt+0x171

04 ffff8380`20bf5f60 fffff807`7fbc2cba nt!KiCallInterruptServiceRoutine+0xa5

05 ffff8380`20bf5fb0 fffff807`7fbc3227 nt!KiInterruptSubDispatchNoLockNoEtw+0xfa

06 ffffbb07`daa476f0 fffff807`7faa26e8 nt!KiInterruptDispatchNoLockNoEtw+0x37

07 ffffbb07`daa47880 fffff807`7fa27dfb nt!KxWaitForSpinLockAndAcquire+0x28

08 ffffbb07`daa478b0 fffff807`859ef1c2 nt!KeAcquireSpinLockAtDpcLevel+0x5b

09 ffffbb07`daa478e0 fffff807`859ed8b0 tcpip!IsSessionStateFastPathCompatible+0x12

0a ffffbb07`daa47a00 fffff807`7fa6ae85 tcpip!WfpIndicateSendControl+0x2d0

0b ffffbb07`daa47c40 fffff807`7fa6a4df nt!KiExecuteAllDpcs+0x305

0c ffffbb07`daa47d80 fffff807`7fbc8265 nt!KiRetireDpcList+0x1ef

0d ffffbb07`daa47fb0 fffff807`7fbc8050 nt!KxRetireDpcList+0x5

0e ffffbb07`db1129d0 fffff807`7fbc7720 nt!KiDispatchInterruptContinue

0f ffffbb07`db112a00 00007ffa`9dc674e9 nt!KiDpcInterrupt+0x2f0

从这个堆栈我们发现2号CPU目前在执行DPC例程,然后时钟中断产生,通过调用KeAccumulateTicks计算DPC的总执行时间,发现执行超时蓝屏。 那么我们看一下当前CPU的DCP超时信息:

2: kd> dt nt!_KPRCB ffff838020e40180 DPC*

+0x2e00 DpcData : [2] _KDPC_DATA

+0x2e50 DpcStack : 0xffffbb07`daa47fb0 Void

+0x2e5c DpcRequestRate : 0

+0x2e64 DpcLastCount : 0x3c0c

+0x2e6a DpcRoutineActive : 0x1 ''

+0x2e6c DpcRequestSummary : 0n19

+0x2e6c DpcRequestSlot : [2] 0n19

+0x2e6c DpcNormalProcessingActive : 0y1

+0x2e6c DpcNormalProcessingRequested : 0y1

+0x2e6c DpcNormalThreadSignal : 0y0

+0x2e6c DpcNormalTimerExpiration : 0y0

+0x2e6c DpcNormalDpcPresent : 0y1

+0x2e6c DpcNormalLocalInterrupt : 0y0

+0x2e6c DpcNormalSpare : 0y0000000000 (0)

+0x2e6c DpcThreadActive : 0y0

+0x2e6c DpcThreadRequested : 0y0

+0x2e6c DpcThreadSpare : 0y00000000000000 (0)

+0x5880 DpcGate : _KGATE

+0x58e8 DpcWatchdogPeriod : 0n7680

+0x58ec DpcWatchdogCount : 0n1280

+0x58f4 DpcWatchdogProfileCumulativeDpcThreshold : 0x1b80

+0x5b8c DpcTime : 0x515

+0x5b9c DpcTimeCount : 0x501

+0x5ba0 DpcTimeLimit : 0x500

+0x5c00 DpcWatchdogProfileSingleDpcThreshold : 0x496

+0x5f58 DpcWatchdogDpc : _KDPC

+0x5f98 DpcWatchdogTimer : _KTIMER

+0x61a8 DpcWatchdogProfile : 0xffffaa0f`64184000 -> 0x00000000`0000000e Void

+0x61b0 DpcWatchdogProfileCurrentEmptyCapture : 0xffffaa0f`64187600 -> (null)

这里可以看到DpcTimeLimit : 0x500 总时间tick 数目为500,但是已经执行了DpcTimeCount : 0x501 501个,导致蓝屏。

从上面的堆栈我们可以发现这个DPC是TCPIP发起的DPC,由Windows自身引起的问题应该比较小,不过很大可能是因为nt!KeAcquireSpinLockAtDpcLevel占用自旋锁时间太长,导致超时,那么我们看下其他的处理器在干嘛,我们看到一个很可疑的驱动:

# Child-SP RetAddr Call Site

00 ffffbb07`ddb96140 fffff807`7dcf3467 Wdf01000!imp_WdfIoQueueRetrieveNextRequest+0x66

01 ffffbb07`ddb96180 fffff807`7dcf3100 xxxx+0x3467

02 ffffbb07`ddb961e0 fffff807`7dcf2cbb xxxx+0x3100

03 ffffbb07`ddb96210 fffff807`7dcf2393 xxxx+0x2cbb

04 ffffbb07`ddb96280 fffff807`8545bed0 xxxx+0x2393

05 ffffbb07`ddb962b0 fffff807`8545b879 NETIO!KfdClassify+0x28e0

06 ffffbb07`ddb96380 fffff807`8545aed9 NETIO!KfdClassify+0x2289

07 ffffbb07`ddb964c0 fffff807`8545d1da NETIO!KfdClassify+0x18e9

08 ffffbb07`ddb96640 fffff807`85459b91 NETIO!KfdClassify+0x3bea

09 ffffbb07`ddb967d0 fffff807`8545933a NETIO!KfdClassify+0x5a1

0a ffffbb07`ddb96be0 fffff807`85458f63 NETIO!WfpStreamInspectReceive+0x8fa

0b ffffbb07`ddb96d70 fffff807`854588a4 NETIO!WfpStreamInspectReceive+0x523

0c ffffbb07`ddb97150 fffff807`859e85e0 NETIO!WfpStreamInspectSend+0x274

0d ffffbb07`ddb971d0 fffff807`859e8144 tcpip+0x285e0

0e ffffbb07`ddb972e0 fffff807`7fa69e18 tcpip+0x28144

0f ffffbb07`ddb97310 fffff807`7fa69d8d nt!KeExpandKernelStackAndCalloutInternal+0x78

10 ffffbb07`ddb97380 fffff807`85a271d4 nt!KeExpandKernelStackAndCalloutEx+0x1d

11 ffffbb07`ddb973c0 fffff807`88ce9348 tcpip+0x671d4

12 ffffbb07`ddb97430 fffff807`88ce32ed afd!AfdTLStartBufferedVcSend+0xa0

13 ffffbb07`ddb974e0 fffff807`88ce0120 afd!AfdSend+0x9cd

14 ffffbb07`ddb97740 fffff807`7fa31f39 afd!AfdDispatch+0x160

15 ffffbb07`ddb977b0 fffff807`7ffe93f5 nt!IofCallDriver+0x59

因此我们大概猜测,因为这个线程执行导致了另外线程DPC一直执行,我们看下IRQL级别

3: kd> !irql

Debugger saved IRQL for processor 0x3 -- 0 (LOW_LEVEL)

这里比较奇怪了,如果是这个线程占用了自旋锁的话,那么将会这个时候IRQL应该是2才对,但是这个是0,说明刚开始的猜测是错误的,那么我们简单看一下这个线程DPC的执行过程:

3: kd> dt nt!_KPRCB ffff838020ed5180 DPC*

+0x2e00 DpcData : [2] _KDPC_DATA

+0x2e50 DpcStack : 0xffffbb07`daa57fb0 Void

+0x2e5c DpcRequestRate : 0

+0x2e64 DpcLastCount : 0x22c9

+0x2e6a DpcRoutineActive : 0 ''

+0x2e6c DpcRequestSummary : 0n50

+0x2e6c DpcRequestSlot : [2] 0n50

+0x2e6c DpcNormalProcessingActive : 0y0

+0x2e6c DpcNormalProcessingRequested : 0y1

+0x2e6c DpcNormalThreadSignal : 0y0

+0x2e6c DpcNormalTimerExpiration : 0y0

+0x2e6c DpcNormalDpcPresent : 0y1

+0x2e6c DpcNormalLocalInterrupt : 0y1

+0x2e6c DpcNormalSpare : 0y0000000000 (0)

+0x2e6c DpcThreadActive : 0y0

+0x2e6c DpcThreadRequested : 0y0

+0x2e6c DpcThreadSpare : 0y00000000000000 (0)

+0x5880 DpcGate : _KGATE

+0x58e8 DpcWatchdogPeriod : 0n7680

+0x58ec DpcWatchdogCount : 0n1283

+0x58f4 DpcWatchdogProfileCumulativeDpcThreshold : 0x1b80

+0x5b8c DpcTime : 3

+0x5b9c DpcTimeCount : 0

+0x5ba0 DpcTimeLimit : 0x500

+0x5c00 DpcWatchdogProfileSingleDpcThreshold : 0x496

+0x5f58 DpcWatchdogDpc : _KDPC

+0x5f98 DpcWatchdogTimer : _KTIMER

+0x61a8 DpcWatchdogProfile : 0xffffaa0f`64202000 -> (null)

+0x61b0 DpcWatchdogProfileCurrentEmptyCapture : 0xffffaa0f`64202000 -> (null)

这里看到DpcWatchdogCount : 0n1283这个值很大,那么可以推测这个CPU执行的DPC将非常多,导致的概率也非常大,那么我们干掉这个驱动。

测试,果然蓝屏问题消失。

2. 总结

其实还有一个命令可以直接查看watchdog的信息,就是!swd,如下:

3: kd> !swd

SWD: Initial DPC Watchdog Period: 120.000 (s)

SWD: Initial DPC Timeout Period: 20.000 (s)

CPU Type Counter Time (s)

0: DPC Period 120.000 (s)

0: DPC Count 0.000 (s)

0: DPCTimeout Period 20.000 (s)

0: DPCTimeout Count 20.000 (s)

0: Thread <Disabled>

1: DPC Period 120.000 (s)

1: DPC Count 0.000 (s)

1: DPCTimeout Period 20.000 (s)

1: DPCTimeout Count 20.000 (s)

1: Thread <Disabled>

2: DPC Period 120.000 (s)

2: DPC Count 20.000 (s)

2: DPCTimeout Period 20.000 (s)

2: DPCTimeout Count 1844674407370.939 (s)

2: Thread <Disabled>

3: DPC Period 120.000 (s)

3: DPC Count 20.046 (s)

3: DPCTimeout Period 20.000 (s)

3: DPCTimeout Count 20.000 (s)

3: Thread <Disabled>

从上面的分析我们可以发现,Windows应该是趋向于在DPC级别少做事情,因为DPC会影响整体系统的响应(无法线程调度了);因此如果在DPC中需要做太多事情的话,MSDN推荐使用Worker去处理。

并且我们平时在使用自旋锁等提升IRQL到DPC级别的操作的时候,也需要尽量避免过于复杂的操作。

————————————————

版权声明:本文为CSDN博主「xdesk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/xiangbaohui/article/details/104849967/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DPC_WATCHDOG_VIOLATION蓝屏分析 的相关文章

  • VisualStudio—Remote Debug

    主要用来解决本地调试没问题发布到远端后却报错的项目 一 Windows Debug Windows 本文叙述采用的VS2022 远端 windows服务器 安装远程调试器 远端 windows服务器 安装过程省略 详见官方参考链接中设置远程
  • docker创建CentOS云主机(docker实践)

    基于Ubuntu操作系统 从零开始构建一套docker虚拟化平台 docker的产物为 容器 docker构建容器 Nginx WEB docker启动虚拟机 创建CentOS云主机 同样是容器 对之前内容的总结熟悉 要求 CentOS 7
  • 计算机提示由于找不到VCRUNTIME140.dll,无法继续执行代码,重新安装程序可能会解决

    vcruntime140 dll文件是一个动态链接库 是Windows操作系统中非常重要的一个动态链接库文件 用于支持使用Microsoft Visual C 编译器创建的应用程序的运行 当我们运行的软件是有C 编译器创建的程序 就需要到系
  • Linux命令·rm

    linux中删除文件和目录的命令 rm命令 rm是常用的命令 该命令的功能为删除一个目录中的一个或多个文件或目录 它也可以将某个目录及其下的所有文件及子目录均删除 对于链接文件 只是删除了链接 原有文件均保持不变 rm是一个危险的命令 使用
  • 长春地铁一号线作业

    长春一号线作业 代码如下 public class 第一次作业 public static void main String args System out println 北环城站 一匡街 胜利公园 解放大路 工农广场 卫星广场 华庆路
  • SCSI、ISCSI、iSER、NVMe、NVMe-oF、NVMe-oF over RDMA

    在存储系统中 上层协议可以泛指 指令 也就是比如 读出从某某开始的多少长度的扇区 指令包含三大关键信息 1 操作码 Opreation Code 或称为OP code 比如write read等等 2 起始地址 从哪里开始读 如果是文件的话
  • 通过微信小程序实现登录功能

    后端服务器可以在CSDN上开通 价格优惠 CSDN开发云 https img home csdnimg cn images 20220518054835 png https dev csdn net activity utm source
  • 采用ATL模型代替lib dll 的调用

    转载请标明是引用于 http blog csdn net chenyujing1234 例子代码 为WCE SDK下的例子 转为win32 自己移植 http www rayfile com zh cn files c638241c df8
  • 深度学习目标跟踪算法

    ECCV 2022 OSTrack Joint Feature Learning and Relation Modeling for Tracking https blog csdn net qq 41442511 article deta
  • 4大主流CPU处理器技术架构

    推荐阅读 浅谈linux 内核网络 sk buff 之克隆与复制 深入linux内核架构 进程 线程 了解Docker 依赖的linux内核技术 导读 RISC 精简指令集计算机 是一种执行较少类型计算机指令的微处理器 起源于80年代的MI
  • 深度学习模型参数量/计算量(附计算代码)

    参考 https mp weixin qq com s biz MzI4MDYzNzg4Mw mid 2247546551 idx 2 sn f198b6365e11f0a18832ff1203302632 chksm ebb70e63dc
  • Microsoft Remote Desktop高效、安全、稳定的远程办公解决方案

    在今天的数字化时代 Remote Desktop远程办公已成为许多人的日常生活 无论你是因为工作需要 还是因为在家中需要访问公司服务器 微软远程连接软件都是一个理想的选择 微软远程连接软件Remote Desktop是一款高效 安全 稳定的
  • 扬帆证券:新三板是在北交所吗?新三板与北交所是一回事吗?

    新三板不在北交所 与北交所不是一回事 新三板是全国中小企业股份转让体系 归于场外商场 不能满意上市要求的中小企业就可以请求在新三板挂牌生意 北交所是中国第一家公司制证券生意所 是场内商场 在北交所的公司是上市公司 新三板 新三板商场分为根底
  • 扬帆证券:买卖点指标?

    生意点方针是证券交易中常用的技能分析东西之一 通过分析商场的价格 成交量等方针 来供应对商场生意的辅导定见 本文将从定义 类型 运用办法和优缺陷四个视点来分析生意点方针 一 定义 生意点方针又称为商场拐点方针 是证券交易中用于猜测商场价格未
  • Linux-----13、用户、组

    用户 组 一 用户管理 用户概念及作用 了解 用户 指的是Linux操作系统中用于管理系统或者服务的人 一问 管理系统到底在 管理什么 答 Linux下一切皆 文件 所以用户管理的是相应的文件 二问 如何管理 文件呢 答 文件基本管理 比如
  • 最新渗透测试入门教程(非常详细),从零基础入门到精通,看完这一篇就够了

    什么是渗透测试 渗透测试就是模拟真实黑客的攻击手法对目标网站或主机进行全面的安全评估 与黑客攻击不一样的是 渗透测试的目的是尽可能多地发现安全漏洞 而真实黑客攻击只要发现一处入侵点即可以进入目标系统 一名优秀的渗透测试工程师也可以认为是一个
  • Microsoft Family Safety Microsoft 家庭安全将人员添加到你的家庭组

    在 创建家庭组 后 通过添加家庭成员来浏览 Microsoft 家庭安全 的功能和权益 如果某人已是家庭组成员 则在加入另一个组之前 他们必须 退出该组或从该组中删除 他们还可以 创建一个新的 Microsoft 帐户 以与新的家庭组相关联
  • 全面解析找不到xinput1_3.dll无法继续执行代码的多种解决方案(实用教程)

    xinput1 3 dll文件是什么 xinput1 3 dll是一个动态链接库文件 它是DirectInput的组件之一 DirectInput是微软公司开发的一种输入设备驱动程序 用于处理游戏控制器 键盘 鼠标等输入设备的信号 xinp
  • Microsoft Excel 2019中文

    Microsoft Excel 2019是微软公司推出的一款电子表格软件 是Office 2019套件中的一部分 作为一款非常流行的电子表格软件 Excel 2019具有非常广泛的应用范围 能够进行数据管理 数据处理和数据分析等工作 Exc
  • 扬帆证券:跨年期控股权易主活跃 多元化助推因素值得关注

    岁末年初 A股实控权改变趋向生动 2023年底 天汽模 中天精装 电工合金 三湘形象等公司相继公告控制权改变事宜 2024年以来 ST大集等公司打开实控人改变之路 宝莫股份等公司的易主在年初快速落定 这些易主运作中 部分案例超出商场预期 以

随机推荐

  • springboot+poi开发excel导出 加载Excel模板导出 Excel导出详解

    提到Excel导出功能 可能很多人都使用springmvc框架做过 笔者今天要给大家分享的是基于springBoot开发Excel复杂模板导出功能 所谓复杂模板指在模板里的特定表头里有不同的单元格合并以及背景色 字体颜色的填充 文本内容的对
  • linux下libpcap抓包分析

    linux下libpcap抓包分析 一 首先下载libpcap包http www tcpdump org latest release 然后安装 安装完成后进入安装根目录的tests文件夹 编译运行findalldevstest c 编译时
  • 实现mnist手写数字识别(第一周)

    本文为 365天深度学习训练营 中的学习记录博客 参考文章 365天深度学习训练营 第P1周 实现mnist手写数字识别 Pytorch实战 第P1周 实现mnist手写数字识别 qq com 原作者 K同学啊 接辅导 项目定制 我的环境
  • 使用codestriker搭建代码评审平台

    codestriker是用perl语言开发的 可以使用apache cgi进行访问的代码评审web站点 搭建过程如下 1 yum install perl 2 yum install highlight 3 配置codestriker co
  • k8s部署minio

    安装krew插件 官网地址 https krew sigs k8s io docs user guide setup install set x cd mktemp d OS uname tr upper lower
  • 图论算法<三>:判断有向图中是否有存在循环 ,以及环的个数和各个环中的元素

    1 目的 判断有向图中是否有存在循环 以及环的个数和各个环中的元素 2 示例效果 2 1 原始数据 路线起终点整理如下 共计12个顶点 19条边 起点 终点 1 最后的1代表起点终点是连通的 起点 终点 1 2 4 1 起点 终点 1 9
  • 深度学习理论及运用(三)Deep feedforward network

    转化成非线性 1 RBF径向基函数 2 利用sift特征以及K means 3 用数据去训练 举例 异或门 使用非线性运算 用图来表示实现线性可分的过程 目的 优化目标函数 Cost Functions 目标函数 交叉熵 公式前加负号转化为
  • Mybatis-Plus&&Druid多数据源配置

    多数据源配置思路 yml中配置多个数据源 通过AOP自动切换不同的数据源 配合Mybatis plus使用 yml配置 spring datasource druid db1 url jdbc mysql 10 168 1 118 3306
  • JPA对象的四种状态

    JPA对象的四种状态 1 瞬时状态 Transient 与数据库没有对应 跟Session没有关联 一般是新new出的对象 2 持久化状态 Persist 对象再Session的管理之中 最终会有对应的数据记录 特点 a 有OID 唯一标示
  • keyshot环境素材文件_做设计,用keyshot简单6步渲染出满意效果图,上手容易你也学得会...

    点击上方 机械设计一点通 关注我们 每天学习一个机械设计相关知识点 KeyShot是一个完全基于CPU为三维数据进行渲染和动画操作的独立渲染器 广泛用于高精度图像的实时呈现 为设计师 工程师和CG专业人士轻松地创建逼真的图像和三维模型动画提
  • python学习笔记---高级特性【廖雪峰】

    高级特性 切片 Slice 对应上面的问题 取前3个元素 用一行代码就可以完成切片 gt gt gt L 0 3 Michael Sarah Tracy L 0 3 表示 从索引0开始取 直到索引3为止 但不包括索引3 即索引0 1 2 正
  • 用c++编写网络爬虫

    include
  • el-date-picker时间选择器设置可选范围当前时间的六个月内

    el date picker时间选择器
  • Vue3快速上手

    Vue3快速上手 1 Vue3简介 2020年9月18日 Vue js发布3 0版本 代号 One Piece 海贼王 耗时2年多 2600 次提交 30 个RFC 600 次PR 99位贡献者 github上的tags地址 https g
  • 三分钟看懂神经网络机器翻译

    神经网络机器翻译 NMT 已成为本地化行业中最热门的话题之一 与以往基于统计的机器翻译 SMT 相比 可以使翻译质量提升 30 同时解决了远距离语言对的复杂性问题 如中文到英语 日语到英语等 SDL 的一项近期调查显示 61 的受访者认为机
  • Dex文件加载以及类加载流程

    Dex文件加载以及类加载流程 安卓源码连接 http androidxref com 4 4 4 r1 app在启动的过程中创建了PathClassLoader加载dex文件 那么我们跟进PathClassLoader libcore da
  • 2022-2027年中国金融市场规模现状及投资规划建议报告

    报告类型 产业研究 报告格式 电子 纸介版 出品单位 华经产业研究院 本报告由华经产业研究院重磅推出 对中国金融行业的发展现状 竞争格局及市场供需形势进行了具体分析 并从行业的政策环境 经济环境 社会环境及技术环境等方面分析行业面临的机遇及
  • Springboot配置双数据源

    Springboot配置双数据源 数据库相关信息 yml相关配置 单数据源与双数据源进行对比 数据源配置 Mysql spring datasource 单数据源 需要删除双数据源相关配置文件 注意是url url jdbc mysql l
  • 面试官问 Vue 性能优化,我该怎么回答

    前言 Vue 框架通过数据双向绑定和虚拟 DOM 技术 帮我们处理了前端开发中最脏最累的 DOM 操作部分 我们不再需要去考虑如何操作 DOM 以及如何最高效地操作 DOM 但 Vue 项目中仍然存在项目首屏优化 Webpack 编译配置优
  • DPC_WATCHDOG_VIOLATION蓝屏分析

    https blog csdn net xiangbaohui article details 104849967 DPC WATCHDOG VIOLATION蓝屏分析 1 背景 今天在我们客户的电脑上面出现了一个蓝屏 并且反馈蓝屏码很奇怪