- 博客(89)
- 收藏
- 关注

原创 C 中的“泛型”复制/交换两个变量
写 C 的时候有时候需要用到交换两个变量,但是针对不同类型的变量要写不同的函数,很不方便。那么如何做到“泛型”交换两个变量呢?我们都知道C中的变量有地址这个概念,使用&变量操作就可以参看地址值,不用多说,要交换两个变量首先得找到这两个变量的地址,先来看最简单的通过指针交换两个整型变量:void swap_int(int *a, int *b){ int temp = *a; *a = *b; *b = temp;}代码很简单,相信学过指针的都能看懂。泛型版交换两个变量现在的任务是
2020-06-16 19:24:06
645

原创 《算法4》中并查集的实现
并查集,听大佬说是最小生成树的基础。不过现在还是按部就班,顺着学。个人理解,仅供参考:// 算法4 第一章第五节并查集的实现// 路径压缩:将最顶部的根下所有子节点的值更新为最顶部的根的值,优化找根时间复杂度// 加权:仅将小树连到大树,同样也是优化找根时间复杂度#include <stdio.h>const int N = 1e5;int id[N], sz[N]; // sz数组用来保存数的大小// 初始化void init(){ for(int i=0; i<
2020-05-27 19:52:52
180
原创 Tmux 速记
session: client 执行 tmux 会创建一个 session。创建一个名字为 session-name 的 session。window 每个 session 都有一个 window。退出当前 client 但不会关闭 session。pane window 可以分为不同的 pane。- session 中快捷键前缀。- 启动一个 session。横向分割 window。切换到上一个 pane。列出 sessions。
2024-08-24 11:00:44
186
原创 【css】image 使用 transform:scale 放大后显示不全的问题
为用户点击的坐标值优化体验。问题在于 origin 位于图片下方时,图片放大后出现滚动条,而滚动条的高度会忽略放大显示的图片的上半部分,导致用户滚动到图片上方时会发现图片显示不全。实现图片放大 1.2 倍显示的功能,在此基础上可以修改。值,这样多余的部分会被顶下来,然后在渲染完成后设置。解决:可以设置图片的。,让图片滚动到原先的。
2024-07-14 17:29:09
1299
原创 【JS】Promise 的并发数控制
写爬虫的时候,可能需要控制网络请求的并发数以避免被反爬。我们知道 Promise 的结果是异步获取的,因此控制 Promise 的并发数的基本思路是。先从最基本的情况开始——限制并发数为 1,也就是只有前一个 Promise 执行完成后下一个 Promise 才能执行。对于并发数 > 1 的情况,特殊的点在于初始化时需要先启动数量
2024-03-08 16:53:50
718
原创 iptables 基本使用
iptables 主要用到两个表:filter 和 nat,其中 filter 表可以用来过滤数据包;nat 可以用来修改数据包的源地址和目的地址。chain 是 table 中对数据包进行匹配的规则,对于 filter 来说 chain 有。通过 -j DROP 可以 block 特定地址的数据包。对于 nat table,chain 为。添加规则可以修改数据包的进入行为。发生在路由前,可以修改目的地址。列出指定 table 的规则。
2024-03-03 19:08:49
320
原创 【计网】交换机、集线器、网关、路由器
而交换机聪明的点在于交换机会记住设备 - 设备之间通过那个端口,例如 设备 A - 设备 B 会通过端口 1 转发,而不会用到其它端口,避免了冲突。对于家庭组网来说,家庭的内网(局域网)必须通过网关连接到外部的公网(广域网),因此网关是必须的。交换机和集线器可以减少不同设备之间连接的线材,比如一个网络有 5 台设备,用交换机的话 5 台设备只需要都连到交换机上,而无需互相连接。MAC 地址用来标识设备,而 IP 地址标识该设备位于那个网络,更进一步还有一个端口号的概念依附于 IP 地址,用来标识应用程序。
2024-02-25 22:01:20
429
原创 跨域问题的三种解决方法
跨域本质想解决还是需要后端配合,如果无法取得配合,那么 nginx 做反代是最方便的解决方法。jsonp 需要前后端都修改代码,但是兼容性最好。开头的响应头可以进一步控制跨域请求。,这种方法比较方便,且限制较小。
2024-01-09 22:16:11
438
原创 【Python】用 dict 实现一个简单的 json 数据库
最近写了一个小项目,基本逻辑是通过定时任务轮询 API,检测 API 状态变化并执行对应的操作。该 API 一共有 3 种状态,假设每种状态的值分别为 1、2、3,在状态 2 的时候需要调用一次处理方法。这里的问题是状态 2 可能持续很长时间,而通过定时任务调用的 Python 脚本默认是没有记录状态的,因此需要本地保存状态。可以用SQLite或者MangoDB,但是用到这种小项目上有点多余的感觉,最轻量级的解决方法大概还是用json保存。
2023-11-22 18:35:58
485
原创 magisk 手机卡重启界面记录
中午发现手机自动关机了,开机后无限卡重启界面,但是可以进 rec 和 fastboot。怀疑是之前安装的 magisk 模块导致卡重启。不过值得一提的是,虽然自动关机的问题此前也出现过几次,但是都没有出现过卡重启的情况。进 rec 打开文件管理器,进入 /data/adb/magisk 文件夹,删除/重命名该文件夹(禁用所有 magisk 模块),之后重启 1 ~ 2 次,问题得以解决。实在不行再双清、四清重刷 ROM,毕竟相对于删除数据重命名一个文件夹的成本是最小的。
2023-11-21 15:39:33
2519
1
原创 [CSS] 文本折行
文本折行一般分为两种情况:CJK(Chinese/Japanese/Korean) 字符和非 CJK 字符。一般非 CJK 字符折行发生在两个单词的空格中间,见下图:图中文本 “hello world” 包裹容器的宽度为 2rem,但是 hello 并没有被截取成两段,反而是在空格处发生了折行。这种行为也很容易理解——把一个单词拆成两部分,很可能会使单词失去意义,所以只能在空格折行。CJK 字符,图中为 “你好世界”,则是在 “世”和“界”中间发生了折行,符合设置的 3rem 字符宽度。
2023-11-16 10:58:03
976
原创 [Vue3] 对象的双向绑定
Vue2 和 Vue3 实现对象的双向绑定的思路不同,需要注意二者之间的区别。如果监听的不是对象,则可以直接用 computed 的方式实现双向绑定。
2023-08-18 17:10:35
520
原创 ElementPlus 自定义主题(Vite4 + Vue3)
配置 ElementPlus 主题的时候遇到 SCSS 循环导入的报错,排查后发现是以为在。中引入创建的样式文件(未测试);如果是按需导入,则需要删除。中引入了两次自定义主题的样式文件,解决方法很简单,去掉。如果不是按需导入,则将 2. 最后一行代码放开,并在。以上代码来自 ElementPlus 官网。下面是配置 ElementPlus 自定义主题的流程。选项下的内容,根据项目采用的插件。中导入自定义样式的代码,并配置。中导入自定义主题的文件即可。,全量导入暂时没有测试。
2023-08-08 15:23:46
2358
原创 [Python] Pylance 插件打开 Python 的类型检查
安装 Python 插件2.打开一个 Python 文件可以看到右下角有一个花括号和 Python 字样,点击花括号(不是 Python 字样)打开类型检查即可:
2023-08-03 10:32:13
1829
原创 【Python】aio Queue 的超时封装
queue 的 put 和 get 操作都是阻塞的(当然可以通过 _nowait 方法改为非阻塞),取数据的时候如果没数据则会一直阻塞。下面通过计数的方法给。一般封装生产者消费者模型的时候会用到。
2023-07-30 21:49:50
314
1
原创 .m3u8、HLS 协议
其中 #[TEXT] 被称为标签,用来给分片和文件提供描述。#EXTINF:10.0 后面的 10.0 标识分片为 10s,下一行的链接则代表分片的地址,可以直接下载这个分片到本地。如果请求 .ts 分片的时候需要认证,则在请求头或者 URL 中添加对应的参数。可以使用这个 https://github.com/globocom/m3u8 Python 包解析 m3u8 文件。上面的例子一共有 3 个 .ts 分片,每个分片 10s,因此该视频长度为 30s。
2023-07-14 17:40:44
614
原创 Git 复习:缓存区、版本库和 git reset
除了缓存区(Staging Area),Git 还有两个重要的区域:工作区(Working Directory)和版本库(Repository)。工作区:指你在电脑上能看到的目录,也就是你正在进行编辑修改的文件所在的目录。缓存区:一般存放在 Git 目录中的一个文件,称为暂存区(Stage 或 Index)。它像一个缓存区域,临时保存你的改动,等到提交的时候再一次性提交到版本库中。版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
2023-06-13 12:01:04
955
原创 《你不知道的 JavaScript》闭包的概念
这段代码是闭包,因为这里 doit 函数(实际是 inc)在全局作用域下,但是却访问到了 hello 函数中的变量。这段代码技术上来讲,也许是闭包,但根据前面的定义,确切地说并不是。闭包:当函数可以记住并访问所在的词法作用域时,就产生了闭包,
2023-06-08 11:22:06
98
原创 [前端] 虚拟列表的实现
假设后端返回 1000 条数据,前端一次性展示出来,可能用户只想看到前 100 条,那么剩下 90% 的数据就没必要展示了。因为我们实际上只展示一个视口能看到的元素,所以实际上页面是不会有很大的滚动条(或者没有滚动条)的,所以这里需要一个撑起页面高度的元素,这个元素的高度为。另外在无限滚动的页面中,也可能会有大量的数据存在前端展示,随着滚动深度加深,展示的数据也越来越多,就可能造成上面提到的性能问题。只考虑了最基本的情况:元素高度是固定的,一般用来展示图片之类的。,我们要展示的元素则是通过。
2023-03-21 14:52:36
1136
原创 [Linux] 下载工具 aria2 的使用
官方文档:https://aria2.github.io/manual/en/html/aria2c.html官方示例:https://aria2.github.io/
2022-11-03 17:09:23
1162
原创 ElementUI Table 布局的调试
ElTable 提供了很多自定义表格属性的回调函数,但是官方文档中并没有什么例子。实际开发中,需要结合实际的 DOM 来调试,同时也要清楚 ElTable 的每个元素的作用,这样才能少走弯路。
2022-10-21 10:29:44
726
原创 [js] 实现侧边菜单可用鼠标拖动调整大小的功能
element-ui 提供了一个 nav-menu 组件,默认情况下该组件没有拖动调整大小的功能。下面通过代码为 nav-menu 添加这个功能。
2022-10-20 14:34:35
1128
原创 ElementUI 组件设置全局默认值
最近碰到个需求,要求把管理系统的所有 `el-select` 元素都添加 `clearable` 属性。整个管理系统估计有几百个页面,`el-select` 的数量更是不计其数,如果用传统方法一个一个的找然后添加属性,绝对是不现实的。下面介绍另一种更加方便的方法。
2022-10-19 18:02:51
2216
原创 [node.js] PrismaORM 入门
Prisma 的官方网站:https://www.prisma.io/目前应该是 4.x 版本其中 sqlite 还可以指定为其他想初始化的数据库,如 MySQL执行这条指令会在当前项目根文件夹创建一个.env文件用来保存数据库的地址,还会创建一个prisma文件夹,该文件夹中有一个的文件,这个文件用来定义数据库表的字段。.prisma 文件在 VSCode 上有插件,安装后能提供语法高亮和自动格式化等功能其中用model关键字定义表,字段的的数据类型可以参考官方文档,这里主要讲讲和的作用。.env。
2022-09-28 09:42:51
1132
原创 [JS] 网络请求相关
本文介绍如下内容:1. XMLHttpRequest2. Fetch3. WebSocket三个浏览器原生支持的发送网络请求的方法。
2022-09-20 11:08:35
510
原创 [JS]迭代器、可迭代对象、生成器详解
"迭代器(iterator)是按需创建的一次性对象。每个迭代器都会关联一个可迭代对象,而迭代器会暴露迭代其关联可迭代对象的 API。迭代器无须了解与其关联的可迭代对象的结构,只需要知道如何取得连续的值。这种概念上的分离正是 Iterable 和 Iterator 的强大之处"——引用自《JavaScript 高级程序设计第四版》。
2022-09-15 17:50:02
675
原创 [JS高级程序设计] ES6 新增的集合对象总结
ES6 新增了如下集合对象其中Map和WeakMap是一组,Set和WeakSet是一组,从代码层面来讲,Weakxxx无法被迭代且只能以 Object 或继承自 Object 的对象作为值,因为它们保存的是对象的弱引用。
2022-09-14 09:53:16
224
原创 【前端】HTTP相关知识总结
主要总结自:https://juejin.cn/post/68449041000358215752022-9-1 持续更新。
2022-09-01 21:35:40
414
原创 【JS】模块化的几种解决方案(AMD、CMD、ES6、CommonJS)
摘抄自作者:浪里行舟链接:https://juejin.cn/post/6844903744518389768来源:稀土掘金CommonJS规范主要用于服务端编程,加载模块是同步的,这并不适合在浏览器环境,因为同步意味着阻塞加载,浏览器资源是异步加载的,因此有了AMD CMD解决方案。AMD规范在浏览器环境中异步加载模块,而且可以并行加载多个模块。不过,AMD规范开发成本高,代码的阅读和书写比较困难,模块定义方式的语义不顺畅。...
2022-09-01 15:16:03
639
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人