文章深入探讨了软件开发中关于代码复用的哲学思考,作者通过自己的经历引入话题,结合软件设计领域的理论和观点,阐述了代码复用的本质及其在不同情境下的应用策略。
内存管理,对于C/C++选手来说,是个再熟悉不过的名词。malloc/free,new/delete,一旦使用不当,就会遇到mem leak,uaf,double free等等内存问题。但是对于其他高级语言例如JAVA,JS等,似乎从来不需要关心他们创建对象的死活,是这些语言可以违背计算机的规律么?当然不是,只是这些语言底层的编译器/虚拟机自动对内存进行了管理,我们一般称之为GC(garbage collect)。 GC的历史可以追溯到上世纪50年代,从诞生之初起,它就像一个幕后英雄,默默做着奉献,帮助开发者提高了开发效率。在我看来,GC就像一种内存扩大技术:我们只需要不断的向其索取,而不用担心由于物理内存限制导致的内存问题。对于GC,虽然它能自动管理内存,但是当我们对它了解的越多,越能帮助我们在日常开发工作中提高代码效率。
在App开发过程中,崩溃率是衡量App稳定性的关键指标。因为App崩溃不仅仅影响用户的即时体验,更对用户留存率构成了潜在的威胁。它如同一颗隐形的定时炸弹,随时可能引发用户体验的灾难。App崩溃分为Java Crash和Native Crash 2种。 Native Crash因为其上下文信息不完整、错误提示模糊以及难以捕捉等特性,相比较Java Crash,定位及修复更为棘手困难。作为外卖商家日常运营不可或缺的助手,饿了么商家版APP的用户体验一直是我们团队的首要考量。然而,伴随着业务迭代与设备系统的不断升级,我们的应用Native Crash率上升明显,一度从原先的万2攀升到了万6以上。为此我们启动了Native Crash的专项治理行动,致力于为用户提供一个更加可靠稳定及高效的App应用,让所有商家都能享受到无忧的数字化运营体验。
这篇文章主要探讨了如何在阿里云MaxCompute(原ODPS)平台上对SQL任务进行优化,特别是针对大数据处理和分析场景下的性能优化。
在当今知识密集型任务日益增多的时代,如何有效地利用外部知识来增强语言模型的生成能力成为了一个重要的研究方向。RAG技术应运而生,通过从外部记忆源中检索相关信息,RAG不仅提高了模型生成的精准性和相关性,还解决了大型语言模型在数据隐私、实时数据处理和幻觉问题等方面的局限。本文将详细介绍RAG的工作原理、应用场景、限制及挑战,帮助读者更好地理解和应用这一前沿技术。
刚工作时,代码写得不太好,师兄每次 CR 代码,总是会指着屏幕里的一坨代码说 “把它抽成一个类或函数”;“为什么呢?写在一起不是挺好的吗?” 我反问道;师兄老道地回答 “为了方便复用”;我仿佛若有所得,回到工位上把那些很长的代码全部抽象成了类和函数,感觉今天又有所成长。 但是随着工作经验的增加,我对此又产生了困惑。随着业务发展得越来越复杂,我当初写的那个类被大量复用,为了适应不同的场景,里面充满了 if...else...;最能代表复用的业务中台,因为分支太多,发布和开发无比复杂,很小的一个改动却需要拉一堆团队讨论。 所以类和函数的存在究竟是为了什么?只有站在更高的视角才能解决我的困惑,这也是本文的内容。根据奥卡姆剃刀原则,本文其实用一句话就能概括, 它也是 《复杂软件设计之道》 中我最喜欢的一句话 :类和函数不是为了复用而存在,而是他们本来就 “应该” 在那里。