bug札记

1 方法论的问题

我写了一个脚本for循环然后插入mongo,mysql,elastic-search, 按部就班,一秒走一个流程,对数据库没有考虑太多,但是出了一个bug,

原因是数据库某个key,value="",但是其实我不关心bug,想想觉得思路不应该这么写,就去找他,我心里最大的不确定性是思路。

第一次找他,他说bug解决了么?

第二次找他,他说bug解决了么?

第三次找他,他说bug解决了么?

后来被骂醒: 如果你想问问题,先把你自己的bug解决掉,然后问其他做法!

程序员的基本修养都没有,你连一个bug都解决不了,还问别的!其实不管你想不想解决,你不想解决,你就是解决不了!!!

如果分为了解、熟练、精通三个层次。

我就是了解层次,对于他,熟练就是一个60万数据的mongo,mysql,elastic-search的连续入库操作,脚本很快就可以写完,5min!

因为基本的python操作我甚至自己都模糊了如何处理,就是最基本的字典取值操作:key不存在是None,value是空字符返回False


# 这一句歧义,无法判断是key不存在还是value为空
show_names = [{"name": "victor"}, {"cn_name": "胜利者"}, {"en_name": "victor"}]
xxx = [name for name in show_names if name.get("cn_name")][0].get("cn_name")

# 正常:[{"cn_name": "胜利者"}]
# 如果{"cn_name": "胜利者"}不存在,[][0].get("cn_name")直接报错:list index out of range, 空列表没有空索引
# 如果{"cn_name": ""}值为空,[""][0].get("cn_name"),直接报错AttributeError: 'str' object has no attribute 'get',空字符串没有get方法
# 所以最正常的写法是,key存在且value不为空也存在, cn_name = name.get("cn_name"):if cn_name is not None and cn_name != "":
# 因为mongo返回的就是一个这样的字典,而从字典里需要取一个值,而mongo数据库一条有的有这个键值,有的没有,有的插入有值,有的是空字符串

  

而精通层次就是根本不用time.time() - time().time()来判断耗时时间,就可以判断硬盘,缓存,cpu,io在程序代码上的展示,就知道肯定是哪里慢,知道所用工具如

mongoengine 的源码实现原理,什时候直接用sql语句,知道底层算法的数据结构和算法,计算机组成原理!!!一定要清透,不是随便说说的!!!。

 

posted @ 2019-03-09 18:06  Adamanter  阅读(107)  评论(0编辑  收藏  举报