自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Echarts 自己控制 legend 点击事件

Echarts 自己控制 legend 点击事件的问题先看需求现在想实现的 情况是一进去页面,所有的 Echarts 中 legend 的所有选项都是默认选中的状态(这是 Echarts 默认的)然后当“9”号标识,也就是“一#斗”点亮时,与之相对应的“1、2、3”仓位,即“石灰石、污泥球、生白”也必须点亮,然后 “9”号点亮之后 “1、2、3”号仓位也可以自己控制自己的 点亮还是关闭,然后当“9”号再次从关闭变成点亮的状态时,“1、2、3” 会再次点亮。var dou1_legend_

2021-05-28 10:25:56 6216

原创 设置滚动条样式

谷歌浏览器设置滚动条样式<style> ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-thumb { background-color: rgb(59, 182, 225); transition: all .2s; border-radius: 6px; } ::-webkit-

2021-05-26 18:18:53 170

原创 Django save方法的update_fields参数

Django save方法的update_fields参数今天遇到的是 django orm 中 save() 使用上的一些小细节,我们来直接看一下代码position_obj.line_status = position_status if line_action == LineRecord.STATUS_UP: position_obj.is_use = True position_obj.parent_id = parent_id else:

2020-11-03 13:35:41 2644

原创 关于pycharm使用多行注释注释中文时会报黄的问题

关于pycharm使用多行注释注释中文时会报黄的问题先看一下问题因为之前使用的一直是 python3 版本没有出现过这种情况,上网查了查,发现 python2 会出现这种情况,又看了一下公司现在用的版本,三个字:草率了。。。然后恍然大悟,急忙再第一行加上了# -*- coding:utf8 -*-,效果如图自此,我们也来温习下 python2 和 python3 的一些区别点:编码方面:python2中的默认编码时ASCII,这也是python2经常出现编码问题的原因之一;python3的

2020-10-27 10:56:20 1499

原创 django的外键关联查询(双下划线方式)

django的外键关联查询(双下划线方式)先看models层的内容class WebSite(BaseModel): """ 客户的网站信息 """ name = models.CharField(max_length=20, blank=True, verbose_name=u'网站名称') url = models.URLField(max_length=200, blank=True, verbose_name=u'外网网址') flag = mod

2020-10-16 13:59:55 2471

原创 剑指offer 之二叉树和为某一值的路径

"""问题:二叉树和为某一值的路径 输入一颗二叉树的根节点和一个整数, 按字典序打印出二叉树中结点值的和为输入整数的所有路径。 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路: 1.利用栈的思想,先进后出 2.叶节点说明该节点既没有左子树也没有右子树"""# -*- coding:utf-8 -*-class TreeNode: def __init__(self, x): self.val = x

2020-08-16 22:10:45 98

原创 剑指offer 之二叉搜索树的后序遍历序列

"""问题:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。思路: 1.后序遍历:左右根, 得知序列最后一个元素为根节点 2.中序遍历:左根右, 二叉搜索树的中序遍历为单调递增序列 3.要判断是否为二叉搜索树,即看 左<根<右 是否成立即可"""# -*- coding:utf-8 -*-class Solution:

2020-08-16 21:09:02 92

原创 剑指offer 之从上到下打印二叉树

"""问题:从上到下打印二叉树 从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路: 1.队列思想,先进先出, append() + pop(0) 2.从根节点开始循环判断左右结点"""# -*- coding:utf-8 -*-class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Nonec

2020-08-16 20:29:42 119 1

原创 剑指offer 之二叉树的镜像

"""问题:二叉树的镜像 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5思路: 1.利用递归思想, 不断交换树的左右结点"""# -*- coding:utf-8 -*-class TreeNode:

2020-08-16 20:12:51 68

原创 剑指offer 之树的子结构

