自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qq_39559879的博客

Hello world

  • 博客(69)
  • 收藏
  • 关注

原创 C 中的“泛型”复制/交换两个变量

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

2020-06-16 19:24:06 311

原创 《算法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 66

原创 [Linux] 下载工具 aria2 的使用

官方文档:https://aria2.github.io/manual/en/html/aria2c.html官方示例:https://aria2.github.io/

2022-11-03 17:09:23 167

原创 ElementUI Table 布局的调试

ElTable 提供了很多自定义表格属性的回调函数,但是官方文档中并没有什么例子。实际开发中,需要结合实际的 DOM 来调试,同时也要清楚 ElTable 的每个元素的作用,这样才能少走弯路。

2022-10-21 10:29:44 109

原创 [js] 实现侧边菜单可用鼠标拖动调整大小的功能

element-ui 提供了一个 nav-menu 组件,默认情况下该组件没有拖动调整大小的功能。下面通过代码为 nav-menu 添加这个功能。

2022-10-20 14:34:35 93

原创 ElementUI 组件设置全局默认值

最近碰到个需求,要求把管理系统的所有 `el-select` 元素都添加 `clearable` 属性。整个管理系统估计有几百个页面,`el-select` 的数量更是不计其数,如果用传统方法一个一个的找然后添加属性,绝对是不现实的。下面介绍另一种更加方便的方法。

2022-10-19 18:02:51 328

原创 【Vue】Vue 判断插槽内容是否加载完成

判断插槽内容是否加载完成,实现显示占位内容等功能

2022-10-04 11:27:11 237

原创 [node.js] PrismaORM 入门

Prisma 的官方网站:https://www.prisma.io/目前应该是 4.x 版本其中 sqlite 还可以指定为其他想初始化的数据库,如 MySQL执行这条指令会在当前项目根文件夹创建一个.env文件用来保存数据库的地址,还会创建一个prisma文件夹,该文件夹中有一个的文件,这个文件用来定义数据库表的字段。.prisma 文件在 VSCode 上有插件,安装后能提供语法高亮和自动格式化等功能其中用model关键字定义表,字段的的数据类型可以参考官方文档,这里主要讲讲和的作用。.env。

2022-09-28 09:42:51 347

原创 [JS] node.js 入门

API 文档:https://nodejs.dev/en/api/v18/documentation/

2022-09-24 20:32:31 357

原创 [JS] 网络请求相关

本文介绍如下内容:1. XMLHttpRequest2. Fetch3. WebSocket三个浏览器原生支持的发送网络请求的方法。

2022-09-20 11:08:35 98

原创 [JS] 表单相关

表单相关,内容包括常用表单控件解释、表单事件等

2022-09-19 18:42:24 216

原创 [JS] canvas 详解

canvas 详解,内容包括绘制路径、图形等

2022-09-19 10:38:25 136

原创 [JS] DOM 的事件监听、混杂模式和标准模式适配

本文主要内容:事件监听鼠标事件键盘事件页面加载事件。

2022-09-19 08:24:37 77

原创 [JS]迭代器、可迭代对象、生成器详解

"迭代器(iterator)是按需创建的一次性对象。每个迭代器都会关联一个可迭代对象,而迭代器会暴露迭代其关联可迭代对象的 API。迭代器无须了解与其关联的可迭代对象的结构,只需要知道如何取得连续的值。这种概念上的分离正是 Iterable 和 Iterator 的强大之处"——引用自《JavaScript 高级程序设计第四版》。

2022-09-15 17:50:02 98

原创 [JS高级程序设计] ES6 新增的集合对象总结

ES6 新增了如下集合对象其中Map和WeakMap是一组,Set和WeakSet是一组,从代码层面来讲,Weakxxx无法被迭代且只能以 Object 或继承自 Object 的对象作为值,因为它们保存的是对象的弱引用。

2022-09-14 09:53:16 57

原创 【JS】前端面试常见手写题总结

