自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 vue-router 源码分析——10.路由组件传参

这是对vue-router 3 版本的源码分析。本章讲解router中路由组件传参的多种方式是如何实现的。

2024-08-10 13:37:47 996

原创 vue-router 源码分析——9.别名

这是对vue-router 3 版本的源码分析。本章讲解router中别名是如何实现的。

2024-07-06 23:40:58 631

原创 python-redis-lock是如何实现锁自动续期的

python-redis-lock是一个python的第三方库,基于Redis,封装了分布式锁的逻辑,提供了更高级的API来简化锁的获取、保持和释放过程。包括自动续期、锁超时、重入锁等功能。相比于直接使用redis的setnx,避免了写额外代码来实现锁的复杂逻辑。

2024-07-06 20:31:52 1265

原创 vue-router 源码分析——8.重定向

这是对vue-router 3 版本的源码分析。本章讲解router中重定向是如何实现的。

2024-07-05 20:26:00 873

原创 flask-apscheduler 定时任务被执行两次

要么就不用flask-apscheduler模块而改用其他没有与flask集成的模块,因为flask-apscheduler是flask对apscheduler的扩展支持。这样每当代码更改时,它就可以重新启动该进程,新的子进程会初始化并启动一个新的APScheduler,这就是为什么定时任务会执行两次的原因。定时任务没有被多次调用,事实上如果多次调用的话,flask-apscheduler会抛出异常。但一开始任务还是按时执行一次,重启flask或者修改部分代码后,就发送定时任务一次执行两次了。

2024-07-05 17:39:36 479

原创 vue-router 源码分析——7.命名视图

vue-router 源码分析:命名视图和嵌套命名视图

2024-07-04 11:52:52 1054

原创 flask使用了blueprint或者restful情况下,scoped_session 创建一个线程安全的会话 with app.app_context()的平替

但是我的项目采用工程模式创建flask app实例。并且在使用了 flask-restx 命名空间的情况下,如果模块需要调用with app.app_context()是无法实现的。但是报错了,显示需要使用 with app.app_context() 来设置一个上下文。测试了以下10w条数据,一次性插入的时间大约为90秒,分10个线程各自插入1w条,下降到22秒左右,整体耗时减少了75%。我的项目后端是python-flask框架,使用了flask-restx来开发RESTful API。

2024-07-03 15:50:07 261

原创 vue-router 源码分析——6.命名路由

在路由初始化时,收集所有用户定义的命名路由记录到 nameMap 字典结构中。在路由匹配时,通过name作为key,从 nameMap 中取出对应的路由记录,以此来生成对应url的路由。命名路由的匹配时间复杂度要优于路径匹配(hashmap-getter 和 数组遍历),所以理论上命名路由的匹配时间要少于路径匹配。如果项目有大量路径匹配的路由时,可以转换成命名路由来优化匹配。

2024-06-13 21:01:13 883

原创 Flask-REXTx 学习笔记——2.字段掩码(Fields masks)

字段掩码是一种在序列化和反序列化过程中使用的机制,用于控制哪些字段应该被包含或排除。在不同的上下文中,字段掩码可能有不同的实现和应用方式,但基本概念是相似的。选择性序列化:字段掩码允许开发者指定在将数据对象转换为JSON或其他格式时,应该包含哪些字段。这可以用于简化响应、保护敏感数据或根据客户端需求定制响应内容。字段过滤:在API响应中,某些字段可能对客户端来说是不必要的,或者出于安全考虑不应该公开。字段掩码可以用来过滤掉这些字段,只返回必要的信息。嵌套字段控制。

2024-06-11 21:44:10 851

原创 Flask-REXTx 学习笔记——1.响应编组(Response marshalling)

