自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 留下一个年度小结

从去年4月开始参与了一个从0开始的项目,开始的时候过的非常难受,每天开不完的会,晚上做实现,第二天继续开会,可能过五分钟design就要变一变,现在项目已经有了大概的雏形,这一年的进步并没有之前感觉起来那么明显,更多的可能是在design的提升方面吧,目前还是有很多不足,总是会有“如果不开始写代码就难以考虑的很全面”的问题,写doc也不是很擅长,就酱。

2024-01-23 14:28:26 374

原创 Python: __getattr__, __getitem__. 与__getattribute__

_getattribute__ :在对对象进行任何属性访问之前,无论属性是否存在,都会调用 __getattribute__。例如,__getattribute__ 可以返回属性值,或调用另一个方法,或记录访问,或缓存结果。__getitem__:当使用方括号对对象进行索引时,如 obj[key],就会调用 __getitem__。例如,__getitem__ 可以返回与key相关联的值,或引发异常,或执行某种计算。例如,__getattr__ 可以返回一个默认值,或引发一个异常,或调用另一个方法。

2023-08-23 15:40:31 149

原创 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 873

原创 Python decorator兼容有无参数的两种写法

顺便讲下@functools.wraps,可以通过print被decorate的func name看出它起到的作用,比如print my_func.__name__。

2023-04-19 11:32:21 101

原创 python获得jinja template中所有parameter name

【代码】python获得jinja template中所有parameter name。

2023-03-17 16:51:33 103

原创 如果你的Conda create的环境不是clean的

如果你的Conda create的环境不是clean的,那么一定要点开这篇文章,解决你的问题!

2023-03-07 15:13:51 114

原创 make prerequisite: 根据文件状态自动确定是否重新执行

一个简单的配置,让make根据文件状态自动确定是否重新执行,无需手动make clean。

2023-01-29 18:58:36 259

原创 markdown中图片自动点击放大(使用sphinx build)

markdown使用sphinx build出来的页面中所有图片自动点击放大, 无须手写js

2022-10-22 10:01:23 938

原创 留下一个年度小结

这一年给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 88

原创 python自定义dataclass实现

实现自定义规则与检查的dataclass

2021-12-29 14:26:23 995 1

原创 基于任意位置分段的python argpaser实现

基于任意位置分段的argparser:自定义parse index,后续参数按照原始序列返回。

2021-12-29 13:58:20 434

原创 跳槽一年小结

