自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python中的迭代器和生成器

迭代器(Iterator)迭代器可以看作是一个特殊的对象,每次调用该对象时会返回自身的下一个元素,从实现上来看,一个迭代器对象必须是定义了__iter__()方法和next()方法的对象;iter( )方法是让对象可以用for … in循环遍历时找到数据对象的位置,next( )方法是让对象可以通过next(实例名)访问下一个元素。生成器一边循环一边计算的机制,称为生成器,通过yield语句或生成器函数快速生成迭代器,可以不用iter和next方法, 生成器本质上也是一个迭代器,与迭代器不同的是生成器

2021-07-15 14:27:56 82

原创 python中的内置方法

__new__方法是真正的类构造方法,用于产生实例化对象,方法必须返回一个对象;__init__方法是初始化方法,负责对实例化对象进行属性值初始化,此方法必须返回None;__call__类似于在类中重载 () 运算符,使得类实例对象可以像调用普通函数那样,以“对象名()”的形式使用;__repr__和__str__这两个方法都是用于显示的,__str__是面向用户的,而__repr__面向程序员;del__销毁对象,del x并不直接调用x.del(),前者会将 x 的引用计数减一,而后者仅会在

2021-07-15 12:13:08 105

原创 垃圾回收机制

python采用的是引用计数为主,标记-清除和分代回收两种机制为辅的策略。引用计数:每个对象维护一个(ob_ref)字段,用来记录该对象当前被引用的次数,每当新的引用指向该对象时,它的引用计数加1,当引用失效时计数减1,一旦对象的引用计数为0,该对象立即被回收,对象占用的内存空间将被释放。(它的缺点是需要额外的空间维护引用计数,这个问题是其次的,不过最主要的问题是它不能解决对象的“循环引用”)标记-清除:分为两个阶段:第一阶段是标记阶段,GC会把所有的『活动对象』打上标记,第二阶段是把那些没有标记的

2021-07-15 11:08:50 74

原创 Redis的哨兵模式和主从复制

Redis的哨兵模式Redis的哨兵模式需要主从复制的支持.Redis的哨兵(Sentinel)系统用于管理多个Redis服务器,管理着以下的功能:监控(Monitor):哨兵(sentinel)会不断地检查系统的master和slave是否运行正常提醒(Notification):当监控某个哨兵出现问题的时候,哨兵可以通过api向程序和管理员发送请求自动故障迁移(automatic failover):当系统中的一个master不能工作时候,这个时候哨兵(sentinel)会自动进行故障转

2021-07-15 11:04:31 105

原创 redis缓存雪崩,缓存穿透,缓存击穿的解决方法