Flask-RESTx是一个基于Flask的扩展,它提供了一些额外的功能来帮助开发人员更轻松地构建强大的RESTful API。这些功能包括API文档的自动生成、请求参数解析和API资源管理等。Flask-RESTx的目标是在维护API时能够提供更好的文档和工具支持。它是Flask-RESTful的增强版(实际上是因为lask-RESTful的开发者在GitHub上迟迟不处理BUG和优化,所以有人做了一个分支开发了Flask-RESTx。

2024-06-10 20:03:39 488

原创 vue-router 源码分析——5.编程式导航

1.Vue-Router的push、replace、go都是对window.history的pushState、replaceState、go的封装。2.利用了“洋葱模型"将router的相关功能(路由守卫、钩子函数等)加入到url跳转的过程中3.利用上面的设计模式,在保证业务解耦的前提下,完全可以达到官网说的“Vue Router 的导航方法 (push、 replace、 go) 在各类路由模式 (history、 hash 和 abstract) 下表现一致。

2024-06-10 19:34:58 881

原创 JavaScript中的 && 和 || 区别

如果左侧的表达式为 false 或者可以转换为 false 的值(如 null、undefined、0、“” 空字符串或 NaN),那么 && 操作符将返回左侧表达式的值,并且不会计算右侧的表达式。如果左侧的表达式为 true 或者可以转换为 true 的值,那么 || 操作符将返回左侧表达式的值,并且不会计算右侧的表达式。如果左侧的表达式为 false 或者可以转换为 false 的值,那么 || 操作符将计算右侧的表达式,并返回右侧表达式的值。逻辑或操作符(||)

2024-06-08 17:13:20 337

原创 vue-router 源码分析——4.嵌套路由

这是对vue-router 3 版本的源码分析。本章讲解router中嵌套路由是如何实现的。

2024-06-08 16:58:33 546

原创 javascript中的flat和faltmap的区别

JavaScript 中的 flat 和 flatMap 是数组方法,它们用于处理嵌套数组(即数组中的元素也是数组)。flat 方法用于将嵌套数组“展平”成一个新数组,但不会改变原始数组。flatMap 方法首先使用提供的映射函数对数组中的每个元素进行映射,然后将结果展平到一个新数组中。与 map 方法不同,flatMap 会将映射函数返回的每个数组展平,而不是保留它们作为嵌套数组。这使得 flatMap 特别适合于处理嵌套数组,并且想要将嵌套的元素映射到一个单一的数组中的情况。

2024-06-06 22:21:07 201

原创 vue-router 源码分析——3. 动态路由匹配

这是对vue-router 3 版本的源码分析。本章讲解router中动态路由匹配是如何实现的。动态路由匹配,path-to-regexp,匹配优先级。

2024-06-06 22:13:50 757

原创 Flask sqlalchemy 运行时报错:ModuleNotFoundError: No module named ‘MySQLdb‘

Flask sqlalchemy 运行时报错:ModuleNotFoundError: No module named 'MySQLdb'。查询原因发现是表示 Python 环境中缺少名为 MySQLdb 的模块。MySQLdb 是一个 Python 的 MySQL 数据库接口,它是 MySQL 官方支持的数据库驱动之一。虽然解决了但是感觉很奇怪,因为之前也是用的pymysql,没有指定驱动一样能连接。不知道是不发falsk或者flask-sqlalchemy 的版本更新导致的。

2024-06-04 21:59:22 459

原创 vue-router 源码分析——2. router-link 组件是如何实现导航的

vue-router中 router-link 组件是如何实现导航的。recolve返回的对象里面的内容主要为location, route , href。location是标准化后的to,并且打上了标记表示已标准化,防止多次标准化,提升效率。route是通过遍历pathList和pathMap,利用正则表达式找到的和to匹配的路由对象,里面包含很多需要的内容。href在默认的hash模式下,会在to的前面加上#号,例如这里的’#/foo’。

2024-06-04 21:41:16 882

原创 在docker中运行mysql容器

执行下面的命令就能进入创建的mysql容器,它会进入容器并启动base shell,就相当于我们在本地命令行中一样操作mysql就行。-v 设置卷,将宿主机中对应的path挂载到容器中,这样容器中存储的数据会显示到卷的路径中。这样一个mysql就安装完成了,如何后面想要卸载mysql,直接删除容器即可,比安装在本地再删除的麻烦步骤比起来方便多了。今天打算在一台新机器上安装mysql,一时想不起来安装步骤,同时又觉得查看文档很麻烦。正好之前自学了docker容器相关的内容,就想在容器中安装mysql。

2024-06-03 23:06:12 427 1

原创 vue-router 源码分析——1. 路由匹配

这是对vue-router 3 版本的源码分析。本章讲解router中创建vue-router 实例时内部发生了什么。

2024-06-03 19:48:59 1342

原创 VUEX 3.x源码分析——9. 严格模式

这是对vuex3版本的源码分析。本章讲解vuex中模块的严格模式的相关内容。

2024-06-02 17:32:31 312

原创 VUEX 3.x源码分析——8. 插件开发

store实例化时,接受一个plugins对象,其值为数组,数组的每个元素为函数,函数只接受store为唯一参数实例化时,遍历这个数值并执行函数。这个函数就是开发的插件...

2024-06-02 17:24:06 244

原创 VUEX 3.x源码分析——7. 模块的动态注册和卸载

这是对vuex3版本的源码分析。本章讲解vuex中模块的动态注册和卸载的相关内容。

2024-06-01 21:30:00 931

原创 VUEX 3.x源码分析——6. 理解命名空间namespace

这是对vuex3版本的源码分析。本章讲解vuex中的命名空间namespace对整体的影响。例如模块内部的 mutation,getter和action。在带命名空间的模块内访问全局内容。在带命名空间的模块注册全局 action。mapState, mapGetters, mapActions 和 mapMutations 这些函数来绑定带命名空间的模块。

2024-06-01 16:01:41 1378

原创 VUEX 3.x源码分析——5. 理解Module

这是对vuex3版本的源码分析。本章只讲解vuex中的Module,这也是vuex官网中“核心概念”的最后一个。

2024-05-30 22:13:17 765

原创 VUEX 3.x源码分析——4. 理解Action

这是对vuex3版本的源码分析。本章只讲解vuex中的Actions,这也是vuex官网中“核心概念”的第四个。

2024-05-29 22:51:25 810

原创 VUEX 3.x源码分析——3. 理解Mutations

这是对vuex3.x版本的源码分析。本章只讲解vuex中的Mutation,这也是vuex官网中“核心概念”的第三个。

2024-05-28 17:32:54 857

原创 VUEX 3.x源码分析——2. 理解Getter

这是对vuex3.x版本的源码分析。本章只讲解vuex中的getters,这也是vuex官网中“核心概念”的第二个。

2024-05-23 20:04:00 810 1

原创 VUEX 3.x源码分析——1. 理解state

这是对vuex3.x版本的源码分析。本章只讲解vuex中的state,这也是vuex官网中“核心概念”的第一个。

2024-05-19 21:49:05 975 1

原创 axios源码分析及设计思路

axios源码分析,拦截链,适配器,fetch,XMLHttpRequest

2024-05-15 16:23:02 1009

原创 读书有感——专注于本质复杂业务才会有较高的职业发展

我先做一下自我业务的介绍。我所在的小组主要是开发web的,给运营团队进行数据配置和可视化,还有校验运营团队配置的内容是否正确。我在工作的过程中,感受非常糟糕。其中最困扰我的问题,是一旦有bug暴露,就会挨批。同时我们没有测试团队支持,所有需求都是自己开发+自测完成。。我之前认为是领导的风格、部门的KPI导致的。直到最近读到 David Farley 的著作《现代软件工程——如何高效构建软件》中的“分离本质复杂性和偶然复杂性”内容时,才有所感悟——!

2023-09-10 18:10:18 103 1

原创 apt update时显示ABF5BD827BD9BF62公钥缺失,且执行apt-key导入对应的公钥后依然显示公钥缺失

apt update时显示ABF5BD827BD9BF62公钥缺失,且执行apt-key导入对应的公钥后依然显示公钥缺失。可能的原因是apt源中没有nginx的官方包,需要先添加nginx的官方源,然后再导入这个公钥。添加nginx的官方源到apt源列表中。之后便能正常地更新apt了。

2023-06-11 16:15:01 343 1

原创 Element UI 如何改变select选择框自身的字体颜色

VUE Element UI select el-select el-option 选择框字体颜色,select选择框自身字体颜色

2023-05-13 11:31:48 4873 3

原创 vue页面多个数量不定的table如何增加拖动功能

在前端开发中,遇到一个页面是由一个Tabs 标签页组成,每个标签页下面有多个数量不定的表格(可以通过页面提供的按钮来增删表格)。每个表格都要实现自己内的每行数据可拖动的功能。2. 需要一个收集所有 draggable class的函数,在初始化页面、增加表格、删除表格时调用。2是因为在拖动结束后需要对数据进行操作,所以在拖动的时候,如何确定拖动的是哪个表格。这里用来实现拖动的工具是 sortablejs, 前端组件为element ui。1是由于表格数量是不确定的,如果找到每个表格来激活拖动功能。

2023-01-11 10:36:57 633 3

原创 MYSQL Row size too large (> 8126)

开发时遇到的数据无法入库问题,报错:(1118, ‘Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help . In current row format, BLOB prefix of 768 bytes is stored inline.’)主要是由于某条记录超过了mysql默认引擎

2022-03-18 18:10:03 1526

原创 Flask sqlalchemy db.session.commit 没有效果的问题

Flask sqlalchemy db.session.commit 没有效果的问题在对数据库进行更新某条数据时,发现db.session.commit()没有效果,但是做调试能把赋值都正常打印出来,程序也不报错。cur_file = FileStatus.query.filter_by(file_name='xxx').first()cur_file.file_name = 'abc'cur_file.size = 100000print(cur_file.file_name)print(cu

2021-11-08 19:02:15 3175

原创 Python爬虫遇到HTML标签属性带有 ‘-’ 符号时怎么处理

题主在写一些爬虫代码的时候,偶尔会遇到一些标签中带有‘-’的属性名称。例如:<p css-style="a style">.....</p>之前看有的写法就是先利用BeautifulSoup的find_all函数找到所有p标签,再遍历询问 if p[‘css-style’] == ‘a style’。因为 find_all(‘p’, css-style=‘a style’) 是不合规的.这里完全可以使用BeautifulSoup的select()函数,利用类似CSS选择器

2021-07-20 14:13:40 2003

原创 Python logging模块

logging模块基础知识基础知识日志事件logging.basicConfig()日志模块的组件记录器(Logger对象):处理器(Handler对象)格式器(Formatter对象)日志设置方法基础知识在学习Python的过程中,发现书籍对logging模块的介绍不是很多,而且也放在所有章节的最后几个部分。确实日志模块对于开发小型程序或者个人开发时用处不是很大。但实际上在团队开发大型项目和大规模改造程序的内部构造时,日志是不可缺少的。它能记录相关信息并为之后出现的问题提供有效的帮助。日志事件按

2021-06-30 14:54:56 117 1

原创 Python 常见基础问题

Python 常见基础问题深拷贝和浅拷贝可变和不可变数据类型数字类型:装饰函数最近有一些python的面试,发现比起算法题,很多python常见的问题反而被忽略了。就是只知道一些模糊的答案,可能在做题时能选出正确答案,但是无法解释基本概念。在这个记录一下遇到的问题。深拷贝和浅拷贝python中,主要有三种拷贝方式:直接赋值,浅拷贝(copy.copy)和深拷贝(copy.deepcopy).具体地说,直接赋值就是二者保持一致,如下代码所示,当a中的元素发生变化时,b与a保持一致。额外补充一点,如果

2021-06-23 17:52:38 279

原创 如何斜着遍历一个二维数组

如何斜着遍历一个二维数组的右上部分动态规划中有的题往往需要对dp数组斜着遍历,例如dp[ i ][ j ]的值主要由dp[ i ][ j-1 ]和dp[ i+1 ][ j ]两个值的大小决定,即向右上斜着遍历。n = len(dp]for l in range(2, n+1): for i in range(0, n -l + 1): j = l + i -1 dp[i][j] .....这样既可完成遍历...

2020-12-03 19:23:53 3245

空空如也

空空如也

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

TA关注的人

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