Amp

一个二叉树的实现

邮差的信 提交于 2020-08-10 20:58:10
package mynode; public class Node { public int iData; public double dData; public Node leftChild; public Node rightChild; @Override public String toString() { return "Node{" + "iData=" + iData + ", dData=" + dData + '}'; } public void display() { System.out.println(this.toString()); } } package mynode; public class Tree { private Node root; public Tree() { root = null; } public Node find(int key) { Node current = root; while (current.iData != key) { if(key < current.iData) { current = current.leftChild; } else { current = current.rightChild; } if (current == null){ return null; } } return

BeanMap进行对象与Map的相互转换

大憨熊 提交于 2020-08-10 18:50:37
javabean与map的转换有很多种方式,比如: 通过ObjectMapper先将bean转换为json,再将json转换为map,但是这种方法比较绕,且效率很低,经 测试 ,循环转换10000个bean,就需要12秒!!!不推荐使用 通过 Java 反射,获取bean类的属性和值,再转换到map对应的键值对中,这种方法次之,但稍微有点麻烦 通过net.sf.cglib.beans.BeanMap类中的方法,这种方式效率极高,它跟第二种方式的区别就是因为使用了缓存,初次创建bean时需要初始化,之后就使用缓存,所以速度极快,经测试,循环bean和map的转换10000次,仅需要300毫秒左右。 所以,推荐第3种方式。 以下是相关代码: /** * 将对象装换为map * @param bean * @return */ public static <T> Map<String, Object> beanToMap(T bean) { Map<String, Object> map = Maps.newHashMap(); if (bean != null) { BeanMap beanMap = BeanMap.create(bean); for (Object key : beanMap.keySet()) { map.put(key+"", beanMap.get(key))

verilog数据缓存16个字节的处理方式

自作多情 提交于 2020-08-10 18:17:58
今天在一段代码中看到这样的做法(红色部分是我在此加的注释): wire [7:0] uart_dout; wire IsDone; reg [4:0] uart_count; reg isDone_ld; //将IsDone延迟一拍 错了,本项目中其实是上个时钟周期的IsDone wire isDone_pos; //IsDone在A时钟上升沿之后锁定为1,并且是一个肪冲,下一个时钟上升沿B给其它逻辑判断之后就会==0了 //当A之后B之前,isDone_ld==0(注意) IsDone==1,所以isDone_pos==1 //当B上升沿到来的时候,此时刻isDone==1 //当B上升沿过后,isDone_ld ==1,而且isDone也==0了,所以isDone_pos==0 //总体来看:当A之后虽然isDone==1,isDone_ld==0,但isDone_pos==1;当B过后isDone==0,isDone_ld==1,但isDone_pos==0; //即isDone==1之后wire类型变量isDone_pos也==1,下一个时钟上升沿给系统逻辑判断之后就会再次==0了 assign isDone_pos = IsDone &(!isDone_ld); always @( posedge S_AXI_ACLK ) begin if ( S_AXI_ARESETN

cocos2dx在C++层屏蔽emoji表情

China☆狼群 提交于 2020-08-10 18:13:04
在某些时候不希望用户输入emoji表情,所以需要将其过滤掉,屏蔽字符串中emoji表情方法如下: string check_input_str(const string& str ) { if (!str.compare("")) { return ""; } unsigned unicode; string ret; for (int i = 0; i < str.size(); i++) { char codePoint = str[i]; if (codePoint&0x80) { switch ((unsigned)(codePoint & 0xf0)) { case 0xf0: //0x9f -> emoji if ((unsigned)(str[i + 1] & 0x9f) != 0x9f) { for (int j = 0; j < 4; ++j) { ret.push_back(str[i + j]); char a = str[i + j]; } i+=3; } break; case 0xe0: for (int j = 0; j < 3; ++j) { ret.push_back(str[i + j]); } i+=2; break; case 0xc0: for (int j = 0; j < 2; ++j) { ret.push_back(str[i +

C++ 九阴真经之控制反转 Ioc

送分小仙女□ 提交于 2020-08-10 17:47:38
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup) 实现代码: #include <sstream> #include <string> #include <unordered_map> #include <memory> #include <functional> #include "anyval.h" #include "noncopyable.h" #include "singleton.h" class IocContainer : public noncopyable { public: IocContainer() {} ~IocContainer() {} template<class T, typename Depend, typename... Args> typename std::enable_if<!std::is_base_of<T, Depend>::value>::type RegisterType(const std::string& strKey) { std::function<T* (Args...)>

Linux Ubuntu 14 Audit 系统审计服务

空扰寡人 提交于 2020-08-10 16:53:41
一、概述 系统等保要求,必须做系统审计服务,审计的目的是基于事先配置的规则生成日志,记录可能发生在系统上的事件,这里直接使用第三方插件 Audit,不用系统自带的审计服务日志。 (如需要使用系统操作命令审计,可参考文章:https://www.cnblogs.com/tchua/p/7813284.html) Audit 说明文档: https://people.redhat.com/sgrubb/audit/ 二、安装 Audit 1.检查是否安装了 audit 插件。 rpm -ql auditd 2.使用以下命令安装 audit 插件。 sudo apt-get install auditd 3.检查 audit 服务是否启动。 service --status-all 4.重启 audit 服务。 systemctl restart auditd 或 service auditd restart 5.通过以下命令,可以查询状态、查看规则、删除规则。 auditctl -s # 查询状态 auditctl -l # 查看规则 auditctl -D # 删除所有规则 6.查看审计日志。 ausearch -i -k key_name # key_name为标识符 三、审计规则语法 临时测试语法格式:auditctl -w PATH -p PERMISSION -k KEY

游戏音乐的作用以及起源

偶尔善良 提交于 2020-08-10 16:53:21
游戏音乐是由特殊的音乐、语言符号、美学符号组成,在电子游戏的发展下,游戏音乐越来越成熟,游戏音乐与美术相融合,能够带给玩家视觉与声音的感官冲击,形成游戏音乐所具有的独特的审美效果,从而使游戏的魅力更好体现出来。游戏音乐在电子游戏中扮演着重要的角色,其在表现力与生命力方面具有的优势,对电子游戏起到点睛之笔的作用,能让玩家深刻的体会到游戏的魅力。 只有深入音乐之中才能更好的认识音乐, 游戏音乐 也不例外。音乐具有的审美功能和艺术魅力是其它艺术难以比拟取代的,尤其是在音乐表达方面,其能够将人的复杂情感以音乐的形式传传递来,从而使人们的心灵和情绪产生共鸣。 从音乐美学的角度来看,音乐是人们进行感染抒发与表达的一种艺术形式,其与人们的情感因素有着密切的联系。音乐能够实现人类情感的升华,人们可以从音乐审美过程中了解音乐作品想要表达的情感。真、善、美是音乐的本质,在现实生活中,音乐就像太阳一样普照在我们身边,音乐成为人类生活中不可缺少的主体,音乐带给给人们精神上的支持。 当前我国与世界各国展开密切的交流,在物质文明和精神文明的刺激下,人们的审美标准也发生了一些变化,游戏音乐审美同样如此。如果说群众演员是一部影视作品的核心,那么游戏音乐就是电子游戏的灵魂,没有游戏音乐,电子游戏将毫无趣味可言。游戏音乐的审美意义体现在多个方面,其中包括声音与画面、声音与主题等,游戏音乐与电子游戏之间相互联系

Milvus 实战|生物多因子认证系列 (二):人脸识别

情到浓时终转凉″ 提交于 2020-08-10 16:48:08
视觉 AI 作为一个已经发展成熟的技术领域,具有丰富的应用场景和商业化价值,全球 40% 的 AI 企业都集中在视觉 AI 领域。近年来,视觉 AI 除了在智能手机、智能汽车、智慧安防等典型行业中发挥重要作用外,更全面渗入细分的实体行业,催生了如车站人脸实名认证、人脸支付、小区人脸门禁管理、酒店自助人脸实名登记等视觉 AI 的应用。 人脸识别是视觉 AI 领域中技术成熟度、商业应用程度都比较高的一个技术。人脸识别又称为面部识别,是基于生物特征的识别方式。与指纹识别等传统的识别方式相比,人脸识别具有实时、准确、易于使用、稳定、难仿冒、无须接触等特点。 本文将介绍一个人脸识别项目。此项目基于开源的人脸检测算法 MTCNN、人脸识别库 InsightFace,以及向量相似度搜索引擎 Milvus 实现。 | 关键技术 人脸识别通常包括人脸检测、人脸特征提取、人脸特征比对这三个环节。 人脸检测 人脸检测是人脸识别完整流程中的一个环节。人脸识别系统首先用摄像头采集含有人脸的图像或视频流,然后用人脸检测技术检测人脸位置、定位五官关键点、提取人脸,随后才能进行人脸图像预处理及人脸特征提取。 在实际商业化方案中,人脸检测也可独立于人脸识别进行使用。比如近期被广泛应用的 AI 测温设备就是基于人脸检测技术迅速锁定人脸区域,从而实现红外热成像远距离自动测温。 人脸特征提取

php与Redis实现分布式锁

社会主义新天地 提交于 2020-08-10 16:36:55
一、分布式锁的作用: redis写入时不带锁定功能,为防止多个进程同时进行一个操作,出现意想不到的结果,so...对缓存进行插入更新操作时自定义加锁功能。 二、Redis的NX后缀命令 Redis有一系列的命令,其特点是以NX结尾,NX的意思可以理解为 NOT EXISTS(不存在),SETNX命令 (SET IF NOT EXISTS) 可以理解为如果不存在则插入,Redis分布式锁的实现主要就是使用SETNX命令。 三、实现原理 在进程请求执行操作前进行判断,加锁是否成功,加锁成功允许执行下步操作; 如果不成功,则判断锁的值(时间戳)是否大于当前时间,如果大于当前时间,则获取锁失败不允许执行下步操作; 如果锁的值(时间戳)小于当前时间,并且GETSET命令获取到的锁的旧值依然小于当前时间,则获取锁成功允许执行下步操作; 如果锁的值(时间戳)小于当前时间,并且GETSET命令获取到的锁的旧值大于当前时间,则获取锁失败不允许执行下步操作; 四、$redis->setnx() 设置锁 $expire = 10;//有效期10秒 $key = 'lock';//key $value = time() + $expire;//锁的值 = Unix时间戳 + 锁的有效期 $lock = $redis->setnx($key, $value); //判断是否上锁成功,成功则执行下步操作 if

Vue中使用高德地图POI搜索

坚强是说给别人听的谎言 提交于 2020-08-10 16:36:42
创建 loadMap.js /** * 动态加载高德地图 * * @export * @param {*} key 高德地图key * @param {*} plugins 高德地图插件 * @param {string} [v='1.4.14'] 高德地图版本 * @returns */ export default function loadMap(key, plugins, v = '1.4.14') { return new Promise(function(resolve, reject) { if (typeof AMap !== 'undefined') { // eslint-disable-next-line no-undef resolve(AMap) return true } window.onCallback = function() { // eslint-disable-next-line no-undef resolve(AMap) } let script = document.createElement('script') script.type = 'text/javascript' script.src = `https://webapi.amap.com/maps?v=${v}&key=${key}&plugin=${plugins}