摘要:
一:背景 1. 讲故事 我们有一家top级的淘品牌店铺,为了后续的加速计算,在程序启动的时候灌入她家的核心数据到内存中,灌入完成后内存高达100G,虽然云上的机器内存有256G,然被这么划掉一半看着还是有一点心疼的,可怜那些被挤压的小啰啰程序😄😄😄,本以为是那些List,HashSet,Dic 阅读全文
摘要:
不知道何时开始,很多程序员喜欢用ToLower,ToUpper去实现忽略大小写模式的字符串相等性比较,有可能这个习惯是从别的语言引进的,大胆猜测下是JS,为了不引起争论,我指的JS是技师的意思~ 一:背景 1. 讲故事 在我们一个订单聚合系统中,每一笔订单都会标注来源,比如JD,Taobao,Eta 阅读全文
摘要:
大家在平时开发中大多都会遵循接口编程,这样就可以方便实现依赖注入也方便实现多态等各种小技巧,但这种是以牺牲性能为代价换取代码的灵活性,万物皆有阴阳,看你的应用场景进行取舍。 一:背景 1. 缘由 在项目的性能改造中,发现很多方法签名的返回值都是采用IEnumerable接口,比如下面这段代码: 2. 阅读全文
摘要:
如果你经常看开源项目的源码,你会发现很多Dispose方法中都有这么一句代码: ,看过一两次可能无所谓,看多了就来了兴趣,这篇就跟大家聊一聊。 一:背景 1. 在哪发现的 相信现在Mysql在.Net领域中铺的面越来越广了,C 对接MySql的MySql.Data类库的代码大家可以研究研究,几乎所有 阅读全文
摘要:
昨天看群里在讨论C 中的string驻留池,炒的火热,几轮下来理论一堆堆,但是在证据提供上都比较尴尬。虽然这东西很基础,但比较好的回答也不是那么容易,这篇我就以我能力范围之内跟大家分享一下 一:无处不在的池 开发这么多年,相信大家对‘池’ 这个概念都耳熟能详了,连接池,线程池,对象池,还有这里的驻留 阅读全文
摘要:
昨天发现线上试跑期的一个程序挂了,平时都跑的好好的,查了下日志是因为昨天运营跑了一家美妆top级淘品牌店,会员量近千万,一下子就把128G的内存给爆了,当时并行跑了二个任务,没辙先速写一段代码限流,后面再做进一步优化。 一: 背景 1. 背景介绍 因为是自己写的代码,所以我知道问题出现在哪里,如果大 阅读全文
摘要:
现代程序员写代码没有人敢说自己没用过泛型,这个泛型模板T可以被任何你想要的类型替代,确实很魔法很神奇,很多人也习以为常了,但就是这么有趣的泛型T底层到底是怎么帮你实现的,不知道有多少人清楚底层玩法,这篇我就试着来分享一下,不一定全对哈。。。 一:没有泛型前 现在的netcore 3.1和最新的.ne 阅读全文
摘要:
昨天有朋友在公众号发消息说看不懂await,async执行流,其实看不懂太正常了,因为你没经过社会的毒打,没吃过牢饭就不知道自由有多重要,没生过病就不知道健康有多重要,没用过ContinueWith就不知道await,async有多重要,下面我举两个案例佐证一下? 一:案例一 【嵌套下的异步】 写了 阅读全文
摘要:
在并行编程中,经常会遇到多线程间操作共享集合的问题,很多时候大家都很难逃避这个问题做到一种无锁编程状态,你也知道一旦给共享集合套上lock之后,并发和伸缩能力往往会造成很大影响,这篇就来谈谈如何尽可能的减少lock锁次数甚至没有。 一:缘由 1. 业务背景 昨天在review代码的时候,看到以前自己 阅读全文
摘要:
前几天一位朋友去面试,面试官问了他同步,异步,多线程之间是什么关系,异步比同步高效在哪?多线程比单线程高效在哪?由于回答的不好,让我帮他捋一下,其实回答这个问题不难,难就难在只对别人说理论,而没有现杀的例子。 一:异步 1. 到底解放了谁? 从基础的同步说起 要说解放了谁,一定得有几个参与者,举个例 阅读全文
摘要:
一:背景 昨天在看C 函数式编程这本书的时候,有一处让我干着急,需求是这样: 给多行文字加上数字列表项。 针对这个需求你会如何快捷高效的给每个项目加上数字编号呢? 我看书中是这样实现的,如下代码 怎么说呢,需求能实现没有问题,但这里还是累赘了,因使用到了拉链函数Zip 和生成范围的Range,全纠缠 阅读全文
摘要:
说到lock锁,我相信在座的各位没有不会用的,而且还知道怎么用不会出错,但让他们聊一聊为什么可以锁住,都说人以群分,大概就有了下面低中高水平的三类人吧。 第一类人 将lock对象定义成static,这样就能让多个线程看到同一个对象,以此实现线程间互斥和保证同步,如果再深问为什么?就怕遮遮掩掩的说好像 阅读全文
摘要:
如果大家读过dapper源码,你会发现这内部有很多方法都用到了yield关键词,那yield到底是用来干嘛的,能不能拿掉,拿掉与不拿掉有多大的差别,首先上一段dapper中精简后的Query方法,先让大家眼见为实。 一:yield探究 1. 骨架代码猜想 骨架代码其实很简单,方法的返回值是IEnum 阅读全文
摘要:
在平时开发中经常会看到有些朋友或者同事在写代码时会充斥着各种for,foreach,这种程式代码太多的话阅读性特别差,而且还显得特别累赘,其实在FCL中有很多帮助我们提高阅读感的方法,而现实中很多人不会用或者说不知道,这篇我就跟大家聊一聊。 一:SelectMany 这个方法绝对是提高开发速度的一大 阅读全文
摘要:
现如今当你翻看一些开源项目源码的时候,你会发现现在到处充斥着委托函数,如Func,Action,Predicate,确实现在的C 在函数式编程的路上越来越成为主流,越来越显示威力,曾经的一些经典设计模式写法,在函数式下可以稍微优化一下了,这篇我们就来说说模板方法。 一:实际场景 1. 模板方法定义 阅读全文