本文主要总结从网上看到的各种 JS 手写题,其中应用题居多。实际应用中,需要结合自己的理解而不是背代码。

2022-09-08 16:46:57 106

原创 【nginx】多个子域名配置自动 HTTPS 自动重定向

nginx 配置自动跳转 HTTPS

2022-09-04 23:25:14 706

原创 申请免费域名 + SSL 证书的方法

最近给服务器加了域名,同时配套了 SSL 证书,没有花一分钱,整个配置过程也非常简单,下面来看看是如何完成的吧。

2022-09-03 15:34:01 952

原创 【前端】HTTP相关知识总结

主要总结自:https://juejin.cn/post/68449041000358215752022-9-1 持续更新。

2022-09-01 21:35:40 173

原创 【JS】模块化的几种解决方案(AMD、CMD、ES6、CommonJS)

摘抄自作者:浪里行舟链接:https://juejin.cn/post/6844903744518389768来源:稀土掘金CommonJS规范主要用于服务端编程,加载模块是同步的,这并不适合在浏览器环境,因为同步意味着阻塞加载,浏览器资源是异步加载的,因此有了AMD CMD解决方案。AMD规范在浏览器环境中异步加载模块,而且可以并行加载多个模块。不过,AMD规范开发成本高,代码的阅读和书写比较困难,模块定义方式的语义不顺畅。...

2022-09-01 15:16:03 401

原创 【Vue】v-html 功能加强

v-html的功能是替换元素的innerHTML,在大部分场景下都够用,但是因为是直接替换innerHTML所以无法用 Vue 的事件监听方法。下面引入一个需求,来实现这个功能。

2022-08-08 22:39:29 318

原创 【JS】实现 Promise 的并发数控制

首先JS自带两个并发控制的函数和,前者用来实现并发运行参数列表中的所有Promise;setTimeout(resolve,1000)})}//myFetch并发执行,返回参数列表的PromisePromise.all([myFetch(),myFetch()])//返回最先运行完的myFetch的结果,只有一个Promise.race([myFetch(),myFetch()])上面两个方法还不够灵活,无法实现并发数的控制,下面提供两个思路。...

2022-07-30 09:58:28 508

原创 【Linux】Github Actions ssh 连接服务器的两种方式

github提供了secrets这个选项,作用类似环境变量,具体如何配置见https//docs.github.com/en/actions/security-guides/encrypted-secrets。而如何在GithubAction中配置sshconfig,可以看这篇文章https//blog.benoitblanchon.fr/github-action-run-ssh-commands/总的思路就是创建config文件,然后连接的时候使用。...

2022-07-17 15:53:38 534

原创 实现下拉刷新功能

下拉刷新主要用于移动端网页,PC端网页并没有touch事件所以需要自行模拟。从事件名我们很容易就能看出这几个事件分别代表什么含义。在事件回调函数里面,可以获取touchList,该list中的每一个元素表示一个触摸点的信息。可以看出,触摸事件可以监听到多个触摸点,例如多个手指滑动屏幕就会有多个触摸点。实现下来刷新功能,我们只考虑一个触摸点即可。...

2022-07-15 11:31:17 1025

原创 [JS]数据类型转换规则和运算

先总结看 和 的调用顺序和返回值,如果返回值为原始值则使用,如果两个函数都没返回原始值,则报错。 和 方法的调用顺序在这两个方法都返回原始值的时候有用,因为先被调用的那个方法的返回值会作为运算的值。[] + {}、({}) + [] 等奇怪的加法运算加号的运算规则回头看上面的代码,因为 是两个对象相加,所以会先调用 方法,同理 因为 a 被转为 number,所以整体也是 number 运算。而 则是因为有 string 参与运算,将 的结果当成 string 看待,得到 ‘100’

2022-07-05 15:34:30 27

原创 【JS】实现函数柯里化

