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;
};

mysql 中 使用order by进行排序,排序的字段是字符串加数字的形式

mysql 中 使用order by进行排序,但排序的字段是 字符串加数字的形式,如何排序?

如果字符串和数字的长度都是不确定的,可以通过更复杂的 SQL 语句来处理。这通常涉及将字符串和数字部分分开,然后进行排序。下面是一个处理这种情况的示例。

假设有一个表 your_table,字段名为 mixed_column

CREATE TABLE your_table (
    mixed_column VARCHAR(255)
);

INSERT INTO your_table (mixed_column) VALUES
('A1'), ('A2'), ('A10'), ('B1'), ('B2'), ('B10'), ('AA1'), ('AA2'), ('AA10');

可以使用以下查询来对字段进行排序:

SELECT * 
FROM your_table
ORDER BY
  -- 提取字符串部分
  SUBSTRING_INDEX(mixed_column, (SELECT SUBSTRING_INDEX(mixed_column, '', -1) FROM your_table WHERE mixed_column REGEXP '[0-9]' LIMIT 1), 1),
  -- 提取数字部分并填充到10位
  LPAD(
    IFNULL(
      SUBSTRING(mixed_column FROM LENGTH(SUBSTRING_INDEX(mixed_column, (SELECT SUBSTRING_INDEX(mixed_column, '', -1) FROM your_table WHERE mixed_column REGEXP '[0-9]' LIMIT 1), 1)) + 1), 
      '0'
    ),
    10, '0'
  );

解释:

  1. 提取字符串部分SUBSTRING_INDEX(mixed_column, (SELECT SUBSTRING_INDEX(mixed_column, '', -1) FROM your_table WHERE mixed_column REGEXP '[0-9]' LIMIT 1), 1) 通过正则表达式找出包含数字的子字符串的位置,并用 SUBSTRING_INDEX 提取字符串部分。

  2. 提取数字部分并填充到10位LPAD(...) 用前导零填充数字部分以确保数字按数值排序。IFNULL(SUBSTRING(...), '0') 用于处理没有数字部分的情况。

这个查询考虑了字符串和数字部分长度不确定的情况,并确保按照数值顺序排序。你可以根据实际情况进一步调整查询。如果数据库的字段和内容有更多的变化,还需要进一步调整正则表达式和字符串处理函数的参数。

MacOS 修改视频文件的 hash 值

写一个脚本,在mac上将当前文件夹的所有视频文件修改hash值

如果你只是想快速地在文件末尾添加一些数据来改变hash值,并且不介意文件变得不可播放(或者你知道如何移除添加的数据以恢复文件的可播放性),你可以使用简单的shell命令。但请注意,这样做通常会使视频播放器无法识别或播放文件。

下面是一个简单的shell脚本示例,它会在当前目录下的所有视频文件末尾追加一个字符串,从而改变它们的hash值:

#!/bin/bash

APPEND_DATA="This is some extra data to change the hash."

# 遍历当前目录下的所有视频文件
for file in *.{mp4,mov,avi,mkv}; do
    if [ -f "$file" ]; then
        # 检查文件是否真的是视频文件(可选)
        # file "$file" | grep -q 'video'
        # if [ $? -eq 0 ]; then
            # 在视频文件末尾追加数据
            echo "$APPEND_DATA" >> "$file"
            echo "Appended data to $file"
        # fi
    fi
done

重要提示:这个脚本会破坏视频文件,使它们无法被正常播放。如果你只是想测试hash值的变化,并且不关心文件的可播放性,那么可以运行这个脚本。但是,如果你想要保留视频的可播放性,你应该寻找其他方法,比如使用mp4box添加元数据或轨道。

如果你决定使用上面的脚本,请确保在运行之前备份你的视频文件。要运行脚本,请保存到一个文件中(比如change_video_hashes.sh),然后在终端中使其可执行并运行它:

chmod +x change_video_hashes.sh
./change_video_hashes.sh

请记住,这种方法不是处理视频文件的推荐方式,因为它会导致视频文件损坏。如果你需要更改视频文件的hash值同时保持其可播放性,你应该考虑使用更专业的工具或方法。

indexOf 与 for 循环性能分析

