
学习笔记
小么额菇
Life is about waiting for the right moment to act.
展开
-
Python: __getattr__, __getitem__. 与__getattribute__
_getattribute__ :在对对象进行任何属性访问之前,无论属性是否存在,都会调用 __getattribute__。例如,__getattribute__ 可以返回属性值,或调用另一个方法,或记录访问,或缓存结果。__getitem__:当使用方括号对对象进行索引时,如 obj[key],就会调用 __getitem__。例如,__getitem__ 可以返回与key相关联的值,或引发异常,或执行某种计算。例如,__getattr__ 可以返回一个默认值,或引发一个异常,或调用另一个方法。原创 2023-08-23 15:40:31 · 287 阅读 · 0 评论 -
exec()在不同namespace执行结果的区别
原因是exec(content)执行的时候import statement都直接修改了locals, 导致后面的code执行的时候在globals里找不到import的东西,但是如果给一个module的话相当于在一个独立的namespace里运行,就不会出现找不到的问题。记录一个很tricky的问题,下面这段code在执行'func1'时会出现NameError: name 'List' is not defined,但执行'func2'时一切正常。原创 2023-05-24 15:42:26 · 983 阅读 · 0 评论 -
Python decorator兼容有无参数的两种写法
顺便讲下@functools.wraps,可以通过print被decorate的func name看出它起到的作用,比如print my_func.__name__。原创 2023-04-19 11:32:21 · 151 阅读 · 0 评论 -
基于任意位置分段的python argpaser实现
基于任意位置分段的argparser:自定义parse index,后续参数按照原始序列返回。原创 2021-12-29 13:58:20 · 513 阅读 · 0 评论 -
python自定义dataclass实现
实现自定义规则与检查的dataclass原创 2021-12-29 14:26:23 · 1272 阅读 · 1 评论 -
python - frame.locals() 获取函数中local variable name与value
假定我们从其他地方得到了一个func, 现在想知道这个func中的local variable的信息(k-v对),可以使用frame.f_locals达到目的。首先需要定义wrapper函数,标注@wraps(func),func为原始的函数,之后定义tracer,用于获取locals(),在函数执行前通过sys.setprofile(tracer)使tracer函数生效即可(这个过程可能会对性能有影响,当递归次数较多时尤甚,需要结合使用场景验证)。整体过程代码如下:def main_func原创 2020-08-20 15:11:14 · 910 阅读 · 0 评论 -
python - 自定义dict的深拷贝__deepcopy__()
当有自定义的class继承了dict时,在使用copy.deepcopy便需要重写__deepcopy__方法,这个方法一不小心就会写成shallow copy(只copy了最外层) 或是写出死循环,如下反例: def __deepcopy__(self, memo=None, _nil=[]): dict = _MyDict() for key in self.keys(): dict.__setattr__(key,self.__get原创 2020-08-20 14:59:44 · 3069 阅读 · 0 评论 -
基于凸包的指尖识别算法
早就该补的一个。。首先是传送门https://github.com/brynn-code/gesture_recognition/blob/master/calculate_finger.py然后是主要方法:(因为太懒直接截图好了)筛除指尖的方法参考自某篇论文,对不起我实在找不到了,代码是自己实现的,整体步骤如下。轮廓检测与凸包生成确定掌心近似坐标与半径筛除条...原创 2020-01-10 17:52:06 · 1801 阅读 · 2 评论 -
SSD目标检测损失函数multibox loss pytorch源码详解 - 样本不均衡问题解决
补充一些更详细的说明:数据集是大样本5000,小样本500,但实际上每个样本会包含多个groud truth,因此首先对数据做拆分和清洗统计出准确的大小样本比例约为5:1,然后从损失函数公式入手:对于数量级较小的样本,考虑增大其在计算损失时负样本的损失,即,可作如下理解:假设大小样本比例为5:1,在训练时,如果发生小样本被误判为大样本的情况,计算损失时将这些负样本的损失扩大5倍...原创 2019-12-22 09:12:31 · 1529 阅读 · 1 评论 -
log - 浅谈日志对性能影响的处理方案
日志对服务性能有很大影响,由于要写磁盘,且是写同一份文件,因此会有临界资源竞争,再高并发情况下,对性能影响十分明显,但日志又是必不可少的,在追求单机QPS的情况下,可以考虑以下两种方案:1.异步日志异步日志可以最低程度减轻日志对性能的影响,但也有一定风险,如果服务down掉了,错误栈还没有来得及被写入,那就尴尬了,另外还有几个其他方面的问题:一是异步日志的情况下,有单次处理和批量处理两...原创 2019-06-10 11:23:57 · 8040 阅读 · 0 评论 -
Redis - 集群模式总结
集群模式下,拥有16384个slot,只有当所有slot都有指派,集群才处于上线状态,出于性能考虑,每个节点都会记录所有slot的指派状态。重新分片:将任意数量已经指派给源节点的slot指派给新的节点。节点接受命令请求的过程:先检查键所在的slot是否由自己处理,如果不是,返回一个MOVED错误,指引client转向正确节点;如果键正在被迁移到其他节点,返回一个ASK错误,指引client...原创 2019-05-28 16:40:08 · 255 阅读 · 0 评论 -
Redis - RDB持久化与AOF持久化
RDB持久化与AOF持久化可以同时存在,但重启时,AOF文件会被优先用于恢复数据。RDB持久化RDB文件是压缩过的二进制文件,用于保存和还原Redis服务器所有数据库中的所有键值对数据。SAVE命令由服务器进程直接执行,是阻塞的命令;BGSAVE由子进程(注意不是子线程)执行保存,不会阻塞服务器。服务器状态中会保存所有save选项设置的保存条件,当任意一个保存条件被满足时,BGSA...原创 2019-05-06 18:36:59 · 249 阅读 · 0 评论 -
Redis - 服务器的事件驱动
Redis服务器处理两大类事件,时间事件和文件事件。(本次的笔记写的有点像填空题,,,文件事件通过对套接字的操作,完成对客户端请求的相应,监听套接字使用I/O多路复用程序,并为套接字关联不同的事件处理器。I/O多路复用程序通过队列向文件事件分派器传送套接字,因此,尽管文件事件可能并发出现,套接字的传送依然是有序、同步的。I/O多路复用可参考Linux IO模式,select、pol...原创 2019-05-06 18:21:13 · 245 阅读 · 0 评论 -
Lucene - 四句话理解基本原理与策略
Lucene实现快速搜索的策略:文本链表建立建立每个词对应的文本链表,在多条件查找时,对单词对应的链表做交并差操作,虽然索引的建立较为复杂,但只需建立一次,便可反复使用。分段存储早期的全文检索中,为整个文档集合创建了很大的倒排索引,由于创建索引成本很高,在数据更新频繁时,无法保证时效性,因此引入了分段存储。分段存储将文件分为段,有新数据需要创建时新增一个段,由于段的不可变性,需...原创 2019-03-20 12:13:07 · 240 阅读 · 0 评论 -
数据库 - 分布式事务
分片维度1.哈希切片2.时间切片(适合有明显时间特点的数据分布式事务1.两阶段提交协议方案:分为准备阶段与提交阶段,等待所有参与者准备完成后再提交。优点:基于该协议,事务管理器能最大限度保证跨数据库事务的原子性,是分布式系统环境下最严格的实现方案。缺点:性能问题,难以进行水平伸缩,锁定资源与消费资源之间时间差随参与者数目增加而拉长,易产生死锁或拖慢响应速度。在互联网...原创 2019-03-06 18:03:38 · 327 阅读 · 0 评论 -
thrift、序列化与parquet读取
parquet是一种常见的列式存储格式,普通的parquet文件可以用java中的ParquetReader来读取,在存储格式较为简单时,可以通过Group.get×××可以获得相应列的数据,获得相应json格式数据(手动拼接)的代码如下:// 获取字段信息 ParquetMetadata readFooter = ParquetFileReader.readFooter(原创 2017-10-27 10:06:37 · 2221 阅读 · 0 评论 -
JVM内存区域划分
在看《深入理解Java虚拟机》时,几种常见的GC算法讲完后,感觉其实对java虚拟机内存区域的划分了解的并不是特别清楚(也可能记性不好看过去太久就忘了),又重新复习了一下。有一张图非常简单明了:图中可以看出,PermanentSpace(永久代)不在java堆中,堆中包括OladSpace(年老代)和NewSize(年轻代),NewRatio=m时代表所分配的年老代与年轻代比例为m:1原创 2017-11-06 20:33:14 · 335 阅读 · 0 评论 -
JVM内存分配与回收策略
几条普遍的内存分配规则:1.对象优先在Eden中分配当空间不足时,虚拟机将发起一次Minor GC。2.大对象直接进入老年代大对象:需要大量连续空间存储的Java对象,典型的大对象如很长的字符串或数组。虚拟机中提供参数 -XX:PretenureSizeThreshold,大于这个设置值的对象将直接在老年代中分配,避免在Eden区和两个Survivor区之间发生大量内存复制。原创 2017-11-10 20:47:32 · 276 阅读 · 0 评论 -
Spark学习笔记:在瞎搞RDD中得到的收获和一些疑问
工作中常遇到的一个让人头疼的问题就是对大量数据的收集与处理,比如在建立用户画像的时候,需要跑一个月活数据,原始策略是直接用hive去查询,但随着用户规模的扩张和计算资源分配不足等问题,后期常常跑一天也无法从app的原始日志中得到这些数据。因此某一天我开始了瞎搞,作为一个java程序员,被java限制了一些思维,在接触scala时有点手足无措,也是直接硬去写spark,反复调整,算是勉强写出了一原创 2017-12-25 12:23:01 · 464 阅读 · 0 评论 -
Spark学习笔记:奇怪的Serializable(待填坑~
慢慢摸索了有段时间啦,有个问题一直不是特别懂,就是在执行作业的时候,有时候会抛出task not serializable的异常,就是rdd的map之类的操作时引用了外部的变量。之前也查过很多次了,原因大概理解,task从driver节点分发到子节点计算的时候,会先序列化,子节点收到后反序列化,所以出现异常时有几种解决方案,或者将class extends java.io.Serializab原创 2018-01-14 21:04:09 · 689 阅读 · 0 评论 -
Scala学习笔记:已知类型的json变换 -- lift-json
废话不多说啦(也没啥可说的因为我还没搞懂,哈哈哈以下是dependency(用的2.11)和使用的示例代码~~ net.liftweb lift-json_2.11 3.0-M3 import net.liftweb.json._implicit val formats: DefaultFormats原创 2018-01-14 21:15:12 · 802 阅读 · 0 评论 -
Spark学习笔记:local class incompatible
前段时间往用户画像的hive表里增加了一个字段,之后提交作业一直报找不到这个方法的错,过了好久才突然想起来,我提交的jar包并没有更新(真是傻)...更新了jar包之后,出现了local class incompatible这个错,也就是序列化版本不一致的问题。于是开始各种找解决方案,大部分人的解决方法都是在序列化的class定义中,手动指定一个序列化的版本号,但由于我并不原创 2018-03-14 10:34:07 · 3323 阅读 · 2 评论 -
Spark学习笔记:OutOfMemoryError-Direct buffer memory (OOM)
OOM可能的原因有以下几点:1. 用户代码off heap: 资源释放不当, 例如加载文件资源次数过多, 且不正常关闭, 例如多次调用ClassLoader().getResourceAsStream2. Driver端DirectMemory: 拉取Executor端Task Result数据回Driver节点时, 此处消耗的DirectMemory内存 = conf.getInt("spark.resultGetter.threads", 4) * TaskResultSize3. E原创 2018-03-14 11:06:44 · 6606 阅读 · 1 评论 -
MySQL学习笔记:MyISAM与InnoDB - 一些区别
一、关于count(*)知识点:MyISAM会直接存储总行数,InnoDB则不会,需要按行扫描。潜台词是,对于select count(*) from t; 如果数据量大,MyISAM会瞬间返回,而InnoDB则会一行行扫描。实践:数据量大的表,InnoDB不要轻易select count(*),性能消耗极大。常见坑:只有查询全表的总行数,MyISAM才会直接返回结果,当加了w...原创 2018-10-11 10:20:34 · 233 阅读 · 0 评论 -
MySQL学习笔记:InnoDB中的7种锁
InnoDB的七种锁先从一个有意思的案例,引出了锁的话题。 假设有数据表:t(id int PK, name); 目前的记录是:10, shenjian20, zhangsan30, lisi 事务A先执行,并且处于未提交状态:delete from t where id=40;事务A想要删除一条不存在的记录。 事务B后执行:ins...原创 2018-10-11 10:28:49 · 434 阅读 · 0 评论 -
Java - 高并发编程、锁与CAS操作
最近在看《实战Java高并发编程》(好像是叫这个名字,我记不太清,感觉是本不错的书,关于锁、无锁、死锁、以及Java的各种轮子的具体实现,都有很清晰的介绍,也是在这里第一次接触到了CAS操作。CAS操作,即compareAndSet,传入一个将要修改的值和这个值的被认为的原始值,如果相同,则进行修改操作,这个简单的操作可以在程序中替换掉锁的使用,大大提高了程序的效率,但同时,在多线程的条件下,...原创 2019-02-01 17:02:07 · 233 阅读 · 0 评论 -
《Hadoop应用架构》整理——1.1 数据存储选型
原创 2017-09-04 10:33:27 · 398 阅读 · 0 评论