函数柯里化也是JS中讲烂的东西了,今天初次接触,结合大佬的文章讲讲自己的理解。参考:https://github.com/mqyqingfeng/Blog/issues/42柯里化的作用最直观的用法就是节省代码中共同参数的重复,比如一个函数有四个参数,其中前三个在多次调用中都是一样的,最后一个视情况不同,伪代码如下:为了减少参数的重复,可以把函数curry化以上,日常开发中感觉并不是很用的上。curry 化的核心实际上 curry 化的核心思路就是不断返回收集参数的函数,直到参数满足函数调用个数,再

2022-07-03 22:14:50 499

原创 【underscore】实现链式调用

这是 underscore 学习的第二章,本章我们在上一章的基础上实现链式调用功能的实现。具体思路参考:https://github.com/mqyqingfeng/Blog/issues/57首先 underscore 默认并没有提供链式调用,需要使用 作为调用第一段的方法,让后面的方法支持链式调用。链式调用的核心是返回 underscore 的实例对象,先写个小 demo 演示这一点可以看到虽然实现了链式调用但是因为没有显式指定调用的终点所以返回的还是 this,一个解决方法是提供一个显式的方法获取

2022-07-03 20:08:45 31

原创 【underscore】函数式调用和面向对象式调用方法的实现

函数式调用_.reverse(‘text’)面向对象式调用_(‘text’).reverse()可以看到二者的区别是函数式调用是直接使用调用方法,而面向对象调用的方法是先创建对象,然后调用方法(不传参)从上面可以看出,underscore 对象不是一个简单的对象,除了能调用方法外,还可以调用自身,在 JS 中函数也是一种对象,且符合我们的要求。underscore 构造函数上面的代码,调用时先判断调用者是否是 underscore 的实例,如果不是就以 obj 为参数创建 underscore 实例,

2022-07-03 17:23:29 67 1

原创 【Linux】写个脚本实现简单的程序单例运行功能

写了个爬虫脚本放到服务器上定时运行,当脚本碰到耗时的任务阻塞太久的时候可能下一次定时调用会发生,这会导致同时运行的脚本数量大于一个,可能会造成数据库数据重复等问题。现在想解决这个问题,但是并不想更改爬虫脚本相关的代码。分析需求不难看出同时运行的爬虫脚本不能大于一个,由于脚本是通过定时任务启动(这里假设是 cron),我们可以在启动爬虫的指令上动手脚,在启动爬虫之前先判断是否有爬虫脚本运行,如果有则不启动爬虫。最直观的方法是通过 ps 查找指定名称的进程,然后判断进程是否存在,如果存在则不启动脚本......

2022-06-29 17:37:10 339

原创 JS基础-深拷贝的实现

简单手写了个深拷贝,记录一下。

2022-06-09 17:10:29 18

原创 Linux 自带的备份工具 rsync 用法总结

有的系统没有自带 rsync,在 CentOS8 下,使用: 安装,其余系统大同小异。一般用法例子:指备份当前目录下所有文件到远程主机的 root 目录下配置 ssh 端口/私钥登录使用 -e 选项指定登录 shell,rsync 默认使用的 shell 登录端口为 22,没有私钥登录。资源模式-a 开启资源模式传输,这个模式等于几个选项的缩写,主要功能有:详细输出-v 开启详细输出,-q 不输出。压缩传输-z 开启压缩人类可读输出-h 或者 -P完整示例其中...

2022-06-06 16:21:44 652

原创 ElMessage 组件实现

源码在线预览功能分析参考 ElementPlus 官网给出的例子,我们的 Message 组件至少需要:自定义各种类型的 Message(error、info、success 等)提供静态方法调用,如 Message.success()进入、退出动画;Message 消失后上移动画Message 组件样式方面 Messge 组件非常简单,就是个 fixed 居中的 div,而进入、退出动画可以通过 transition 实现,消失可以通过 props 调用回调通知调用者。<tem

2022-05-25 17:18:55 1119

原创 实现 ElementPlus 的 MessageBox

