自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 解决跨域问题 has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present

说一下做项目时需要用到html2canvas做项目截图踩到的跨域坑。项目需要拉取用户的头像,而linkedin和微信的头像存放于cdn中,这边涉及到的跨域问题。坑1:由于跨域,画布被污染,不能调用 toBlob(), toDataURL() 或 getImageData() 方法,调用它们会抛出安全错误。按网上说的做, 配置 useCORS: true, ...

2019-10-21 11:38:56 387719 22

原创 枚举法-熄灯问题 - Python3版本

有一个由按钮组成的矩阵,其中每行有6个按钮,共5行。在上图中,左边矩阵中用X标记的按钮表示被按下,右边的矩阵表示灯状态的改变。在下图中,第2行第3、5列的按钮都被按下,因此第2行、第4列的灯的状态就不改变。2、其次考虑,第一行开关的状态确定之后,其余行的开关状态也就确定了(下一行必须把上一行的灯全灭,确保上一行是全灭状态,如此类推,直到最后一行,如果是全灭,那么就是正确解),也就是说,我们只需要考虑第一行开关状态即可,最终就能推导出下一行开关状态。0表示灯的初始状态是熄灭的,1表示灯的初始状态是点亮的。

2024-09-23 10:48:21 349

原创 从excel中提取嵌入式图片的解决方法

我的excel中有浮动图片和嵌入式图片,但是openpyxl的_image对象只提取到了浮动图片,通过阅读其源码发现,这是因为openpyxl只解析了drawing文件导致的,所以确定需要自己解析。

2023-08-04 15:30:21 4023 1

原创 【接口限流】Python实现滑动时间窗口限流

滑动时间窗口,又称rolling window。为了解决计数器法统计精度太低的问题,引入了滑动窗口算法。比如下图,第二个和第三个组成的时间窗口明显不满足限流要求(单位时间内100个请求数)。滑动时间窗口也不是绝对精准的,这取决于拆分的精度,窗口拆分得越精细,窗口也就越平滑,限流得统计也越精确,但是造成的计算量也越大。窗口往后滑动一个小格子(0.1s)后 ,触发限流,由此看出,滑动时间窗口可以很大程度的避免计数器统计法带来的精度问题。时间窗口拆分为更小粒度,再来看看,前1s仍然满足限流要求。

2023-03-21 18:30:10 1098

原创 【接口限流】简单计数器Python实现固定窗口限流

限流是保证系统可用的一个重要手段,和消息队列相似,都是防止超负荷的流量直接打在服务上造成故障,但又有所不同,消息队列其中一个作用是削峰,但是带来的副作用是异步,业务流程需要配合,而限流则是对请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理。如下图,相同颜色的格子组成1s,假设单位时间(1s)内限流数是100,那么下图的结构是初步满足需求的。分析问题主要的要素有:当前时间窗口内累计请求数、单位时间窗口允许的最大请求数、单位时间大小。更新时间窗口:每单位时间移动一个时间窗口。

2023-03-21 17:11:50 931

原创 【leetcode】543 二叉树的直径,递归解以及栈解

一棵二叉树的直径长度是任意两个结点路径长度中的最大值。题目的意思是,求树里最长的路径,也就是求左右子树深度之和的最大节点,需要注意的是这个节点不一定经过根噢。链接:https://leetcode.cn/problems/diameter-of-binary-tree。我的思路是,遍历这棵树每个节点,这样每个节点的左右子树深度和都能求到,然后作比较即可。返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。

2023-03-17 09:57:07 350

原创 一次Django SSO简单实现

单点登录(Single Sign On)功能是一个非常常用的功能,尤其是我们在多个系统之间需要登录同步的时候。比如访问腾讯视频和QQ音乐,我登录完QQ音乐后,不想在腾讯视频再登陆一次,可以利用单点登录实现。大家可以去试一下y.qq.com和v.qq.com,在任意平台登录,再访问其他平台无需再登录一次。

2022-11-17 10:07:02 729

原创 MySQL崩溃后的恢复

这种情况下,意味着事务失败,我们希望系统可以恢复到事务开始前的状态。但是有可能部分redo log已经落盘了,此时如果通过redo log恢复系统,则会造成出现脏数据的现象。系统会从undo log中找到当前为active的事务ID,即未提交的事务id,把这些事务对应的改动全部回滚掉,从而保证了事务的原子性。我们知道,一般情况下,事务提交时,redo log buffer会强制刷盘。所以系统崩溃后,系统可以通过redo log恢复系统到崩溃前的状态,从而保证了事务持久性。

