Shadow

解析大型系统自动更新

我们两清 提交于 2020-10-11 00:32:34
C/S架构的应用程序需要支持自动更新功能,当新版本程序发布后,正在运行的客户端能检测到新版本的程序,通知用户是否下载更新。工作以来参与过几个自动更新模块的设计与维护,撰文总结自动更新模块设计与实现。 自动更新组件主要内容 1 版本比较。旧版本如何检测到新版本,版本信息是程序集自描述的,还是用单独的文件保存。.NET程序集是自描述的,程序集包含以下几种版本信息,每个Assebmly包含三个Version AssemblyFileVersion : 存储在Win32资源中, CLR不关心这个版本号。 AssemblyInformationnalVersion :存储在Win32资源中, CLR不关心这个版本号。 AssemblyVersion: 存储在AssemblyDef manifest metadata table中,CLR会使用这个版本号。 标准版本号物理形式表示为用句点隔开的四段数字,如下面的代码示例所示。 <major version>.<minor version>.<build number>.<revision> 实际使用中,我们一般只用到前面三段。即 <major version>.<minor version>.<build number> 版本比较举例: 旧版本 2.4.1.2 新版本 2.4.1. 3 或 2.4. 2 .2 或2. 5 .1.2。 2

C和C++安全编码笔记:文件I/O

♀尐吖头ヾ 提交于 2020-10-10 04:15:59
C和C++程序通常会对文件进行读写,并将此作为它们正常操作的一部分。不计其数的漏洞正是由这些程序与文件系统(其操作由底层操作系统定义)交互方式的不规则性而产生的。这些漏洞最常由文件的识别问题、特权管理不善,以及竞争条件导致。 8.1 文件I/O基础:安全地执行文件I/O会是一项艰巨的任务,一方面是因为有这么多的接口、操作系统和文件系统的变化。最重要的是,每种操作系统都可以用各种各样的文件系统。 文件系统:许多UNIX和类UNIX操作系统都使用UNIX文件系统(UNIX File System, UFS)。Linux支持广泛的文件系统,包括早期的MINIX、MS-DOS和ext2文件系统。Linux还支持较新的日志文件系统,如ext4、日志文件系统(Journaled File System, JFS)和ReiserFS等。此外,Linux支持加密文件系统(Cryptographic File System, CFS)和虚拟文件系统/proc。Mac OS X为几种不同的文件系统提供内置支持,包括Mac OS分层文件系统扩展格式(Hierarchical File System Extended Format, HFS+)、BSD标准文件系统格式(UFS),网络文件系统(Network File System, NFS)、ISO 9660(用于CD-ROM),MS-DOS, SMB

基于蜜獾家族MCF公链系统发行加密数字钱包教程

☆樱花仙子☆ 提交于 2020-10-07 11:05:46
基于蜜獾家族MCF公链系统发行加密数字钱包教程 ​区块链是互联网的第二个时代! 每一个企业都需要一个网站,一个公众号,一个企业自己创建的钱包,拥抱未来。 此教程手把手教你如何搭建自己企业的区块链加密钱包。 在这里插入图片描述 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201005112301472.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nmNzZG4ubmV0L01DRmFtaWx5,size_16,color_FFFFFF,t_70#pic_center 来源: oschina 链接: https://my.oschina.net/u/4367530/blog/4661414

面试官问:为什么 Java 线程没有 Running 状态?我懵了

孤人 提交于 2020-10-06 09:27:15
什么是 RUNNABLE? 与传统的ready状态的区别 与传统的running状态的区别 当I/O阻塞时 如何看待RUNNABLE状态? Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事。具体而言,这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态: 什么是 RUNNABLE? 直接看它的 Javadoc 中的说明: 一个在 JVM 中执行的线程处于这一状态中。(A thread executing in the Java virtual machine is in this state.) 而传统的进(线)程状态一般划分如下: 注:这里的进程指早期的单线程进程,这里所谓进程状态实质就是线程状态。 那么 runnable 与图中的 ready 与 running 区别在哪呢? 与传统的ready状态的区别 更具体点,javadoc 中是这样说的: 处于 runnable 状态下的线程正在 Java 虚拟机中执行,但它可能正在等待来自于操作系统的其它资源,比如处理器。 A thread in the runnable state is executing in the Java virtual machine but it may be waiting forother resources from

