摘要: 拥抱变化,如今也走上了.net/java通吃的时代,下面就讲讲如何让.net/java都能正常访问分片的redis吧。 有几个关键点:一致性环哈希、哈希算法、序列化、反序列化 后两个都比较直接,只要选择一种跨语言的序列化方式就行了,如:json, protobuf, ace等,本文全略了 本文是基于阅读全文
posted @ 2017-06-18 22:32 McKay 阅读(92) 评论(0) 编辑
摘要: 继续上篇的pyspark集成后,我们再来看看当今热的不得了的tensorflow是如何继承进pycharm环境的 参考: http://blog.csdn.net/include1224/article/details/53452824 思路其实很简单,说下要点吧 1. python必须要3.5 6阅读全文
posted @ 2017-03-27 19:41 McKay 阅读(58) 评论(0) 编辑
摘要: AS WE ALL KNOW,学机器学习的一般都是从python+sklearn开始学,适用于数据量不大的场景(这里就别计较“不大”具体指标是啥了,哈哈) 数据量大了,就需要用到其他技术了,如:spark, tensorflow,当然也有其他技术,此处略过一坨字... 先来看看如何让这3个集成起来吧阅读全文
posted @ 2017-03-26 22:37 McKay 阅读(398) 评论(0) 编辑
摘要: 模板引擎相信大家是经常使用的,但是实现原理估计没多少人知道(你要是说不就是replace嘛,那我也无话说了...)。先来看看这个SimpleTemplate想实现的是什么功能吧:是个C#端的模板引擎模板中能放普通变量(i, j, index, username这种直接了当的变量名)模板中能放复合变量...阅读全文
posted @ 2015-10-07 16:03 McKay 阅读(2351) 评论(4) 编辑
摘要: 看到状态,大家能想起什么?抵触什么?我想到的有:状态机、状态模式、UML状态转换、一堆一堆的验证能否执行当前函数的验证代码抵触的有:UML状态机图如下:正视状态图只要有先后顺序的行为都可以想象成状态机,因为存在必须先做什么才能再做什么的现象,所以这种现象很常见,很普遍给出了流程图后,落实到代码级别还...阅读全文
posted @ 2015-10-06 21:27 McKay 阅读(1173) 评论(3) 编辑
摘要: Question: 为何sql解析和高大上有关系?Answer:因为数据库永远都是系统的核心,CRUD如此深入码农的内心。。。如果能把CRUD改造成高大上技术,如此不是造福嘛。。。CRUD就是Create, Read, Update, Delete,转换成sql语句就是insert, select,...阅读全文
posted @ 2015-06-14 22:52 McKay 阅读(3292) 评论(1) 编辑
摘要: 规则引擎规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。个人理解变化点过于集中在一点,为了适应变化,而给各种场景分别写了各自关于那点的代码逻辑,尽管主要的业...阅读全文
posted @ 2015-03-11 21:51 McKay 阅读(8054) 评论(29) 编辑
摘要: 概述由于种种原因,RabbitMQ到目前为止,官方还没有实现优先级队列,只实现了Consumer的优先级处理。但是,迫于种种原因,应用层面上又需要优先级队列,因此需求来了:如何为RabbitMQ加入优先级队列特性。查询资料后,得知RabbitMQ虽然官方没有支持此特性,但是社区已经有相关优先级队列插...阅读全文
posted @ 2014-11-04 06:44 McKay 阅读(7233) 评论(8) 编辑
摘要: 前言系统一大,就会拆分成多个独立的进程,比如web+wcf/web api等,也就成了分布式系统。要看一个请求怎么从头到尾走的,就有些困难了,要是进行DEBUG、跟踪,就更加麻烦了,困难程度要视进程多少而定,越多越复杂。分布式日志收集系统就登场了。今天介绍一款全开源日志收集、展示系统 - logst...阅读全文
posted @ 2014-10-22 23:55 McKay 阅读(14690) 评论(0) 编辑
摘要: 虽说消息队列的用法很简单:PUB/SUB, PRODUCER/CONSUMER,不过真做起来还真麻烦。先说下原始需求:Web前端发送命令消息,后端Consumer处理,然后前端得到结果需要支持Windows服务很快,下图就出来了:先来分析分析:前端怎么知道后端已经处理完成?前端如何在处理完后的第一时...阅读全文
posted @ 2014-10-21 22:24 McKay 阅读(3172) 评论(1) 编辑
摘要: 普通的zk用法,如下写法:zk.Exists("/aaa", true);zk.Create(...);但是由于这些API会抛Zookeeper的Exception,比如ConnectionLossException, NoNodeException等,所以必须配合一堆try/catch的机制来ca...阅读全文
posted @ 2014-07-08 23:11 McKay 阅读(2183) 评论(3) 编辑
摘要: 基于zookeeper写了个Leader选举类库demo,场景如下:上图中的Program1..4可以部署在1台server上,也可以部署在多台server上,也可以是一个进程中的多个线程。运行效果:初始化时(4个全开)把第四个(也就是此时的Leader) 关闭后把某个Follower角色的进程关闭...阅读全文
posted @ 2014-07-03 08:57 McKay 阅读(3869) 评论(2) 编辑
摘要: 习惯在C#代码中写str+="xxx";这样代码的请注意啦,如果这种操作是针对单个变量作很多次叠加操作的,很有可能导致性能降低。大家都知道string与StringBuilder的区别,这里就不说了,来看看例子,震撼一下:分别是测试普通字符串进行5w次叠加操作 vs StringBuilder进行5...阅读全文
posted @ 2014-07-01 08:45 McKay 阅读(234) 评论(1) 编辑
摘要: SQL Server死锁多个事务之间互相等待对方的资源,导致这些事务永久等待注意是永久等待,而非长事务死锁的4个条件互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。非剥夺条件(No...阅读全文
posted @ 2014-04-24 14:01 McKay 阅读(4979) 评论(7) 编辑
摘要: 使用了Sqlserver 2012 Always on技术后,假如采用的配置是默认配置,会出现Primary server CPU很高的情况发生,比如默认配置如下:需要自定义来解决这个问题。我们先来看看上图中的这些选项的意义主角色中的连接允许所有连接如果当前server是primary角色时,pri...阅读全文
posted @ 2014-04-22 10:27 McKay 阅读(19735) 评论(2) 编辑
摘要: 什么是重构?是在不改变系统行为的前提下,对内部代码的重新组织,提高可理解性和降低修改成本。为什么要重构?一个小修改牵涉到了多个地方,且这些点处于未知状态不易读懂代码(包括读懂自己1个月前的代码)新手修改代码上手慢,需要很久才能进行有信心的代码修改需求变化时,代码层面响应慢什么时候需要重构?随时随地的重构,也就是从一开始就进行小范围的重构,就不至于时间久后没法平滑的重构了上面这句实际上是个方法论级别的,真实中,还是没办法判断什么时候要进行重构,于是换成:当代码中出现了坏味道时需要重构什么是坏味道:存在重复代码时函数体太长函数参数太长无法直观的看出代码逻辑类太大对一个常量存在了多个副本很多很多的i阅读全文
posted @ 2014-04-10 03:13 McKay 阅读(2458) 评论(0) 编辑
摘要: Always on环境的建立,网上资料很多,主要是windows集群的建立以及Sql Server Always on的建立,略容易忽略的是Sql server账号同步问题(Always on能实现数据库内部的同步,但是没法实现instance级别的同步,比如job、账号等)下面来说说几种解决方式:SQL账号采用域账号,让IIS运行于域账号下如果现状下的本地sql账号较少的话还好,否则推行困难,而且还要加入域SQL账号采用域账号,让IIS运行于本地账号下,但是在web.config或machine.config中配置模拟账号基本上与第一种相同SQL账号采用本地账号,客户端连接字符串采用user阅读全文
posted @ 2014-04-03 15:43 McKay 阅读(2436) 评论(2) 编辑
摘要: 我们来打造一个简单的专用于json调用的mvc实现,最终会将如下的C#代码暴露给js调用(代码在最后面有下载):public class UserController { public static Json GetUser( [HttpQueryString("x_user")] int userId, [HttpQueryString("msg")] ...阅读全文
posted @ 2014-03-27 08:08 McKay 阅读(1990) 评论(5) 编辑
摘要: 用设计模式、AOP能将一个方法/函数包裹起来,并且插入额外的逻辑行为,不过动作比较大,不是很灵活,下面介绍一种链式调用方法来封装的代码,完成后能实现如下的链式调用:public class BO { public bool Add(string msg) { Console.WriteLine("Add"); if (msg == null) throw new Exception(); return true...阅读全文
posted @ 2014-03-26 18:05 McKay 阅读(986) 评论(2) 编辑
摘要: SUMMARY能做什么DEMO原理图应用场景能做什么A2DFramework的事件机制是基于发布订阅模式改进得来的一套API,中间件部分实现了msmq、redis、Supersocket可替换。能够实现较彻底的模块事件传递过程中的解耦,支持分布式环境。由于订阅端采用了消息队列作为转发层,因此也能支持事件量很大的场景。DEMODemo工程下载地址(可右键保存):发布订阅Demo.rar一、建立各个工程,并且加入A2DFramework.EventService的引用二、给各个工程加入A2D基本代码,如下:A2DFramework.Starter.Init();A2DFramework.Queue阅读全文
posted @ 2014-03-18 21:39 McKay 阅读(1110) 评论(4) 编辑