缓存雪崩:当Redis服务器重启或者大量缓存在同一时期失效时,导致大量数据直接访问据库;解决方案:设置缓存过期时间时加上一个随机值,避免缓存在同一时间过期。缓冲穿透:查询一个不存在的数据,(由于没有获取到缓存,所以没写入缓存),导致这个不存在的数据每次都需要去数据库查询,(失去了缓存的意义)。解决方案:对于像ID为负数的非法请求直接过滤掉,采用布隆过滤器(Bloom Filter原理:利用高效的数据结构和算法快速判断出你这个Key是否在数据库中存在,不存在你return就好了,存在你就去查了D

2021-07-15 11:00:57 61

原创 redis内存淘汰策略

redis3.0有6种:noeviction:当内存不足,新写入操作会报错。allkeys-lru:当内存不足,在所有键中,移除最近最少使用的key。allkeys-random:当内存不足,在所有键中,随机移除某个key。volatile-lru:当内存不足时,在设置了过期时间的键中,移除最近最少使用的key。volatile-random:当内存不足时,在设置了过期时间的键中,随机移除某个key。volatile-ttl:当内存不足时,在设置了过期时间的键中,有更早过期时间的key优先移除。

2021-07-15 10:56:53 41

原创 redis阻塞操作

redis中blpop可以实现链表的阻塞操作。(redis在blpop命令处理过程时,首先会去查找key对应的list,如果存在,则pop出数据响应给客户端。否则将对应的key push到blocking_keys数据结构当中,对应的value是被阻塞的client。当下次push命令发出时,服务器检查blocking_keys当中是否存在对应的key,如果存在,则将key添加到ready_keys链表当中,同时将value插入链表当中并响应客户端)。...

2021-07-15 10:54:32 310

原创 redis数据结构优化

利用zipList来替代大量的Key-Valueziplist是一个经过特殊编码的双向链表,它的设计目标就是为了提高存储效率。ziplist可以用于存储字符串或整数,它能以O(1)的时间复杂度在表的两端提供push和pop操作。实际上,ziplist充分体现了Redis对于存储效率的追求。一个普通的双向链表,链表中每一项都占用独立的一块内存,各项之间用地址指针(或引用)连接起来。这种方式会带来大量的内存碎片,而且地址指针也会占用额外的内存。而ziplist却是将表中每一项存放在前后连续的地址空间内,一个z

2021-07-15 10:51:45 164

原创 redis数据结构的底层实现原理及应用场景

字符串:简单动态字符串(SDS)的数据类型来实现。struct sdshdr { int len; // buf 中已占用空间的长度 int free; // buf 中剩余可用空间的长度 char buf[]; // 数据空间 };SDS保存了字符串的长度,而C字符串不保存长度,需要遍历整个数组(找到’\0’为止)才能取到字符串长度;修改SDS时,检查给定SDS空间是否足够,如果不够会先拓展SDS 的空间,防止缓冲区溢出,而且可以减少为字符串重新分配空间的次

2021-07-15 10:41:59 84

原创 Python里面如何拷贝一个对象?

第一种理解:赋值: 创建了对象的一个新的引用,修改其中任意一个变量都会影响到 另一个浅拷贝: 创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的 方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如 list();3,copy模块的copy()函数}深拷贝: 创建一个新的对象,并且递归的复...

2019-07-22 20:34:11 988

原创 TCP和UDP的区别

1、TCP面向连接,UDP是无连接的2、TCP提供可靠的服务。通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付3、UDP传输效率比tcp高4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信5、TCP对系统资源要求较多,UDP对系统资源要求较少。...

2019-07-22 20:27:43 76

原创 GIL机制

(1)在非python环境中,单核情况下,同时只能有一个任务执行。多核时可以支持多个线程同时执行。但是在python中, 无论有多少核,同时只能执行一个线程。究其原因,这就是由于GIL的存在导致的。(2)GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定。 某个线程想要执行,必须先拿到GIL,...

2019-07-22 20:26:34 424

原创 Python中内存管理

python中的内存管理机制——Pymalloc (1)引用计数: 当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0时,它被垃圾回收。 (2)垃圾回收: 1、当内存中有不再使用的部分时,垃圾收集器就会把他们清理掉。它会去检查那些引用计数为0的对象, 然后清除其在内存的空间。当然除了引用计数为0的会被清...

2019-07-22 20:24:51 275

原创 cookie和session的区别

(1)Cookie 数据存放在客户的浏览器上,session 数据放在服务器上。(2)Cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,考虑到安全应当使用 Session。 可以考虑将登陆信息等重要信息存放为 Session,其他信息如果需要保 留,可以放在 Cookie 中。(3)Session 会在一定时间内保存在服务器上。当访问增多,会...

2019-07-22 20:19:52 133

原创 进程和线程常见面试

(一)进程和线程的主要区别: 进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位 。 在开销方面: 每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销; 线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序 计数器(PC),线程之间切换的开销小...

2019-07-22 20:17:49 426

原创 正则表达式

(一)普通转义字符\d:匹配一个数字,等价于[0-9]\D:匹配一个除数字以外的任意一个字符,等价于[^0-9]\w:匹配一个数字,字母,下划线.等价于[0-9a-zA-Z_]\W:对\w进行取反,等价于[^0-9a-zA-Z_]\s:匹配一个空白字符(可以是空格),等价于[\r\n\t\v\f]\S:对\s进行取反,等价于[^\r\n\t\v\f]\r:匹配一个回车符\n:匹配...

2019-07-22 20:02:11 84

原创 数据库常见面试题

(一)爬虫海量数据存储在mongo上的好处: (1)如果你要经常读取,那么我建议你的MongoDB来做存储。原因在于MongoDB是内存映射模式, 可以充分利用系统的内存资源,内存越大MongoDB的查询速度越快。 (2)MongoDB在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内存资源相当丰富的话, 这将极大地提高数据库的查询速度,毕竟内...

2019-07-22 19:49:34 443

转载 Wind量化接口常用错误状态码

Wind量化接口常用错误状态码 http://blog.sina.com.cn/s/blog_4cf8aad30102vaeq.html

2019-02-27 15:41:31 4385

空空如也

空空如也

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

TA关注的人

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