南昌市红谷滩区·高通中国·影创联合创新中心揭幕并投入使用

微笑、不失礼 提交于 2020-10-06 07:39:19
2020年9月4日,由南昌市红谷滩区、高通(中国)控股有限公司、影创科技共同成立的“红谷滩区·高通中国·影创联合创新中心”揭牌仪式在南昌市红谷滩区举行,标志着该联合创新中心正式投入使用。 南昌市委副书记、市长黄喜忠(中),高通公司中国区董事长孟樸(左),影创科技董事长孙立(右)出席仪式并共同为联合创新中心揭牌 南昌市委副书记、市长黄喜忠,高通公司中国区董事长孟樸,影创科技董事长孙立出席仪式并共同为联合创新中心揭牌。揭牌仪式后,与会领导和嘉宾共同参观了联合创新中心。 在2019年10月第二届世界VR产业大会期间,南昌市政府、高通(中国)控股有限公司、上海影创信息科技有限公司举行签约仪式,宣布携手成立联合创新中心,以此拓宽南昌本地企业的研发及自主创新能力,促进XR(扩展现实)及物联网产业发展。 南昌市红谷滩区·高通中国·影创联合创新中心内景 联合创新中心位于南昌VR产业基地,面积2000平米。联合创新中心由展示中心和创新实验室组成。其中,展示中心展示了高通技术支持的终端产品以及应用案例,将帮助南昌双创企业了解全球最新技术、行业趋势、应用场景与案例,拓宽双创企业的开发思路。创新实验室将配备先进的测试仪器,依托高通全球领先的无线技术,为符合条件的创新创业企业提供技术评估、初期研发指导及实验性测试。双创企业可通过创新实验室,了解高通公司的技术,提高其研发和自主创新能力,从而提升自身在VR

matplotlib基础绘图命令之pie

点点圈 提交于 2020-10-06 04:27:52
在matplotlib中,pie方法用于绘制饼图,基本用法如下 plt.pie(x=[1, 2, 3, 4]) 输出的结果如下 这样的饼图并没有任何实用价值,为了有效的展示信息,至少我们还需要显示数据的标签和百分比的数值。此时就需要调整参数,pie方法常用的参数有以下几个 labels, 设置饼图中每部分的标签 autopct, 设置百分比信息的字符串格式化方式,默认值为None,不显示百分比 shadow, 设置饼图的阴影,使得看上去有立体感,默认值为False startangle, 饼图中第一个部分的起始角度, radius, 饼图的半径,数值越大,饼图越大 counterclock, 设置饼图的方向,默认为True,表示逆时针方向,值为False时为顺时针方向 colors,调色盘,默认值为None, 会使用默认的调色盘,所以通常情况下,不需要设置该参数 explode, 该参数用于突出显示饼图中的指定部分 下面来具体看下其中几个参数的用法 labels labels指定每个部分的标签,用法如下 plt.pie(x=[1, 2, 3, 4], labels=['sampleA', 'sampleB', 'sampleC', 'sampleD']) 输出结果如下 autopct autopct设置饼图上的标记信息,有两种设置方式,第一种,设置字符串格式化,用法如下 plt

DeFi Compound开发REST API

被刻印的时光 ゝ 提交于 2020-10-06 01:30:06
在这个教程中,我们将学习如何为DeFi协议Compound的智能合约创建一个可以通过HTTP访问的API开发接口,并学习如何使用Infura作为以太坊网络和应用之间的桥梁。 Compound是一个基于以太坊的数字资产借贷利率协议。 Infura 是以太坊和IPFS网络API提供商。下面是我们的Web API实现架构图: 用自己熟悉的语言学习 以太坊DApp开发 : Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart 1、Compound协议的HTTP API设计 在创建访问以太坊智能合约的API之前,我们可以先实现一个可以处理客户端HTTP请求的web应用。 下面是API可能的访问端结点,这些API允许用户从Compound协议存入或赎回加密资产。你可以为Compound协议支持的以太坊ERC-20代币创建更多的访问端结点。 A1、钱包账户ETH余额API :返回钱包中的以太币数量。 GET /wallet-balance/eth/ A2、钱包账户cETH余额API :返回钱包中的cETH代币数量。 GET /wallet-balance/ceth/ A3、Compound协议余额API : 返回钱包已存入Compund协议的以太币数量。 GET /protocol-balance/eth/ A4

