SpringCloud Alibaba Sentinel整合SpringCloud OpenFeign,启动报错 FactoryBean threw exception on object creation; nested exception is java.lang.AbstractMethodError: com.alibaba.cloud.sentinel.feign.SentinelContractHolder.parseAndValidatateMetadata(Ljava/lang/Class;)Ljava/util/List;
报错原因:
Sentinel框架SentinelContractHolder类中找不到parseAndValidatateMetadata这个方法,是因为这个方法拼写有错误,在Sentinel和OpenFeign新版本中已经修正为parseAndValidateMetadata
版本方法名< 2.2.1.RELEASEparseAndValidatateMetadata>= 2.2.2.RELEASEparseAndValidateMetadata Sentinel(2.2.1.RELEASE)中的SentinelContractHolder类调用的是新版本的OpenFeign(2.2.2.RELEASE)方法
而Spring Cloud Alibaba(2.2.1.RELEASE)引入的是旧版本的OpenFeign(2.2.1.RELEASE)方法
解决方法
解决版本差异问题覆盖SentinelContractHolder类,使其继续调用旧版parseAndValidatateMetadata方法
在项目模块中新建包:com.alibaba.cloud.sentinel.feign
然后添加如下类:package com.alibaba.cloud.sentinel.feign; import feign.Contract; import feign.MethodMetadata; import java.util.HashMap; import java.util.List; import java.util.Map; public class SentinelContractHolder implements Contract { private final Contract delegate; /** * map key is constructed by ClassFullName + configKey. configKey is constructed by {@link * feign.Feign#configKey} */ public final static Map<String, MethodMetadata> METADATA_MAP = new HashMap<>(); public SentinelContractHolder(Contract delegate) { this.
展开全部
SQL做除法的步骤:
select
t.[origin-destination],t.[SH/LANE/MOT] /(select count(1) from ['TMS$']) AS PERCENTAGEFROM (代码1) t
group by [origin-destination],t.[SH/LANE/MOT]
having t.[SH/LANE/MOT] /count(*) <= 0.01
注:两个count都是int,相除会没有小数部分,所以应该都给转32313133353236313431303231363533e4b893e5b19e31333431363639成带小数的数。
cast as numeric(10,4) 。
扩展资料
例题,表明为chuqinqk 列名 迟到 1(次)一个月的总天数为30 求迟到率。
select * from table1 where 工资>2500 and 工资<3000 //同上
select 姓名 from table1 where 性别='0' and 工资='4000'
select * from table1 where not 工资= 3200
select * from table1 order by 工资desc //将工资按照降序排列
select * from table1 order by 工资 asc //将工资按照升序排列
1 XA协议
首先我们来简要看下分布式事务处理的XA规范
可知XA规范中分布式事务有AP,RM,TM组成:
其中应用程序(Application Program ,简称AP):AP定义事务边界(定义事务开始和结束)并访问事务边界内的资源。
资源管理器(Resource Manager,简称RM):Rm管理计算机共享的资源,许多软件都可以去访问这些资源,资源包含比如数据库、文件系统、打印机服务器等。
事务管理器(Transaction Manager ,简称TM):负责管理全局事务,分配事务唯一标识,监控事务的执行进度,并负责事务的提交、回滚、失败恢复等。
Xa主要规定了RM与TM之间的交互,下面来看下XA规范中定义的RM 和 TM交互的接口:
本图来着 参考文章XA规范25页
xa_start负责开启或者恢复一个事务分支,并且管理XID到调用线程
xa_end 负责取消当前线程与事务分支的关联
xa_prepare负责询问RM 是否准备好了提交事务分支
xa_commit通知RM提交事务分支
xa_rollback 通知RM回滚事务分支
XA协议是使用了二阶段协议的,其中:
第一阶段TM要求所有的RM准备提交对应的事务分支,询问RM是否有能力保证成功的提交事务分支,RM根据自己的情况,如果判断自己进行的工作可以被提交,那就就对工作内容进行持久化,并给TM回执OK;否者给TM的回执NO。RM在发送了否定答复并回滚了已经的工作后,就可以丢弃这个事务分支信息了。
第二阶段TM根据阶段1各个RM prepare的结果,决定是提交还是回滚事务。如果所有的RM都prepare成功,那么TM通知所有的RM进行提交;如果有RM prepare回执NO的话,则TM通知所有RM回滚自己的事务分支。
也就是TM与RM之间是通过两阶段提交协议进行交互的。
2 MySQL中XA实现
MYSQL的数据库存储引擎InnoDB的事务特性能够保证在存储引擎级别实现ACID,而分布式事务让存储引擎级别的事务扩展到数据库层面,甚至扩展到多个数据库之间,这是通过两阶段提交协议来实现的,MySQL 5.0或者更新版本开始支持XA事务,从下图可知MySQL中只有InnoDB引擎支持XA协议:
Mysql中存在两种XA事务,一种是内部XA事务主要用来协调存储引擎和二进制日志,一种是外部事务可以参与到外部分布式事务中(比如多个数据库实现的分布式事务),本节我们主要讨论外部事务。
在MySQL数据库分布式事务中,MySQL是XA事务过程中的资源管理器(RM)存在的,TM是连接MySQL服务器的客户端。MySQL数据库是作为RM存在的,在分布式事务中一般会涉及到至少两个RM,所以我们说的MySQL支持XA协议是说mysql作为RM来说的,也就是说MySQL实现了XA协议中RM应该具有的功能;需要注意的是MySQL中只有当隔离级别为Serializable时候才能使用分布式事务,所以需要使用set global tx_isolation='serializable',session tx_isolation='serializable';设置数据库隔离级别(具体可以参考本地事务)。
下面我们来看看在MySQL数据库单个节点运行XA事务,首先来看下MySQL下xa事务语法:
其中xid是一个全局唯一的id标示一个分支事务,每个分支事务有自己的全局唯一的一个id,是一个字符串。
然后确认下mysql是否启动了xa功能:
可知启动了,下面具体看一个实例:
其中首先使用XA START ‘xid' 启动了一个XA事务,并把它置于ACTIVE状态
对于一个ACTIVE状态的 XA事务,我们可以执行构成事务的多条SQL语句,也就是指定分支事务的边界,然后执行一个XA END ‘xid'语句,XA END把事务放入IDLE状态,也就是结束事务边界,在xa start和xa end之间的语句就构成了本分支事务的一个事务范围。当调用xa end 'xid1'后由于结束了事务边界,所以这时候如何在执行sql语句会抛出ERROR 1399 (XAE07): XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state错误,也就是当分支事务处于IDLE状态时候不允许执行没有包含到分支事务边界里面的其他sql.
以下内容的一些总结
create,alter,drop,show, 用于 表/数据库
DDL CRUD后都要加database/databases/table/tables
select database(); -DOS窗口中查询当前正在使用的数据库,使用用use。
表中数据的增加用insert into,修改update,删除delete这两个一般加上限定条件WHERE
DQL中NULL不能用“==” 等运算符判读,需要使用IS/IS NOT
where与hanving限定的区别,在分组查询中,where限定是在分组之前,不满足条件不参与分组,having限定是在分组之后,不满足条件不会被查询出来。
where 后不能进行聚合函数的判断,having可以
修改表,进行数据项约束:
alter table 表名 modify 列名 数据类型 NOT NULL;
mysql中,唯一约束限定的列的值可以有多个null
删除特例
删除主键约束:ALTER TABLE stu DROP PRIMARY KEY;
删除唯一约束:ALTER TABLE stu DROP INDEX 列名;
select now(); 查看mysql系统时间。和当前时间做对比
set global time_zone = '+8:00';设置时区更改为东八区
flush privileges; 刷新权限
MySQL数据库软件卸载
卸载
去mysql的安装目录找到my.ini文件
复制 datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
卸载MySQL
删除C:/ProgramData目录下的MySQL文件夹。
配置
MySQL服务启动
手动。
cmd--> services.msc 打开服务的窗口
使用管理员打开cmd
net start mysql : 启动mysql的服务
1. 安装
需安装mysql客户端和服务器端。
Centos下,可用命令:yum install mysql安装mysql客户端;使用命令:yum install mysql-server安装mysql服务器端。
在windows下,可下载.msi安装包。可以从mysql的官网这里:http://www.mysql.com/downloads/下载。现在弄得比较麻烦,还得登陆后才能下载。如果没有账号,需要注册一个。登陆后,可下载。安装过程不表,注意安装时的各种选项,选择最适合自己的。安装完成后,可以使用自带的客户端登陆数据库。客户端地址:开始->mysql -> mysql X.X -> mysqlX.X command line client。打开后输入在安装时设置的root密码,就可成功连上数据库了。
2. 启动
在linux下:
命令:rpm -qa|grep mysql 可用于查询机器上是否安装了mysql客户端
命令:/etc/rc.d/init.d/mysqld start或service mysqld start 可用于启动mysqll
命令:ls /etc/rc.d/init.d/mysqld -l 可用于查询mysql服务的权限是否有问题。Mysql无法正常启动,可先检查是mysql服务的权限设置有问题。
命令:chkconfig mysqld on 可设置mysql开机启动l
命令:service mysqld status 可查看mysql服务是否已经启动
命令:/etc/rc.d/init.d/mysqld stop或service mysqld stop 可用于关闭mysql
在win7下:
开始 -> 附件 -> 命令提示符,右击命令提示符,选择:按系统管理员身份运行。
启动mysql命令: net start mysql
停止使用mysql,命令:net stop mysql
当然你如果安装mysql,名称是自定义的,那要按照你自定义的名字来,比如net start mysql56。
3. Mysql访问权限设置
刚安装好的MySql包含一个含空密码的root帐户和一个匿名帐户,这是很大的安全隐患,对于一些重要的应用我们应将安全性尽可能提高,在这里应把匿名帐户删除、 root帐户设置密码,可用如下命令进行:
use mysql;
delete from User where User="
今儿有位同事提出,一套MySQL 5.6的环境,从数据库服务器本地登录,一切正常,可是若从远程服务器访问,就会报错,
ERROR 1045 (28000): Access denied for user 'bisal'@'x.x.x.x' (using password: YES)
我才开始接触MySQL,因此每一个错误场景,都是增长经验的机会,这种错误要么是密码错误,要么是未设置远程IP访问权限。
我们模拟下这个过程,首先,创建用户bisal,如果密码不加引号会报错,
mysql> create user bisal identified by bisal;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'bisal' at line 1
创建完成,可以看出,用户bisal的host是%,不是具体某个IP,
mysql> create user bisal identified by 'bisal';
Query OK, 0 rows affected (0.00 sec)
会选择使用源码安装MySQL,想必对MySQL及其他的安装方式已经有了一定的了解,这里就不对周边信息进行过多赘述了,直接开始吧。
编译MySQL比较消耗内存,如果机器内存较小,可能会在编译期间出现内存不足的异常。若没有设置swap分区的可以设置swap分区来解决,否则只能扩容内存了:
[root@txy-server ~]# dd if=/dev/zero of=/swapfile bs=1k count=2048000
[root@txy-server ~]# mkswap /swapfile
[root@txy-server ~]# swapon /swapfile
1、安装编译时所需的依赖包
1.1、使用yum命令安装编译所依赖的包及工具:
[root@txy-server ~]# yum install -y cmake3 git gcc-c++ ncurses-devel perl-Data-Dumper boost boost-doc boost-devel bzip2 openssl-devel libtirpc-devel.x86_64
由于编译MySQL时对gcc的版本要求是5.3以上,所以我们需要先升级一下gcc的版本,因为yum安装目前最新版本只到4.8.5。
升级gcc版本的方式主要有两种,一种是下载源码包进行编译安装,一种是使用yum安装devtoolset包,目前devtoolset包里的gcc版本为5.3.1。
而源码安装的方式比较灵活可以选择任意版本,但非常耗时。这里两种方式都会介绍,可以自行视情况选择。
1.1.1、使用yum安装devtoolset包,命令如下:
[root@txy-server ~]# yum install -y centos-release-scl scl-utils-build
[root@txy-server ~]# yum install -y devtoolset-4-gcc.x86_64 devtoolset-4-gcc-c++.x86_64 devtoolset-4-gcc-gdb-plugin.x86_64
1.1.2、创建软件链接,覆盖/usr/bin下的gcc相关命令,因为编译MySQL时默认会去/usr/bin目录下找gcc相关的命令:
[root@txy-server ~]# ln -sf /opt/rh/devtoolset-4/root/usr/bin/* /usr/bin/
1.1.3、最后验证一下gcc、cc、c++等命令的版本是否为5.3.1:
[root@txy-server ~]# gcc -v
...
gcc version 5.
展开全部
可以32313133353236313431303231363533e59b9ee7ad9431333366303066使用length()函数。比如:select * from test where length(name)=6。select * from table where length(column) = 某个值,length()是计算字符串长度的函数,不同的数据库,可能不一样。如图:
扩展资料:
1、SQL 在1986年10 月由美国国家标准局(ANSI)通过的数据库语言美国标准,接着,国际标准化组织(ISO)颁布了SQL正式国际标准。1989年4月,ISO提出了具有完整性特征的SQL89标准,1992年11月又公布了SQL92标准,在此标准中,把数据库分为三个级别:基本集、标准集和完全集。
2、SQL语言基本上独立于数据库本身、使用的机器、网络、操作系统,基于SQL的DBMS产品可以运行在从个人机、工作站到基于局域网、小型机和大型机的各种计算机系统上,具有良好的可移植性。可以看出标准化的工作是很有意义的。早在1987年就有些有识之士预测SQL的标准化是“一场革命”,是“关系数据库管理系统的转折点”。
3、结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。
要在MySQL中使用多个AND条件,以下是语法-select *from yourTableName where yourColumnName1=yourValue1 and yourColumnName2=yourValue2 and yourColumnName3=yourValue3;
让我们首先创建一个表-mysql> create table DemoTable
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(20),
StudentAge int,
StudentCountryName varchar(40)
);
使用插入命令在表中插入一些记录-mysql> insert into DemoTable(StudentName,StudentAge,StudentCountryName) values('John',23,'US');
mysql> insert into DemoTable(StudentName,StudentAge,StudentCountryName) values('Carol',21,'UK');
mysql> insert into DemoTable(StudentName,StudentAge,StudentCountryName) values('John',21,'US');
mysql> insert into DemoTable(StudentName,StudentAge,StudentCountryName) values('John',21,'AUS');
使用select语句显示表中的所有记录-mysql> select *from DemoTable;
输出结果+-----------+-------------+------------+--------------------+
| StudentId | StudentName | StudentAge | StudentCountryName |
+-----------+-------------+------------+--------------------+
| 1 | John | 23 | US |
在MySQL数据库部署的过程中,在安装了MySQL软件,并配置了my.cnf配置文件后,需要创建MySQL实例。
MySQL 5.5实例创建完成了,默认会有登陆用户名和密码为空的用户,一般需要修改root用户密码,并删除无效用户,然后才能提供给应用使用。
这个过程可以通过shell脚本自动完成实例创建,启动,自动生成密码,修改root用户密码,删除无效用户。
shell脚本有多种编写方法,我编写的shell脚本如下:#!/bin/bash
# this scripts used to initial the mysql instance and modify password
# created by zhaofx
# MySQL software directory.
readonly SYMLINK='/usr/local/mysql'
echo "MySQL的软件安装目录为${SYMLINK}"
# MySQL database port
readonly MYSQL_PORT=3306
echo "MySQL实例的端口为${MYSQL_PORT}"
# MySQL database directory.
readonly MYSQL_DATA_DIR="/data/mysql_${MYSQL_PORT}"
echo "MySQL的实例数据文件目录为${MYSQL_DATA_DIR}"
echo "准备创建MySQL实例"
cd $SYMLINK
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=${MYSQL_DATA_DIR}/data
echo "开始启动数据库实例,修改root用户密码,删除无效用户"
echo ""
cp /etc/my.cnf /data/mysql_${MYSQL_PORT}/my.cnf
echo "Startup MySQl Service:localhost_"${MYSQL_PORT}
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql_${MYSQL_PORT}/my.cnf &
echo ""
whereis mysql 安装路径
which mysql 运行文件路径
找到 /usr/bin/mysql 路径 mysql为执行文件,不是文件夹
登陆mysql
mysql -u 用户名 -p 回车
输入密码
查询 数据库版本
select version();
查询当前数据库队列
show processlist;
远程访问权限设置
grant all privileges on *.* to 'zlhadmin'@'%' identified by 'cai201801db' with grant option;
grant all privileges on *.* to 'zlhadmin'@'localhost' identified by 'cai201801db' with grant option;
换root用户身份登陆查询
查询某个用户的权限
这里是root查询结果
这里用root用户身份创建远程权限
用户zlhadmin在host 有一个localhost 和 % 即可
参考资料:
https://blog.csdn.net/zzq900503/article/details/15336583
查询所有数据库
明明应该这样的 mysql数据库没了。。。。
检查防火墙是否开启
centos7 明明应该是firewall
firewall-cmd --state;
数据迁移的工具有很多,基本SSMA团队已经考虑到其他数据库到SQL Server迁移的需求了,所以已经开发了相关的迁移工具来支持。
从上面链接的官网下载安装.
第一步:创建一个迁移工程
需要注意的是你需要选择迁移到的SQL Server数据库的版本,目前支持:SQL Azure,SQL Server 2005,SQL Server2008,SQL Server 2012,SQL Server2014,根据实际需要选择你要迁移到目标数据库的版本。
第二步:连接源数据库和目标数据库
上面的是源:MySql,下面的是目标:SQL Server
第三步:选择需要迁移的数据库创建迁移分析报告
此报告会分析当前需要迁移的数据库中的所有表结构并会生成一个可行性报告
生成的报告如下:分析需要转换的对象,表,数据库有多少个,是否存在不可转换的对象等信息,如有检查错误会下下面输出
第四步: 转换schema 也就是数据库结构
迁移分两步:1.转换数据库结构,2.迁移数据
第五步:在源数据库转换完schema之后记得在目标数据库上执行同步schema操作
否则转换的数据库结构是不会到目标数据库的
点击同步之后同样会有一个同步的报告:
点击ok之后就真正执行同步操作会将你转换完的结构同步到目标数据库上,创建对应的表及其他对象。同步操作完成之后会有如下输出:
第六步:结构同步完成之后接下来就是数据迁移操作了
我们可以看到右边有几个tab页,当前选中的是Type Map,会列出源数据库和目标数据库的字段类型的mapping关系
因为不同数据库之间的数据类型还是有所差异的。
点击Migrate Data之后需要再次确认输入源数据库密码和目标数据库密码,然后开始真正的数据的迁移。
执行之后就等待完成就好,同样会生成一个数据迁移完成的报告。至此数据迁移就可以完成了。
很简单的工具吧,因为是微软的啊,哈哈,作为微软的忠粉,对微软的产品表示使用起来还是很人性化的。
打包发布 理解打包 作用:用webpack把.vue,.less.js ----> 浏览器可直接执行的代码。
命令: npm run build
结果:内部集成了webpack,会在根目录下创建 /dist,在这个目录下创建打包完成的结果。
chunk:块 vendors代理商
app-hash值.js :主入口
chunk-vendors:第三方包的代码统一放在这里(dayjs,vue,vuex,vue-router,vant)
chunk-hash值.js 某个模块对应的js ,某个.vue文件编译之后的.js。
在配置路由时,如果采用路由懒加载的方式去配置
component: () => import(’…/views/search/index.vue’),在打包时,就会生成对应的chunk.
chunk-hash.js.map :它会记录当前的.js文件中包含了哪个模块,对应代码位置,有利于代码出错快速找到源代码的位置。
打包结果分析 vuecli中提供一个打包分析的工具:vue-cli-service build --report
操作:在package.json 中的build项中,添加 --report
“scripts”: {
“serve”: “vue-cli-service serve”,
“build”: “vue-cli-service build –report”,
“lint”: “vue-cli-service lint”
},
运行:
npm run build
它会在dist目录下产生一个report.html文件,其中就有对打包结果的分析说明。
效果
查看导出默认配置 vuecli打包工具仍是webpack,只不过vuecli把webpack的配置封装起来了,我们不能直接看到,可通过如下命令来查看:
#导出当前生产模式下的webpack配置文件到config.json
vue inspect --mode=production > config.json
Gzip压缩 网站加载的速度很大程度取决于网站资源的大小,减少要传输的文件大小可以让加载更快。
HTTP协议上的GZIP编码是一种用来改进web应用程序性能的技术。它在服务器端器安装并使用,对纯文本文件的压缩可达原大小的40%。
如何开启?
不同的服务器软件配置不一样,大多数服务器都是默认开启的。
Nginx
Tomcat
Apache
IIS
论文连接:https://arxiv.org/pdf/2101.03697v1.pdf
论文代码:https://github.com/DingXiaoH/RepVGG
一、RepVGG网络结构的细节
RepVGG与目前业界较优的网络模型在精度和性能上的比较,左边的RepVGG为轻量级和中量级的网络模型结构的对比结果图,右边的RepVGG为重量级的网络模型结构的对比结果图。可以发现RepVGG在精度和速度上均取得非常有竞争力的结果。重量级的RepVGG网络模型在ImageNet数据集上的精度超过了80%,这是基础模型的首次能够达到这个精度,非常令人惊喜。
1、网络结构
作者提出了一个简单但强大的卷积神经网络架构,该架构具有类似于VGG的推理时间主体,该主体仅由3x3卷积和ReLU的堆栈组成,而训练时间模型具有多分支拓扑。作者通过将训练过程和推理时间进行解耦来实现精度和速度的完美兼得,即在模型进行前向推理时采用参数融合的方案来实现对于模型速度的提升,采用的技术简称为结构重新参数化(re-parameterization),因为作者也将提出的新型网络称为RepVGG。
该新型网络的核心结构如下:
由上面的核心网络结构可以看出,RepVGG与ResNet有一定相似之处,都采用了1*1的short cut操作和直接的short cut操作,两者的区别在于ResNet是每隔两层或三层加一分支,而RepVGG是每层都加上一个或二个并行分支。可以预期RepVGG在每一个卷积层上都进行二个或三个分支并行融合操作会显著提升模型泛化性和表征能力,但相对来说就会引入一定的参数量和降低模型速度,分支并行操作对速度和参数量不太友好,需要说明的是在RepVGG在第一层并没有进行三个并行连接操作,且stride为2,进行特征维度上的降维,这里没有使用maxpooling层进行降维,如果这里使用maxpooling进行降维,会不会导致精度会有所下降。在训练模型的过程中模型就是按照上图进行一路3*3卷积+并行融合操作+relu进行操作。虽然在训练过程中引入的并行操作会导致模型参数量变大很多,且速度降低很多,但是这篇文章的核心亮点就在于将训练过程的线性操作进行融合,即将二路或者三路并行分支进行融合,得到最终只包含3*3卷积+relu的操作,这个思想类似于ACNet的操作,这篇文章的作者也是ACNet结构的原作者。
二、RepVGG前向推理时并行操作的融合
待补充
MobileNet由谷歌于2017年提出,它是一种能够用在端侧设备上的轻量级网络。GhostNet是华为诺亚实验室开发的一款轻量级网络,论文发表在CVPR2020。我认为学习论文还是要实际跑一跑代码,这样才能有更深入的体会和理解,本文首先简介两个网络的原理,然后在cifar10上进行对比试验,并展开一定的讨论分析。毕竟个人水平有限,资源也有限试验开展的不够充分,所以理解不正确的地方还请批评指正。
MobileNet论文:https://arxiv.org/abs/1704.04861
MobileNet代码:https://github.com/Zehaos/MobileNet
GhostNet论文:https://arxiv.org/abs/1911.11907
GhostNet代码:https://github.com/huawei-noah/ghostnet
文章目录 一、主要原理1.MobileNet的深度可分离卷积2.GhostNet的幻影模块 二、cifar10数据试验1.试验说明2.试验结果3.结果分析 三、讨论 一、主要原理 1.MobileNet的深度可分离卷积 MobileNet的核心是深度可分离卷积,就是把普通卷积操作分成两步:第一步称为Depthwise卷积,先对各通道进行单通道的卷积,每次输出也是单通道的特征图,再合并起来得到和输入通道数相同的特征图,这个操作比原操作大大降低了参数量和计算量(FLOPs,浮点运算数,即加法和乘法的次数),但是它没有结合各通道间的信息,所以还要第二步;第二步称为Pointwise卷积,对第一步输出的特征图进行1×1卷积,进行通道信息混合后按需要的通道数输出。
普通卷积的参数量是: k 2 × C i n × C o u t k^2×C_{in}×C_{out} k2×Cin×Cout
普通卷积的FLOPs是: 2 k 2 × C i n × C o u t × H o u t × W o u t 2k^2×C_{in}×C_{out}×H_{out}×W_{out} 2k2×Cin×Cout×Hout×Wout
可分离卷积的参数量是: k 2 × C i n + C i n × C o u t k^2×C_{in} + C_{in}×C_{out} k2×Cin+Cin×Cout
如何评价一段代码或算法的性能和好坏?目前衡量代码质量的指标主要有两个:分别为时间复杂度和空间复杂度。其中时间复杂度指的是执行当前算法所消耗的时间,空间复杂度指的是指执行当前算法需要占用多少内存空间。有的时候时间和空间是不可兼得的,需要从中去取一个平衡点。下面简单描述一下如何计算时间复杂度和空间复杂度
一、时间复杂度
利用大O符号表示法来表示时间复杂度,即T(n) = O(f(n))。其中f(n) 表示每行代码执行次数之和,而 O 表示正比例关系,这个公式的全称是:算法的渐进时间复杂度。
for(i=1; i<=n; ++i) { j = i; j++; } (1+n+n)*time :T(n) = O(n) 。因为大O符号表示法并不是用于来真实代表算法的执行时间的,它是用来表示代码执行时间的增长变化趋势的。假设n为无穷大时,倍数2和加数1可以忽略不计。
目前常见的时间复杂度量级有以下几种,按照顺序时间复杂度越来越大,执行的效率越来越低:
(1)常数阶O(1); (2)对数阶O(logN); (3)线性阶O(n); (4)线性对数阶O(nlogN);
(5)平方阶O(n²); (6)立方阶O(n³); (7)K次方阶O(n^k); (8)指数阶(2^n)。
下面主要介绍几种常见的时间复杂度计算案例:
1、常数阶O(1)
k=i; i=j; j=k; j++; 2、对数阶O(logN)
int i = 1; while(i<n) { i = i * 2; } 上面的代码可以发现循环并不是到n结束,因为i的值在变化,i每次都在乘以2,2^x=n为终止条件,此时x也就为logN。
3、线性阶O(n)
for(i=1; i<=n; i++) { j = i; j++; } 4、线性对数阶O(nlogN)
for(m=1; m<n; m++) { i = 1; while(i<n) { i = i * 2; } } 5、平方阶O(n²)
ping命令分析 1)概念 ICMP协议是*“Internet Control Message Ptotocol”(因特网控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP*主机、路由器之间传递控制消息。
ping (Packet Internet Groper):因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP;回声请求消息给目的地并报告是否收到所希望的ICMP echo (ICMP回声应答)。它是用来检查网络是否通畅或者网络连接速度的命令
ping命令通常用来作为网络可用性的检查。ping命令可以对一个网络地址发送测试数据包,看该网络地址是否有响应并统计响应时间,以此测试网络。
ping和ICMP的关系:ping命令发送数据使用的是ICMP协议。
ping的原理:向指定的网络地址发送一定长度的数据包,按照约定,若指定网络地址存在的话,会返回同样大小的数据包,当然,若在特定时间内没有返回,就是“超时”,会被认为指定的网络地址不存在。
ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议
2)使用Ping这命令来测试网络连通 连通问题是由许多原因引起的,如本地配置错误远程主机协议失效等,当然还包括设备等造成的故障。使用Ping检查连通性有五个步骤:
A. 使用ipconfig /all观察本地网络设置是否正确
B.Ping 127.0.0.1,127.0.0.1 回送地址Ping回送地址是为了检查本地的TCP/IP协议有没有设置好,如果本地址无法Ping通,则表明本地机TCP/IP协议不能正常工作
C. Ping本机IP地址,这样是为了检查本机的IP地址是否设置有误;
D. Ping本网网关或本网IP地址,这样的是为了检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常(在非局域网中这一步骤可以忽略)
E. Ping远程IP地址,这主要是检查本网或本机与外部的连接是否正常。
3)用Ping命令来判断一条链路好坏 Ping除了可以检查网络的连通和检测故障以外,还可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒。
"字节=32"表示ICMP报文中有32个字节的测试数据;="时间=6ms"是往返时间。 "已发送=4"发送多个秒包、"已接收=4"收到多个回应包、"丢失=0"丢弃了多少个;所在图上来看,来回只用了6MS 时间,lost =0 即是丢包数为0,网络状态相当良好;
4) 故障分析 ① Request timed out A. 对方已关机,或者网络上根本没有这个地址
B. 对方与自己不在同一网段内,通过路由也无法找到对方,但有时对方确实是存在的,当然不存在也是返回超时的信息。
C. 对方确实存在,但设置了ICMP数据包过滤(比如防火墙设置),此时可以用带参数 -a(将地址解析为计算机名) 的Ping命令探测对方,如果能得到对方的NETBIOS名称,则说明对方是存在的
D. 错误设置IP地址
正常情况下,一台主机应该有一个网卡,一个IP地址,或多个网卡,多个IP地址(这些地址一定要处于不同的IP子网)但如果一台电脑的“拨号网络适配器”(相当于一块软网卡)的TCP/IP设置中,设置了一个与网卡IP地址处于同一子网的IP地址,这样,在IP层协议看来,这台主机就有两个不同的接口处于同一网段内。当从这台主机Ping其他的机器时,会存在这样的问题:
1 主机不知道将数据包发到哪个网络接口,因为有两个网络接口都连接在同一网段。2 主机不知道用哪个地址作为数据包的源地址。因此,从这台主机去Ping其他机器,IP层协议会无法处理,超时后,Ping 就会给出一个“超时无应答”的错误信息提示。但从其他主机Ping这台主机时,请求包从特定的网卡来,ICMP只须简单地将目的、源地址互换,并更改一些标志即可,ICMP应答包能顺利发出,其他主机也就能成功Ping通这台机器了。
②Destination host Unreachable A. 对方与自己不在同一网段内,而自己又未设置默认的路由,比如上例中A机中不设定默认的路由,运行Ping 192.168.0.1.4就会出现“Destination host Unreachable”。
B. 网线出了故障,这里要说明一下“destination host unreachable”和 “time out”的区别,如果所经过的路由器的路由表中具有到达目标的路由,而目标因为其他原因不可到达,这时候会出现“time out”,如果路由表中连到达目标的路由都没有,那就会出现“destination host unreachable”。
展开全部
镜头尽管有优质和普通、劣质之分,但选择镜头要e5a48de588b63231313335323631343130323136353331333332623963根据自己的经济基础而定。
并不是优质镜头就能拍摄理想的照片而普通、劣质镜头就不能拍摄理想的照片,其实拍摄技术占主要因素标准镜头
标准镜头:以适用于35毫米单镜头反光照相机的交换镜头为例,标准镜头通常是指焦距在40至55毫米之间的摄影镜头,它是所有镜头中最基本的一种摄影镜头。适马 AF 30/1.4 EX HSM DC镜头
标准镜头给人以记实性的视觉效果画面,所以在实际的拍摄中,它的使用频率是较高的。但是,从另一方面看,由于标准镜头的画面效果与人眼视觉效果十分相似,故用标准镜头拍摄的画面效果又是十分普通的,甚至可以说是十分“平淡”的,它很难获得广角镜头或远摄镜头那种渲染画面的戏剧性效果。因此,要用标准镜头拍出生动的画面来又是相当不容易的,即使是资深的摄影师也认为用好用活标准镜头并不容易。但是,标准镜头所表现的视觉效果有一种自然的亲近感,用标准镜头拍摄时与被摄物的距离也较适中,所以在诸如普通风景、普通人像、抓拍等摄影场合使用较多,最常见的纪念照,更是多用标准镜头来拍摄。另外,摄影者往往容易忽略的是,标准镜头还是一种成像质量上佳的镜头,它对于被摄体细节的表现非常的有效。
长焦镜头
长焦镜头视角在20度以内,焦距可达几十毫米或上百毫米。长焦距镜头又分为普通远摄镜头和超远摄镜头两类。普通远摄镜头的焦距长度接近标准镜头,而超远摄镜头的焦距却远远大于索尼 2X 增倍镜头
标准镜头。以135照相机为例,其镜头焦距从85mm-300mm的摄影镜头为普通远摄镜头,300mm以上的为超远摄镜头。 长焦镜头的焦距长,视角小,在底片上成像大。所以在同一距离上能拍出比标准镜头更大的影象。适合于拍摄远处的对象。由于它的景深范围比标准镜头小,因此可以更有效地虚化背景突出对焦主体,而且被摄主体与照相机一般相距比较远,在人像的透视方面出现的变形较小,拍出的人像更生动,因此人们常把长焦镜头称为人像镜头。但长焦镜头的镜筒较长,重量重,价格相对来说也比较贵,而且其景深比较小,在实际使用中较难对准焦点,因此常用于专业摄影。 使用长焦距镜头拍摄,一般应使用高感光度及快速快门,如使用200mm的长焦距镜头拍摄,其快门速度应在1/250秒以上,以防止手持相机拍摄时照相机震动而造成影像虚糊。在一般情况下拍摄,为了保持照相机的稳定,最好将照相机固定在三脚架上,无三脚架固定时,尽量寻找依靠物帮助稳定相机。
广角镜头
以35毫米单镜头反光照相机为例,广角镜头通常是指镜头焦距约在17至35毫米之间的镜头。 广角镜头的基本特点是,镜头视角大,视野宽阔。从某一视点观察到的景物范围要比人眼在同一视点所看到的大得多;景深长,可以表现出相当大的清晰范围;能强调画面的透视效果,善于夸张前景和表现景物的远近感,这有利于增强画面的感染力。 广角镜头的基本特性: 1.视角范围大,可以涵盖大范围景物。所谓视角范围大,即在同一视点(与被摄物的距离保持不变)用广角、标准和远摄三种不同焦距的摄影镜头取景,结果是前者要比后者在上下左右拍摄到更多的景物。当摄影者在没有退路的情况下,若用50毫米标准镜头难以完整拍下的景物(如人物集体留影等),就可利用广角镜头视角范围大的特征轻而易举地解决问题。再有,如拍摄广阔的原野或城市高大的建筑等,用标准镜头也许只能拍到景物的一部分,无法表现出景物的宽阔或高大。而用广角镜头拍摄,就能有效地表现出大场面开阔的气势或建筑物高耸入云的雄伟。 2.焦距短,景深长。在拍摄广阔的大场面时,摄影者一般都依靠广角镜头焦距短,表现的景物景深长的特点,将从近到远的整个景物都纳入清晰表现的范围。此外,用广角镜头拍摄时,如果同时采用较小的光圈,则景物的景深就会变得更长。例如,摄影者用一个28毫米的广角镜头拍摄,焦点对在约3米左右的被摄体上,把光圈调到F8,那么从1米到无限远几乎都进入了景深范围。正是由于这种长景深的特点,广角镜头往往被摄影者当作一种机动性很强的快拍镜头使用,在某些场合,摄影者操纵广角镜头几乎不用对被摄物聚焦,就能极快地完成抓拍。 3.能强调前景和突出远近对比。这是广角镜头的另一个重要性能。所谓强调前景和突出远近对比,是指广角镜头能比其他镜头更加强调近大远小的对比度。也就是说,用广角镜头拍出来的照片,近的东西更大,远的东西更小,从而让人感到拉开了距离,在纵深方向上产生强烈的透视效果。特别是用焦距很短的超广角镜头拍摄,近大远小的效果尤为显著。 4.可夸张变形。一般来说,被摄体被夸张而发生变形是广角镜头使用上的大忌。实际上,被摄体被适当夸张、变形并非一定不可取。有经验的摄影师常常利用广角镜头将被摄体作适度的变形,把一些非常不起眼的,人们熟视无睹的景物拍得不同寻常。当然,用广角镜头进行夸张、变形的表现手法,一要根据题材的需要,二要少而精。不管题材是否需要,滥用广角镜头夸张、变形的表现手法,一味从形式上追求怪诞离奇的效果是不足取的。
鱼眼镜头
以适用于35毫米单镜头反光照相机的交换镜头为例,鱼眼镜头是一种焦距约在6-16毫米之间的短焦距超广角摄影镜头,“鱼眼镜头”是它的俗称。为使镜头达到最大的摄影视角,这种摄影镜头的前镜片直径且呈抛物状向镜头前部凸出,与鱼的眼睛颇为相似,“鱼眼镜头”因此而得名。 鱼眼镜头的体积较大。以适用于35毫米单镜头反光照相机的鱼眼镜头为例,当将这种鱼眼镜头安装在体积较小的35毫米单镜头反光照相机机身上时,有一种“头(镜头)大身体(机身)小”的感觉,且由于鱼眼镜头重量不轻(如尼柯尔6毫米/F2.8手动对焦鱼眼镜头重达5200克),单镜头反光照相机装上鱼眼镜头后,照相机和镜头的整体重量增加,重心前移,摄影者持握照相机进行拍摄时要注意持稳照相机。如前所述,鱼眼镜头的前镜片直径大且向镜头前部抛出,故这种镜头无法像普通镜头那样安装滤光镜。鱼眼镜头通常采用内置滤光镜的方式,根据拍摄需要,由摄影者操纵镜头上的滤光镜转换环,使需要的滤光镜转换至镜头的摄影光路中。鱼眼镜头的前镜片是整个镜头中相当重要的镜片,由于它向镜头前部抛出,故摄影者在拍摄操作(尤其是凑近被摄物拍摄)时要特别注意不要碰撞镜片。另外,有些老式的鱼眼镜头与35毫米单镜头反光照相机连接时,镜头后部插入照相机机身较深,照相机的反光镜必须翻起锁定,照相机的五棱镜取景器将不能使用,需在照相机上设置附加的取景才能进行摄影。
微距镜头
微距摄影镜头是指无需安装近摄镜、近摄接圈或近摄轨道皮腔等近摄附件就能用来微距或近距摄影的专用摄影镜头。 微距摄影镜头是以专门拍摄微小被摄物或翻拍小画面图片为目的的摄影镜头,这种镜头的分辨率相当高,畸变像差极小,且反差较高,色彩还原佳。微距摄影镜头在近摄时具有很不错的解像力,可在整个对焦范围内保持成像质量不发生太大的变化。一般的摄影镜头主要用于拍摄通常焦距内的景物,它不能直接用来近摄。利用一般摄影镜头近摄,是需要在镜头上加装近摄镜、近摄接圈或近摄皮腔等近摄附件后方能进行,但一般摄影镜头加装了近摄镜、近摄接圈或近摄皮腔等近摄附件后,就处于“近摄”状态,就无法迅速从“近摄”状态回到普通摄影状态,就是说,用一般摄影镜头加装近摄附件的办法,难以交替进行近距摄影和普通摄影。而微距摄影镜头则不同,它的近摄不依赖别的近摄附件,全部近摄操作都在镜头本身上进行,它可在近摄至无限远之间连接对焦,从而能从近摄状态迅速调整至普通摄影状态,这为摄影者交替进行近距摄影和普通摄影提供了方便。 微距摄影镜头一般有两种结构。一种微距摄影镜头采用内置伸缩镜筒的结构,另一种采用交换镜头内光学镜片组前后位置的结构。前者在普通摄影时,摄影者只要旋转镜头对焦环就能进行正常的对焦,如果想近摄,只要把已旋转至最近对焦处的对焦环继续旋转,就能把镜头的整个光学系统随同内置的镜筒同步前移,从而使像距增大,达到近摄的目的;后者以变换镜头内光学镜片组前后位置来获得较高的影像放大率,从而达到近摄的目的。 常见的微距摄影镜头有尼柯尔Micro 55mm/F2.8手动对焦微距摄影镜头等。
增距镜头
增距镜头又称望远转换镜或焦距增长器,它是一类比较特殊的光学器件,由多片光学镜片组成,其作用是增长原有镜头的焦距。由于增距镜是一个呈凹透镜作用的光学系统,所以不能单独成像的,要与呈凸透镜作用的常规镜头一起使用才能得出清晰的物像。 增距镜的倍率有多种。常见的有2倍(俗称增倍镜)、1.7倍、1.4倍和1.6倍,也有少数是3倍的。镜片数一般为四至七片不等。增距镜一边是卡口,与镜头的卡口一样,用于连接到照相机机身上;另一边是卡环,与单反机机身上的卡环一样,用于连接镜头。使用时,先将单反机上的镜头卸下来,将增距镜接在机身上,然后再将镜头接在增距镜上,即增距镜在机身与镜头之间。 不同倍率的增距镜可以将原镜头的焦距扩展至不同的范围。如一只2倍的增距镜可将50mm的标准镜头变成100mm的中焦镜头;而 1.4倍的只能将它变成70mm的镜头。但是增距镜只能用于50mm以上的镜头,如果与广角镜头合用时,可能会出现遮角现象。接上增距镜后,原镜头上的一些参数是不会改变的,如最短聚焦距离。如果原镜头的最短聚焦距离为 0.5米,加上增距镜后仍是 0.5米,由于焦距增长,所以可以得到更大的影像。
变焦镜头
在一定范围内可以变换焦距、从而得到不同宽窄的视场角,不同大小的影象和不同景物范围的照相机镜头称为变焦镜头。 变焦镜头在不改变拍摄距离的情况下,可以通过变动焦距来改变拍摄范围,因此非常有利于画面构图。由于一个变焦镜头可以兼担当起若干个定焦镜头的作用,外出旅游时不仅减少了携带摄影器材的数量,也节省了更换镜头的时间。 变焦镜头最大的特点,或者说它最大的价值,还是在于它实现了镜头焦距可按摄影者意愿变换的功能。与固定焦距镜头不同,变焦距镜头并不是依靠快速更换镜头来实现镜头焦距变换的,而是通过推拉或旋转镜头的变焦环来实现镜头焦距变换的,在镜头变焦范围内,焦距可无级变换,即变焦范围内的任何焦距都能用来摄影,这就为实现构图的多样化创造了条件。变焦距镜头自身的任何一级焦距与别的相同焦距的固定焦距镜头功能是一样的。但变焦距镜头不限制摄影者使用哪一级焦距,因而在使用操作上要便利灵活得多。它省却了外出拍摄时需携带和更换多只不同焦距镜头的麻烦。甚至在临按照相机快门前,摄影者还能通过变换镜头焦距对被摄体进行取舍,对画面进行剪裁,以期在拍摄前把画面构图安排得更为理想。 变焦距镜头变换焦距的快捷程度,是固定焦距镜头通过更换镜头变换焦距无法相比的。35毫米自动袖珍照相机或部分35毫米单镜头反光照相机的变焦距镜头还采用了电动变焦模式,电动变焦不仅仅是省力和便捷,更重要的是实现了均速变焦,这为摄影者通过焦距得细微变化剪裁画面、确定构图十分有利。变焦距镜头通过在照相机快门开启的瞬间变焦,还能进行“爆炸效果”。有的照相机还依靠自动控制变焦距镜头的焦距变换实现自动构图功能。最新颖的35毫米单镜头反光照相机,还设置了自动记忆镜头焦距的功能,这一功能可允许摄影者设定照相机记忆一种或数种使用频率较高的镜头焦距,随时能在将镜头焦距变换至先前记忆的焦距上来。 当然,相对固定焦距镜头而言,变焦距镜头的结构比较复杂,分量较重。非名牌的变焦距镜头,成像质量肯定逊于相应的固定焦距镜头。
移轴镜头
移轴摄影镜头是一种能达到调整所摄影像透视关系或全区域聚焦目的的摄影镜头。 移轴摄影镜头最主要的特点是,可在相机机身和胶片平面位置保持不变的前提下,使整个摄影镜头的主光轴平移、倾斜或旋转,以达到调整所摄影像透视关系或全区域聚焦的目的。移轴摄影镜头的基准清晰像场大得多,这是为了确保在摄影镜头光主轴平移、倾斜或旋转后仍能获得清晰的影像。移轴摄影镜头又被称为 “TS”镜头(“TS”是英文“Tilt&Shift”的缩写,即“倾斜和移位”)、“斜拍镜头”、“移位镜头”等。 35毫米单镜头反光照相机采用移轴摄影镜头后,使得这种单镜头反光照相机也具有了大型组合式照相机那种通过调整皮腔控制透视的功能,从而扩展了 35毫米单镜头反光照相机的使用范围,在专业摄影领域,移轴摄影镜头的作用相当大。移轴摄影镜头主要有两个作用,一是纠正被摄物的透视变形;二是实现被摄体的全区域聚焦,使画面中近处和远处的被摄体都能结成清晰的影像。移轴摄影镜头在建筑摄影中的运用最多。拍摄建筑物的外形,多用广角焦距的摄影镜头拍摄,但由于广角镜头近大近小的透视效果,使拍摄出来的建筑物外形线条向上方汇聚,而利用移轴拍摄镜头拍摄建筑物外形,能依靠镜头的透视调整功能纠正这种线条汇聚现象,使画面中出现的建筑物没有通常的那种倾斜、甚至好像要倾倒的感觉,仍然表现得很垂直。移轴摄影镜头还常常被用来拍摄全区域聚焦得画面。商业摄影中的产品广告拍摄,常把这种镜头的平移和倾斜拍摄功能组合使用,在纠正被摄体透视变形的同时,获得一般摄影镜头难以达到的全区域聚焦的效果。常见的移轴摄影镜头有尼柯尔28mm/F3.5手动对焦移轴镜头、尼柯尔35mm/F2.8手动对焦移轴镜头、尼柯尔85mm/F2.8D手动对焦微距移轴镜头等。
已赞过
已踩过<
你对这个回答的评价是?
评论
收起
导入文件
Photoshop可以编辑视频帧、注释和WIA支持等不同的文件。新建或打开图像后,可以通过“文件-导入”下拉菜单中的命令,将这些文件内容导入图像中。某些数码相机使用“Windows图像采集”(WIA)支持来导入图像,将数码相机连接到计算机,然后执行“文件-导入-WIA支持”命令,可以将照片导入Photoshop中。如果计算机配置有扫描仪并安装了相关的软件,则可在“导入”下拉菜单中选择扫描仪的名称,使用扫描仪制造商的软件扫描图像,并将其存储为TIFF、PICT、BMP格式,然后在Photoshop中打开。
导出文件
在Photoshop中创建和编辑的图像可以导出到IIIustrator或视频设备中,以满足不同的使用需求。“文件-导出”下拉菜单中包含可以导出的文件的命令。
1.导出Zoomify:执行“文件-Zoomify”命令,可以将高分辨率的图像发布到Web上利用Viewpoint Media Player,用户可以平移或缩放图像以查看它的不同部分。在导出时,Photoshop会创建IPEG和HTML文件,用户可以将这些文件传到Web服务器。
2.将路径到导出IIIustrator:如果在Photoshop中创建了路径,可以执行“文件-导出-路径到IIIustrator”命令,将路径导出为AI格式。导出的路径可以在IIIustrator中编辑使用。
说起了9008刷机,其实对于玩机党来说非常不模式,市面上大部分机型都是高通处理器
而高通处理器一般都有9008模式。到底9008模式怎么进入呢?9008模式下我们又可以做
哪些刷机操作呢?下面ROM乐园小编就带大家了解下红米和小米新机的9008模式
以前的手机,9008模式一般都可以通过按键组合进去,比如最常见的是三个按键一起,或
者音量上下组合,通过9008模式刷机,我们可以非常快的恢复手机变砖等问题,也一样可
以修复系统。基本上可以解决任何非硬件级故障,但同时也带来了一些风险;比如我们手
机丢失后,用户在9008模式下,可以轻易擦拭掉我们的丢失锁,抹除数据,从而达到正常
使用,让手机安全受到了极大的威胁。自此各大手机厂商开始屏蔽简单进入9008模式了
那么小米和红米的新机一般怎么进呢?从小米5开始,基本上新机都是不能使用9008工程线
进入了,我们最简单的办法是,拆开手机后盖,使用镊子短接9008的触点,让手机在通电
模式下,短接强制进入9008模式。对于新手来说,拆机比较麻烦,并且是否能成功找到短
接的触点,还需要自己百度学习,新机基本都是需要拆机的。更多手机教程,请持续关注
ROM乐园官网,文章来源:www.romleyuan.com
1.正常开机等待系统进入 grup 界面,如Ⅰ图所示。
2.系统进 grup 界面后快速按”e”键进入 grup 编辑界面,grup 编辑界面如Ⅱ图。
Ⅱ.grup 编辑界面
3. 在 grup 编辑界面中 audit=1 之前或者之后填写 console=tty1 init=bin/bash,如Ⅲ图所示。填写完成后按 f10 继续启动系统,启动后系统会自动进入单用户模式。
Ⅲ.添加单用户系统进入条件
4.在单用户系统模式下输入 passwd 用户民 可以修改用户密码,比如 passwd kylin 即为修改 kylin 用户密码,如Ⅳ图。修改完成后
重启系统后用户密码即为在单用户模式下自己输入的密码。
Ⅳ.修改用户密码
5.在单用户系统模式下输入 passwd root 可以修改 root 密码,如
Ⅴ图。修改完成后重启系统后系统 root 密码即为在单用户模式
下自己输入的 root 密码。
Ⅴ.修改 root 密码
更多关于定制版国产系统,定制版银河麒麟操作系统等产品相关配置知识,敬请关注广州金其利企业官网新闻资讯相关栏目:http://www.kimkylin.com/
一测试是否安装成功 win+r打开cmd,输出geth help 出现类似以下场景代表安装成功 二创建创世文件genesis.json genesis.json是创世区块配置文件,在安装目录下新建一个txt文件,把内容复制进去后保存,最后改名为genesis.json
提供两个文件的内容,选其一即可。
{ "config": { "chainId": 10, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x00000002", "extraData" : "", "gasLimit" : "0x2fefd8", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" } { "difficulty" : "0x20000", "extraData" : "", "gasLimit" : "0x8000000", "alloc": {}, "config": { "chainId": 15, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 } } { “config”: { “chainId”: 123, “homesteadBlock”: 0, “eip150Block”: 0, “eip155Block”: 0, “eip158Block”: 0, “byzantiumBlock”: 0, “constantinopleBlock”: 0, “petersburgBlock”: 0, “istanbulBlock”: 0 }, “alloc”: {}, “coinbase”: “0x0000000000000000000000000000000000000000”, “difficulty”: “0x2000”, “extraData”: “”, “gasLimit”: “0x2fefd8”, “nonce”: “0x0000000000000042”, “mixhash”: “0x0000000000000000000000000000000000000000000000000000000000000000”, “parentHash”: “0x0000000000000000000000000000000000000000000000000000000000000000”, “timestamp”: “0x00” } 三配置文件,初始化 1.
1.查找网关 dns IP地址
[root@localhost net_subject]# cat showip.sh #!/bin/bash # 显示网卡的ip地址 #ip add|grep "\<inet\>"|awk '{print "网卡"$NF"的ip是"$2}' # 除去本地回环地址的ip ip add|grep "\<inet\>"|grep -v "\<lo\>"|awk '{print "网卡"$NF"的ip是"$2}' # 显示默认网关 ip route|grep "default"|awk '{print "默认网关是"$3}' # 显示DNS服务器 cat /etc/resolv.conf |grep "nameserver"|sed -n '1p'|awk '{print "首选DNS是"$2}' sec=$(cat /etc/resolv.conf |grep "nameserver"|sed -n '2p'|awk '{print "备用DNS是"$2}') # 判断有误备用DNS服务器 if [[ -z "$sec" ]] ; then echo "无备用DNS" else echo "$sec" fi # 赋予可执行权限 #chmod +x showip.sh # 复制进PATH变量的目录,以方便使用 #cp -p showip.
文章目录 1.光照全连接神经网络(IFCNN)2. 光照感知双流深度卷积神经网络(IATDNN)3. 光照感知的多光谱语义分割(IAMSS) 近年来,多光谱行人检测作为一种有前景的解决方案受到了广泛的关注,可促进全天候应用(如安全监控和自动驾驶)的鲁棒人体目标检测。在本文中,我们证明了编码在多光谱图像中的光照信息可以显著提高行人检测的性能。提出了一种新的光照感知加权机制来准确描述场景的光照状况。将这些光照信息整合到双流深度卷积神经网络中,学习不同光照条件(白天和夜间)下的多光谱人类相关特征。此外,我们将光照信息与多光谱数据结合,生成更准确的语义分割,用于监督行人检测器的训练。将这些信息整合在一起,我们提出了一个基于光照感知行人检测和语义分割的多任务学习的有效的多光谱行人检测框架。我们提出的方法使用精心设计的多任务丢失函数进行端到端的训练,在KAIST多光谱行人数据集上优于最先进的方法。 图1 (a)白天和(b)夜间场景中多光谱行人实例的特征。(a)和(b)中的第一行是行人实例的多光谱图像。(a)和(b)中的第二行显示了相应行人实例的特征映射可视化。使用深度神经区域建议网络(RPN)[41]生成可见光和热图像的特征图。在白天和夜间光照条件下,多光谱行人样本具有不同的特征。 在白天和夜间光照条件下,多光谱行人样本都表现出不同的特征,如图1所示。因此,使用多个内置子网(每个子网专门捕捉光照特定的视觉模式),为处理由光照变化引起的大量类内差异提供了一个有效的解决方案。根据多光谱数据对光照信息进行鲁棒估计,并将光照信息注入到多个光照感知子网络中,学习多光谱语义特征图,在不同光照条件下同时进行行人检测和语义分割。给出一对白天捕获的多光谱图像,我们提出的光照感知加权机制自适应地为白天-光照子网络(行人检测和语义分割)分配一个高权重,以学习白天的人类相关特征。相比之下,夜间场景的多光谱图像被用来训练夜间照明子网络。我们在图2中说明了这种光照感知加权机制是如何工作的。通过融合多个光照感知子网络的输出产生检测结果,并对较大的场景光照变化保持鲁棒性。
本文的主要贡献如下
证明了通过考虑多光谱语义特征的全连接神经网络体系结构可以稳健地确定场景的光照条件,估计的光照权重提供了有用的信息来提高行人检测的性能。将光照感知机制整合到双流深度卷积神经网络中,以学习不同光照条件(白天和夜间)下的多光谱人类相关特征。第一个利用照明信息训练多光谱行人探测器。提出一个完整的框架,用于多光谱行人检测基于联合学习illumination-aware行人检测和语义分割是训练有素的端到端使用一个精心设计的多任务损失,实现更高精度和更快的运行时相比,目前最先进的多光谱探测器。 图3 提出的光照感知多光谱深度神经网络(IATDNN+IAMSS)的体系结构。注意,绿色方框表示卷积层和全连接层,黄色方框表示池化层,蓝色方框表示融合层,灰色方框表示分割层,橙色方框表示输出层。应该是彩色的。
如图3所示,光照感知多光谱深度神经网络的体系结构由光照全连接神经网络(IFCNN),光照感知双流深度卷积神经网络(IATDNN) 和 光照感知多光谱语义分割(IAMSS) 三个集成处理模块组成。
给定对齐的可见光和热图像,IFCNN计算光照感知权重,以确定它是白天的场景还是夜晚的场景。
通过提出的光照感知机制,IATDNN和IAMSS利用多个子网同时生成分类分数(Cls)、包围框(Bbox)和分割掩码(Seg)。例如,IATDNN使用两个独立的分类子网络(D-Cls和N-Cls)在昼夜照明下对人类进行分类。将各子网络的Cls、Bbox、Seg结果进行整合,通过根据场景光照条件定义的门函数得到最终输出。基于光照感知行人检测和语义分割的多任务学习,对该方法进行端到端的训练。
1.光照全连接神经网络(IFCNN) 如图3所示,将两幅可见光和红外图像送入前5个卷积层,并将两流深度卷积神经网络[20]的卷积层池化,提取每个流中的语义特征。TDNN的每个特征提取层流都以VGG-16[36]中的Conv1-5为骨干。然后融合两个通道的特征映射,通过连接层(Concat)生成双流特征映射(TSFM)。TSFM利用作为输入的IFCNN权重计算illumination-aware 的 ω d \omega_d ωd 和 ω n = ( 1 − ω d ) \omega_n =(1- \omega_d) ωn=(1−ωd) 确定一个场景的照明条件。
IFCNN由一个池化层(IA-Pool)、三个全连接层(IA-FC1、IA-FC2、IA-FC3)和soft-max层(soft-max)组成。与空间金字塔池化层(SPP)一样,空间金字塔池化层消除了网络[16]的固定大小约束,IA-Pool使用双线性插值将TSFM的特征调整为固定长度的图形图(7 7),并为完全连接的层生成固定大小的输出。IA-FC1、IA-FC2、IA-FC3的信道数根据经验分别设置为512、64,2。Soft-max是IFCNN的最后一层。Softmax的输出是 ω d \omega_d ωd 和 ω n \omega_n ωn 。我们将照明误差术语li定义为:
L I = − ω ^ d ⋅ log ( ω d ) − ω ^ n ⋅ log ( ω n ) L_{I}=-\hat{\omega}_{d} \cdot \log \left(\omega_{d}\right)-\hat{\omega}_{n} \cdot \log \left(\omega_{n}\right) LI=−ω^d⋅log(ωd)−ω^n⋅log(ωn)
基本介绍 Vue 是一套用于构建用户界面的 渐进式框架 。
与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。
最初它不过是个人项目,时至今日,已成为全世界三大前端框架之一,github 上拥有 17.8万 Star。 领先于 React 和 Angular,在国内更是首选。
它的设计思想、编码技巧也被众多的框架借鉴、模仿。
重要版本发布 2013年,在 Google 工作的尤雨溪,受到 Angular 的启发,开发出了一款轻量级框架,最初命名为 Seed 。
2013年12月,更名为 Vue,图标颜色是代表勃勃生机的绿色,版本号是 0.6.0。
2014.01.24,Vue 正式对外发布,版本号是 0.8.0。
2014.02.25,0.9.0 发布,有了自己的代号:Animatrix,此后,重要的版本都会有自己的代号。
2015.06.13,0.12.0,代号Dragon Ball,Laravel 社区(一款流行的 PHP 框架的社区)首次使用 Vue,Vue 在 JS 社区也打响了知名度。
2015.10.26,1.0.0 Evangelion 是 Vue 历史上的第一个里程碑。同年,vue-router、vuex、vue-cli 相继发布,标志着 Vue从一个视图层库发展为一个渐进式框架。
2016.10.01,2.0.0 是第二个重要的里程碑,它吸收了 React 的虚拟 Dom 方案,还支持服务端渲染。自从Vue 2.0 发布之后,Vue 就成了前端领域的热门话题。
2019.02.05,Vue 发布了 2.6.0 ,这是一个承前启后的版本,在它之后,推出了 3.0.0。
2019.12.05,在万众期待中,尤雨溪公布了 Vue 3 源代码,此时的 Vue 3仍 处于 Alpha 版本。
我们经常用参数量和浮点计算数FLOPs来衡量卷积网络的复杂度。下面推导其公式并在pytorch中实现,以二维卷积Conv2d为例。
1、公式 以下公式适用于各种情况的卷积层,如普通卷积、膨胀卷积、分组卷积、可分离卷积等:
参数量:
无bias时: k H × k W × C i n / g × C o u t k_{H }×k_{W }×C_{in}/g×C_{out} kH×kW×Cin/g×Cout
有bias时: ( k H × k W × C i n / g + 1 ) × C o u t (k_{H }×k_{W }×C_{in}/g + 1)×C_{out} (kH×kW×Cin/g+1)×Cout
浮点计算数FLOPs(指所有的乘法和加法运算):
无bias时: ( 2 × k H × k W × C i n / g − 1 ) × C o u t × H o u t × W o u t (2×k_{H }×k_{W }×C_{in}/g - 1)×C_{out}×H_{out}×W_{out} (2×kH×kW×Cin/g−1)×Cout×Hout×Wout
一、hashCode()的作用 在Java的Object类中有一个方法:
public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现。为何Object类需要这样一个方法?它有什么作用呢?
不妨举个例子:
假设内存中有0 1 2 3 4 5 6 7 8这8个位置,如果我有个字段叫做ID,那么我要把这个字段存放在以上8个位置之一,如果不用HashCode而任意存放,那么当查找时就需要到8个位置中去挨个查找。使用HashCode则效率会快很多,把ID的HashCode%8,然后把ID存放在取得余数的那个位置,然后每次查找该类的时候都可以通过ID的HashCode%8求余数直接找到存放的位置了。如果ID的HashCode%8算出来的位置上本身已经有数据了怎么办?这就取决于算法的实现了,比如ThreadLocal中的做法就是从算出来的位置向后查找第一个为空的位置,放置数据;HashMap的做法就是通过链式结构连起来。反正,只要保证放的时候和取的时候的算法一致就行了。如果ID的HashCode%8相等怎么办(这种对应的是上句说的链式结构的场景)?这时候就需要定义equals了。先通过HashCode%8来判断类在哪一个位置,再通过equals来在这个位置上寻找需要的类。对比两个类的时候也差不多,先通过HashCode比较,假如HashCode相等再判断equals。如果两个类的HashCode都不相同,那么这两个类必定是不同的。
再举个实际的例子Set。我们知道Set里面的元素是不可以重复的,那么如何做到?Set是根据equals()方法来判断两个元素是否相等的。比方说Set里面已经有1000个元素了,那么第1001个元素进来的时候,最多可能调用1000次equals方法,如果equals方法写得复杂,对比的东西特别多,那么效率会大大降低。使用HashCode就不一样了,比方说HashSet,底层是基于HashMap实现的,先通过HashCode取一个模,这样一下子就固定到某个位置了,如果这个位置上没有元素,那么就可以肯定HashSet中必定没有和新添加的元素equals的元素,就可以直接存放了,都不需要比较;如果这个位置上有元素了,逐一比较,比较的时候先比较HashCode,HashCode都不同接下去都不用比了,肯定不一样,HashCode相等,再equals比较,没有相同的元素就存,有相同的元素就不存。如果原来的Set里面有相同的元素,只要HashCode的生成方式定义得好(不重复),不管Set里面原来有多少元素,只需要执行一次的equals就可以了。这样一来,实际调用equals方法的次数大大降低,提高了效率。
所以hashCode在上面扮演的角色为寻域(寻找某个对象在集合中区域位置)。hashCode可以将集合分成若干个区域,每个对象都可以计算出他们的hash码,可以将hash码分组,每个分组对应着某个存储区域,根据一个对象的hash码就可以确定该对象所存储区域,这样就大大减少查询匹配元素的数量,提高了查询效率。
即hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。
二、hashCode对于一个对象的重要性 hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。
虽然,每个Java类都包含hashCode() 函数。但是,仅仅当创建某个“类的散列表”(关于“散列表”见下面说明)时,该类的hashCode() 才有用(作用是:确定该类的每一个对象在散列表中的位置;其它情况下(例如,创建类的单个对象,或者创建类的对象数组等等),类的hashCode() 没有作用。
上面的散列表,指的是:Java集合中本质是散列表的类,如HashMap,Hashtable,HashSet。
也就是说:hashCode() 在散列表中才有用,在其它情况下没用。在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。
OK!至此,我们搞清楚了:hashCode()的作用是获取散列码。但是,散列码是用来干什么的呢?这里简单的介绍一下散列码的作用。
我们都知道,散列表存储的是键值对(key-value),它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利用到了散列码!散列表的本质是通过数组实现的。当我们要获取散列表中的某个“值”时,实际上是要获取数组中的某个位置的元素。而数组的位置,就是通过“键”来获取的;更进一步说,数组的位置,是通过“键”对应的散列码计算得到的。
下面我以HashTable为例阐述hashCode对于一个对象的重要性。
一个对象势必会存在若干个属性,如何选择属性来进行散列考验着一个人的设计能力。如果我们将所有属性进行散列,这必定会是一个糟糕的设计,因为对象的hashCode方法无时无刻不是在被调用,如果太多的属性参与散列,那么需要的操作数时间将会大大增加,这将严重影响程序的性能。但是如果较少属相参与散列,散列的多样性会削弱,会产生大量的散列“冲突”,除了不能够很好的利用空间外,在某种程度也会影响对象的查询效率。其实这两者是一个矛盾体,散列的多样性会带来性能的降低。
那么如何对对象的hashCode进行设计,LZ也没有经验。从网上查到了这样一种解决方案:设置一个缓存标识来缓存当前的散列码,只有当参与散列的对象改变时才会重新计算,否则调用缓存的hashCode,这样就可以从很大程度上提高性能。
在HashTable计算某个对象在table[]数组中的索引位置,其代码如下:
int index = (hash & 0x7FFFFFFF) % tab.length; 为什么要&0x7FFFFFFF?因为某些对象的hashCode可能会为负值,与0x7FFFFFFF进行与运算可以确保index为一个正数。通过这步我可以直接定位某个对象的位置,所以从理论上来说我们是完全可以利用hashCode直接定位对象的散列表中的位置,但是为什么会存在一个key-value的键值对,利用key的hashCode来存入数据而不是直接存放value呢?这就关系HashTable性能问题的最重要的问题:Hash冲突!
我们知道冲突的产生是由于不同的对象产生了相同的散列码,假如我们设计对象的散列码可以确保99.999999999%的不重复,但是有一种绝对且几乎不可能遇到的冲突你是绝对避免不了的。我们知道hashcode返回的是int,它的值只可能在int范围内。如果我们存放的数据超过了int的范围呢?这样就必定会产生两个相同的index,这时在index位置处会存储两个对象,我们就可以利用key本身来进行判断。所以具有相索引的对象,在该index位置处存在多个对象,我们必须依靠key的hashCode和key本身来进行区分。
三、equals()的作用 equals() 的作用是 用来判断两个对象是否相等。
equals() 定义在JDK的Object.java中。通过判断两个对象的地址是否相等(即,是否是同一个对象)来区分它们是否相等。源码如下:
public boolean equals(Object obj) { return (this == obj);} 既然Object.java中定义了equals()方法,这就意味着所有的Java类都实现了equals()方法,所有的类都可以通过equals()去比较两个对象是否相等。 但是,我们已经说过,使用默认的“equals()”方法,等价于“==”方法。因此,我们通常会重写equals()方法:若两个对象的内容相等,则equals()方法返回true;否则,返回fasle。
下面根据“类是否覆盖equals()方法”,将它分为2类。
(01) 若某个类没有覆盖equals()方法,当它的通过equals()比较两个对象时,实际上是比较两个对象是不是同一个对象。这时,等价于通过“==”去比较这两个对象。
文章目录 **写在前面****二元运算****逻辑关系****大尺寸运算符号****箭头****定界符****大尺寸定界符****数学模式重音符****小写希腊字母****大写希腊字母****特殊符号****非数学符号****定界符****希腊字母和希伯来字母****AMS二元运算符****数学字母** 写在前面 数学公式分为行内公式和单行公式。其中行内公式需要在两边加$,单行公式需要在公式两边加$$
如:$a+b$ 其效果为: a + b a+b a+b
而两边加$$其效果为:
a + b a+b a+b
二元运算 逻辑关系 ps:可在上述命令前面加上\not来得到其否定形式。
大尺寸运算符号 箭头 定界符 大尺寸定界符 数学模式重音符 小写希腊字母 大写希腊字母 特殊符号 非数学符号 定界符 希腊字母和希伯来字母 AMS二元运算符 数学字母
首先是具备W5500芯片的驱动,参考上一篇文章 RT -Thread Studio开发环境下驱动W5500网络芯片 https://blog.csdn.net/qq_25186745/article/details/112647919
在这篇文章的基础上来继续写TCP客户端的程序
在applications文件下新建my_tcp.c文件
粘贴以下代码
#include <rtthread.h>
#include <sys/socket.h> /* 使用BSD socket,需要包含socket.h头文件 */
#include <netdb.h>
#include <string.h>
#include <finsh.h>
#define BUFSZ 1024
static const char send_data[] = "This is TCP Client from RT-Thread."; /* 发送用到的数据 */
void tcpclient(int argc, char **argv)
{
int ret;
char *recv_data;
struct hostent *host;
int sock, bytes_received;
struct sockaddr_in server_addr;
const char *url;
int port;
if (argc < 3)
{
rt_kprintf("Usage: tcpclient URL PORT\n"
点击蓝字 关注我们
我们经常遇到需要做报告,最方便的是我们自己的电脑插头投影仪可以直接显示出来,然后我们通常会遇到很多问题,例如,投影仪不能显示电脑的内容,或者是电脑没有照片,等等。把投影仪和计算机连接起来的方法是什么?在这里,我将向您展示如何正确地将您的PC和笔记本电脑连接到投影仪。
投影机是如何与电脑连接的
我怎样把笔记本电脑和投影仪连接起来
第一步:插入笔记本电脑和投影机的电源线。
第二步:将视频线分别连接到电脑和投影仪上。当然,插入功放的音频电缆。
第三步:打开投影仪的电源开关,右边会有一个电源灯。当然,电脑必须打开
第四步:当以上仪器都准备好后,同时按组合键:Fn+F*,因为不同的电脑可能有不同的功能键,但是功能键会有一个标志,通常是两个屏幕,可以互相切换
第五步:现在连接成功。如果投影仪显示图片,但电脑屏幕是黑色的,然后再按Fn+F*。这样,电脑和投影仪都没问题。
投影机(投影机)带有笔记本电脑屏幕开关功能键
IBM笔记本:FN+F7,屏幕切换(只支持外接显示器);
联想笔记本:FN+F3(联想旧笔记本为FN+F10);
华硕笔记本:FN + F10;
锋利的笔记本:FN + F3;
戴尔笔记本:FN + F8;
三星笔记本:FN + F4;
惠普笔记本:FN + F4;
东芝笔记本:FN + F5;
NEC笔记本:FN + F3。
以SONY notebook为例说明解决方案:
1、右键点击桌面-属性-设置-高级-英特尔(R)GMADriverforMobile-图形属性。在设置投影仪之前先把它连接起来。
2、点击笔记本的显卡标题。
3、点击笔记本电脑和显示器图标(有两个电脑屏幕图标)。
4. 当点击第一个图标(显示器)时,笔记本将不显示,但投影仪将显示。
5. 当点击第二个图标(笔记本)时,笔记本将会显示,但是投影仪不会显示。
6 点击“确定”即可显示投影仪。
台式电脑如何连接投影仪
通常,台式电脑有两种方式连接投影仪。一种是将投影机连接到计算机显卡(主机)的接口上,然后将计算机显示器的VGA电缆连接到投影机的输出接口上(这种情况下必须有投影机的VGA OUT接口)。另一个是买一个1分钟2 VGA的分频器,分频器连接到电脑显卡上,2输出一个连接显示器一个连接投影仪,这是比较容易使用的。
设置桌面电脑刷新率与投影机刷新率一致,然后点击投影机上的“monitor”。屏幕会显示在投影仪上,这并不奇怪。台式电脑的VGA线只能连接主机和投影机,此时投影机是显示器,台式电脑与笔记本电脑不一样,笔记本电脑的VGA端口连接到投影机上,切换到投影机就可以了。如果你想让投影仪和台式电脑显示器都能工作,就把分配器插入外壳的VGA端口。分配器有多个VGA端口,一个连接到监视器,一个连接到投影仪。DVI到VGA和VGA是一样的。
现在用苹果电脑的人也很多了,有的人在使用苹果电脑的时候很困惑一个问题,苹果电脑怎么把文件复制到u盘?这个问题我们可以通过Automator来解决,下面来跟大家详细解答一下具体的方法和步骤。
苹果电脑怎么把文件复制到u盘
步骤1、点击 Launchpad - 其他 – Automator,然后在右上角的状态栏中点击文件 - 新建,然后选择“工作流程”。
步骤2、点击窗口左侧的操作 - 资源库 - 文件和文件夹,并且将“获得指定的 Finder 项目”拖入右边的空白位置。
步骤3、在“操作 - 资源库 - 文件和文件夹”的路径中将“拷贝 Finder 项目”拖入右侧窗口,根据自己的情况多次拖入,并一一设定好位置,比如桌面、下载、文稿等等一切 Finder 能打开的位置。
步骤4、将需要拷贝的文件或文件夹(一个或多个)拖进“获得指定的 Finder 项目”里,然后点击右上角的“运行”按钮,下方的“日志“窗口中显示工作流程已完成即表示操作成功。
步骤5、将“获得指定的 Finder 项目”窗口中的文件或文件夹移除,然后在右上角的状态栏中点击文件 – 存储,命名之后选择存储位置,比如桌面等等,保存之后退出 Automator,下一次我们可以直接双击该文件即可在 Automator 中快速打开。
以上就是关于苹果电脑怎么把文件复制到u盘的详细方法和步骤,希望以上的分享步骤能够帮助到大家。
Learn more about spring in small details 通过小细节了解Spring @Configuration注解与其proxyBeanMethods属性的理解Spring 内置的扫描器的理解记录 @Configuration注解与其proxyBeanMethods属性的理解 Spring启动的时候扫描所能扫描路径下的@component注解(@Configuration是包含@component注解的),然后将其bean对应的bend定义类beanDefinition放到容器中(BeanDefinition是对bean的描述,里边存有bean的名称,Class等基本信息);
在获取所有的beanDefenition执行器后置处理器PostProcess,其中包含的后置处理器ConfigurationClassPostProcessor,而对@Configuration注解的,会对这个类进行CGLIB代码,生成一个代理的类,并且把这个类设置到BeanDefenition的Class属性中。当需要拿到这个bean的实例的时候,会从这个class属性中拿到的Class对象进行反射,那么最终反射出来的是代理增强后的类
proxyBeanMethods属性的理解 roxyBeanMethods默认为true,表示cglib会为@Configuration生成一个代理类,而如果我们在项目中,声明创建多个相同的bean时,并且声明的bean存在引用关系的话(见下面代码),则会只创建一次,因为另一次会从IOC容器中直接获取;
如果将roxyBeanMethods设置为false,这时我们创建多个相同的bean,并且bean存在引用的关系,这时候不会使用CGLIB产生代理,而是会创建多个bean
@Configuration(proxyBeanMethods = false) public class SimpleConfig { @org.springframework.context.annotation.Bean public Bean bean1() { final Bean bean1 = new Bean("bean1"); System.out.println("bean1:" + bean2.getClass()); bean2(); return bean1; } @org.springframework.context.annotation.Bean public Bean bean2() { final Bean bean2 = new Bean("bean2"); System.out.println("bean2:" + bean2.getClass()); return bean2; } @AllArgsConstructor public class Bean { private String name; } } - 分析 - proxyBeanMethods = true时: > 输出bean2:class com.
找到 Python 解释器设置位置:File -> Settings -> Project: 项目名 -> Python Interpreter -> Show All…
图中这里已经设置好了 base 环境,一般刚创建项目时没有注意看,会是新创建了一个名为项目名的虚拟环境。 在弹出来的解释器列表中,选择创建解释器,如下图所示:
可以勾上 Make available to all projects,方便其他项目使用。接下来就可以自己选择切换已有环境了。 重要的是,Anaconda 的 base 环境并不在 envs 文件夹下,而是 Anaconda 的根目录,选择 base 环境的解释器如下:
然后一路 OK 即可。
本文基于标准MQTT讨论,不适合其他对MQTT机制做了修改的非标准MQTT协议。
MQTT设计了一套保证消息稳定传输的机制,包括消息应答、存储和重传。在这套机制下,提供了三种不同层次QoS(Quality of Service):
QoS0,发送就不管了,最多一次;QoS1,发送之后依赖MQTT规范,是否启动重传消息,所以至少一次;QoS2,发送之后依赖MQTT消息机制,确保只有一次。 QoS 是消息的发送方(Sender)和接受方(Receiver)之间达成的一个协议:(MQTT不是端到端的通信)
QoS0 代表,Sender 发送的一条消息,Receiver 最多能收到一次,也就是说 Sender 尽力向 Receiver 发送消息,如果发送失败,也就算了;这是完全依赖TCP重传机制,如果网络不好,TCP的重传也不是100%可靠,加上MQTT是Publisher 发出去的消息是依赖代理服务器完成转发,所以消息最多一次。QoS1 代表,Sender 发送的一条消息,Receiver 至少能收到一次,也就是说 Sender 向 Receiver 发送消息,如果发送之后没有收到对应的PUBACK,就会继续重试,直到发送者Sender 接收到 Receiver 发送的 PUBACK 为止,因为重传的原因,Receiver 有可能会收到重复的消息;QoS2 代表,Sender 发送的一条消息,Receiver 确保能收到而且只收到一次,也就是说 Sender 尽力向 Receiver 发送消息,如果发送失败,会继续重试,直到 Receiver 收到消息为止,同时保证 Receiver 不会因为消息重传而收到重复的消息。(个人理解这一点有点像TCP三次握手的交互过程) 下面讨论Qos不降级的情况,即订阅者与发布者的Qos等级相同。
Qos 0的交互流程: 消息的分发依赖于底层网络的能力。接收者不会发送响应,发送者也不会重试。消息可能送达一次也可能根本没送达。消息从Publisher发送给代理服务broker,或者broker发送给Subscriher,都可能会丢失。 注意:对于QoS 0的消息, DUP标志必须设置为0 Qos 1的交互流程: 只有当QoS等级是1或2时, 报文标识符( Packet Identifier) 字段才能出现在PUBLISH报文中。下面是MQTT Qos的补充说明:
[MQTT-4.3.2-1] 对于QoS 1的分发协议, 发送者
每次发送新的应用消息都必须分配一个未使用的报文标识符。MUST send a PUBLISH Packet containing this Packet Identifier with QoS=1,DUP=0。发送的PUBLISH报文必须包含报文标识符且QoS等于1,DUP等于0。必须将这个PUBLISH报文看作是 未确认的 , 直到从接收者那收到对应的PUBACK报文。 4.
上一篇文章讲的是基于词典和AC自动机的快速分词。基于词典的分词有一个明显的优点,就是便于维护,容易适应领域。如果迁移到新的领域,那么只需要添加对应的领域新词,就可以实现较好地分词。当然,好的、适应领域的词典是否容易获得,这还得具体情况具体分析。本文要讨论的就是新词发现这一部分的内容。
这部分内容在去年的文章《新词发现的信息熵方法与实现》已经讨论过了,算法是来源于matrix67的文章《互联网时代的社会语言学:基于SNS的文本数据挖掘》。在那篇文章中,主要利用了三个指标——频数、凝固度(取对数之后就是我们所说的互信息熵)、自由度(边界熵)——来判断一个片段是否成词。如果真的动手去实现过这个算法的话,那么会发现有一系列的难度。首先,为了得到$n$字词,就需要找出$1\sim n$字的切片,然后分别做计算,这对于$n$比较大时,是件痛苦的时间;其次,最最痛苦的事情是边界熵的计算,边界熵要对每一个片段就行分组统计,然后再计算,这个工作量的很大的。本文提供了一种方案,可以使得新词发现的计算量大大降低。
算法#
回顾matrix67的算法做新词发现的过程,应该可以认识到,新词发现做的事情,就是根据语料判断给定片段是不是真的成词了,而所谓成词,就是它相对独立,不可切分。那为什么不反过来呢?为什么我们不去找一下哪些片段不能成词呢?根据前面的说法,我们说片段的凝固度大于一定程度时,片段可能成词(接下来要去考虑它的边界熵)。那这不就是说,如果片段的凝固度低于一定程度时,这个片段就不可能成词了吗?那么我们就可以在原来的语料中把它断开了。
我们可以做适当的简化,如果$a,b$是语料中相邻两字,那么可以统计$(a,b)$成对出现的次数$\#(a,b)$,继而估计它的频率$P(a,b)$,然后我们分别统计$a,b$出现的次数$\#a,\#b$,然后估计它们的频率$P(a),P(b)$,如果
$$\frac{P(a,b)}{P(a)P(b)} < \alpha \quad (\alpha\text{是给定的大于1的阈值})$$
那么就应该在原来的语料中把这两个字断开。这个操作本质上就是——我们根据这个指标,对原始语料进行初步的分词!在完成初步分词后,我们就可以统计词频了,然后根据词频来筛选。
对比matrix67文章中的三个指标,我们现在只用了两个:频数和凝固度,去掉了计算量最大的边界熵,而且,在计算凝固度时,我们只需要计算二字片段的凝固度,省掉了更多字片段的凝固度计算,但是,由于我们是基于切分的方式做的,因此我们少了很多计算量,但理论上却能够得任意长度的词语!
实现#
看上去很完美——计算量少了,功能更强了。实际效果如何呢?跟matrix67文章中的算法的结果有多少出入?这个还得真的自己试过才能说了算。不过,我用了30万篇微信公众号的文章(约1GB)进行实验,发现效果是可以让人满意的,用时10分钟左右。下面给出实现代码,很短,纯Python,并且不用第三方库的支持,而且内存非常友好,这里的texts可以是一个列表,也可以是一个迭代器(每次返回一篇文章),配合tqdm库,可以方便地显示进度。最后,在统计时,用到了加$\gamma$平滑法,以缓解出现不合理的词。以前做这些统计计算的时候,不用想就用Pandas了,最近尝试了一下Python原生的一些库,发现也相当好用呢~
Python流式读取SQL数据的参考代码:
分析#
当然,这个算法不能说完全没有缺点,还是有些问题值得探讨的。一般情况下,为了得到更细粒度的词语(避免分出太多无效的长词),我们可以选择较大的$\alpha$,比如$\alpha=10$,但是这带来一个问题:一个词语中相邻两个字的凝固度不一定很大。一个典型的例子是“共和国”,“和”跟“国”都是很频繁的字,“和国”两个字的凝固度并不高(在微信文本中大概为3左右),如果$\alpha$太大就会导致切错了这个词语(事实上,是“共和”跟“国”的凝固度高),这些例子还有很多,比如“林心如”的“心如”凝固度就不大(当然,如果语料来源于娱乐圈,那又另当别论)。而如果设置$\alpha=1$,则需要更大的语料库才能使得词库完备起来。这是在使用本算法时需要仔细考虑的。
微信词典#
最后分享一份我从最近的30万微信公众号文章(1G左右, 3亿多字)中提取的一份词表,设置了最小凝固度为1,最小频数为100。从表中也可以发现,跟微信具有明显联系的词语都已经被提取出来,并且,这是最新的公众号文章,因此,最近的热点——奥运、王宝强——相关的词语也被提取出来了。
参考链接#
《非主流自然语言处理——遗忘算法系列(二):大规模语料词库生成》:http://www.52nlp.cn/forgetnlp2
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
打赏
微信打赏
支付宝打赏
因为网站后台对打赏并无记录,因此欢迎在打赏时候备注留言。你还可以点击这里或在下方评论区留言来告知你的建议或需求。
如果您需要引用本文,请参考:
苏剑林. (Aug. 18, 2016). 《【中文分词系列】 2. 基于切分的新词发现 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/3913
网络天才这是一款解谜问答类的娱乐游戏,用独具色彩的画面风格,以阿拉丁为故事背景,可以用几个问题来猜出你心中所想,并体验多种思维导向与解谜挑战,非常适合闲暇时间里休闲娱乐一下。感兴趣的快来下载吧!
游戏特色
释放你的创造力
由于Geniz,你可以解锁,并玩转新的背景,随意定制Akinator。这个精灵将变成一个吸血鬼、牛仔或迪斯科舞者。
继续猜
每天尝试找出5个神秘人物,赢得特别的天才,用来定制你最喜欢的妖怪。
终极灵药
Akinator值得拥有!此灵药具备所有其他灵药的功效。它还可以让你优化你的人物,这样,你也可以诱捕你的朋友。
来尝试MyWorld体验吧
Akinator的天资永无止境!来自精灵的另一个惊喜:通过MyWorld,发现新玩法。无止境地挑战Akinator:让他猜想谁是你的亲朋好友并把他们召
集到你的MyWorld画廊中。还有更妙的!即使你没有在游戏,Akinator仍旧能猜出你的朋友和亲戚的名字。这怎么可能?!把你的手机递给你的朋友,打
开MyWorld体验。。。并为这样的惊奇做好准备吧!
去寻找Aki奖励
Akinator邀请你跳出固有思维模式。正如你所知道的,他喜欢猜更难猜的对象,接受更大的挑战。
要做到这一点,就让他猜已经很久没玩过的被遗忘的对象。
游戏玩法
游戏拥有浓厚的欧美卡通画面风格和动感的背景音乐。
如果想要考验这个天才,就快来游戏去尝试一下吧。
游戏中的天才角色能够猜透你的心思,只需要几个问题就能猜出你心中所想。
在游戏之中玩家可以自己设想一个角色人物,并且回答游戏中网络天才的问题后让他猜出你的人物,获得更多的关卡挑战吧。
游戏优势
提供多语言功能(法语,英语,西班牙语,葡萄牙语,德语,日语,阿拉伯语,俄罗斯语,意大利语,中文,土耳其语,韩语,希伯来语和荷兰语)。
附加背景(日版Akinator)。
在和Twitter上分享你的战果。
版本会随着你的平板电脑而有所调整。
儿童网络过滤功能,让你的孩子玩得更安全。
常见问题
游戏闪退解决办法
手机内存不足:可能你的手机后台开了太多的应用程序,在打开网络天才游戏的时候导致手机内存不足从而出现游戏闪退现象,那么我们只要打开手机进程管理,将后台不用的应用关掉就可以啦,再重启游戏应该不会再闪退了。
手机网络问题:手机网络断了或者不稳定也可能导致游戏闪退,建议大家在WiFi环境下玩网络天才游戏。
游戏版本问题:可能你手机上当前游戏版本不是最新版本,
游戏服务器问题:可能当前游戏登录玩家过多导致服务器压力太大,从而出现闪退黑屏现象,一般重启几次游戏就可以了。
手机杀毒软件、手机助手拦截:可能你手机上安装的杀毒软件误将游戏当成病毒进行了拦截,进入杀毒软件取消拦截即可,这种情况比较少。
击上方[word精品教程]-右上角[...]-[设为星标⭐]
即可第一时间获取最新办公资讯
在日常办公中,根据排版的需要,我们经常会将一些横排的文本内容竖向排列显示;甚至有时候,如果页面中有一些大表格,由于纸张为竖向,导致表格显示不全,那么就需要将这些页面进行横排放置。
每当遇到这些横排纵排的问题时,你知道在Word中是如何设置的吗?
如果你还不知道,千万不要错过今天的内容,小编在这里将给大家进行详细讲解,希望对你有帮助。
01
文字纵横显示
默认情况下,Word文档中的文字都是横向显示的,但对于一些特殊的文档,需将文字竖向排版,如何快速设置呢?方法分别有两种:
一种是点击【插入】-【文本框】-【绘制竖排文本框】,在页面中绘制一个竖向文本框,在该文本框中输入的文本就会变成竖向显示。
另一种是点击【布局】-【文字方向】按钮,在弹出的下拉列表中选择“垂直”选项即可将文档中的所有文字都变为竖向显示。
但是,为便于阅读,有时候还需将竖排文本中的某些文本,如数字、英文等横向排版,怎么办呢?
选择需要横排的文本,点击【开始】-【段落】-【中文版式】按钮,在弹出的菜单中选择“纵横混排”选项,打开“纵横混排”对话框,直接单击“确定”按钮即文本单独横排了。然后使用格式刷工具将格式复制应用于其他需要横排的内容即实现文本纵横混排显示啦!
02
页面纵横显示
工作中,我们经常还会遇到一篇Word文档,横竖混排的纸张效果,这是如何实现的呢? 方法一:选中你需要变更为横向页面中的文字或表格,选择“布局”选项卡,单机右下角的扩展按钮。打开“页面设置”对话框,选择“横向”纸张,在“应用于”下拉列表中选择“所选文字”,单击“确定”按钮即可。 方法二:将鼠标光标定位于要变更为横向页面中的文首,选择【布局】—【分隔符】-【下一页】。然后设置纸张方向为“横向”。这时候,“下一页”后面的文档纸张全部变成了横向; 当我们想在第五页又变回竖向纸张,那么,同样将光标定位于第五页文首,再次设置【分隔符】-【下一页】。然后设置纸张方向为“竖向”,此进,文档后面的纸张全部又变成了竖向。 如果你觉得有用,就点右上角分享给朋友们看看吧!欢迎点♥在看♥留言 呀! 近期热文推荐: Word快捷键之——不能忽视的“小尾巴”!
还在做重复的工作?2个Word批量技巧送给你,告别低效!
简单5招,轻松给Word文档上把锁,再也不怕被别人偷看了!
Word自动编号好用到爆,但这 2 个常见难题,总是困扰着不少人!
Word多文档快速处理,这 5 个小技巧必须Get,帮你轻松搞定工作!
想学习更多Word的知识,欢迎加入部落窝教育Word学习群。
QQ群号:471091584
我是为大家推送干货的小编,Word学习加我微信沟通 哎呀!来 都来了,点个【在看】再走呗~
1.vs2015下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/
下载完后解压软件后以管理员身份运行右图的文件:
2.开始安装后,会出现等待界面(可能需要几分钟)。
3. 初始化安装程序
4.如果你的计算机配置不恰当,VS 安装程序会给出警告。
出现该警告是由于我的电脑没有安装 IE10。忽略该警告,点击“继续”按钮。
5.接下来选择安装位置以及安装方式
这里我将 VS2015 安装在 D:\Program Files\ 目录下,你也可以安装在别的目录。
VS2015 除了支持 C/C++ 开发,还支持 C#、F#、VB 等其他语言,我们没必要安装所有的组件,只需要安装与 C/C++ 相关的组件即可,所以这里选择“自定义”。
6.选择要安装的组件
我们不需要 VS2015 的全部组件,只需要与 C/C++ 相关的组件,所以这里只选择了“Visual C++”,将其它用不到的组件全部取消勾选了。
点击“下一步”按钮,弹出如下的确认对话框:
点击“安装”按钮开始安装。
7.接下来进入漫长的等待过程,可能需要半个小时左右。
安装完成后,VS2015 会要求重启计算机。嗯,那就重启吧。
8.重启完成后,打开“开始菜单”,发现多了一个叫“Visual Studio 2015”的图标,就证明安装成功了。
设置 VS2015
首次使用 VS2015 还需要简单的配置,主要包括开发环境和主题风格。
启动 VS2015,会提示登录:
如果你不希望登录,可以点击“以后再说”。
接下来选择环境配置:
我们将使用 VS2015 进行 C/C++ 程序开发,所以选择“Visual C++”这个选项。至于颜色主题,大家自己看着办。
等待几分钟的准备过程,VS2015 就启动成功了。
Excel技巧,Excel下拉菜单怎么做! 在使用Excel录入数据时,我们通常使用下拉列表来限定输入的数据,因为这样一来录入的数据就很少会出现错误了。Excel 2013与之前的版本比较发生了很大的变化。那么在Excel 2013下拉菜单怎么做呢?今天小编现在就来将添加下来菜单的操作方法给大家,一起来看看吧。
1,我以输入男女为例,打开一个Excel,我们要在性别这一列中设置一个下拉菜单,内容为“男”“女”
excel,下拉,如何添加下拉菜单,excel下拉菜单怎么做
2,选中姓名后面所对着的“性别”单元格
excel,下拉,如何添加下拉菜单,excel下拉菜单怎么做
3,依次打开“数据”—“有效性”
excel,下拉,如何添加下拉菜单,excel下拉菜单怎么做
4,在新出来的对话框中,打开“设置”选项卡,“允许”中选择“序列,在“来源”中输入“男,女”,此处注意,“男,女”之间的逗号为英文逗号。然后勾上“忽略空置”和“提供下拉箭头”。点击确定即可
excel,下拉,如何添加下拉菜单,excel下拉菜单怎么做
5,确定之后,你就可以看到,在“性别”这一列下,都出现了“男,女”下拉菜单
excel,下拉,如何添加下拉菜单,excel下拉菜单怎么做
以上就是excel下拉菜单怎么做 excel添加下拉菜单的方法制作方法的全部内容了。
这次在联想的物理机上装银河麒麟4.0.2系统,遇到了不少坑。大致有下面3个问题:
1. 联想的安全策略,不让BIOS回刷
解决方法: 重启,按F1进行系统设置页面;然后选择安全管理-防BIOS回刷-关闭即可。
2. 光盘启动后,显示屏一直黑屏
解决方法: 在光盘启动后,选择install kylin时(不要直接回车),要按键盘e进行编辑状态,找到 quiet splash 在后面添加空格和nomodeset然后 按F10保存重启。
3. 系统安装完成后,只出一个麒麟界面不动
解决方法: 当系统安装完成,用户信息设置好后; 重启系统会让选择系统版本,这里不要直接回车,还要按E键进行编辑, 找到quiet splash在后面添加空格和nomodeset,然后按F10保存重启。
这里因为一些原因不能上图,请大家见谅。 如遇到同样的安装问题,可以留言截图,我会即时回复。
STM32CubeMX创建的工程项目芯片更改:
1.打开STM32CubeMX软件。
2.选择需要使用的芯片类型。
3.导入以前项目的工程。
4.按需求更改管脚和时钟等。
5.点击生成工程代码(工程名称和路径要一样)。
6.把生成的xx.ioc复制出来替换原来项目的.ioc文件。
7.双击打开xx.ioc,芯片更改完成。
注意:
1.管脚命名最好与原项目一致,更改效率更高。
2.步骤3不需求导入,也可以按新原理图定义功能和管脚
vscode 是最好的IDE 接受反驳!
像很多同志一样也遇到了 安装vscode函数跳转问题很烦恼! 一 , 首先你需要一个go环境,去访问它看看 https://goproxy.cn/ 二 ,vscode 官网 下载后用于远程连接 linux 开发 安装几个必备的插件
Chinese //汉化
Go //go
C/C++ // 代码自动跳转
Remote-SSH //远程连接
点击左下角的绿色条
选择 Add
ssh root@192.168.100.100 -A
continue
~/user/.ssh/config
即可!
三,代码自动补全,包自动导入 ctrl + shift + p (或者F1),然后输入extensions找到扩展Go
https://maiyang.me/post/2018-09-14-tips-vscode/
里面是自动下载更新插件 此时系统库看书可以跳转了但是问题又来了
四,自己写的函数不能跳转? 在设置-> 扩展->Go -> Go:Use Language Server 将勾选去掉
language Server 在官文找到了这句话 语言服务器是一种特殊的Visual Studio Code扩展,可以为许多编程语言提供编辑体验
五,settings.json 可参考的 seeting.json { "go.goroot": "", "go.gopath": "", "go.inferGopath": true, "go.autocompleteUnimportedPackages": true, "
问题提出 不会用PS的遥感人不是好的建模人, 在使用supermap搭建场景的时候,地形常常使用DEM+遥感影像组合的方式得到一个较为逼真的地形。但有时我们找到的满足要求的遥感图像居然有云/有破损/有杂七杂八想要改的调到,对于一个喜欢用PS的人来说,在各种GIS软件中的修改非常suffering啊。于是,如何把带坐标带投影的遥感图像用PS修改,再搞回来依然带坐标,就感觉有点意思了(不做遥感定量分析啥的哈,这就只涉及建模时候好看一点)。
最终效果 在supermap的平台加载看看,两张对比下,第一张是有云的,白色的不是雪是云!运气不错没找到满意的其他时间的图像用来替换有云的地方
然后这是用上PS大法搞的影像图搞上去,好像搞的有点过分了。。。
操作简程 打开ArcGIS,把带云的数据加载进去,右键导出,导出为PNG就行了,勾上使用渲染器转为RGB,反正我们只是拿来看的,波段太多无益。保存后得到两个文件,一个是.png,一个是.pgw,假设文件名为cloud。这个cloud.pgw就保存了一个坐标的信息。然后当然是打开PS,拖进去cloud.png,一顿KaKa乱搞(比如什么色彩选择+内容识别填充(抹掉云和阴影);比如什么污点画笔修复工具+修补工具(微调);比如什么蒙版工具(将错误抹掉的擦掉用原来的图像);等等等等,还能顺便调个色什么的【PS就不详细说了】)。完了满意之后导出为PNG,记住这个文件名,假设为rmcloud.png。把这个rmcloud.png加载到ArcGIS中,同时加载原始的.tif数据进去,因为这里面才有空间参考。图层右键设置坐标系与.tif数据的坐标系相同。然后导出rmcloud.png,这里需要把空间参考设置为数据框(当前),如果有什么大小不一致、边上出现混乱什么的,大不了导出的时候设置下行列数与源数据对其或者用源数据裁剪一下什么的,没啥大问题。最后复制一份cloud.pgw文件副本,把这个改成导出的PNG的文件名,即rmcloud.pgw。这样你改过的PNG文件也有了自己坐标。把这个PNG导入到ArcGIS中,再使用第一步的右键导出,导出为TIFF就OK了。 Over
.版本 2 .支持库 shell .支持库 spec .计次循环首 (10, 次数) ' 调试输出 (次数) '覆盖写入 写到文件 (“d:\zz.txt”, 到字节集 (“你好0!”)) '追加写入 写到文件 (取特定目录 (#系统桌面) + “\zz.txt”, 读入文件 (取特定目录 (#系统桌面) + “\zz.txt”) + 到字节集 (“你好0!” + #换行符)) 读出文件 = 分割文本 (到文本 (读入文件 (取特定目录 (#系统桌面) + “\zz.txt”)), #换行符, ) 调试输出 (读出文件) 调试输出 (取数组成员数 (读出文件)) ' 调试输出 (读出文件 [3]) .计次循环尾 () 执行 (4, 取特定目录 (#系统桌面) + “zz.txt”, , , )
1.ini文件处理
作为配置文件,ini文件格式很流行
[DEFAULT] a = test [mysql] default-character-set=utf8 [mysqld] datadir =/dbserver/data port = 33060 character-set-server=utf8 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 中括号里面的部分称为section,译作节、区、段。 每一个section内,都是key=value形成的键值对,key称为option选项。 注意这里的DEFAULT是缺省section的名字,必须大写。
1.1 configparser
configparser模块的ConfigParser类就是用来操作。
可以将section当做key,section存储着键值对组成的字典,可以把ini配置文件当做一个嵌套的字典。 默认使用的是有序字典。
1.1.1 read(filenames, encoding=None)
读取ini文件,可以是单个文件,也可以是文件列表。可以指定文件编码。
sections() 返回section列表。缺省section不包括在内。add_section(section_name) 增加一个section。has_section(section_name) 判断section是否存在options(section) 返回section的所有option,会追加缺省section的optionhas_option(section, option) 判断section是否存在这个option 1.1.2 get(section, option, *, raw=False, vars=None[, fallback])
从指定的段的选项上取值,如果找到返回,如果没有找到就去找DEFAULT段有没有。
getint(section, option, *, raw=False, vars=None[, fallback])getfloat(section, option, *, raw=False, vars=None[, fallback])getboolean(section, option, *, raw=False, vars=None[, fallback]) 上面3个方法和get一样,返回指定类型数据。
items(raw=False, vars=None) items(section, raw=False, vars=None)
没有section,则返回所有section名字及其对象;如果指定section,则返回这个指定的section的键值 对组成二元组。
1.1.3 set(section, option, value)
由于windows下部署mongoDB时,默认注册成windows 服务,所以nssm已经无法再次配置mongoDB,需要通过脚本完成
1.mongoDB的日志切割脚本:
写个rotate.js
然后写个access_ratate.bat脚本调用,用windows 定时器每天执行,就可以切割脚本
2.清理
参考https://editor.csdn.net/md/?articleId=111997237
常见的文件打开模式: r:只读模式,文件的指针放在文件开头 w:只写模式,文件不存在则创建,文件存在,则覆盖原有内容,文件指针在文件开头 a:追加模式打开文件,文件不存在则创建,文件指针在开头,文件存在则在文件尾追加内容,文件指针在源文件末尾 b:以二进制方式打开文件,不能单独使用,需要与其他模式一起使用,如:rb,wb +:以读写模式代开文件,不能单独使用,需要与其他模式一起使用,如:a+
一、Homebrew是什么?Homebrew的安装和使用
Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。 二、Homebrew的安装
1.打开终端(terminal)
2.安装命令:
命令1:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"(这个命令不好使会报错,如果报错尝试使用命令2) 命令2:/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"(这是一个脚本,同样可以安装Homebrew) 3.卸载命令:
$ cd `brew --prefix` $ rm -rf Cellar $ brew prune $ rm `git ls-files` $ rm -r Library/Homebrew Library/Aliases Library/Formula Library/Contributions $ rm -rf .git $ rm -rf ~/Library/Caches/Homebrew 三、Homebrew的使用
1.查看Homebrew命令:brew help
2.安装任意包:brew install <packageName>,eg:brew install node
3.卸载任意包:brew uninstall <packageName>,eg:brew uninstall git
4.查询可用包:brew search <packageName>
5.查询已安装包列表:brew list
6.查看任意包信息:brew info <packageName>
7.更新Homebrew:brew update
回答:
方法如下:
1、第一步,打开软件,然后打开需要传输的模型文件或创建新模型,见下图,转到下面的步骤。
2、第二步,执行完上述的操作之后,打开左上角的文件,然后在导出窗口中选择step203或step214,见下图,转到下面的步骤。
3、第三步,执行完上述的操作之后,在弹出窗口中单击文件,然后选择保存路径,见下图,转到下面的步骤。
4、第四步,执行完上述的操作之后,选择要导出的数据-选择整个零件或选定的零件-高级选择所需的设置通常是默认设置-确认以等待导出完成,见下图,转到下面的步骤。
5、第五步,执行完上述的操作之后,打开PROE应用程序并创建一个新的PROE零件工程图,见下图,转到下面的步骤。
6、第六步,执行完上述的操作之后,单击打开的菜单栏以插入共享数据,见下图,转到下面的步骤。
7、第七步,执行完上述的操作之后,选择右侧的来自文件以展开列表,见下图,转到下面的步骤。
8、第八步,执行完上述的操作之后,找到要打开的stp文件的目录,然后选择“打开”,见下图,转到下面的步骤。
9、第九步,执行完上述的操作之后,在弹出的对话框中,选择“确定”选项,见下图,转到下面的步骤。
10、第十步,执行完上述的操作之后,等待一会儿,工程图将打开,见下图。这样,就解决了这个问题了。
锦标赛选择(Tournament Selection)
每次从种群中取一定数量(n)的个体(放回抽样),选择其中适应度较好的进入子代种群。重复该操作直到种群规模到和原来的种群规模一样。几元锦标赛就代表一次性从总体中抽取几个个体,然后从中选择最优的个体保留到下一代种群。
step1、确定每次选择的个体数量N。(二元锦标赛选择即选择2个个体)
step2、 从种群中随机选择N个个体(每个个体被选择的概率相同) ,根据每个个体的适应度值,选择
其中适应度值最好的个体进入下一代种群。
step3、 重复步骤(2)多次(重复次数为种群的大小),直到新的种群规模达到原来的种群规模。
优势:
1.更小的复杂度,无需对所有适应度进行排序处理
2.不易陷入局部最优点
3.易于并行化处理
n=3即三元锦标赛选择过程如下: