Topaz DeNoise AI for mac是Topaz系列中的一款AI图像降噪软件,topaz denoise ai mac版提供了数百万个噪声/清晰图像的算法,可以快速消除图像中噪音并且保留原始图像细节,人工智能降噪Topaz DeNoise AI能够很好的帮助用户处理图像。
Topaz DeNoise AI for mac官方介绍
毫无保留地以任何光线拍摄任何地方。使用首个AI驱动的降噪工具Topaz DeNoise AI能够消除噪点并恢复图像中的清晰细节。您可能会对获得的结果感到惊讶。
原文来自:Topaz DeNoise AI for mac(AI图像降噪软件)v2.2.8激活版
topaz denoise ai mac版功能特点
突破性的图像降噪
降噪技术基本上已经有十年的历史了,只是到处都有很小的增量改进。(我们知道–我们做到了!)DeNoise AI有所不同:我们向算法提供了数以百万计的噪点/清晰图像,直到它真正了解了什么是噪声以及如何最好地将其去除为止。
随时随地拍摄
极大的降噪效果就像镜头升级一样。当您拍摄快速动作快照,夜间图像或任何其他需要高ISO的情况时,您将可以获得更高质量的结果。使用DeNoise AI可以在任何情况下帮助您创建像素完美的照片。
恢复真实细节
DeNoise AI会检查整个图像,并从整体上确定该照片中细节和噪点之间的差异。(其他NR工具仅查看像素级细节。)在了解了特定图像的噪点与细节后,DeNoise AI从噪点中恢复了惊人的细节。
选择性应用降噪
在您的降噪工作流程中,您可能会遇到从某些区域去除噪声效果最好的图像,例如天空,但没有冲击波……在鸟类的光滑羽毛上,而不是粗糙的树皮上……在光滑的外皮上汽车,而不是人行道。DeNoise AI允许您有选择地在图像的某些区域应用降噪,并保持其他纹理不变。
快速消除照片中的噪音
在黑暗的舞台上跳舞芭蕾舞演员的250枪。冰冷的阿拉斯加拍摄的300张照片捕捉了舞蹈的极光。有趣的拍摄后,逐张处理每个镜头是一种嗡嗡声。这就是为什么我们在DeNoise AI中添加了批处理功能。
只需从您的桌面,图像文件夹中导入多个图像,或从Lightroom库中拖放即可快速进行批处理。将批量设置应用到相似场景中的所有图像以进行快速处理,或者单张图像或少量图像,然后在完成批处理之前对这些图像应用不同的设置。我们简化了降噪的每个步骤,因此您可以在工作流程中跳舞。
增强清晰度
DeNoise旨在保留尽可能多的图像细节,并让您有机会按照您的意图锐化细节,以获得清晰清晰的照片。
消除色度噪声
色度噪声很容易识别为照片上出现的那些讨厌的色斑。色度滑块可让您定位和消除这种特定类型的噪音。
消除噪音但不消除细节
该图像是在下雨天拍摄的,DeNoise AI是唯一经证实可将雨水与图像噪声区分开的降噪应用程序,可以将其专业移除,但仍保留细节。
听听别人对DeNoise AI的看法
“这是一个了不起的工具,特别是对于像我这样的人来说,除了使用尼康D5200进行拍摄外,在低光和较高的ISO情况下,噪声都是一个问题,它可以拍摄我95%的HDR和手持设备中的照片。这确实做得非常出色,我期待将其添加到我的工具箱中,并处理我的投资组合中很多不错的但嘈杂的镜头!” –约翰·E·亚当斯
人工智能降噪Topaz DeNoise AI系统要求
操作系统
Windows: Windows 7、8、10(仅64位)
*自2020年1月14日起,Microsoft终止了对Windows 7的支持。
Mac: macOS版本10.12(Sierra)及更高版本
我们目前不支持基于Linux的操作系统。
vue生命周期概述:
vue实例从创建到销毁的过程就是生命周期。 也就是从开始创建、初始化数据、编译模板、挂载dom -->渲染、更新–>渲染 、 准备销毁、销毁等一系列过程
vue的生命函数主要分四大阶段八大钩子函数
分别为: 创建前\后, 挂载前\后(渲染前\后), 更新前\后, 销毁前\后
一、创建前\后
在beforeCreate生命周期函数执行时, data和method还没初始化
在created生命周期函数执行时, data和method已经初始化完成
二、挂载前\后(渲染前\后)
在beforeMount生命周期函数执行的时,已经编译好的模板字符串、还没有真正渲染到页面中去
在mounted生命周期函数执行时, 已经渲染完, 可以看到页面.
三、更新前\后
在beforeUpdate生命周期函数执行时, 已经可以拿到新的数据, 但还没渲染到视图中去.
在updated生命周期函数执行时, 已经把更新后的数据渲染到了视图中去.
四、销毁前\后
在beforeDestroy生命周期函数执行时, 实例进入准备销毁的阶段, 此时date、methods、指令等还是可用状态
在destroyed生命周期函数执行时, 实例已经完成销毁, date、methods、指令已经不可用了
class 类名(): #class关键字定义类,类的命名规范首字母大写,括号中可带参数可不带 类:在python中,把具有相同属性和方法的对象归为一个类(class)
对象 = 属性(特征)+方法(行为)
1、类和对象是什么关系呢?
答:类和对象的关系就如同模具和用这个模具制作出的物品之间的关系。一个类为它的全部对象给出了一个统一的定义,而他的每个对象则是符合这种定义的一个实体,因此类和对象的关系就是抽象和具体的关系。
通俗地说,类是对象的模板或蓝图,类是对象的抽象化,对象是类的实例化。类不代表具体的事物,而对象表示具体的事物
对象就是由类产生的
2、请用一句话概括面向对象的几个特征?
封装 对外部隐藏对象的工作细节
继承 子类自动共享父类之间数据和方法的机制
多态 可以对不同类的对象调用相同的方法,产生不同的结果
3、self参数的作用是什么?
答:绑定方法,据说有了这个参数,Python 再也不会傻傻分不清是哪个对象在调用方法了,你可以认为方法中的 self 其实就是实例对象的唯一标志。
原文载于 https://old-panda.com/2019/12/11/golang-omitempty/
用法 熟悉 Golang 的朋友对于 json 和 struct 之间的转换一定不陌生,为了将代码中的结构体与 json 数据解耦,通常我们会在结构体的 field 类型后加上解释说明,例如在表示一个地址的时候, json 数据如下所示
{ "street": "200 Larkin St", "city": "San Francisco", "state": "CA", "zipcode": "94102" } 与之相对应的 Golang 结构体表示可能是这个样子的
type address struct { Street string `json:"street"` // 街道 Ste string `json:"suite"` // 单元(可以不存在) City string `json:"city"` // 城市 State string `json:"state"` // 州/省 Zipcode string `json:"zipcode"` // 邮编 } 这样无论代码中的变量如何改变,我们都能成功将 json 数据解析出来,获得正确的街道,城市等信息,到目前为止一切正常。但如果我们想要将地址结构体恢复成 json 格式时,问题就来了。比方说我们用下面这段代码读取了地址 json ,然后根据业务逻辑处理了之后恢复成正常的 json 打印出来
一般来说国内不能直接访问golang官方包:所以需要做个代理就是设置GOPROX环境变量
设置了Go语言的环境变量:
go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct 设置完后,在GoLand控制台执行go mod download在执行下载mod报错:
报错信息是连接不上官方网址,可是我明明走了代理不访问官方网址,走https://goproxy.cn的啊。开始查找原因。
打开cmd,用go env 命令查看:
C:\Users\Administrator>go env set GO111MODULE=on set GOARCH=amd64 set GOBIN= set GOCACHE=C:\Users\Administrator\AppData\Local\go-build set GOENV=C:\Users\Administrator\AppData\Roaming\go\env set GOEXE=.exe set GOFLAGS= set GOHOSTARCH=amd64 set GOHOSTOS=windows set GOINSECURE= set GOMODCACHE=C:\Users\Administrator\go\pkg\mod set GONOPROXY=*.corp.example.com set GONOSUMDB=*.corp.example.com set GOOS=windows set GOPATH=C:\Users\Administrator\go set GOPRIVATE=*.corp.example.com set GOPROXY=https://goproxy.cn set GOROOT=D:\Go set GOSUMDB=sum.golang.org set GOTMPDIR= set GOTOOLDIR=D:\Go\pkg\tool\windows_amd64 set GCCGO=gccgo set AR=ar set CC=gcc set CXX=g++ set CGO_ENABLED=1 set GOMOD=NUL set CGO_CFLAGS=-g -O2 set CGO_CPPFLAGS= set CGO_CXXFLAGS=-g -O2 set CGO_FFLAGS=-g -O2 set CGO_LDFLAGS=-g -O2 set PKG_CONFIG=pkg-config set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\ADMINI~1\AppData\Local\Temp\go-build423114610=/tmp/go-build -gno-record-gcc-switches 然后在GoLand控制台执行go env:
[扩展阅读] EasyGUI 学习文档【超详细中文版】
Python 模块EasyGui详细介绍
0、安装 EasyGUI
C:\Users\sjk>D: D:\Program Files (x86)\python\Scripts>**pip install easygui** Collecting easygui Downloading easygui-0.98.1-py2.py3-none-any.whl (90 kB) |████████████████████████████████| 90 kB 3.5 kB/s Installing collected packages: easygui Successfully installed easygui-0.98.1 WARNING: You are using pip version 20.1.1; however, version 20.2.2 is available. You should consider upgrading via the 'd:\program files (x86)\python\python.exe -m pip install --upgrade pip' command. D:\Program Files (x86)\python\Scripts>**python -m pip install --upgrade pip -i https://pypi.douban.com/simple** Looking in indexes: https://pypi.
经典稀疏编码方法:
https://www.jianshu.com/p/717883f82b87
https://zhuanlan.zhihu.com/p/37950431
https://zhuanlan.zhihu.com/p/82749548
综述:
https://zhuanlan.zhihu.com/p/38181216
我有json对象,其中包含一些html字符串。需要创建具有唯一参考变量的多个ng-template。 <div *ngFor="let el of ElementList"> <ng-template #el.id> <div [innerHtml]="el.html"></div> </ng-template> </div> 这是我的ElementList数组 ElementList = [ {id: 'h1', html: '<h1>sample heading</h1>'}, {id: 'h2', html: '<h2>sample heading</h2>'}, {id: 'h3', html: '<h3>sample heading</h3>'}, ]; 解决方法:
使用@ViewChildren
<div *ngFor="let el of ElementList"> <ng-template #elem> <div [innerHtml]="el.html"></div> </ng-template> </div> 在组件类中,通过ViewChildren访问模板引用变量,就像这样 @ViewChildren(TemplateRef) elem : QueryList<TemplateRef<any>>; 现在可以访问模板了。 console.log(this.elem.toArray());
第一种方法 import pandas as pd from collections import Counter data = '参赛信息.xlsx' data = pd.read_excel('参赛信息.xlsx') # 导入参赛信息 x_pandas_list = data[u'专业1'] # 专业情况 list = list(x_pandas_list) c = Counter(list) print(c) 输出形式
Counter({'自动化学院': 164, '高分子科学与工程学院': 112, '化工学院': 101, '数理学院': 96, '信息学院': 96, '材料科学与工程学院': 53, '经济与管理学院': 47, '环境与安全工程学院': 37, '机电工程学院': 31, '海洋学院': 6, '材料学院': 3, '外国语学院': 1}) 第二种方法 import pandas as pd data = '参赛信息.xlsx' data = pd.read_excel('参赛信息.xlsx') # 导入参赛信息 d = data['专业1'].
文章目录 1. 用途2. 示例3. 原理3.1 注册3.2 触发3.3 延迟队列state3.4 定时器注意事项 1. 用途 Flink定时器存在于窗口的触发,TTL等诸多用途,因此搞清楚其原理对于理解这些知识点至关重要。
2. 示例 在flink实时处理中,涉及到延时处理可使用KeyedProcessFunction来完成,KeyedProcessFunction是flink提供面向用户的low level api,可以访问状态、当前的watermark或者当前的processingtime, 更重要的是提供了注册定时器的功能,分为:
注册处理时间定时器,直到系统的processingTime超过了注册的时间就会触发定时任务注册事件时间定时器,直到watermark值超过了注册的时间就会触发定时任务另外也可以删除已经注册的定时器。 示例代码如下:
// 创建bean类CountWithTimestamp,里面有三个字段 package com.bolingcavalry.keyedprocessfunction; public class CountWithTimestamp { public String key; public long count; public long lastModified; } // 创建FlatMapFunction的实现类Splitter,作用是将字符串分割后生成多个Tuple2实例,f0是分隔后的单词,f1等于1: package com.bolingcavalry; import org.apache.flink.api.common.functions.FlatMapFunction; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.util.Collector; import org.apache.flink.util.StringUtils; public class Splitter implements FlatMapFunction<String, Tuple2<String, Integer>> { @Override public void flatMap(String s, Collector<Tuple2<String, Integer>> collector) throws Exception { if(StringUtils.
1、else与while语句搭配
def showMaxFactor(num): count = num // 2 #判断是素数,只需依次判断当前数num除以1到(num // 2)都不能整除即可 while count > 1: if num % count == 0: #判断是否整除 print('%d最大的约数是%d' % (num, count)) break #跳出循环后else并不执行 count -= 1 else: #当while循环完全被执行完了,没有给中途跳出(即break),就会执行else语句 print('%d是素数!' % num) num = int(input('请输入一个数:')) showMaxFactor(num) 运行输出: =============================== RESTART: D:/Program Files/1/34讲/0831_2.py =============================== 请输入一个数:25 25最大的约数是5 >>> =============================== RESTART: D:/Program Files/1/34讲/0831_2.py =============================== 请输入一个数:11 11是素数! >>> 注:else与for语句搭配同else与while语句搭配一样
2、else与异常语句搭配
只要try语句块里没有出现任何异常,就会执行else语句块里的内容
try: print(int('abc')) except ValueError as reason: #如果程序有异常时执行 print('出错了:' + str(reason)) else: #程序无异常时执行 print('没有任何异常!') 运行输出: 出错了:invalid literal for int() with base 10: 'abc' try: print(int('123')) except ValueError as reason: #如果程序有异常时执行 print('出错了:' + str(reason)) else: #程序无异常时执行 print('没有任何异常!') 运行输出: 123 没有任何异常! 3、简洁的with语句
1.问题现象
从github下载了rocketmq源码后,本地maven构建下载依赖包,由于配置的代理没有及时清理,导致引入jar包失败且idea中maven中的plugins下的clean组件下面始终有红色波浪线,执行clean的时候也报“Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:3.0.0”的错误
2.原因分析
因为不需要的代理配置没有去掉,导致第一次maven构建失败,但是本地仓库存有构建记录,没有对应的jar,导致后续去掉代理配置之后,依然引入本地仓库失败的构建jar,构建失败
3.解决方案
找到对应的存在问题的jar的本地仓库下的路径,把对应的构建失败的半成品jar删除,在idea中重新执行maven的reimport,会重新从远程仓库中拉取jar,问题解决,红色波浪线消失
4.个人思考
这个问题很久之前其实遇到并解决过,但是由于没有记录下来,时间过去很久,再次出现,完全没有印象,所以留痕归档还是很重要的,尤其是记忆力下降严重的自己。
一、try-except语句 try: 检测范围 except Exception[as reason]: 出现异常(Exception)后的处理代码 例1:
try: f = open('test.txt') #该文本不存在 print(f.read()) f.close() except OSError: print('文件出错啦!') 运行输出: 文件出错啦! 例2:
try: f = open('test.txt') #该文档不存在 print(f.read()) f.close() except OSError as reason: print('文件出错啦!\n出错原因是:' + str(reason)) 运行输出: 文件出错啦! 出错原因是:[Errno 2] No such file or directory: 'test.txt' try: sum = 1 + '1' #该语句出错,只打印该错误,不再往下执行了 f = open('test.txt') #该文档不存在 print(f.read()) f.close() except OSError as reason: print('文件出错啦!\n出错原因是:' + str(reason)) except TypeError as reason: print('类型出错啦!
Debezium概述 Debezium是用于捕获变更数据的开源分布式平台。可以响应数据库的所有插入,更新和删除操作。Debezium依赖于kafka上,所以在安装Debezium时需要提前安装好Zookeeper,Kafka,以及Kakfa Connect。
Kafka Connect Kafka Connect用于在Apache Kafka和其他系统之间可扩展且可靠地数据流传输数据的工具,连接器可以轻松地将大量数据导入或导出。
Kafka Connect当前支持两种模式,standalone和distributed两种模式。 standalone主要用于入门测试,所以我们来实现distributed模式。 官网地址:https://kafka.apache.org/documentation.html#connect Distributed,分布式模式可以在处理工作中自动平衡,允许动态扩展或缩减,并在活动任务以及配置和偏移量提交数据中提供容错能力。和standalone模式非常类似,最大区别在于启动的类和配置参数,参数决定了Kafka Connect流程如果存储偏移量,如何分配工作,在分布式模式下,Kafka Connect将偏移量,配置和任务状态存储在topic中。建议手动创建topic指定分区数,也可以通过配置文件参数自动创建topic。 参数配置: group.id 默认connect-cluster 集群的唯一名称,不能重名,用于形成connect集群组
config.storage.topic 用于存储kafka connector和任务配置信息的topic。
offset.storage.topic 用于存储偏移量的topic。
status.storage.topic 用于存储状态的topic。
配置 [root@hadoop101 ~]# cd /opt/module/kafka_2.11-2.4.0/config/ [root@hadoop101 config]# vim connect-distributed.properties bootstrap.servers=hadoop101:9092,hadoop102:9092,hadoop103:9092 group.id=connect-mysql key.converter=org.apache.kafka.connect.json.JsonConverter value.converter=org.apache.kafka.connect.json.JsonConverter key.converter.schemas.enable=true value.converter.schemas.enable=true offset.storage.topic=connect-mysql-offsets offset.storage.replication.factor=2 config.storage.topic=connect-mysql-configs config.storage.replication.factor=2 status.storage.topic=connect-mysql-status status.storage.replication.factor=2 offset.flush.interval.ms=10000 安装Debezium对MySql的支持 (1)创建kafka plugins文件夹
[root@hadoop101 module]# mkdir -p /usr/local/share/kafka/plugins/ (2)上传debezium-connector-mysql-1.2.0.Final-plugin.tar,并解压
[root@hadoop101 software]# tar -zxvf debezium-connector-mysql-1.2.0.Final-plugin.tar.gz -C /usr/local/share/kafka/plugins/ (3)修改mysql配置,如果是rpm的方式安装MySql的那么则没有my.cnf文件,则需要修改mysql-default.cnf然后复制到/etc/路径下,如果/etc/路径下有my.cnf则直接修改my.cnf即可。安装mysql参考之前文档
[root@hadoop101 software]# vim /usr/share/mysql/my-default.cnf [mysqld] server_id=1 log-bin=mysql-bin binlog-format=ROW (4)复制my-default.
1.首先select的有id
eg : id=“engCategoryId”
<g2:select name="_M.engType" list="%{engTypeEnum}" id="engTypeId" listKey="name()" listValue="desc" headerKey="" headerValue="请选择" label="工程类型" onchange="categoryChange()" requiredLabel="true" labelSeparator=":"/> <g2:select name="_M.engCategory" list="%{engCategoryEnum}" id="engCategoryId" listKey="name()" listValue="desc" headerKey="" headerValue="请选择" label="工程类别" onchange="categoryChange()" requiredLabel="true" labelSeparator=":"/> 2.需求判断,根据工程类型来来判断工程类型的选择;
当工程类型选择 园林绿化,那么工程类型为 监理,施工,设计 三个选项
其他类型为建立和施工两个选项;
所以这里要用到删除其中一个option 和添加一个option,因为我这里的option的位置是固定的所以直接通过index来删除,再通过判断select的option的个数来进行判断是否要添加《设计》 这个下拉选项, 通过select中的change函数οnchange=“categoryChange()”;还有我这初始化的时候会将工程类型的下拉选项都加载过来;在初始化的时候就要删除,如果工程类型不是园林绿化的话;
所以我的代码如下实现,在刷新页面全局函数中
//全局函数 $(function() { categoryChange(); } //更据工程类型来确定工程类别的选项 function categoryChange(){ var engType = $("#engTypeId").val(); //园林的有设计其他的没有 if("YLLH" !=engType){ document.getElementById("engCategoryId").options.remove(3); }else{ //工程类别下拉选项 var engCategory = document.getElementById("engCategoryId"); //判断是否已经有了设计的下拉选项 if(engCategory.options.length==3){ engCategory.options.add(new Option("设计","SJ")); } } } 总结:
是否在安装esxi6.x的时候遇到过如下报错问题,No Network Adapters,这是因为当前esxi镜像版本中不包含该服务器网卡对应的驱动程序,所以需要我们手工将该网卡型号的驱动添加到esxi的程序中去。
1、下载esxi对应版本的离线包程序,本例我们以esxi6.7为例。
https://www.vmware.com/
我们以6.7为例,
我们以企业版为例,其他版本用法一致。
以6.7U3b的版本为例,下载离线包。
2、下载ESXi-Customizer-PS最新版本。
https://www.v-front.de/p/esxi-customizer-ps.html#download
直接点击下载。
3、下载需要的驱动,本例我们以Realtek8111驱动为例。
https://vibsdepot.v-front.de/wiki/index.php/List_of_currently_available_ESXi_packages
下载后在桌面新建一个文件夹,命名随便,但是要用英文命名,我这边就用esxi。
然后把esxi6.7的离线包名称为:ESXi670-201912001.zip和ESXi-Customizer-PS-v2.6.0.ps1放到esxi的目录中。然后在在esxi里面建一个子文件夹,名称随意,用英文,我这边用pkg。
准备完毕,下面我们就来添加网卡驱动文件到esxi离线包里面去,并生成esxi安装镜像文件。
win10搜索框输入powershell,以管理员身份运行
安装依赖:
Install-Module -Name VMware.PowerCLI 安装时间较长,大概需要20来分钟。
调整PowerShell的执行策略来让脚本可以正常运行。默认的执行策略是无法运行这个脚本的。
Set-ExecutionPolicy Unrestricted 开始打驱动补丁并自动封装为ISO
cd C:\Users\Administrator\Desktop\esxi
.\ESXi-Customizer-PS-v2.6.0.ps1 -izip .\ESXi670-201912001.zip -pkgDir C:\Users\Administrator\Desktop\esxi\pkg
完成后,会在当前目录下生成一个esxi的iso文件。
ESXi-Customizer-PS-v2.6.0.ps1还有很多其他的用法,可以在
https://www.v-front.de/p/esxi-customizer-ps.html#download
找到其他详细用法。
转载自品略图书馆 http://www.pinlue.com/article/2019/04/0910/118590891739.html
div 语义:Division(分隔)
span 语义:Span(范围)
ol 语义:Ordered List(排序列表)
ul 语义:Unordered List(不排序列表)
li 语义:List Item(列表项目)
dl 语义:Definition List(定义列表)
dt 语义:Definition Term(定义术语)
dd 语义:Definition Description(定义描述)
del 语义:Deleted(删除(的文本))
ins 语义:Inserted(插入(的文本))
h1~.h6 语义:Header 1 to Header 6(标题1到标题6)
p 语义:Paragraph(段落)
hr 语义:Horizontal Rule(水平尺)
a 语义:Anchor(锚)
abbr 语义:Abbreviation(缩写词
acronym 语义:Acronym(取首字母的缩写词)
address 语义:Address(地址)
dfn 语义:Defines a Definition Term(定义定义条目)
kbd 语义:Keyboard(键盘(文本))
samp 语义:Sample(示例(文本))
var 语义:Variable(变量(文本))
tt 语义:Teletype(打印机(文本))
code 语义:Code(源代码(文本))
pre 语义:Preformatted(预定义格式(文本))
blockquote 语义:Block Quotation(区块引用语)
cite 语义:Citation(引用)
华为USG6000V防火墙的初始密码及修改密码的步骤操作
pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple/ docx2pdf 注意doc2pdf前面为空格
from docx2pdf import convert
import os
director = r'D:\DOC'
FileList = map(lambda x: director + '\\' + x, os.listdir('D:\DOC'))
for file in FileList:
convert(file, f"{file.split('.')[0]}.pdf")
运行后,硬盘哗啦哗啦之后就转换成功了
1. C++语言基础 1.1 变量 声明与定义
变量定义:用于为变量分配存储空间,还可为变量指定初始值。变量声明:用于向程序表明变量的类型和名字。对变量来说,除非有extern关键字,否则都是变量的定义。在一个程序中,变量只能定义一次,却可以声明多次。
函数的声明和定义区别比较简单,带有{ }的就是定义,否则就是声明。
如果局部变量和全局变量重名,局部变量会屏蔽全局变量。要使用全局变量,要在变量名前添加“::”。
extern关键字
extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
extern “C”表示接下来的内容按C的规则进行编译。比如C++编译器通过修改所有函数的名字实现函数重载机制,C则是按函数原本的名字进行编译的。
全局变量和局部变量的存储方式
全局变量储存在静态数据库,局部变量在堆栈。全局变量在程序开始执行时分配存储区,程序执行完毕释放,在程序执行过程中全局变量始终占据固定的存储单元;局部变量是动态分配存储空间的,在调用变量所在函数时,系统会给函数的局部变量分配存储空间,在函数调用结束时就自动释放这些存储空间。
一个正数的补码与其原码的形式相同,一个负数的补码是将该数绝对值的二进制按位取反再加1.
八进制整常数必须以0开头,数码取值为0~7;十六进制整常数是以0x开头的,其数码取值为0~9,a~f;十进制整常数无前缀。
转义字符是特殊的字符常量,“\”后面接一个或几个字符,整体表示一个转义字符,例如“\n”是一个字符,表示回车。
数据类型在运算过程中的转换规则
在整型、实型和字符型数据间进行混合运算时,应从低精度向高精度转换,即将字符型数据先转换成整型,再将整型数据和实型数据转换成双精度类型数据,然后在同类型数据间进行运算。
无符号类型只能存放不带符号的整数,不能存放负数,当为其赋值为负数时会自动转换为无符号类型数值。
逗号运算符:先计算左边的操作数,再计算右边的操作数,右边操作数的类型和值作为整个表达式的结果。
左值与右值
在 c 中,左值指的是既能够出现在等号左边也能出现在等号右边的变量(或表达式),一般指表达式结束后依然存在的持久对象。
右值指的则是只能出现在等号右边的变量(或表达式)。一般指表达式结束就不再存在的临时对象。
对于基础类型,右值是不可被修改的,也不可被 const, volatile 所修饰;但对于C++中自定义的类型(user-defined types),右值却允许通过它的成员函数进行修改。
死循环
当程序要求反复执行,然后等待中断或外界的变量的发生。如操作系统、WIN32 程序、嵌入式系统软件、多线程程序的线程处理函数等这些都用到死循环。
1.2 static、const和sizeof static关键字
(1)全局静态变量
在全局变量前加上关键字 static, 全局变量就定义成一个全局静态变量.
存储在静态存储区, 在整个程序运行期间一直存在。
全局静态变量在声明他的文件之外是不可见的,可以被模块内所有函数访问,但不能被模块外其他函数访问。
(2)局部静态变量
在局部变量之前加上关键字 static, 局部变量就成为一个局部静态变量。
存储在静态存储区
作用域仍为局部作用域, 当定义它的函数或者语句块结束的时候, 作用域结束。 但是当局部静态变量离开作用域后, 并没有销毁, 而是仍然驻留在内存当中, 只不过我们不能再对它进行访问, 直到该函数再次被调用, 并且值不变;
(3) 静态函数
在函数返回类型前加 static, 函数就定义为静态函数。
函数的定义和声明在默认情况下都是 extern 的, 但静态函数只是在声明他的文件当中可见, 不能被其他文件所用。函数的实现使用 static 修饰, 那么这个函数只可在本 cpp 内使用, 不会同其他 cpp 中的同名函数引起冲突;
1. 添加依赖pom.xml <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-auth</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>2.2.5</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>2.2.5</version> </dependency> <!-- 使用mr程序操作hbase 数据的导入 --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-mapreduce</artifactId> <version>2.2.5</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> </dependency> <!-- phoenix 凤凰 用来整合Hbase的工具 --> <dependency> <groupId>org.apache.phoenix</groupId> <artifactId>phoenix-core</artifactId> <version>5.0.0-HBase-2.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.
文章目录 导入模块绘制好图像设置千位分隔符 本篇的柱形图只讲一个内容,那就是:将之前绘制的图形中的数字标签加上千位分隔符(如下两幅图对比);
这个真的只能说“会者不难,难者不会“(测试途中陷入了一次死循环。。。)
可以看到,有了千位分隔符之后数据变得更加清晰。
接下来就开始吧!
导入模块 from pyecharts.charts import Bar from pyecharts import options as opts from pyechsrts.commons.utils import JsCode 这次因为是要对标签进行自定义设置,所以需要用到回调函数,所以导入了JsCode,注意js语句只有封装在JsCode里才能使用哦。
绘制好图像 废话不多说,基础操作,直接上代码,还是一样的数据。
bar_label_alter = ( Bar() .add_xaxis(type_price["品种"].tolist()) .add_yaxis("总价值", type_price["总价/采购价"].tolist()) .set_global_opts(title_opts=opts.TitleOpts(title="酒类价值柱形图")) ) bar_label_alter.render_notebook() 这些打完就会出现下图:
设置千位分隔符 这属于是对标签设置,即Labelopts,它在系列设置里,因此需要在原有代码上再进行添加:
bar_label_alter.set_series_opts( label_opts=opts.LabelOpts( position="top", font_size=15, font_family="Microsoft YaHei", font_weight="bold" ) ) 在这里里可以对标签的字体、大小、位置等进行设置,我的标签位置设置为顶端(即默认),字体大小为15,用微软雅黑,并加粗。最后见下图:
接下来就是本篇重头戏了,我直接在上面代码基础上添加:
bar_label_alter.set_series_opts( label_opts=opts.LabelOpts( position="top", font_size=15, font_family="Microsoft YaHei", font_weight="bold", formatter=JsCode( """function(params){ let num = String(params.data), temp_list = []; for(let i=num.length-1, j=1; i>=0; i--, j++){ temp_list.
前端流程图组件库 框架对比 框架技术核心是否开源是否使用过背景备注GoJScanvas 和svg核心代码进行了混淆融合系统使用过国外商业公司功能强大,图的种类极多,灵活,商业版本收费jsPlumbsvg分为社区版本(Community)和商用版本(Toolkit)治理系统使用过国外商业公司商业版本收费,社区版本免费但是功能较少topologycanvas开源没有使用过国内人个免费,在做商业版本功能,以后可能会收费antv/g6canvas并且支持svg开源没有使用过蚂蚁金服有一系列的开源组件库,对标应该是百度的echarts,免费.G6-Editor(商业版本暂未开源)
1. Eureka 服务发现慢问题 如果你刚刚接触Eureka,对Eureka的设计和实现都不是很了解,可能就会遇到一些无法快速解决的问 题,这些问题包括:新服务上线后,服务消费者不能访问到刚上线的新服务,需要过一段时间后才能访 问?或是将服务下线后,服务还是会被调用到,一段时候后才彻底停止服务,访问前期会导致频繁报 错?这些问题还会让你对 Spring Cloud 产生严重的怀疑,这难道不是一个 Bug?
问题场景: 上线一个新的服务实例,但是服务消费者无感知,过了一段时间才知道 某一个服务实例下线了,服务消费者无感知,仍然向这个服务实例在发起请求
这其实就是服务发现的一个问题,当我们需要调用服务实例时,信息是从注册中心Eureka获取的,然后 通过Ribbon选择一个服务实例发起调用,如果出现调用不到或者下线后还可以调用的问题,原因肯定是 服务实例的信息更新不及时导致的。
Eureka 服务发现慢的原因
Eureka 服务发现慢的原因主要有两个,一部分是因为服务缓存导致的,另一部分是因为客户端缓存导致的。
服务端缓存 服务注册到注册中心后,服务实例信息是存储在注册表中的,也就是内存中。但Eureka为了提高响应速 度,在内部做了优化,加入了两层的缓存结构,将Client需要的实例信息,直接缓存起来,获取的时候直接从缓存中拿数据然后响应给 Client。 第一层缓存是readOnlyCacheMap,readOnlyCacheMap是采用ConcurrentHashMap来存储数据的,主要负责定时与readWriteCacheMap进行数据同步,默认同步时间为30秒一次。
第二层缓存是readWriteCacheMap,readWriteCacheMap采用Guava来实现缓存。缓存过期时间默认 为180秒,当服务下线、过期、注册、状态变更等操作都会清除此缓存中的数据。
Client获取服务实例数据时,会先从一级缓存中获取,如果一级缓存中不存在,再从二级缓存中获取, 如果二级缓存也不存在,会触发缓存的加载,从存储层拉取数据到缓存中,然后再返回给 Client。
Eureka 之所以设计二级缓存机制,也是为了提高 Eureka Server 的响应速度,缺点是缓存会导致 Client 获取不到最新的服务实例信息,然后导致无法快速发现新的服务和已下线的服务。
了解了服务端的实现后,想要解决这个问题就变得很简单了,我们可以缩短只读缓存的更新时间 (eureka.server.response-cache-update-interval-ms)让服务发现变得更加及时,或者直接将只读缓 存关闭(eureka.server.use-read-only-response-cache=false),多级缓存也导致C层面(数据一致 性)很薄弱。
Eureka Server 中会有定时任务去检测失效的服务,将服务实例信息从注册表中移除,也可以将这个失 效检测的时间缩短,这样服务下线后就能够及时从注册表中清除。
客户端缓存 客户端缓存主要分为两块内容,一块是 Eureka Client 缓存,一块是 Ribbon 缓存。
Eureka Client 缓存
EurekaClient负责跟EurekaServer进行交互,在EurekaClient中的 com.netflix.discovery.DiscoveryClient.initScheduledTasks() 方法中,初始化了一个 CacheRefreshThread 定时任务专⻔用来拉取 Eureka Server 的实例信息到本地。所以我们需要缩短这个定时拉取服务信息的时间间隔(eureka.client.registryFetchIntervalSeconds) 来快速发现新的服务。
Ribbon 缓存
Ribbon会从EurekaClient中获取服务信息,ServerListUpdater是Ribbon中负责服务实例 更新的组件,默认的实现是PollingServerListUpdater,通过线程定时去更新实例信息。定时刷新的时 间间隔默认是30秒,当服务停止或者上线后,这边最快也需要30秒才能将实例信息更新成最新的。我们 可以将这个时间调短一点,比如 3 秒。
断路器: 有灭弧装置,支持在带电情况下断开;内部结构复杂,过电流保护,短路保护,80KA的断路器价格在一两万。
隔离开关:无灭弧装置,不支持带电操作,内部结构简单,能够保证在断电后负载与电源隔离。价格便宜
负荷开关:介于断路器和隔离开关之间,能够在一定电流下带载操作。结构说白了就是熔断器加隔离开关,所支持的拉闸电流由熔断器提供,价格便宜。
接触器:线圈控制开关,常开或是常闭,需要外加控制电路。
由于工作需要实现一个把线上数据同步到线下内网里,两个系统是几乎一样的,所以想出来这样一个导入导出的方案,就是用户页面点击导出然后把某一时间段数据导出成文件,然后再到另一个环境点击导入,来实现数据同步的方案,当然这个需要自己去解决数据冲突,就不在此介绍了,废话不多说代码如下
数据导出
@RequestMapping("/download") public void download(HttpServletRequest request, HttpServletResponse response) throws Exception { String savePath = request.getServletContext().getRealPath("/WEB-INF/tmp"); logger.debug("获取到的/WEB-INF/tmp 路径=== " + savePath); File tmpDir = new File(savePath); // 判断上传文件的保存目录是否存在 if (!tmpDir.exists() && !tmpDir.isDirectory()){ tmpDir.createNewFile(); logger.debug(savePath + "目录不存在,需要创建。"); // 创建目录 tmpDir.mkdir(); } String fileWriteTime = "offline"+ DateUtils.dateToString(new Date(),"yyyy-MM-dd"); String tmpFileName = savePath + "\\" + fileWriteTime + ".data"; logger.debug("临时文件名:===" + tmpFileName); File file = new File(tmpFileName); // 判断上传文件的保存目录是否存在 if (!file.exists()){ file.createNewFile(); logger.
含义:
Python 字典 setdefault() 函数和 get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
语法
setdefault() 方法语法:
dict.setdefault(key, default=None)
参数
key – 查找的键。
default – 键不存在时,设置的默认键值None。
返回值
如果字典中包含有给定键,则返回该键对应的值,否则返回为该键设置的值。
如果字典中已经存在这个key,setdefault不会修改key原来的值,而且该方法会返回key原来的值
与dict[key]=value有什么区别?
如果key在字典中不存在,setdefault(key,value)方法与dict[key] = value形式是完全一样的,区别就是当key在字典中存在的情况下。setdefault(key,value)并不会改变原值,而dict[key] = value是会改变原值的。所以setdefault方法主要用于向字典中添加一个key,而不是修改key对应的值。
项目开发中需要用到拖拽组件,因为前端技术框架是vue,这里就使用了vue的一款拖拽插件vue.draggable,一般基本的需求都能满足,这里使用了多个draggable嵌套,达到两级之前相互拖拽的功能。
以下是类似teambition的效果图片,最外层为一个draggable,可以左右拖动,然后每个块里面还有小块,小块组成一个draggable,可以上下拖动,也可以在大的块之间拖动。 这里说一下实现原理。
首先,要搞清楚draggable的api,这里提供以下博主自己发现的一个vue.draggable中文api地址vue.draggable中文文档(http://www.itxst.com/vue-draggable/tutorial.html),里面基本属性和方法都用讲到,有时间的可以去学习一下,要查看详细的说明可以git去看官方文档说明,官方文档(https://github.com/SortableJS/Vue.Draggable)。
这里用到了以下几个属性和事件,着重说明下:
group:拖拽分组,多组之间相互拖拽,可以实现不同数组之间相互拖拽。比如group都为itxst的组之间可以相互拖动,本文例子中分别给两个draggable设置了不同的group属性,是防止大的被拖到小的块里面去 list:作为值属性的替代,list是一个与拖放同步的数组。这里在二级draggable使用了该属性,因为两个draggable用到了同一数据源,二级draggable中用list替代v-model
animation:通过animation属性设置vue.draggable过渡效果,这样拖动时过渡位置就不会显的太生硬。
disable: 通过disabled属性实现开启或禁用vue.draggable的拖拽效果。
end():拖拽完成时的事件,如果想和后端实现动态更新,可以在这个方法里面和后端进行数据交互
然后就是示例demo了,这里一些代码段,样式什么的大家可以自由发挥
// 第一步,安装vue.draggable插件,yarn或者npm都可以 yarn add vuedraggable npm i -S vuedraggable // 第二步,使用插件 import draggable from 'vuedraggable' <div> <draggable class="list-group" group="task" v-model="projectList" @end="draggerEnd()"> <div class="card-list-span" v-for="(process, index) in projectList" :key="process.opListId"> <div class="span-header"> <div class="header-title"> {{ process.opListName }} </div> </div> <div class="span-body"> <div class="body-list"> <draggable group="project" :list="process.taskVoList" @end="taskDraggerEnd()" > <div class="body-list-span" v-for="task in process.taskVoList" :key="task.opTaskId" > <div> {{ task.opTaskTitle }} </div> <div>{{ task.
1. 简介 Spring Cloud GateWay是Spring Cloud的一个全新项目,目标是取代Netflix Zuul,它基于 Spring5.0+SpringBoot2.0+WebFlux(基于高性能的Reactor模式响应式通信框架Netty,异步非阻塞模 型)等技术开发,性能高于Zuul,官方测试,GateWay是Zuul的1.6倍,旨在为微服务架构提供一种简 单有效的统一的API路由管理方式。
Spring Cloud GateWay不仅提供统一的路由方式(反向代理)并且基于 Filter(定义过滤器对请求过滤, 完成一些功能) 链的方式提供了网关基本的功能,例如:鉴权、流量控制、熔断、路径重写、日志监控 等。
网关在架构中的位置
2. GateWay核心概念 Zuul1.x 阻塞式IO 2.x 基于Netty
Spring Cloud GateWay天生就是异步非阻塞的,基于Reactor模型
一个请求—>网关根据一定的条件匹配—匹配成功之后可以将请求转发到指定的服务地址;而在这个过 程中,我们可以进行一些比较具体的控制(限流、日志、黑白名单)
路由(route): 网关最基础的部分,也是网关比较基础的工作单元。路由由一个ID、一个目标 URL(最终路由到的地址)、一系列的断言(匹配条件判断)和Filter过滤器(精细化控制)组 成。如果断言为true,则匹配该路由。断言(predicates):参考了Java8中的断言java.util.function.Predicate,开发人员可以匹配Http 请求中的所有内容(包括请求头、请求参数等)(类似于nginx中的location匹配一样),如果断 言与请求相匹配则路由。过滤器(filter):一个标准的Spring webFilter,使用过滤器,可以在请求之前或者之后执行业务 逻辑。
下面是一张官网的图
其中,Predicates断言就是我们的匹配条件,而Filter就可以理解为一个无所不能的拦截器,有了 这两个元素,结合目标URL,就可以实现一个具体的路由转发。 3. GateWay工作过程 下面是来自官网的一张图,高度概述了Spring Cloud Gateway如何工作
客户端向Spring Cloud GateWay发出请求,然后在GateWay Handler Mapping中找到与请求相匹配的 路由,将其发送到GateWay Web Handler;Handler再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前 (pre)或者之后(post)执行业务逻辑。
Filter在“pre”类型过滤器中可以做参数校验、权限校验、流量监控、日志输出、协议转换等,在“post”类 型的过滤器中可以做响应内容、响应头的修改、日志的输出、流量监控等。
注意:在没有端口的路由中定义的uri对于HTTP和HTTPS uri分别获得默认端口值80和443。
4. GateWay应用 快速创建SpringBoot工程,导入依赖, GateWay不需要使用web模块,它引入的是WebFlux(类似于SpringMVC),完整的pom文件如下 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.
下载
在官网选择专业包根据平台选择标准版进行下载,平台必须为64位。
Windows版本:http://web.cvxr.com/cvx/cvx-w64.zip
分别获取学业授权证书(需要学校邮箱)
CVX授权申请
申请地址,按照指示填写提交后会在邮箱收到证书。
gurobi授权申请
申请地址,按照指示填写提交后,在下方可直接看到安装指南
grbgetkey <授权码> Mosek授权申请
申请地址,按照指示填写提交后,会在学校邮箱收到证书。
证书的安装
gurobi证书安装
在\cvx\gurobi\w64目录下打开命令行窗口或PowerShell窗口,执行授权命令,
grbgetkey <授权码> 回车保存证书文件gurobi.lic,将该文件复制到\cvx\gurobi目录下即可
mosek证书安装
将邮件中收到的证书文件mosek.lic复制到\cvx\mosek目录下即可
CVX证书安装
将邮件中收到的证书文件cvx_license.dat下载至CVX安装包下新建的子目录licenses下。
在matlab中打开cvx_setup.m文件,添加到路径后,执行如下命令即可安装成功:
cvx_setup licenses/cvx_license.dat
记录程序人生
环境:linux 我用的是 ubuntu 16.04
稀疏矩阵解题数学库 - UMFPACK
1、UMFPACK 简介
UMFPACK就是求解类似于 Ax=b 这样问题的一个库,来自佛罗里达州立大学。 一般情况下A 是稀疏非对称的矩阵。UMFPACk可以对矩阵进行 LU分解(L 和 U 分别是下三角矩阵和上三角矩阵)
2、C语言使用UMFPACK
根据稀疏矩阵的非零元素个数以及是否实数,UMFPACK主要提供以下几个种类的函数供调用:
(1)函数类型
1. umfpack_di_*: //非零元素的个数为 int 型,元素为实数 2. umfpack_dl_***: //非零元素的个数为 SuiteSparse_long型,元素为实数 3. umfpack_zi_*: //非零元素的个数为 int 型,元素为复数 4. umfpack_zl_*: // 非零元素的个数为 SuiteSparse_long型,元素为复数 (2)常用函数
主要有以下5个函数,也是用来求解Ax=b 的5个步骤:
1.umfpack_*_symbolic: //该函数会返回一个指向Symbolic类型的void * 指针。主要进行符号分解。 2.umfpack_*_numeric: //该函数主要对之间所说的矩阵进行数值分解,需要用到umfpack_*_symbolic返回的结果。 3.umfpack_*_solve: //该函数用来求解线性系统(Ax=b),会用到umfpack_*_numeric返回的结果。矩阵A必须是方的。 4.umfpack_*_free_symbolic: //释放umfpack_*_symbolic得到的Symbolic对象。 5.umfpack_*_free_numeric: //释放umfpack_*_numeric得到的Numeric对象。 (3)UMFPACK矩阵测试
int n = 5 ; int Ap [5] = {0, 2, 5, 9, 10, 12} ; int Ai [12] = { 0, 1, 0, 2, 4, 1, 2, 3, 4, 2, 1, 4} ; double Ax[12] = {2.
1 高德官网相关知识点: 高德官网给出的异步加载的方式说明:https://lbs.amap.com/api/javascript-api/guide/abc/load
demo:https://lbs.amap.com/fn/jsdemo_loader/?url=http%3A%2F%2Fwebapi.amap.com%2Fdemos%2Fload%2Fload2.html
js使用方式:
<script type="text/javascript"> window.init = function(){ var map = new AMap.Map('container', { center:[117.000923,36.675807], zoom:11 }); } </script> <script src="https://webapi.amap.com/maps?v=1.4.15&key=您申请的key值&callback=init"></script> 2 在某一页面,比如multipleMain.vue中引入高德地图的业务逻辑: vue的页面结构是<template> <script> <style>,我们该如何按照上面的逻辑引入高德地图呢?
1、把引入高德地图的功能放在created()中去实现2、把高德js加载完成的回调方法initMap()【实现地图的初始化】写在前面3、把js引入到body中,也可以引入到head中 注意:每次进multipleMain.vue时都会引入js,如果不加限制会加载多个js,写个方法isLoadMapJS()用来判断是否已经加载了js,如果已经加载了,不需要重复加载,没加载再进行加载
3 实现方式如下: 1、created()中的异步加载高德地图的逻辑: created(){ // 1 异步加载地图的次数 let _count=this.isLoadMapJS(); // 2 没有加载高德在线js if(_count==0){ // 2.1 高德js加载完成的回调-初始化地图 window.onLoad=()=>{ this.initMap() }; // 2.2 把js引入到body中,引入到head中也可以 var script=document.createElement("script"); script.setAttribute("type", "text/javascript"); script.setAttribute("src", "https://webapi.amap.com/maps?v=1.4.15&key=e64fe5fe747de3b6897932dfbdb340d4&callback=onLoad"); var body = document.getElementsByTagName("body"); if(body.length) { body[0].appendChild(script); }else { document.documentElement.appendChild(script); } }else{ // 3 已经加载过,直接初始化地图即可,不需要再次引入js setTimeout(()=>{ this.
“ 本文介绍了一种新的用户偏好表示方法PreHash ,同时考虑到了大规模数据和冷启动用户。该方法可以在很多推荐算法中替代其用户embedding矩阵。若干SOTA算法上的实验结果显示该算法不仅取得了更好的效果,还减少了模型的参数。”
作者:胖鱼,北京交大研究生在读,方向为机器学习,推荐系统。
「0 摘要:」
论文标题:Beyond User Embedding Matrix: Learning to Hash for Modeling Large-Scale Users in Recommendation(后台回复【prehash】可下载论文)
处理 「大规模数据」 和 「冷启动用户」是推荐系统的两大挑战。在真实场景(千万级别用户)下,很难利用用户的embedding矩阵储存个性化的用户偏好。许多研究者关注具有丰富历史信息的用户,然而,在真实的系统里,大多数用户都只有少量交互信息。在本文的工作中,作者提出了一种新的「用户偏好表示方法PreHash」 ,同时考虑到了大规模数据和冷启动用户。在该方法中,根据用户的 「历史交互信息」 生成了一系列 「篮子」。具有相似偏好的用户自动被分在用一个篮子。之后将会学习每一个篮子的表示。在设计篮子时,只有有限的参数被储存,这样大大节省了内存。更重要的是,当用户进行新的交互行为后,他的篮子和表示会相应的更新,这样可以更有效得理解和建模用户。该算法还十分灵活,「可以在很多推荐算法中替代其用户embedding矩阵」。因此,我们在很多SOTA算法上进行了实验。实验结果展示该算法不仅取得了更好的效果,还减少了模型的参数。
「1 Introduction:」
个性化的用户偏好向量在推荐系统里非常重要。先前的工作为每个用户生成其偏好特征向量,并把他们当作特征矩阵储存。矩阵分解方法通常使用一个特定向量表示用户。一些深度模型也使用embedding层将用户映射为偏好向量。
然而,这些方法 「很难应用于实际的大规模数据」 上。原因之一是,储存这样一个用户 「embedding矩阵」很困难(内存和计算时间)。同时,其无法考虑到冷启动用户。最后,这些算法无法做到 「增量学习」 ,即在更新用户特征向量时只能重新训练模型。
构建用户偏好特征向量的简单方法就是将与之交互过的物品向量求和。然而对于冷启动用户,这样的方法不适用。
本文提出的PreHash方法是一种灵活的用户偏好表示模块,可以 「替代很多推荐方法中的用户embedding矩阵」 。PreHash有两个部分,「历史部分和hash部分」 。历史部分使用一个注意力网络提取 「历史偏好向量」 。在hash部分,有 「许多篮子」,每一个篮子包含偏好相似的用户。Hash部分最重要的功能是 「对于每一个用户」 ,他都会找到一些与其 「行为类似的频繁用户」 。
「3 用户偏好哈希:」
「3.1核心思想」
学习用户偏好向量通过两种方式:用户近期交互过的物品,与当前用户有相似偏好的其他用户。因此使用一个history part从用户的交互历史中学到用户的历史偏好。为了找到与当前用户偏好类似的用户,这里设计了一个hash part建模用户的hash偏好向量。最后用注意力网络将两个part混合。
biasedMF,相对于普通的矩阵分解加上了biases项。PreHash将其用户表示部分u替换。
「3.2历史部分」
这一部分从用户 「以往的交互信息中捕获了偏好」 。考虑到每当对于一个新的物品,有一些物品能显著表达用户偏好,而一些物品则不行。所以这里采取了「注意力网络对物品向量加权」 。v是目标物品的向量。权重可以看做 「当前物品和历史物品的关联程度」 。根号l是对交互次数做标准化。
关于注意力网络的解释:是否购买iphone,与用户以前购买的book信息无关。
「3.3哈希部分」
仅仅利用 「历史向量不足以捕获用户偏好」 ,因为很多 「新用户没有足够的交互信息」 。这里使用了一个哈希模块, 「根据与目标用户的相似性」(根据历史物品交互),找到 「一些频繁用户来表示目标用户」 。哈希部分的功能就是用有限的空间储存和计算偏好。
一、错误描述 写了一个页面登录的方法,在进行页面登录的时候,控制台会报类似Required String parameter 'XXX' is not present 错误。
1.错误信息 控制台日志打印: Required String parameter 'loginname' is not present
2.错误说明 Required String parameter 'loginname' is not present 所需的字符串参数“loginname”不存在
3.错误代码 /** * 页面登录 * @author JacaCao */ @RequestMapping(value = "/login.do") public String login( @RequestParam("loginname") String loginname, @RequestParam("password") String password, Model model){ logger.info("登录名:"+loginname+"密码:"+password); User user = UserService.login(loginname, password); if (user!=null){ model.addAttribute("user",user); }else{ // 设置登录失败提示信息 model.addAttribute("message", "登录名或密码错误!请重新输入"); } return "loginForm"; } 二、解决方案 在参数传值的过程中经常会遇到传值类型不一致或者参数不存在的情况,就会报required string parameter 'XXX' is not present的错误,只需要在注解@RequestParam,添加value="
文章目录 🌊前言1、条件构造器2、QueryWrapper2.1、eq、ne2.2、gt、ge、lt、le2.3、between、notBetween2.4、like、notLike、likeLeft、likeRight2.4、isNull、isNotNull2.5、in、notIn2.5、inSql、notInSql2.6、or、and2.6、exists、notExists2.7、orderByAsc、orderByDesc 💖福利🌊 Java入门到就业学习路线规划🌊 小白快速入门Python爬虫路线 🌊前言 Code皮皮虾 一个沙雕而又有趣的憨憨少年,和大多数小伙伴们一样喜欢听歌、游戏,当然除此之外还有写作的兴趣,emm…,日子还很长,让我们一起加油努力叭🌈
👉话不多说,直达底部有粉丝专享福利!!!
环境搭建请看该链接的MybatisPlus模块
1、条件构造器 说明:
以下出现的第一个入参boolean condition表示该条件是否加入最后生成的sql中以下代码块内的多个方法均为从上往下补全个别boolean类型的入参,默认为true以下出现的泛型Param均为Wrapper的子类实例(均具有AbstractWrapper的所有方法)以下方法在入参中出现的R为泛型,在普通wrapper中是String,在LambdaWrapper中是函数(例:Entity::getId,Entity为实体类,getId为字段id的getMethod)以下方法入参中的R column均表示数据库字段,当R具体类型为String时则为数据库字段名(字段名是数据库关键字的自己用转义符包裹!)!而不是实体类数据字段名!!!,另当R具体类型为SFunction时项目runtime不支持eclipse自家的编译器!!!以下举例均为使用普通wrapper,入参为Map和List的均以json形式表现!使用中如果入参的Map或者List为空,则不会加入最后生成的sql中!!! 2、QueryWrapper 说明:
继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件
及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取
给之后测试提供参考
注意:7号数据已经被逻辑删除了
2.1、eq、ne eq:等于,ne:不等于
2.2、gt、ge、lt、le gt:大于,ge:大于等于,lt:小于,le:小于等于
2.3、between、notBetween between:在值1和值2之间,notBetween:不在值1和值2之间
2.4、like、notLike、likeLeft、likeRight like:’%值%’,notLike:’%值%’,likeLeft:’%值’,likeRight:'值%'
2.4、isNull、isNotNull isNull:字段 IS NULL,isNotNull:字段 IS NOT NULL
2.5、in、notIn in:字段 IN (v0, v1, …),notIn:字段 NOT IN (value.get(0), value.get(1), …)
2.5、inSql、notInSql inSql:字段 IN ( sql语句 ),notInSql:字段 NOT IN ( sql语句 )
一、如何确定DDR3芯片的带宽、位宽和最大IO时钟频率 这里以芯片Part Number :MT41J256M16RH-125:E为例,打开芯片的数据手册,会找到如下所示的介绍:
IO时钟频率:
根据Part Number 中的“-125”我们就可以找到图中的“1”,根据这里tCK = 1.25ns,就可以算出芯片支持的最大IO时钟频率:1/1.25ns = 800Mhz;此处的IO时钟频率也就是DDR3的频率;
位宽:
根据Part Number 中的“256M16”我们可以找到图中2所指出的地方,这里的16是代表芯片的数据位宽是16位(也就是16根数据线)。
带宽:
由于是DDR方式传输数据(上升和下降沿都传输),所以芯片的一根数据线上的传输速率 = 2*800Mhz = 1600MT/s。其实就是1600Mbit/s;
带宽就是16根数据线同时传输的数据速率 = 1600Mbit/s x 16 = 25600Mbit/s = 3200Mbyte/s = 3.125GByte/s
二、如何确定MIG最大支持的时钟频率 这里以xilinx Artix-7系列的FPGA为例,具体型号为xc7a100tfgg484-2。打开对应的datasheet(ds181),找到如下图所示的介绍(第15页):
从上图中红线标出的地方可以看出,此FPAG芯片的MIG支持最大PHY速率是800Mb/s(注意,这是数据传输速率)。因为是使用DDR模式传输数据,所以最大时钟频率 = 800/2 = 400Mhz。(还记得刚刚DDR3 芯片支持的最大IO时钟频率吗?800Mhz,在下面的MIG参数设置中,就会用到这两个参数)。 三、MIG IP 中如何根据以上信息来设置时钟参数 在说具体的时钟参数设置之前,我们先来看一张图 MIG 的 Clocking Architecture
根据本图很明显的告诉了我们,需要给MIG提供两个时钟,一个叫system clock(主时钟),一个叫reference clock(参考时钟)。
但是在MIG中,如何对这些时钟参数进行设置(描述)呢?看好了,接下来开始画重点了!!!!!
在MIG中,涉及到对时钟参数进行设置(描述)的地方有四处,接下来我们一个一个的看:
第一处,如下图所示
这里设置的参数就是 MIG 的PHY 接口对DDR3的时钟,也就是DDR3芯片实际跑的IO时钟频率,它由system clock(主时钟)倍频而来,最大频率不能超过DDR3 和MIG支持的最大频率中的最小值,如:虽然我们的DDR3芯片最高支持800Mhz的IO时钟,但是由于我们使用的FPGA芯片的MIG最高只支持400Mhz的时钟,所以这里我们选择400Mhz(当然也可以选择比这个小)。下面有个4:1,说明MIG 输出到app接口上的时钟ui_clk 是 400M/4=100M ,即到时我们在写RTL逻辑代码时操作MIG核时,用的就是这个100M时钟。
第二处、还是如图所示
这里就是设置system clock(主时钟)的输入频率,实际是多少就写多少。
把标准输入的数据存储到redis中
编辑配置redis-out.conf配置文件,
# vim /etc/logstash/conf.d/redis-out.conf
添加如下内容
input {
stdin {}
}
output {
redis {
host => "192.168.1.202"
port => "6379"
password => 'test'
db => '1'
data_type => "list"
key => 'elk-test'
}
}
logstash -f /etc/logstash/conf.d/full.conf
运行之后在控制台进行输入,然后在Redis观察
把reids的存储的数据输出到elasticsearch中
编辑配置redis-in.conf配置文件,
# vim /etc/logstash/conf.d/redis-out.conf
添加如下内容
input{
redis {
host => "192.168.1.202"
port => "6379"
password => 'test'
db => '1'
data_type => "list"
key => 'elk-test'
batch_count => 1 #这个值是指从队列中读取数据时,一次性取出多少条,默认125条(如果redis中没有125条,就会报错,所以在测试期间加上这个值)
一、Requests是什么?
Requests 是一个 Python 的 HTTP 客户端库。
支持的 HTTP 特性:
保持活动和连接池、国际域名和URL、Cookie持久性会话
浏览器式SSL验证、自动内容解码、基本/摘要身份验证、优雅的键/值Cookie、自动减压、Unicode响应机构、HTTP(S)代理支持
分段文件上传、流下载、连接超时、分块请求、.netrc支持、线程安全
Requests库的七个主要方法(掌握get即可)
requests.request() 构造一个请求,支撑以下各方法的基础方法
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
requests.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST
requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete() 向HTML网页提交删除请求,对应于HTTP的DELETE
二、爬取步骤
1.安装requests
(1)pip安装
pip install requests (2)打开ide的相应位置(以pycharm为例)
2.设置网页
3.开始爬取
爬取网页通用框架定义函数=>设置超时=>异常处理=>调用函数
爬取代码:
# 导入Requests import requests # 爬取url url = "https://www.douban.com/" # 定义获取Text内容 def getHTMLText(url): try: # 设置请求头(豆瓣设有反爬机制) headers = { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' } response = requests.
GBK编码范围:8140-FEFE,汉字编码范围见第二节:码位分配及顺序。
GBK编码,是对GB2312编码的扩展,因此完全兼容GB2312-80标准。GBK编码依然采用双字节编码方案,其编码范围:8140-FEFE,剔除xx7F码位,共23940个码位。共收录汉字和图形符号21886个,其中汉字(包括部首和构件)21003个,图形符号883个。GBK编码支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年12月15日正式发布,这一版的GBK规范为1.0版。
一、字汇 GBK 规范收录了 ISO 10646.1 中的全部 CJK 汉字和符号,并有所补充。具体包括:
GB 2312 中的全部汉字、非汉字符号。GB 13000.1 中的其他 CJK 汉字。以上合计 20902 个 GB 化汉字。《简化字总表》中未收入 GB 13000.1 的 52 个汉字。《康熙字典》及《辞海》中未收入 GB 13000.1 的 28 个部首及重要构件。13 个汉字结构符。BIG-5 中未被 GB 2312 收入、但存在于 GB 13000.1 中的 139 个图形符号。GB 12345 增补的 6 个拼音符号。汉字“〇”。GB 12345 增补的 19 个竖排标点符号(GB 12345 较 GB 2312增补竖排标点符号 29 个,其中 10 个未被 GB 13000.1 收入,故 GBK 亦不收)。从 GB 13000.1 的 CJK 兼容区挑选出的 21 个汉字。GB 13000.
三目运算符的返回值
c语言中:
返回值为变量值,不能作为左值使用。
c++中:
当作为左值时直接返回变量本身,当作为右值时返回变量值。如:
int a=1; int b=2 (a<b ? a : b)= 3; //在c语言中此句报错,而c++则正确 注意,如果返回的值中有一个是常量值,则不能作为左值使用。如下会报错:
(a<b ? a : 2)=3; //在c++中会报错
前言:为什么使用异步加载这里不在赘述,大家可以自行去百度或者去高德官网上查看官方的解释官网地址amap-jsapi-loader 是高德开放平台官网提供的地图 JSAPI 的加载器,可帮助开发者快速定位、有效避免加载引用地图 JSAPI 各种错误用法。下载 npm i @amap/amap-jsapi-loader --save 再需要使用的文件引入 import AMapLoader from "@amap/amap-jsapi-loader"; mounted () { this.getGis() }, methods: { getGis () { AMapLoader.load({ key: '你自己申请的key', // 申请好的Web端开发者Key,首次调用 load 时必填 version: '1.4.15', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15 plugins: [], // 需要使用的的插件列表,如比例尺'AMap.Scale'等 AMapUI: { // 是否加载 AMapUI,缺省不加载 version: '1.1', // AMapUI 缺省 1.1 plugins: [] // 需要加载的 AMapUI ui插件 }, Loca: { // 是否加载 Loca, 缺省不加载 version: '1.3.2' // Loca 版本,缺省 1.
字母阵列(递归解法) 仔细寻找,会发现:在下面的8x8的方阵中,隐藏着字母序列:“LANQIAO”。
SLANQIAO
ZOEXCCGB
MOAYWKHI
BCCIPLJQ
SLANQIAO
RSFWFNYA
XIFZVWAL
COAIQNAL
我们约定: 序列可以水平,垂直,或者是斜向;
并且走向不限(实际上就是有一共8种方向)。
上图中一共有4个满足要求的串。
下面有一个更大的(100x100)的字母方阵。
FOAIQNALWIKEGNICJWAOSXDHTHZPOLGYELORAUHOHCZIERPTOOJUITQJCFNIYYQHSBEABBQZPNGYQTCLSKZFCYWDGOAIADKLSNGJ GSOZTQKCCSDWGUWAUOZKNILGVNLMCLXQVBJENIHIVLRPVVXXFTHQUXUAVZZOFFJHYLMGTLANQIAOQQILCDCJERJASNCTLYGRMHGF TSDFYTLVIBHKLJVVJUDMKGJZGNNSTPVLCKTOFMUEUFSVQIAUVHNVFTGBDDARPKYNNCUOYUAZXQJNOEEYKLFRMOEMHUKJTPETHLES FKVINSLWEVGAGMKVFVIUBMYOIAFHLVNKNTYKTZWVXQWRWIGPENFXYDTKRVPKRTHMGHVYOCLDCKMEKRLGEKBYUCLOLYPAKPFSOREH KWPUOLOVMOFBIXYACWRDYBINTMPASPCEOKHXQIGBQQMCEOIVULIEOPFSCSIHENAJCVDPJDOIWIIULFDNOZOFVAMCABVGKAKCOZMG XWMYRTAFGFOCNHLBGNGOXPJSTWLZUNNAGIRETGXFWAQSSJPFTQAXMTQWMZWYVEPQERKSWTSCHSQOOBGXAQTBCHOEGBDVKGWJIFTG ZWWJEIISPLMXIMGHOOGDRZFTGNDDWDWMNUFWJYJGULPHNUFSAQNNIUVAAFZIAZKFXXNWCEABGJAUMGYEIEFVQXVHHHEDYUITRCQB XZHDPZQTOBECJVBZLACVXACZEDYOGVAVQRNWEOWGRAQYUEUESTEDQTYJUTEFOOITSHDDZHONJGBRCWNEQLZUTBNQIADKNFIOMWZR EBFKCVNLURZSNPOLTISRPDTNUMCDGKTYRGIOVEPTUTSBAWQKWWEUWIWHAANUZUADGZEATZOQICWFUJTWNZDBKLQNELWVTBNDLNFH PESISEATZNCDFRMXBQUKBFTIGYSFCWVHPMSUSDKPSCOMVLDOHYQVFHAJKRDTAVLIMNZBZSMLMRTLRPSLAHXDBASDMWAAYBPYVJZF SCCWYHLQOUKBMCEYENQNJXFOMOOJMTKDSHJJOHDKEGATFZHGWJJAZJROWHAZUFGEQKPYXLCAAXHHQBDALPYUDWZQHBASBBCFGQCQ ZKNXUBRYZVSPQHOVLAEUAUITMPWXNXJQVIBJVBCSVXKWFAFRPRWOLYVSDVTGGOFFMNQJZOBUDJLFHJTCYMPNOBHQJHGKLIKLZMLA POCKVEQXUAVHERIAQLGJHYOOVOMTXQFRTBFSETOZICPCHZHFBWNESVJJLSVSVOOGYYABFESWNWDNYBGBNAKRCFQMTCUMIFTESVIN JCAULIQRYUMAMAOVVWSEUTMECXSDTONRMMROQUISYEURSAYNZUVOPXLIFBDOHPXMABBLEQZGLJXQJOEYYRRRCFTEZQAOIWKRJQDL ZNUUDWZXZZURPMHGXQGNQBIQWWNERZWULSAPIBODBFFQQIHEQKCKLJYQNXQUTAAYGRBXSLLQNOQPZJEWHETQHPXJANMJFOHINWOW KJGAWWFSVIZHFNUWBLWYVPIWAEICCAHOEIWRADSLOZGPSVGPUBUUQAVYCHOIGINKYKJABWAQCZCXOBKTNJZQRHLUFKQLACAAOIWJ SIKWLXQHKDFJVGBVXWDWJKUSFRQRTDJYQMNFOQQALHRLMHSDMCFLAOVKDMTKMTPVTLAZLYJNJXZCFRHHSDIXYUUSVIMIICLUJHFW JHWUSMCFYHPIXHAPBBSHYDQCKVGQFTENLVERFVOVDCLSTQFUSEPUMTFODLZLYQXDOXAEPONIQWTDWSAWBNSZYACGSJQSHAUMIKXT MVBNFXMFNPAYSODPXEAYNRKTEZJWMUACSIUYPIORUFPMXAOZZJPJXPFLNSKNIAMETMOVULZPQIJJIRCSYQXOEVRHCNACSBRHKYNW KGKBTBHGWKVJYZCOVNSKUREKZEIWVLOHAMUAYKLUGHEUESICBZAHURNTJAECTHRNKSIJQFIPVZANSZYSPJWHPKHCAPEYWNXUYQSD RRRFYQFIQSWYRQTSNGNUFOBMSLGAFWPJGYEHGASFKTJCCZPXFIQLSXNKNWCYVTETOAPCOZJNHEWOCCAWVDEZUQCLLAVUQJJTQCKJ NMBKMUENVGXXVMQCLXPJDQIQCFWYADIFDSGINGZDJYHPUPXVRMWDIPJRWPNRYOFGYYPEAVKDEMLYRRRMNCRQXPTDSQIVKKGJWDEF SBAEKIFZCKDOMIQKBDWVQGBYWPDIBOLQUGAQRXLJDAZMXVZXYSNWEWTNZKYREMBEUHOTFOCKEJSXCMUBCKXNGQXTQJRCRCLWJTOI YXBFBIBRAAFNPKBLTSMCFERZURZNWHMOEHIHNQTBWXNPJGIDYDPRGEWACCBULJRACOFLANQIAOIHMYCNQHVKXSIGAMWAHUSNBBTD QDGPTRONXHAZWOUPNBFJFEWAMFZUQZFDKAPNJUBQPWBPYGPZHKUDZZDLCCWHGAUKJCSLLFWGPYJKJQBNLCZESOGXXSQCVVKVRVAW NXPGQOUEFLUZHHSAODIWEPZLXVQLYGVOOVCCREDJZJOMCSCFFKEIEAVCTPUZOWNOLJHGBJHJFBFFORGXOXXFOCAGBWEFCIDEKDLB PTXSUINQAJURNFQPMMSPLZTQAHCIOFJUEFFZGIHTSJNIEXQLLHRQUXXLLORJEHGQJOXSLIAVFPEJNGMMVAXDDMPXLOSTRLLFLYRM JQNCLENGTROIKDWBMXRNJYPGZRQOREPJJPTXKVVKPYYZENEOIQKZOPXAYGFXORXRIDGATHMZFDJIOIOKVDJBHSXQMYCBYFGXWHLH CITGTILGPGBHZMNWWHXEFPGDPJUVFBJKAQWACZHPRPJYCOLGZTBDCVHNRSUAJUQAWAPMQJDQIFPZQZEONWHIYKMXDZOMVETEFJRB RDOTIDCFEESOKYPYCGQQKOGPMGJRITSVTKOKDSXLRLJRRHNFRFXCMDNQMCEGZFJWHZOAFBQXXPXNBSWTSUYPAWQRHAUGLNPBRSJT HOWRIUGMOQTUYIHDWJRFBWWKWYKCICSVBVKTBIIWGFSVIFCTUKIHHUUISCOTEOYRWQXTAEBXQQOLLMOALNIYVCCHNSWIKHMYYNZO OFRIYYXPPSRTPAYMUJSSDILKIZAYSEIOLANQIAOVKARDPGVFCSYBSNHAPGTIKLAWTTKOEADWRLAACAAFYTBTNSGFTYLYUHJXBMMA NJFTMLUIBKDPWBXQOMBVQXCZOIREHRSZCSJOIVBXWQIBUTYBQNTZRVROHGOIZYAJWXLEATLOZJIKJMIHSLGSVTCXJWIOOGWSERRQ DBQJNGBLRIYFIKHBEYOZQBOAGGNIZKFDHWXCFNJLBQXVLHIQNIBZSDLTTRERHNWCMLJCVBBGGAQTPUQHIRABXPQSYGSDVMBNNDFG KPLFUYXHYGOCZPPXMWCZYNKCYBCRZVKFBHQXPGPBZFTTGEPQTJMOFHAYSQQZDMQECGXOXADYHNNXUKNBXZBYHBOULXNBJZKIZREF LVHAMSNXJOCVRPVGJUWXFVOCUCLCZDXRPBBDRLRAVVNLOZWOHWMXYSNMXAKJYWYGILNGUJGIPKAUDVANZLFWKUWWUSQYBRCBVDIJ QCXPLOTPPGXCUZOUSSTXHVMLHVMJTUSSOPLRKEBQSGWNGVHKANVZWYQHSHLIPWSYCPKTUKPMWPLVFLLAHXZQANFXHFNYHIQVIOYN ZPTJJCBHXPSUPOMNRVCKXSUFCNRCRNCPTPGIDQOEQUDFNUNMJPOEKVIMUJAJZOUKMAFSLDWYMCHTSNJYUDJAHQOIXPYSRHVAFFCR DCGMEEWXWMNOSSJNIZCINRHENPPPCYVFWYCONOPKXMFZXXIHNXIGAHAMHSBRESOETGVXWDNQLGCEOUDDJXHQIVCHRNKBFFEWILGY SOAIQNALXRBSGAQIDQVMVDKVZCPMJNXKXRXPFZAUVQPBHHQKTPDSQROLQTUGMFQRWGVEWCYPDYDZGNNNUFKJUEHJKPLIQNRQYXHU GKGWUCJXUKAEHLRLNDFUQPSJAZTVJRXWXQVBMRJXULEMJJPDCVTOWVFDBVLSBHZRRQUVMUQYKTJCLSGGHGCPHPHMWYAECLJIZUWV QQNKPQRJMSOCEAYDNKPHVEGKAGCKAPDXTGVXULHUXHJPDXCSKQTCJENVTZTMRUENCSWHBEORALSREBWAJEMQDXMRKGHJGICDHKHY YNSDSWDRLBBFUFVVICMGUCGBSVDLJNXGKXNFGVLKAVBJRRRUHKRXTPBJAKIEBAVMDIOJLIUDABCGNPNJIYBCXMOOWKRPHPYSWRDC BORWTNBISSLTVKBRTLWKRNCEDCNEGCIYJIPDICFAVNOISYAHWBLGMNFKXZYTTWJOBEPNMSJEJMHXVPGOJOLQQQVXFGEULANQIAOD OQETOJHCZXGTUKIWGMEVVMXCURISUOFQSAWZWDMZWVYHZMPEIMWKJDGERODVVUXYRTYLCRGYQQOIOFZSSZRAIESWBQOAIQNALJNR HEYWHPLLPCUEOCBAOWGAYEJZQJHLVNMVQNSQQGGUBOIMDPFLOVSQGBLYAMBRYJDVOXOQINLJAVYALAKHPKOYNKGXIISSJNGKHYMS IQVRYKXCUFIRNENEXFJTMOTJWYXSMTDHHPRHWIXETWVVIXZELKLLWRWQYGBCGJNYSUQEFCOUDNIJMLJNLAWSYJGULKBCFPYVSSMW WQHGWRQFWFOTGPBBSJBDUKOMBXNRPIMCGPGVZFADWTBVIEMVTBXVAFQDDMJALCOMZTXUFFKBQQZDFAMTFWEXTHBKNWRLUVITQXLN OPPJQKNGHWWPENVQIABJCQNKXNPWOWRFEOKQPQLANQIAORGGOLAYCEGZBHZVLPBERWYIJNJUNXKULUQOJLTNRDZDEYWEMYCHJLLB LJISOAQLXJEFXVTOZSICOLQIJEXUANJWIFSIMGUQWHBXUDWOEILYFUZTGDZDSPLZPDPXBLFAXLEFQFEPDSJQWEQMXKKHCXHMSATM UMUJENPBYKZLWAJAXJKDIYCBREBPOETQHMRHLKSEZUIPRGWIZDDQLSJAPKPBWMJMPZWLNFLFCQOCDBMLIHIYCXUJLFLPZVGWBKMY WHZJLKEWUPETVUREKVKCLBNYFLWCERVIPUDINNWGQTUHWXCTDVTMYATYUZLMVLOHKBOGIZCQDOWFBCWJAVUXYUEVRKPOXCKHAWZC RPLNLCUHJRADHJNSDPZXIKXGUKEJZCFJQASVUBSNLXCJXVCJZXGMRYRLOBCNGPDUJQVEFKMYHNZGZOAIQNALQDHTBWJXPKJLFXJY MKCEZEDAFGSOCORWJGMOKWPVVBVDYZDZHPXFWJBDELHPGOQHMBAHUUUJMGXAEKZCTQTBXNVYUIQUVZGXSKQXJWRUPSFIJDYIAORC GKFKQNXPJWOPPBTUKTHUBIROSYOVFEMJBRREWICJPCIOSTWPAUSKTRQULXPWRSXHSRYBCWYCYOTCTPFSQLDIILIGMEVZKYSOYRPH SFDSCSMLLNARCCGCBJOGZAEQTGNGSFAQIXLPDBSWZDTYVASYYPVBRFBTIAGGWONGSVKCJDBBLYKAIOXUATGMALZXFOHZFTXALCFU CUSSTLCRYPDTFSFJFENKJWTEBOBEPLSNXLALQWCKSLVMZQDJITHZKVCCQXTEXOSVAUFYAZXJUOAPPVEEWOIIMOSZZMCOQBRUXWKG PDOFSCKKJJTRYRWGLEZODQTJSIMXIAOLNMLPHBAYLPTTLPYWILSEIIQVSXNHIJEORVCNJHYXRBIZZJTADGMRTSXVRXYGVQQNUEIC IHNJOQXUXTXFPALCHOELNVMWDWQTEARUKPIFWXJSMWZLMNLAODUTKNZDYRFRLGBLIBGIBXJBOYMLYLANQIAORORYKSJPOOOAMVRN IWIUHLYJKTQGVJBDPROSRGZUFITDIBCDPICNEFIGHWGSROWBYKUCLCQYLJXLHLXSCTJWKDLHHMLDBZCVDKPXYYASHUUMUJMVSXAD GXOYXQFEBFIEJJLHBNGSYALOUXNQBXXZAAZJXENJJVVGFVHOTKSLEGLJVSJCQHSSZFEIOGBOGWSPIRENQAAWRQFBEFEXBKGMSTRC PYIANSGMNKBCDPHWDUPKICQEUDNZPNGRUJYSZIRLXGXXITAFBCANGDLVAQLDPVTJNSAUZMBBNOBBOERSHQIOLBVTSPPJKVCMXUBS IKMDIYSNCJZKJKJQMTIKEPRUNAHJUSWJHSLWIVWHYAYLOIOGSZVWKQWXZDBPHWZRAIPMXDJHBIISVJWVEVZAEGAKCYYMNZARBZPC DLDFVQDFDMVHYVOWEKMFKWUXLTPWIVKPRZZXOLMDAPAIQEKJHCHYAGJDBOFWDGNEGQGOOKWSKLTLREMGGTVJFHAIBCQKNZVRCZYS FBQASGNCCBBGNKJHCDBTGBIIWKMPHDABKEWDEPYEAVKNMPATUZZUOEHGUGAZNECSGUCIIJPMMRAMTVADMTCRJCBWDLWWFNFOWMVZ XFJFBGDAVGGAIZHAUIYENDZTRUWHPQUFWCHOXNCWYNAWVPLBLNQKQDTKQQKXNFXCTBGRWUZFHNRBDNLNKQVOLLGBBJQIYOBCEIKO CURAGWXMLYBSIZLAXFONZZMQMRNNSRQKRHQGFGZUTLONAYRKSSOWAMKZBSGOOYQDPTBHGPBNQEDCZHRTOXREOFJEKJVIZXZBCJPN KGYBZTZRKOGBETJRUWRNUCIFKIMCZGYTZLCZYGCGKVZRJIFZQIQPTCPPUHYWIXBOFFGSGSAIMNGKKUUROAVNJUQQNSWJRZIZEHAF DDAOBVCPOVODVJFLSNPJXHWQBHILWZAHQQMTQASNADZLZNXJLJMFCOUWOZJCMVVTYCKTUBABWLCEBNYWAMOLNBQQYBRUJCQCZALE TVVRPMYFIKINHIUEJBDLTCUMMUWICIUVCZNIQIUEWVAHLANQIAONMEYJWPDAFXVNOSOFDOCESSLGZPTJINBUAFWWWMPTYALZIGVD DCZGKILMBFXIQQFEKJBIUDEMIFCANVGNYZAYSQFMNNQFEPZFUUVGTBKSMDXITBLANQIAOQUKTPNYPOWSQQYWWMJHSDYVFDJYXBAF VGYXAMDRRZWVIHNQPZZWRNWBTROOJOLNUGXBILZKQEGIQSYGKZGODPWBJSCMRRWSSQURUFIAFQGEZLGZNOEQMNQEYUKPEQPPVAMO SYSFUAJFKIPUJVQSZRWQCJYAUMLDDNOKODDXIEQIFLANQIAOZFUNKUBVDBLMJOAUTVCZVLKJRQIORQPGAVCEYVNYUZHXILHERYEC GJEKWEKIJNIWUXZNVIWIAANHIOSOLATSQFSSCTAKESUTSPPYFHEHLVLIBJZEEBCOWMNHFTZMAPKFUPNFLTFFJQRVJHAKDVMGGUIX KAKXXNKSOAIQNALLWKWGVACYWBQEVTFSEUCYRORQTHWFUJFLQHONWZEKPLSNPRPBOMOFFCPMKXFZBKIERBKDYFKYUEYVYRPMOAQI WNICDLQKZXGTKDLIEFBGELGJOAIQNALXZLGGDQIBVEULDPBWUJNTYOKFBPGMAWRRUJPPIGYCNYURNOSQRIRBAZAGWWDUHAAZQWPT KFXZQXRMKSBUXWOUVVHSJWTLKZELGXMMAIDSJIWGCJPCBWZIEKMNUPUAFHTUMOZKJWVTIAQNOHELEMWGKJHKPNJVSRVHAUFXBUOU XOWCZJYQLXJRUOOYSKDLDXKWTTJBYBTLKSWRUYPOYTPBGUJXBMRWNELBWADCSZDAEEFGPVRHNNLBFDDXNPDXLKQUSJAZDEUDBMBD QIKYEKMVUHGGWZDKXFVQQNECZOAWCFUBHQMEPEPKEFSDBAYJQOSGAIHRBRAUKLQRANKMTTIOJDDXAEWTQHIYSGRRMEFTNNWCLZSI ZFUQAQCSFNVUQMKUQWBWFQIEQVVXPOSVIDTUOBLLTGHQKEMSUWWHWRISLGRDPPQPZBANSGDWXKNYTKMWECPMPDYSCJZXPUKPWGYI CNGVLBSCBHRLJARWSRENGHYYQDKRATERCPEAOPAJZUMOYIDHVPDMQPKKHCBAMRBGEIEXXJALMCXKPUGXYVINRORFYURXAMOJCBZQ YJHHAWESCLMDIHVYMLAJZQSYTDEURWYPOLJCAKIKSATGVIALBLWPPKDEGSPMRLDBQNVPPCLQXKUQLQJERMYFGAETUATEBQZUMGUN NBWUBVXYDFPLPJYLIDFVTVKKGFWMXVINLJUDUPABTSBJAJENZSXIMUJQWPEZTAVDMBBHFYTJKYFXIXQTBTTQIKQXQDPWYNMXRQDJ OGWLZQUBJJHAQNPVRGHGPNMMJPIDGANYEEDWYPOLKLNEPYSRTQYCJLSWFRJRRGGSNSDHIXYYSNAKKBWQDDGYYMOGPUXQEUSAPSOU CLLSELRVFZUFYVTJQKCQHNICMERWQFQNPVRPIIYKHZWJYJAFCLNSZXUHSPOZWQUMJHLKKYJENVZOCSWCTPYWIZONUUCLSUROGAYS AZGNIMXPLPCEPULRRBHHQOBELHJZPUQAMWUASVKDXVEWAOFMAYSJFXHCNEUXUQWUESFBRUFZQLKKWHCHKOPLECCBYSLECAEZIMMI TUUEOCEBAUKWLTSYJJPLZTIARAOZXKYYWIOXBBTZZCSAULKNEJWVQXIKUWBIWVHGNTHVBAWAVPGLHSDJDLPVHHHUNVSFKXARXLVQ EMVDFSLANQIAOPTLFLFRKGNUZCTXWCAXHECTZFHWUFENRGQICHTYLSHZWIEGLNVDJZOMTKAAUWOHVOVOCTUKOSINSAYIAEUYORNA VGPRMLCAQZIPRFQOZMEFTQZYVOTVFNVOIQSJCIPPQXQKJIXICUIGMHAJJMSXENCBQFIJHNZXIQMWACKDKQSEWWKMLOAUPFHAZGRY SQWQMRSQBGGKYKGWEZYRIHWGNXRPOUMFSFGTYDLUDWPWAVQORTMQUXWKUQVNMDPWQFIZPOIHCJATODRQGZDMQXZVNXXVEJNGWZOM PVBGZSQPCELDIWDHOQWAUHILGLPYRIICTLFSOYKQZYZOCIZPTECSWOODGGBDTSGIMYGMVPJPRPEVWOOKYFWRGXHWUCRQNYJEMSYL XWOFXFVDXPTHYTCEGMODCILAHYBREZVVHOUPZKCNHUEVPMKHUBNRPFMWXVQACVZCALZLYMZSBLCEASPMIEFOTGKMPGWYQADSNDPR QPHAVLZDZLKIEISFLLVWXAVBZLZIJRHGROUVGXRDLUJAXNHBBZYNCVERJGSKLWZEKGJBCWMSMLYIHZFFMIOGVIMZQBSRHQWAADYN MNXEGTDXCDKIUDOISQXEUJWETPELKBCYFSDNJQWNNBPYMWBUPQBAAINMYZOYCEGNLFNNHZFEMSQVXJJGWBCRAVKZFWFBKMBRVBFD HKACSZIUWUXLWKFPKOCUQJEPQDZCMUJFLVCLIOQQRVKSWFIAKNHMRLNJTKGVNTGLCVPVMBLJANOBCXUGVWBJYSIXZQVAVFWILWFB QWNLTPMCYHRSKVHXLONRANWKWXUTHYQLIOFKGDBMSWDRCYRKVSAGGRJMWQYQFLMUIGGCLAUQAACTYLPZEOJBHMWRKHCRXGTGRMUP CPQKJRBLYDNPUGHCRBVYBAIRVCAWLBWVWCMKNBIRKJOUGYQEBQRHDSTWXDIWGRVMLIJFBWHLHCDAAVUDLZSCGQNOUXVUIVIZZZMD NMHGYPFUUDWKQGTAKKGCDFJFYJFNRZVXDPGZEAMWQVQZODKTXHIYFVKJSSAWVHYCUCZMLLBPXTILDYJQEMWDRUFKISOUVPUDTYPB FDAQUBXHUJYTAYNWVIJNUSQDTQDEMUAPWXRYUWONTBDZCHZOUEGPMWEZTQWWSHAYOBWVTDIMZYNVNZKUHOFCQKPHJXWNRCGUJEKO WSDAUGUTVWCVHEMOIRJJGTANUWTSAIXXEVZTBDHPGSRHHVWCDZVZYRJTLONIJVXEATHQXOUKBIGZONFRSZIOGWNTYAJYLQCGEOWY package _09第九届; import java.
本来想利用ofstream记录数据,但是调用的时候直接报错误,网上看可能是重载等错误,还有的说是没有#include <string>头文件函数,找了一圈尝试发现最后也没有解决。
最后发现都不是上面的问题,可能是因为版本问题(VS2017) 缺少相应对应的文件,我加上头文件#include<fstream>头文件以后,上面的两个错误就解决了。上面的两个错误主要还是因为没有头文件,具体问题具体分析,不一定对应所有的答案,大家自己甄别。
附上:
ofstream的使用方法–超级精细。C++文件写入、读出函数(转)
C++中输入输出流ifstream/ofstream用法总结
一、运行环境的不同
H5的运行环境是浏览器,包括webview,而微信小程序的运行环境并非完整的浏览器,因为小程序的开发过程中只用到一部分H5技术。
小程序的运行环境是微信开发团队基于浏览器内核完全重构的一个内置解析器,针对性做了优化,配合自己定义的开发语言标准,提升了小程序的性能。
二、开发成本的不同
开发一个微信小程序,由于微信团队提供了开发者工具,并且规范了开发标准,则简单得多。前端常见的HTML、CSS变成了微信自定义的WXML、WXSS,WXML,官方文档中都有明确的使用介绍,开发者按照说明专注写程序就可以了。
需要调用后端接口时,调用发起请求API;需要上传下载时,调用上传下载API;需要数据缓存时,调用本地存储API;引入地图、使用罗盘、调用支付、调用扫码等等功能都可以直接使用;UI库方面,框架带有自家weui库加成。
并且在使用这些API时,不用考虑浏览器兼容性,不用担心出现BUG,显而易见微信小程序的开发成本相对低很多
三、获取系统级权限的不同
微信小程序相对于H5能获得更多的系统权限,比如网络通信状态、数据缓存能力等,这些系统级权限都可以和微信小程序无缝衔接。
而这一点恰巧是H5 被诟病的地方,这也是H5的大多应用场景被定位在业务逻辑简单、功能单一的原因。
四、页面体验不同
H5网页需要在浏览器中渲染,会给人明显的「卡顿」感觉,面对复杂的业务逻辑或者丰富的页面交互时尤为明显。
而微信小程序,它的代码直接在微信上运行,省去了通过浏览器渲染的步骤,因此,在微信中使用小程序,才会比H5流畅很多。
除了首次打开需要几秒的加载时间外,小程序各个页面的切换、跳转等体验已经媲美原生App,有着同样的柔丝般顺滑的效果。
文章目录 前言一、功能分解1.布局2.JS功能实现 二、例程下载1.引入库2.读入数据 总结 前言 html音乐播放器练习小例子
1.调用网易云的api查询歌曲信息,api不是官方的,而是github上一个开源的项目https://github.com/Binaryify/NeteaseCloudMusicApi 2.这个项目是基于b站的一个教学视频做的,基本功能都是借鉴的,然后在上面加上了自己的功能
3.现在完成的功能有:
1)通过调用api搜索歌曲,歌词,评论,专辑
2)歌词滚动播放和逐字显示
3)专辑封面展示
一、功能分解 1.布局  从图可以看出来整体的布局情况,下面挑一些重点的讲一下: 输入框配合text-indent属性,可以让输入的文字向右偏移,如下图,红色的为偏移量
.search_bar { margin-right: 23px; width: 296px; height: 34px; border-radius: 17px; border: 0px; background: url("../images/zoom.png") 265px center no-repeat rgba(255, 255, 255, 0.45); text-indent: 15px; outline: none; } 2.关于输入框下拉显示的问题:
<input type="text" autocomplete="on" list="url_list" v-model='query' @keyup.enter="searchMusic()" /> <datalist id="url_list"><!--输入框历史记录--> <option v-for="(item,index) in searchHistory"> {{item}}</option> </datalist> 需要在input标签里加入list属性,另外下面加上datalist标签,用v-for循环把所有历史纪录都显示出来,有两个注意点,url_list是用来关联input和datalist的,而真的搜索记录需要自己在js里存起来,如上是存储在searchHistory(js里定义和刷新的)里的
3.列表每行背景颜色不一样的方法:
/*奇数行显示不一样的方法*/ .song_list li:nth-child(odd) { background-color: rgba(240, 240, 240, 0.
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《更改电脑用户名(可更改C:\Users\用户名)》, 一起来围观吧 https://blog.csdn.net/zhang_jinhe/article/details/40624847?utm_source=app
# 全局安装terser命令行工具 npm install -g terser # 使用terser terser ./foo.js -c pure_funcs=[console.log],toplevel=true -m -o bar.js # -c即compress表示普通的压缩代码 # pure_funcs表示删除代码中的console.log方法 # toplevel为true表示只在顶级作用域压缩清理变量 # -m即mangle会压缩变量名等等 # -o代表输出路径 const TerserPlugin = require("terser-webpack-plugin"); module.exports = { configureWebpack: { minimizer: [ new TerserPlugin({ terserOptions: { compress: { pure_funcs: ["console.log"] } } }) ] } } webpack插件官网:https://www.webpackjs.com/plugins/compression-webpack-plugin/
前言:公司项目使用vue框架搭建,但客户方需要使用antd-design-vue这个ui框架进行ui视图,所以我们在搭建的时候碰到了这样一件事情,使用的组件都是英文状态,比如
我们想要这里变成中文的 页 怎么办呢
1.找到官网
https://www.antdv.com/components/locale-provider-cn/ 备注:官网显示的是有这两段代码,但是我们并没有下载,所以会报错,删除即可
import moment from 'moment'; import 'moment/locale/zh-cn'; moment.locale('zh-cn'); 2.翻到底部,找到LocaleProvider 国际化设置
<template> <a-locale-provider :locale="zh_CN"> <App /> </a-locale-provider> </template> <script> import zh_CN from 'ant-design-vue/lib/locale-provider/zh_CN'; export default { data() { return { zh_CN, }; }, }; </script>
1. -Wl,-rpath-link
该配置为 “ld option” 其中,-Wl选项告诉编译器将后面的参数传递给链接器 在链接时指定库的路径,不影响程序执行时库的路径 2. -Wl,–rpath=.,–enable-new-dtags
该配置为 “ld option” 链接可执行程序时写入路径信息DT_RUNPATH 在opensuse上指定-R或–rpath会同时添加DT_RUNPATH和DT_RPATH两个section。对于其他的发行版会只设置RPATH,只有在指定–enable-new-dtags才会加上DT_RUNPATH。 值得注意的是:如果设置了RUN_PATH则完全无视RPATH,而且也不先看自己的RUN_PATH,而是去看LD_LIBRARY_PATH,没有再去看RUN_PATH 3. -Wl,-rpath,
该配置为 “ld option” -R(或-rpath)指定程序运行时库的路径,当指定多个动态库搜索路径时,路径之间用冒号":"分隔 -R或-rpath选项将指定的路径信息(DT_RPATH)保存在可执行文件中,运行时它会直接到该路径查找库 写入的DT_RPATH信息可用 ”readelf -d a.out“ 查看 如未找到被加载对象的RPATH,则递归查找其loader直到链条的顶端(可执行程序或被dlopen打开的对象)的RPATH 4. D_RUN_PATH
该配置为 “environment variable” 在ELF 系统中, 对于native linker,如果未指定-rpath-link 和 -rpath,系统会使用该环境变量指定的路径 5. -L选项
该配置为 “gcc option” 用于设置动态库的搜索位置 仅在链接时生效,不影响程序执行时库的路径 6. LD_LIBRARY_PATH
该配置为 “environment variable” 全局有效,指定链接时和运行时库搜索路径 7. /lib
包含许多被 /bin/ 和 /sbin/ 中的程序使用的内核级库文件 8. /usr/lib
被/usr目录下的程序所使用的系统级共享库 9. /etc/ld.so.cache
ldconfig命令在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*) 搜索结果按名字排序后写入缓存文件/etc/ld.so.cache 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但之后要调一下ldconfig 往其他目录,一定要修改/etc/ld.so.conf,然后再调用ldconfig 值得注意的是 LD_LIBRARY_PATH 的优先级是高于 /lib 和 /usr/lib 的。
关于虚拟机可以联网,主机可以联网,但是主机却不能ping到虚拟机,也就是主机与虚拟机不通## 初识虚拟机
解决办法:
1.电脑下方的搜索栏搜索“虚拟网络编辑器”,点进去进行更改设置。在这里插入图片描述
2.把“将主机虚拟适配器连接到此网络(v)”勾选,点击“应用”和“确认”。
3.然后你的网络这里就会出现:
4.到这就ok了,试一试吧。(本内容借鉴百度回答者“学点笔记”,并且亲测有效😬)希望对屏幕前的你有效,三克油。