ElementPlus 的 MessageBox 主要功能分析提供一个函数用来展示消息框,这个函数提供如标题、内容等配置参数消息框出现和消失时有动画使用 Promise 获取消息框的结果基本思路Vue 中动态显示一个组件,无非就是通过 h 函数创建 VNode,并且把这个 VNode 挂载在 DOM 树上。这里有两种挂载的方式:createApp在 main.js 中创建 Vue 实例用的就是这种方法,这也是 Vue3 中代替 Vue2 的 Vue.extend 的方法,简单使用案例如下:

2022-05-25 10:53:19 799

原创 【前端逆向】实现拦截函数功能

需求:实现 hook 某个函数,调用该函数后可以执行自定义的 hook,无需修改原网站的 js 代码。示例这里实现

2022-05-17 15:44:32 129

原创 HTTP 请求传参个人总结

?传参格式:http://www.baidu.com?name=123&age=12参数直接跟在 URL 后面json body这种传参方式一般用于 POST 请求格式:http://www.baidu.com请求体:{ name: 123, age: 12}打开浏览器可以看到 body 被解析为 JSON 格式,且名字为请求负载formdata 传参这种传参方式一般也用于 POST,URL 中无法看到请求参数格式:请求头需要指定:headers: {

2022-05-07 19:01:07 559

原创 【Vue3】实现 el-tab 的基本功能

这次我们要实现两个组件:Tab.vue 和 TabItem.vue,其中 TabItem 是 Tab 的插槽内容。实际上不用封装组件也能达到类似的效果,但是考虑到语义化和可复用性等要求,封装一个 Tabs 组件还是有必要的。根据 Vue 的风格指南,组件名需为两个以上的单词,以避免和原生 HTML 的标签冲突,这里为了简单起见不实现这个要求。在线体验Tabs 的基本功能<Tab :active-index="activeIndex"> <TabItem v-f

2022-04-20 17:47:42 1007 1

原创 v-lazy自定义指令实现图片懒加载(非IntersectionObserver方案)

看了 ElImage 的源码后,改进了之前用 IntersectionObserver 实现的图片懒加载指令。在我的实现中 IntersectionObserver 的主要问题是不支持 rootMargin,只能在图片进入视口时加载。而 ElImage 的实现方案是判断图片是否进入滚动容器,在这个基础上我们略加配置即可实现 topMargin 预加载的功能。import { useThrottleFn, useEventListener} from '@vueuse/core'functio

2022-04-08 20:23:16 558

原创 ElementPlus 源码学习之 el-image 的基本实现思路

el-image 的基本功能有:加载中占位加载失败占位加载成功显示图片图片懒加载先考虑加载占位的情况,我们不难发现加载有成功、失败、加载中这三种状态,由于加载成功这个状态可以视为其他两种状态的排除,所以实际上我们只需要定义两个状态:// 默认为加载中状态loading = ref(true);// 默认加载没有出错error = ref(false); 然后提供插槽让用户可以自定义加载中和出错的图片占位:<template> <slot v-if="load

2022-04-05 16:08:21 1679

原创 【Vue】Element-Plus 源码学习笔记——实现一个基本的 ElMessage 组件

先贴下 Element-Plus ElMessage 源码的网址。我们需要实现的效果类似 ElMessage,即能够显示多个消息、上一个消息消失下面的消息会自动往上移动、进入移出动画、自定义消息和持续时间。其他选项这里不考虑。大体思路我们的 ElMessage 组件通过函数调用动态显示,无需事先在页面中放入组件,这样能更灵活也更方便。实现的基本思路是使用函数动态渲染组件到页面上。createVNode 和 render实际上 createVNode 是 h 函数的别名,这两个函数的功能是创建一个 V

2022-04-04 14:41:48 1022

原创 【Git】Git 常用命令总结

进入正题前,先定义几个指令别名,加快打代码的效率:alias gm='git commit -m'alias gam='git commit -am'alias gs='git status'alias glo='git log --oneline'alias ga='git add'git checkoutgit checkout -b branch name 创建分支并切换到该分支git checkout a7981c0 切换到 a7981c0 这个提交,

2022-03-15 16:46:21 26

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除