汇编程序设计与计算机体系结构软件工程师教程笔记:函数、字符串、浮点运算

别等时光非礼了梦想. 提交于 2020-10-06 00:51:10
《汇编程序设计与计算机体系结构: 软件工程师教程》这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译。中文版是2019年出版的。个人感觉这本书真不错,书中介绍了三种汇编器GAS、NASM、MASM异同,全部示例代码都放在了GitHub上,包括x86和x86_64,并且给出了较多的网络参考资料链接。这里只摘记了NASM和MASM,测试代码仅支持Windows和Linux的x86_64。 6. 函数 6.2 栈内存入门: 栈内存 (stack memory) 是为自动变量而设的一块区域 (这里的自动变量是指局部变量,或者说非动态的变量)。调用函数的时候,需要用栈来保存函数中的局部变量,而函数结束的时候,则需要弃用这些变量。高级语言的一项特征在于它会自行管理栈内存(这有时也叫做运行时栈或运行期栈),相反,汇编语言不会这样做,而是需要你自己去管理。 与栈内存有关的重要事项: (1).栈会在调用函数时增长,并在调用结束时收缩。 (2).栈会在创建(或者说推入/压入)局部变量时增长,并在弃用(或者说弹出)局部变量时收缩。 (3).每个进程或线程的栈,其大小受操作系统限制,例如Linux/Mac系统默认是8MB,Windows默认是1MB。 (4).每次调用函数(这也包括调用主函数main(),以及递归地调用自身)都会出现对应的栈帧(stack frame)

JVM系列之:JIT中的Virtual Call

被刻印的时光 ゝ 提交于 2020-10-05 06:47:52
简介 什么是Virtual Call?Virtual Call在java中的实现是怎么样的?Virtual Call在JIT中有没有优化? 所有的答案看完这篇文章就明白了。 Virtual Call和它的本质 有用过PrintAssembly的朋友,可能会在反编译的汇编代码中发现有些方法调用的说明是invokevirtual,实际上这个invokevirtual就是Virtual Call。 Virtual Call是什么呢? 面向对象的编程语言基本上都支持方法的重写,我们考虑下面的情况: private static class CustObj { public void methodCall() { if(System.currentTimeMillis()== 0){ System.out.println("CustObj is very good!"); } } } private static class CustObj2 extends CustObj { public final void methodCall() { if(System.currentTimeMillis()== 0){ System.out.println("CustObj2 is very good!"); } } } 我们定义了两个类,CustObj是父类CustObj2是子类

Linux_day05_02_计划任务

巧了我就是萌 提交于 2020-10-04 13:35:36
计划任务 Linux计划任务 未来在某一时间点执行一次任务:at、batch 周期性的运行某个任务:crond at命令 需要安装:yum -y install at [ root@localhost ~ ] # at --help at: invalid option -- '-' Usage: at [ -V ] [ -q x ] [ -f file ] [ -mMlbv ] timespec .. . at [ -V ] [ -q x ] [ -f file ] [ -mMlbv ] -t time at -c job .. . atq [ -V ] [ -q x ] at [ -rd ] job .. . atrm [ -V ] job .. . batch 用法说明:at 参数 时间 参数 -m:当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出 -I:atq的别名 -d:atrm的别名 -v:显示任务将被执行的时间 -c:打印任务的内容到标准输出 -V:显示版本信息 -q:使用指定队列 -f:从指定文件读入任务,而不是从标准输入读入 -t:一时间参数的形式提交要运行的任务 时间 HH::MM [YYYY-MM-DD] moon, midnight, teatime tomorrow now + num {minutes, hours, days, weeks}