Skip to content

Instantly share code, notes, and snippets.

View stoensin's full-sized avatar
🎯
Focusing

Joe Stone stoensin

🎯
Focusing
  • shenzhen university
  • shenzhen
View GitHub Profile
@stoensin
stoensin / DelayeQueue
Created January 11, 2020 03:16
PriorityQueue基于 最小堆 算法的,添加和移除一个元素的耗时都是log2(n)
from Queue import PriorityQueue
from datetime import datetime
import threading
class Delayed(object):
# 返回:计划执行时间
# 单位: datetime
def plan_time(self):
pass
@stoensin
stoensin / HierarchicalTimerWheel
Last active January 27, 2020 13:23
timer适用场景: 定时任务(5分钟后执行xx任务/每隔1天执行一次) 超时控制(xx分钟没有动作就断开连接) 频率限制(最快只能每5s调用一次API/ 对同一个站点下页面的抓取最低要间隔5s)
from datetime import datetime
from multiprocessing import Lock
def utc_now_timestamp_ms():
return int(datetime.utcnow().timestamp() * 1000)
class Timer:
"""
定时器
@stoensin
stoensin / class
Last active February 27, 2020 10:28
import bisect
import md5
class ConsistentHashRing(object):
"""Implement a consistent hashing ring."""
def __init__(self, replicas=100):
"""Create a new ConsistentHashRing.
:param replicas: number of replicas.
@stoensin
stoensin / Load.Balance
Last active December 18, 2019 10:37
轮询 加权轮询 随机 加权随机 概率负载均衡算法
#轮询
SERVER_LIST = [
'10.246.10.1',
'10.246.10.2',
'10.246.10.3',
]
def round_robin(server_lst, cur = [0]):
length = len(server_lst)
ret = server_lst[cur[0] % length]
cur[0] = (cur[0] + 1) % length
@stoensin
stoensin / 3.Longest Substring Without Repeating Characters
Created December 8, 2019 03:50
字典保存每个字符第一次出现的位置。叫做prefix方法吧,因为需要维护已经遍历到的前缀部分。 当right向后遍历的过程中,如果这个字符在字典中,说明这个字符在前面出现过,即这个区间已经不是题目要求的不含重复字符的区间了,因此,需要移动left。 移动left到哪里呢?有个快速的方法,那就是移动到right字符在字典中出现的位置(即s[right]在前面的位置)的下一个位置。 无论如何都会使用right更新字典,另外记录最大区间长度即为所求。 注意,left更新的时候需要保留最大(最右)的位置。举例说明: 对于abba,当right指向最后的a的时候,left指向的是字典中保留的有第一个位置的a,如果不对此进行判断的话,left会移动到第一个字符b。 left一定是向右移动的,不可能撤…
def longestsubstr(strs):
left, res= 0, 0
chars = {}
for right in range(len(strs)):
cur= strs[right]
if cur in chars:
left = max(left, chars[cur] + 1)
@stoensin
stoensin / image_similarity_function
Created November 20, 2019 03:50
1、分别自定义三种计算图片相似度算法,计算图片相似度算法ORB算法,以及局部敏感哈希phash算法,还有传统的直方图计算相似度算法。 2、定义融合相似度阈值为0.85,若三种算法计算出来的相似度最大值大于等于0.85,则取最大值为融合算法之后的相似度。 否则,则取三种算法计算出来的相似度的最小值,作为融合算法的之后的相似度。 3、定义最终相似度较高判断阈值为0.98,若融合之后的相似度值达到0.98,则认为图片非常相似。
# -*- encoding=utf-8 -*-
# 导入包
import cv2
from functools import reduce
from PIL import Image
# 计算两个图片相似度函数ORB算法
def ORB_img_similarity(img1_path,img2_path):
@stoensin
stoensin / 1bit
Last active November 5, 2019 06:50
n&(n-1)作用:将n的二进制表示中的最低位为1的改为0,先看一个简单的例子: n = 10101(二进制),则(n-1) = 10100 ==》n&(n-1) = 10100 可以看到原本最低位为1的那位变为0。可以发现,当n&n-1的时候,得出来的数将n的最右边一位1消除了,如此重复,有几个一变循环几次,直到n = 0。
class _1bit(object):
def hammingWeight(self, num):
count = 0
while num:
num = num & num-1
count += 1
return count
#like nametuplen:amedtuple(typename, field_names, verbose=False, rename=False)
#
def record_factory(cls_name, field_names):
try:
field_names = field_names.replace(',', ' ').split() # <1>
except AttributeError: # no .replace or .split
pass # assume it's already a sequence of identifiers
field_names = tuple(field_names) # <2>
def __init__(self, *args, **kwargs): # <3>
@stoensin
stoensin / description.valid
Last active September 9, 2019 09:48
description描述符是对多个属性运用相同存取逻辑的一种方式。对数据属性进行管理,例如,Django ORM 和 SQL Alchemy 等 ORM 中的字段类型是描述符,把数据库记录中字段里的数据与 Python 对象的属性对应起来。一般是用描述符来代理另一个类的属性,创建一个实例作为另一个类的属性; 描述符是实现了特定协议的新式类,这个协议包括 __get__、__set__ 和 __delete__ 方法。特性:property 类就实现了完整的描述符协议; 通常,可以只实现部分协议。数据描述符 实现__get__\__set__ 非数据描述符只实现了__get__ ;
def __get__(self,instance,owner):
pass
def __set__(self,instance,value):
pass
def __delete__(self,instance):
pass
#DEMOS
class Int_validation:
@stoensin
stoensin / property.factory
Last active September 9, 2019 09:48
使用特性工厂方法避免设置过多特性 影响代码可读性
def typed_property(name, expected_type):
storage_name = '_' + name
@property
def prop(self):
return getattr(self, storage_name)
@prop.setter
def prop(self, value):
if not isinstance(value, expected_type):