2022-11-04 16:46:46 1162

原创 一次protobuf-3.6.1交叉编译过程

搞了2小时,差点没把我坑死,必须跟大家分享一下,一定要按照我的步骤进行,不要偷懒,不然重新编译累死自己。

2022-10-12 10:02:46 1551 4

原创 MySQL:巧妙利用1=1和1!=1

就是拼接查询语句时,后面没有查询条件报错,我已经踩过这个坑了,于是乎我在代码中处理了这件事,当有查询条件时拼接WHERE,否则不拼接WHERE。这太傻瓜了/(ㄒoㄒ)/~~。实际上可以用1=1来充当占位符,1=1永远是TRUE,就是一个占位符的角色,可以避免WHERE后面条件为空的尴尬,减少判断逻辑。有时我们仅仅只需要表结构,而不需要表数据,那么可以用11,因为11永远为False,查询出来的数据表为空,只有表头。在开发过程中,经常会碰到这种错误。

2022-09-29 15:02:12 1013

原创 MySQL事务:事务id分配策略

从MySQL的事务ID处理可以学习到,当需要提高性能时,可以把数据存储在内存中,并且按照一定的规则刷新到磁盘中持久化,而不是每次都刷盘,因为每次刷盘代表一次IO,当然这需要看具体需求,重要数据就不能这么做。为什么要+256呢?因为可能会系统异常退出,此时内存中的值还没有刷盘,所以要加上256,防止事务ID冲突,缺点时会存在跳号的情况,但是这是我们可以容忍的,因为最大也就浪费256个号。系统会在内存中维护一个全局变量存储当前最大事务ID值,每当开始一个新事务时,就会把这个值赋给该事务,然后这个变量自增1。

2022-09-22 19:32:36 917

原创 聊聊 mysql 事务?(三:从redo log恢复数据)

MySQL的事务有四大特性,其中之一是持久性,这要求系统奔溃后数据可以被正常恢复。为了保证持久性,引入了redo日志。从性能方面考虑,redo日志先写到buffer区,在适当时机再刷盘到file。从存储方面考虑,为了防止log日志越来越大,MySQL采用了循环写入。为了保证循环写入时,不丢失未持久化的数据,又引入了checkponit的概念,通过checkpoint_lsn可以知道那些日志可以被覆盖。

2022-09-20 11:30:37 1413

原创 聊聊 mysql 事务?(二:redo log保证事务持久性)

需要注意的是,不是每次flush脏页,都会进行一次checkpoint,这两个任务一般情况下是不同线程执行的,checkpoint是指,从flush链表中计算最大可以被覆盖的redo日志对应的lsn值,然后更新到redo日志中的管理信息中去。可能有的人会想,那直接刷盘不就行了,但是想想看,MySQL为啥要先写入BufferPool而不是直接刷盘,不就是为了提高性能嘛,一次事务可能涉及到多张表,多个索引,这些需要操作的页都不一定是连续的,会产生很多的随机IO,这是我们无法接受的。

2022-09-19 20:13:16 1408

原创 聊聊 mysql 事务?(一)

事务 transaction 是一个抽象的概念,其实就是一组操作集合。mysql 不是所有存储引擎都支持事务,只有 InnoDB 和 NDB 支持(下文忽略)。自动提交​自动提交的默认值为ON,就是说默认情况下,如果不显示声明开启事务,那么每次执行SQL语句都算一次事务,MYSQL帮我们自动提交了。-- 第一种:-- 第二种:WORK 可省略两种语句的效果一致,只不过START TRANSACTION可以加限定条件,有兴趣的自行查下资料。

2022-09-17 15:39:10 642

原创 python 动态导入模块,实现模块热更新

实现对py文件热更新,动态导入

2022-08-26 10:24:55 3324

原创 Complete Binary Search Tree 完全二叉搜索树,python实现

