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语句,知道底层算法的数据结构和算法,计算机组成原理!!!一定要清透,不是随便说说的!!!。