console.clear()
let a = []
// populating array data
for (let i = 0; i < 10000; i++) {
    a.push(i)
}
let testNum = 9000
let found
let totalMS4ForLoop = 0
let totalMS4ForIn = 0
let totalMS4ForOf = 0
let totalMS4IndexOf = 0
let start
let end
// simulating 10000 requests which are come consecutively
for (o = 0; o < 10000; o++) {
start = Date.now()
  for (let i = 0; i < a.length; i++) {
    if (a[i] == testNum) { found = a[i]; break }
  }
  end = Date.now()
  totalMS4ForLoop += end - start
start = Date.now()
  for (let j in a) {
    if (a[j] == testNum) { found = a[j]; break }
  }
  end = Date.now()
  totalMS4ForIn += end - start
start = Date.now()
  for (let item of a) {
    if (item == testNum) { found = item; break }
  }
  end = Date.now()
  totalMS4ForOf += end - start
start = Date.now()
  found = a[a.indexOf(testNum)]
  end = Date.now()
  totalMS4IndexOf += end - start
}
console.log("10000x10000 for-loop executions took total " + totalMS4ForLoop + " ms.")
console.log("10000x10000 for-in executions took total " + totalMS4ForIn + " ms.")
console.log("10000x10000 for-of executions took total " + totalMS4ForOf + " ms.")
console.log("10000x10000 indexOf executions took total " + totalMS4IndexOf + " ms.")

10000x10000 for-loop executions took total 60 ms.
10000x10000 for-in executions took total 1265 ms.
10000x10000 for-of executions took total 77 ms.
10000x10000 indexOf executions took total 14 ms.

Java 调用方法 方法名是个变量

在Java中,你可以使用反射来动态地调用方法,其中方法名是一个变量。以下是一个简单的示例:

import java.lang.reflect.Method;

public class Main {
    public static void main(String[] args) {
        try {
            // 创建一个包含方法名的字符串变量
            String methodName = "printMessage";

            // 获取类Main的Class对象
            Class<?> c = Main.class;

            // 使用Class对象和方法名获取Method对象
            Method method = c.getDeclaredMethod(methodName, String.class);

            // 创建一个实例对象
            Main mainInstance = new Main();

            // 使用Method对象和实例对象调用方法
            method.invoke(mainInstance, "Hello, World!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void printMessage(String message) {
        System.out.println(message);
    }
}

在这个示例中,我们创建了一个名为methodName的字符串变量,它包含我们想要调用的方法的名称。然后,我们使用这个变量和getDeclaredMethod方法从Main类的Class对象获取Method对象。接下来,我们创建一个Main类的实例,并使用Method对象和实例调用方法。注意,我们需要传递一个参数类型给getDeclaredMethod方法,这告诉Java我们调用的方法需要一个什么样的参数。在这个例子中,我们假设方法需要一个String类型的参数。

需要注意的是,反射应该谨慎使用,因为它可能会破坏封装性并可能影响性能。你应该只在没有其他选择的情况下使用它,比如在编写框架、插件或其他需要在运行时动态加载和调用方法的代码时。

使用JS,判断是一个变量是否为数字或字符串数字

当你使用 JavaScript 时,可以编写一个函数来判断一个变量是否为数字,包括字符串中表示数字的情况。以下是一个示例函数:

function isNumeric(value) {
  // 使用 typeof 来判断变量是否为数字类型
  if (typeof value === 'number') {
    return true;
  }

  // 使用正则表达式来检查字符串是否表示数字
  if (typeof value === 'string' && value.trim() !== '') {
    // 去除字符串两端的空格,并检查是否为空字符串
    return /^\d+(\.\d+)?$/.test(value.trim());
  }

  return false;
}

Continue reading 使用JS,判断是一个变量是否为数字或字符串数字

cdr设置

HOSTS添加

127.0.0.1 apps.corel.com
127.0.0.1 mc.corel.com
127.0.0.1 origin-mc.corel.com
127.0.0.1 iws.corel.com
127.0.0.1 idp.corel.com

如有Clash,配置-更多配置

apps.corel.com,mc.corel.com,origin-mc.corel.com,iws.corel.com,idp.corel.com

Chrome浏览器的 Ctrl+W 关闭网页的快捷键失效

Chrome浏览器的 Ctrl+W 关闭网页的快捷键经常用着用着不好使了,原因是企业微信的导致的快捷键冲突,关闭企业微信或其他企业微信私有部署的软件,就正常了。记录一下。
垃圾微信。