C++新特性
C++11新特性类型推导 auto & decltype
auto用于推导变量类型
decltype用于推导表达式类型
右值引用
概念
左值:可以取地址并且有名字,可以放在等号左边
右值:不可以取地址且没有名字,不可以放在等号左边 123int a = b + c; int a = 4;// a是左值, b+c的返回值是右值, 4也是右值
左值引用:对左值进行引用
右值引用:对右值进行引用
std::move 将左值强制转换为右值
std::forward 类型转换,可以转成左值或者右值
用途
实现移动语义,避免深拷贝,提升程序的性能。
列表初始化Example构造函数初始化列表和构造函数内部赋值
1234567891011121314class CExample {public: int a; float b; //构造函数初始化列表 CExample(): a(0),b(8.8) {} //构造函数内部赋值 CExample() { a=0; b= ...
Linux 命令总结
基础目录切换12345cd usr # 切换到该目录下的usr目录cd .. # 切换到上一层目录cd / # 切换到系统根目录cd ~ # 切换到用户主目录cd - # 切换到上一个操作所在目录
文件压缩12345tar -zcvf <打包压缩后的文件名> <要打包压缩的文件># z: 调用gzip压缩命令进行压缩# c: 打包文件# v: 实现运行过程# f: 指定文件名
1234tar -xvf <压缩文件># x: 表示解压# v: 实现运行过程# f: 指定文件名
显示网络状态123456789netstat -a # 显示详细的网络状况# -a或--all:显示连线中的所有Socketnetstat -apt # 显示当前UDP端口号使用情况netstat -apu # 显示当前UDP端口号使用情况# -t或--tcp:显示TCP传输协议的连线状况# -u或--udp: 显示UDP传输协议的连线状况# -p或--programs 显示正在使用Socket的程序识别码和程序名称netstat -l # 显 ...
ZKLBS项目简介 & 零知识技术简述
零知识证明零知识证明是一种密码学技术,用于向另一方证明某个陈述的真实性,而不需要透露陈述的具体内容。在密码学领域,零知识证明已经应用多个方面,与公钥加密、数字签名、身份认证、区块链、隐私计算等技术相结合。
零知识证明种类
交互式零知识证明
非交互式零知识证明
基于二次算术程序QAP的零知识证明
基于双向高效交互式证明DEIP的零知识证明
基于内积论证IPA的零知识证明
基于MPC-in-the-head的零知识证明
Snark友好哈希函数
MIMC
POSEIDON
ZKLBS 基于零知识的位置证明概念ZKLBS是将零知识证明应用于LBS位置服务中。为了解决个人位置信息泄露可能带来的问题,依据零知识位置证明(zk-PoL)协议,实现了ZKLBS零知识证明项目。
使用场景ZKLBS项目的使用场景有景区、商家评价、特定地区消费券领取等。在只提供经纬度坐标作为公开参数的情况下,确保参与评价的用户的确抵达过该景区或商家。
等级划分
等级1:这可以用来证明某人在特定时间出现在商家指定的范围内,适用于诸如景点评价授权的情况。在这种情况下,游客必须证明他曾经去过某个旅游区,才能获得评论许可。 ...
密态数据库相关技术简述
什么是密态数据库?密态数据库的目标是在执行查询操作时最大限度地保护用户的隐私。当用户提交查询请求时,数据库系统不会直接操作明文数据,而是在加密的数据上执行查询操作。数据库系统无法获知查询操作的明确意图,因此无法推断出用户的隐私信息。查询结果在加密的状态下返回给用户,用户再使用相应的密钥进行解密。
密态数据库困难问题密态数据库的关键在于在保护隐私的同时保持查询的有效性和可用性。这需要使用特定的加密方案和协议来确保查询操作仍然可以高效地执行,并返回正确的结果。
知名的密态数据库产品
华为 GaussDB
安华金和
APache Doris 和 MongDB 中也有少量功能实现。
密态数据库的常见实现方案
前置代理组件
触发器实现 利用Mysql的常见数据库的触发器功能实现。
后置安全模块 要求用户输入密文查询,学习成本高,交互复杂。
评估密态数据的指标
安全性
时间性能 主要是查询的效率,例如QPS等
空间开销
SQL语句的支持情况 能否让用户像使用正常的数据库一样使用密态数据库
密态数据库的交互流程
用户输入普通的SQL语句;
前置代理组件解析重构SQL,转换为可以检索密文 ...
分布式相关技术学习
DockerDocker概念Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
Docker核心技术
namespace
cgroup
Docker网络模式
Bridge:默认设置,此模式会为每一个容器分配Network Namespace、设置IP。
Host:容器使用宿主机的IP和端口。
container:和一个指定的容器共享IP、端口范围等。
none:无网络。
Kubernetes (k8s)K8S概念Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用。目标是让部署容器化的应用简单而高效。
MinikubeMinikube 是一种轻量级的 Kubernetes 实现,可在本地计算机上创建 VM 并部署仅包含一个节点的简单集群。
kubectlKubernetes 命令行工具 kubectl,让你可以对 Kubernetes 集群运行命令。
HiveHive概念Hive是基于Hadoop的一个数据仓库工具,可实现大规模分析 ...
Socket or RPC 网络编程方法对比
Socket编程流程
服务端和客户端初始化socket,得到文件描述符;
服务端调用bind,将socket绑定在指定的IP地址和端口;
服务端调用listen,进行监听;
服务端调用accept,等待客户端连接;
客户端调用connect,向服务端的地址和端口发起连接请求;
服务端accept返回用于传输的socket的文件描述符;
客户端调用writer写入数据;服务端调用read读取数据;
客户端断开连接时,调用close,服务端read读取数据,读取到EOF,待处理完数据后,服务端调用close,表示连接关闭。
服务端建立连接服务端首先初始化socket,然后与端口绑定,对端口进行监听,调用accept阻塞,等待客户端连接。socket()->bind()->listen()->accept()
客户端建立连接客户端首先初始化socket,然后与服务端连接,服务端监听成功则连接建立完成socket()->connect()
常见问题connect,accept发生在三次握手的哪一步?客户端connect成功返回在第二次握手,服务端accept成功返回时 ...
Concurrent ? C++ : Go C++&GO并发整理
文章说明本文提及C++和GO语言的并发,并发一向是一门语言编程的难点,对于C++和JAVA尤其是这样。笔者在整理C++的并发相关内容时,发现其极其庞杂,且涉及内容交错引用,于是,迫不及待打算将其单独整理出来,以供后期的复习使用。
基础并行和并发并行一个CPU在同一时刻只能被一个进程使用,但是如果有两个CPU,同时就可以执行两个进程,那么这两个进程在同一时刻被同时执行,那么就称这两个进程是并行的。
并发一个时间段,有多个进程都处于从开始运行到运行完毕的状态,但是每一个时刻只有一个程序在运行。
同步和异步同步两个事物相互依赖,并且一个事物必须以依赖于另一事物的执行结果。比如在事物 A->B 事件模型中,你需要先完成事物 A 才能执行事物 B。也就是说,同步调用在被调用者未处理完请求之前,调用不返回,调用者会一直等待结果的返回。
异步两个事物完全独立,一个事物的执行不需要等待另外一个事物的执行。也就是说,异步调用可以返回结果不需要等待结果返回,当结果返回的时候通过回调函数或者其他方式带着调用结果再做相关事情。
阻塞和非阻塞进程、线程和协程进程对于操作系统来说,一个任务就是一个进程。比如 ...
SIMD Program 高性能C++ SIMD编程
SIMD计算机结构分类
SISD:单指令流单数据流
SIMD:单指令流多数据流
MISD:多指令流单数据流(罕见)
MIMD:多指令流多数据流
Intel x86-64 SIMD 指令集
SSE/SSE2/SSE3/SSE4/SSE5指令集
AVX/AVX2/AVX512指令集SSE 16个128位寄存器AVX 16个256位寄存器AVX512 32个512位寄存器
AVX2/AVX512类型定义
AVX2__m256 单精度浮点型__m256d 双精度浮点型__m256i 整型
AVX512__m512 单精度浮点型__m512d 双精度浮点型__512i 整型A:使用AVX512相比于AVX2的优势?
寄存器变化,宽度加倍,数量加倍。
AVX512性能较高,因为能够并行的指令数目增加。
SIMD优势支持SIMD指令的CPU在设计时增加了一些专用的向量寄存器,这些专用的向量寄存器可以同时放入多个数据,CPU只需执行一条指令,即可完成多个计算操作,多个计算操作并行执行。
Commonly used github commands 常用github指令
文章说明本文总结了github的常用指令,包含提交、推送、同步、回退等。
GIT常用指令提交常用指令添加当前目录下的所有文件到暂存区
1$ git add .
创建一个新的提交并附带一个提交消息
1$ git commit -m "Add Commit"
创建一个新的提交附带提交消息和签名
1$ git commit -sm "Add Commit"
附加到上一次提交
1$ git commit --amend --no-edit
推送常用指令本地提交推送到远程仓库
1$ git push origin
本地提交推送到远程仓库main分支
1$ git push origin main
本地提交强制推送到远程仓库main分支
1$ git push -f origin main
同步常用命令显示远程仓库信息
1$ git remote -v
添加远程仓库,”upstream”是一个常用的名称,用于表示一个上游仓库
1$ git remote add upstream git@github.com:example/example.g ...
Milvus 向量数据库简述
MilvusMilvus是zilliz研发的开源向量数据库,赋能AI应用和向量相似度搜索。https://github.com/milvus-io/milvus
Milvus的系统架构
接入层Access layer:一组无状态的proxy,是所有请求的入口。
协调服务Coordinator service:分配任务给worker node,主要工作有集群拓扑管理、负载均衡、TSO时间生成、数据管理等。
RootCoord:集群控制器
QueryCoord:查询服务的控制器
DataCoord:数据服务的控制器
IndexCoord:索引构建服务的控制器
执行节点Worker nodes:完成协调服务coord下发的指令。
QueryNode:对其所管理的segment进行流批一体化查询
DataNode:对其所管理的segment进行持久化
IndexNode:对其所管理的segment进行全量索引构建
存储服务:Milvus数据的持久化。
Milvus的存储结构
Collection集合:等价于关系型数据系统中的表。
Shard分片:将数据的写入操作分散到不同的节点上。使 ...