"""问题:寻找二叉树的子结构 输入两棵二叉树A,B,判断B是不是A的子结构。 (ps:我们约定空树不是任意一个树的子结构)思路: 1.如果B树是A树的子树,会有三种情况 a.从A的根节点开始相同 b.从A的左子树开始相同 c.从A的右子树开始相同 2.利用递归的思想分别讨论,有一种情况吻合就说明符合题意的情况 """# -*- coding:utf-8 -*-class TreeNode: def _

2020-08-16 20:07:55 91

原创 剑指offer 之重构二叉树

"""重构二叉树: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如输入前序遍历序列{1,2,4,7,3,5,6,8} 和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路: 1.前序遍历 根左右, 中序遍历 左根右, 后序遍历 左右跟 2.通过前序遍历确定根节点,通过根节点和中序遍历确定左右子树 3.递归循环,最后输出根节点 """

2020-08-16 19:42:03 110

原创 剑指offer 之反转链表

""" 反转链表 思路: 1.设置新的头结点,并赋值为None 2.循环往复判断是否还有结点,用指针保留下一个节点的位置, 3.将结点的指针指向它的前一个节点,最后输出新头结点的位置"""class Solution: # 返回ListNode def ReverseList(self, pHead): # write code here if not pHead or not pHead.

2020-08-16 12:59:34 71

原创 剑指offer 之链表的倒数第K个结点

""" 链表的倒数第k个节点 思路:快慢指针法 1.先让快指针提前走K步 2.将快指针作为判断条件,让快慢指针同时移动 3.当快指针走到尾结点时,慢指针所指位置即是K的位置"""class Solution: def FindKthToTail(self, head, k): slow,fast=head,head for i in range(k): if not fast:

2020-08-16 12:49:16 70

原创 剑指offer 之从尾到头打印链表

# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # 返回从尾部到头部的列表值序列,例如[1,2,3] def printListFromTailToHead(self, listNode): # write code here if no

2020-08-16 12:43:06 63

原创 剑指offer 之删除链表中重复的节点

