2.VBA程序如何修改双击间隔? 不能。双击间隔是Windows操作系统设置。 3.是非题:KeyDown事件过程可以使用KeyCode参数判断用户输入的是4还是$。 错误。...16.是非题:保护工作簿的密码可防止用户查看你的VBA代码。 错误。必须使用“项目工程属性”对话框中的“保护”选项卡,将VBA工程与设置给工作簿的任何密码分开锁定。...21.当程序在断点处暂停时,确定程序变量当前值的最快方法是什么? 将鼠标指针悬停在变量名称上。 22.是非题:监视窗口中的值在程序运行时会不断更新。 错误。监视值仅在程序进入中断模式时才更新。...29.如何验证仅接受包含某些值的属性的数据? 通过在Property Let过程中放置代码来检查新的属性值,并仅在正确的情况下接受它。 30.如何在代码中引用对象属性?...31.类方法与常规VBA过程有何不同? 除了在类模块中之外,没有什么不同。 32.什么是辅助方法? 仅应从类内部而不是类外部的代码调用的方法。 33.在销毁对象之前触发了什么事件?
当持有锁时,除一种特殊情况外,其他在同域下的脚本无法获得相同资源的锁。接下来我们就说说这个特殊情况。 执行流程是什么样子的呢? 申请锁。 在异步任务中锁定时完成工作。 任务完成时候锁自动释放。...如果用户使用其中一个打开的 Tab 购买了一定数量的股票,则两个 Tab 必须保持同步,以避免出现客户错误地再次进行交易的情况。一个简单的选择是一次只允许应用程序的一个 Tab 或窗口。...这允许一个在队列中的锁请求被中止。如果在特定时间段内未批准锁定请求,则可以使用超时来中止锁定请求。...如果是 true,则锁请求仅在不需要排队时才会被授予。换句话说,在没有任何其他等待的情况下,锁请求才会被授予,否则将返回 null。 但是请注意,当返回 null 时,该函数将不会同步执行。...这些或多或少是由于锁本身的概念,而不是由于 API 中的任何错误。 死锁 死锁的概念与并发关联。当进程由于每个部分都在因请求无法满足而等待,导致的无法继续执行时,就会发生死锁。
二、避免死锁的方法 避免死锁可以概括成三种方法: 固定加锁的顺序(针对锁顺序死锁) 开放调用(针对对象之间协作造成的死锁) 使用定时锁-->tryLock() 如果等待获取锁时间超时,则抛出异常而不是一直等待...2.2开放调用避免死锁 在协作对象之间发生死锁的例子中,主要是因为在调用某个方法时就需要持有锁,并且在方法内部也调用了其他带锁的方法! 如果在调用某个方法时不需要持有锁,那么这种调用被称为开放调用!...我们可以这样来改造: 同步代码块最好仅被用于保护那些涉及共享状态的操作!...当等待超过时限的时候,tryLock()不会一直等待,而是返回错误信息。...,且不释放 解决:缩减同步代码块范围,最好仅操作共享变量时才加锁 永久等待 解决:使用tryLock()定时锁,超过时限则返回错误信息 在操作系统层面上看待死锁问题(这是我之前做的笔记、很浅显): 操作系统第五篇
你可以在第26课中了解有关处理运行时错误的信息。 相反,bug不会阻止程序运行。而是,它导致程序产生不正确的结果。例如,将数据插入工作表错误部分的数据输入程序被视为bug。...由于实际上存在无限数量的潜在bug,因此无法列出或描述Excel程序中可能出现的错误。以这种方式思考——程序应该做的任何事情都可能做错。 虽然VBA会向你报告错误,但没有对于bug的处理机制。...如果尝试使用未声明的变量,则VBA会显示一条错误消息。这样可以防止漏掉拼写错误的变量名。如果没有OptionExplicit,则仅将拼写错误的变量名视为新变量,并且结果很可能是bug。...仅在确实需要时才使用全局变量和公共变量。尽管这种类型的变量似乎可以简化某些编程任务,但它们容易出现问题。几乎所有需要全局变量或公共变量的情况都可以使用过程参数和函数返回值进行处理。...当程序在中断模式下暂停时,可以单步执行代码以查找错误。 VBA的监视可让你在程序执行期间跟踪程序变量的值。 自我测评 1.运行时错误与程序错误有何不同? 2.如何在代码中设置断点?
0x00 前言 邮件钓鱼通常出现在APT攻击里面,但是在日常生活中我们的邮箱也会经常出现一些钓鱼邮件,为了更好的了解原理,我在本地探索了一下宏上线钓鱼邮件,分享出来供师傅们交流。...,当文档打开会执行自动宏,如果宏被执行,它会去检测当前模板是否被感染病毒,如果没有被感染,它会将释放自身的病毒代码。...当模板被感染之后,系统中任何一个文档被打开,都会执行模板中的病毒,宏病毒进行传播 宏病毒的感染方案就是让宏在这两类文件之间互相感染,即数据文档、文档模板 宏病毒也可以通过网络进行传播,譬如电子邮件 0x02...vba文件,后续需要进行混淆,vba内容如下 Sub Hello() Dim X X=MsgBox("Hello VBS") 科普一下vba文件: VBA(Visual Basic for Applications...通过信息收集得知目标的 Office 版本,利用 VBA stomping 使宏被特定版本的 Office 打开时才会执行恶意行为宏代码,除此之外的 Office 版本打开时执行正常宏代码 ?
3、ExeCodes: 当 P-Code 执行一次之后,其会被一种标记化的形式存储在 __SRP__ 流中,之后再次运行时会提高 VBA 的执行速度,可以将其删除,并不影响宏的执行。...通过信息收集得知目标的 Office 版本,利用 VBA stomping 使宏被特定版本的 Office 打开时才会执行恶意行为宏代码,除此之外的 Office 版本打开时执行正常宏代码 目前 VBA...2007(x86) 8800 2010(x86) 9700 2013(x86) A300 2016(x86) AF00 在 VBA 编辑器中隐藏宏 可以在 VBA 编辑器中隐藏真正的宏,只需要修改 PROJECT...当启动 word 时,会启动 excel 并弹出 excel 旧版宏警告,点击禁用宏后还会启动第二个 excel,一共启动五次,用户体验极差,当 excel 处理完成之后才会弹出 Word 文档 ?...(Win32_ComputerSystem 类中 PartOfDomain 对象),检测 Bios 信息,检测即插即用信息(Win32_PnPEntity),检查用户名,检测文件名 hash,检测文件名是否被易名
但是有一点需要说明,无论任何模式下,Online DDL开始之前都需要一个短时间排它锁(exclusive)来准备环境,所以alter命令发出后,会首先等待该表上的其它操作完成,在alter命令之后的请求会出现等待...操作 支持方式 Allow R/W 说明 add/create index online 允许读写 当表上有FULLTEXT索引除外,需要锁表,阻塞写 drop index online 允许读写 操作元数据...使用Inplace方式执行的DDL,发生错误或被KILL时,需要一定时间的回滚期,执行时间越长,回滚时间越长。...Online DDL并不是所有时间段的Online,在特定时间段需要加元数据锁或其他锁。 允许并发DML的DDL,可能会导致Duplicate entry问题。...针对DDL,下面整理下几点干货建议,之后执行DDL语句时可以参考下: 执行DDL前查看下该表有没有被事务占用,防止出现MDL锁。 执行DDL前确保datadir,tmpdir磁盘空间足够。
其中对实例方法加锁时容易出现错误的使用,比如下面的伪代码: // 假设SyncClass中的非静态increase方法加了同步锁Thread t1 = new Thread(new SyncClass(...因为现在计算机的运行速度非常快,而且大多数都是多核心的,就算优先级低的线程也可能优先被CPU执行。...这是一个对申请锁时间进行限制的方法,在限定时间内会自旋式地重复申请锁,直到申请成功返回true,当超出限定时间还未获取到锁就会返回false。...其方法含义如下: await():使当前线程等待,同时释放当前锁,当其他线程调用signal()或者signalAll()时,线程会重新获得锁继续执行。或者当线程被中断时,也能跳出等待。...public CountDownLatch(int count) 在实例化对象时可传入计时线程数,当一个线程完成任务时可用countDown()方法申明该项任务已完成,用await等待全部任务完成之后才会继续执行
在Custom UI Editor中保存该文件,首次在Excel中打开时,会出现关于Initialize和HideAlignmentGroup过程的错误消息提示,因为这两个过程仍然没有在标准的VBA模块中找到...,单击“确定”关闭错误消息。...注意,当打开工作簿时,创建ribbon对象。编辑VBA代码可能销毁这个新创建的对象。试图使与销毁对象相关的控件无效是不可能的,唯一的办法是重新创建ribbon对象重新打开该工作簿。...在Excel 2010及之后的版本中,InvalidateControlMso方法仅使“开始”选项卡无效——仅仅是该选项卡被无效,在“开始”选项卡中的控件实际上没有被无效。...当打开工作簿或者当其中一个或两个控件被无效时执行该回调。
如果确实如此,ValueError则被提出。在大多数情况下,信号量用于保护容量有限的资源。如果信号量被释放太多次,则表明存在错误。如果没有给出,则值默认为1。...当状态被锁定时,acquire() 阻塞直到release()另一个线程中的调用将其更改为解锁,然后该acquire()调用将其重置为已锁定并返回。...信号量对象这是计算机科学史上最古老的同步原语之一,由早期的荷兰计算机科学家Edsger W. Dijkstra(他使用P()而V()不是acquire()和release())发明。...is_set()isSet() 当且仅当内部标志为真时返回true。在2.6版中更改:添加了is_set()拼写。set() 将内部标志设置为true。等待它变为真的所有线程都被唤醒。...仅通过从通过线程模块创建的非守护程序线程执行导入,可以最容易地实现这一点。直接使用线程模块创建的守护程序线程和线程将需要一些其他形式的同步,以确保在系统关闭开始后它们不会尝试导入。
6.假设一个控件被重叠控件隐藏。在运行时,如何使隐藏的控件可见? 7.如何防止用户通过制表键将焦点移到控件上? 8.如何命名事件过程?...14.如何定义在一天的特定时间执行的代码? 15.如何允许用户查看工作簿但不能进行修改? 16.是非题:保护工作簿的密码可防止用户查看你的VBA代码。 17.是非题:一个bug阻止程序运行。...21.当程序在断点处暂停时,确定程序变量当前值的最快方法是什么? 22.是非题:监视窗口中的值在程序运行时会不断更新。 23.VBA如何将bugs报告给程序员?...25.自定义VBA类的代码放在哪里? 26.是非题:自定义VBA类可以包含可视化界面。 27.如何创建只读属性?...29.如何验证仅接受包含某些值的属性的数据? 30.如何在代码中引用对象属性? 31.类方法与常规VBA过程有何不同? 32.什么是辅助方法? 33.在销毁对象之前触发了什么事件?
计算机系统中,如果系统的资源分配策略不当,更常见的可能是程序员写的程序有错误等,则会导致进程因竞争资源不当而产生死锁的现象。锁有多种实现方式,比如意向锁,共享-排他锁,锁表,树形协议,时间戳协议等等。...这样将降低系统的吞吐量,因为事务持有的任何锁只有在事务提交或回滚时才会释放。即使不出现死锁的情况,访问同一资源的其它事务也会被阻塞,等待该事务完成。 保持事务简短并在一个批处理中。...在同一数据库中并发执行多个需要长时间运行的事务时通常发生死锁。事务运行时间越长,其持有排它锁或更新锁的时间也就越长,从而堵塞了其它活动并可能导致死锁。...数据库表被锁的现象 在操作数据库时,有的时候我们会很突然的遇到数据库报下面这个错误 ORA-00054: resource busy and acquire with NOWAIT specified...nowait关键字的意思是当你要锁定某一资源时,如果该资源正被别的用户锁定则直接返回错误信息,而不是等待别的用户解锁。 第二个原因是你执行了ddl语句并且这个ddl 无法获得需要的锁。
: 【初始状态】仅是在语言层面创建了线程对象,还未与操作系统线程关联 【可运行状态】(就绪状态)指该线程已经被创建(与操作系统线程关联),可以由 CPU 调度执行 【运行状态】指获取了 CPU 时间片运行中的状态...问题产生原因: JVM存在自动编写机制,当出现同级别的代码时,JVM会自动优化代码顺序,加快速度,可能导致代码执行顺序错乱 /*原子性*/ 当前线程内的代码是否为一次执行?...问题产生原因: 线程是由CPU调度使用的,倘若线程调度到达指定时间片,可能就会导致线程内代码未完成执行而被其他线程使用的情况 然后我们需要知道Volatile对这三种特性的可控度: /*可见性*...set时才会构造map对象 II.不同的ThreadLocal使用不同的数据结构 III.扩容时阈值为0.75,每次扩容一倍;存储时采用开放寻址法 /*key*/ 这里的...key采用的是弱引用: 1.Thread可能需要长时间运行(如线程池的线程),如果key不再被使用,可以被JVM的GC所释放 2.GC仅使key释放,但是value不会释放:
当时为什么要引入偏向锁? 偏向锁是 HotSpot 虚拟机使用的一项优化技术,能够减少无竞争锁定时的开销。...monitor 首次锁定时偏向该线程,这样就可以避免同一对象的后续同步操作步骤需要原子指令。从历史上看,偏向锁使得 JVM 的性能得到了显著改善。 现在为什么又要废弃偏向锁?...主要的意思是说: 每个对象都与一个 monitor 相关联。当且仅当 monitor 对象有一个所有者时才会被锁定。...当对象被当做同步锁并有一个线程抢到了锁时,锁标志位还是 01,“是否偏向锁”标志位设置为 1,并且记录抢到锁的线程 ID,表示进入偏向锁状态。 一旦出现其它线程竞争锁资源,偏向锁就会被撤销。...,会使用逃逸分析技术,判断同步块的锁对象是否只能被一个对象访问,没有发布到其它线程。
如果我们在刀法招式的基础之上,再掌握更多的“磨刀”心法,那么我们的刀用起来才会又好又快。 所以今天主要和大家分享——VBA“磨刀”心法之程序调试。 1.什么是程序调试?...所谓的程序调试就是:在某个计算机程序正式投入使用之前,利用一些工具或方法找出程序的漏洞或错误,从而保证该程序能够正常运行不出错。 这样说,好像仍然不是很明白。我们举个例子,帮助大家更好消化。...(1)我们首次先打开VBA编辑器 (2)鼠标点选「断点」位置 比如,我们在「For i = 3 To 12」处设置「断点」,那么我只需要将鼠标挪至每行代码前的「灰色框体」上,然后轻轻点击「鼠标左键」,该位置会出现一个...所谓「断点」就是当VBA遇到手动设置的「断点」,运行中的程序将会自动停止,并「批黄断点处代码」,等待下一步执行指令。...(3)「单步调试」查找错误出处 此时为了找到程序程序出错的位置和原因,我们需要使用「单步调试」,也就是一句句执行,查看每行代码执行情况,更加精准的排查错误。
image.png 如果把VBA比作一门刀法,那么经过前面内容的操练,大家已经掌握了很多实用的招式。 如果我们在刀法招式的基础之上,再掌握更多的“磨刀”心法,那么我们的刀用起来才会又好又快。...所谓的程序调试就是:在某个计算机程序正式投入使用之前,利用一些工具或方法找出程序的漏洞或错误,从而保证该程序能够正常运行不出错。 这样说,好像仍然不是很明白。我们举个例子,帮助大家更好消化。...所谓「断点」就是当VBA遇到手动设置的「断点」,运行中的程序将会自动停止,并「批黄断点处代码」,等待下一步执行指令。...image.png (3)「单步调试」查找错误出处 此时为了找到程序程序出错的位置和原因,我们需要使用「单步调试」,也就是一句句执行,查看每行代码执行情况,更加精准的排查错误。...(2)单步调试 单步调试实现程序逐句执行,快速定位错误代码位置,便于及时排查错误。 (3)添加监视 实时监控需要关注的变量或内容,精准定位错误原因。
避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。 尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制。...对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况。 问题三:资源限制 资源限制是指在进行并发编程时,程序的执行速度受限于计算机硬件资源或软件资源。...赃读 读取全局变量时,此变量已经被其他线程修改过了,就会出现赃读。...当A线程访问X1方法时,B线程想访问X1,必须等待A执行完,释放对象锁; 当A在访问X1,B想访问X3(),无需等待,直接访问。 当A在访问X1,B想访问X2(),需要等待A执行完。...如果不可重入的话,会造成死锁; 可重入锁,支持在父子类继承的环境:子类可以通过"可重入锁"调用父类的同步方法。 异常会释放锁 当一个线程执行出现异常,会释放他所持有的所有锁。
1、变量的概念 变量是用于保存程序运行过程中的临时值,和常量不同的是,在程序运行过程中变量保存的值是可以被改变的。 2、声明变量 在使用变量时,需要告诉VBA程序变量的名称和数据类型,即声明变量。...这里有个例需要说明,除了let语句外,在后期遇到将对象类型赋值给变量的情况时,需要用set语句来赋值,后期遇到时候会再讲解。...在过程结束时,占用的内存空间就会释放,有利于节省计算机内存。在不同的过程中可以使用相同名称的过程级变量。...那么当程序开始运行时,模块级和工程级的变量就会出现在内存中,而过程级变量时一个SUB过程开始后才储存到内存中,退出SUB过程后,变量占用的内存也会释放。...只有当程序退出时候静态变量才会重置。 其实模块级变量和工程级变量的结果和静态变量时一样的,只有当程序退出时占用的内存才会释放。
当时为什么要引入偏向锁? 偏向锁是 HotSpot 虚拟机使用的一项优化技术,能够减少无竞争锁定时的开销。...monitor 首次锁定时偏向该线程,这样就可以避免同一对象的后续同步操作步骤需要原子指令。从历史上看,偏向锁使得 JVM 的性能得到了显著改善。 现在为什么又要废弃偏向锁?...当且仅当 monitor 对象有一个所有者时才会被锁定。...当对象被当做同步锁并有一个线程抢到了锁时,锁标志位还是 01,“是否偏向锁”标志位设置为 1,并且记录抢到锁的线程 ID,表示进入偏向锁状态。 一旦出现其它线程竞争锁资源,偏向锁就会被撤销。...,会使用逃逸分析技术,判断同步块的锁对象是否只能被一个对象访问,没有发布到其它线程。
这种现象只出现一次——计数无法被重置。如果需要重置计数,请考虑使用 CyclicBarrier。...sleep(long)方法仅释放CPU使用权,锁仍然占用;线程被放入超时等待队列,与yield相比,它会使线程较长时间得不到运行。...50、怎么检测一个线程是否拥有锁? 在java.lang.Thread中有一个方法叫holdsLock(),它返回true如果当且仅当当前线程拥有某个具体对象的锁。...当一个线程需要调用对象的wait()方法的时候,这个线程必须拥有该对象的锁,接着它就会释放这个对象锁并进入等待状态直到其他线程调用这个对象上的notify()方法。...同样的,当一个线程需要调用对象的notify()方法时,它会释放这个对象的锁,以便其他在等待的线程就可以得到这个对象锁。
领取专属 10元无门槛券
手把手带您无忧上云