驹说码事

其他

Go泛型编程和接口编程

背景近期部门要将Go版本从1.17升级到了1.20,最大的变化则是1.20有了原生泛型。泛型编程可以很好的提高代码的可复用性,是值得在工作中去实践的。不过在Go支持泛型特性之前,也有通过interface{}来模拟实现泛型的做法,导致不少同学们在Go
1月12日 下午 8:08
其他

深入理解Python异步编程(中)

上篇教程《深入理解Python异步编程(上)》中,我们深入学习了异步编程的相关概念,如阻塞/非阻塞、同步/异步、并行/并发;也学习了异步的难点与在Python中的发展历程,学习了asyncio的原型,知道了事件循环(Event
1月2日 上午 7:45
其他

“5CDEFG”分析法:软件质量/故障/问题分析框架

诞生背景“5M1E”分析法在制造业质量管理中发挥着重要的指导作用,接触之后感觉眼前一亮,觉得如果有类似的分析方法可以指导软件质量管控就更好了!经过反复思考,总结出“5CDEFG”分析法,记录于此,希望可以给大家带来帮助。如果有补充或修正的意见和建议,欢迎留言!“5CDEFG”总结了影响软件质量,可能出现缺陷,或者引发故障的9大因素,现将它们以及其关注点罗列如下。“5CDEFG”解释代码(Code)首当其冲的必须是考察源代码的质量。这包括功能的正确性、性能问题、代码结构、算法逻辑、编码规范、复用程度、版本控制以及潜在的逻辑错误或漏洞。启发式问题:代码是否遵循了团队或行业内的编码规范?代码结构是否清晰,容易理解和维护?是否使用了有效的算法和逻辑以提升性能和减少错误?代码复用程度是否合理,避免了过度复杂或冗余?是否有定期的代码审查和足够的文档记录?是否有恰当的版本控制易于回滚?配置(Configuration)分析系统配置、环境变量和依赖库的设置。错误的配置或者版本不兼容可能导致意外的行为或故障。重点是确认各种配置项是否正确。其次是配置变更、失效或不符合预期时的监控和报警机制。启发式问题:系统配置是否符合项目和环境的要求?环境变量和依赖库的设置是否最优化和安全?是否有有效的监控和报警机制来及时发现问题?配置管理是否有适当的版本控制和更新机制?环境配置之间是否有必要的隔离?通信(Communication)现代软件几乎必不可少的需要通过网络与其他系统进行交互,本项重点审查系统内部和外部的通信机制。这包括网络连接的稳定性,服务间的通信效率,以及API调用的有效性和数据传输的正确性、完整性、安全性等。然后是确认超时和重试机制是否合理,以及通信失败后的错误处理是否妥当。启发式问题:系统内部和外部通信是否稳定和高效?如何处理的网络波动和不稳定因素?API调用是否有适当的错误处理和超时机制?数据传输是否安全并符合数据保护规范?服务间通信是否有合理的负载平衡和容错机制?容量(Capacity)关注系统的性能和负载管理。这包括监控服务器负载,内存使用,存储容量,网络带宽和识别可能的性能瓶颈等。启发式问题:系统资源是否足够处理高负载和高并发场景?是否有性能监控和及时的优化措施?内存使用是否高效,避免了泄露和浪费?存储是否足够,并有扩展计划?是否识别并处理了性能瓶颈?控制(Control)本项着重关注制定有效的策略来控制系统在各种情况下的表现。即在系统运行过程中可以用有效的手段来干预系统的行为。而干预的前提肯定是观测,所以本项涵盖系统的日志记录、监控报警,以及错误处理、灾难恢复能力、服务升降级能力等。启发式问题:系统监控是否全面(漏报)和准确(误报),能及时发现问题?日志记录是否详细且易于分析?错误(崩溃)处理机制是否健全,能快速恢复?是否有有效的灾难恢复和服务降级策略?控制措施是否与业务需求和技术变化同步?数据(Data)“程序=算法+数据结构”,或者说
2023年12月15日
其他

常见Web安全漏洞(01):注入的原理与防御措施

公司里项目刚刚上线不久,有同事提出要做好安全防御工作,随即写下了这篇关于注入漏洞的简要指南。顺便发在此处以飨读者。注入是什么跳出网络安全领域用俗话说,注入就是“打针”。打针是把药液注射到生物体内的办法,然后让药液与生物体内的各种细胞发生反应,最终治愈生物体的某种疾病。还有一种操作也是利用打针(最初为获得健康而发明的途径),但就带来的是彻底负面的效果,那就是注射毒品。网络安全术语中,注入是指利用软件中为正常目的预留的数据传递途径,把恶意代码或恶意数据送入程序体中去,对软件产生负面影响的操作。也就是骇客利用注入方法给正常程序注射“毒品”,给程序造成负面影响。轻则服务器宕机,重则隐私与敏感数据泄露,乃至整个公司关张大吉。注入的种类按被注入的软件体划分,常见的有:SQL
2019年3月21日
其他

Python秘技:如何import不存在的对象

机制控制,相关源代码参考cpython/Python/import.c、cpython/Lib/importlib。总结现在我们已经学会了如何导入一个在初始化时并不存在的对象。如果我们清楚了解
2017年11月2日
其他

深入理解Python异步编程(上)

如上图所示,在千兆网上传输2KB数据,CPU感觉过了14个小时,如果是在10M的公网上呢?那效率会低百倍!如果在这么长的一段时间内,CPU只是傻等结果而不能去干其他事情,是不是在浪费CPU的青春?
2017年7月31日
其他

说清道明:协程是什么

在程序遇到性能瓶颈的时候,解决方案之一就是采用并发编程技术。尤其是使用Python这种“执行低效”的编程语言,如何用其实现高效地并发能力被屡屡提起。由于众所周知的原因,在别的语言中常用的多线程并发编程模型在Python里不那么好了。有群不明就里的闲蛋(闲的蛋疼的人),认为GIL让多线程无法并行执行,他的生命的天空就是灰蒙蒙的。多进程太耗系统资源,多线程又不让好好玩,于是,用Python的同学在稍有编程经验后,就会尝试去弄明白Python菜鸟老鸟都常挂在嘴边的协程是什么。相关概念经过与无数不明就里就想用代码干翻全世界的人打交道,发现他们往往不尊重、不重视基本常识。(本文对基本常识的解释也许可能存在有误解的地方,欢迎在公众号后台留言批评指正。)进程(Process)在面向进程设计的操作系统中(如Linux
2017年4月14日
其他

再见2016,你好2017

由于过去这段时间忙于工作上的变动,疏于维护本号,希望大家谅解。今天是2016年的最后一天,阿驹的心里五味杂陈。过去这一年里,工作上发生了较大的变动,一是从成都跨越千里到了北京。北京,除了雾霾、气候干燥之外,其他都还好。相比在成都,确实增长了些见识,特别是形形色色的IT从业者。这里的很多朋友也给予了我很多帮助,特别是在这次工作变动中,非常感谢这部分朋友。谢谢你们!二是我2016年的工作,从技术方向上讲,从业务系统网站后台的开发,转向了云计算PaaS层相关的系统和服务组件的开发。比之于以前,从更大的规模、更宏观的视野学习了解了当前流行的计算机软件形态、架构体系。在这过程中,也更深刻地理解了计算机软件。我对大家的建议是,如果有机会,一定要尽早地接触一些大规模系统,如果能从架构方面去了解它就更好了。这真会给你带来完全不同的视野。在小规模的系统中,某些完全可以忽略的因素在大规模系统中可能必须认真考虑,有些小系统中从不会暴露的缺陷性问题在大规模系统中会呈指数倍地放大。另外,基础真的很重要!比如操作系统原理、计算机网络等等,这能节约你解决“疑难”问题的时间。2017年还有几个小时就来了。我们不知道未来会面临什么新的挑战,但我相信程序猿们是无所畏惧的,因为我们无时无刻不再面临着新的挑战,已经成了一种本能。预祝大家在2017年能按自己的目标稳步前进,在事业、家庭、个人等各方面都有长足进步与丰硕的收获!元旦快乐!*END*这里是
2016年12月31日
其他

当八哥(bug)来撩你了

八哥,传说每一位真正的程序猿都被它撩过。即便没见过属于自己的八哥,也见过别人的,若当真没被八哥撩,说明还不是真正的程序猿。有时候你遇到的八哥撩猿技能很高超,特别是在异步程序里,若是该八哥的创造者并没有给它发放一个正确地“身份证”时,你更不容易认得它。今日,我遇到了这样一个八哥,差一点就被撩到七荤八素。有些同学可能对此不以为然,觉得抓八哥都是信手拈来。阿驹认为,只有两种人抓八哥能如瓮中捉鳖,一是姐夫丹那样的神人,二是出身牛犊不怕虎的新人。(PS:若不知姐夫丹其人,欲知详情请公众号中回复“姐夫丹”。)异步代码、分布式系统的调试难度言归正传,从上方图中可以看出,输出这日志的程序内采用了异步编程的方式;而且,该程序是一个分布式系统,多个节点协同完成一个功能;另外,该条异常信息以INFO级别记录了下来。若是倒拐子长毛的猿,已经知道了其难度。不过下面还是给新同学介绍一下难在哪里。文化补遗:“倒拐子长毛”是一句四川话歇后语,谜底是“老手”,和网络流行语“老司机”是同义词。“倒拐子”是指手肘,都长出毛了,肯定是很老的手了。首先,分布式系统其调试难度大,因为功能本是多个节点上的程序协同完成,在测试环境中,若非有良好的打桩和MOCK,还得恰到好处地让发生问题的那段代码被调用,否则是不可能轻易排查掉问题的。然而笨办法就是让各节点的程序都按正常运行,人肉发送能引发错误的请求,打开各节点的日志观察。其次,如果是异步代码,系统往往会默许子例程(这里指被异步的任务)可以执行失败,因为你都提前返回让异步任务自己去运行了,它失败也未尝不可,大不了重新让它执行。所以,异步代码中要找出bug的第一个难度在于往往我们容许错误,而且掩盖了错误。第二个难度在于,被异步执行地任务失败以后不会影响到主程序的运行,即是主程序还能照常提供服务,若不是细心观察,不容易发现它已经出错了。再次,看到上图中该条异常日志的级别,是INFO,这就是典型地没有为八哥发放正确地“身份证”,其“体型”和正常日志也没有太大的外观区别,这让你难以cat
2016年12月6日
其他

漫谈计算机硬件体系对编程的影响和意义

今天由于时间不多,难有旁征博引的长文来跟大家解释清楚计算机、存储,及其对编程的影响。不过,有一点自己微小的见解与大家分享。虽然微小,但确实给自己减轻了很多在技术方面的理解成本和成长负担。个人觉得也应是有些分享价值的。1.
2016年12月4日