分类 技术 articles

Electron CommonJS require踩坑

最近在开发一个Electron项目,在导入类的时候有以下报错:

node:internal/modules/cjs/loader:1411 Uncaught Error: Cannot find module './File'
Require stack:
- E:\Develop\markdown-editor\src\html\index.html
    at Module._resolveFilename (node:internal/modules/cjs/loader:1408:15)
    at a._resolveFilename (node:electron/js2c/renderer_init:2:2643)
    at defaultResolveImpl (node:internal/modules/cjs/loader:1064:19)
    at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1069:22)
    at Module._load (node:internal/modules/cjs/loader:1218:37)
    at c._load (node:electron/js2c/node_init:2:17950)
    at s._load (node:electron/js2c/renderer_init:2:31718)
    at TracingChannel.traceSync (node:diagnostics_channel:322:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:242:24)
    at Module.require (node:internal/modules/cjs/loader:1494:12)

提示找不到模块。

……

Continue reading

面向对象与面向过程的本质区别

面向对象与面向过程这两种编程思想主要体现在一件事上:面向对象关心谁来做,而面向过程关心做什么

举个例子,如果我现在要开发一个五子棋小游戏,在面向对象的思想中,实现步骤应该是这样的。

……

Continue reading

【数据结构与算法】哈希表

哈希表(Hash Table)是一种基于键(Key)直接访问数据的高效数据结构,其核心思想是通过哈希函数将键映射到数组的特定位置,从而实现平均时间复杂度为 O(1)O(1) 的插入、查找和删除操作。

……

Continue reading

【数据结构与算法】众数、中位数

今天学这个东西的时候,看到这种线性的数据结构加上排序步骤,很难不想写个程序来跑跑。

先来说说中位数,这个比较有思路。

中位数

具体的操作步骤应该是:排序 => 获得数据元素个数n => 是奇数 ? (n+1) / 2 : n / 2

……

Continue reading

【数据结构与算法】二叉树

定义

二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。

……

Continue reading

【数据结构与算法】栈

基本概念

栈(Stack)是一种后进先出(LIFO)原则的线性数据结构。核心操作包括:

  • 压栈(Push):将元素添加到栈顶
  • 出栈(Pop):移除并返回栈顶元素
  • 查看栈顶(Check)获取但移除栈顶元素
  • 判空(is_empty)检查栈是否为空

结构定义

使用动态数组实现栈,包含三个核心属性:

……

Continue reading

【数据结构与算法】冒泡排序

核心思想

通过相邻元素的两两比较,将较大的元素逐步“冒泡”到数组末尾,每轮排序确定一个最大元素的最终位置。

代码实现

void bubble_sort(int arr[], int n) {
  // 最外层控制循环轮数 n-1轮
  for (int i = 0; i < n - 1; i++) {
    // 内层循环处理相邻元素比较和交换
    for(int j = 0; j < n-i-1; j++) {
      if (arr[j] > arr[j+1]) {
        int temp = arr[j];
        arr[j] = arr[j+1];
        arr[j+1] = temp;
      }
    }
  }
}

// 调用
void print_array(int arr[], int size) {
  for (int i = 0; i < size; i++) {
    printf("%d,", arr[i]);
  }
  printf("\n");
}

int main() {
  int arr[] = {23, 232, 55, 2, 7, 0, 576, 342};
  int n = sizeof(arr) / sizeof(arr[0]);

  printf("排序前:");
  print_array(arr, n);
  bubble_sort(arr, n);

  printf("排序后");
  print_array(arr, n);
}

原理分析

外层循环的 i < n - 1

  • n个元素的数组最多需要n-1轮冒泡,如5元素数组需要4轮排序
  • 数学依据:每轮将一个最大值“沉底”,当完成n-1轮时,最后一个元素必然有序

示例验证:

……

Continue reading

x86-64汇编学习笔记

机器指令和机器语言

机器指令,二进制数字,机器语言全局机器指令的集合,CPU通过执行一系列的机器指令完成计算工作。

汇编语言就是为了代替机器指令,使人类能够更加简单地编写程序而诞生的。汇编语言就是机器码的助记符。

……

Continue reading