前言: 作者:CodeCow · 阿牛,微信搜索公众号 “CodeCow ”,我们一起干“java”
正文: 1、Java 的基础数据类型有几种 ?都是啥 ? 8 种
byte、short、int、long、float、double、char、boolean
2、String是最基本的数据类型吗 ? 是否可以继承String类 ? 不是 是引用数据类型
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类
3、①:short s1 = 1; s1 = s1 + 1;有错吗 ? ②:short s2 = 1; s2 += 1;有错吗 ? ①:有错(s1+1运算结果是int型,需要强制转换类型)、 ②:正确
分析①:
s1 = s1 + 1 做运算的时候,1 是 int 类型,s1 会被提升为int类型,
s1+1 后的结果是 int类型,将结果在赋值会short类型时发生错误
short 内存 2 个字节,int 类型 4 个字节
必须将int强制转成short才能完成赋值
分析②:
**+=**是一个运算符,只运算一次,并带有强制转换的特点
也就是说 s2 += 1 就是 s2 = (short)(s2 + 1) ,因此程序没有问题编译通过,运行结果是2.
一文助你打天下,您可信?赠予正在Java面试的你(2020青铜篇)
开门见山地说吧,此文是阿牛曾经自学java编程后,初入江湖,总结的面试题;
遵从:不深入,且简单、实用、易懂;
目的:只为—— 一纸 offer
答案:面试题答案在最后!!!
此文目录 Java基础面试题2020(35题)JavaWeb面试题2020(15题)Spring面试题2020(21题)SpringMVC面试题2020(18题)Mybatis面试题2020(20题)SpringBoot面试题2020(19题)SpringCloud面试题2020(18题) Java基础面试题2020(35题) 1、Java 的基础数据类型有几种 ?都是啥 ? 2、String是最基本的数据类型吗 ? 是否可以继承String类 ? 3、①:short s1 = 1; s1 = s1 + 1;有错吗 ? ②:short s2 = 1; s2 += 1;有错吗 ? 4、String s = new String(“CodeCow”); 创建了几个String Object? 5、int 和 Integer 有什么区别 ? 6、String,StringBuffer 与 StringBuilder 的区别 ? 7、被 final 修饰的 类、方法、变量 有什么特点? 8、Overload 和 Override 的区别。Overloaded的方法是否可以改变返回值的类型? 9、final, finally, finalize的区别 ? 10、Collection 和 Collections的区别 ?
类的概念 类(class)抽象的概念,比如说人类、鸟类、水果、是一个总的称呼,没有具体到某个物体;
对象(object,指具体实例,instance);
类定义的语法:
class 类名: 执行语句 类变量 类方法 类最重要的两部分就是类变量和类方法,类成员之间的可以相互调用。
程序可以在类中给新变量赋值就是增加类变量,可以通过del语句删除已有类的变量。
在__init__构造函数(构造函数后面会说到)里面的是实例变量,程序可以任何位置(类里面或者类外面)增加实例变量,删除则用del语句。
在实例方法中有一个特别的方法 :__init__ ,这个方法被称为构造方法 。 构造方法用于构造该类的对象, Python 通过调用构造方法返回该类的对象 。 python提供一个功能就是:若开发者没有定义构造函数,python会自动提供一个只包含self参数默认的构造方法。
class Bird: '这是学习python的第一个类' eyes = "two" def __init__(self, color,feet): '为python对象增 ' self.color = color self.feet = feet def call(self,cd): print("This bird:",cd) 上面的 Bird类定义了 一个构造方法,该构造方法只是方法名比较特殊:__init__ ,该方法的第一个参数同样是 self,被绑定到构造方法初始化的对象 。和函数定义文档类似,类文档用字符串即可。该文档同样被放在类声明之后、类体之前。
下面是调用类的构造方法创建对象。第二行是调用实例方法。
xique = Bird("green","two") xique.call("gezhi") #打印实例变量 print(xique.color,xique.feet) #访问实例变量,对实例变量赋值 xique.color = "brown" #增加实例变量 xique.skin = 'yellow' #打印编辑后的实例变量 print(xique.color,xique.feet,xique.skin) #调用实例方法call(),第一个参数仍是self,self代表实例本身, #是自动绑定的,不需要再次输入,因此调用实例方法,只需再输入一个参数即可 xique.call("zhizhizhizhi") 同一个类的多个对象具有相同的特征,类用定义多个对象的相同特征。类不是一个具体的实体,对象才是一个具体的实体
手机投屏软件总结!
总结的几个都是收费的,基础版本有的免费
1.ApowerMirror - 实时同屏演示/控制手机屏幕画面
2.Total Control 手机控-电脑控制手机-手机群控系统-官网
3.乐播投屏官网-多屏互动真投屏神器投屏软件下载
4.小萝贝控机大师_用电脑控制手机_同时操作多部手机_原小萝贝虚拟手机
多余的不想说,直接看视频解说!
https://www.zhihu.com/video/1087444729553272832
一、配置中心介绍 1、Spring Cloud Config Spring Cloud Config 为分布式系统的外部配置提供了服务端和客户端的支持方案。在配置的服务端您可以在所有环境中为应用程序管理外部属性的中心位置。客户端和服务端概念上的Spring Environment 和 PropertySource 抽象保持同步, 它们非常适合Spring应用程序,但是可以与任何语言中运行的应用程序一起使用。当应用程序在部署管道中从一个开发到测试直至进入生产时,您可以管理这些环境之间的配置,并确保应用程序在迁移时具有它们需要运行的所有内容。服务器存储后端的默认实现使用git,因此它很容易支持标记版本的配置环境,并且能够被管理内容的各种工具访问。很容易添加替代的实现,并用Spring配置将它们插入。
Spring Cloud Config 包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。Spring cloud使用git或svn存放配置文件,默认情况下使用git。
2、Nacos替换Config Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config。通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
(1)应用场景
在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。
如果微服务架构中没有使用统一配置中心时,所存在的问题:
配置文件分散在各个项目里,不方便维护配置内容安全与权限更新配置后,项目需要重启 nacos配置中心:系统配置的集中管理(编辑、存储、分发)、动态更新不重启、回滚配置(变更管理、历史版本管理、变更审计)等所有与配置相关的活动。
二、读取Nacos配置中心的配置文件 1、在Nacos创建统一配置文件 (1)启动Nacos服务 (2)点进入Nacos管理页面,默认用户名和密码nacos Nacos
点击 配置列表,点击右边 + 号,进行配置文件创建
(3)输入配置信息 a)Data ID 的完整规则格式如下
p r e f i x − {prefix}- prefix−{spring.profiles.active}.${file-extension}
prefix 服务名称:默认为所属工程配置spring.application.name 的值(即:nacos-provider),也可以通过配置项 spring.
App Store
前几期教长给同学们讲到修改 DNS 并不能解决 App Store 无法下载应用的问题,但也并未给出更好的解决办法,但教长是那种吊胃口的人吗,显然不是,琢磨了近两天,终于看到点苗头。
* 修改 DNS 为微软的 4.2.2.2 后,虽然可以勉强登录 Apple ID 和 载入商店页面,但下载应用实在够呛,不是可行之法,毕竟各位进 App Store 都是为了下载应用,而不是看首页内容。
苗 头 若遇到 App Store 无法加载内容或 Apple ID 登录不了的情况,无需在 WiFi 中修改 DNS,具体方法见以下步骤:
❶ 首先关闭 WiFi,将网络切换到蜂窝移动网,然后重启 App Store,再次进入后看是否能够正常使用。
* 如果你是 iOS 9 等老系统,可以点击商店下方的「搜索」等任意按钮 10 次即可强制刷新,比重启应用更好使。
❷ 如果上一步操作完成后,依然无法正常使用,我们可以打开「设置」➫「Safari 浏览器」,然后找到下方的清除历史记录,点击清除后,再次重启商店后进入查看。
❸ 上一步基本可以解决 95%,如果还不行,可以在设置中退出 Apple ID 后重登,这样成功率能达到 99%。
缘 由 是的,这也是教长才发现的,不仅企业证书,原来 App Store 商店也与 Safari 浏览器也有暧昧关系,看来 Safari 表面上是浏览器,背地里却多得是不为人知的秘密㊙️。
注 意 ◎ 请将 WiFi 的 DNS 修改为路由器自动获取的,如何修改?你可能需要查看下方这篇文章:
产品介绍
中国电信“云中继”业务是面向政企客户推出的新型中继产品。有电话机器人,VOS线路问题或要演示站AI技术支持,外呼中心搭建找博主。VX_ID:3307623172.通过集团能力开放平台对传统话音专线进行云化,对全国范围内的中继进行一点集约管理和呼叫接续。
使用场景
全国中继一点汇接
呼叫中心集中的政企客户在全国范围内开展服务、营销等合规业务时,从集中呼叫中心发出的外呼主叫为呼叫中心所在地中继号码。为提升被呼叫用户的感知,希望主叫显示用户所在地的固定号码。签约云中继业务后,可实现企业外呼平台中继一点对接集团能力开放平台,通过集团能力开放平台连接全国中继。
场景需求:客户呼叫中心所在本地网和落地本地网均需开通云中继业务,呼叫中心云中继需实装,落地本地网中继不需要实装。客户需在呼叫中心所在本地网受理“云中继(主叫侧,已开通实装中继)”,在落地本地网受理“云中继(落地侧,新开通非实装中继)”,业务单式详见附件1。
中继外呼集中管控
(1)为落实国家打击通信诈骗重点工作,政府部门希望能够一点管控实体中继号码的外呼控制,实体中继签约云中继业务后,所有的外呼话务均路由至集团能力开放平台,实现中继号码的集中一点管控。以此实现外呼时间、呼叫频次、黑白名单等集中控制功能。便于客户满足国家监管部门对中继外呼类业务的集中管控要求,规范语音市场。
(2)大型跨域企业客户往往具有众多全国分支机构,需要集团一点对全国的中继呼叫进行控制,签约云中继业务后可以将分散在全国各地中继的呼叫路由至集团能力开放平台进行一点管控。
场景需求:客户呼叫中心所在本地网需开通云中继业务,呼叫中心云中继需实装。客户需在呼叫中心所在本地网受理“云中继(主叫侧,已开通实装中继)”,并选择所需控制功能,业务单式详见附件1。
业务功能
全国中继一点汇接
企业呼叫中心外呼所在地必须实装中继,被叫落地侧需新开通非实装中继。
通过集团能力开放平台,将企业外呼侧的已开通实装中继与全国各地的新开通非实装中继进行云化并连接。政企客户通过实装中继外呼全国非实装中继,显示被叫落地侧中继码号,回拨该码号可连接至外呼时的实装中继。
中继外呼集中管控
针对已开通的实装中继。当企业使用该中继外呼时,将话务路由至集团能力开放平台,实现中继的云化管理。
(1)外呼频次控制
实现同一号码(即云(虚)中继即)外呼时的频次限制。
实现同一企业名下所有中继号码对同一被叫用户外呼的频次限制。
(2)外呼流量控制
按照中继受理时中继最大并发数控制中继号码的外呼并发量。
按照客户指定的允许/禁止呼叫时段,控制中继号码相应的可呼叫时段。
(3)外呼黑名单控制
根据用户要求,限制特定号码拨打该用户与解除限制。
根据政府、企业要求,限制特定号码外呼与解除限制。
呼叫接续、呼叫控制配置
针对政企客户对于云中继呼叫接续号码关系绑定、呼叫控制策略等细节需求,平台将提供统一的门户界面,供客户选择设置。
可以支持的中继线路类型 传统PRI中继(也叫PRA,ISDN,30B+D)、sip中继均支持云中继业务。每个省中继业务不同,具体各省实装中继情况可咨询各省中继业务负责人;如若开通云中继业务需要有至少一根实装中继提供给平台对应中继号码。
说明:
1.云中继不支持外呼国际号码;
2.实装中继与云(虚)中继分别计费;
数字中继台就是语音传输线路,有电话机器人,VOS线路问题或要演示站AI技术支持,外呼中心搭建找博主。VX_ID:3307623172是利用数字来传输信号,提供永久或半永久的通信通道,数字中继作为固定的一种连接,能够保持传输速度不变,同时接通多个号码且不占线,比如大家熟悉的呼叫中心,呼叫一天24小时基本都会有电话呼入,因此需要由良好的中继系统,呼叫中心的中继线路由模拟中继线、数字中继线,及IMS线路和网络电话线路共同组成,下面详细介绍。
一、数字中继台是什么
1、数字中继是利用数字信道传输数据信号的数据传输网。它的主要作用是向用户提供永久性,和半永久性连接的数字数据传输信道。既可用于计算机之间的通信,也可用于传送数字化传真,数字话音,数字图像信号或其它数字化信号。
2、永久性连接的数字数据传输信道是指用户间建立固定连接,传输速率不变的独占带宽电路。网络经营者向广大用户提供了灵活方便的数字电路出租业务,供各行业构成自己的专用网。数字中继又分为PRI(30B+D、2B+D)、E1、T1、ISDN。
3、数字中继线在国内一般指30B+D,在作为语音传输线路的情况下,是指电信运营商提供的:只有一个号码30路通道的一种电信语音通讯业务(当30个客户在同一时刻打这个号码时,能在同时接通,不会占线)。
二、呼叫中心使用的中继线路有哪些
1、模拟中继线(模拟电话线):即家庭常用的固定电话线路,一条线,对应一个号码。一般坐席比较少的呼叫中心可以采用模拟中继线,假如你公司的呼叫中心有10个人要用电话,那就需要申请10根线。
2、数字中继线(E1线):也叫E1线、ISDN、30B+D,一根E1线路,能同时支持30路通话,相当于普通的30路模拟线路。相当于把30根普通电话线,整成一根线。这种线路在呼叫中心中用得最广,因为一根E1线可以同时支持30路通话。
3、IMS线路:IMS线路是运营商新推的一种,基于 SIP协议注册核心网的线路。SIP协议是互联网协议,不是电信专家制定的。也不是为运营商制定的。它基于SIP,与接入无关,符合网络向多种终端多种接入统一控制核心网多种应用的网络体系结构演变的发展方向,使得多种业务能同时进行交互,以形成一个更加灵活的通信平台。
4、VOIP线路(网络电话线路):简而言之就是将模拟信号数字化,以数据封包的形式在IP网络上做实时传递。随着这两年国家对电信诈骗的严厉打击,对IP线路的管控也是越来越严了。所以VOIP线路申请也是越来越难了。
Chrome更改安装位置先正常安装,之后按更改操作步骤就可以啦
chrome浏览器安装 去网上下载谷歌浏览器的安装包,然后进行安装,等待安装结束。
https://www.google.cn/chrome/
这个官网安装的是繁体字哈,你要在设置里点击高级中的语言,之后添加语音中的中文(简体)[我的是已经添加过了],最后更改使用中文简体就可以啦。
Chrome浏览器更改安装位置 正常安装之后。。。
一、找到安装路径 在桌面的谷歌浏览器快捷方式上右键打开文件所在位置,如图所示。
二、移动安装文件夹 找到Google文件夹,将其移动到要更改的位置(这里放到D盘根目录)。
但我们发现浏览器快捷方式现在是打不开的(windows10版本家庭版是可以哒不需要第三步了,因为windows10版本家庭版无法使用mklink命令,本人直接移动Google文件夹,就可以啦)
三、创建符号链接 以管理员身份打开命令提示符,输入mklink "C:\Program Files (x86)\Google" "D:\Google"(前面的引号里是默认安装位置,后面是移动之后的位置,注意命令里面的空格)。
注:关于以管理员身份打开 cmd ,应该是搜索 cmd ,右键,以管理员身份运行才是正确的管理员身份打开的方式。
备注:
mklink是windows系统下创建符号链接和硬链接的命令工具,它是一个很好的解决文件系统问题的工具。使用它需要管理员权限。win10管理员无法使用mklink的问题
一、Spring Security介绍 1、框架介绍 Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。一般来说,Web 应用的安全性包括**用户认证(Authentication)和用户授权(Authorization)**两个部分。
(1)用户认证指的是:验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。
(进入用户登录时候,输入用户名和密码,查询数据库,输入用户名和密码是否正确,如果正确的话,认证成功了)
(2)用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。
(登录了系统,登录用户可能是不同的角色,比如现在登录的用户是管理员,管理员操作所有功能,比如登录用户普通用户,操作功能肯定比管理员少很多)
Spring Security本质上就是过滤器Filter,对请求进行过滤
(1)如果是基于Session,那么Spring-security会对cookie里的sessionid进行解析,找到服务器存储的sesion信息,然后判断当前用户是否符合请求的要求。
(2)如果是token,则是解析出token,然后将当前请求加入到Spring-security管理的权限信息中去。
2、认证与授权实现思路 如果系统的模块众多,每个模块都需要就行授权与认证,所以我们选择基于token的形式进行授权与认证。
1、用户根据用户名密码认证成功,然后获取当前用户角色的一系列权限值
2、并以用户名为key,权限列表为value的形式存入redis缓存中
3、根据用户名相关信息生成token返回
4、浏览器将token记录到cookie中,每次调用api接口都默认将token携带到header请求头中
5、Spring-security解析header头获取token信息,解析token获取当前用户名
6、根据用户名就可以从redis中获取权限列表,这样Spring-security就能够判断当前请求是否有权限访问
二、 整合Spring Security 1、在common下创建spring_security模块 2、在spring_security引入相关依赖 <dependencies> <dependency> <groupId>com.atguigu</groupId> <artifactId>common_utils</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- Spring Security依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> </dependency> </dependencies> 3、复制工具类到common_utils 3、spring security核心代码 3.1、创建spring security核心配置类—TokenWebSecurityConfig Spring Security的核心配置就是继承WebSecurityConfigurerAdapter并注解**@EnableWebSecurity**的配置。
这个配置指明了用户名密码的处理方式、请求路径的开合、登录登出控制等和安全相关的配置
package com.atguigu.serurity.config; /** * <p> * Security配置类 * </p> * * @author qy * @since 2019-11-18 */ @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class TokenWebSecurityConfig extends WebSecurityConfigurerAdapter { private UserDetailsService userDetailsService; private TokenManager tokenManager; private DefaultPasswordEncoder defaultPasswordEncoder; private RedisTemplate redisTemplate; @Autowired public TokenWebSecurityConfig(UserDetailsService userDetailsService, DefaultPasswordEncoder defaultPasswordEncoder, TokenManager tokenManager, RedisTemplate redisTemplate) { this.
展开全部
一、可能是由2113于病毒死5261机
方法:确定是否由于病毒死机,找一4102张干净(确信无病毒)的系1653统盘,从A驱动舒上启动电脑,检查此时打印机和主机能否联机。如果正常联机,估计这种故障是由攻击硬件设备性能的某种病毒所致,可运行Scan. Kill, CPAV等反病毒软件进行杀毒处理,即可排除故障。
二、打印口地址设置是否正确
方法:检查打印口地址设置是否正确,如果从A驱启动后仍不能联机,可检查打印口地址设里是否发生了变化。方法是再次启动机器。进入CMOS SETUP程序,查看打印机井行通信口LPTI的设置状况。其正常设置应为Enable,并行口地址位378H,如有改变,进行更正即可。
三、打印机连接电缆接口是否松动、脱落
方法:检查打印机数据通信连接情况,检查打印机连接电缆接口是否松动、脱落。如果条件具备的话.可更换打印机连接电缆,或者将打印机连接到另一台电脑上进行测试。完成上述几个步骤的检查后,如果打印机还不能与主机相连,则应考虑打印机本身的硬件故障。
四、打印机处于暂停打印状态
方法:在“打印机”窗口,右键单击在用的打印机图标,然后单击以清除“暂停打印”选项前的对号“√”。
五、磁盘可用空间低于10MB
如果可用硬盘空间小于10MB(一般指C盘),必须释放更多的空间才能完成打印任务。这时,请单击“磁盘清理”按钮,然后在“要删除的文件”列表框中,选中要删除的文件类型,单击“确定”按钮。
扩展资料:
打印机共享常见问题处理:
1、打印机和PC连接正常,本地打印OK
这是打印机共享的最基础条件,如果出现问题,请从打印机、数据线、驱动程序等方面去排查。如果以上都OK,则可能是连接打印机的PC系统服务或文件缓的原因,可以用我的“打印任务一键清除”去试试。
2、连接打印机的PC能被其他PC访问共享
首先确保连接打印机的PC能被局域网中其他PC打开访问。如果不行,可以在连接打印机的PC上运行我的“局域网共享一键修复”。一般选择“简单共享”,根据提示修复并重启系统。
此时,在其他PC上,点击“开始-运行”,输入“\\连接打印机PC的IP或计算机名”,按下回车,这时应该可以看到共享的打印机了,双击打印机图标添加为默认打印机即可。
注意了:因为局域网中PC的IP地址有些是自动获取的,该方式如果设置DHCP周期较短的话,很可能在PC重启后IP会变化,造成重启系统就不能共享打印的问题。强烈建议大家,连接打印机那台PC的IP要手动固定,或者通过添加该PC的计算机名来添加它共享的打印机。
3、同款打印机在不同系统会安装不同的驱动,即使都是Windows7系统,32位和64位的打印机驱动往往也不一样。比如连接打印机的PC是32位XP,而另一台PC是64位Win7,此时win7这台PC就算能访问xp共享,却不能直接添加共享的打印机,就是因为驱动不兼容的原因,解决起来有两个思路。
思路一:给不同系统的PC单独去下载安装对应的打印机驱动。然后再去添加共享的打印机就没有问题了。这个思路安全可靠,不存在任何兼容或冲突,唯一的不足就是操作步骤多一些。
思路二:在连接打印机的PC上同时安装多款驱动。
一、图像分类 识别图像中存在的内容,如下图,有人(person)、树(tree)、草地(grass)、天空(sky),只知道有没有这一类东西就行。
二、目标检测 识别图像中存在的内容和检测其位置,如下图,以识别和检测人(person)为例,可以分开不同的人并给出位置,但不能给出准确的与之对应的像素,也不用检测处图像中所有的类型。
三、语义分割 对图像中的每个像素打上类别标签,如下图,把图像分为人(红色)、树木(深绿)、草地(浅绿)、天空(蓝色)标签。可以给出每一类对应的准确像素,但是不能把同一类型不同个体区分开。
四、实例分割 目标检测和语义分割的结合,在图像中将目标检测出来(目标检测),然后对目标每个像素打上标签(语义分割),不需要将图像中所有像素打上标签。对比上图、下图,如以人(person)为目标,语义分割不区分属于相同类别的不同实例(所有人都标为红色),实例分割区分同类的不同实例(使用不同颜色区分不同的人)
五、全景分割 语义分割和实例分割的结合,即要对所有目标都检测出来,又要区分出同个类别中的不同实例,图像中所有图像都要打上标签。对比上图、下图,实例分割只对图像中的目标(如上图中的人)进行检测和按像素分割,区分不同实例(使用不同颜色),而全景分割是对图中的所有物体包括背景都要进行检测和分割,区分不同实例(使用不同颜色)
参考: https://my.oschina.net/u/876354/blog/3055850
unity2019导入leapmotion插件显示SpatialTracking在unity Engine中缺少相应的头文件
1.问题描述:
2.问题解决方法:
(1)
(2)
(3)插入这个插件
(4)问题就可以解决了
注:2019将很多插件需要自己选择插入。如使用vuforia时需要导入
仅供学习参考;如有错误联系改正;欢迎交流;
先放结果
seadas的linux版本功能齐全,这里给出seadas linux版的安装教程,以及ocssw模块的安装
主要分为3个大步骤:
1.安装虚拟机
2.安装ubuntu
3.安装seadas及ocssw模块
由于
考虑到网络原因,本教程将在完全不用翻墙的情况下进行,我本人已经单独下载好了安装所需要的所有的组件,上传到百度云:
链接:https://pan.baidu.com/s/1OdxUaTHz1sICu_ocaskbpg 提取码:sdas (如果链接失效,请联系wechat-ID: MathematicianSY)
如果想自行尝试手动安装,我把安装的.py文件上传到这里(下载百度云的不用下载这个):
https://download.csdn.net/download/aiwei169/13009351
最好使用我提供的组件,由于官网给的ocssw_install.py有许多错误,许多同学自己手动安装的时候经常报错,我修改了很多次代码才使它运行成功,你们自行尝试的话可能会遇到很多报错,所以建议大家使用修改好的这一份。
安装虚拟机,硬盘50G
安装ubuntu
更新
重启
在桌面右键,打开控制台
依次执行:
sudo apt-get install gcc
sudo apt-get install git
sudo apt-get install curl
sudo apt-get install wget
sudo apt-get remove openjdk*
sudo apt-get install vim
sudo add-apt-repository ppa:ts.sch.gr/ppa
sudo apt-get update
sudo apt-get install oracle-java8-installer
sudo apt-get install libcanberra-gtk*
中间让你按Y就按Y,让你Enter就Enter,让你ok就ok,碰到yes和no就选yes
最后检查一下java有没有装好:java -version
Sudo sh seadas安装包路径
然后会跳出这个界面:
此时,不要点击next,打开安装包所在的文件夹,发现多了一个文件夹,带锁
右键这个文件夹,点击properties,复制parent folder
一.数据类型 我们对数据类型的了解可以让我们在设计表的时候避免不必要的空间浪费。
在MySQL中的数据类型大概可分为四类:
1)数值数据类型
2)日期时间数据类型
3)文本字符串数据类型
4)二进制字符串数据类型
下面一一介绍它们的特性:
1.数值数据类型
1)整数型数据类型
类型名称字节数TINYINT1字节SMALLINT2字节MEDIUMINT3字节INT4字节BIGINT8字节 2)浮点数数据类型
类型名称字节数FLOAT4字节DOUBLE8字节DECIMAL(M,D)M+2字节 其中,前面两个好理解,最后一个DECIMAL类型不同于前两个,它实际上是以串存放的,DECIMAL
的有效取值范围由M和D的值决定,前面的M表示存储空间,后面的D表示精度,例如:
不指定时默认为(10,0)
2.日期与时间类型
类型名称日期范围YEAR1901~2155 (1字节)TIME-838:59:59~828:59:59(3字节)DATE1000-01-01~9999-12-3(3字节)DATETIME1000-01-01 00:00:00~9999-12-31 23:59:59 (8字节)TIMESTAMP1970-01-01 00:00:01~2038-01-19 03:14:07 (4字节) 3.文本字符串数据类型
类型名称说明CHAR(M)M个字节 1<=M<=255VARCHAR(M)L+1字节(L为实际字符串长度),L<=M 1<=M<=225TINYTEXTL+1字节 ,L<2^8TEXTL+2字节 ,L<2^16MEDIUMTEXTL+3字节,L<2^24LONGTEXTL+4字节,L<2^32ENUM1或2个字节,取决于枚举值的数量SET1,2,3,4,8字节,取决于集合成员数量 下面详细学习:
1)CHAR与VARCHAR类型
CHAR(M)为为固定长度字符串,当插入的字符串长度不够时,会以空格填充,被检索时,会自动删除空格。
VARCHAR(M)为长度可变的字符串,M表示最大长度,当插入的字符串长度为L时,会存储L个字符串和一个字符串结束字符,故为L+1个
2)TEXT类型
TEXT列保存非二进制的长字符串,如文章内容。 当保存或查询TEXT列的值时,不会删除尾部空格。
3)ENUM类型
ENUM是一个字符串对象,其值为表创建时在列规定中枚举的一列值:
字段名 ENUM('value1','value2','value3',...,'valueN')//最多65535个 valueN值枚举列表中的第n个值,ENUM类型的字段在取值时,只能在指定的枚举列表中取,而且一次只能取一次,如果创建的成员中有空格时,其尾部的空格将自动被删除,ENUM值在内部用整数表示,每个枚举值均有一个索引值,从1开始,例如:
4)SET类型
SET是一个字符串对象,可以有零或多个值,SET列最多可以有64个成员,其值为表创建时规定的一列值:
SET ('value1','value2','value2',...,'valueN') 与ENUM相同,SET值在内部用整数表示,列表中每一个值都有一个索引编号。
与ENUM不同,SET类型的列可从定义的列值中选择多个字符的联合,如果插入SET字段中列值有重复,那么MySQL会自动删除重复的值
使用实例:
注意:对于set来说,如果插入的值为重复的,则只取一个,如果插入了不按顺序排列值,则自动按顺序插入。
4.二进制字符串类型
类型名称说明BIT(M)位字段类型 约(M+7)/8字节BINARY(M)固定长度二进制字符串 M字节VARBINARY(M)可变长度二进制字符串 M+1字节TINYBLOB(M)非常小的BLOB L+1字节,L<2^8BLOB(M)小BLOB L+2字节 L<2^16MEDIUMBLOB(M)中等大小的BLOB L+3字节,L<2^24LONGBLOB(M)大BLOB L+4字节 ,L<2^32 BLOB 数据类型以随机存取块(称为智能大对象空间)的形式存储任何种类的二进制数据。二进制数据通常由已保存的电子表格、程序装入模块和数字化声音模式等等组成。数据库服务器不会对 BLOB 列的内容进行解释。
一、出现问题 当我想为我的游戏添加背景音乐并让它循环播放时,我采取的方式是写一个bgmusic类(文章末尾我会给出没有问题的bgmusic的具体实现),它继承自QThread,并重写其中的run方法。至于这个类的使用,就是在需要播放背景音乐的地方直接new出一个对象,调用其start方法即可。
普遍的做法(也是我刚开始出错的做法)如下代码所示:
QMediaPlaylist *playlist = new QMediaPlaylist(); playlist->addMedia(QUrl("qrc:/res/bg-Music.mp3")); // 请关注这里,只添加了一个音频 playlist->setPlaybackMode(QMediaPlaylist::Loop); playerlist->setCurrentIndex(0); QMediaPlayer *music = new QMediaPlayer(); music->setPlaylist(playlist); music->play(); 但如果直接这样写的话,当程序播放完背景音乐后,程序便会异常崩溃。
小Tips:请关注资源的路径写法 ,如下图所示。
二、分析问题 经过调试,发现是程序出现段错误,被操作系统异常终止。这个错误是程序中经常出现的一个错误,程序访问了不该访问的地址。
那么,接下来,看qt的官方文档:
setMedia 函数会立即返回,不会等待媒体加载完毕。崩溃的原因应该就是有时加载快,完成了播放正常,有时加载慢未完成,播放就崩溃。
三、解决问题 3.1 针对上述普遍的做法的解决方案 保证QMediaPlaylist对象中添加了多于1个的音频对象
更改后的代码如下:
QMediaPlaylist *playlist = new QMediaPlaylist(); playlist->addMedia(QUrl("qrc:/res/bg-Music.mp3")); playlist->addMedia(QUrl("qrc:/res/bg-Music.mp3")); // 新增加的 playlist->setPlaybackMode(QMediaPlaylist::Loop); playerlist->setCurrentIndex(0); QMediaPlayer *music = new QMediaPlayer(); music->setPlaylist(playlist); music->play(); 3.2针对于不使用QMediaPlaylist,而只是用QMediaPlayer对象实现循环播放的解决方案 要在你写的类中增加一个槽函数去监听QMediaPlayer::mediaStatusChanged信号
四、具体代码 需要说明的是,我将两种解决方案都写在了同一份代码中,并采用的是方案一,代码中我将方案二注释掉了,读者可以根据需要自行选择。
bgmusic.h
#ifndef BGMUSIC_H #define BGMUSIC_H #include <QThread> #include <QMediaPlayer> #include <QMediaPlaylist> class bgmusic : public QThread { Q_OBJECT void run() override; public: bgmusic(); private: QMediaPlayer* player; QMediaPlaylist* playerList; void initStatus(QMediaPlayer::MediaStatus status); // 槽函数 监听QMediaPlayer::mediaStatusChanged信号 }; #endif // BGMUSIC_H bgmusic.
MATLAB绘图干货 作为理工科学生,在写学术论文时,需要很多的配图,毫无疑问,要想写出一篇优秀论文,精美的插图能力是必须的。插图被称作论文的眼睛,起到画龙点睛的作用。所以接下里教大家如何插入高清、优秀的MATLAB图片。(请再也不要用什么QQ、微信截图了,既不清楚,还把MATLAB的大灰边截下来了。)
优秀的插图有以下特点:
图片大小合理,清晰/美观;
坐标轴有标注和单位;
X轴不要有留白,Y轴可以有留白;
有图例、网格;
所有汉字、字母、数字的字体大小合适,一般与正文字体相当或小一号;
同一篇文章内的风格要一致,比如坐标轴与图片边界的距离一致,这样图片显得整齐;
配色是点睛之笔。
常见错误想法:
为何要设置图片的大小,完全可以在Word中缩放呀?
这是因为:在Word中放缩图片会导致图中字体大小、线宽、坐标轴与图片边界的距离等发生变化,导致图片不够清晰美观。
设置图片的大小、分辨率、字体、线宽
你们是不是遇到过,在MATLAB中画出了的图明明很好看,但是保存为图片后再插入到Word中,总是不清晰,不够美观。那是你没有设置正确的 图片的大小、分辨率、字体、线宽。接下来就教你如何设置:文件->导出设置
大小:需要计算得到宽度和高度。
例如A4纸的宽度为21cm,如果左右页边距各为2.5cm,正文的宽度就是16cm。如果页面是单栏,设为宽度14cm,高度8.6cm比较合适(黄金比例0.618)。双栏的话,宽7cm,高4.3cm即可。
分辨率:印刷品一般为300dpi,所以这里设为300
字体:多数论文要求:Times New Roman,字体大小10磅,注意最好不要出现汉字。
线宽,不建议在这里设置,而是差异化的设置线宽。
比如,坐标轴线宽1磅,网格线宽0.5磅,数据的线条线宽1.5或2磅。
完成上述设置后,点击“应用于图窗”,点击导出,可保存为图片。位图建议保存为Tiff格式,矢量图建议保存为emf。
注:1、emf文件可以用Visio打开,“取消组合”后进行二次编辑。
2、推荐大家保存一份.fig文件放在本地,后期还可以进行修改。
总结 1、导出图片时,不要直接使用"文件->另存为",也不要使用"编辑->复制图窗"。
2、可以使用导出设置对图片的大小、分辨率、字体进行设置,不推荐对线宽进行统一设置。因为不同的线型宽度应该不同。
3、图片的宽度应该是经过精心计算后的结果,高度可以设为宽度×0.618。
4、导出图片的格式一般为tiff(位图)、emf(矢量图)。
5、emf格式可以用Visio打开,进行二次编辑。
一、分布式理论 什么是分布式系统?
在《分布式系统原理与范型》一书中有如下定义: "分布式系统是若干独立计算机的集合, 这些计算机对于用户来说就像单个相关系统”;
分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。
分布式系统(distributed system)是建立在网络之上的软件系统。
首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。因为,分布式系统要解决的问题本身就是和单机系统一样的, 而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题。。。
Dubbo文档
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,急需一个治理系统确保架构有条不紊的演进。
在Dubbo的官网文档有这样一张图:http://dubbo.apache.org/zh-cn/
单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
二、RPC 1.什么是RPC?
RPC [Remote Procedure Call]是指远程过程调用,是一种进程间通信方式, 他是一种技术的思想, 而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。
也就是说两台服务器A, B, 一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。为什么要用RPC呢?就是无法在一个进程内, 甚至一个计算机内通过本地调用的方式完成的需求,比如不同的系统间的通讯,甚至不同的组织间的通讯,由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用。RPC就是要像调用本地的函数一样去调远程函数; RPC原理:
步骤解析:
RPC的两个核心:通讯,序列化
三、Dubbo概念 1.什么是dubbo?
Apache Dubbo I'dAbau|是一款高性能、 轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
服务提供者(Provider) : 暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者(Consumer) : 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从
提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
注册中心(Registry) :注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
监控中心(Monitor) :服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
2.zookeeper下载
https://downloads.apache.org/zookeeper/zookeeper-3.5.8/
下载带bin的包,解压后以管理员身份执行/bin包下的zkServer.cmd
首次执行可能会闪退,在下图位置加入pause,就能看到错误信息,一般情况下会出现zoo.cfg找不到的错误,我们在config包下把zoo_sample.cfg复制一份然后改名成zoo.cfg即可正常启动
2.Dubbo-admin
Dubbo本身并不是一个服务软件。它其实就是一个jar包, 能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。
但是为了让用户更好的管理监控众多的Dubbo服务,官方提供了一个可视化的监控程序Dubbo-admin,不过这个监控即使不装也不影响使用。
这里直接我主页资源下的jar包就好了
打开jar包所在位置,然后在路径栏输入cmd打开命令提示符,或者打开命令提示符跳转到jar包位置,输入指令:
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
Dubbo-admin的默认端口号为7001,登录名和密码默认都是root
http://localhost:7001/
一、JDK概述 JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心。
它包含了:
1、 JAVA开发工具(jdk\bin)
2、 基础开发库(jdk\jre\lib\rt.jar)
3、 基础开发库的源码(jdk\src.zip)
二、下载jdk-8u162-Windows-64 与安装 JDK8下载地址
注意:
1、 同时安装多个jdk时需要使用指定环境变量来确认使用的是哪个jdk
2、 安装路径不要有中文或者特殊符号如空格等。最好目录统一
3、 我们也提供了绿色解压版,不需要安装直接解压即可
三、配置环境变量 1、JAVA_HOME 该配置是要配置jdk的安装目录,来明确要使用哪个版本的jdk。
例如:我把jdk安装在了D:\Java\jdk7。配置如下:
2、新建CLASSPATH变量值
变量名:CLASSPATH , 变量值: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)。
3、配置系统环境变量Path,找到path新建输入 %JAVA_HOME%\bin
4、检验cmd java -version
摘要:一、安装pg_stat_statements插件此插件用于统计数据库的资源消耗,分析SQL语句安装流程:cd
一、安装pg_stat_statements插件
此插件用于统计数据库的资源消耗,分析SQL语句
安装流程:
cd */postgresql-11.1/contrib/pg_stat_statements
make
make install
二、加载pg_stat_statements模块
–编辑postgresql.conf文件
vi $PGDATA/postgresql.conf
–修改配置
shared_preload_libraries=‘pg_stat_statements’
track_io_timing = on用于跟踪IO消耗的时间
track_activity_query_size = 1024设置单条SQL的最长长度,超过被截断显示(可选)
三、配置pg_stat_statements采样参数
–在postgresql.conf文件添加
pg_stat_statements.max = 10000 # 在pg_stat_statements中最多保留多少条统计信息
pg_stat_statements.track = all # all - (所有SQL包括函数内嵌套的SQL), top - 直接执行的SQL(函数内的sql不被跟踪), none - (不跟踪)
pg_stat_statements.track_utility = off # 是否跟踪非DML语句 (例如DDL,DCL), on表示跟踪, off表示不跟踪
pg_stat_statements.save = on # 重启后是否保留统计信息
修改完postgresql.conf文件后,重启数据库restart
pg_ctl —D $PGDATA restart
四、创建pg_stat_statements extension
postgres=# create extension pg_stat_statements;
CREATE EXTENSION
postgres=#
五、分析SQL
一、Canal介绍 1、应用场景 在前面的统计分析功能中,我们采取了服务调用获取统计数据,这样耦合度高,效率相对较低,目前我采取另一种实现方式,通过实时同步数据库表的方式实现,例如我们要统计每天注册与登录人数,我们只需把会员表同步到统计库中,实现本地统计就可以了,这样效率更高,耦合度更低,Canal就是一个很好的数据库同步工具。canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL。
2、Canal环境搭建 canal的原理是基于mysql binlog技术,所以这里一定需要开启mysql的binlog写入功能
开启mysql服务: service mysql start (或者 systemctl start mysqld.service)
(2.1)检查binlog功能是否有开启
(2.2)如果显示状态为OFF表示该功能未开启,开启binlog功能
1,修改 mysql 的配置文件 my.cnf vi /etc/my.cnf 追加内容: log-bin=mysql-bin #binlog文件名 binlog_format=ROW #选择row模式 server_id=1 #mysql实例id,不能和canal的slaveId重复 2,重启 mysql: service mysql restart 3,登录 mysql 客户端,查看 log_bin 变量 mysql> show variables like 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | ON| +---------------+-------+ 1 row in set (0.00 sec) ———————————————— 如果显示状态为ON表示该功能已开启 (2.3)在mysql里面添加以下的相关用户和权限,方便远程访问(加%)
CREATE USER 'canal'@'%' IDENTIFIED BY 'canal'; GRANT SHOW VIEW, SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.
描述 输出两个整数的和
输入 第1行是一个正整数n,表示测试样例的数量。
从第2~第n+1行,每行为一组测试数据,包含两个整数,用空格相隔。
输出 针对每行测试数据,输出这行两个整数的和,以换行符相隔。
样例输入 复制样例 2
1 2
3 4
样例输出 3
7
HINT 每输入一行案例,就要输出一行结果,不能都输入完再输出。参考代码如下
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++) //这行也可以写成while(n--)
{
int a, b;
cin >> a >> b;
cout << a + b << endl;
}
return 0;
}
解:
为了顺序完整,这个还是发一下QWQ
#include<iostream> #include<cmath> using namespace std; int main() { int n; cin>>n; for(int i=0;i<n;i++) { int a,b; cin>>a>>b; cout<<a+b<<endl; } return 0; }
ubuntu16.04内核版本降低(回退到之前版本)
打开终端,输入
grep menuentry /boot/grub/grub.cfg 可以看到很多已经下载的内核版本。我好久没有重启电脑了,发现它偷偷下载了这么多内核,无语。。。
电脑当前还是使用的最老的(截图中最低部的版本),一旦重启电脑,就会默认使用最新的版本(截图中最上面的版本)。
注意:这会导致驱动啥的使用不了,超级坑!!!
现在需要把内核设置为:默认启用最老版本(截图中最下面版本)。
打开grub文件。 sudo nano /etc/default/grub 把修改上面的GRUB_DEFAULT的值修改为第一张截图中内核的版本(倒数第二行,红框框出的部分)。
然后保存退出。之后我们使用命令,使修改内容生效: sudo update-grub 可以看到,刚刚的修改的“值”,报Warning,然后给你推荐了“新的值”,即上图红色框中字符串,将它复制出来,替换刚刚修改的值。 之后我们第二次使用命令,使修改内容生效: sudo update-grub 完成!
参考:
1.该文中的方法4
2.该文中的后半部分
最近在使用Ubutnu18.04,我突然发现没有rc.local文件了,原来是因为在新版本全部统一使用systemctl来管理服务了,开机自启动服务也不例外。
打开rc-local.service文件 sudo vim /lib/systemd/system/rc-local.service 打开的文件中,可以看到已经存在[Unit]、[Service]模块。在尾部,添加[install]参数,并保存退出。 [Install] WantedBy=multi-user.target Alias=rc-local.service 创建rc.local文件 touch /etc/rc.local 将下列内容复制进rc.local文件,我的示例中添加了两个需要启动的“程序” #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing.
文章目录 1. 自带的analyzer1. 主要analyzer的解析1. standard analyzer2. simple analyzer3. whitespace analyzer4. stop analyzer5. keyword analyzer: 会将所有的输入当做一个token输出6. pattern analyzer7. language analyzer: es提供了一些语言识别的analyzer8. fingerprint analyzer 2. analyze API使用3. 自定义一个analyzer4. 实际业务场景实现 1. 自带的analyzer standard analyzer: 按照unicode 定义的word boundary进行切分,会移除大部分的标点符号,并且将token转成小写,同时支持自定义一些stop words。simple analyzer: 遇到不是letter的char就切词,并且将token转化为小写。whitespace analyzer: 遇到空格时切词,不会进行小写转换stop analyzer: 在simple analyzer的基础上增加了stop words的功能keyword analyzer: 会将所有的输入当做一个token输出pattern analyzer: 使用正则匹配的值作为切分点得到token,支持lowercase convert 和 stop wordslanguage analyzer: es提供了一些语言识别的analyzerfingerprint analyzer: 会将输入进行lowercase,sorted,deduplicated 然后连接成一个token输出 1. 主要analyzer的解析 1. standard analyzer 按照unicode 定义的word boundary进行切分,会移除大部分的标点符号,并且将token转成小写,同时支持自定义一些stop words。
1.配置信息
max_token_length: token的最大长度,默认为255
stopwords: 停用词,可以引用一些预定义的(比如_english_,参考stop token filter 可以看到这些预定义的信息 这里),也可以直接在这里定一个一个word list.
目录 1.前言
2.程序安装
3.处理事例
建了一个QQ群,大家可以在里边聊聊水色遥感数据下载和数据处理方面的事情:1087024529
1.前言 最近,有小伙伴询问我关于使用SeaDas-OCSSW对OLCI和MSI进行大气校正的步骤。起初我还十分震惊,因为下边这张图,在安装OCSSW支持的传感器的GUI界面中,没有显示OLCI和MSI传感器,所以我一直以为SeaDas-OCSSW无法处理OLCI和MSI。
但后来证明,我错了。其实OCSSW提供了对OLCI和MSI的大气校正功能,只是并没有把它放在GUI界面中进行安装,只能使用脚本进行安装.
OCSSW提供的安装说明如下:https://oceandata.sci.gsfc.nasa.gov/ocssw/
接下来,我就演示安装OCSSW对OLCI和MSI的支持程序,以及使用OCSSW对OLCI和MSI进行大气校正。
在这之前,请安装和配置好SeaDas和OCSSW。安装过程:在Ubuntu系统下安装配置SeaDas与问题解决方法总结
2.程序安装 2.1.找到install_ocssw.py脚本的路径。如果之前安装过OCSSW对其他传感器的支持,那么install_ocssw.py的一般在:
/ocssw在你电脑上的路径/scripts/install_ocssw.py 如果之前没有安装过,那么在ocean color官网上下载该脚本。
我的建议是先在OCSSW安装的GUI界面中安装一个传感器的支持模块,这样会方便很多。
2.2.可以在SeaDas的帮助文档中找到install_ocssw.py的说明。如下图所示:
通过该文档,就可以进行安装。在命令行中输入:
python install_ocssw.py的路径 --install-dir=安装路径 --msis2a[后面跟要处理的传感器数据] 例如,这里给一个例子
python install_ocssw.py --install-dir=/home/hyzhao/seadas-7.5.3/ocssw --msis2a --msis2b --olcis3a --olcis3b 等程序运行结束,就安装成功了。
3.处理事例 3.1.安装成功后,我们要想使用OCSSW对OCLI和MSI数据进行大气校正,还得在命令行中进行,GUI界面暂不提供对MSI、OLCI的支持。其实这样也好,在命令行里运行命令,可以方便的进行批处理。
OCSSW的大气校正程序为l2gen。如果你OCSSW的配置成功的话(如何配置见第1部分中提到的博客),在命令行中直接输入l2gen,会出现:
如果没有配置好,就会提示没有该命令的提示。配置过程见:在Ubuntu系统下安装配置SeaDas与问题解决方法总结,这里不再赘述。
3.2.在seadas的帮助中,找到l2gen的帮助文档,可以看到使用命令行调用时需要指定的参数。由于参数过多,我这里不一一介绍,大家仔细阅读说明文档自行设置参数。注意l2gen可以处理很多传感器。不同的传感器,参数设置会有区别。
我这里提供一个例子,使用l2gen处理OLCI数据。在命令行中,我只指定了文件的输入路径和结果输出路径(ifile指定输入路径, ofile指定输出文件路径。输入文件路径选择OLCI的xml文件。处理MSI传感器时,输入文件选择manifest.safe文件):
l2gen ifile=/home/hyzhao/ShareWin/Data/S3A_OL_1_EFR____20190514T020524_20190514T020824_20190515T053120_0179_044_331_2520_LN1_O_NT_002/S3A_OL_1_EFR____20190514T020524_20190514T020824_20190515T053120_0179_044_331_2520_LN1_O_NT_002.SEN3/xfdumanifest.xml ofile=/home/hyzhao/ShareWin/Data/test.nc 等待处理结束,也就完成了对数据的大气校正!
发现一个idea很神奇的功能,每次写一堆算子的时候,先在最后面写一个Action算子过去,然后再从中间开始写transformation算子,这个时候神奇的事情发生了,在每个算子后面会显示出灰色的返回值类型!!!
文章目录 一、数据背景二、数据类型三、功能要求四、SparkCore代码实现4.1 农产品市场个数统计4.2农产品种类统计4.3计算山西省每种农产品的价格波动趋势 五、SparkSQL代码实现六、业务数据 一、数据背景 该数据每日进行采集汇总。数据范围涵盖全国主要省份(港澳台、西藏、海南暂无数据)的180+的大型农产品批发市场,380+的农产品品类(由于季节性和地域性等特点,每日的数据中不一定会涵盖全部的农产品品类)。
二、数据类型 农产品批发市场价格数据products.txt 中文名称 英文名称 数据类型 农产品名称(列1) name string 批发价格(列2) price float 采集时间(列3) craw_time timestamp 批发市场名称(列4) market string 省份(列5) province string 城市(列6) city string 三、功能要求 要求使用分别使用RDD、DataFrame两种方式实现
1、农产品市场个数统计
(省份,蔬菜,1)
1)统计每个省份的农产品市场总数
2)统计没有农产品市场的省份有哪些
2、农产品种类统计
1)根据农产品类型数量,统计排名前 3 名的省份
2)根据农产品类型数量,统计每个省份排名前 3 名的农产品市场
3、价格区间统计,计算山西省每种农产品的价格波动趋势,即计算每天价格均值,并将结果输出到控制台上。
某种农产品的价格均值计算公式:
PAVG = (PM1+PM2+…+PMn-max§-min§)/(N-2)
其中,P 表示价格,Mn 表示 market,即农产品市场。PM1 表示 M1 农产品市场的该产品价格,max§表示价格最大值,min§价格最小值。
四、SparkCore代码实现 4.1 农产品市场个数统计 4.1.1
import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /** * 1)统计每个省份的农产品市场总数 */ object ByRdd_1_1 { private val sc: SparkContext = new SparkContext(new SparkConf().
一、Linux 下使用 nohup
Unix/Linux下一般比如想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。
比如我们要运行weblogic在后台:
./startWebLogic.sh &
但是加入我们很多程序并不象weblogic一样做成守护进程,可能我们的程序只是普通程序而已,一般这种程序使用 &结尾。
但是如果终端关闭,那么程序也会被关闭。
但是为了能够后台运行,那么我们就可以使用nohup这个命令。
比如我们有个startWebLogic.sh需要在后台运行,那么就使用nohup:
nohup ./startWebLogic.sh &
提示:
[~]$ appending output to nohup.out
嗯,证明运行成功,同时把程序运行的输出信息放到当前目录的 nohup.out 文件中去。
nohup 命令
用途:LINUX命令用法,不挂断地运行命令。
语法:nohup Command [ Arg ... ] [ & ]
描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。
在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。
nohup: ignoring input and appending output to `nohup.out' 忽略输入输出,将信息化信息记录到nohup.out文件中。
二、使用Linux重定向解决nohup.out无写权限问题
■场景
执行nohup命令的时候,经常会出现下面这种没有写入权限的错误。
nohup: ignoring input and appending output to `nohup.
1.供电电源
当负载突变时会导致电源线中产生电流尖峰,电流尖峰对电源线上的其他器件会产生较为强烈的电磁干扰。例如,F28335DSP的ePWM模块输出的脉宽调制信号经驱动芯片 驱动光电转换器件,而芯片与DSP使用同一个3.3V的电源电压,当PWM为高电平时,芯片会吸收较大的电流,从而在3.3V电源线上产生电流尖峰,可能会对DSP造成电磁干扰。
以上问题可在DSP供电引脚添加100nF的旁路电容。另外通常在电源线上放置磁珠,将尖峰电流转换成热量散发掉。
2.高频信号线
高频信号线在板上的距离尽可能缩短。另可串联50欧姆电阻,减小尖峰电流
3.时钟振荡器
选择合适的电容进行π型滤波
1、在分页组件中加入ref以控制节点
<el-pagination background layout="prev, pager, next" :page-size="10" :current-page="screenList.pageNo" @current-change="handleCurrentChange" :total="total" ref="pagination"> </el-pagination> 2、设置pagination属性
this.$refs.pagination.internalCurrentPage = this.screenList.pageNo;
一、判断BLOS的两种模式:Legacy和UEFI win+R打开运行,输入msinfo32,查看系统信息,在BIOS模式中如果显示“传统”,表示系统启动方式为Legacy BIOS;如果为UEFI,则显示UEFI。
参考链接:https://www.ithome.com/html/win10/146588.htm
二、UEFI情况下删除Ubuntu 1、下载EasyUEFI软件
软件下载地址:https://www.easyuefi.com/index-us.html
或者百度网盘链接(试用版):https://pan.baidu.com/s/1ONrTG69spnGkCsGpQdN5jg
提取码:7gdr
试用版过期时,4.6版本的破译版:https://pan.baidu.com/s/1KOqf6SuQ-t1FP9i2lhSGWg
提取码:6fe0
EasyUEFI中的Setup.exe是安装文件
然后将x64中的三个文件复制到安装目录的bin目录下
2、打开EasyUEFI(我的是试用版)
选择“管理EFI启动项”
3、选择ubuntu系统,点击删除按钮。
4、重启,可以发现直接就可以进入windows系统。然后删除ubuntu所在的分区(此电脑-》右击”管理“-》存储-》磁盘管理)。【注:恢复分区/EFI分区是安装windows系统时默认安装的】(下图展示的是已经删除过ubuntu的磁盘管理)
UEFI下删除ubuntu的参考博客链接:https://www.cnblogs.com/exciting/p/11430173.html
https://blog.csdn.net/cfqcfqcfqcfqcfq/article/details/54729200
三、Legacy 参考博客链接:https://www.jianshu.com/p/66a092caaa36
此方法是在需要使用的地方加上自定义注解@DataSource
根据注解下这个方法的传参 注意: (规定参数命名)
配置文件yml
spring: datasource: type: com.zaxxer.hikari.HikariDataSource hikari: minimum-idle: 5 maximum-pool-size: 15 auto-commit: true idle-timeout: 30000 pool-name: HikariCP max-lifetime: 1800000 connection-timeout: 30000 ds1: jdbc-url: jdbc:mysql://localhost:3306/pubs?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8 username: root password: 1234 driver-class-name: com.mysql.jdbc.Driver ds2: jdbc-url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8 username: root password: 1234 driver-class-name: com.mysql.jdbc.Driver config配置文件 /** * 配置Druid 多个数据源和 Druid监控Servlet * * 所有的数据源配置都在这里 要添加多个的话 * * */ @Configuration public class DataSourceConfig { private static final Logger log = LoggerFactory.getLogger(DataSourceConfig.class); //数据源一 @Bean(name = "
今天项目中甲方指定了一个以前没用过的文件服务器,捅咕半天,记录一下使用方法。
1.导入依赖 <!-- springboot整合minio --> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>3.0.10</version> </dependency> 2.配置文件 upload: url: http://ip:端口 accessKey: 公钥 secretKey: 密钥 3.controller import com.google.api.client.util.IOUtils; import com.ruoyi.system.domain.Result; import io.minio.MinioClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.util.UUID; /** * @author yhd * @createtime 2020/10/16 11:13 * 文件上传到minio服务器的接口 */ @RestController @RequestMapping("file") public class FileUpLoadController { @Value("${upload.url}") private String url ; @Value("${upload.accessKey}") private String accessKey ; @Value("${upload.secretKey}") private String secretKey ; @PostMapping("
引言: 在堆空间中动态申请内存时,此时长度可以是变量,这种定义方式可根据变量 n 动态申请内存,不会出现存储空间浪费的问题。但是,如果程序执行过程中出现空间不足的情况时,则需要加大存储空间,此时需要进行三个步骤:
新申请一个较大的内存空间将原内存空间的数据全部复制到新申请的内存空间中将原来的堆空间释放
而完成相同的操作,如果采用 STL 标准库,则会简单很多,因为大多数操作细节将不需要程序员关心。 STL的作用便是使程序员可以集中精力去实现程序的功能,而无需再纠结某些细节如何用代码实现。 STL容器: 简单的理解容器,它就是一些模板类的集合,但和普通模板类不同的是,容器中封装的是组织数据的方法(也就是数据结构)。STL 提供有 3 类标准容器,分别是序列容器、排序容器和哈希容器,其中后两类容器有时也统称为关联容器。
序列容器 主要包括 vector 向量容器、list 列表容器以及 deque双端队列容器。之所以被称为序列容器,是因为元素在容器中的位置同元素的值无关,即容器不是排序的。将元素插入容器时,指定在什么位置,元素就会位于什么位置。排序容器 包括 set 集合容器、multiset多重集合容器、map映射容器以及 multimap多重映射容器。排序容器中的元素默认是由小到大排序好的,即便是插入元素,元素也会插入到适当位置。所以关联容器在查找时具有非常好的性能。哈希容器 C++ 11 新加入 4 种关联式容器,分别是 unordered_set 哈希集合、unordered_multiset哈希多重集合、unordered_map 哈希映射以及 unordered_multimap哈希多重映射。和排序容器不同,哈希容器中的元素是未排序的,元素的位置由哈希函数确定。 STL迭代器 简单来讲,迭代器和 C++ 的指针非常类似,它可以是需要的任意类型,通过迭代器可以指向容器中的某个元素,如果需要,还可以对该元素进行读/写操作。
前向迭代器(forward iterator)
假设 p 是一个前向迭代器,则 p 支持 ++p,p++,*p 操作,还可以被复制或赋值,可以用 == 和 != 运算符进行比较。此外,两个正向迭代器可以互相赋值。
双向迭代器(bidirectional iterator)
双向迭代器具有正向迭代器的全部功能,除此之外,假设 p 是一个双向迭代器,则还可以进行 --p 或者 p-- 操作(即一次向后移动一个位置)。
随机访问迭代器(random access iterator)
随机访问迭代器具有双向迭代器的全部功能。除此之外,假设 p 是一个随机访问迭代器,i 是一个整型变量或常量,则 p 还支持以下操作:
p+=i:使得 p 往后移动 i 个元素。
官方教程指路
创建新的job(快捷键:N)在该job中,创建新的workspace(快捷键:N)下载数据集(约8G)。命令:cryosparcm downloadtest,然后解压tar -xf empiar_10025_subset.tar。导入Movies。运动矫正。CTF矫正。颗粒挑选(先手动)
box size一般设置成颗粒半径的两倍。本例中,在20张图片中挑选出100左右个颗粒。尝试捕捉顶部和侧面视图的多样性。
左键选中颗粒,右键取消选中。可以使用低通滤波器滑块来调整显微照片的显示,和在需要时调整box size。颗粒挑选(基于模板)
二维分类。(这里分成10类。)然后在分类结果里选择最清晰可靠的几个类(这里分别选择了顶部和侧面两个较清晰的类)。
然后基于这两个类作为模板,进行自动颗粒挑选。检查挑选结果。
直方图显示了所有拾取位置的统计信息,包括假阳性和真颗粒。真实粒子通常具有较高的NCC评分(表示与模板的形状一致)和较高的功率评分(表示信号的存在)。功率太小的挑选大概率是冰(背景),功率很大的可能是碳边缘、冰晶和堆积的颗粒。提取颗粒。从显微照片中提取颗粒。二维分类。大约分成50类(≈15min)。选择二维分类结果。从头开始的重建。均匀细化。锐化。
需要输入B-Factor,要是负值。得到map。检查流程。tree视图。
关闭防火墙
selinux
主节点
vi /etc/my.cnf [mysqld] server-id=204 #建议使用本机IP地址末尾 log-bin 重启 systemctl restart mariadb 在masher myslq创建用户
查看二进制文件和位置 mysql> show master logs; +-------------------+-----------+ | Log_name | File_size | +-------------------+-----------+ | igcllq-bin.000001 | 177 | | igcllq-bin.000002 | 414 | +-------------------+-----------+ 2 rows in set (0.00 sec) 创建复制用户 MariaDB [(none)]> grant replication slave on *.* to repluser@'10.0.0.%' identified by '000000'; #repluser是用户名 #000000 是密码 #10.0.0.% 10网段都可以登录 从节点
修改配置文件
vi /etc/my.cnf [mysqld] server-id=7 #建议使用本机IP地址末尾 重启 systemctl restart mariadb CHANGE MASTER TO MASTER_HOST='10.
GoogleNews-vectors-negative300.bin文件下载 GoogleNews-vectors-negative300.bin文件下载 下载地址求助 GoogleNews-vectors-negative300.bin文件下载 下载地址 百度云:链接:https://pan.baidu.com/s/1bPai4AqcMIUFNVL0G2ByKw
提取码:knjh
如果有用麻烦点个赞哈~
求助 希望有NLP大神讲一下这个包里面的东西。
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.BlockLocation; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.LocatedFileStatus; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.RemoteIterator; import org.apache.hadoop.io.IOUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.net.URI; import java.net.URISyntaxException; public class hdfs { private final String hdfs_path="hdfs://bigdata01:9000"; private FileSystem fileSystem=null; private Configuration configuration=null; @Before public void setUp() throws URISyntaxException, IOException, InterruptedException { //获取Configuration配置对象 configuration = new Configuration(); //设置副本数 //configuration.
k-近邻算法 算法流程距离计算方法代码实现示例示例1: 在约会网站上使用k-近邻算法1.准备数据:从文本文件中解析数据2.分析数据:使用Matplotlib创建散点图3.准备数据:归一化数值4.测试算法:作为完整程序验证分类器5.使用算法:构建完整可用系统 示例2:手写识别系统1.准备数据:将图像转换为测试向量2.测试算法:使用k-近邻算法识别手写数字 小结 算法流程 1.收集数据
2.计算目标数据与样本数据的距离
3.将计算得到的距离进行递增排序
4.选取与目标数据距离最小的k个样本数据
5.统计前k个样本数据分类出现的频率
5.前k个样本数据值对应的分类出现频率最高的类别则为目标数据的类别
距离计算方法 使用欧式距离公式,计算两个向量点xA和xB之间的距离:
代码实现 from numpy import * import operator # 运算符模块 # 导入数据 def createDataSet(): group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]]) labels = ['A', 'A', 'B', 'B'] return group, labels #k-近邻算法 def classify(inX, dataSet, labels, k): dataSetSize = dataSet.shape[0] # 样本数据集样本数目 diffMat = tile(inX, (dataSetSize, 1)) - dataSet # 将目标数据与每个样本数据做差 sqDiffMat = diffMat ** 2 # 将矩阵每个元素平方 sqDistances = sqDiffMat.
文章转载来自:Dormineered
内容有些词汇翻译不准确,请见谅!!!个人整理不易,包含参数计算内容,更多训练阶段细节会在后期更新。转载请注明
EfficientNets是谷歌大脑的工程师谭明星和首席科学家Quoc V. Le在论文《EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks》中提出。该模型的基础网络架构是通过使用神经网络架构搜索(neural architecture search)设计得到。卷积神经网络模型通常是在已知硬件资源的条件下,进行训练的。当你拥有更好的硬件资源时,可以通过放大网络模型以获得更好的训练结果。为系统的研究模型缩放,谷歌大脑的研究人员针对EfficientNets的基础网络模型提出了一种全新的模型缩放方法,该方法使用简单而高效的复合系数来权衡网络深度、宽度和输入图片分辨率。
通过放大EfficientNets基础模型,获得了一系列EfficientNets模型。该系列模型在效率和准确性上战胜了之前所有的卷积神经网络模型。尤其是EfficientNet-B7在ImageNet数据集上得到了top-1准确率84.4%和top-5准确率97.1%的结果。且它和当时准确率最高的其它模型对比,大小缩小了8.4倍,效率提高了6.1倍。且通过迁移学习,EfficientNets在多个知名数据集上均达到了当时最先进的水平。
EfficientNets网络模型结构
本案例中我们选用EfficientNets系列中的基础网络模型EfficientNet-B0。 当该模型在ImageNet数据集上训练时,其一共包含5330564个参数,其中需要梯度下降来训练的参数有5288548个。不需要训练的参数是Batch Normalization层中的均值和方差共42016个。该网络的核心结构为移动翻转瓶颈卷积(mobile inverted bottleneck convolution,MBConv)模块,该模块还引入了压缩与激发网络(Squeeze-and-Excitation Network,SENet)的注意力思想,SENet在提出时也在ImageNet数据集上达到了当时最高的准确率。
移动翻转瓶颈卷积也是通过神经网络架构搜索得到的,该模块结构与深度分离卷积(depthwise separable convolution)相似,该移动翻转瓶颈卷积首先对输入进行1x1的逐点卷积并根据扩展比例(expand ratio)改变输出通道维度(如扩展比例为3时,会将通道维度提升3倍。但如果扩展比例为1,则直接省略该1x1的逐点卷积和其之后批归一化和激活函数)。接着进行kxk的深度卷积(depthwise convolution)。如果要引入压缩与激发操作,该操作会在深度卷积后进行。再以1x1的逐点卷积结尾恢复原通道维度。最后进行连接失活(drop connect)和输入的跳越连接(skip connection),这一做法源于论文《Deep networks with stochastic depth》,它让模型具有了随机的深度,剪短了模型训练所需的时间,提升了模型性能(注意,在EfficientNets中,只有当相同的移动翻转瓶颈卷积重复出现时,才会进行连接失活和输入的跳越连接,且还会将其中的深度卷积步长变为1),连接失活是一种类似于随机失活(dropout)的操作,并且在模块的开始和结束加入了恒等跳越。注意该模块中的每一个卷积操作后都会进行批归一化,激活函数使用的是Swish激活函数。
移动翻转瓶颈卷积模块中的压缩与激发操作,以下简称SE模块,是一种基于注意力的特征图操作操作,SE模块首先对特征图进行压缩操作,在通道维度方向上进行全局平均池化操作(global average pooling),得到特征图通道维度方向的全局特征。然后对全局特征进行激发操作,使用激活比例(R,该比例为浮点数)乘全局特征维数(C)个1x1的卷积对其进行卷积(原方法使用全连接层),学习各个通道间的关系,再通过sigmoid激活函数得到不同通道的权重,最后乘以原来的特征图得到最终特征。本质上,SE模块是在通道维度上做(注意力)attention或者(门控制)gating操作,这种注意力机制让模型可以更加关注信息量最大的通道特征,而抑制那些不重要的通道特征。另外一点是SE模块是通用的,这意味着其可以嵌入到现有的其它网络架构中。其结构如图1所示,注意在移动翻转瓶颈卷积模块中,与激活比例相乘的是移动翻转瓶颈卷积模块的输入通道维度,而不是模块中深度卷积后的输出通道维度。
图1 压缩与激发模块结构示意图 你已经了解了EfficientNet的核心模块,接下来,我们将进一步了解EfficientNet-B0的结构,它由16个移动翻转瓶颈卷积模块,2个卷积层,1个全局平均池化层和1个分类层构成。其结构如图2所示,图中不同的颜色代表了不同的阶段。
图2 EfficientNet-B0结构图 第一阶段,对输入的224x224x3的图像按顺序进行以下操作得到第一阶段的结果:
卷积(卷积核为32核3×3×3,步长为2×2,填充为“same”即输出的宽和高缩小一半),该卷积运算的输出是一个维度为(112×112×32)的特征图。因该层不含偏置项,故该层需要训练学习的参数共计864(32x3x3x3)个。
批归一化层(Batch Normalization,BN),该层输入为(112×112×32)的特征图,故该层含参数总数为128个(32x4),其中需要训练学习的参数为64个。
Swish激活函数
第一阶段,总计参数128+864=992个,需要训练学习的参数928个。
第二阶段,对前一阶段输出的112x112x32的特征图进行移动翻转瓶颈卷积(扩张比例为1,深度卷积核大小为3x3,核步长为1x1,包含压缩与激发操作,无连接失活和连接跳越),并输出第二阶段的结果:
由于扩张比例为1,故跳过一开始的逐点卷积,直接进行深度卷积(卷积核为32核3×3×3,步长为1×1,填充为“same”即输出的宽和高不变)。深度卷积输出是一个维度为(112×112×32)的特征图。因该层不含偏置项,故该层需要训练学习的参数共计288(32x3x3x1)个。
批归一化层(Batch Normalization,BN),该层输入为(112×112×32)的特征图,故该层含参数总数为128个(32x4),其中需要训练学习的参数为64个。
Swish激活函数。
全局平均池化层(global average pooling),该层在通道维度方向上进行全局平均池化,输出为(1x1x32)的特征图。
卷积(压缩与激发模块中的第一个卷积,卷积核为8核1x1x32,步长为1×1,填充为“same”即输出的宽和高不变),该卷积运算的输出是一个维度为(1×1×8)的特征图。因该层包含偏置项,故该层需要训练学习的参数共计264(8x1x1x32+8)个。
Swish激活函数。
卷积(压缩与激发模块中的第二个卷积,卷积核为32核1x1x8,步长为1×1,填充为“same”即输出的宽和高不变),该卷积运算的的输出是一个维度为(1×1×32)的特征图。因该层包含偏置项,故该层需要训练学习的参数共计288(32x1x1x8+32)个。
Sigmoid激活函数
与步骤3)的结果相乘,得到112x112x32的特征图。
逐点卷积(卷积核为16核1×1×32,步长为1×1,填充为“same”即输出的宽和高不变)该卷积运算的输出是一个维度为(112×112×16)的特征图。因该层不含偏置项,故该层需要训练学习的参数共计512(16x1x1x32)个。
批归一化层(Batch Normalization,BN),该层输入为(112×112×16)的特征图,故该层含参数总数为64个(16x4),其中需要训练学习的参数为32个。
第二阶段,总计参数288+128+264+288+512+64=1544个,需要训练学习的参数1448个。
第三阶段,对前一阶段输出的112x112x16的特征图进行两次移动翻转瓶颈卷积,第一个(扩张比例为6,深度卷积核大小为3x3,核步长为2x2,包含压缩与激发操作,无连接失活核连接跳越),第二个(扩张比例为6,深度卷积核大小为3x3,核步长为1x1,包含压缩与激发操作,有连接失活和连接跳越),并输出第二阶段的结果:
扩张比例为6的逐点卷积(卷积核为96核1×1×16,步长为1×1,填充为“same”即输出的宽和高不变)该卷积运算的输出是一个维度为(112×112×96)的特征图。因该层不含偏置项,故该层需要训练学习的参数共计1536(96x1x1x16)个。
批归一化层(Batch Normalization,BN),该层输入为(112×112×96)的特征图,故该层含参数总数为384个(96x4),其中需要训练学习的参数为192个。
The remote host may not meet VS Code Server's prerequisites for glibc and libstdc++
上面这个错误也是同样的解决办法,
用 vscode 远程实验室服务器好几天了,正正常常,
今天突发这个报错,连不上了
解决:
could not establish connection to "<host name>". The VS Code Server failed to start. · Issue #2805 · microsoft/vscode-remote-release · GitHub
https://software.intel.com/content/www/us/en/develop/documentation/remote-vscode-development-on-linux/top.html
1. 打开VSCode,选择 View -> Command Palette.
2. 输入 remote,
3. 选择 Remote-SSH: Kill VS Code Server on Host...
然后重新连接就可以了,左下角显示绿色 SSH:Linux
MapReduce经典案例实战 实验实现过程 重要知识点:
MapReduce是一种分布式并行编程模型,是Hadoop核心子项目之一,如果已经安装了Hadoop,就不需要另外安装MapReduce。主要的理论知识点:
(1)倒排索引
倒排索引是文档检索系统中最常用的数据结构,被广泛应用于全文搜索引擎。倒排索引主要用来存储某个单词(或词组)在一组文档中的存储位置的映射,提供了可以根据内容来查找文档的方式,而不是根据文档来确定内容,因此称为倒排索引(Inverted Index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(Inverted File)。
(2)数据去重
数据去重主要是为了掌握利用并行化思想来对数据进行有意义的筛选,数据去重指去除重复数据的操作。在大数据开发中,统计大数据集上的多种数据指标,这些复杂的任务数据都会涉及数据去重。
(3)TopN排序
TopN分析法是指从研究对象中按照某一个指标进行倒序或正序排列,取其中所需的N个数据,并对这N个数据进行重点分析的方法。MapReduce的程序可以用Eclipse编译运行或使用命令行编译打包运行,本实验使用Eclipse编译运行MapReduce程序。 实验准备工作:
1、掌握Eclipse以及插件的安装与配置
2、熟悉在Eclipse中操作分布式系统HDFS 中的文件的方法
以上内容前面文章已做:
大数据实验环境准备与配置(1/4)
https://blog.csdn.net/weixin_43640161/article/details/108614907
大数据实验环境准备与配置(2/4)
https://blog.csdn.net/weixin_43640161/article/details/108619802
大数据实验环境准备与配置(3/4)
https://blog.csdn.net/weixin_43640161/article/details/108691921
大数据实验环境准备与配置(第四部分完结)
https://blog.csdn.net/weixin_43640161/article/details/108697510
Hadoop环境配置与测试
https://blog.csdn.net/weixin_43640161/article/details/108745864
分布式文件系统HDFS Shell命令和API编程
https://blog.csdn.net/weixin_43640161/article/details/108879567
MapReduce编程实践
https://blog.csdn.net/weixin_43640161/article/details/108947291
实验一:倒排索引案例实现–请根据理论课案例分析步骤实现具体的倒排索引 假设有file1.txt,file2.txt,file3.txt。它们的内容分别如下:
file1.txt文件内容:MapReduce is simple
file2.txt文件内容:MapReduce is powerful is simple
file3.txt文件内容:Hello MapReduce bye MapReduce
具体步骤如下:
一、在 Eclipse 中创建 MapReduce 项目
点击 File 菜单,选择 New -> Project…:选择 Map/Reduce Project,点击 Next。
填写 Project name 为MapReduceDemo即可,点击 Finish 就创建好了项目。
此时在左侧的 Project Explorer 就能看到刚才建立的项目了。接着右键点击刚创建的 MapReduce项目src,选择 New -> packet,在 Package 处填写 cn.
校招时由于有些公司的题的输入是一个数组,但是没有告知数组的长度,所以在使用hasNext时会形成死循环,退出死循环正常来讲只能在while中加入条件来判断,满足条件后break。有些公司直接没有终止符的提示,但是在做携程的笔试题时给了以“#”为终止符,但是笔试时还是没有弄明白如何处理。在用sc.next()判断是否等于“#”时,会将该输入用来作为判断使用,也就是把输入数据“吞了”,笔试后查了查资料,写了个demo测试了一下在这里做一个记录:
利用hasNext的重载方法:
public class StandardInput { public static void main(String[] args) { Scanner sc = new Scanner(System.in); List<Integer> list = new ArrayList<>(); while(!sc.hasNext("#")){ int a = sc.nextInt(); list.add(a); } System.out.println(list); } } 输出:
1 2 3 4 5 6 # [1, 2, 3, 4, 5, 6]
线性代数中可以将一个正定矩阵分解为唯一的一个下三角矩阵及其共轭转置矩阵的乘积,Cholesky矩阵分解。计算效率将比LU分解提高两倍以上。
A = [L][L]T
计算公式如下:
// CPP program to decompose a matrix using // Cholesky Decomposition #include <bits/stdc++.h> using namespace std; const int MAX = 100; void Cholesky_Decomposition(int matrix[][MAX], int n) { int lower[n][n]; memset(lower, 0, sizeof(lower)); // Decomposing a matrix into Lower Triangular for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { int sum = 0; if (j == i) // summation for diagnols { for (int k = 0; k < j; k++) sum += pow(lower[j][k], 2); lower[j][j] = sqrt(matrix[j][j] - sum); } else { // Evaluating L(i, j) using L(j, j) for (int k = 0; k < j; k++) sum += (lower[i][k] * lower[j][k]); lower[i][j] = (matrix[i][j] - sum) / lower[j][j]; } } } // Displaying Lower Triangular and its Transpose cout << setw(6) << "
一维数组转换二维数组的方法 第一种方法 直接应用数组的截取生成新的数组
function arrTrans(num, arr) { const newArr = []; while(arr.length > 0) { newArr.push(arr.splice(0, num)); } return newArr; }``` 第二种方法 主要利用 Math.floor(index / num)计算该元素为第几个素组内这个主要方法 function arrTrans(num, arr) {
const iconsArr = [];
arr.forEach((item, index) => {
const page = Math.floor(index / num);
if (!iconsArr[page]) {
iconsArr[page] = [];
}
iconsArr[page].push(item);
});
return iconsArr;
}
1034 有理数四则运算 (20分) 题目描述 : --------------------------------------------------------------------------------------------------------------------------------------
本题要求编写程序,计算 2 个有理数的和、差、积、商。
输入格式 : --------------------------------------------------------------------------------------------------------------------------------------
输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0。
输出格式 : --------------------------------------------------------------------------------------------------------------------------------------
分别在 4 行中按照 有理数1 运算符 有理数2 = 结果 的格式顺序输出 2 个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式 k a/b,其中 k 是整数部分,a/b 是最简分数部分;若为负数,则须加括号;若除法分母为 0,则输出 Inf。题目保证正确的输出中没有超过整型范围的整数。
输入样例 1 : ------------------------------------------------------------------------------------------------------------------------------------
2/3 -4/2
输出样例 1 : ------------------------------------------------------------------------------------------------------------------------------------
2/3 + (-2) = (-1 1/3)
2/3 - (-2) = 2 2/3
2/3 * (-2) = (-1 1/3)
2/3 / (-2) = (-1/3)
LTspice基本使用 什么是spice?LTspice优势仿真流程实例:NMOS的I-V特性设计电路原理图配置仿真参数run 仿真成功 什么是spice? 电路系统的设计人员有时需要对系统中的部分电路作电压与电流关系的详细分析,此时需要做晶体管级仿真(电路级),这种仿真算法中所使用的电路模型都是最基本的元件和单管。仿真时按时间关系对每一个节点的I/V关系进行计算。这种仿真方法在所有仿真手段中是最精确的,但也是最耗费时间的。
SPICE(Simulation program with integrated circuit emphasis)是电路级模拟程序,被分析的电路中的元件可包括电阻、电容、电感、互感、独立电压源、独立电流源、各种线性受控源、传输线以及有源半导体器件。SPICE内建半导体器件模型,用户只需选定模型级别并给出合适的参数。
各软件厂家提供了Vspice、Hspice、Pspice等不同版本spice软件,其仿真核心大同小异,都是采用了由美国加州Berkeley大学开发的spice模拟算法。
LTspice优势 免费,免费,免费(功能对于学生党足够了!)以下为官网列举的优势 稳定的spice仿真,可以使用无限的电路节点、原理图编辑器(图形化编辑)、波形查看器、元件库开关模式电源的快速仿真,稳定的状态检测、电路瞬态分析、逐步仿真高级的分析和仿真 仿真流程 设计电路原理图配置仿真参数选择测试点,查看仿真曲线 实例:NMOS的I-V特性 设计电路原理图 1 创建新的原理图(New Schematic)
2. 菜单栏和工具栏的英文相信大家都非常之懂,可以添加如你所见的电路元件或者执行操作。点击工具栏中类似两脚插座的按钮(component)可添加比较复杂的电路元件
3. 这里添加一个NMOS4,点击OK即可添加到版图中,左键可连续添加元件,右键取消。
4. 根据自己设计的电路图添加元件,最后点击类似于笔(Wire)的按钮进行布线。鼠标在相应元件附近,点击右键即可修改元件参数
例如,修改电源电压,如上图。
插入几个细节,**大手(Move)与小手(Drag)**都是能拖动元件,但使用大手元件独立于导线,小手元件紧连着导线;撤回修改不是我们Windows的CTRL+Z,而是F9;删除是剪刀工具。 大手(Move)
小手(Drag)
配置仿真参数 多种仿真配置可以满足各种各样的需求。
点击simulate,选择Edit Simulation Cmd,进入仿真参数配置
2. 有transient瞬态仿真、AC交流电分析、DC sweep直流扫描分析等,为了实现不同栅极电压 I D S I_{DS} IDS与 V D S {V_DS} VDS的特性在同时展示,选择 DC sweep,具体设置参数,英文名就是相应解释,具体参数如下,配置了两个电压源。
PS:仿真参数配置完成后,会出现“.dc V2 0 5 0.1 V1 1 2.5 0.5”的代码,这是对你配置的一个描述,可以放置在你版图中的任何一个角落。 run 仿真成功 点击跑步的小人即可运行仿真
初始没有波形图,你需要将鼠标移动到需要测量的节点处,鼠标为黑色的笔测量电压,红色笔测量电压,温度计测量功率,如下图:
2. 还有很多可以设置调节的选择,比如背景,量度等等。还有很多操作,比如选中波形图中的trace 名称向上拖即可删除等等。
https://jmeter.apache.org/api/overview-summary.html
问题描述 mxnet版本:1.7.0 (latest)
onnx版本:1.7.0 (latest)
按照Exporting to ONNX format教程中的方法导出mxnet模型,报错情况如下:
>>> python mx2onnx.py INFO:root:Converting json and weight file to sym and params [10:45:36] src/nnvm/legacy_json_util.cc:209: Loading symbol saved by previous version v1.2.0. Attempting to upgrade... [10:45:36] src/nnvm/legacy_json_util.cc:217: Symbol successfully upgraded! Traceback (most recent call last): File "mx2onnx.py", line 19, in <module> converted_model_path = onnx_mxnet.export_model(sym, params, [input_shape], np.float32, onnx_file) File "/opt/ptt_pkgs/anaconda3/envs/mxnet/lib/python3.7/site-packages/mxnet/contrib/onnx/mx2onnx/export_model.py", line 79, in export_model verbose=verbose) File "/opt/ptt_pkgs/anaconda3/envs/mxnet/lib/python3.7/site-packages/mxnet/contrib/onnx/mx2onnx/export_onnx.py", line 308, in create_onnx_graph_proto checker.
我在编辑C语言时 代码如下:
#include <lua.h> #include <lauxlib.h> #include <lualib.h> 然后编译成so文件,出现如下错误:
其实就是找不到lua库:
解决办法:
下载lua-5.1.5.tar.gz (下载链接2 lua5.1) (下载地址3 lua5.2)解压文件进入解压文件执行 make linux执行 sudo make install 然后在编译 成功解决