1.event.stopPropagation()方法
这是阻止事件的冒泡方法,不让事件向document上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开,
2.event.preventDefault()方法
这是阻止默认事件的方法,调用此方法是,连接不会被打开,但是会发生冒泡,冒泡会传递到上一层的父元素;
3.return false ;
这个方法比较暴力,他会同事阻止事件冒泡也会阻止默认事件;写上此代码,连接不会被打开,事件也不会传递到上一层的父元素;可以理解为return false就等于同时调用了event.stopPropagation()和event.preventDefault()
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> <a href="//caibaojian.com/w3school/" @click="btn($event)">W3School</a> <p>preventDefault() 方法将防止上面的链接打开 URL。</p> </div> </body> <script> new Vue({ el: '#app', methods: { btn(event) { //event.preventDefault() event.stopPropagation(); //如果是连接还是会打开 console.log(event.type); } } }) </script> </html>
问题
问题是这样的,要把一个数组存到tfrecord中,然后读取
a = np.array([[0, 54, 91, 153, 177,1],
[0, 50, 89, 147, 196],
[0, 38, 79, 157],
[0, 49, 89, 147, 177],
[0, 32, 73, 145]])
图片我都存储了,这个不还是小意思,一顿操作
import tensorflow as tf
import numpy as np
def _int64_feature(value):
if not isinstance(value,list):
value = [value]
return tf.train.Feature(int64_list=tf.train.Int64List(value=value))
# Write an array to TFrecord.
# a is an array which contains lists of variant length.
a = np.array([[0, 54, 91, 153, 177,1],
Swagger2不支持返回值为Object类型和Map,必须自定义转化类型,网上搜了好多都只有转化Map的,现在将Object类转化为对应泛型类,用上图红线代码,SwaggerUI页面Example Value区有返回值属性了,如下图,但是SingleDataResponse泛型类的data属性消失了,其父类的两个属性没消失,很奇怪,虽然把返回值全部改成SingDataResponse的泛型类可以解决,现在是想在Controller中不改变返回值(Object)的情况下在SwaggerUI页面中Example Value区展示对应返回值及属性,求各位大佬帮助解决下,搞了半天了一直没想到办法解决。
QQ:1209655494 有大佬帮我解决了 加QQ 我可以稍微感谢下!!!
1.通过命令查找某一特定端口,在命令窗口中输入命令中输入netstat -ano |findstr “端口号”,然后回车就可以看到这个端口被哪个应用占用。 netstat -ano|findstr "3306" 2.查看到对应的进程id之后,就可以通过id查找对应的进程名称,使用命令tasklist |findstr “进程id号” tasklist |findstr "4636" 3.通过命令杀掉进程,或者是直接根据进程的名称杀掉所有的进程,,在命令框中输入如下命令taskkill /f /t /im “进程id或者进程名称” taskkill /f /t /im "4636" 可以通过再次查看端口号来确认端口是否被占用和服务是否被杀掉 netstat -ano |findstr "3306"
不同于C语言和SHELL,python中没有switch case语句,关于为什么没有,官方的解释是这样的
使用Python模拟实现的方法:
def switch_if(fun, x, y):
if fun == ‘add‘:
return x + y
elif fun == ‘sub‘:
return x - y
elif fun == ‘mul‘:
return x * y
elif fun == ‘div‘:
return x / y
else:
return None
def switch_dict(fun, x, y):
return {
‘add‘: lambda: x + y,
‘sub‘: lambda: x - y,
‘mul‘: lambda: x * y,
‘div‘: lambda: x / y,
}.get(fun,None)()
情景再现 配置springmvc时,报错,实际mapping已经写了,错误截图如下:
解决方法 把web.xml添加进去即可
开发过程中,在模拟器和Android真机上使用图表在swiper 组件中滑动没有遇到任何问题,结果同事拿了iOS测试使用出现无法滑动的问题
因此查看了echarts官方文档和小程序官方文档
最后得到解决方法在设置图表属性的时候设置disableTouch的属性为true即可
ec: { disableTouch: true, }, 这样就可以解决在iOS真机上无法滑动的问题
希望遇到同样问题的同胞不要花费很多时间
var、let、const三者的不同之处 今天在开发过程中使用let在if语句中声明一个变量,结果在括号外面取不到,因此来总结一下。
在JavaScript中有三种声明变量的方式:var、let、const。在微信小程序中也同样适用,都可以声明变量,以下具体介绍三者的不同使用方法。
主要介绍在微信小程序中的使用场景:
1.var 用于声明全局变量。该变量的作用域为所在的函数内。
2.let 用于声明块级变量,即局部变量。该变量的作用域为所在的代码块内。
3.const 用于声明常量,也具有块级作用域。该变量一般在js文件最上方声明const常量。
4.var和let的区别就是声明的变量值的改变 function fun1(){ for(var i = 0; i <= 10;i++){ } console.log(i);//11;--------var变量提升 }; fun1(); function fun2(){ for(let i = 0; i <= 10;i++){ } console.log(i);//i is not defined;--------let没有变量提升 }; fun2(); 5.var和const的区别就是const声明的是常量,不可被后面的代码赋值改变 var a = 1; a = 2; console.log(a);//2;-----var声明的是变量,可被赋值替换 const b = 1; b = 2; console.log(b);//Assignment to constant variable.;------const声明的是常量,不可改变
$(document).on("input propertychange",".class",function(){ // 后续操作 });
第一种方法:使用insert into 插入,代码如下:
$params = array(‘value"=>"50′);
set_time_limit(0);
echo date(“H:i:s”);
for($i=0;$i<2000000;$i++){
$connect_mysql->insert($params);
};
echo date(“H:i:s”);
最后显示为:23:25:05 01:32:05 也就是花了2个小时多!
第二种方法:使用事务提交,批量插入数据库(每隔10W条提交下)最后显示消耗的时间为:22:56:13 23:04:00 ,一共8分13秒 ,代码如下:
echo date(“H:i:s”);
$connect_mysql->query(‘BEGIN");
$params = array(‘value"=>"50′);
for($i=0;$i<2000000;$i++){
$connect_mysql->insert($params);
if($i%100000==0){
$connect_mysql->query(‘COMMIT");
$connect_mysql->query(‘BEGIN");
}
}
$connect_mysql->query(‘COMMIT");
echo date(“H:i:s”);
第三种方法:使用优化SQL语句:将SQL语句进行拼接,使用 insert into table () values (),(),(),()然后再一次性插入,如果字符串太长,
则需要配置下MYSQL,在mysql 命令行中运行 :set global max_allowed_packet = 2*1024*1024*10;消耗时间为:11:24:06 11:25:06;
插入200W条测试数据仅仅用了1分钟!代码如下:
$sql= “insert into twenty_million (value) values”;
for($i=0;$i<2000000;$i++){
$sql.=”("50′),”;
};
$sql = substr($sql,0,strlen($sql)-1);
$connect_mysql->query($sql);
最后总结下,在插入大批量数据时,第一种方法无疑是最差劲的,而第二种方法在实际应用中就比较广泛,第三种方法在插入测试数据或者其他低要求时比较合适,速度确实快。
由于项目要求,一个.net mvc登录注册的东西网站必须放弃sqlserver数据去使用MySQL数据库,因此我遇到了一些问题,并找出相应的解决方法,
因为sqlserver跟MySQL的数据引擎不同所以必须引用第三方库,
第一种:使用MySQLDriverCS.dll,这个第三方库。
首先我从国内一个软件下载网站吓到这个地Dll,拷贝引用后,发现调试的时候,他就会报错,说已经加载Dll,但是找不到PDB文件,之前也遇到了这种问题,但是没有去解决,这次是准备把这个问题解决的,我试过重新拷贝引用,后来运行程序起来他还要告诉我还要一个Dll,于是我就去下了那个Dll,引用,发现并没办法引用,报错不是有效的DLL文件,下了很多东西,弄了两个消失发现然并卵,依旧无法解决这个问题。于是我就放弃这个了DLL。于是我就去利用某度如何使用MySQL数据库,找到了第二种方法。
第二种:依旧使用第三方库,MySql.Data.dll这个库。这次就不这么多事了,我直接就去官网下了DLL,然后直接拷贝,引用,具体教程你们看别人怎么时候的,我这里重点不是说这个。
第三种:通过ODBC访问MySQL数据库,具体怎么弄我就没研究了,应该是好弄得。
这篇文章的重点是,我用C#跟sqlserver数据库时,有一个sqlcommand的executenonquery方法是用来获取返回数据判断是否执行成功的,然后当我实例化sqlcommand对象,调用里面的方法,
我之前用sqlserver一直都是这样写的。代码差不多就是这样(见下):
上面的代码定义一个sqlcommand对象,然后对象实例化,调用对象里面executeNonQuery方法,从而获取到SQL语句执行返回的受影响行数一般都是这样的处理的吧。
但是当我用MySQLcommand就不同了,我用相同的方法他总是一直提醒我没有找到对象,提示错误,代码反复的查看一直没看出有什么问题,我一开始以为是我的语句的问题,一直在某度搜索语句,后来我就换了个方式看看别人代码是怎么写的,然后我就看到别人的代码里面没有声明MySQLcommand对象,直接是声明一个var类型,然后直接实例化MySQLcommand对象。然后我就改了下代码。(见图下),于是莫名其妙就好了。不过还是没找到原因,于是我就想写这个随笔记录下。
至于原因我就不去纠结了,但是我希望有大神帮我指正下,只是什么原因,因为我感觉自己的基础性知识太差了。求大神科普下,本篇文章纯手打,转载请注明出处
备注:测试数据库版本为MySQL 8.0
如需要scott用户下建表及录入数据语句,可参考:
scott建表及录入数据sql脚本
一.需求 生成报表时如果两行的同一列包含相同值,希望这个值仅显示一次。
例如,要从表emp中找出deptno和ename,按deptno给所有行分组,而且deptno仅显示一次。
希望返回如下结果集:
±-------±-------+
| deptno | ename |
±-------±-------+
| 10 | CLARK |
| NULL | KING |
| NULL | MILLER |
| 20 | SMITH |
| NULL | JONES |
| NULL | SCOTT |
| NULL | ADAMS |
| NULL | FORD |
| 30 | ALLEN |
| NULL | WARD |
| NULL | MARTIN |
电脑可通过WiFi、蓝牙及数据线三种方式来连接苹果手机的热点。
WiFi连接
1、打开苹果手机的热点功能,并为热点设置无线局域网密码。
2、点击电脑任务栏的WiFi图标,在弹出WiFi列表后点击“iPhone”。
3、然后点击“iPhone”下方的“连接”按钮,在输入WiFi密码后,点击下一步。
4、如果输入的密码正确,电脑即可通过WiFi使用的苹果手机的热点。
蓝牙连接 1、打开苹果手机的蓝牙功能。
2、打开苹果手机的热点功能。
3、通过电脑的控制面板打开“设备和打印机”窗口,然后点击“添加”,并在弹出的窗口中选择“iPhone”。
4、当手机与电脑弹出蓝牙配对窗口后,点击配对,配对成功后设备列表中会出现“iPhone”。
5、使用鼠标右键点击“iPhone”,在弹出的快捷菜单中依次选择“连接时使用”、“接入点”,即可完成操作。
数据线连接
1、首先打开苹果手机的热点功能。
2、通过USB线缆将苹果手机与电脑连接,并在手机端弹出信任窗口后,点击“允许”。
3、电脑会自动完成设置,并虚拟出一个网络适配器,用来连接手机的热点。
小结
以上便是电脑连接苹果手机热点的三种方法,其中通过WiFi或数据线进行连接,是最常用、最高效的方法。对于蓝牙连接,因为传输速度不及其它两种,因此在实际操作中很少使用。
01-分布式事务处理机制DTP模型
MySQL XA事务是基于Open Group 的<> 标准来实现的,目的是为了适配分布式事务,允许多个数据库实例参与到一个全局的事务中。XA事务功能在很早之前就被引入了,直到MySQL-5.7版本才趋于完善,很多数据库中间件也开始使用XA事务来实现分布式事务。先来看下Open Group组织所定义的分布式事务处理模型,也被称为DTP模型,如下:
其中涉及到的AP/RM/TM三个角色和定义如下:AP(Application Program):应用程序,主要是定义事务边界以及那些组成事务的特定于应用程序的操作。
RM(Resouces Manager):资源管理器,管理一些共享资源的自治域,如提供对诸如数据库之类的共享资源的访问。
TM(Transaction Manager):事务管理器,管理全局事务,协调事务的提交或者回滚,并协调故障恢复。02-MySQL-XA事务操作
在理解MySQL XA事务的工作原理时,需要将X/Open DTP模型中的各个组件映射到相关的MySQL组件中。MySQL引入binlog存储引擎作为操作日志的存储和传输,binlog和innobase同时参与到事务的提交过程,无论是普通事务操作还是XA事务操作,在MySQL内部都是一个分布式事务的处理过程,不同点在于MySQL XA事务的提交过程中将commit(2pc)操作显示的分为XA prepare 和XA commit两个过程来处理(细节稍有不同),以此来适配全局分布式事务。DTP模型与MySQL内部XA事务的对应关系如下:
而在全局分布式事务中,MySQL实例对应到DTP中的RM,如下:
MySQL对外提供了如下6条命令,供事务管理器来进行调度。xa start 开启一个XA事务
xa end 结束一个XA事务操作
xa prepare 准备提交一个XA事务
xa commit 正式提交一个XA事务
xa rollback 回滚一个XA事务
xa recover 列出所有处于prepared状态的XA事务
实际操作一遍就能明白,如下://开启XA事务
mysql> xa start 'trx1';
Query OK, 0 rows affected (0.00 sec)
//事务操作
mysql> insert into t1(name) values('ashe');
Query OK, 1 row affected (0.00 sec)
//事务操作
mysql> insert into t1(name) values('zed');
目录
一、setView
二、setZoom、zoomIn 和 zoomOut
三、panTo 和 flyTo
L.map 中有多种方法改变地图位置和缩放级别,接下来详细介绍。
一、setView 跳到指定中心点和缩放级数,API 说明如下:
包含 3 个参数,第一个是中心点,第二个是缩放级数,第三个是可选设置(可选)。
示例
// 指定中心点 let center = L.latLng(30.68, 113.98); // 方式 1:跳到指定中心点,不缩放级数。第二参数说明文档没有说是可选,但我测试可用且不报错 this.map.setView(center); // 方式 2:跳到指定中心点,不缩放级数。这里第二个参数使用 map.getZoom() 获取当前缩放级数 this.map.setView(center, this.map.getZoom()); // 方式 3:跳到指定中心点和指定的缩放级数 this.map.setView(center, 8); 二、setZoom、zoomIn 和 zoomOut 3 个关于缩放级数的设置方法,API 说明如下:
setZoom:设置指定级数;zoomIn :放大,第一个可选参数 delta,不设置时默认每次放大 1 个级别,否则根据指定级数放大;zoomOut:缩小,第一个可选参数 delta,不设置时默认每次缩小 1 个级别,否则根据指定级数缩小; 示例
// 缩放到指定级数 this.map.setZoom(8); // 放大:每次调用默认放大 1 个级数 this.map.zoomIn(); // 放大:每次调用放大 3 个级数 this.map.zoomIn(3); // 缩小:每次调用默认缩小 1 个级数 this.
记录一下爬虫学习爬取贴吧图片,按照以下b站视频教学,2021/1/27亲测有效,不会被封ip。
Python爬虫实战讲解:爬取百度贴吧全站图片
结果如下(手动打码):
源代码和笔记如下:
#多页爬取 ''' 需要环境 requests,parsel(xpath) 步骤 1.确定url地址 2.发送请求 3.解析数据(数据筛选)<两层数据解析> 4.保存数据(本地文件) ''' #requests实现帮助请求数据的要求 import requests import parsel page_num = 0 #换页 for page in range(0,55000+1,50): page_num+=1 print('===========================正在爬取第{}页数据===================='.format(str(page_num))) #1.确定url地址 #先确定它是静态网页还是动态网页 #静态网页:源代码都有网页的数据,并且没有经过浏览器的渲染以及加载 #判断静态数据:在源代码中搜索的到 url = 'https://tieba.baidu.com/f?ie=utf-8&kw=%E7%BA%A6%E4%BC%9A%E5%90%A7&fr=search&pn={}'.format(str(page)) #之后准备请求参数 #刷新页面后,Chrome的Network栏所有的数据包都可以呈现 #user-agent更换为了ie浏览器,方便后面的操作 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WoW64; Trident/7.0; rv:11.0) like Gecko'} #2.发送请求 response = requests.get(url,headers=headers) #状态码:200左右表示请求成功,300左右表示重定向,400左右表示URL地址有错误,500左右表示服务器错误 html_data = response.text #字符串类型数据,只能使用正则表达式 #print(html_data) #3.解析数据(数据筛选)<两层数据解析> #为了获得最高清的图片,而不是缩略图 #数据解析第一层:解析所有帖子的《链接》 #将字符串数据转换成Selector对象;该对象有re(正则表达式),css选择器,xpath路径选择器 html = parsel.Selector(html_data) #print(html) #两个/(双斜杠)表示跨节点提取,[@.
linux下mysql使用手册
发布时间:2013-12-12 15:02:50来源:红联作者:js54520062
linux 下的mysql数据库运行管理和操作并没有windows下那么直观 就本文对mysql常见操作做一个汇总
1、MySQL的几个重要目录
MySQL安装完成后不象SQL Server默认安装在一个目录,天信网络数据中心(简称天信网络)它的
数据库文件、配置文件和命令文件分别在不同的目录,了解这些目录非常重要,尤其对于Linux的初学者
,因为Linux本身的目录结构就比较复杂,如果搞不清楚MySQL的安装目录那就无从谈起深入学习。
下面就介绍一下这几个目录。
1、数据库目录
/var/lib/mysql/
2、配置文件
/usr/share/mysql(mysql.server命令及配置文件)
3、相关命令
/usr/bin(mysqladmin mysqldump等命令)
4、启动脚本
/etc/rc.d/init.d/(启动脚本文件mysql的目录)
一 登录MySQL
登录MySQL的命令是mysql, mysql 的使用语法如下:
mysql [-u username] [-h host] [-p[password]] [dbname]
username 与 password 分别是 MySQL 的用户名与密码,mysql的初始管理帐号是root,没有密码
,注意:这个root用户不是Linux的系统用户。MySQL默认用户是root,由于初始没有密码,第一次进时
只需键入mysql即可。
[root@test1 local]# mysql
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1 to server version: 4.0.16-standard
Type 'help;' or 'h' for help.
1:区域特征 1.1 面积 最简单的区域特征是区域的面积。
1.2 重心 重心用来描述区域的位置。
算子area_center用来得到面积和重心。
1.3 椭圆参数 椭圆的长轴半径、短轴半径、以及相对于横轴的夹角,用来定义区域的方位和范围。
长轴半径/短轴半径比:各向异性。在区域缩放时保持不变。用来描述区域的细长程度。
算子elliptic_axis用来获取椭圆参数.
1.4 外接矩形,外接圆 外接矩形分为最小平行轴外接矩形,任意方位最小外接矩形。同椭圆参数类似,任意方位最小外接矩形也可以用来定义区域的方位和范围。
1.5 凸性 定义为区域面积与该区域凸包面积之比。用来测量区域的紧凑程度,值在0~1之间。
算子convexity返回凸性
1.6 轮廓长度 区域的轮廓长度。算子contlength返回轮廓长度
区域的轮廓长度与区域的面积的比值:可以用来测量区域的紧性,紧性与凸性有着类似的用途。
1.7 算子region_features计算区域特征 region_features — Calculate shape features of regions.
Signature
region_features(Regions : : Features : Value)
1.8 算子select_shape根据区域特征选择区域 select_shape — Choose regions with the aid of shape features.
Signature
select_shape(Regions : SelectedRegions : Features, Operation, Min, Max : )
1.9 算子select_shape_std选择指定形状的区域 select_shape_std — Select regions of a given shape.
source insight4 设置相对路径步骤:
1)新建工程;
2)选择 project source directory时,必须选择工程的根目录!
3)选择文件并添加;
4)相对路径设置完成。
注意:
在project settings -> project source directory中再修改路径为“…\Untitled Project"不能生产相对路径。
文章目录 Java干货Java托盘1.启动类增加代码2.JVM增加参数3.加3个类1张图SystemTrayUtil(必须有的托盘类)TestApplication(名字可以随便改,启动类调用对就行,这是用于界面的类,也可以没有,用其他代替)Strings(用于判断空 可以不要或者用其他类代替,CharsetUtil可能会报错,使用来转utf-8的,可以其他代替)一张图(随便找个16*16的png 放Resources目录下即可,名字改成icon.png) 4.完结(默认情况如图) Java打包exe1.先下载exe4j打包工具前文介绍1.先下载官网https://exe4j.apponic.com/2.打好jar包后,确认激活后,直接开始打包,第二步选择JAR3.声明服务名,配合打包出来的exe存放位置4.选择打包好后的类型,名字以及图标4.选好启动类以及JVM参数的处理5.JRE是一个很关键的点6.然后下一步,下一步就打包好了 Java干货 JavaFx是从JDK1.8开始加入JDK,Java11单独分离,相对于之前的Java桌面程序友好了很多 主要讲一下SpringBoot集成JavaFx的干货 1.右下角生成托盘利于关闭(windows再也不用cmd查端口杀8080了) 2.打成exe方便部分win的情况下实施 Java托盘 1.启动类增加代码 Application.launch(TestApplication.class, args); 如图
2.JVM增加参数 -Djava.awt.headless=false -Dfile.encoding=GBK -Djava.awt.headless=false 是防止awt报错的
-Dfile.encoding=GBK是方式托盘中文乱码
3.加3个类1张图 SystemTrayUtil(必须有的托盘类) import javafx.application.Platform; import javafx.stage.Stage; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.awt.*; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseListener; import java.net.URL; /** * 自定义系统托盘(单例模式) */ @Slf4j @Component public class SystemTrayUtil { private static SystemTrayUtil instance; // private static MenuItem showItem; private static MenuItem exitItem; private static TrayIcon trayIcon; private static ActionListener showListener; private static ActionListener exitListener; private static MouseListener mouseListener; //图片默认路径 private static String png; //服务名 private static String appName; @Value("
Mesh presentations Open CASCADE除了支持3D物体的精确的几何表示,还提供了处理网格形式物体的三角剖分表示的函数。
网格函数提供了:
存储网格数据的数据结构, 处理这些数据的基本算法构造三角网格的数据结构和算法扩展Open CASCADE的3D可视化功能的工具,显示网格,现实相关的前后处理的数据 Open CASCADE包含两个网格转换器:
VRML(虚拟现实建模语言)转换器。转换后可以有两种表示形式:shaded或者wireframe. 前者将形状表示为一组由网格算法得出的三角形,后者将形状表示为曲线的集合。STL转换器。 Mesh algorithm 形状三角形化的算法由BRepMesh_IncrementalMesh类提供,其将形状的三角网格化添加到拓扑数据结构中。三角网格化用来显示形状。
#include <IMeshData_Status.hxx> #include <IMeshTools_Parameters.hxx> #include <BRepMesh_IncrementalMesh.hxx> Standard_Boolean meshing_explicit_parameters() { const Standard_Real aRadius = 10.0; const Standard_Real aHeight = 25.0; BRepPrimAPI_MakeCylinder aCylinder(aRadius, aHeight); TopoDS_Shape aShape = aCylinder.Shape(); const Standard_Real aLinearDeflection = 0.01; const Standard_Real anAngularDeflection = 0.5; BRepMesh_IncrementalMesh aMesher (aShape, aLinearDeflection, Standard_False, anAngularDeflection, Standard_True); const Standard_Integer aStatus = aMesher.GetStatusFlags(); return !aStatus; } Standard_Boolean meshing_imeshtools_parameters() { const Standard_Real aRadius = 10.
在前面章节中我们已经介绍了如何控制 STM32 的 IO 口输出高低电平,本章我们通过另外一个实验来讲述 STM32 IO 口的输出。通过 STM32F1 芯片的一个 IO口控制板载有源/无源蜂鸣器,实现蜂鸣器控制。
蜂鸣器介绍 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V 直流工作电压),多谐振荡器起振,输出 1.5~5kHZ 的音频信号,阻抗匹配器推动压电蜂鸣片发声。
电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
其实一句话就可概括它们之间的区别,想要压电式蜂鸣器发声,需提供一定频率的脉冲信号;想要电磁式蜂鸣器发声,只需提供电源即可。无源蜂鸣器,属于压电式蜂鸣器类型;有源蜂鸣器,属于电磁式蜂鸣器类型。这里说的有源,并不是指电源的意思,而是指蜂鸣器内部是否含有振荡电路,有源蜂鸣器内部自带振荡电路,只需提供电源即可发声,而无源蜂鸣器则需提供一定频率的脉冲信号才能发声,频率大小通常在 1.5-5KHz 之间。有源蜂鸣器实物如下图。
如果给有源蜂鸣器加一个 1.5-5KHz 的脉冲信号,同样也会发声,而且改变这个频率,就可以调节蜂鸣器音调,产生各种不同音色、音调的声音。如果改变输出电平的高低电平占空比,则可以改变蜂鸣器的声音大小。
硬件设计 在前面我们已经对 STM32 的 GPIO 做了简单介绍,并且还使用了其中
IO 口直接控制开发板上的 LED。对于本章要实现蜂鸣器的控制,我们能否直接使用 STM32 的 IO 口驱动呢?根据 STM32F103 芯片数据手册可知, 单个 IO 口的最大输出电流是 25mA,而蜂鸣器的驱动电流是 30mA 左右,两者非常接近,有的朋友就想直接用 IO 口来驱动,但是有没有考虑到整个芯片的输出电流,整个芯片的输出电流最大也就 150mA,如果在驱动蜂鸣器上就耗掉了 30mA,那么 STM32 其他的 IO 口及外设电流就非常拮据了。所以我们不会直接使用 IO 口驱动蜂鸣器,而是通过三极管把电流放大后再驱动蜂鸣器,这样 STM32 的 IO 口只需要提供不到1mA 的电流就可控制蜂鸣器。所以我们也经常说到 STM32 芯片是用来做控制的,而不是驱动。开发板上的无源蜂鸣器模块电路原理图如下所示。
开发板上的有源蜂鸣器模块电路原理图如下所示。
从这两个电路图可以看到, 无源蜂鸣器的控制需要给其一定频率的脉冲才能发声,仅给一个高电平或者低电平是不能发声的,因此蜂鸣器模块电路直接将STM32引脚接在NPN三极管的基极上, 然后三极管的发射极连接蜂鸣器,无需考虑外界对 PB5 脚产生的高低电平会对蜂鸣器发声干扰。如果使用的是有源蜂鸣器,它只要有电源就会发声,因此就必须考虑外界对 PB5 引脚电平的干扰问题。通过电阻 R06 和 PNP 三极管 TP6 进行电流放大,从而驱动蜂鸣器。电阻 R66 是一个上拉电阻, 用来防止蜂鸣器误发声。 当 PB5 引脚输出低电平时, PNP三极管导通,蜂鸣器发声;当 PB5 引脚输出高电平时,PNP 三极管截止,蜂鸣器停止发声。
原文:NodeMCU(ESP8266)开发笔记
1.NodeMCU简介 NodeMCU 是一款开源的物联网开发平台,其固件和开发板均开源,自带 WIFI 模块。基于该平台,用几行简单的 Lua 脚本就能开发物联网应用。
其主要特点如下:
像 Arduino 一样操作硬件 IO 提供硬件的高级接口,可以将应用开发者从繁复的硬件配置、寄存器操作中解放出来。用交互式 Lua 脚本,像 Arduino 一样编写硬件代码!
用 Nodejs 类似语法写网络应用 事件驱动型 API 极大的方便了用户进行网络应用开发,使用类似 Nodejs 的方式编写网络代码,并运行于 5mm*5mm 大小的 MCU 之上,加快您的物联网开发进度。
超低成本的 WIFI 模块 用于快速原型的开发板,集成了售价低于 10 人民币 WIFI 芯片 ESP8266,为您提供性价比最高的物联网应用开发平台。
基于乐鑫 ESP8266 的 NodeMCU 开发板,具有 GPIO、PWM、I2C、1-Wire、ADC 等功能,结合 NodeMCU 固件为您的原型开发提供最快速的途径。
其硬件详细配置如下:
核心模组为 ESP8266MCU 为 Xtensa L106RAM 50KFlash 512KD1~D10:10 GPIO, 每个都能配置为 PWM, I2C, 1-wire 有两种串口配置
CP2102 USB 串口,即插即用(官方驱动支持 Windows, OS X,Linux 以及 VMware)CH340 USB 串口,国内用的较多,需要安装ch340驱动。
在python中绘制热力图大致有两种方法通过matplotlib库的imshow函数以及seaborn库的heatmap函数,通过笔者尝试,seaborn库更加灵活,本篇以seaborn为准。
源代码如下:
import matplotlib.pyplot as plt import seaborn as sns import numpy as np sns.set() plt.rcParams['font.sans-serif']='SimHei'#设置中文显示,必须放在sns.set之后 np.random.seed(0) uniform_data = np.random.rand(10, 12) #设置二维矩阵 f, ax = plt.subplots(figsize=(9, 6)) #heatmap后第一个参数是显示值,vmin和vmax可设置右侧刻度条的范围, #参数annot=True表示在对应模块中注释值 # 参数linewidths是控制网格间间隔 #参数cbar是否显示右侧颜色条,默认显示,设置为None时不显示 #参数cmap可调控热图颜色,具体颜色种类参考:https://blog.csdn.net/ztf312/article/details/102474190 sns.heatmap(uniform_data, ax=ax,vmin=0,vmax=1,cmap='YlOrRd',annot=True,linewidths=2,cbar=True) ax.set_title('hello') #plt.title('热图'),均可设置图片标题 ax.set_ylabel('y_label') #设置纵轴标签 ax.set_xlabel('x_label') #设置横轴标签 #设置坐标字体方向,通过rotation参数可以调节旋转角度 label_y = ax.get_yticklabels() plt.setp(label_y, rotation=360, horizontalalignment='right') label_x = ax.get_xticklabels() plt.setp(label_x, rotation=45, horizontalalignment='right') plt.show() 效果图如下:
参考博客:https://blog.csdn.net/sunchengquan/article/details/78573244
操作系统和虚拟机 一.操作系统是什么?1.操作系统工作示意图2.操作系统作用3.不同领域的主流操作系统二.虚拟机1.定义2.Linux系统的安装 一.操作系统是什么? 操作系统(operating system,OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。
操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出装置、操作网络与管理文件系统等基本事务。操作系统也提供一个让使用者与系统互动的操作界面。
1.操作系统工作示意图 注释:没有安装操作系统的计算机称为裸机
想在裸机上运行自己编写的程序,就要用机器语言(二级制组合)
2.操作系统作用 操作系统的作用主要有三个:
1.方便性,一个未配置操作系统的计算机是极难使用的。
2.有效性,CPU的高速和外部设备的相对低速是计算机硬件无法逾越的基本矛盾,如果没有操作系统的管理,CPU和外部设备就会经常处于空闲状态。
3.提供应用软件的运行环境,操作系统位于应用软件和硬件之间,应用软件不能脱离操作系统而独立运行。
3.不同领域的主流操作系统 1.桌面操作系统
·windows 系列——用户群体大
·macOS——适合于开发人员
·Linux——应用软件少
2.服务器操作系统
·linux——安全、稳定、免费、占有率高
·windows Server——付费、占有率低
3.嵌入式操作系统
·Linux
4.移动设备操作系统
·iOS
·Android(基于Linux)
二.虚拟机 1.定义 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
·虚拟系统通过生成现有操作系统的全新虚拟镜像,具有真实操作系统完全一样的功能
·进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立桌面,不会对真正的系统产生任何的影响
·能够在现有系统与虚拟镜像之间灵活切换的一类操作系统
2.Linux系统的安装
Error: Failed to download metadata for repo 'epel': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
方法1:
cd /etc/yum.repos.d/
vim Centos-报错名
将baseurl 添加一个 https://mirrors.aliyun.com/centos/$releasever/BaseOS/$basearch/os/
还不行:可能之前安装过,重复配置了,删除相关repo文件 即可
centos7.x 查看主机名 hostname 输出结果 [root@master172381923123 ~]# hostname master172381923123 centos7.x 修改主机名 hostnamectl set-hostname '新的主机名' 输出示例 [root@master172381923123 ~]# hostnamectl set-hostname centos77 重新登录之后就会发现主机名已经修改成功 [root@centos77 ~]#
(以下连接,都基于笛卡尔积模型)
1.自然连接 关键字 nuatural join
概念:基于两个表中列名完全相同的列产生连接
注意:
[1]两个表有相同名字的列
[2]数据类型相同
[3]从两个表中选出连接列的值相等的所有行
语法:
select * from dept d natural join emp e 使用自然连接后,新表只会保留一个重复列。
自然连接的使用特点:
主外键关系且主外键字段只有一个。这样才会比较符合我们的实际运用。
2.using using 主要用于指定连接字段。
[1] 按照指定的字段连接两个表。
[2] 选指定字段值相同的数据行。
由于自然连接的局限性,Oracle推出了Using关键字,Using可以灵活地制定关键字段来进行连接。
select * from emp e join dept d using (deptno) 3. on 为了设置任意的连接条件或者指定连接的列,需要使用ON子句
连个表的关联用关键字 join ,默认内连接(inner) 语法
语法:
select filed1,fild2,… from table1 join table2 on condition1 [join table3 on condition2]* -- 查询出员工的部门名称 select * from dept d join emp e on d.
现在最热门的前端框架有AngularJS、React、Bootstrap等。自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领略
ReactJS的风采吧~~ 章有点长,耐心读完,你会有很大收获哦~
一、ReactJS简介
React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站。做出来以后,发现这套东西很好用,就在2013年5月开源了。由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单。所以,越来越多的人开始关注和使用,认为它可能是将来 Web 开发的主流工具。
ReactJS官网地址:http://facebook.github.io/react/
Github地址:https://github.com/facebook/react
二、对ReactJS的认识及ReactJS的优点
首先,对于React,有一些认识误区,这里先总结一下:
React不是一个完整的MVC框架,最多可以认为是MVC中的V(View),甚至React并不非常认可MVC开发模式;
React的服务器端Render能力只能算是一个锦上添花的功能,并不是其核心出发点,事实上React官方站点几乎没有提及其在服务器端的应用;
有人拿React和Web Component相提并论,但两者并不是完全的竞争关系,你完全可以用React去开发一个真正的Web Component;
React不是一个新的模板语言,JSX只是一个表象,没有JSX的React也能工作。
1、ReactJS的背景和原理
在Web开发中,我们总需要将变化的数据实时反应到UI上,这时就需要对DOM进行操作。而复杂或频繁的DOM操作通常是性能瓶颈产生的原因(如何进行高性能的复杂DOM操作通常是衡量一个前端开发人员技能的重要指标)。React为此引入了虚拟DOM(Virtual DOM)的机制:在浏览器端用Javascript实现了一套DOM API。基于React进行开发时所有的DOM构造都是通过虚拟DOM进行,每当数据变化时,React都会重新构建整个DOM树,然后React将当前整个DOM树和上一次的DOM树进行对比,得到DOM结构的区别,然后仅仅将需要变化的部分进行实际的浏览器DOM更新。而且React能够批处理虚拟DOM的刷新,在一个事件循环(Event Loop)内的两次数据变化会被合并,例如你连续的先将节点内容从A变成B,然后又从B变成A,React会认为UI不发生任何变化,而如果通过手动控制,这种逻辑通常是极其复杂的。尽管每一次都需要构造完整的虚拟DOM树,但是因为虚拟DOM是内存数据,性能是极高的,而对实际DOM进行操作的仅仅是Diff部分,因而能达到提高性能的目的。这样,在保证性能的同时,开发者将不再需要关注某个数据的变化如何更新到一个或多个具体的DOM元素,而只需要关心在任意一个数据状态下,整个界面是如何Render的。
如果你像在90年代那样写过服务器端Render的纯Web页面那么应该知道,服务器端所要做的就是根据数据Render出HTML送到浏览器端。如果这时因为用户的一个点击需要改变某个状态文字,那么也是通过刷新整个页面来完成的。服务器端并不需要知道是哪一小段HTML发生了变化,而只需要根据数据刷新整个页面。换句话说,任何UI的变化都是通过整体刷新来完成的。而React将这种开发模式以高性能的方式带到了前端,每做一点界面的更新,你都可以认为刷新了整个页面。至于如何进行局部更新以保证性能,则是React框架要完成的事情。
借用Facebook介绍React的视频中聊天应用的例子,当一条新的消息过来时,传统开发的思路如上图,你的开发过程需要知道哪条数据过来了,如何将新的DOM结点添加到当前DOM树上;而基于React的开发思路如下图,你永远只需要关心数据整体,两次数据之间的UI如何变化,则完全交给框架去做。可以看到,使用React大大降低了逻辑复杂性,意味着开发难度降低,可能产生Bug的机会也更少。
2、组件化
虚拟DOM(virtual-dom)不仅带来了简单的UI开发逻辑,同时也带来了组件化开发的思想,所谓组件,即封装起来的具有独立功能的UI部件。React推荐以组件的方式去重新思考UI构成,将UI上每一个功能相对独立的模块定义成组件,然后将小的组件通过组合或者嵌套的方式构成大的组件,最终完成整体UI的构建。例如,Facebook的instagram.com整站都采用了React来开发,整个页面就是一个大的组件,其中包含了嵌套的大量其它组件,大家有兴趣可以看下它背后的代码。
如果说MVC的思想让你做到视图-数据-控制器的分离,那么组件化的思考方式则是带来了UI功能模块之间的分离。我们通过一个典型的Blog评论界面来看MVC和组件化开发思路的区别。
对于MVC开发模式来说,开发者将三者定义成不同的类,实现了表现,数据,控制的分离。开发者更多的是从技术的角度来对UI进行拆分,实现松耦合。
对于React而言,则完全是一个新的思路,开发者从功能的角度出发,将UI分成不同的组件,每个组件都独立封装。
在React中,你按照界面模块自然划分的方式来组织和编写你的代码,对于评论界面而言,整个UI是一个通过小组件构成的大组件,每个组件只关心自己部分的逻辑,彼此独立。
React认为一个组件应该具有如下特征:
(1)可组合(Composeable):一个组件易于和其它组件一起使用,或者嵌套在另一个组件内部。如果一个组件内部创建了另一个组件,那么说父组件拥有(own)它创建的子组件,通过这个特性,一个复杂的UI可以拆分成多个简单的UI组件;
(2)可重用(Reusable):每个组件都是具有独立功能的,它可以被使用在多个UI场景;
(3)可维护(Maintainable):每个小的组件仅仅包含自身的逻辑,更容易被理解和维护;
三、下载ReactJS,编写Hello,world
ReactJs下载非常简单,为了方便大家下载,这里再一次给出下载地址(链接),下载完成后,我么看到的是一个压缩包。解压后,我们新建一个html文件,引用react.js和JSXTransformer.js这两个js文件。html模板如下(js路径改成自己的):
这里大家可能会奇怪,为什么script的type是text/jsx,这是因为 React 独有的 JSX 语法,跟 JavaScript 不兼容。凡是使用 JSX 的地方,都要加上 type="text/jsx" 。 其次,React 提供两个库: react.js 和 JSXTransformer.js ,它们必须首先加载。其中,JSXTransformer.js 的作用是将 JSX 语法转为 JavaScript 语法。这一步很消耗时间,实际上线的时候,应该将它放到服务器完成。
淘宝接口 接口地址:
http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=18519101034 返回内容:
__GetZoneResult_ = { mts:'1851910', province:'北京', catName:'中国联通', telString:'18519101034', areaVid:'29400', ispVid:'137815084', carrier:'北京联通' } 注意:接口返回的内容不是json,可以把“_GetZoneResult =”删掉后,转换成json
360接口 接口地址:
https://cx.shouji.360.cn/phonearea.php?number=18519101034 返回内容:
{ "code": 0, "data": { "province": "北京", "city": "", "sp": "联通" } } ITEBLOG接口 接口地址:
https://www.iteblog.com/api/mobile.php?mobile=18519101034 返回内容:
{ "ID": "280889", "prefix": "1851910", "province": "北京", "city": "北京", "operator": "中国联通", "areaCode": "010", "zip": "100000", "ret": 0, "searchStr": "18519101034", "from": "https://www.iteblog.com/api/mobile.php", "ip": "114.243.220.66", "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.
C 断言使用 断言为什么会打断程序执行?因为 __noreturn__ assert.h
# define assert(__e) ((__e) ? (void)0 : __assert_func (__FILE__, __LINE__, \ __ASSERT_FUNC, #__e)) void __assert_func (const char *, int, const char *, const char *) _ATTRIBUTE ((__noreturn__)); 静态断言 _Static_assert 静态断言将在编译时期被检查
static-assert-in-c
_Static_assert(sizeof(long)==7, this_should_be_true) build fail sas.c:4: error: size of array ‘static_assertion_this_should_be_true’ is negative #define _Static_assert(COND,MSG) typedef char static_assertion_##MSG[(COND)?1:-1] 关闭断言 开启宏:
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT 断言关闭风险 assert(func()) 以上代码在关闭断言时,会导致 func 不被执行
普通创建对象 /** * @author jason jason@aistrong.com * @date 2021/1/21 18:20 */ /** * @author jason jason@aistrong.com * @date 2021/1/21 18:20 */ public class Person { public static void main(String[] args) { for (int i = 0; i < 100; i++) { new Thread(()->{ Person person = new Person(); System.out.println(person); }).start(); } } } 输出结果 发现每次创建对象都是新的对象,单例模式要求每次创建的对象是同一个对象 com.aistrong.singleton.Person@74b47802 com.aistrong.singleton.Person@74f84cf com.aistrong.singleton.Person@72d6db17 com.aistrong.singleton.Person@5015b31e 饿汉式 /** * 饿汉式 * 优点:写法简单,线程安全 * 缺点:当类被加载到内存中的时候,就会创建对象,造成内存浪费 * * @author jason jason@aistrong.
解决乱码的方法,我们经常使用“set names utf8”,那么为什么加上这句代码就可以解决了呢?下面跟着我一起来深入set names utf8的内部执行原理
先说MySQL的字符集问题。Windows下可通过修改my.ini内的
PHP代码
[mysql]
default-character-set=utf8 //客户端的默认字符集
[mysqld]
default-character-set=utf8 //服务器端默认的字符集
假设我们把两个都设为utf8,然后在MySQL Command Line Client里面输入“show variebles like“character_set_%”;”,可看到如下字符:
character_set_client latin1
character_set_connection latin1
character_set_database utf8
character_set_results latin1
character_set_server utf8
character_set_system utf8
要是我们通过采用UTF-8的PHP程序从数据库里读取数据,很有可能是一串“?????”或者是其他乱码。
解决办法是,在连接数据库之后,读取数据之前,先执行一项查询“SET NAMES UTF8”,即在PHP里为
mysql_query("SET NAMES UTF8");
//该句话一定要放在数据库服务器连接语句【$connection=mysql_connect($db_host,$db_user,$db_psw)or die("连接服务器失败");】之后
即可显示正常(只要数据库里信息的字符正常)。
到MySQL命令行输入“SET NAMES UTF8;”,然后执行“show variebles like“character_set_%”;”,发现原来为latin1的那些变量“character_set_client”、“character_set_connection”、“character_set_results”的值全部变为utf8了,原来是这3个变量在捣蛋。
查阅手册,上面那句等于:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
看看这3个变量的作用:
信息输入路径:client→connection→server;
信息输出路径:server→connection→results。
换句话说,每个路径要经过3次改变字符集编码。以出现乱码的输出为例,server里utf8的数据,传入connection转为latin1,传入results转为latin1,utf-8页面又把results转过来。如果两种字符集不兼容,比如latin1和utf8,转化过程就为不可逆的,破坏性的。
但这里要声明一点,“SET NAMES UTF8”作用只是临时的,MySQL重启后就恢复默认了。
接下来就说到MySQL在服务器上的配置问题了。岂不是我们每次对数据库读写都得加上“SET NAMESUTF8”,以保证数据传输的编码一致?能不能通过配置MySQL来达到那三个变量默认就为我们要想的字符集?手册上没说,我在网上也没找到答案。所以,从服务器配置的角度而言,是没办法省略掉那行代码的。
总结:为了让你的网页能在更多的服务器上正常地显示,还是加上“SET NAMES UTF8”吧,即使你现在没有加上这句也能正常访问。
1.下载vsftpd yum install -y vsftpd 2.设置开机自启动 systemctl enable vsftpd.service 3.启动 systemctl start vsftpd.service 4.查看监听端口 netstat -antup | grep ftp 5.配置vsftpd本地用户模式(就是配置用户名、密码、修改权限) useradd ftptest passwd ftptest mkdir /var/ftp/test # 创建一个供ftp服务使用的文件目录 chown -R ftptest:ftptest /var/ftp/test # 修改该目录的拥有者为ftptest 6.修改配置文件:vim /etc/vsftpd/vsftpd.conf #除下面提及的参数外,其他参数保持默认值即可。 #修改下列参数的值 anonymous_enable=NO #禁止匿名登录FTP服务器 local_enable=YES #允许本地用户登录FTP服务器 listen=YES #监听IPv4 sockets #在行首添加#注释掉以下参数 #listen_ipv6=YES #关闭监听IPv6 sockets local_root=/var/ftp/test chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list allow_writeable_chroot=YES pasv_enable=YES pasv_min_port=50000 pasv_max_port=51000 pasv_address=49.235.71.50 7.创建例外用户文件 vim /etc/vsftpd/chroot_list # 哪怕没有例外用户也必须创建 8.重启 systemctl restart vsftpd.service
目录 问题1:问题2问题3: 问题1: If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config,
then re-run cmake or config
情况分析:之前先安装了pycharm,然后安装了anaconda,然后再卸载,环境被我搞混了。然后去CSDN查,发现他的解决步骤如下:
conda remove opencv conda install -c menpo opencv pip install --upgrade pip pip install opencv-contrib-python 然后我就去跟着敲,然后发现又来第二个BUG:‘conda’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
问题2 ‘conda’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
在csdn上找到解决方法,找到Anaconda安装路径和Scripts路径,两个都添加进去,然后因为我安装的位置有点奇怪,一直找不到文件夹在哪,然后我就卸载重装,在重装的过程中,点了选项
让他自己添加环境变量,安装好了之后,问题2解决了,问题1也解决了。然后开心地运行了我的程序,然后又出现新bug了。
问题3: 执行imread函数,图片一闪而过
还是上csdn上查,解决方法:添加cv2.waitKey(0)
加完之后,又出现新bug了
module ‘cv2.cv2’ has no attribute ‘waitkey’
将cv2.waitKey(0)写成cv2.waitkey(0)了,注意k是大写!
结果第一天很“愉快”地过去了,图片也显示出来了
问题如下图:
实际上文件目录为下图:
解决方法:
File->Settings->Project Structure->Add Content Root
设置为项目所在文件夹即可解决问题:
1.Var命令 var申明的变量是全局变量,其作用域为所在的函数内。如下图1所示var命令会发生”变量提升“现象,即变量可以在声明之前使用。如下图2所示 2.Let命令 let声明的变量是局部变量,该变量只会在最靠近{ }内的范围有效,出了{}之后,该变量就不能用了,否则会报该变量未定义的错误。let声明的变量只在它所在的代码块有效。for循环的计数器,就很合适使用let命令。let不允许在相同作用域内,重复声明同一个变量 3.Const命令 const声明一个只读的常量。一旦声明,常量的值就不能改变。const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值,只声明不赋值,就会报错。const声明的常量,也与let一样不可重复声明
获取线程执行结果的几种方式 1、Callable 线程 public class FetchAdTask implements Callable<Ad> { @Override public Ad call() throws Exception { System.out.println("fetch task"); sleep(1000L); return null; } } 2、使用Future,包括 FutureTask、CompletableFuture CompletableFuture.get(); Future 的优点:可以对任务设置时限,如果超时了,可以取消,然后返回一个默认结果,防止
某一个任务出现问题,导致系统出现问题。
f.get(timeLeft, TimeUnit.NANOSECONDS); 或者通过 invokeAll() 返回限定时间范围内的所有任务的结果。
executor.invokeAll(tasks, time, unit); CompletableFuture, 使用 supplyAsync 方法提交线程,使用 get 方法获取结果。
CompletableFuture<Integer> task3 = CompletableFuture.supplyAsync(() -> { System.out.println("任务3, 线程名字" + Thread.currentThread().getName()); try { sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } return 3; }); CompletableFuture.allOf(task1, task2, task3, task4); System.
在Window窗体里面,最常见的控制外观的属性有Icon、Title、WindowStyle、ResizeMode;控制窗口位置的属性WindowStartupLocation、Topmost。
下面介绍三种控制外观的属性Icon、Title和WindowStyle。
一、Icon指定窗口的图标,可以使用任意一张图片做图标。
二、Title指定窗口的标题。
上述两项如下图:
代码:
效果图:
三、WindowStyle指定窗口样式,有四种类型。
1、None:无边框;没有边框。
WindowStyle=“None”
2、SingleBorderWindow:单边框,系统默认的样式;没有任何的边框样式。
WindowStyle=“SingleBorderWindow”
3、ThreeDBorderWindow:3D边框;一般情况下看不到。
WindowStyle=“ThreeDBorderWindow”
4、ToolWindow:工具箱窗口;此时无法看到图标。
WindowStyle=“ToolWindow”
先上Animate官网地址:https://animate.style/
一、安装:我用的yarn 安装
$ yarn add animate.css 安装成功截图
二、引用(修改main.js)
import animated from 'animate.css' // npm install animate.css --save安装,再引入 Vue.use(animated) 三、应用
1.直接使用类名
<h1 class="animate__animated animate__bounce">An animated element</h1> <transition mode="out-in" enter-active-class="animate__animated animate__bounceInLeft" leave-active-class="animate__animated animate__backOutRight"> <router-view /> </transition> 2.css中写入动画效果
<h2>An animated element</h2> h2{ animation-name:flash ; animation-duration: 3s; /*animation:turn 1s linear infinite;*/ }
img – alt与title的区别: 1.alt 属性指定了替代文本,用于在图像无法显示或者用户禁用图像显示时,代替图像显示在浏览器中的内容。 2.title属性,当配置后鼠标挪动该图片上时显现title配置的内容。 1.当图片添加alt属性但是图像无法正常显示: <img src="../../image/small-A1.jpeg" alt="蜡笔小新" /> 显示:
2.当图片添加alt属性且图像正常显示:
<img src="../../image/small-A.jpeg" alt="蜡笔小新" /> 显示:
3.当图片添加title属性且成功显示时:
<img src="../../image/small-A.jpeg" title="蜡笔小新" /> 显示:
4.当图片添加title属性但未成功显示时: <img src="../../image/small-A1.jpeg" title="蜡笔小新" /> 显示:
本指南将引导您完成使用Spring创建基于SOAP的Web服务的过程,这个服务将公开公开来自不同欧洲国家的数据,供你查询。
为了简化示例,您将通过硬编码编写英国、西班牙和波兰的数据。
我利用业余时间,翻译了Spring官网的例子,方便中文不好的同学,将陆续发到头条上,欢迎大家关注,也可以上我个人BLOG:itmanclub.com,上面有已经翻译过的。
程序结构
└── src └── main └── java └── hello pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>4.0.0org.springframework gs-producting-web-service 0.1.0org.springframework.boot spring-boot-starter-parent 2.1.6.RELEASEorg.springframework.boot spring-boot-starter-web 1.8org.springframework.boot spring-boot-maven-plugin Spring Boot将会你做如下的事:
将classpath里面所有用到的jar包构建成一个可执行的 JAR 文件,方便执行你的程序搜索public static void main()方法并且将它当作可执行类根据springboot版本,去查找相应的依赖类版本,当然你可以定义其它版本。 增加Spring-WS依赖
您创建的项目需要将spring-ws-core作为依赖项包含在构建文件和wsdl4j中。
对于maven:
org.springframework.boot spring-boot-starter-web-serviceswsdl4j wsdl4j 对于gradle:
sourceCompatibility = 1.8targetCompatibility = 1.8dependencies { compile("org.springframework.boot:spring-boot-starter-web-services") testCompile("org.springframework.boot:spring-boot-starter-test") compile("wsdl4j:wsdl4j:1.6.1") jaxb("org.glassfish.jaxb:jaxb-xjc:2.2.11") compile(files(genJaxb.classesDir).builtBy(genJaxb))} 创建XML schema以定义域
Web服务域是在XML schema文件(XSD)中定义的,Spring-WS将自动导出为WSDL。
创建一个带有操作的XSD文件,以返回一个国家的名称、人口、首都和货币:
src/main/resources/countries.xsd
基于XML schema生成域类
下一步是从XSD文件生成Java类。正确的方法是在构建期间使用Maven或Gradle插件自动执行此操作。
Maven的插件配置:
org.codehaus.mojo jaxb2-maven-plugin 1.6xjcxjc${project.basedir}/src/main/resources/${project.basedir}/src/main/javafalse 生成的类放在target/generated-sources/jaxb/目录中。
Gradle的插件配置
要对Gradle执行相同的操作,首先需要在构建文件中配置JAXB:
configurations { jaxb}bootJar { baseName = 'gs-producing-web-service' version = '0.
【目的】依次将多个文件的内容原样输出
文件一:0.in
内容:1 2 3
文件二:1.in
内容:4 5 6
文件三:3.in
内容:7 8 9
程序如下:
#include<iostream> #include<cstdio> using namespace std; int main() { int iii=0; char inn[40],ouu[40]; for(iii=0; iii<3; iii++){ sprintf(inn,"%s%d%s", "", iii,".in"); // sprintf(ouu,"%s%d%s", "", iii,".out"); freopen(inn,"r",stdin); // freopen(ouu,"w",stdout); //程序主体部分 cout<<inn<<endl<<endl; int i; int a[100]; for(i=0; i<3; i++){ cin>>a[i]; } for(i=0; i<3; i++){ cout<<a[i]<<" "; } cout<<endl<<endl; fclose(stdin); cin.clear();//清空输入 } return 0; } 这里边很重要的一点就是最后需要 关闭重定向输入,同时清空cin。要不然结果就不对!!!
fclose(stdin);//关闭重定向输入 cin.clear();//清空输入 输出结果如下:
问题是由于强制转换和显式运算符:
(byte)objectExpression与(byte)sbyteExpression不同.
第一个是[direct]强制转换失败,因为真实对象类型是sbyte而不是byte.后者将执行转换,恰好使用带有语法的显式运算符(“显式转换”),遗憾的是,仍然看起来像上面的[direct]强制转换.这是一个失败sans-database的例子:
var obj = (object)(sbyte)0;
var i1 = (int)(sbyte)obj; // okay: object (cast)-> sbyte (conversion)-> int
var i2 = (int)obj; // fail: sbyte (cast)-> int (but sbyte is not int!)
要么使用对实际对象类型有效的(sbyte)objectExpression强制转换,要么使用Convert.ToInt32(objectExpression),它接受一个对象并做一些魔法将其转换为int. (使用Convert.ToByte可能会在溢出时抛出异常.)
快乐的编码!
方法 1: 用 SET PASSWORD 命令
登录MySQL
格式:mysql> set password for 用户名@localhost = password('新密码');
方法 2:用 UPDATE 直接编辑 user 表
登录MySQL
mysql> use mysql;
mysql> update user set password=password('123') where user='root' and host='localhost';
mysql> flush privileges;
方法 3:在shell命令行里修改MySQL用户密码
格式:mysqladmin -u用户名 -p旧密码 password 新密码
方法 4:在忘记 root 密码的时候,可以这样,以 windows 为例:
1. 关闭正在运行的 MySQL 服务。
2. 打开 DOS 窗口,转到 mysql\bin 目录。
3. 输入 mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。
4. 再开一个 DOS 窗口(因为刚才那个 DOS 窗口已经不能动了),转到 mysql\bin 目录。
上一课时我介绍了 Docker 网络实现,为我们的容器插上了网线。这一课时我将介绍 Docker 的卷,为我们的容器插上磁盘,实现容器数据的持久化。
为什么容器需要持久化存储 容器按照业务类型,总体可以分为两类:
无状态的(数据不需要被持久化)
有状态的(数据需要被持久化)
显然,容器更擅长无状态应用。因为未持久化数据的容器根目录的生命周期与容器的生命周期一样,容器文件系统的本质是在镜像层上面创建的读写层,运行中的容器对任何文件的修改都存在于该读写层,当容器被删除时,容器中的读写层也会随之消失。
虽然容器希望所有的业务都尽量保持无状态,这样容器就可以开箱即用,并且可以任意调度,但实际业务总是有各种需要数据持久化的场景,比如 MySQL、Kafka 等有状态的业务。因此为了解决有状态业务的需求,Docker 提出了卷(Volume)的概念。
什么是卷?卷的本质是文件或者目录,它可以绕过默认的联合文件系统,直接以文件或目录的形式存在于宿主机上。卷的概念不仅解决了数据持久化的问题,还解决了容器间共享数据的问题。使用卷可以将容器内的目录或文件持久化,当容器重启后保证数据不丢失,例如我们可以使用卷将 MySQL 的目录持久化,实现容器重启数据库数据不丢失。
Docker 提供了卷(Volume)的功能,使用docker volume命令可以实现对卷的创建、查看和删除等操作。下面我们来详细了解一下这些命令。
Docker 卷的操作 创建数据卷
使用docker volume create命令可以创建一个数据卷。
我们使用以下命令创建一个名为 myvolume 的数据卷:
$ docker volume create myvolume 在这里要说明下,默认情况下 ,Docker 创建的数据卷为 local 模式,仅能提供本主机的容器访问。如果想要实现远程访问,需要借助网络存储来实现。Docker 的 local 存储模式并未提供配额管理,因此在生产环境中需要手动维护磁盘存储空间。
除了使用docker volume create的方式创建卷,我们还可以在 Docker 启动时使用 -v 的方式指定容器内需要被持久化的路径,Docker 会自动为我们创建卷,并且绑定到容器中,使用命令如下:
$ docker run -d --name=nginx-volume -v /usr/share/nginx/html nginx 使用以上命令,我们启动了一个 nginx 容器,-v参数使得 Docker 自动生成一个卷并且绑定到容器的 /usr/share/nginx/html 目录中。
我们可以使用docker volume ls命令来查看下主机上的卷:
$ docker volume ls DRIVER VOLUME NAME local eaa8a223eb61a2091bf5cd5247c1b28ac287450a086d6eee9632d9d1b9f69171 可以看到,Docker 自动为我们创建了一个名称为随机 ID 的卷。
第八章:数值积分和数值微分 用复化梯形公式计算 ∫ 0 1 2 1 + x 2 d x \int _ { 0 } ^ { 1 } \frac { 2 } { 1 + x ^ { 2 } } d x ∫011+x22dx,使其截断误差不超过0.01.
f ( x ) = 2 1 + x 2 f(x)=\frac{2}{1+x^2} f(x)=1+x22
d d x ( 2 1 + x 2 ) = − 4 x ( 1 + x 2 ) 2 \frac { d } { d x } ( \frac { 2 } { 1 + x ^ { 2 } } ) = - \frac { 4 x } { ( 1 + x ^ { 2 } ) ^ { 2 } } dxd(1+x22)=−(1+x2)24x
1.
sample 1:
Lag()就是取当前顺序的上一行记录。结合over就是分组统计数据的。
Lag()函数,就是去上N行的字段的数据。
SQL> select * from x;
A
----------
1
2
3
5
SQL> select a as snaped,
lag(a, 2) OVER(ORDER BY a) as snapst
from x;
SNAPED SNAPST
---------- ----------
1
2
3 1
5 2
SQL>
sample 2:
SQL> select * from test;
QTY
----------
1
2
3
4
SQL> select sum(qty) from test;
SUM(QTY)
----------
10
SQL> select sum(qty)over(order by qty) from test;
展开全部
用row_number来查询。
具体方法如下:62616964757a686964616fe4b893e5b19e31333337613830
以sqlserver2008R2为例。
1、创建数据表插入数据:create table test
(id int,
name varchar(20))
insert into test values (1000,'张三')
insert into test values (1001,'李四')
insert into test values (1002,'王五')
insert into test values (1003,'赵六')
insert into test values (1004,'孙七')
insert into test values (1005,'杨八')
insert into test values (1006,'刘九')
insert into test values (1007,'李白')
insert into test values (1008,'杜甫')
insert into test values (1009,'白居易')
insert into test values (1010,'王安石')
insert into test values (1011,'范仲淹')
一直以来只知道mysql_query("SET NAMES UTF8");是设定数据库编码的,但是一直不清楚“SET NAMES UTF8”是什么。
直到今天才知道 SET NAMES ...是mysql语句。
真的感觉到自己的功课还没做到家,现有知识储备比较匮乏。现将所查相关资料记下:
1、SET NAMES ‘charset_name’
SET NAMES显示客户端发送的SQL语句中使用什么字符集。因此,SET NAMES 'cp1251'语句告诉服务器将来从这个客户端传 来的信息采用字符集cp1251”。它还为服务器发送回客户端的结果指定了字符集。(例如,如果你使用一个SELECT语句,它表示列值使用了什么字符 集。)
2、连接字符集和校对
(1) 一些字符集和校对规则系统变量与客户端和服务器的交互有关。
· 服务器字符集和校对规则可以用作character_set_server和collation_server变量的值。
· 默认数据库的字符集和校对规则可以用作character_set_database和collation_database变量的值。
在客户端和服务器的连接处理中也涉及了字符集和校对规则变量。
每一个客户端有一个连接相关的字符集和校对规则变量。
(2)考虑什么是一个“连接”:它是连接服务器时所作的事情。
客户端发送SQL语句,例如查询,通过连接发送到服务器。
服务器通过连接发送响应给客户端,例如结果集。
对于客户端连接,这样会导致一些关于连接的字符集和 校对规则的问题,这些问题均能够通过系统变量来解决:
(3) 当查询离开客户端后,在查询中使用哪种字符集?
服务器使用character_set_client变量作为客户端发送的查询中使用的字符集。
(4) 服务器接收到查询后应该转换为哪种字符集?
转换时,服务器使用character_set_connection和collation_connection系统变量。它将客户端发送的查 询从character_set_client系统变量转换到character_set_connection(除非字符串文字具有象_latin1或 _utf8的引介词)。collation_connection对比较文字字符串是重要的。对于列值的字符串比较,它不重要,因为列具有更高的 校对规 则优先级。
(5)服务器发送结果集或返回错误信息到客户端之前应该转换为哪种字符集?
character_set_results变量指示服务器返回查询结果到客户端使用的字符集。包括结果数据,例如列值和结果元数据(如列名)。
示例:
mysql_query("set names 'utf8'"); //使用utf8编码;