VMware Workstation 虚拟机自动开机攻略:Win11 不显示的坑与解法

前言

最近想给电脑设置开机后自动启动 VMware 里的几个虚拟机(Win7、CentOS、Win11),结果发现了一个让人抓狂的问题:明明在“配置自动启动虚拟机”里添加了,但重启后只有 Win7 和 CentOS 乖乖启动了,Win11 却纹丝不动。更诡异的是,在自动启动配置列表里压根就找不到 Win11 的身影!

经过一番折腾,终于把这个坑填平了。下面把踩过的坑和解决办法分享给大家。

Continue reading VMware Workstation 虚拟机自动开机攻略:Win11 不显示的坑与解法

mybatis 创建临时表

mybatis 创建临时表

    <insert id="dropTempTable">
        DROP TEMPORARY TABLE IF EXISTS temp_table${uuid};
    </insert>
    <insert id="createTempTable">
        CREATE TEMPORARY TABLE IF NOT EXISTS temp_table${uuid} (
        id VARCHAR(50) PRIMARY KEY
    );
    </insert>
    <!-- 插入数据到临时表 -->
    <insert id="insertTempTableData">
        INSERT INTO temp_table${uuid} (id)
        VALUES
        <foreach collection="orgIdList" item="id" separator=",">
            (#{id})
        </foreach>
    </insert>

MySQL 一对多 in 查询

mysql 第一张表为用户表,第二张表为用户与组织的关系表,用户与组织一对多的关系,已知多个用户组织id,查询哪些用户属于这些组织

你希望从组织 ID 为 1、2、3 的用户中查询,同时列出他们所有的组织 ID,包括那些不在 1、2、3 之中的,如 45。这样,我们需要一个两步的查询:

  1. 首先,找到组织 ID 为 1、2、3 的用户。
  2. 然后,查询这些用户所拥有的所有组织 ID。

我们可以使用子查询来实现这一点:

SQL 查询示例

SELECT u.user_id, u.user_name, GROUP_CONCAT(uo.organization_id ORDER BY uo.organization_id) AS organization_ids
FROM users u
JOIN user_organization uo ON u.user_id = uo.user_id
WHERE u.user_id IN (
    SELECT uo.user_id
    FROM user_organization uo
    WHERE uo.organization_id IN (1, 2, 3)
)
GROUP BY u.user_id, u.user_name;

解释

  1. 子查询部分SELECT uo.user_id FROM user_organization uo WHERE uo.organization_id IN (1, 2, 3) 用于找到所有组织 ID 为 1, 2, 3 的用户 ID。
  2. 主查询部分
    • JOIN 连接 users 表和 user_organization 表,以获取用户及其所有组织 ID。
    • WHERE u.user_id IN (...) 仅选择在子查询中找到的用户 ID。
    • GROUP_CONCAT(uo.organization_id ORDER BY uo.organization_id) 聚合用户的所有组织 ID,并按升序排列。

示例

假设 Alice 拥有组织 ID 1, 2, 4, 5,Bob 拥有组织 ID 2, 3,Charlie 拥有组织 ID 1, 2, 3, 4,而你查询的组织 ID 是 1, 2, 3,那么查询结果会是:

user_id user_name organization_ids
1 Alice 1,2,4,5
2 Bob 2,3
3 Charlie 1,2,3,4

在这个结果中,organization_ids 列包括用户所拥有的所有组织 ID,而不仅仅是查询条件中的那些组织 ID。

MySQL 优化分页查询

MySQL 优化分页查询

以 t_sys_log 表为例,3774851条数据,占用空间1.01G,24个字段

SELECT * FROM `t_sys_log` order by create_time desc limit 100000,10

耗时 88.345秒

SELECT id FROM `t_sys_log` order by create_time desc limit 100000,10

耗时 0.336秒

所以联表查询

SELECT * FROM `t_sys_log` t1 JOIN
(SELECT id FROM `t_sys_log` order by create_time desc limit 100000,10) t2
ON t1.id = t2.id

耗时 0.453秒

偏移量更大一点

SELECT * FROM `t_sys_log` order by create_time desc limit 1000000,10

耗时 12.687秒

SELECT * FROM `t_sys_log` t1 JOIN
(SELECT id FROM `t_sys_log` order by create_time desc limit 1000000,10) t2
ON t1.id = t2.id

耗时 0.617秒

centos7 开启端口

要在CentOS操作系统中开启端口,可以按照以下步骤操作:

使用命令firewall-cmd --zone=public --add-port=端口号/协议来开启指定端口。例如,要开启端口80的TCP协议,可以使用如下命令:
sudo firewall-cmd --zone=public --add-port=80/tcp
然后需要重新加载防火墙规则,以使更改生效。可以使用命令firewall-cmd --reload来重新加载规则:
sudo firewall-cmd --reload
可以使用命令firewall-cmd --list-ports来查看当前开启的端口列表:
sudo firewall-cmd --list-ports
通过以上步骤,您可以在CentOS系统中成功开启指定的端口。

JS 等待时间

export const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
export const awaitTime = async (cb, ms) => {
  const start = new Date().getTime();
  const res = await cb();
  const end = new Date().getTime();
  if (end - start < ms) {
    await new Promise((resolve) => {
      setTimeout(resolve, ms - (end - start));
    });
  }
  return res;
};