python 四则混合运算计算器 思路:(1)获取一个运算公式(四则混合)
(2)对获取的公式进行处理,因为Input获取的是字符串形式,这里处
理时将之转换成列表,并对其中包含的多位数进行处理.见DealFormula函数
(3)对处理后返回的计算式列以此进行先乘除后加减操作得到最终结果
附:这里的函数Fun_Mul,Fun_Div,Fun_Sub个人感觉能进行更适当的处理,
但由于水平问题,这里并没有进行优化,希望浏览的大神们能给出建议>
import time#获取程序运行时间 start = time.clock() class Calculator(object): '''这是一个四则混合运算计算器''' def __init__(self): self.name = Calculator self.formula=input('Please input formula:').strip()#让用户输入公式 self.formula_list=[]#定以一个空列表 def Fun_Mul(self): #计算公式中所有乘法运算 i=0 while i<len(self.formula_list): if self.formula_list[i] == '*' and (i+2)!=len(self.formula_list): Sum=int(self.formula_list[i-1])*int(self.formula_list[i+1]) self.formula_list[(i-1):(i+2)]=[Sum] i=i-2 elif self.formula_list[i] == '*' and (i+2)==len(self.formula_list): Sum=int(self.formula_list[i-1])*int(self.formula_list[i+1]) self.formula_list[(i-1):]=[Sum] else: i=i+1 def Fun_Div(self): #计算公式中所有除法运算 i=0 while i<len(self.formula_list): if self.formula_list[i] == '/' and (i+2)!=len(self.formula_list): Sum=int(self.formula_list[i-1])//int(self.formula_list[i+1]) self.formula_list[(i-1):(i+2)]=[Sum] i=i-2 elif self.formula_list[i] == '/' and (i+2)==len(self.
直接贴tomcat8中的 server.xml 关键配置
<Service name="insuranceMall"> <Connector port="6666" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="6667" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="insuranceMall" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context docBase="/data/project/insurance-mall" path="" reloadable="false" /> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/var/log/tomcat9" prefix="localhost_access_log_insuranceMall" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine> </Service> 同样在tomcat9 启动过程报错如下
22-Feb-2020 17:26:27.854 SEVERE [main] org.apache.catalina.util.LifecycleBase.handleSubClassException Failed to start component [Connector[AJP/1.3-6667]] org.apache.catalina.LifecycleException: Protocol handler start failed at org.
本文参考书目为《深入浅出图神经网络:GNN原理解析》
什么是图数据? 在计算机科学中,图数据是一种十分常见的数据结构(参考离散数学、数据结构等学科)。从数据角度出发,图被广泛用以描述、建模关系型数据,例如:社交网络、交通网络等。数学上,图由顶点(Vertex)及连接顶点的边(Edge)构成,即图可以表示为顶点和边的集合,记为G=(V,E),其中V为顶点集,E为边集。图的一些概念,如:邻接矩阵、度、连通性、有向(无向)等在此不做详细介绍。
图信号与图拉普拉斯矩阵 与离散时间信号不同,图信号定义在节点上,节点存在固有的关联结构,图数据处理(Graph Signal Processing, GSP)在考虑节点上信号强度的同时,还应考虑图节点之间的拓扑关系(即图上节点之间的关联)。
以下给出图信号定义:给定图G=(V,E),V为节点集合,长度为N,图信号是一种描述V→R的映射,向量表示:
每个x代表对应下标的节点上的信号强度,如下图所示。
介绍完图信号,要介绍一个研究图结构性质十分重要的工具——拉普拉斯矩阵。
图的拉普拉斯矩阵定义如下:(图源:百度百科)
由定义知,A为图的邻接矩阵,D为对角矩阵是图的度矩阵,单一节点上定义如下:
元素级别定义如下(下两张图源:图信号处理学习笔记(1):图信号基本知识及其变换)
也可以对拉普拉斯矩阵元素进行标准化:
拉普拉斯矩阵就简要介绍到此,附上百度百科拉普拉斯矩阵定义及性质链接拉普拉斯矩阵_百度百科
拉普拉斯算子 拉普拉斯矩阵定义来源于拉普拉斯算子,该算子是n维欧式空间中的一个二阶微分算子,定义为梯度的散度(图源百度百科):
给出一阶离散函数导数计算公式(图源:拉普拉斯算子)
将该算子作用域退化到离散二维图像空间,就是边缘检测算子,示例见下图:
原理如下:
在图信号中,拉普拉斯算子描述了中心节点与邻居节点之间的信号差异。
结论:拉普拉斯矩阵就是图上的拉普拉斯算子,或者说是离散的拉普拉斯算子。拉普拉斯矩阵与拉普拉斯算子的关系
傅里叶变换 传统的傅里叶变换将信号从时域空间转化到了频域空间,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。(图源:傅里叶变换有什么用?_百度知道)
傅里叶变换公式及逆傅里叶变换公式如下图所示:
以声音信号为例,对输入的声音信号进行傅里叶变换,将其转化到频域中,则可以在频域中对不同特征频率的声音信号进行不同的处理,如提高频率、降噪等操作。
举个比较好理解的例子,电脑、智能手机上都不乏有声音处理软件,通过你输入的声音信号,电脑和智能手机通过其强大的计算能力在极短时间内把你的声音做傅里叶变换,把特定频段频率增加,就可以很轻松地完成男声到女声的转变。网络一线牵,“珍惜”这段缘。
傅里叶变换也广泛应用于数字图像处理,这里就不展开了。
图傅里叶变换 类比傅里叶变化,图傅里叶变换对于图信号的处理,也体现在将其从空域转化到频域。
由于图的拉普拉斯矩阵L是实对称矩阵,都可以被正交对角化,即:
式中V是一个N阶正交矩阵,即:
V中N个元素表示L的N个特征向量,由于V是正交矩阵,所以其N个特性向量彼此线性无关,λ是特征值组成的矩阵,且特征值矩阵中的元素升序排列,即:
由此定义图傅里叶变换(Graph Fourier Transform, GFT):对于任意一个图G上的信号x,其傅里叶变换为:
特征向量为傅里叶基,等式左侧是x在第k个傅里叶基上的傅里叶系数,本质上,傅里叶系数是图信号在傅里叶基上的投影,衡量了二者之间的相似度。矩阵形式计算所有傅里叶系数公式如下:
类比于逆傅里叶变换,给出逆图傅里叶变换(Inverse Graph Fourier Transform, IGFT):
图傅里叶变换与图信号频率之间的关系 用以描述各条边上信号的差值进行加和,刻画图信号整体平滑度的标量称之为总变差,表达式如下:
根据图傅里叶变换表达式改写总变差表达式,如下:
由表达式可知,总变差与特征值之间存在非常直接的线性关系,总变差是所有特征值的一个线性组合,其权重是图信号所对应的傅里叶系数的平方。总变差衡量图信号整体平滑度,可将特征值等价于频率,特征值越低,频率越低,相近节点信号趋于一致;频率越高,相近节点上信号差异越大。
图信号所有傅里叶系数合称图信号的频谱。
本文为《深入浅出图神经网络:GNN原理解析》的一篇学习笔记,书中出现的一些概念、定义,不是特别明白的就参考了各方资料(百度百科、CSDN博客、知乎等),仅作为学习分享。
后续还会继续分享图神经网络相关内容,欢迎各位批评指正。
前言: 作为一个小白加入实验室后寒假需要自己动手搭建一个神经网络来完成脑部肿瘤的分割识别,网上几个阅读量比较大的博客都讲的比较详细,但是发现基本上都是灰度图输入,灰度图输出,而我的数据集为彩色图片要输出二值化(黑白)预测图片,而且很多的博客代码运行会有很多问题,通过学习了几个博主的博客和研究了几份代码之后完成自己的第一个完整图像分割编写,这边文章主要是针对彩图数据集输入,二分类,输出黑白图片来表示分割,这里参考的博主的博客如下:
主要结构:
U-net:运行你的第一个U-net进行图像分割
U-net入门--纠错过程
因为这里的网络我更改并适用于我的数据集并不能很好的运行,通过几天的调试发现问题还是在网络中,但是因为网络是黑盒运行,我也没有太好的解决方法,所以把网络结构更改为api调用,运行结构不错。
unet模型部分的api调用参考:
全卷积神经网络FCN模型Unet 图像分割项目实践
建议: 因为我的代码主要基于第一个链接的博客进行改动,所以建议先下载该博主的github代码,并阅读纠错过程先对部分进行改动,然后先尝试自行分析代码,如果是小白切记不要心浮气躁,不然代码一行都读不进去....(个人经验),如果实在读不懂,再来对比看我的分析与改动,这样至少都代码有一定熟悉度
数据处理: # 创建训练数据 def create_train_data(self): i = 0 print('-'*30) print('Creating training images...') print('-'*30) imgs = glob.glob(self.data_path+"/*."+self.img_type) imgs.sort(key=lambda x: int(x.split('/')[3][:-4])) print(len(imgs)) imgdatas = np.ndarray((len(imgs),self.out_rows,self.out_cols,3), dtype=np.uint8) imglabels = np.ndarray((len(imgs),self.out_rows,self.out_cols,1), dtype=np.uint8) for imgname in imgs: midname = imgname[imgname.rindex("/")+1:] img = load_img(self.data_path + "/" + midname, color_mode='rgb') label = load_img(self.label_path + "/" + midname, grayscale=True) img = img_to_array(img) label = img_to_array(label) imgdatas[i] = img imglabels[i] = label if i % 100 == 0: print('Done: {0}/{1} images'.
java.lang.IllegalArgumentException: Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.at org.apache.shiro.authz.permission.WildcardPermission.setParts(WildcardPermission.java:155)
at org.apache.shiro.authz.permission.WildcardPermission.<init>(WildcardPermission.java:144)
at org.apache.shiro.authz.permission.WildcardPermission.<init>(WildcardPermission.java:140)
at org.apache.shiro.authz.permission.WildcardPermissionResolver.resolvePermission(WildcardPermissionResolver.java:41)
at org.apache.shiro.realm.AuthorizingRealm.resolvePermissions(AuthorizingRealm.java:434)
at org.apache.shiro.realm.AuthorizingRealm.getPermissions(AuthorizingRealm.java:410)
at org.apache.shiro.realm.AuthorizingRealm.isPermitted(AuthorizingRealm.java:468)
at org.apache.shiro.realm.AuthorizingRealm.isPermitted(AuthorizingRealm.java:463)
通配符不能为null或空 是什么?? 解决思路,
debug发现,没有获取到相应的权限,获取的用户权限为空数组。
去把sql拷下来,查询 发现有数据。。但是有一条数据为null;
继续分析sql,发现是分配了两个角色。但有一个角色没有分配任何权限导致查出来为null,把用户角色改为只有一个且有权限这个。。。再次测试。通过。!!
一 . 一 般 命 令
1.AT+CGMI 给出模块厂商的标识。
2.AT+CGMM 获得模块标识。这个命令用来得到支持的频带(GSM 900,DCS 1800 或PCS 1900)。当
模块有多频带时,回应可能是不同频带的结合。
3.AT+CGMR 获得模块的软件版本。
4.AT+CGSN 获得 GSM 模块的 IMEI(国际移动设备标识)序列号。
5.AT+CSCS 选择TE 特征设定。这个命令报告TE 用的是哪个状态设定上的 ME。
ME于是可以转换每一个输入的或显示的字母。这个是用来发送.读取或者撰写短信。
6.AT+WPCS 设定电话簿状态。这个特殊的命令报告通过 TE 电话簿所用的状态的 ME。
ME于是可以转换每一个输入的或者显示的字符串字母。这个用来读或者写电话簿的入口。
7.AT+CIMI 获得 IMSI。这命令用来读取或者识别 SIM 卡的IMSI (国际移动签署者标识)。 在读取
IMSI 之前应该先输入 PIN(如果需要 PIN 的话)码。
8.AT+CCID 获得 SIM 卡的标识。这个命令使模块读取 SIM卡上的 EF-CCID 文件。
9.AT+GCAP 获得能力表。(支持的功能)
10.A/ 重复上次命令。只有 A/ 命令不能重复。这命令重复前一个执行的命令。
11.AT+CPOF 关机。这个特殊的命令停止 GSM 软件堆栈和硬件层。命令 AT+CFUN=0 的功能
与+CPOF 相同。
12.AT+CFUN 设定电话机能。这个命令选择移动站点的机能水平。
这篇文章接着上一篇SystemUI之启动未分析完的SystemUI插件化机制相关的代码
SystemUI插件 SystemUI插件提供了一种快速创建SystemUI功能原型的简便方法,可以在运行时更改SystemUI的行为。 通过创建插件实现SysUI中使用的一组基本接口来完成,然后可以比当前更快的速度迭代由该接口控制的部分代码。
简单来说就是可以快速替换SystemUI原有的组件,也叫hook,我们就来分析下其中的原理
SystemUIApplication.startServicesIfNeeded private void startServicesIfNeeded(String[] services) { //省略上一篇文章分析过的代码 ..... Dependency.get(InitController.class).executePostInitTasks(); log.traceEnd(); final Handler mainHandler = new Handler(Looper.getMainLooper()); //调用addPluginListener传入了三个参数,PluginListener, //OverlayPlugin.class,和一个boolean值true Dependency.get(PluginManager.class).addPluginListener( new PluginListener<OverlayPlugin>() { private ArraySet<OverlayPlugin> mOverlays = new ArraySet<>(); @Override public void onPluginConnected(OverlayPlugin plugin, Context pluginContext) { mainHandler.post(new Runnable() { @Override public void run() { StatusBar statusBar = getComponent(StatusBar.class); if (statusBar != null) { plugin.setup(statusBar.getStatusBarWindow(), statusBar.getNavigationBarView(), new Callback(plugin)); } } }); } @Override public void onPluginDisconnected(OverlayPlugin plugin) { mainHandler.
一、主谓宾 1.1、主语 一般是名词,一般是动作的发出者,或者是被描述的对象
1.2、宾语 一般也是名词,一般是主语作用到的对象。
1.3、谓语 如果没有谓语那么这个世界就是静态,谓语就是来让这个主语和谓语产生关系。
常见的是动词
1.4、定语 定语一般形容词比较多,比如 “我喜欢美丽的她”。 这个美丽的就是定语,用来形容主语和宾语的。
1.5、状语 比如时间状语,条件状语
“在今天晚上,我打游戏了”。 这个 在今天晚上就是状语。
二、英文最小结构 2.1、主谓宾 我买了个表
2.2、主系表 她是个女孩。
他看起来很高
系: 就是 “是”的意思
表: 什么样子 大部分是形容词
系动词: 动词里面含有 是 含义的
she looks tall
2.3、主谓 she died
有时候可以省略主语比如 (you) come on
2.4、省略主语的情况 2.4.1、表达有的情况 中文:地上有100块钱 【没有主语】
英文:there is one hundred money.
2.4.2、主语无法确定 中文:今天下雨
英文:it rains
2.5、省略谓语的情况 中文:他很好
省略了谓语 “是”
2.6、省略关联词 中文:山无棱天地和 才敢与君绝
除非。。。 才敢
如果。。。你
2.6、省略主被动关系 中文:我的英语是体育老师教的
英文:我的英语是被体育老师教的
问题产生说明:
我在生成树可视化中,为了将生成树保存为pdf格式的文档。应用了如下代码,运行之后报错。
graph = pydotplus.graph_from_dot_data(dot_data) graph.write_pdf(decision_tree_path) 原因是这个工具不仅需要安装pydotplus这个python包,还需要安装Graphviz这个python tool 这个独立的软件才行。
本人是在windows环境下运行。以下方法都是基于windows环境。
解决办法:
1 确保环境中安装了 pydotplus,GraphViz 这两个模块,如果这两个python包已经成功安装,就可以跳过1中的下面步骤了。
如果没有安装这两个模块按照如下命令安装: pip install pydotplus
pip install graphviz
如果安装了anaconda并且本程序应用的也是anaocnda的环境,需要在anaconda环境下安装,按照如下命令安装: conda install pydotplus
conda install graphviz
我是安装了anaconda的虚拟环境,然后pycharm的base环境也是这anaconda的虚拟环境。还有一种方法也是在pycharm下能够安装。也是我这次应用的安装方法。 以上两张图片是展示我pycharm用anaconda的环境作为python代码的运行环境。
(1)点击上图中+ (2)搜索pydotplus 这个python安装包 (3)处有如下显示就说明安装成功了。
以上三种方式也可以用来别的python安装包。
2 虽然安装了这两个安装包,但是运行的时候还是报同样的错误。原来只安装graphviz这个python包还不够,还得需要安装GraphViz’s executables。Graphviz不是一个python tool,它是一个独立的软件。可以按照如下方法安装。
Graphviz的安装地址请戳下面:
http://www.graphviz.org/
下面上图!!
点击Download 下载windows版本 选择.msi文件,然后逐步安装。 3 配置环境变量
因为我们在2步骤中下载的软件是一个独立的软件,并不像我们平时用pip下载的python包一样直接下载到环境变量路径下。所以我们在执行python程序的时候仍然是找不到这个软件。所以接下来要将graphviz安装目录下的bin文件夹添加到Path环境变量中。这样我们在执行python程序的时候就会去添加的路径下去找它。
首先要记住bin文件的安装路径,并且复制下来。找到windows下添加环境变量的地方。下面上图!! 我的电脑---鼠标右键-----属性,就可以看见下图。然后点击高级系统设置。
依次选择高级---环境变量 (1)鼠标左键点击环境变量---(2)点击编辑----(3)把graphviz的bin的地址粘贴到最后,注意和前边用“;”隔开我的bin文件地址就是C:\Program Files (x86)\Graphviz2.38\bin 4 运行代码看是否还是报错。
报错------->重启编辑器-------->报错-------->重启电脑。
5 如果还是报错
import os os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/' #后面的地址为自己安装graphviz的bin文件的地址
CSS Hack 只在特定浏览器生效的写法就叫css hack
Hack即不合法但生效的写法
主要用于区分不同浏览器
缺点:难理解 难维护 容易失效
替代方案:特性检测
替代方案: 针对性加class
注意:
标准属性写前面,hack写后面
案例-checkbox
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>checkbox</title> <style> .checkbox{ } .checkbox input{ display: none; } .checkbox input + label{ background:url(./checkbox1.png) left center no-repeat; background-size:20px 20px; padding-left:20px; } .checkbox input:checked + label{ background-image:url(./checkbox2.png); } </style> </head> <body> <div class="checkbox"> <input type="checkbox" id="handsome"/> <label for="handsome">我很帅</label> </div> </body> </html> 很巧妙 美化checkbox
虚拟化技术
Hyper-V
KVM
VMware
虚拟化产品
1、Hyper-V Server
(独立OS),免费;
2、集成Hyper-V功能的Windows Server,收费;
1、ProxmoX VE
(独立OS),免费;
2、集成KVM功能的CentOS,免费;
1、ESXi(OS),免费,需要许可证;
2、VMware Workstation,收费;
集群管理平台
SCVMM(收费)
需要AD域
内置
vCenter(收费)
操作难易度
难度 中,
客户端操作,
需要AD域
难度 中,
Web界面,
需要LVM基础
难度 低,
Web界面,
上手容易
硬件支持度
广泛
广泛
很少,
只支持主流服务器厂家
存储技术
ReFS
LVM、ceph、ZFS
VMF
领导厂家
微软
红帽
VMware
特点
win8以上系统可以获得最佳图形性能,首选;
win8以下系统各方面性能都很低,不推荐;
linux系统可获得最佳CPU和IO性能,服务器版首选;
图形性能不佳,桌面版不推荐;
拥有最好的linux图形性能,桌面版首选;
win8以下系统推荐使用;
Windows
支持度
良好,
win8以上最好
一般
良好
Linux
支持度
良好,
内核已内置显卡驱动
最好
良好,
内核已内置显卡驱动
硬件需求
Multiple annotations found at this line:
ArtifactTransferException: Failure to transfer com.fasterxml.jackson.core:jackson-databind:jar:2.9.0.pr3 from http://
repo1.maven.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of
central has elapsed or updates are forced. Original error: Could not transfer artifact com.fasterxml.jackson.core:jackson-
databind:jar:2.9.0.pr3 from/to central (http://repo1.maven.org/maven2): No response received after 60000Missing artifact com.fasterxml.jackson.core:jackson-databind:jar:2.9.0.pr3 其实已经说的很清楚了。
因为 那个 2.9.pr3.jar 已经缓存在了本地, 所以下载(transfer )失败。 只有过了指定的时间间隔, 或 强制更新, 才会去重新 解析。
—— resolution will not be reattempted until the update interval of
利用广度优先搜索(bfs)来解决迷宫问题 一.广度优先搜索(bfs) 1.什么叫bfs 广度优先搜索类似于树的层次遍历;
是利用队列的先进先出的特点来实现的;
通俗来说就是一次访问多条路,分层;
一般来说,广度搜索解决的问题主要为求最优解和最短路径。
2.遍历过程 (1)从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点v1,v2…vi;
(2)分别从这些邻接点出发依次访问它们的邻接点。按照v1,v2…vi的次序(先被访问的顶点的邻接点先于后被访问的顶点的邻接点),访问每一个顶点的所有未被访问过的邻接点。
(3)依次类推,直到图中所有已被访问的顶点的邻接点都被访问到。
第一层第二层第三层第四层 出发v v1 v2 v3 v4 v5 v6 结束v7 bfs:v–>v1–>v2–>v3–>v4–>v5–>v6–>v7
遍历过程结束;
因为广度搜索遍历是一层一层的去搜索从入口到出口的遍历过程,所以在找到出口的时候,一定是当前最短路径;
3.算法设计 解决的问题:
(1)如何确定一个顶点是否访问?
设置一个vis[]数组,vis[i]为0就表示没有被访问,vis[i]为1就表示i点已经被访问过。(根据实际情况,如迷宫图,也可以在图上面直接记录修改)
(2)如何找到正确的从出口到入口的路径
所有搜索过的方块都在队列中,
最后通过队列找出从 出口=>入口的一条迷宫路径;
同时设置一个pre指针来指向每一个前路径;例如:
迷宫图(墙为0,路为1,从(1,1)到(5,6))
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
1 1 1 0 0
层数ijpre>011-1>1120>21313142>42325153>63347255>84369326>1053811319>125410134111>145512155113>165614 4.bfs算法模板 void bfs(int x1,int y1) { 建造队列q; 入口入队; while(队列不为空) { 访问队首元素; 队首元素出队; if(到达目标位置) { 输出; } 相邻结点入队; 置为已访问; } } 二.
是因为jdk和jre配置在同一目录下,tools.jar包冲突。使得jdk/lib下没有tools.jar.解决办法就是加入tools.jar或者重新配置jdk
第 46 题:“全排列”题目描述 给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2 , 3] 输出: [ [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1] ] 思路:
第 46 题是回溯搜索算法的入门问题,可以把搜索全排列的过程画成一棵递归树,请务必动手在纸上画出递归树;
所有符合条件的结点在这棵递归树的叶子结点;使用深度优先遍历(DFS)或者广度优先遍历(BFS)遍历这棵递归树,在叶子结点处添加符合题意的一个结果,发现使用 BFS 编码较难;
使用 DFS 可以使用递归方法,借助方法栈完成,即传递的参数通过递归方法的方法栈进行传递,而不用手动编写栈和结点类,把结点类需要的变量通过递归方法的参数进行传递即可;树的每一个结点表示解决这个问题处在了哪一个阶段,我们使用不同的变量进行区分,这些变量叫做“状态变量”;而深度优先遍历有一个回退的过程,在回退的时候,所有的“状态”需要和第一次来到这个结点的时候相同,因此这里需要做“状态重置”(或者称“恢复变量”、“撤销选择”),这是深搜称之为“回溯算法”的原因; 深度优先遍历作为搜索遍历的方法,其思想也是很朴素且深刻的,深搜表现出一种“不撞南墙不回头”的特点。具体的行为是:完成一件事情有多个阶段,在每一个阶段有多种选择,先走其中一个,然后实在走不下去了,再回退到上一个结点继续下一个选择。
回到上一个结点的步骤就称之为“回溯”,在“回溯”的时候必须保证回到之前刚来到这个结点的状态,这叫做“状态重置”。
大家想一想在电影《大话西游》里月光宝盒的作用,正是因为月光宝盒有“回到过去”,将所有的一切恢复到之前的样子的功能,至尊宝才能做出最正确的选择。
在人类的世界里没有“月光宝盒”,但是在计算机的世界里,“状态重置”是很容易实现的,因此我们可以使用一份状态变量完成所有状态的搜索,只把符合特定条件的“状态”保存下来,作为结果集,这就是“回溯算法”能成为强大的搜索算法的原因。
需要设计的状态变量有:递归树到了第几层(已经使用了几个数),从根结点到叶子结点的路径(即一个全排列),哪些数是否使用过。 Java 代码:
import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; import java.util.List; public class Solution { public List<List<Integer>> permute(int[] nums) { int len = nums.length; List<List<Integer>> res = new ArrayList<>(); if (len == 0) { return res; } boolean[] used = new boolean[len]; // 由于只在结尾操作,因此是一个栈,Java 的 Stack 类建议使用 Deque 作为栈的实现 Deque<Integer> path = new ArrayDeque<>(len); // 由于是深搜,深搜需要使用栈,而写递归方法就可以把状态变量设计成递归方法参数 dfs(nums, len, 0, path, used, res); return res; } /** * @param nums 候选数组 * @param len 冗余变量,作为参数传递不用每次都从 nums 中读取 length 属性值 * @param depth 冗余变量,作为参数传递不用每次都从 path 中调用 size() 方法 * @param path 从根结点到叶子结点的路径 * @param used 记录当前结点已经使用了哪些元素,这些元素都在 path 变量中 * @param res 结果集 */ private void dfs(int[] nums, int len, int depth, Deque<Integer> path, boolean[] used, List<List<Integer>> res) { if (depth == len) { res.
如果启用了系统变量innodb_large_prefix(默认启用,注意实验版本为MySQL 5.6.41,默认是关闭的,MySQL 5.7默认开启),则对于使用DYNAMIC或COMPRESSED行格式的InnoDB表,索引键前缀限制为3072字节。如果禁用innodb_large_prefix,则对于任何行格式的表,索引键前缀限制为767字节。
innodb_large_prefix将在以后的版本中删除、弃用。在MySQL 5.5中引入了innodb_large_prefix,用来禁用大型前缀索引,以便与不支持大索引键前缀的早期版本的InnoDB兼容。
对于使用REDUNDANT或COMPACT行格式的InnoDB表,索引键前缀长度限制为767字节。例如,您可能会在TEXT或VARCHAR列上使用超过255个字符的列前缀索引达到此限制,假设为utf8mb3字符集,并且每个字符最多包含3个字节。
尝试使用超出限制的索引键前缀长度会返回错误。要避免复制配置中出现此类错误,请避免在主服务器上启用enableinnodb_large_prefix(如果无法在从服务器上启用)。
适用于索引键前缀的限制也适用于全列索引键。
注意:上面是767个字节,而不是字符,具体到字符数量,这就跟字符集有关。GBK是双字节的,UTF-8是三字节的
解决方案:
1:启用系统变量innodb_large_prefix
注意:光有这个系统变量开启是不够的。必须满足下面几个条件:
1: 系统变量innodb_large_prefix为ON
2: 系统变量innodb_file_format为Barracuda
3: ROW_FORMAT为DYNAMIC或COMPRESSED
mysql> show variables like '%innodb_large_prefix%';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| innodb_large_prefix | OFF |
+---------------------+-------+
1 row in set (0.00 sec)
mysql> set global innodb_large_prefix=on;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%innodb_file_format%';
+--------------------------+----------+
| Variable_name | Value |
+--------------------------+----------+
| innodb_file_format | Antelope |
删除文件夹时,提示访问被拒、权限不足等。
有三种原因:
1、一般是由于文件夹被别的进程占用、被使用中。这时是无法删除的。
2、也有一部分原因是由于系统产生错误。
3、最小的可能性是病毒引起的系统功能异常。
对应的解决办法:
1、重启系统,一般就可以删除了。
2、如果是系统功能问题,用:系统错误修复精灵、系统错误修复大师这类软件修复就可以了。
3、最小的可能,当然是进行杀毒。
联想拯救者Y7000安装win10 1607版本后,一直在转圈,进不去系统,这笔记本不能安装1607版本,必须升级到1903以上版本才可以的。
有其他问题,可以关注下方公众号
win10 1909系统不兼容部分realtek的声卡,部分笔记本安装后会出现耳机音响不能同时发声
,降级安装到1607版本就可以,亲测有效
有其他问题,可以关注下方公众号
End-to-end Machine Learning 学习笔记(主要关于代码) 1.Set up # to make this notebook's output stable across runs np.random.seed(42) # To plot pretty figures %matplotlib inline # 主要用在jupyter notebook上,用于让python console里面生成图像,在pycharm中可以注释掉 import matplotlib as mpl import matplotlib.pyplot as plt mpl.rc('axes', labelsize=14) #设置坐标轴尺寸 mpl.rc('xtick', labelsize=12) mpl.rc('ytick', labelsize=12) # Where to save the figures PROJECT_ROOT_DIR = "." CHAPTER_ID = "end_to_end_project" IMAGES_PATH = os.path.join(PROJECT_ROOT_DIR, "images", CHAPTER_ID) def save_fig(fig_id, tight_layout=True, fig_extension="png", resolution=300): path = os.path.join(IMAGES_PATH, fig_id + "
机器学习25:可能导致训练网络不收敛的几种原因 1.可能导致训练网络不收敛的几个原因:
(1)没有做数据归一化;
(2)没有检查过预处理结果和最终的训练测试结果;
(3)没有做数据预处理;
(4)没有使用正则化;
(5)Batch Size设的太大;
(6)学习率设的不合适;
(7)最后一层的激活函数错误;
(8)网络存在坏梯度,比如当Relu对负值的梯度为0,反向传播时,梯度为0表示不传播;
(9)参数初始化错误;
(10)网络设定不合理,网络太浅或者太深;
(11)隐藏层神经元数量错误;
(12)数据集标签的设置有错误。
2.详解链接:
http://theorangeduck.com/page/neural-network-not-working
用Solidworks绘制齿轮可以使用SW里面提供的标准库,经过笔者实测,发现并不是很好用:)绘制齿轮大家可能仅仅是随手画一下,看着像齿轮就行了,但是如何正确规范的绘制一个渐开线圆柱齿轮,并能实现3D打印,零件成品能保证正确啮合运转呢?笔者接下来会想大家一一介绍,拿小本本记好哦~ 一、齿轮正确啮合的条件(点击标题进入传送门)
法面模数与法面压力角要求分别相等。
对于斜齿轮,还需满足其螺旋角必须大小相等,方向相反。
齿轮参数和他们之间的关系:
模数:m
齿数:z
分度圆压力角:a
齿顶高:Ha = Ham(Ha为齿顶高系数,通常取1)
齿根高:Hf = (Ha*+c*)m (c*为顶隙系数,通常取0.25)
分度圆直径:d=zm
基圆直径:Db=dcosa
齿顶圆直径:Da=d+2Ha
齿根圆直径:Df=d-2Hf
齿距:p=πm
二、好戏开场啦
1.通过Solidworks方程式将齿轮参数输入方程中,打开Solidworks-新建零件-打开“工具”-点击“方程式”
2.在全局变量一栏输入齿轮参数的变量
3.分别在草图中画出分度圆,基圆,齿顶圆,齿根圆并将各自尺寸链接到方程式相对应的尺寸中
4.打开“工具”-选择“草图绘制实体”-选择“方程式驱动的曲线”-选择“参数性”,在方程式中输入渐开线坐标方程(注:其中Db需要读者通过计算替换掉,否则系统无法识别)
Xt=Dbcos(t)/2+Dbtsin(t)/2
Yt=Dbsin(t)/2-Dbtcos(t)/2
5.得到一条基圆的渐开线:
6.在分度圆上做一弧线,弧线的长度等于p/2,连接圆心与弧线中点建立对称轴
7.做一条直线与齿根圆相交,另一端与渐开线相切
8.使用镜像命令将齿轮齿型做出来
9.选择“拉伸”命令,在所选轮廓中选择齿轮的草图轮廓
10.建立圆周阵列用旋转轴
11.在轮齿两侧绘制圆角
12.选择圆周阵列,对其他齿进行阵列,阵列数目输入“ =“z” ”
13.绘制键槽、通孔,成品如下:
读者有更好的绘制技巧,欢迎在评论区留言哦~
本人使用的是Ender 3S的打印机,后期我会更新成品图片的哦,敬请期待!
详情请关注亿航创客官方抖音账号:EhangGroup
tensorflow中的损失函数介绍 本文参考借鉴了:损失函数loss大大总结,地址:https://blog.csdn.net/qq_14845119/article/details/80787753
并参考官方文档整理而成。
一. 分类损失函数 1.二分类交叉熵损失sigmoid_cross_entropy: Aliases:
tf.losses.sigmoid_cross_entropy(…):
使用tf.nn.sigmoid_cross_entropy_with_logits创建交叉熵loss.
tf.losses.sigmoid_cross_entropy( multi_class_labels, logits, weights=1.0, label_smoothing=0, scope=None, loss_collection=tf.GraphKeys.LOSSES, reduction=Reduction.SUM_BY_NONZERO_WEIGHTS ) 参数介绍:
1.multi_class_labels: [batch_size, num_classes] 目标整数标签位于{0,1}。
2.logits: Float [batch_size, num_classes] 网络的logits输出。
返回值:
与logits类型相同的加权损失张量。如果reduction为NONE,则它的形状与logits相同;否则,它是标量。
tf.nn.sigmoid_cross_entropy_with_logits
tf.nn.sigmoid_cross_entropy_with_logits( _sentinel=None, labels=None, logits=None, name=None ) 参数介绍:
logits and labels must have the same type and shape.
labels: [batch_size, num_classes]。目标整数标签位于{0,1}。
logits: Float [batch_size, num_classes] 。
name: A name for the operation (optional).
返回值:A Tensor of the same shape as logits with the componentwise logistic losses.
1.全局组件和局部组件的创建 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script type="text/javascript" src="https://unpkg.com/vue"></script> </head> <body> <div id="app"> <component-public></component-public> </div> <div id="app2"> <component-public></component-public> </div> </body> </html> <script type="text/javascript"> Vue.component('component-public', { template:`<div> <h1>全局组件</h1> </div>` }) const app = new Vue({ el:"#app", components:{ // 局部组件 "component-private":{ template:` <div> 账号<input type="text" name="" id="" value="" /> 密码<input type="password" name="" /> <button class="btn btn-success">登录</button> </div> ` } } }) const app2 = new Vue({ el:"#app2" }) </script> </html> 2.
背景: 当前开发中,lua中有需要用到aes加密的需求,底层c++是有aes模块的,但是程序一直没有用到,我修改了一番。两点:加密,解密
梳理流程: 加密:字符串输入,秘钥输入,16的倍数不足的补N(N为不足的位数,例:12个字符串,缺4个,后面4个全部补4),AES加密,加密完成,base64再加密,输出
解密:密码输入,秘钥输入,base64解密,16的倍数不足的补N(N为不足的位数,例:12个字符串,缺4个,后面4个全部补4),解密完成,处理解密后字符串中的N(从尾部开始,等于N的字符串,全部删除),输出
代码逻辑: aes.cpp(源代码) int AES_ECB_Cipher::encode(const unsigned char* src, uint32_t src_len, unsigned char* dest, uint32_t& len) { // check input null pointer if (nullptr == src) { return -1; } // make sure dest buff is larger than src buff if(len < src_len) { return -1; } unsigned char encode_buf[1024]; memset(encode_buf, 0, sizeof(encode_buf)); memcpy(encode_buf, src, src_len); uint32_t encode_buf_size = src_len; // input been padded well with pkcs5padding uint8_t pading_size = AES_ECB_Cipher::KEYLEN - encode_buf_size % AES_ECB_Cipher::KEYLEN; // PKCS5Padding rules: ²¹(16-len)¸ö(16-len) for (uint8_t pading = 0; pading < pading_size; pading++) { encode_buf[encode_buf_size + pading] = pading_size; } encode_buf_size += pading_size; uint32_t round = encode_buf_size / AES_ECB_Cipher::KEYLEN; const unsigned char * iv = mKey; for (uint32_t i = 0; i < round; ++i) { AES128_ECB_encrypt(encode_buf + i * AES_ECB_Cipher::KEYLEN, dest + i * AES_ECB_Cipher::KEYLEN); if (use_cbc) { for (int j = 0; j < AES_ECB_Cipher::KEYLEN; ++j) { (dest + i * AES_ECB_Cipher::KEYLEN)[j] ^= iv[j]; } iv = encode_buf + i * AES_ECB_Cipher::KEYLEN; } } len = encode_buf_size; if (len < 0 || len <= src_len) { return -1; } dest[len] = 0; return 0; } int AES_ECB_Cipher::decode(const unsigned char* src, uint32_t src_len, unsigned char* dest, uint32_t& len) { // check input null pointer if (nullptr == src) { return -1; } // make sure dest buff is larger than src buff if(len < src_len) { return -1; } unsigned char encode_buf[1024]; memset(encode_buf, 0, sizeof(encode_buf)); memcpy(encode_buf, src, src_len); uint8_t pading_size = src_len % AES_ECB_Cipher::KEYLEN; for (uint8_t pading = 0; pading < pading_size; pading++) { encode_buf[src_len + pading] = pading_size; } src_len += pading_size; // assume input has been padded well with pkcs5padding if (src_len % AES_ECB_Cipher::KEYLEN !
一、图形界面应用程序的消息处理模型 特点:
1. 基于操作系统才能运行;
2. GUI应用程序提供的功能必须由用户触发;
3. 用户操作界面时操作系统是第一个感知的 ;
4. 系统内核的消息通过事件处理转变成QT的信号。
二. Qt中的事件处理 (1)在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 事件处理的核心包括事件产生、分发、接受和处理。
①事件的产生
问题:谁来产生事件?
最容易想到的是我们的输入设备,比如键盘、鼠标产生的keyPressEvent,keyReleaseEvent,mousePressEvent,mouseReleaseEvent事件(他们被封装成QMouseEvent和QKeyEvent)。
②Qt中事件的分发
问题:谁来负责分发事件?
对于non-GUI的Qt程序,是由QCoreApplication负责将QEvent分发给QObject的子类-Receiver.;对于Qt GUI程序,由QApplication来负责。
③事件的接受和处理
问题:谁来接受和处理事件?
答案是QObject。类是整个Qt对象模型的心脏,事件处理机制是QObject三大职责(内存管理、内省(intropection)与事件处理制)之一。任何一个想要接受并处理事件的对象均须继承自QObject,可以选择重载QObject::event()函数或事件的处理权转给父类。
(2)Qt平台将系统产生的消息转变成Qt事件
A. Qt事件是一个QEvent(或子类)的对象;
B. 有时一个事件包含多个事件类型,比如鼠标事件又可以分为鼠标按下、双击、和移动多种操作事件类型由QEvent类的枚举型QEvent::Type来表示,可由帮助文档进行查询;
C. Qt事件用于描述程序内部或外部发生的对应动作(描述的是操作系统发生来的消息,一个系统消息对应着一个消息事件);
D. 任意QObject对象都具备时间处理的能力.
note:QEvent子类可以表示一个事件,但并不能处理这个事件
Qt 程序需要在main()函数创建一个QApplication对象,然后调用它的exec()函数。这个函数就是开始 Qt 的事件循环。在执行exec()函数之后,程序将进入事件循环来监听应用程序的事件。当事件发生时,Qt 将创建一个事件对象。在事件对象创建完毕后,Qt 将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件,而是将这些事件对象按照它们不同的类型,分发给不同的事件处理器(event handler)。如上所述,event()函数主要用于事件的分发。
(3)GUI应用程序的事件处理方式
A. Qt事件产生后会立即被分发到QWidget对象(QObject的子类,如按键QPushButton对象等);
B. QWidget对象其内部会有一个event(QEVent*)函数被调用,进行事件处理;
C. event()根据事件类型调用不同的事件处理函数(默认的子函数);
D. 在事件处理函数中发送Qt中预定义的信号;
E. 调用信号关联的槽函数。
(4) QPushButton事件处理分析
①接收到鼠标事件
②QApplication调用QObject::event(QEvent*)成员函数来处理,进行事件的分派。
③调用QPushButton的mouseReleaseEvent(QMouseEvent*)成员函数
④QPushButton调用click()成员函数
⑤触发信号SIGNAL(clicked())
(5)实例
实例一:自定义事件处理函数
鼠标左键右键
wigth.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> class Widget : public QWidget { Q_OBJECT protected: void mousePressEvent(QMouseEvent *event); public: Widget(QWidget *parent = 0); ~Widget(); }; #endif // WIDGET_H widgth.
经常遇到很多用户新买的电脑,做了系统后,网卡驱动安不上,用驱动精灵提示无法识别,怎么办?
一、去intel官网下在自动安装工具,我这里贴出来,大家可以自己下载,https://yunpan.360.cn/surl_yxseRz7DqtY
二、下个360驱动大师网卡版,这可以安装的。
有其他问题,可以关注下方公众号
在重装win10系统,当选中安装的系统盘时,提示Windows无法安装到这个磁盘,选中的磁盘具有MBR分区表。在EFI系统上,Windows只能安装到GPT磁盘。主要是由于磁盘对应MBR分区表;而bios启动方式为UEFI方式导致。
下面这图,就是因为BIOS开启UEFI,而硬盘分区表格式为MBR导致的无法安装
主要有两种解决方法:
让启动U盘以传统的BIOS方式启动来安装。
将电脑的系统盘由MBR修改为GPT
01让启动U盘以传统的BIOS方式启动来安装
方法一:直接将启动U盘里的 efi 整个文件夹和bootmgr.efi文件删除后,再安装即可。安装方法,如下图所示:
02电脑的系统盘由MBR修改为GPT
1.在如下的win10的安装界面,按 shift + F10 键
2.将出现如下命令提示符窗口
3.在命令提示符窗口依次执行如下命令:
输入:diskpart 命令后,按enter键,进入到 DISKPART 模式。
输入:list disk 命令后,按enter键,查看电脑的硬盘。编号0,表示电脑的第一块硬盘;编号2,表示电脑的第二块硬盘;根据电脑的硬盘数量不同显示不同。
输入:select disk 0 命令后,按enter键,表示选中第一块硬盘。(select disk x 命令中的x,表示选中的硬盘编号)。
输入:clean 命令清除选中硬盘上的所有分区和数据。
执行:convert gpt 命令将选中的硬盘转换成GPT分区表格式。
输入:exit 命令退出 DISKPART 模式。
输入:exit 命令退出命令提示符模式。
(4)、然后再继续进行分区,安装即可。也可以只建立一个主分区,等系统安装完成后再进行分区。
问题交流可以关注下方公众号
近期有玩家反馈自己的游戏在启动的过程中一直遇见Failed to start Battleye service(0),在系统服务里启动Battleye service也显示失败,这个问题到底要如何解决呢?下面提供正确的解决方法。
1
可能的原因分析
一、杀毒软件和防火墙defender阻拦了 battleye服务的启动。
二、系统网络故障,如协议被破坏,dns故障,hosts文件被篡改,浏览器设置故障。
2
解决方法
一、根据第一个原因分析,把杀毒软件卸载,像早上修的那台电脑,卸载360杀毒,关闭windows defender防火墙,不会关闭的自行百度。
二、对系统网络故障,第一步采取,打开360安全卫士的断网急救箱,进行扫描,对发现的问题修复。
三、修复网络或者说重置网络,具体步骤如下,
1首先按开始菜单
2搜索CMD 右键以管理员身份运行
3输入netsh advfirewall reset回车
输入netsh int ip reset回车
输入netsh int ipv6 reset回车
输入netsh winsock reset回车
4然后重启电脑
上述方法,经过试验,完全有效。
问题交流可以关注下方公众号
昨天安装一台r720的电脑,死活也找不到固态硬盘,用的是纯净版win10 iso镜像制作的,bios里可以看到固态盘,安装分区中识别不到,如下图
经查看多方文档,发现原因在这里。由于拯救者R720出厂系统的BIOS内,SATAController Mode默认设置的是为Intel RST Premium模式,该模式会将硬盘组成磁盘阵列的模式(Raid模式),而原版的Window 10安装镜像默认没有Raid模式的驱动,因此在Intel RST Premium的硬盘模式下,安装系统时会显示找不到固态硬盘。
下面有2个解决方案
解决方案一:
下载附件中的Intel Raid模式驱动,将驱动安装包解压缩后将整个文件夹完整的放到到系统安装U盘的根目录下,然后在安装系统选择硬盘时,加载此驱动。(该驱动分为32位和64位,分别对应32位系统和64位系统)
选择“加载驱动程序”;
弹出“加载驱动程序”的页面,选择“浏览”;
找到存放Raid驱动的文件夹,默认文件名为“f6flpy-x86”或“f6flpy-x64”,选择该文件,然后确定。
随后会检测到Raid模式驱动程序,点击下一步后,出现读取条开始加载此驱动。(如果提示报错建议重新加载该驱动多试几次,并且驱动文件存放的路径最好为全英文路径)
在加载成功后会跳回之前选择硬盘的界面,此时已经可以正常显示出机器内的固态硬盘,并且可以正常安装系统。
解决方案二:
在安装系统前,进入电脑的BIOS界面(方法:开机后立刻连续敲击F2键或者关机后通过novo小孔选择BIOS Setup),选择到Configuration页面,将SATA Controller Mode选项中的Intel RST Premium,改成AHCI。
修改之后,按下F10键,选择YES保存并退出。
然后可以在通过引导进入安装系统的界面,可以正常显示固态硬盘,并重装系统。
备注:今天我是用第二种方法解决的,第一种方法嫌麻烦,没去尝试,有兴趣的可以尝试。
其他出厂默认Raid SSD模式的机型均可参照此方法加载Raid模式驱动重装Win10系统。
有兴趣的朋友可以加下面公众号或微信号探讨交流。
近期有些朋友在玩吃鸡的时候,会提示Failed to initialize BattlEye Service:Driver Load Error(1450) 驱动加载失败错误,如下图,到底是什么原因造成的?如何解决呢?
01 问题的由来
之前有玩家和我们反馈,运行游戏时会报错,提示“Failed to initialize BattlEye Service:Driver Load Error(1450)”,卸载维护大师客户端才可以运行游戏,因此怀疑是被维护大师安全中心给拦截了。
”Driver Load Error“顾名思义为驱动加载失败,表示游戏的驱动程序无法加载。我们对此就很疑惑了:到底是什么原因导致的这个问题呢?
经过我们查看故障原因分析代码,确认此问题是在特定系统环境下,受到Windows系统限制导致的!在某些系统补丁未打的环境下,Windows 7系统对LoadImage回调有数量限制,最多只允许加载8个。此限制会影响包括绝地求生、h1z1、方舟、彩虹六号等所有使用BE反作弊的游戏。
在网吧客户机中,我们有时会安装很多其他软件,比如一些拦截恶意广告病毒的安全软件,无盘软件、计费软件自带的驱动也会注册LoadImage回调,很容易就占满了这8个LoadImage回调的位置。这样在启动游戏的时候,游戏的驱动就会因为没有位置而无法加载,从而出现了1450报错。
有看官表示疑问了:“为什么卸载维护大师客户端后游戏就能正常了呢?”,很简单的道理,卸载维护大师客户端就等于把维护大师安全中心占用LoadImage回调的位置,给游戏驱动腾出来了;同理,卸载其他的占用LoadImage回调的程序,游戏一样也可以正常启动。所以最根本的原因还是因为没有更新系统补丁而被系统给限制了。
在2014年微软发布了补丁KB2922790,将LoadImage回调的限制由8个提升到了64个。当我们安装该补丁后,就足以满足各种软件的加载需求,不会受到限制了。
02 解决办法
办法一
打补丁,即安装KB2922790补丁(win7 x64 sp1,一定要sp1版本才可以)
KB2922790下载:关注下方公众号,输入KB2922790,便会弹出下载地址
若不能打补丁请先卸载控制面板-卸载更新中这两个补丁:KB4015546 ,KB4022722
注: win10 不存在这个问题,以上问题仅出现在win7系统中
KB2922790补丁下载方法:关注下方公众号,输入KB2922790,便会弹出下载地址
一、Activity概述 Activity,实现程序的交互。
Activity,代表手机或平板中的一屏。
Activity的4种状态:
Activity的生命周期:
更正:OnRestart应该接到Onstart方法。
二、创建、启动和关闭Activity 1、创建Activity 创建继承自Activity的Activity重写需要的回调方法设置要显示的视图 //extends Activity,即步骤一 public class DetailActivity extends Activity { //onCreate(),即步骤二 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView,即步骤三 setContentView(R.layout.activity_main); } } 创建了Activity后需要配置才能使用。即要在Manifests中添加此acitivity
<activity android:name=".DetailActivity" > </activity> //在配置name属性时,如果配置的Activity与上面的包路径一样,直接.类名 //如果是在上面包的子包中,则.子包序列加上类名 android提供的创建Activity的向导,步骤简单
要在某个包中创建Acitivity,则单击鼠标右键,选择“New”→“Activity”→“Empty Activity”→"Finish",则完成了Activity的创建,并自动创建了布局文件,并进行了配置。
2、启动和关闭Activity 当创建和配置一个Activity后,它不会自动显示在屏幕上,需要我们启动它。
要启动Activity,分成两种情况:
入口Activity其他Activity ① 入口Activity 要在AndroidManifest.xml中进行配置。
<activity android:name=".MainActivity"> <!--通过下面4句代码,可把该Acitivity配置成程序的入口--> <!--下面4句代码,是用来配置intent过滤器的。--> <intent-filter> <!--action标记:指定响应的动作名,这条代码把一个activity指定为程序的主体动向--> <action android:name="android.intent.action.MAIN" /> <!--category标记:指定在什么环境下,动作会响应。这条代码可把某个Activity作为应用程序的启动项--> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> Activity需要通过Intent来表达自己的意图。
② 其他Activity 需要startActivity()方法来启动
例子:
//单击按钮后,启动另一个Activity button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //此处不能使用this,因为此处使用了匿名内部类,若用this就会指向匿名内部类对象了。 Intent intent=new Intent(MainActivity.
以下代码仅仅是实现了在输入框内输入数字与运算符进行计算,使用按钮进行输入的功能由于时间问题尚未开发出来,稍后有时间会继续开发的,未完待续…
from tkinter import * root = Tk() frame = Frame(root) frame.pack(padx=10,pady=10) v1= StringVar() v2= StringVar() v3= StringVar() v4= StringVar() testCMD=root.register(test) e1 = Entry(frame,width=10,textvariable=v1,validate="key",validatecommand=(testCMD,"%P")).grid(row=0,column=0,padx=5) e2 = Entry(frame,width=2,textvariable=v2,validate="key").grid(row=0,column=1,padx=5) e3 = Entry(frame,width=10,textvariable=v3,validate="key",validatecommand=(testCMD,"%P")).grid(row=0,column=2,padx=5) Label(frame,text="=").grid(row=0,column=3) e4 = Entry(frame,width=10,textvariable=v4,state="readonly").grid(row=0,column=4)#state="readonly"支持拷贝 def calc(): if str(v2.get())=="+": result = int(v1.get())+int(v3.get()) elif str(v2.get())=="-": result = int(v1.get())-int(v3.get()) elif str(v2.get())=="*": result = int(v1.get())*int(v3.get()) elif str(v2.get())=="/": result = int(v1.get())/int(v3.get()) v4.set(str(result)) Button(frame,text="确认",command=calc).grid(row=1,column=4,pady=5) root.title("耗子计算器") mainloop()#窗口的无限次循环 #grid() 放置组件用的 效果图如下:
内核基础
介绍 RT-Thread 内核基础,包括:内核简介、系统的启动流程及内核配置的部分内容。
RT-Thread 内核的简单介绍,从软件架构入手讲解实时内核的组成与实现,这部分给初学者引入一些 RT-Thread 内核相关的概念与基础知识,让初学者对内核有初步的了解。学完本章,读者将会对 RT-Thread 内核有基本的了解,知道内核的组成部分、系统如何启动、内存分布情况以及内核配置方法。
RT-Thread 内核介绍
内核是操作系统最基础也是最重要的部分。下图为 RT-Thread 内核架构图,内核处于硬件层之上,内核部分包括内核库、实时内核实现。
内核库是为了保证内核能够独立运行的一套小型的类似 C 库的函数实现子集。
**实时内核的实现包括:**对象管理、线程管理及调度器、线程间通信管理、时钟管理及内存管理等等,内核最小的资源占用情况是 3KB ROM,1.2KB RAM。
线程调度
线程是 RT-Thread 操作系统中最小的调度单位,线程调度算法是基于优先级的全抢占式多线程调度算法,即在系统中除了中断处理函数、调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的,包括线程调度器自身。支持 256 个线程优先级(也可通过配置文件更改为最大支持 32 个或 8 个线程优先级,针对 STM32 默认配置是 32 个线程优先级),0 优先级代表最高优先级,最低优先级留给空闲线程使用;同时它也支持创建多个具有相同优先级的线程,相同优先级的线程间采用时间片的轮转调度算法进行调度,使每个线程运行相应时间;另外调度器在寻找那些处于就绪状态的具有最高优先级的线程时,所经历的时间是恒定的,系统也不限制线程数量的多少,线程数目只和硬件平台的具体内存相关。
时钟管理
RT-Thread 的时钟管理以时钟节拍为基础,时钟节拍是 RT-Thread 操作系统中最小的时钟单位。RT-Thread 的定时器提供两类定时器机制:第一类是单次触发定时器,这类定时器在启动后只会触发一次定时器事件,然后定时器自动停止。第二类是周期触发定时器,这类定时器会周期性的触发定时器事件,直到用户手动的停止定时器否则将永远持续执行下去。
另外,根据超时函数执行时所处的上下文环境,RT-Thread 的定时器可以设置为 HARD_TIMER 模式或者 SOFT_TIMER 模式。
通常使用定时器定时回调函数(即超时函数),完成定时服务。用户根据自己对定时处理的实时性要求选择合适类型的定时器。
线程间同步
RT-Thread 采用信号量、互斥量与事件集实现线程间同步。线程通过对信号量、互斥量的获取与释放进行同步;互斥量采用优先级继承的方式解决了实时系统常见的优先级翻转问题。线程同步机制支持线程按优先级等待或按先进先出方式获取信号量或互斥量。线程通过对事件的发送与接收进行同步;事件集支持多事件的 “或触发” 和“与触发”,适合于线程等待多个事件的情况。
线程间通信
RT-Thread 支持邮箱和消息队列等通信机制。邮箱中一封邮件的长度固定为 4 字节大小;消息队列能够接收不固定长度的消息,并把消息缓存在自己的内存空间中。邮箱效率较消息队列更为高效。邮箱和消息队列的发送动作可安全用于中断服务例程中。通信机制支持线程按优先级等待或按先进先出方式获取。
内存管理
RT-Thread 支持静态内存池管理及动态内存堆管理。当静态内存池具有可用内存时,系统对内存块分配的时间将是恒定的;当静态内存池为空时,系统将申请内存块的线程挂起或阻塞掉 (即线程等待一段时间后仍未获得内存块就放弃申请并返回,或者立刻返回。等待的时间取决于申请内存块时设置的等待时间参数),当其他线程释放内存块到内存池时,如果有挂起的待分配内存块的线程存在的话,则系统会将这个线程唤醒。
动态内存堆管理模块在系统资源不同的情况下,分别提供了面向小内存系统的内存管理算法及面向大内存系统的 SLAB 内存管理算法。
还有一种动态内存堆管理叫做 memheap,适用于系统含有多个地址可不连续的内存堆。使用 memheap 可以将多个内存堆 “粘贴” 在一起,让用户操作起来像是在操作一个内存堆。
文章目录 安装目的Pandoc介绍Terminal安装PandocGitHub下载Pandoc的deb文件转换成.doxc效果测试 安装目的 为了Typora能够导出.doxc文件。
Pandoc介绍 维基百科:
Pandoc是由John MacFarlane开发的标记语言转换工具,可实现不同标记语言间的格式转换,堪称该领域中的“瑞士军刀”。Pandoc使用Haskell语言编写,以命令行形式实现与用户的交互,可支持多种操作系统;Pandoc采用GNU GPL授权协议发布,属于自由软件。
Terminal安装Pandoc 安装Pandoc
sudo apt-get install pandoc 看到许多博客中说要安装一些支持环境,经实践,不用安装下面的环境也可以导出(占用空间太多了),但是发现导出的文件,目录链接、代码块失效。但是标题的层级、标号的格式、加粗……,为了明确哪些格式可以完美转换,我用Typora的Markdown说明文档转换进行测试,在最后一部分会列出转换效果。
安装LaTeX环境(不完整也要1.8GB)
sudo apt install texlive texlive-xetex latex-cjk-all texmaker 磁盘空间如果足够大可以安装完整版(3.5GB空间,实力劝退):
sudo apt-get install texlive-full TeX Live是由国际TeX用户组整理和发布的TeX软件发行套装,包含与TeX系统相关的各种程序、编辑与查看工具、常用宏包及文档、常用字体及多国语言支持。TeX Live是许多Linux/Unix系统默认或推荐的TeX套装,同时也支持包括Windows和Mac OS X等在内的其它操作系统。
安装Haskell平台(600多MB)
sudo apt-get install haskell-platform GitHub下载Pandoc的deb文件 Pandoc下载页:https://github.com/jgm/pandoc/releases/tag/2.9.1.1
选择系统对应的版本下载:
不知为何网速太慢,很难下载下来。
转换成.doxc效果测试 标题(Headers) 列表(Lists) 任务表 代码块 数学公式 表格 脚注 分割线 内部链接 网页链接 图片 删除线、下划线 Emoji 为方便大家直观查看导出效果,我将文件上传到了csdn:
Markdown文件
docx文件
PDF文件
png文件
epub文件
不得不说,转换成PDF效果不错。
英文自我介绍请英文介绍自己的家乡请英文介绍自己熟悉的项目请英文介绍自己的学校 面试设计问题包含:简述红黑树原理桶排序是怎样实现的哈希有几种散列方式 有需要了解更细致面试过程的可以私聊我,由于目前还没有整理完复试资料,因此这里没办法将所有的问题进行列举。
1.先声明全局方法 在 main.js 里
Vue.prototype.ScanAudio = function(){ var music = null; music = uni.createInnerAudioContext(); //创建播放器对象 music.src= "../../static/raw/right.mp3"; //选择播放的音频 music.play(); //执行播放 } 然后在每个需要调用的地方执行 this.ScanAudio();
文章目录 说明数据结构与算法相关书籍计算机基础操作系统汇编语言计算机网络计算机组成原理 Python1、Python基础2、数据分析与爬虫 LinuxC语言C++前端人工智能设计模式JavaJava 基础IDEA 教材Java进阶JavaWeb 数据库Go中间件面试相关其他精选书籍Git图灵书籍218本汇总 说明 计算机类的书籍那么贵,作为一个几个小时看完一本书且机不离身的程序员,天天买纸质书是不可能的了,所以对电子书的需求量还是挺多的。为了方便广大的小伙伴也能方便找到对应的电子书,我花费洪荒之力收集了几百本常用的电子书,并且为了解决百度云链接容易失效的问题,我把电子书全部下载打包上传,都有哪些电子书呢?请往下看。
重要说明:如果目录无法跳转的话,直接拉下去就可以了,这些书籍都是在同一个页面的,我只是方便大家找到对应的,弄了一个页内目录,不过有部分读者反馈他跳转不了(手机是绝对跳转不了的了)。
数据结构与算法相关书籍 挑战程序设计竞赛 百度云下载链接 密码:mxn7Java数据结构和算法 百度云下载链接 密码:lpym算法图解 百度云下载链接 密码:7osf算法导论 百度云下载链接 密码:p2tp算法第四版 百度云下载链接 密码:rixw数据结构与算法分析C语言描述版 百度云下载链接 密码:mn10数据结构与算法分析Java语言描述版 百度云下载链接 密码:917n数据结构与算法 Python语言描述_裘宗燕 百度云下载链接 密码:96gw剑指offer 百度云下载链接 密码:a4rt计算机程序设计艺术1-3卷 百度云下载链接 密码:i3nh大话数据结构 百度云下载链接 密码:np2o程序员代码面试指南:IT 名企算法与数据结构题目最优解 百度云下载链接 密码:20oh编程珠玑 百度云下载链接 密码:4oow编程之美 百度云下载链接 密码:4zme啊哈算法 百度云下载链接 密码:h4id程序员的算法趣题 百度云下载链接 密码:kk84 计算机基础 操作系统 30天填自制操作系统 百度云下载链接 密码:pxxr操作系统之哲学原理 百度云下载链接 密码:hua7程序是怎样跑起来的 百度云下载链接 密码:pbvh深入理解计算机操作系统 百度云下载链接 密码:2toh现代操作系统 百度云下载链接 密码:huk2 汇编语言 汇编语言(注:这边是王爽写的,我觉得写的很好,适合入门) 百度云下载链接 密码:qea3 计算机网络 计算机网络:自顶向下 百度云下载链接 密码:l77d图解HTTP 百度云下载链接 密码:b42z图解TC/IP 百度云下载链接 密码:5k3x网络是怎样连接的 百度云下载链接 密码:g983HTTP权威指南 百度云下载链接 密码:tqj8UNIX网络编程 百度云下载链接 密码:4buy 计算机组成原理 隐匿在计算机软硬件背后的语言 百度云下载链接 密码:6jiq大话计算机 百度云下载链接 密码:6j1o计算机是怎样跑起来的 百度云下载链接 密码:er12 Python 1、Python基础 编程小白的第一本Python入门书 百度云下载链接 密码:s76bPython编程初学者指南 百度云下载链接 密码:g696Python高级编程 百度云下载链接 密码:qnufPython高性能编程 百度云下载链接 密码:d8s5Python灰帽子 百度云下载链接 密码:nfktPython开发技术详解 百度云下载链接 密码:z0avPython开发实战 百度云下载链接 密码:ee5xPython网络编程基础 百度云下载链接 密码:m15qPython学习手册 百度云下载链接 密码:0yqf精通Scrapy网络爬虫python之蝉 2、数据分析与爬虫 数据科学入门 百度云下载链接 密码:1hz8用Python写网络爬虫 百度云下载链接 密码:nlpaPython数据处理 百度云下载链接 密码:8eomPython数据分析实战 百度云下载链接 密码:idn1Python数据科学手册 百度云下载链接 密码:16u0Python数据可视化编程实战 百度云下载链接 密码:i7hp精通Scrapy网络爬虫 百度云下载链接 密码:jb6u Linux 精通正则表达式 百度云下载链接 密码:vp94鸟哥的Linux私房菜基础篇和服务器篇 百度云下载链接 密码:ubg2深入Linux内核架构 百度云下载链接 密码:fnh2Linux宝典 百度云下载链接 密码:nxheLinux常用命令大全 百度云下载链接 密码:e0n2Linux防火墙 百度云下载链接 密码:sc4uLinux高级程序设计 百度云下载链接 密码:d4wqLinux环境编程 百度云下载链接 密码:xudvLinux命令详解词典 百度云下载链接 密码:yxuz汇编语言基于linux环境第3版 百度云下载链接 密码:yq75 C语言 经典C程序100例 百度云下载链接 密码:tls2C Primer Plus 百度云下载链接 密码:5s85C程序设计语言(包括课后答案等) 百度云下载链接 密码:cfj4C和指针 百度云下载链接 密码:d8a0C语言编程精粹 百度云下载链接 密码:6mctC语言参考手册 百度云下载链接 密码:4hnxC语言函数大全 百度云下载链接 密码:xywtC语言解析教程 百度云下载链接 密码:6lufC语言深度剖析 百度云下载链接 密码:yu63C专家编程 百度云下载链接 密码:xlfm C++ C++ Primer 百度云下载链接 密码:js1aC++编程思想 百度云下载链接 密码:vi02C++对象模型 百度云下载链接 密码:v90k深入探索C++对象模型 百度云下载链接 密码:3xuvC++ Templates 百度云下载链接 密码:4rvwC++编程规范-101条规则准则与最佳实践 百度云下载链接 密码:t43eC++沉思录中文第2版 百度云下载链接 密码:6emrC++大学教程 百度云下载链接 密码:n6phC++设计新思维-泛型编程与设计之应用 百度云下载链接 密码:0el5Effective STL 中文版 百度云下载链接 密码:u7s1More Effective C++中文版 百度云下载链接 密码:xbxvSTL源码剖析 百度云下载链接 密码:mxsh 前端 疯狂aJax讲义 百度云下载链接 密码:pce0Bootstrap实战 百度云下载链接 密码:rzhmHTML5揭秘 百度云下载链接 密码:vaamHTML5与CSS3基础教程 百度云下载链接 密码:2wxmHTML与CSS入门经典 百度云下载链接 密码:tsgmJavaScript DOM编程艺术 百度云下载链接 密码:gsbtJavaScript高级程序设计 百度云下载链接 密码:8ds3JavaScript高效图形编程 百度云下载链接 密码:tab1jQuery高级编程 百度云下载链接 密码:qwtrjQuery技术内幕 百度云下载链接 密码:pglfjQuery权威指南 百度云下载链接 密码:4vrwNode.
思考: 考虑ES如何与数据库实现同步?ES如何查询多个字段?如何构建商品服务(包含搜索功能)?ES肯定是集群的,如何集群?一个项目当它做大做当后都可能会需要将数据从传统的数据库同步到另一种数据集合中,一般用于提高查询效率或将数据进行备份的目的。其中比较常见的一种同步方式是从关系型数据库同步到esMQ与logstash实现ES与数据库同步区别基于Docker方式实现Elasticsearch集群整合Elasticsearch IK分词器 一、理论基础 1.1、es与数据库是如何保持一致的呢? 原理:
1.2、MySQL与ES实时同步常用插件 参考:https://www.cnblogs.com/jpfss/p/10832918.html
1.3、logstash-input-jdbc同步插件原理: 作用:使用 logstash-input-jdbc 插件读取 mysql 的数据
如何安装logstash-input-jdbc插件:https://blog.csdn.net/yeyuma/article/details/50240595#quote
原理:
定时执行一个 sql,然后将 sql 执行的结果写入到流中,增量获取的方式没有通过 binlog 方式同步,而是用一个递增字段作为条件去查询,每次都记录当前查询的位置,由于递增的特性,只需要查询比当前大的记录即可获取这段时间内的全部增量,一般的递增字段有两种,AUTO_INCREMENT 的主键 id 和 ON UPDATE CURRENT_TIMESTAMP 的 update_time 字段,id 字段只适用于那种只有插入没有更新的表,update_time 更加通用一些,建议在 mysql 表设计的时候都增加一个 update_time 字段
1.4、什么是全量同步和增量同步 (1)全量同步
什么是全量同步:将一个mysql的整个表的所有数据都同步到es中
常用插件是logstash-input-jdbc,logstash通过sql语句分区间对数据进行查询,然后输出到es进行实现。
(2)增量同步(canal)
什么是增量同步:业务场景需要实时性较高并对要求对数据库的压力比较小。
logstash不再适合增量同步,logstash是基于sql来完成的,并且是通过cron表达式来调用。
阿里在做大做强的过程中也遇到过类似的问题,为了达到性能的最优,他们自己通过JAVA代码实现了mysql的数据同步功能,通过解析mysql 的日志进行实现的,并且把这个项目开源——canal
canal地址:https://github.com/alibaba/canal
原理:
简单看了下代码,它里面是通过一个server和一个client来进行实现的,及server负责mysql的日志监听与收集,然后再传给client端,server与client端使用的netty进行数据的tcp通信,现在也有了kafka和rocketMQ作为通信渠道的版本。同时canal也有专门的可视化监控界面,方便进行查看,同时也有HA(hadoop集群)的实现方式,通过zookeeper来进行实现的。
使用:
想将数据从mysql同步到es通过canal的一个adapter就可以直接实现了
参考:https://github.com/alibaba/canal/tree/master/client-adapter
canal优点:
(1)canal实现数据的增量同步性能高,有可视化界面可监控
(2)看canal esAdapter的源码可知,canal esAdater中的etl方法对全量同步的功能也已经做了实现,可增量可全量同步了
1.5、MQ与logstash实现ES与数据库同步区别 Logstash实现ES与数据库同步:使用定时器方式 、实现简单
MQ实现ES与数据库同步:实时性、复杂性更高、一致性强
1.6、拼音分词器elasticsearch-analysis-pinyin 略
二、实战 2.1、商品服务搜索如何实现 商品服务搜索采用ElasticSearch实现
需要考虑什么问题?
(1)如何实现ES与mysql数据库同步
A、使用logstash 把mysql 同步到 elasticsearch
裸金属虚拟化(类型1):直接运行在物理机节点硬件设备上,并且管理虚拟机操作系统
可托管虚拟化(类型2):允许运行在普通的操作系统上
linux的KVM和Free BSD的BHyV是基于内核的虚拟化技术,将传统的操作系统转化为类似裸金属类型的管理程序。而linux发行版与Free BSD仍为通用操作系统,与其他应用一起竞争虚拟机操作系统可使用的资源。统上KVM和Free BSD的BHyVe为可托管虚拟化。
Xen是一门开源的裸金属虚拟化技术
特点:轻便小型(内核代码1MB左右),操作系统无关性,半虚拟化
驱动分离:允许主要的硬件设备驱动运行于虚拟机内部,当驱动crash(宕机)或报错时,包含该驱动的虚拟机可重启不影响其他虚拟机
架构
含虚拟化操作系统启动中,Boot Loader加载完成退出后,首先加载Xen程序,在其上运行虚拟机。运行的虚拟机为Domain或Guest,其中特殊Domain0包含了所有硬件设备的驱动,控制栈。
特点
类型:支持半虚拟化(PV)和全虚拟化(HVM)
Domain 0:含特殊的域Domain0,其包括硬件设备驱动和控制虚拟机的Toolstack
Toolstack:涵盖各种不同的Toolstack
注意:
1.Xen虚拟化管理程序是一个极小的软件程序,约为15w代码,本身无I/O功能虚拟化
2.Xen支持半虚拟化和全虚拟化,并且同一个虚拟机管理程序可同时使用两种虚拟化。虚拟机与硬件之间完全隔离,无权限访问底层硬件和IO,被称为DomainU
3.Domain0是一个特殊虚拟机,有权限直接访问底层的硬件设备,处理IO请求并与其他虚拟机DomainU交互通信
4.Toolstack,包含在Domain0中,叫控制栈。允许用户管理虚拟机
5.终端是Toolstack对外部开放的一个接口,命令行/图形化可控制界面。支持Openstack和CloudStack中的编排服务
6.Domain0要求一个支持Xen虚拟化管理程序的内核。半虚拟化的DomainU要有支持内核半虚拟化
全虚拟化模式+半虚拟化驱动(PVHVM)
全虚拟化模式下的虚拟机可以使用指定的半虚拟化驱动
半虚拟化+硬件扩展特性(PVH)
4.5以上版本可以使用。PVH要求虚拟机操作系统对其提供支持,在配置文件中设置pvh=1,即可使用
VMware 1.VMware Workstation是VMware公司销售的虚拟化软件,采用二进制翻译技术。
2.VMware ESX Server。ESX服务器是能直接在硬件上运行的企业级的虚拟平台,虚拟的SMP,能让一个虚拟机同时使用多个物理处理器。公司还提供一个虚拟中心来控制和管理虚拟化的IT环境:Vmotion
VirtualBox 1.是甲骨文公司xVM虚拟化平台技术的一部分。提供使用者在32or64为的Windows、Linux、Solaris操作系统上虚拟其他x86的操作系统。
2.VirtualBox既支持纯软件虚拟化,也支持Intel VT-x与AMD AMD-V硬件虚拟化技术。可以读写VMware VMDK格式和VIrtualPC VHD格式的虚拟磁盘文件。
Hyper-V 1.微软提出的一种系统管理程序虚拟化技术。借鉴Xen,采用微内核的架构,兼顾性能和安全性
2.Hyper-V底层的Hypervisor运行在最高级别特权下,称为ring -1,虚拟机的操作系统内核和驱动运行在ring 0 ,应用程序运行在ring 3.
3.Hyper-V采用基于VMbus的高速内存总线架构,来自虚拟机的硬件请求可以直接经过VSC,通过VMbus总线发送到根分区的VSP,VSP调用对应的设备驱动,直接访问硬件。中间不需要Hypervisor的帮助
石头剪刀布(基础版) import random # 导入random模块 option = ['石头','剪刀','布'] # 获取电脑的选项 cpu = random.choice(option) player = int(input("请出拳:")) # 获取玩家的选项 print("你出: %s , 电脑出: %s " % (player,cpu)) # 输出玩家和电脑的结果 #判定胜负 if player == "石头": # 玩家出石头的三种结果 elif cpu == "石头": print("平局") elif cpu == "剪刀": print("你赢了!!!") else: print("你输了= .=") if player == "剪刀": # 玩家出剪刀的三种结果 elif cpu == "剪刀": print("平局") elif cpu == "布": print("你赢了!!!") else: print("你输了= .=") if player == "
主函数
public class Test { public static void main(String[] args) { Deal deal=new Deal(15, new Result() { @Override public void msg(String re) { //接口拿到处理结果 System.out.println(re); } }); //开始处理 deal.judge(); } } 回调消息接口
public interface Result { void msg(String re); } 后台处理函数
public class Deal { Result re; int data; public Deal(int data,Result re) { this.re = re; this.data=data; } public void judge(){ for (int i = 0; i < data; i++) { System.
打开回收站,在空白处单机右键-属性,在自定义大小中,设置相应位置的文件大小。当文件夹内删除内容超出设定大小的时候,回收站将自动清理。
在 Mac 系统中,同样也能解决这样的问题,打开 访达finder - 左上角偏好设置 - 高级 - 勾选或取消勾选 30 天后,移除废纸篓的项目即可。如下图:
百度网盘观看视频繁出现“无法连接到网络,求连接后再试(重试)”应该怎么办? 图片描述 解决办法 1.win+r,键入cmd
2.键入:ping pan.baidu.com
3.关闭浏览器
4.重新打开浏览器进行百度网盘视频的播放
一、(inner) join 连接2个表,取出公共部分
必须重命名on后连接条件键值唯一连接前注意去重,提高效率inner可省略 select * from user_list_1 as a inner join user_list_2 as b on a.user_id=b.user_id; 三表连接
select a.user_name from (select distinct user_name from data1)as a inner join (select distinct user_name from data2) as b on a.user_name=b.user_name inner join (select distinct user_name from data3) as c on b.user_name=c.user_name; 二、left /right join left join:以左表为全集,返回能匹配上的匹配结果,没匹配上的显示NULL;
应用:取出表1中存在,表2中不存在的项
select * from user_list_1 a left join user_list_2 b on a.user_id=b.user_id; 三、full join全连接 并列将2个表的信息展示
题目 本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
输入格式:
输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出最大值及最大值的最小下标,中间用一个空格分开。
输入样例:
6 2 8 10 1 9 10 输出样例:
10 2 参考解答 #include<stdio.h> int main(){ int n,num[10],i,index; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&num[i]); } index=n-1; for(i=n-1;i>0;i--){ if(num[i-1]>=num[index])index=i-1; } printf("%d %d",num[index],index); return 0; }
数据类型表示存储何种类型的数据,从内存来看,就是占用的内存大小。
C标准并未明确规定各数据类型占用多少字节的存储空间。
各数据类型的内存大小与操作系统位数、编译器有关,可以在代码中使用sizeof()进行查询。
常用规则 1、字符类型:char占用1个字节
表示的是字符对应的ASCII码
2、浮点类型:float占用4个字节,double占用8个字节
3、sizeof(long long) >= sizeof(long) >= sizeof(int) >= sizeof(short)
long long至少64位,long至少32位,short至少16位
int建议为一个机器字长(32位环境下为4字节,64位环境下为8字节)
4、默认情况下,short、int、long、long long都是带符号的,即signed
char可以表示signed char或unsigned char,具体表示哪种由编译器决定
参考表格(以实际为准) 操作系统位数\数据类型16位系统32位系统64位系统char(有符号或无符号,由编译器指定)1字节1字节1字节(signed/unsigned) char1字节1字节1字节(signed/unsigned) short2字节2字节2字节(signed/unsigned) int2字节4字节8字节(signed/unsigned) long4字节4字节8字节(signed/unsigned) long long8字节8字节8字节float4字节4字节4字节double8字节8字节8字节
plt.rcParams[] pylot使用rc配置文件来自定义图形的各种默认属性,称之为rc配置或rc参数。通过rc参数可以修改默认的属性,包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等。
rc参数存储在字典变量中,通过字典的方式进行访问,如下代码:
import numpy as np import matplotlib.pyplot as plt ###%matplotlib inline #jupyter可以用,这样就不用plt.show() #生成数据 x = np.linspace(0, 4*np.pi) y = np.sin(x) #设置rc参数显示中文标题 #设置字体为SimHei显示中文 plt.rcParams['font.sans-serif'] = 'SimHei' #设置正常显示字符 plt.rcParams['axes.unicode_minus'] = False plt.title('sin曲线') #设置线条样式 plt.rcParams['lines.linestyle'] = '-.' #设置线条宽度 plt.rcParams['lines.linewidth'] = 3 #绘制sin曲线 plt.plot(x, y, label='$sin(x)$') plt.savefig('sin.png') plt.show() plt.rcParams['savefig.dpi'] = 300 #图片像素 plt.rcParams['figure.dpi'] = 300 #分辨率 plt.rcParams['figure.figsize'] = (10, 10) # 图像显示大小 plt.rcParams['image.interpolation'] = 'nearest' # 最近邻差值: 像素为正方形 #Interpolation/resampling即插值,是一种图像处理方法,它可以为数码图像增加或减少象素的数目。 plt.rcParams['image.cmap'] = 'gray' # 使用灰度输出而不是彩色输出 plt.
ES版本:7.3.2
1.在学习Elasticsearch的_search命令时报错,返回信息如下:
{ "error": { "root_cause": [ { "type": "parsing_exception", "reason": "Unknown key for a VALUE_STRING in [first_name].", "line": 2, "col": 14 } ], "type": "parsing_exception", "reason": "Unknown key for a VALUE_STRING in [first_name].", "line": 2, "col": 14 }, "status": 400 } 2.解决方法:是因为我的请求body里包含了数据:
{ "first_name":"Douglas", "last_name":"Fir", "age":35, "about":"I like to build cabinets", "interests":["forestry"] } 3.删除body内的内容,请求成功:
https://my.oschina.net/meandme/blog/874477