buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

2017年2月24日 #

【思路决定出路】换一种思路,柳暗花明---程序如何利用SQL的LIKE实现模糊查询数据

摘要: _ _ \. _(9> <6)_ ,/ \==_) (_==/ -'= ='- 阅读全文

posted @ 2017-02-24 17:35 buguge 阅读(468) 评论(0) 推荐(0)

2017年2月17日 #

System.ArgumentException: 目标数组的长度不够。请检查 destIndex 和长度以及数组的下限

摘要: Queue<T>以及List<T>这些泛型类不是线程安全的。在并发操作时,内部操作可能会出现问题 阅读全文

posted @ 2017-02-17 16:22 buguge 阅读(3248) 评论(0) 推荐(0)

2017年1月12日 #

使用代码分析来分析托管代码质量 之 CA2200

摘要: 使用vs的代码分析,可以对托管代码运行代码分析,发现代码中的缺陷和潜在问题,据此分析结果我们可以对程序做相应优化调整。CA2200是什么? CA2200可不是国航航班哦~ 阅读全文

posted @ 2017-01-12 16:53 buguge 阅读(508) 评论(0) 推荐(0)

2017年1月10日 #

System.InvalidOperationException nested transactions are not supported

摘要: bll方法里开启了分布式事务,dal方法里又启动了数据库事务。通过查看异常堆栈,发现异常是在执行BillsDal.Add(bill);方法里的var trans = conn.BeginTransaction();这条语句抛出来的。 阅读全文

posted @ 2017-01-10 11:29 buguge 阅读(704) 评论(0) 推荐(0)

2017年1月6日 #

【轻松一刻!】一段难倒了两名老程序猿的简单代码

摘要: 因为_conn.Open();里的IDbConnection实例与var trans = _conn.BeginTransaction();里的IDbConnection实例不是一个实例,因为每次调用只读属性拿到的都是一个新的实例。 阅读全文

posted @ 2017-01-06 14:16 buguge 阅读(267) 评论(0) 推荐(0)

2017年1月5日 #

static,你还敢用吗?(二)

摘要: 方案分析:第1种,涉及到对象只能在被释(关闭)放掉才能再次被使用(打开),性能低下,不可取。 第2种呢,绝大多数的dal层方法几乎都是每次执行db操作都打开一个新的连接。 由于大家一般不会把dal层的数据操作方法定义成static,所以,也就不会遇到这样的db连接异常。而我呢,倾向于用static方法,考虑到封装,就把这个db连接对象封装成静态字段了,反而忽视了静态数据成员带来的隐患——数据量小时几乎是暴露不出来问题,一旦数据量大起来,有了并发,就会出现资源被同时使用,这样的话,都要修改其状态时,就出现了并发异常。 阅读全文

posted @ 2017-01-05 18:44 buguge 阅读(337) 评论(0) 推荐(0)

2016年12月30日 #

北京遇上西雅图之:当记账系统遇上并发

摘要: 系统中有个结算的逻辑,每张订单到了账期日后,平台会给商家进行结算。涉及到账户方面的操作包括,平台账户余额的扣减和商户账户余额的增加,以及账户流水的记录。 像这个场景,如果不考虑并发的话,那么很容易出现数据不一致,导致记账混乱。 当然,这是比(xiāng)较(dāng)要命的!tag:并发,lock,多线程,时间戳,timestamp 阅读全文

posted @ 2016-12-30 16:06 buguge 阅读(256) 评论(0) 推荐(0)

2016年12月29日 #

从scheduler is shutted down看程序员的英文水平

摘要: scheduler is shut down. 阅读全文

posted @ 2016-12-29 17:04 buguge 阅读(409) 评论(0) 推荐(0)

2016年12月16日 #

利用自定义异常来重构代码(▄︻┻┳═一不了解自定义异常者勿看)

摘要: 不考虑逻辑,仅从代码简洁的角度来看,如上代码段存在如下问题,使得代码有了坏味道(bad smell): * 对象oReturnValue被重复赋值并使用 * 层层嵌套, if和try...catch使得代码嵌套了好多层 阅读全文

posted @ 2016-12-16 14:52 buguge 阅读(459) 评论(0) 推荐(0)

2016年12月15日 #

VS2013默认打开HTML文件没有设计视图的解决办法

摘要: 菜单->工具->选项->文本编辑器->文件扩展名,右侧输入html,再下拉列表选HTML(Web窗体)编辑器,点添加,搞定 阅读全文

posted @ 2016-12-15 12:07 buguge 阅读(477) 评论(0) 推荐(0)

2016年12月12日 #

SqlHelper中IN集合场景下的参数处理

摘要: 拼sql的方式不可取,会带来sql注入风险。而sqlhelper会把你参数值当成字符串,不会对其做转义。所以,不管怎么对参数值处理,都还是一串字符串。按这样的原理往下想,只能是将单号分开来传递给sql了。 阅读全文

posted @ 2016-12-12 21:01 buguge 阅读(592) 评论(0) 推荐(0)

2016年12月2日 #

遍历dynamic的方式

摘要: 一、遍历ExpandoObject 二、对于dynamic是反序列化得到的对象时: 阅读全文

posted @ 2016-12-02 16:45 buguge 阅读(2523) 评论(0) 推荐(0)

2016年11月21日 #

.net(c#)版RSA加密算法,拿走不谢

摘要: 今天有同学对接一个支付平台,涉及到RSA的签名和验签。由于对方是java的sdk,翻成c#语言时,搞了半天也没搞定。网上搜的东西都是各种copy还不解决问题。 碰巧,我之前对接过连连银通的网银支付和代付。连连那边提供了c#版的RSA加密算法,立即破了这位同学的难题。在这里也分享出来,以便大家日后备用。 阅读全文

posted @ 2016-11-21 19:20 buguge 阅读(1718) 评论(0) 推荐(0)

2016年10月21日 #

系统中生成编号/单号问题的实现方案讨论

摘要: 1. 常规实现方案:代码逻辑为从数据表里取出现有最大订单号,转换后得到新的订单号,将新的订单insert到表里。 2. 考虑并发,在1的基础上,加lock,以避免多个线程同时执行这段逻辑,导致订单号重复引起主键冲突 3. 对于2来说,这种方案仅适用于单应用部署的情况。 像电商的订单表,往往是好多系统都要生成订单, 那么,最终到数据库层级时, 也仍然会导致订单号重复引起主键冲突。 所以,要做数据库级别的锁表和事务控制。 4. 方案3的另一个版本:将生单逻辑从各业务系统解耦,封装起来单独部署。 然后提供rpc,供各业务系统调用。 这种方案的缺点是,单点部署会有风险。 阅读全文

posted @ 2016-10-21 09:14 buguge 阅读(627) 评论(0) 推荐(0)

2016年10月19日 #

数据库“锁”事一例:并发情景下重复主键问题方案讨论

摘要: 在做的一个账单计息功能,其中,账单表的主键是BillId,varchar类型,BillId取值形如B0000001,生成规则是每次新增记录是先从账单表里计算出最大的BillId数字,然后+1再转换后作为新增记录的BillId。例如,B0000001、B0000002。 逻辑很简单,但考虑到并发,技术上就要费点心了。 阅读全文

posted @ 2016-10-19 16:12 buguge 阅读(1341) 评论(0) 推荐(0)

2016年10月18日 #

MySql.Data.MySqlClient.MySqlException: Parameter ‘@maxid’ must be defined

摘要: 本文涉及到的mysql知识点: mysql中的if条件语句用法: IF(expr1,expr2,expr3) mysql使用变量(mysql中变量不用事前申明) mysql事务 testcase 阅读全文

posted @ 2016-10-18 18:45 buguge 阅读(1382) 评论(0) 推荐(0)

2016年10月8日 #

摇钱树运营小工具UI设计.vsd

摘要: 去年,我负责公司的一个互联网投融资平台。系统运营过程中,业务和客服那边不断的反馈一些事情让技术这边协助实现。例如,土豪客户忘记登录密码后更愿意选择搭讪客服MM;再比如,客户多次登录导致账号被锁定,就反映给客户MM处理;再比如,运营经理定期索要到期投资报表,而系统后台现有的报表不能完全满足他们的需求。 每次处理这样的事情,开发人员都要忙上一阵子。 阅读全文

posted @ 2016-10-08 15:08 buguge 阅读(395) 评论(0) 推荐(0)

2016年9月27日 #

enum操作--获取枚举里的最大值

摘要: 一个应用系统,如果程序里没有任何enum的使用,我认为它的可读性是有待商榷的。 求枚举里的最大/最小枚举值, 其实是对Array进行操作: Enum.GetName方法 Enum.GetName(typeof(EnumTest), 2) //返回值是"ddd" Enum.GetName(typeof 阅读全文

posted @ 2016-09-27 16:02 buguge 阅读(1601) 评论(0) 推荐(0)

2016年9月8日 #

pl/sql里的exists和in的差别

摘要: 在pl/sql里,用exists时,要注意关联字段的类型的一致。 阅读全文

posted @ 2016-09-08 20:07 buguge 阅读(672) 评论(0) 推荐(0)

2016年9月1日 #

那些曾经的转正工作总结...

摘要: 今天小组里一小伙伴转正,突然翻起了自己提交过的一些试用期工作总结,特记录一下。蛮有意思的,也藉此告诫自己,不要忘记自己成长的点滴。 阅读全文

posted @ 2016-09-01 13:16 buguge 阅读(920) 评论(2) 推荐(0)

2016年8月3日 #

不知道张(zhāng)雱(pāng)是谁?你out了!

摘要: 张(zhāng)雱(pāng)是谁?也许你已经听说过了,也许你还没听说过呢,不过你一定听说过老刘——刘强东,没错,这二人是有关系的,什么关系呢... 阅读全文

posted @ 2016-08-03 16:31 buguge 阅读(1210) 评论(0) 推荐(1)

2016年8月2日 #

Thread.Sleep引发ThreadAbortException异常

摘要: 当站点应用程序池回收或遇到其他未捕获的异常时,线程会被Abort,这时,当线程里的代码再被执行时,就会抛出ThreadAbortException异常。 阅读全文

posted @ 2016-08-02 15:36 buguge 阅读(3350) 评论(0) 推荐(0)

2016年7月29日 #

运维一个应用系统并不容易

摘要: 项目并非实现产品经理的需求就完事了。 当项目投产后,在用户使用的过程中,会遇到千姿百态的问题。相当长的一段时间里,开发人员可能会疲于应付处理这样的问题。 运维一个应用系统不容易呀,那么,为什么会投入这么多时间呢?可能包括用户对业务逻辑的不够清楚,包括程序实现的bug,包括逻辑的复杂,包括线上运行过程中突发的事故。 而这些,往往并不在产品经理的需求范畴里, 所以,在系统实现方面,还应考虑应用系统的运维功能 阅读全文

posted @ 2016-07-29 18:43 buguge 阅读(533) 评论(0) 推荐(0)

2016年7月27日 #

为什么我们的沟通这么低效?

摘要: 这仅仅只是一个案例,大家在工作中,可能经常出现这样的沟通,大家面红耳赤,也解决不了问题。因为各自局限于自己的系统里,总觉得我需要什么你就可以给我,殊不知别人未必明白你做的东西。 阅读全文

posted @ 2016-07-27 15:46 buguge 阅读(539) 评论(0) 推荐(0)

2016年7月8日 #

2种方式解决nginx负载下的Web API站点里swagger无法使用

摘要: Web API接口站点,引入了swagger来实时生成在线的api文档,也便于api接口的在线测试。发布到生产环境,问题出现了。——线上部署的站点是用nginx做的3个节点的负载。nginx配置了公开的域名,并且与3个节点iis上的站点做了映射。3个单节点的端口不是默认的80,由此问题产生了 阅读全文

posted @ 2016-07-08 17:25 buguge 阅读(4887) 评论(3) 推荐(0)