关键难点是如何计算左孩子的个数,因为给定一个长度为n的序列,只要知道左孩子个数,就可以根结点的位置,以及右孩子个数等等关键数据。X的值可以根据公式①求出来,需要注意的是X大于。化简后可以求得,②H ≈ log(N+1)输出: 完全二叉搜索树序列(数组表示)已知H后,左孩子数目就可以求出来了 ③。输入: 完全二叉树序列(数组表示)设下图总结点个数为N,得出①。下面用两种方式实现,分别是递归法以及堆栈法。(左子树的最大值),即 X = min{时,即X长到右子树那边去了,只能取。...

2022-08-16 11:43:04 637

原创 leetcode 297:二叉树的序列化与反序列化,堆栈解法,python实现

Leetcode 297:二叉树的序列化与反序列化,堆栈解法,python实现

2022-08-12 18:15:00 259

原创 最短路径算法之三:多源带权图,Floyd算法,python实现

求多源带权图最短路径,Floyd算法,python实现

2022-08-11 10:55:16 1071

原创 最短路径算法之二:单源有权图,Dijkstra算法,python实现

单源有权图求最短路径,Dijkstra算法python实现。

2022-08-10 22:33:54 1354

原创 最短路径算法之一:单源无权图,python实现

在图论中,有一类经典问题,就是最短路径问题。最短路径问题,又分为:单源无权图最短路径问题,单源有权图最短路径问题,多源有权图最短路径问题

2022-08-10 18:20:32 859

原创 图的遍历应用之拯救007,python版本详细解析

在老电影“007之生死关头”(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 —— 直接踩着池子里一系列鳄鱼的大脑袋跳上岸去!(据说当年替身演员被最后一条鳄鱼咬住了脚,幸好穿的是特别加厚的靴子才逃过一劫。)设鳄鱼池是长宽为100米的方形,中心坐标为 (0, 0),且东北角坐标为 (50, 50)。池心岛是以 (0, 0) 为圆心、直径15米的圆。给定池中分布的鳄鱼的坐标、以及007一次能跳跃的最大距离,你需要给他指一条最短的逃生路径

2022-08-05 17:29:31 2371 9

原创 判断两棵二叉树是否同构,三种实现方式(递归、队列、堆栈)

例1:下图两棵树同构,因为对T2,交换A左右孩子;交换B左右孩子,交换G左右孩子,经过3次交换后,T2=T1,即两棵树全等,所以说这两棵树是同构的。例2:下面两棵树异构,因为对T2-B的左右孩子不等于T1-B,所以异构。 数组表示法:一棵结点数为5的二叉树可以表示为下图 缺点:浪费空间,5个结点就需要13个空间来保存,增删改不方便。 优点:空间地址连续,能够快速查找 链表表示法:一棵结点数为5的二叉树可以表示为下图 优点

2022-07-13 18:12:29 5361

原创 先序和中序遍历序列确定一颗二叉树(还原二叉树)

我用了两种方法解,分别是递归法和堆栈法。递归法是最简单的,学完递归法后,建议一定要学习堆栈法,因为递归程序实际上也是堆栈实现的。 分析: 例: 先序序列 a bcde fghij ; 中序序列 cbed a hgijf 对于根节点a,先序、中序序列可以分别分解为下图两棵树: 对于每个节点的左子树、右子树,按照同样的算法逐步分解,最后可以确认一棵唯一树。 实现递归算法后,虽然简单,而且代码逻辑清晰,

2022-07-12 14:35:31 8128 2

原创 哨兵线性序列查找: 解决问题方法的效率,和算法的巧妙程度有关

最近在复习数据结构,看到查找算法,很有启发,哪怕是最简单的顺序查找,也有可以优化的地方。例:给定一个整数数组,求数列中是否存在指定关键字K,若存在返回K所在的数组下标。 一般地,大家都会想到就顺序查找呗,简单粗暴,数组遍历一遍就完事儿了。 经过学习,可以在数组头插入一个哨兵值为K,这样查找时不需要判断边界,只要最后返回的值和哨兵下标不一致,那么数组中存在K,否则没找到,因为最后最后循环下标总会遇到哨兵。 两种写法对比就是,只需要牺牲一个整数的空间,就可以

2022-07-07 17:43:40 459

原创 字典、哈希表、数组的概念

首先不要把抽象的数据结构和底层实现混为一谈。数据结构上称为一维数组,可以用线性表、向量、一维矩阵来存储。数据结构上称为二维数组,可以用二维矩阵或作为某种其他结构的内部存储。 字典是一个应用概念,是一个存储键值对的结构,可以用哈希表、红黑树实现。 所以,很多人都混淆了,字典和哈希表有啥区别,咋那么像呢,都是存储键值对。字典底层就是哈希表(不一定,可能是树)呀!! 哈希表中存储着entry,也就是键值对。散列函数对Key进行散列计算得到一个哈希值,这个值就是该键值对在哈

2022-06-23 17:21:57 1293

原创 快慢指针求链表的中间节点

问题:给定一个头结点为head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。咱就是说,看到题目简单的不行,暴力咔咔就解出来了,不就是第一次遍历链表,得出链表长度;第二次遍历链表的一半么。一顿操作猛如虎,结果出来二百五。是通过验证了没错,但这效率也太差了,太不程序员了吧!以下是 朴素解法:咦~(地铁老人)...

2022-06-13 20:32:11 750

原创 Confluence 查看文档乱码问题

原因是缺少windows字体。1、拷贝字体:从windows的 C:\Windows\Fonts 下拷到linux的 /usr/share/fonts 下, 新建个目录比如 msttcore 放进去2、安装字体:大家可以查阅这篇文章在Ubuntu系统中安装字体(以安装华文行楷和方正舒体为例)3、修改confluence环境配置文件:在confluence的安装目录, 如/opt/atlassian/confluence/bin下找到setenv.sh, 找到CATALINA_OPTS, 加.

2022-05-07 16:09:56 1913

原创 在Confluence中编辑Office - ONLYOFFICE

由于 Confluence 自带的 View File 宏太难用了,推荐大家安装 ONLYOFFICE,浏览编辑 office 的一把好帮手,再也不用担心电脑上没有 OFFICE 啦。看一下原生编辑和ONLYOFFICE对比效果:原生: ONLYOFFICE(神器):一、部署 ONLYOFFICE 服务二、修改 ONLYOFFICE 配置三、Confluence 连接 ONLYOFFICE四、使用一、部署 ONLYOFFICE 服务找一台安装了gi..

2022-05-07 14:29:30 4474 4

原创 MYSQL 为什么不要使用SELECT * 作为查询条件?(持续更新)

请注意,这篇文章仅针对 InnoDB 存储引擎讨论。1、减少回表次数我们知道,InnoDB 中索引分为两种,聚簇索引和二级索引,其中聚簇索引的叶子节点存放完整的用户数据,而二级索引的叶子节点只存放 索引列+主键 数据,并且叶子节点按照索引列值从小到大排序链接,具体的,大家可以自行查阅资料补充知识点。当我们执行像这么一条查询语句时SELECT *FROM t1WHERE key1 = "a"假设 t1 中有2个索...

2022-04-20 17:21:50 4395

原创 MySQL InnoDB数据页结构,数据在单页内是如何存储的,如何快速定位数据位置

InnoDB为不同的目的设计了很多不同类型的页:存放空间头部信息的页 存放ChangeBuffer的页 存放INODE信息的页 存档UNDO日志信息的页 存档记录的页(索引页) 等等目录1 页结构1.1 User Records1.1.1 User Records 中的记录头信息1.2 Page Directory那么,划分组的依据是什么呢?那么,想要查找一条记录时,是怎样提高效率的呢?那么,如何找到槽2所在分组中主键最小的那条记录呢?1.3 页面头部1.

2022-04-15 18:25:47 1785

原创 MYSQL 启动选项和系统变量

目录1 启动选项1.1 在命令行上使用选项1.1.1 长形式1.1.2 短形式1.2 在配置文件上使用选项1.2.1 配置文件路径1.2.2 配置文件的内容2 系统变量2.1 查看系统变量2.2 设置系统变量2.2.1 通过启动选项配置2.2.3 系统变量的作用范围3 启动选项和系统变量的区别4 状态变量1 启动选项1.1 在命令行上使用选项选项名区分大小写 只作用当次启用1.1.1 长形式选项名前使用-- 选项名

2022-04-12 17:11:47 1403

原创 MYSQL 文件目录,数据库的存储文件目录

客户端以及其他可执行文件目录:/usr/bin/mysql 客户端 TIPS: 最好不要在一行命令中输入密码,因为history、ps等命令可以看到 各个参数顺序没有规定mysql_config_editormysql_migrate_keyringmysql_secure_installationmysql_ssl_rsa_setupmysql_tzinfo_to_sqlmysql_upgrademysqladminmysqlbin

2022-04-12 16:55:54 1756

原创 解决pandas读取xlsx时报错:Must explicitly set engine if not passing in buffer or path for io.

今天在用低版本的pandas==0.24.2时,读取xlsx文件报错。pd.read_excel(xlsx_file_IO_string) # xlsx IO流Must explicitly set engine if not passing in buffer or path for io.查看了源代码,如果未指定engine,那么默认使用xlrd来读,而且我本地的xlrd==1.2.0,所以不存在xlrd版本问题。另外又尝试指定了engine=openpyxl,仍然不能解决读取xl

2022-03-27 22:49:19 1609

原创 pandas 数据导出为excel

今天分享一个pandas数据导出到excel的小小经验。默认你已经学会了怎么初始化数据到pandas中。这里只分享导出。导出到# file_path 需要保存的文件路径# table pandas DataFrame对象writer = pd.ExcelWriter(file_path) # 初始化一个writertable.to_excel(writer, float_format='%.5f') # table输出为excel, 传入writerwriter.save()

2022-03-27 14:49:05 22381

原创 ValueError: unsupported format character ‘Y‘ (0x59)

今天执行一条SQL时报错,原因是SQL中存在类似DATE_FORMAT的函数,和python的占位符冲突了,需要处理一下。比如原SQL是执行报错:解决:除了这里,还有其他一些相似的内置符号冲突也是这样解决。比如你的正则需要匹配文本中的字符"\",那么正则表达式里将需要4个反斜杠"\\\\"解决内置冲突问题:...

2022-03-25 11:41:21 1487

原创 python 获取两个日期之间的所有月份

def get_month_range(start_day:datetime, end_day:datetime): months = (end_day.year - start_day.year)*12 + end_day.month - start_day.month month_range = ['%04d-%02d' % (int(start_day.year + mon//12), int(mon%12+1)) for mon in ran.

2022-03-25 11:28:09 3534

原创 LEFT JOIN直接关联表和LEFT JOIN关联子查询的区别

今天分享一个工作经验,有2张表,考勤组表 和 考勤组-用户表,我想要查询所有考勤组的人员信息。考勤组表现有数据,字段如下考勤组-用户表现有数据,字段如下:自然的,我用LEFT JOIN来关联两张表-- 查询考勤组用户SELECT * FROM attendence_group_attgroup att_groupLEFT JOIN attendence_group_attgroupuser user_group ON att_group.id = user_grou

2022-03-18 17:36:30 3971 2

原创 Redis高可用方案之哨兵模式(Sentinel)

絮絮叨叨:Sentinel是基于主从复制的,大家在学习哨兵模式之前,应该具备主从复制的基础,可以阅读我的这篇文章:Redis主从复制 Replication接下来正式进入正文,本文主要说明Sentinel如何感知服务器,如何认定主服务器下线,以及如何选举新的主服务器过程。1 Sentinel主要工作流程Sentinel 哨兵是Redis的高可用解决方案:Sentinel系统是由一系列Sentinel实例组成的,负责监视任意多个主服务器,以及主服务器属下的所有从服务器。如下图,双环(seve.

2022-02-23 16:26:24 1347

原创 REDIS之主从复制(REPLICATION)

主从同步可以用于实现读写分离,减轻服务器读写压力,也可以用来做容灾备份,REDIS实现了这一功能,下面跟大家分享一下,我的学习笔记。目录1 概念介绍2 旧版复制功能的实现2.1 同步2.2 命令传播2.3 旧版复制功能的缺陷3 新版复制功能实现3.1 部分重同步的实现3.1.1 复制偏移量3.1.2 复制积压缓冲区3.1.3 服务器运行ID3.2 PSYNC命令的实现1 概念介绍用户可以通过slaveof命令或者配置slaveof选项,让...

2022-02-21 20:29:31 2260 1

原创 Redis持久化之AOF

Redis提供了2个不同形式的持久化策略:RDB (redis database) AOF (append of file)这篇文章则记录一下我学习 AOF 过程中的一些笔记,分享给大家。目录AOF 模式1 AOF说明1.1 何时创建/更新AOF文件1.2 何时载入和恢复1.3 持久化实现2 AOF重写2.1 AOF何时重写2.2 AOF文件重写的实现2.3 AOF后台重写3 AOF的优缺点AOF 模式1 AOF说明...

2022-02-18 18:08:34 1024

空空如也

空空如也

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

TA关注的人

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