Qiskit 电路 append 函数源码解析
广播机制引发的问题
添加单个控制位的门
之所以要研究 append 函数,是因为在使用该函数构造电路时,遇到了报错。下面是简化的应用场景。
假设构造一个空的电路,后面用 append 函数添加一个 CRY 门,代码如下:
1234circuit = QuantumCircuit( QuantumRegister(2, "control"), QuantumRegister(1, "target"))circuit.append(CRYGate(np.pi / 4), circuit.qregs)
名为 control 的量子计算器作为控制位,名为 target 的量子计算器作为目标位。由于这里使用了两个控制位,而一个 CRY 门只需要一个控制位,因此 Qiskit 使用了广播机制,认为 control 中的两个比特各自是一个 CRY 门的控制位。因此构造出的电路如下,两者都作为控制位,出现了两个 CRY 门。
123456control_0: ─────■──────────────── │ ...
MySQL 主从同步原理与环境搭建(适用于 MySQL 8.4.x)
内容参考自官方文档 MySQL :: MySQL 8.4 Reference Manual :: 19 Replication。
基于 Binlog 的复制
主从之前是通过二进制日志文件(Binary log, Binlog)进行同步的,源(数据库更改发生的地方,称为 source)的 MySQL 实例将更新和更改以“事件”的形式写入 Binlog。副本(称为 replica)的 MySQL 实例从源读取 Binlog,并在副本的本地数据库上执行其中记录的事件。
每个连接到 source 的 replica 都会请求一份 Binlog 的副本。**它是从源端拉取数据,而不是源端向副本推送数据。**每个 replica 都会记录每个 Binlog 的坐标,即 replica 知道某个日志哪些部分是被读取并处理过的。这意味着多个 replica 可以连接到 source,并执行同一 Binlog 的不同部分。由于 replica 控制此过程,因此可以独立连接和断开单个 replica,而不会影响 source 的操作。此外,由于每个 replica 都单独记录了 Binlog 坐标,因 ...
AtCoder Beginner Contest 370
AtCoder Beginner Contest 370
A - Raise Both Hands
12345678910111213141516#include <iostream>using namespace std;int main(){ int l, r; cin >> l >> r; if (l == r) { cout << "Invalid" << endl; } else if (l == 1) { cout << "Yes" << endl; } else { cout << "No" << endl; } return 0;}
B - Binary Alchemy
按照题目说的意思模拟即可。
12345678910111213141516 ...
ParameterizedTypeReference详解
背景
在使用 RestTemplate 发送 HTTP 请求时,需要指定响应(如 User)类型将结果进行反序列化。
1restTemplate.exchange(url, HttpMethod.GET, null, User.class);
然而,现实中很多场景需要返回的是集合类型,像原来这样写直接报错,因为 Java 泛型是通过类型擦除来实现的,擦除后 List<User> 实际上是 List,而 User 类型信息丢失了。
123// ERROR: 错误代码restTemplate.exchange(url, HttpMethod.GET, null, List<User>.class);// ERROR: 错误代码
这时会用到 ParameterizedTypeReference 来指定返回值的类型。
123456restTemplate.exchange( "http://localhost:8080/hello", HttpMethod.GET, null, new ParameterizedTypeRefe ...
登陆校验的解决方案
会话技术
用户打开浏览器,访问服务器资源,则会话建立。直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。一般认为打开一个浏览器就是一次会话。HTTP是无状态的,服务器并不知道你之前登陆过没有,需要用会话跟踪技术记录状态。
会话跟踪是一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据。
会话跟踪方案包括客户端会话跟踪技术Cookie、服务端会话跟踪技术Session、令牌技术。
Cookie
第一次发送请求,服务端的响应头中包含 Set-Cookie,浏览器解析响应头,存储在本地。浏览器存储的 Cookie 可以在控制台的“应用->存储”中看到。接下来发送请求,就会在请求头中携带 Cookie 这一项。
优点
缺点
HTTP协议中支持。
移动端APP无法使用。
不安全、用户可以禁用。
不能跨域(协议、IP或域名、端口有一个不同就算)。
Session
浏览器第一次请求,服务器创建一个Session,用 ID 标识。服务器在响应时用 Set-Cookie 字段返回 ID,浏览器存储 ...
在 Ubuntu 上安装和使用 Spotify
安装
安装官方客户端
官方在这里提供了 Ubuntu 的下载方式。
推荐使用 apt 下载。
1234curl -sS https://download.spotify.com/debian/pubkey_6224F9941A8AA6D1.gpg | sudo gpg --dearmor --yes -o /etc/apt/trusted.gpg.d/spotify.gpgecho "deb http://repository.spotify.com stable non-free" | sudo tee /etc/apt/sources.list.d/spotify.listsudo apt updatesudo apt install spotify-client
安装扩展工具
Spicetify 是对 Spotify 官方客户端进行增强和定制化的工具。
安装指引在这里查看。
在安装时会询问是否要顺便安装 Marketplace,建议确认。
定制化
需要注意的是,Linux 用户需要设置好 Spotify 的权限才能使其正常工作。
如果是用 apt 安装的 Sp ...
在Ubuntu上配置LLVM环境
官方的安装指南在这里。
本人使用 Ubuntu 24.04 LTS,所以新建文本文件(/etc/apt/sources.list.d/llvm.list)并添加以下软件源。
12345678deb http://apt.llvm.org/noble/ llvm-toolchain-noble maindeb-src http://apt.llvm.org/noble/ llvm-toolchain-noble main# 18deb http://apt.llvm.org/noble/ llvm-toolchain-noble-18 maindeb-src http://apt.llvm.org/noble/ llvm-toolchain-noble-18 main# 19deb http://apt.llvm.org/noble/ llvm-toolchain-noble-19 maindeb-src http://apt.llvm.org/noble/ llvm-toolchain-noble-19 main
接着
12wget -qO- https://apt.llvm.org/ ...
使用 Maven 构建时几个重要的概念
构建流程
Maven的构建生命周期(Lifecycle)、阶段(Phase)和目标(Goal)是Maven构建过程的核心概念。它们共同定义了Maven如何构建和管理项目。
总结来说,Maven的构建生命周期定义了构建过程中的主要步骤,阶段是生命周期中的具体步骤,而目标则是每个阶段实际执行的任务。通过这种方式,Maven提供了一种灵活且可扩展的构建系统,允许开发人员根据需要自定义构建过程。
生命周期
Maven定义了三个主要的构建生命周期:clean、default 和site。
每个生命周期都包含一系列的阶段,这些阶段是有序的,并且每个阶段都执行特定的任务。
clean:清理项目,删除之前构建生成的文件。
default:处理项目的编译、测试、打包、安装和部署等。
site:生成项目的文档和报告。
阶段
每个构建生命周期都由一系列的阶段组成。
阶段是有序的,它们定义了构建过程中的一个步骤。
例如,default生命周期包括以下阶段:validate、compile、test、package、verify、install 、 deploy……
validate:验证项目是否正确,所 ...
事件修饰符
Vue 3的事件修饰符包括:
.stop - 调用 event.stopPropagation(),防止事件冒泡。
.prevent - 调用 event.preventDefault(),阻止事件的默认行为。
.self - 只当事件是从事件绑定的元素本身触发时才触发回调。
.capture - 添加事件侦听器时使用事件捕获模式。
.once - 事件只触发一次。
.passive - 告诉浏览器你不想阻止事件的默认行为。
Vue文档的解释有些抽象,下面通过举例说明。
原始代码如下,当点击链接链接时输出 a 和 div,点击 div 区域时只输出 div。
12345678910<template> <div style="background: yellow" @click="console.log('div')"> <a href="https://11d-beyonder.github.io" target="_blank&qu ...
X 还是 Wayland?
两种协议
在介绍协议前,先要明白什么是窗口管理器。以下是来自ArchWiki的解释。
窗口管理器(WM)是一种系统软件,在图形用户界面(GUI)中的窗口系统中控制窗口的位置和外观。它可以是桌面环境(DE)的一部分,也可以独立使用。窗口管理器是 Xorg 独有的。Wayland 上窗口管理器的等价物称为混成器,因为它们也充当混成窗口管理器。
这里提到了 Xorg 和 Wayland,在习惯上都认为它们是 WM。下面是用 Fastfetch 输出的内容,显示我当前使用的 WM 是 X11。
1234567891011121314151617181920212223242526272829 .... joe@SER5MAX .',:clooo: .:looooo:. ----------- .;looooooooc .oooooooooo' OS: Ubuntu noble 24.04 x86_64 ...