去年三月左右换了新公司,是家比较成熟的外企,工作模式和之前相比出入比较大,至今也快一年了,感觉还是有些收获,特此总结。1.技术不是全部我之前一直追求技术,认为技术==能力,其实不然,在这里我发现,硬实力其实有很多方面,尤其是解决问题的能力,领导、组织能力,都很重要,以往我以为技术也许在职业生涯中占到80%的重要性,如今看来大约只有40%~60%,其实,其他方面的能力往往同样重要。现在的我和刚来那会比起来,耐心已经有了很大进步,解决问题的能力也有提升,我能明显感觉到,和过去的自己比起来,在遇到问题(泛

2021-03-01 13:51:27 529 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 707

原创 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 2652

原创 python -ruamel.yaml.dump流程详解及自定义yaml格式

--------------------------------------------------首先是dump的整体流程--------------------------------------------------------ruamel.yaml首先需要setup一下component:使用dump时的过程首先serializer.open后会发送一个StreamStartEvent,表示流开始然后会有representer class首先解析给定的字典,入口源码如下:o

2020-08-11 11:03:17 2266

原创 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 962

原创 Leetcode 638. 大礼包 dp解法

啊,告别ACM已经两三年了吧,最近朋友又时不时的发一些题目给我,手痒的做了做,想不起C++语法边写边查也是很坑。。。题目的传送门:638. 大礼包这题应该搜索也可以过,朋友想让我用dp解,刚开始因为姿势不对,算了很多没有意义的数据,一直超时,后面改成记忆化搜索好了很多,另,本来第一次是20ms,更改为动态数组之后,变成了4ms,打败了98%的人,瞬间,我又回忆起了被memset支配的恐惧。...

2020-02-06 20:33:01 268

原创 基于凸包的指尖识别算法

早就该补的一个。。首先是传送门https://github.com/brynn-code/gesture_recognition/blob/master/calculate_finger.py然后是主要方法:(因为太懒直接截图好了)筛除指尖的方法参考自某篇论文,对不起我实在找不到了,代码是自己实现的,整体步骤如下。轮廓检测与凸包生成确定掌心近似坐标与半径筛除条...

2020-01-10 17:52:06 1540 2

原创 SSD目标检测损失函数multibox loss pytorch源码详解 - 样本不均衡问题解决

补充一些更详细的说明:数据集是大样本5000,小样本500,但实际上每个样本会包含多个groud truth,因此首先对数据做拆分和清洗统计出准确的大小样本比例约为5:1,然后从损失函数公式入手:对于数量级较小的样本,考虑增大其在计算损失时负样本的损失,即,可作如下理解:假设大小样本比例为5:1,在训练时,如果发生小样本被误判为大样本的情况,计算损失时将这些负样本的损失扩大5倍...

2019-12-22 09:12:31 1406 1

原创 社区 - 复杂资源权限管理设计

BASE:基于开源框架SHIRO扩展基本元素:user、role、authorization对应关系:查询过程:以上图user-role对应为例,查询user是否拥有某个资源的某权限,只需遍历(深广均可)所有角色的资源描述符,权限只分为全部和部分两种,部分需要精确指定。补充内容 - 资源描述符说明采用SHIRO默认资源描述符: Resource:Action:Id/...

2019-07-01 16:29:38 233

原创 log - 浅谈日志对性能影响的处理方案

日志对服务性能有很大影响,由于要写磁盘,且是写同一份文件,因此会有临界资源竞争,再高并发情况下,对性能影响十分明显,但日志又是必不可少的,在追求单机QPS的情况下,可以考虑以下两种方案:1.异步日志异步日志可以最低程度减轻日志对性能的影响,但也有一定风险,如果服务down掉了,错误栈还没有来得及被写入,那就尴尬了,另外还有几个其他方面的问题:一是异步日志的情况下,有单次处理和批量处理两...

2019-06-10 11:23:57 7510

原创 Redis - 集群模式总结

集群模式下,拥有16384个slot,只有当所有slot都有指派,集群才处于上线状态,出于性能考虑,每个节点都会记录所有slot的指派状态。重新分片:将任意数量已经指派给源节点的slot指派给新的节点。节点接受命令请求的过程:先检查键所在的slot是否由自己处理,如果不是,返回一个MOVED错误,指引client转向正确节点;如果键正在被迁移到其他节点,返回一个ASK错误,指引client...

2019-05-28 16:40:08 193

原创 Redis - RDB持久化与AOF持久化

RDB持久化与AOF持久化可以同时存在,但重启时,AOF文件会被优先用于恢复数据。RDB持久化RDB文件是压缩过的二进制文件,用于保存和还原Redis服务器所有数据库中的所有键值对数据。SAVE命令由服务器进程直接执行,是阻塞的命令;BGSAVE由子进程(注意不是子线程)执行保存,不会阻塞服务器。服务器状态中会保存所有save选项设置的保存条件,当任意一个保存条件被满足时,BGSA...

2019-05-06 18:36:59 204

原创 Redis - 服务器的事件驱动

Redis服务器处理两大类事件,时间事件和文件事件。(本次的笔记写的有点像填空题,,,文件事件通过对套接字的操作,完成对客户端请求的相应,监听套接字使用I/O多路复用程序,并为套接字关联不同的事件处理器。I/O多路复用程序通过队列向文件事件分派器传送套接字,因此,尽管文件事件可能并发出现,套接字的传送依然是有序、同步的。I/O多路复用可参考Linux IO模式,select、pol...

2019-05-06 18:21:13 206

原创 Lucene - 四句话理解基本原理与策略

Lucene实现快速搜索的策略:文本链表建立建立每个词对应的文本链表,在多条件查找时,对单词对应的链表做交并差操作,虽然索引的建立较为复杂,但只需建立一次,便可反复使用。分段存储早期的全文检索中,为整个文档集合创建了很大的倒排索引,由于创建索引成本很高,在数据更新频繁时,无法保证时效性,因此引入了分段存储。分段存储将文件分为段,有新数据需要创建时新增一个段,由于段的不可变性,需...

2019-03-20 12:13:07 201

原创 数据库 - 分布式事务

分片维度1.哈希切片2.时间切片(适合有明显时间特点的数据分布式事务1.两阶段提交协议方案:分为准备阶段与提交阶段,等待所有参与者准备完成后再提交。优点:基于该协议,事务管理器能最大限度保证跨数据库事务的原子性,是分布式系统环境下最严格的实现方案。缺点:性能问题,难以进行水平伸缩,锁定资源与消费资源之间时间差随参与者数目增加而拉长,易产生死锁或拖慢响应速度。在互联网...

2019-03-06 18:03:38 271

原创 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 881

原创 Java - 高并发编程、锁与CAS操作

最近在看《实战Java高并发编程》(好像是叫这个名字,我记不太清,感觉是本不错的书,关于锁、无锁、死锁、以及Java的各种轮子的具体实现,都有很清晰的介绍,也是在这里第一次接触到了CAS操作。CAS操作,即compareAndSet,传入一个将要修改的值和这个值的被认为的原始值,如果相同,则进行修改操作,这个简单的操作可以在程序中替换掉锁的使用,大大提高了程序的效率,但同时,在多线程的条件下,...

2019-02-01 17:02:07 191

原创 延迟发奖 - 基于循环链表的伪延时消息队列

最近做了一个下单返金币的小功能,又造了个小轮子。由于下单后存在退货的可能,因此要求用户下单后先发放一个冻结奖励,在一定天数之后如果没有退款,自动发放真实奖励。 理论此处使用了循环队列与线程池做了一个伪延时消息队列,理论来自@58沈剑,基本实现如下:MQ的consumer在拿到消息后,获得需要做实际操作的时间,计算与当前时间的时间差。由于本例实际应用中对时间要求不是特别精确,因此...

2018-11-12 11:45:55 338

原创 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 370

原创 MySQL学习笔记:MyISAM与InnoDB - 一些区别

一、关于count(*)知识点:MyISAM会直接存储总行数,InnoDB则不会,需要按行扫描。潜台词是,对于select count(*) from t; 如果数据量大,MyISAM会瞬间返回,而InnoDB则会一行行扫描。实践:数据量大的表,InnoDB不要轻易select count(*),性能消耗极大。常见坑:只有查询全表的总行数,MyISAM才会直接返回结果,当加了w...

2018-10-11 10:20:34 186

原创 SparkStreaming学习笔记:获取kafka数据 - Receiver与Direct

在Spark Streaming中消费 Kafka 数据的时候,有两种方式分别是 :1.基于 Receiver-based 的 createStream 方法。receiver从Kafka中获取的数据都是存储在Spark Executor的内存中的,然后Spark Streaming启动的job会去处理那些数据。然而,在默认的配置下,这种方式可能会因为底层的失败而丢失数据。如果要启用高可靠机制...

2018-09-26 17:10:05 196

原创 帮小朋友参加写小程序比赛的总结

最近还是挺忙的,由于要帮小朋友参加比赛,导致我需要尽量早回家,╮(╯▽╰)╭,就算这样时间也不多,本来就比较紧张,又要工作,所以总共花了这些时间写了一个非常简单的小程序,内容么,没有具体要求,本来我也不认识小朋友,只是别人拜托的,所以看了看大致的要求,一开始打算写个俄罗斯方块啦,2048之类的了事了,后来想了想,写都写了,虽然不是自己用,就好好写吧。于是认真想了一个学习英语的小东西,类似闯关,答题...

2018-03-22 23:53:26 409

原创 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 6136 1

原创 Spark学习笔记:local class incompatible

前段时间往用户画像的hive表里增加了一个字段,之后提交作业一直报找不到这个方法的错,过了好久才突然想起来,我提交的jar包并没有更新(真是傻)...更新了jar包之后,出现了local class incompatible这个错,也就是序列化版本不一致的问题。于是开始各种找解决方案,大部分人的解决方法都是在序列化的class定义中,手动指定一个序列化的版本号,但由于我并不

2018-03-14 10:34:07 2969 1

原创 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 694

原创 Spark学习笔记:奇怪的Serializable(待填坑~

慢慢摸索了有段时间啦,有个问题一直不是特别懂,就是在执行作业的时候,有时候会抛出task not serializable的异常,就是rdd的map之类的操作时引用了外部的变量。之前也查过很多次了,原因大概理解,task从driver节点分发到子节点计算的时候,会先序列化,子节点收到后反序列化,所以出现异常时有几种解决方案,或者将class extends java.io.Serializab

2018-01-14 21:04:09 624

原创 Spark学习笔记:在瞎搞RDD中得到的收获和一些疑问

工作中常遇到的一个让人头疼的问题就是对大量数据的收集与处理,比如在建立用户画像的时候,需要跑一个月活数据,原始策略是直接用hive去查询,但随着用户规模的扩张和计算资源分配不足等问题,后期常常跑一天也无法从app的原始日志中得到这些数据。因此某一天我开始了瞎搞,作为一个java程序员,被java限制了一些思维,在接触scala时有点手足无措,也是直接硬去写spark,反复调整,算是勉强写出了一

2017-12-25 12:23:01 395

原创 JVM内存分配与回收策略

几条普遍的内存分配规则:1.对象优先在Eden中分配当空间不足时,虚拟机将发起一次Minor GC。2.大对象直接进入老年代大对象:需要大量连续空间存储的Java对象,典型的大对象如很长的字符串或数组。虚拟机中提供参数 -XX:PretenureSizeThreshold,大于这个设置值的对象将直接在老年代中分配,避免在Eden区和两个Survivor区之间发生大量内存复制。

2017-11-10 20:47:32 239

原创 JVM内存区域划分

在看《深入理解Java虚拟机》时,几种常见的GC算法讲完后,感觉其实对java虚拟机内存区域的划分了解的并不是特别清楚(也可能记性不好看过去太久就忘了),又重新复习了一下。有一张图非常简单明了:图中可以看出,PermanentSpace(永久代)不在java堆中,堆中包括OladSpace(年老代)和NewSize(年轻代),NewRatio=m时代表所分配的年老代与年轻代比例为m:1

2017-11-06 20:33:14 290

空空如也

空空如也

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

TA关注的人

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