- 博客(95)
- 收藏
- 关注
原创 留下一个年度小结
从去年4月开始参与了一个从0开始的项目,开始的时候过的非常难受,每天开不完的会,晚上做实现,第二天继续开会,可能过五分钟design就要变一变,现在项目已经有了大概的雏形,这一年的进步并没有之前感觉起来那么明显,更多的可能是在design的提升方面吧,目前还是有很多不足,总是会有“如果不开始写代码就难以考虑的很全面”的问题,写doc也不是很擅长,就酱。
2024-01-23 14:28:26
397
原创 Python: __getattr__, __getitem__. 与__getattribute__
_getattribute__ :在对对象进行任何属性访问之前,无论属性是否存在,都会调用 __getattribute__。例如,__getattribute__ 可以返回属性值,或调用另一个方法,或记录访问,或缓存结果。__getitem__:当使用方括号对对象进行索引时,如 obj[key],就会调用 __getitem__。例如,__getitem__ 可以返回与key相关联的值,或引发异常,或执行某种计算。例如,__getattr__ 可以返回一个默认值,或引发一个异常,或调用另一个方法。
2023-08-23 15:40:31
206
原创 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
928
原创 Python decorator兼容有无参数的两种写法
顺便讲下@functools.wraps,可以通过print被decorate的func name看出它起到的作用,比如print my_func.__name__。
2023-04-19 11:32:21
117
原创 python获得jinja template中所有parameter name
【代码】python获得jinja template中所有parameter name。
2023-03-17 16:51:33
142
原创 如果你的Conda create的环境不是clean的
如果你的Conda create的环境不是clean的,那么一定要点开这篇文章,解决你的问题!
2023-03-07 15:13:51
164
原创 make prerequisite: 根据文件状态自动确定是否重新执行
一个简单的配置,让make根据文件状态自动确定是否重新执行,无需手动make clean。
2023-01-29 18:58:36
288
原创 markdown中图片自动点击放大(使用sphinx build)
markdown使用sphinx build出来的页面中所有图片自动点击放大, 无须手写js
2022-10-22 10:01:23
1138
原创 留下一个年度小结
这一年给sdk做了不少新feature,修了很多bug,也给1p的customer做了很多support,做client已经快两年了,和service相比还是有一定差距的。除了1.5满足了1p各种奇奇怪怪的要求,v1也零零散散做一些support工作(老板称为the go to person of SDK v1了哈哈),从工作量上来说还是比较满意的,ship出去的feature也有一些给大老板们留下的印象不错。其他角度也有一些收获,其实简单来说是认识到了定义问题的重要性,在遇到问题时我常常急于解决问题,
2022-05-13 18:23:57
108
原创 基于任意位置分段的python argpaser实现
基于任意位置分段的argparser:自定义parse index,后续参数按照原始序列返回。
2021-12-29 13:58:20
467
原创 跳槽一年小结
去年三月左右换了新公司,是家比较成熟的外企,工作模式和之前相比出入比较大,至今也快一年了,感觉还是有些收获,特此总结。1.技术不是全部我之前一直追求技术,认为技术==能力,其实不然,在这里我发现,硬实力其实有很多方面,尤其是解决问题的能力,领导、组织能力,都很重要,以往我以为技术也许在职业生涯中占到80%的重要性,如今看来大约只有40%~60%,其实,其他方面的能力往往同样重要。现在的我和刚来那会比起来,耐心已经有了很大进步,解决问题的能力也有提升,我能明显感觉到,和过去的自己比起来,在遇到问题(泛
2021-03-01 13:51:27
581
5
原创 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
770
原创 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
2855
原创 python -ruamel.yaml.dump流程详解及自定义yaml格式
--------------------------------------------------首先是dump的整体流程--------------------------------------------------------ruamel.yaml首先需要setup一下component:使用dump时的过程首先serializer.open后会发送一个StreamStartEvent,表示流开始然后会有representer class首先解析给定的字典,入口源码如下:o
2020-08-11 11:03:17
2400
原创 python - unittest中的setUp与setUpClass
其实我也没想到,有一天我会记录python的问题。。事情是这样的,最近在支持python SDK,遇到了一件非常神奇的事test class中使用到了一个简单的Callable,定义在setUpClass中,如下class TestClass(unittest.TestCase): @classmethod def setUpClass(cls) -> None: cls.func = get_a_func() def test(self
2020-06-28 18:01:52
1026
原创 Leetcode 638. 大礼包 dp解法
啊,告别ACM已经两三年了吧,最近朋友又时不时的发一些题目给我,手痒的做了做,想不起C++语法边写边查也是很坑。。。题目的传送门:638. 大礼包这题应该搜索也可以过,朋友想让我用dp解,刚开始因为姿势不对,算了很多没有意义的数据,一直超时,后面改成记忆化搜索好了很多,另,本来第一次是20ms,更改为动态数组之后,变成了4ms,打败了98%的人,瞬间,我又回忆起了被memset支配的恐惧。...
2020-02-06 20:33:01
297
原创 基于凸包的指尖识别算法
早就该补的一个。。首先是传送门https://github.com/brynn-code/gesture_recognition/blob/master/calculate_finger.py然后是主要方法:(因为太懒直接截图好了)筛除指尖的方法参考自某篇论文,对不起我实在找不到了,代码是自己实现的,整体步骤如下。轮廓检测与凸包生成确定掌心近似坐标与半径筛除条...
2020-01-10 17:52:06
1649
2
原创 SSD目标检测损失函数multibox loss pytorch源码详解 - 样本不均衡问题解决
补充一些更详细的说明:数据集是大样本5000,小样本500,但实际上每个样本会包含多个groud truth,因此首先对数据做拆分和清洗统计出准确的大小样本比例约为5:1,然后从损失函数公式入手:对于数量级较小的样本,考虑增大其在计算损失时负样本的损失,即,可作如下理解:假设大小样本比例为5:1,在训练时,如果发生小样本被误判为大样本的情况,计算损失时将这些负样本的损失扩大5倍...
2019-12-22 09:12:31
1445
1
原创 社区 - 复杂资源权限管理设计
BASE:基于开源框架SHIRO扩展基本元素:user、role、authorization对应关系:查询过程:以上图user-role对应为例,查询user是否拥有某个资源的某权限,只需遍历(深广均可)所有角色的资源描述符,权限只分为全部和部分两种,部分需要精确指定。补充内容 - 资源描述符说明采用SHIRO默认资源描述符: Resource:Action:Id/...
2019-07-01 16:29:38
258
原创 log - 浅谈日志对性能影响的处理方案
日志对服务性能有很大影响,由于要写磁盘,且是写同一份文件,因此会有临界资源竞争,再高并发情况下,对性能影响十分明显,但日志又是必不可少的,在追求单机QPS的情况下,可以考虑以下两种方案:1.异步日志异步日志可以最低程度减轻日志对性能的影响,但也有一定风险,如果服务down掉了,错误栈还没有来得及被写入,那就尴尬了,另外还有几个其他方面的问题:一是异步日志的情况下,有单次处理和批量处理两...
2019-06-10 11:23:57
7760
原创 Redis - 集群模式总结
集群模式下,拥有16384个slot,只有当所有slot都有指派,集群才处于上线状态,出于性能考虑,每个节点都会记录所有slot的指派状态。重新分片:将任意数量已经指派给源节点的slot指派给新的节点。节点接受命令请求的过程:先检查键所在的slot是否由自己处理,如果不是,返回一个MOVED错误,指引client转向正确节点;如果键正在被迁移到其他节点,返回一个ASK错误,指引client...
2019-05-28 16:40:08
218
原创 Redis - RDB持久化与AOF持久化
RDB持久化与AOF持久化可以同时存在,但重启时,AOF文件会被优先用于恢复数据。RDB持久化RDB文件是压缩过的二进制文件,用于保存和还原Redis服务器所有数据库中的所有键值对数据。SAVE命令由服务器进程直接执行,是阻塞的命令;BGSAVE由子进程(注意不是子线程)执行保存,不会阻塞服务器。服务器状态中会保存所有save选项设置的保存条件,当任意一个保存条件被满足时,BGSA...
2019-05-06 18:36:59
217
原创 Redis - 服务器的事件驱动
Redis服务器处理两大类事件,时间事件和文件事件。(本次的笔记写的有点像填空题,,,文件事件通过对套接字的操作,完成对客户端请求的相应,监听套接字使用I/O多路复用程序,并为套接字关联不同的事件处理器。I/O多路复用程序通过队列向文件事件分派器传送套接字,因此,尽管文件事件可能并发出现,套接字的传送依然是有序、同步的。I/O多路复用可参考Linux IO模式,select、pol...
2019-05-06 18:21:13
219
原创 Lucene - 四句话理解基本原理与策略
Lucene实现快速搜索的策略:文本链表建立建立每个词对应的文本链表,在多条件查找时,对单词对应的链表做交并差操作,虽然索引的建立较为复杂,但只需建立一次,便可反复使用。分段存储早期的全文检索中,为整个文档集合创建了很大的倒排索引,由于创建索引成本很高,在数据更新频繁时,无法保证时效性,因此引入了分段存储。分段存储将文件分为段,有新数据需要创建时新增一个段,由于段的不可变性,需...
2019-03-20 12:13:07
214
原创 数据库 - 分布式事务
分片维度1.哈希切片2.时间切片(适合有明显时间特点的数据分布式事务1.两阶段提交协议方案:分为准备阶段与提交阶段,等待所有参与者准备完成后再提交。优点:基于该协议,事务管理器能最大限度保证跨数据库事务的原子性,是分布式系统环境下最严格的实现方案。缺点:性能问题,难以进行水平伸缩,锁定资源与消费资源之间时间差随参与者数目增加而拉长,易产生死锁或拖慢响应速度。在互联网...
2019-03-06 18:03:38
287
原创 MapReduce踩坑笔记 - 讨厌的NullPointerException
最近在把同事的MR作业输出文件转成Parquet,因为占空间太大,结果踩了不少坑。。。各种 null,现在看到null我就生气,(╯^╰) 输出时使用的是import org.apache.parquet.example.data.Group;1.第一个null - Unable to initialize any output collector原因:mapper输出类型不...
2019-02-14 16:25:31
929
原创 Java - 高并发编程、锁与CAS操作
最近在看《实战Java高并发编程》(好像是叫这个名字,我记不太清,感觉是本不错的书,关于锁、无锁、死锁、以及Java的各种轮子的具体实现,都有很清晰的介绍,也是在这里第一次接触到了CAS操作。CAS操作,即compareAndSet,传入一个将要修改的值和这个值的被认为的原始值,如果相同,则进行修改操作,这个简单的操作可以在程序中替换掉锁的使用,大大提高了程序的效率,但同时,在多线程的条件下,...
2019-02-01 17:02:07
207
原创 延迟发奖 - 基于循环链表的伪延时消息队列
最近做了一个下单返金币的小功能,又造了个小轮子。由于下单后存在退货的可能,因此要求用户下单后先发放一个冻结奖励,在一定天数之后如果没有退款,自动发放真实奖励。 理论此处使用了循环队列与线程池做了一个伪延时消息队列,理论来自@58沈剑,基本实现如下:MQ的consumer在拿到消息后,获得需要做实际操作的时间,计算与当前时间的时间差。由于本例实际应用中对时间要求不是特别精确,因此...
2018-11-12 11:45:55
358
原创 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
393
原创 MySQL学习笔记:MyISAM与InnoDB - 一些区别
一、关于count(*)知识点:MyISAM会直接存储总行数,InnoDB则不会,需要按行扫描。潜台词是,对于select count(*) from t; 如果数据量大,MyISAM会瞬间返回,而InnoDB则会一行行扫描。实践:数据量大的表,InnoDB不要轻易select count(*),性能消耗极大。常见坑:只有查询全表的总行数,MyISAM才会直接返回结果,当加了w...
2018-10-11 10:20:34
203
原创 SparkStreaming学习笔记:获取kafka数据 - Receiver与Direct
在Spark Streaming中消费 Kafka 数据的时候,有两种方式分别是 :1.基于 Receiver-based 的 createStream 方法。receiver从Kafka中获取的数据都是存储在Spark Executor的内存中的,然后Spark Streaming启动的job会去处理那些数据。然而,在默认的配置下,这种方式可能会因为底层的失败而丢失数据。如果要启用高可靠机制...
2018-09-26 17:10:05
230
原创 帮小朋友参加写小程序比赛的总结
最近还是挺忙的,由于要帮小朋友参加比赛,导致我需要尽量早回家,╮(╯▽╰)╭,就算这样时间也不多,本来就比较紧张,又要工作,所以总共花了这些时间写了一个非常简单的小程序,内容么,没有具体要求,本来我也不认识小朋友,只是别人拜托的,所以看了看大致的要求,一开始打算写个俄罗斯方块啦,2048之类的了事了,后来想了想,写都写了,虽然不是自己用,就好好写吧。于是认真想了一个学习英语的小东西,类似闯关,答题...
2018-03-22 23:53:26
426
原创 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
6298
1
原创 Spark学习笔记:local class incompatible
前段时间往用户画像的hive表里增加了一个字段,之后提交作业一直报找不到这个方法的错,过了好久才突然想起来,我提交的jar包并没有更新(真是傻)...更新了jar包之后,出现了local class incompatible这个错,也就是序列化版本不一致的问题。于是开始各种找解决方案,大部分人的解决方法都是在序列化的class定义中,手动指定一个序列化的版本号,但由于我并不
2018-03-14 10:34:07
3107
2
原创 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
740
原创 Spark学习笔记:奇怪的Serializable(待填坑~
慢慢摸索了有段时间啦,有个问题一直不是特别懂,就是在执行作业的时候,有时候会抛出task not serializable的异常,就是rdd的map之类的操作时引用了外部的变量。之前也查过很多次了,原因大概理解,task从driver节点分发到子节点计算的时候,会先序列化,子节点收到后反序列化,所以出现异常时有几种解决方案,或者将class extends java.io.Serializab
2018-01-14 21:04:09
644
原创 Spark学习笔记:在瞎搞RDD中得到的收获和一些疑问
工作中常遇到的一个让人头疼的问题就是对大量数据的收集与处理,比如在建立用户画像的时候,需要跑一个月活数据,原始策略是直接用hive去查询,但随着用户规模的扩张和计算资源分配不足等问题,后期常常跑一天也无法从app的原始日志中得到这些数据。因此某一天我开始了瞎搞,作为一个java程序员,被java限制了一些思维,在接触scala时有点手足无措,也是直接硬去写spark,反复调整,算是勉强写出了一
2017-12-25 12:23:01
426
原创 JVM内存分配与回收策略
几条普遍的内存分配规则:1.对象优先在Eden中分配当空间不足时,虚拟机将发起一次Minor GC。2.大对象直接进入老年代大对象:需要大量连续空间存储的Java对象,典型的大对象如很长的字符串或数组。虚拟机中提供参数 -XX:PretenureSizeThreshold,大于这个设置值的对象将直接在老年代中分配,避免在Eden区和两个Survivor区之间发生大量内存复制。
2017-11-10 20:47:32
253
原创 JVM内存区域划分
在看《深入理解Java虚拟机》时,几种常见的GC算法讲完后,感觉其实对java虚拟机内存区域的划分了解的并不是特别清楚(也可能记性不好看过去太久就忘了),又重新复习了一下。有一张图非常简单明了:图中可以看出,PermanentSpace(永久代)不在java堆中,堆中包括OladSpace(年老代)和NewSize(年轻代),NewRatio=m时代表所分配的年老代与年轻代比例为m:1
2017-11-06 20:33:14
306
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人