""" 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点, 重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 思路: 1.先设置新的非数字类型的头结点 2.通过循环求出相同结点的值,并赋值给变量 3.再次循环链表,如结点的值和刚才赋值变量的值相同,则跳过该节点 4.最后输出新头结点的下一个结点

2020-08-16 12:31:18 127 1

原创 剑指offer 之链表中环的入口结点

""" 链表中环的入口节点"""class Solution: # 解法1:当两个节点的值相等时,此刻节点即为入口节点 def EntryNodeOfLoop(self, pHead): # write code here templist = [] p = pHead while p: if p in templist: return p

2020-08-15 20:29:25 79

原创 剑指offer 之两个链表的第一个公共结点

""" 找出链表的第一个公共节点 解法一:借助列表 解法二:两个指针"""# 解法一class Solution: def FindFirstCommonNode(self, pHead1, pHead2): # write code here list01 = [] list02 = [] while pHead1: list01.append(pHead1)

2020-08-15 18:20:06 78

原创 剑指offer 之复杂链表的复制

这是一道较为复杂的链表的经典面试题,下面直接贴出代码,欢迎大家留言交流""" 复杂链表的复制 思路:1.先循环一遍,把原链表的各个元素复制一遍连成串 2.再循环一遍,复制原链表的随机指针,在新链表中指向对应元素 3.最后循环一遍,把原链表和新链表解链"""# -*- coding:utf-8 -*-class RandomListNode: def __init__(self, x): self.label = x

2020-08-15 14:58:08 130

原创 python实现 冒泡排序,快速排序,归并排序,二分查找

冒泡排序""" 冒泡排序 思想:冒泡排序的思想就是通过在无序的序列中,让两个相邻的元素一一对比, 小的元素左移,大的元素右移.即小的元素逐渐上浮,大的元素逐渐下沉, 一轮循环下来找到序列的最大值,重复此循环,直到给所有元素排好顺序"""import timedef bubble_sort(li): # 外层循环控制待确定位置元素的个数 for j in range(len(li) - 1, 0, -1): # 内

2020-08-08 10:37:25 301

原创 爬虫时,遇到滑块验证码,来看看这个解决方案

**图形验证码:**干扰、杂色不是特别多的图片可以使用开源库 Tesseract 进行识别,太过复杂的需要借助第三方打码平台。**点击和拖动滑块验证码:**可以借助 selenium、无图形界面浏览器(chromedirver 或者 phantomjs) 和 pillow 包来模拟人的点击和滑动操作,pillow 可以根据色差识别需要滑动的位置...

2020-08-08 10:32:21 2863

原创 你了解分布式爬虫的工作机理吗?

scrapy-redis 实现分布式,其实从原理上来说很简单,这里为描述方便,我们把自己的核心服务器称为 master,而把用于跑爬虫程序的机器称为 slave。我们知道,采用 scrapy 框架抓取网页,我们需要首先给定它一些 start_urls,爬虫首先访问 start_urls 里面的 url,再根据我们的具体逻辑,对里面的元素、或者是其他的二级、三级页面进行抓取。而要实 现分布式,我们只需要在这个 starts_urls 里面做文章就行了。我们在 master 上搭建一个 redi..

2020-08-08 10:07:48 108

原创 scrapy 和 scrapy-redis 的区别?

scrapy 是一个 Python 爬虫框架,爬取效率极高,具有高度定制性,但是不支持分布式。而 scrapy-redis 是一套基于 redis 数据库、运行在 scrapy 框架之上的组件,可以让 scrapy 支持分布式策略, Slaver 端共享 Master 端 redis 数据库里的 item 队列、请求队列和请求指纹集合。为什么选择 redis 数据库,因为 redis 支持主从同步,而且数据都是缓存在内存中的,所以基于 redis的分布式爬虫,对请求和数据的高频读取效率非常高。..

2020-08-07 11:13:50 511

原创 说说你常使用的爬虫框架,它有什么优点?

我平常使用的是 scrapy 框架,scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量代码,就能够快速的抓取到数据内容。Scrapy 使用了 Twisted 异步网络框架来处理网络通讯,可以加快我们 的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。scrapy 组成部分【1】引擎(Engine)----------整个框架核心【2】爬虫程序(Spider)------数据解析提取【3】调度器(Scheduler)-----维

2020-08-07 11:12:55 461

原创 python 爬虫 常见的反爬策略及应对方案?

【1】Headers反爬虫 1.1) 检查: Cookie、Referer、User-Agent 1.2) 解决方案: 通过F12获取headers,传给requests.get()方法 【2】IP限制 2.1) 网站根据IP地址访问频率进行反爬,短时间内限制IP访问 2.2) 解决方案: a) 构造自己IP代理池,每次访问随机选择代理,经常更新代理池 b) 购买开放代理或私密代理IP c) 降低爬取的速度

2020-08-07 11:10:22 411

原创 Celery 分布式消息队列

Celery 是除了 redis 之外,另一个更加强大的分布式系统,在我们的实际工作中,经常会遇到一些比较耗时的程序,如:发送邮箱、手机验证码等,此时 Celery 就能很好的解决这个问题。Celery 的三大组件:任务模块 Task包含异步任务和定时任务。其中,异步任务通常在业务逻辑中被触发并发往任务队列,而定时任务由 Celery Beat 进程周期性地将任务发往任务队列。消息中间件 BrokerBroker,即为任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列..

2020-08-07 11:06:58 152 1

原创 restful 的设计规范

什么是RESTful?资源 (Resources)网络上的一个实体,或者说是网络上的一个具体信息,并且每个资源都有一个独一无二得URI与之对应;获取资源-直接访问URI即可表现层(Representation)如何去表现资源 - 即资源得表现形式;如HTML , xml , JPG , json等状态转化(State Transfer)访问一个URI即发生了一次 客户端和服务端得交互;此次交互将会涉及到数据和状态得变化客户端需要通过某些方式触发具体得变化 - HTTP m..

2020-08-07 11:04:59 140

原创 redis 的主从复制和哨兵?

主从复制定义1、一个Redis服务可以有多个该服务的复制品,这个Redis服务成为master,其他复制品成为slaves2、master会一直将自己的数据更新同步给slaves,保持主从同步3、只有master可以执行写命令,slave只能执行读命令作用1,分担了读的压力(高并发),提高服务能力2,避免单点问题 【如果系统中 一个进程挂掉,整个系统挂掉,即为单点问题】原理从服务器执行客户端发送的读命令,比如GET、LRANGE、SMEMMBERS、HGET、ZRANG..

2020-08-07 10:54:24 107

原创 内存型数据库也能做到持久性, 来看看 redis 的持久性

持久化定义**将数据从掉电易失的内存放到永久存储的设备上为什么需要持久化因为所有的数据都在内存上,所以必须得持久化RDB模式(默认开启)1、保存真实的数据2、将服务器包含的所有数据库数据以二进制文件的形式保存到硬盘里面3、默认文件名 :/var/lib/redis/dump.rdbRDB 的缺点1、创建RDB文件需要将服务器所有的数据库的数据都保存起来,这是一个非常消耗资源和时间的操作,所以服务器需要隔一段时间才创建一个新的RDB文件,也就是说,创建RDB文件不能执行的过于频

2020-08-07 10:52:36 375

原创 redis 的事务处理?

redis的事务 - 不保证原子性,保证一定的隔离性MULTI 开启事务后,命令进入服务端的命令队列,当服务端输入 exec这个指令时,redis逐一执行命令队列的redis命令。1、MULTI # 开启事务 mysql begin2、命令1 # 执行命令 3、命令2 ... ...4、EXEC # 提交到数据库执行 mysql commit4、DISCARD # 取消事务 mysql 'rollback'redi

2020-08-07 10:50:37 86

原创 你了解python 字典的实现原理和 redis 的哈希原理吗?

python 字典:当我们 使用 d = {} 创建字典时,其实python是创建了一个长度为8的数组。当我们插入key,也就是创建键值对时,给字典的key计算一个哈希值,将哈希值转换成十进制后,通过与8进行取余操作,计算出这个key的位置。python 字典的哈希碰撞:例:d['a'] = 123 d['z'] = 123 当我们给这两个key寻找位置时,假如算出来的位置值一样,hash('a')=4 hash('z')=4此时就出现了哈希碰撞。解决方案:pytho..

2020-08-07 10:49:13 186

原创 redis 过期 key 的删除策略

redis 过期 key 的删除策略1,主动出击​ 1,将带过期时间的key存到一个独立的字典中​ 默认每100毫秒进行一次过期扫描​ 1,在过期字典中随机 20个 key​ 2,检查过期时间,删除已过期的key​ 3, 如果过期key 比例 超过 1/4 重复 1-3​ 默认25ms 超时时间, 避免扫描卡死问题: 大量key同时过期,redis会有卡顿现象解决方

2020-08-07 10:42:04 134

原创 redis 数据库这么强大,来看看它有哪些应用场景

redis 的使用场景?redies 的使用场景主要与它的五大类型相关,具体如下:类型特点使用场景string简单key-value类型,value可为字符串和数字常规计数(微博数, 粉丝数等功能)hash是一个string类型的field和value的映射表,hash特别适合用于存储对象存储部分可能需要变更的数据(比如用户信息)list有序可重复列表消息队列等(生产者消费者模型)set无序不可重复列表存储并计算关系(如微博,关注人或粉丝存放在集合

2020-08-06 09:34:51 104

原创 mysql 怎么限制 ip 访问?

grant all privileges on . to "数据库中用户名“ @"ip地址" identified by "数据库密码";

2020-08-06 09:32:37 811

原创 mysql 的两个存储引擎你了解吗?

mysql 的存储引擎?主要 MyISAM 与 InnoDB 两个引擎,其主要区别如下:InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而 MyISAM 就不可以了;InnoDB 支持行级锁,仅对指定的记录进行加锁,这样其它进程还是可以对同一个表中的其它记录进行操作。MyISAM 支持表级锁。在锁定期间,其它进程无法对该表进行写操作。如果你是写锁,则其它进程则读也不允许InnoDB 支持外键,My

2020-08-06 09:31:37 103

原创 事务的四大特性,简单粗暴

事务的四大特性原子性(atomicity)一个事务必须视为一个不可分割的最小工作单元,对于一个事务来说,不可能只执行其中的一部分操作,整个事务中的所有操作要么全部提交成功,要么全部失败回滚一致性(consistency)事务完成时,数据必须处于一致状态,数据的完整性约束没有被破坏。隔离性(isolation)数据库允许多个并发事务同时对其数据进行读写和修改的能力,而多个事务相互独立。隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。持久性(durabil

2020-08-06 09:30:17 121

原创 来聊聊 数据库的 设计范式

数据库的设计范式第一范式:字段是最小的的单元不可再分。第二范式:满足第一范式,表中的字段必须完全依赖于全部主键而非部分主键。第三范式:满足第二范式,非主键外的所有字段必须互不依赖,即非主键字段不能有传递性依赖。反范式:必要的冗余可增加查询效率 【分类表记录 分类总销售数】​ 必要的冗余可以还原数据真实性 【订单 冗余地址详细信息】...

2020-08-06 09:26:11 88

原创 不结巴的你 会Jieba 分词吗?

jieba 是一款优秀的 Python 第三方中文分词库,jieba 支持三种分词模式:精确模式:试图将句子最精确地切开,适合文本分析;全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词功能:分词,添加自定义词典,关键词提取,词性标注,并行分词,Tokenize:返回词语在原文的起始位置,ChineseAnalyzer for Whoosh 搜索引擎。...

2020-08-06 09:22:54 61

原创 你了解 Django REST framework 吗?

Django REST framework 是一个强大而灵活的 Web API 工具。使用 RESTframework 的理由有:Web browsable API 对开发者有极大的好处 ;包括 OAuth1a 和 OAuth2 的认证策略 ;支持 ORM 和非 ORM 数据资源的序列化 ;全程自定义开发——如果不想使用更加强大的功能,可仅仅使用常规的 function-based views ;额外的文档和强大的社区支持 。...

2020-08-06 09:20:31 94

原创 varchar 与char 的区别?

varchar 与char 的区别?​ char 长度是固定的,不管你存储的数据是多少他都会都固定的长度。而 varchar 则处可变长度但他要在总长度上加 1 字符,这个用来存储位置。所以在处理速度上 char 要比 varchar 快速很多,但是对费存储空间,所以对存储不大,但在速度上有要求的可以使用 char 类型,反之可以用 varchar 类型,...

2020-08-06 09:18:55 115

原创 当面试官问你,代码优化你有什么想法的时候

代码优化从哪方面考虑?有什么想法?1、优化算法时间算法的时间复杂度对程序的执行效率影响最大,在 Python 中可以通过选择合适的数据结构来优化时间复杂度,如 list 和 set 查找某一个元素的时间复杂度分别是 O(n)和 O(1)。不同的场景有不同的优化方式,总得来说,一般有分治,分支界限,贪心,动态规划等思想。2、循环优化每种编程语言都会强调需要优化循环。当使用 Python 的时候,你可以依靠大量的技巧使得循环运行得更快。然而,开发者经常漏掉的一个方法是:避免在一个循环中使用点操作。每一次

2020-08-06 09:17:49 337

空空如也

空空如也

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

TA关注的人

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