摘要: 一、前言
我们知道高耦合性的代码是很不方便变更的,可能会导致牵一发而动全身,为了解耦大家想了很多方法,例如依赖注入等等,常见的做法是将这种耦合外推到配置文
件,那么如何能对配置文件进行很好的组织就成了一个比较重要的部分。本文以EL4.1的配置文件管理为例子,看下他们是怎么做的。
阅读全文
摘要: 一、前言
在我看来,OB2是一个用来构建和管理对象的开放性的框架,我们可以根据自己的需求去扩展它,例如扩展它可以实现依赖注入(如MS的Unity)。我认为
OB2最大的亮点之一是在提供了对象创建框架的同时能够管理对象以及对象之间的依赖关系,控制对象构建和销毁过程,这样对象的创建就不是直接去使用new
而对象的销毁也不仅仅只靠GC了。要说OB2所使用的设计模式,我觉得可以认为是大量使用策略(Strategy)模式并辅以责任链模式,通过责任链组织
对象创建或销毁的次序及步骤。
阅读全文
摘要: 假设朋友给我一个CalculatorLib.dll文件,里面包含了一个计算器接口和一个实现了该接口的计算器类,我的程序里要用到这个计算器来计算两个整数的和(仅作为简单例子,不考虑溢出处理等其他方面),计算器的实现大概如下:
public interface ICalculator
{
Int32 AddOperation(Int32 p1, Int32 p2);
}
public class Calculator : ICalculator
{
public virtual Int32 AddOperation(Int32 p1, Int32 p2)
{
//①
//②
return p1 + p2;
//③
}
}
我的需求是:想在①这里为代码赋予修改输入参数和返回值的权限,在②更改参数和返回值,在③这里收回该权限,分两种情况
阅读全文
摘要: 今天有位新同事问我.Net中带out、ref的方法签名和普通方法签名的有什么区别?我觉得可以从下面的例子说明一些关键的地方。
一、ref/out修饰符说明
对于用ref/out修饰符的说明在MSDN上有详细的说明,地址如下:
http://msdn.microsoft.com/en-us/library/t3c3bfhx(VS.80).aspx。
二、透过IL代码观察ref/out修饰的方法签名(以值类型为例)
1、示例代码:
阅读全文
摘要: 今天和同事讨论了一个问题:Interface到底继承于Object吗?
我看过的所有关于.Net的书都告诉我“所有的类型都是继承于System.Object的”,那么理所当然
Interface也是继承于System.Object的,以下面代码为例:
阅读全文
摘要: .NET
Remoting技术是构建企业级分布式应用的很好选择,(个人感觉随.Net Framework
3.0推出的WCF更加强大和易用),我们的项目采用服务端SingleCall方式来激活远程对象,在这种方式下最大的特点是当你new一个对象出来的
时候并不会调用相应类型的构造函数,只有当你使用该类型的方法时才会调用构造函数,为换句话说就是SingleCall方式下不保存对象状态,这样做的好
处是客户端不会长时间占用服务器资源,但是也就造成不能共享状态。
最近让我苦恼的一件事是:我想在客户端生成远程对象的时候传一个参数进去,但是服务端激活方式Singleton和SingleCall在生成远程对象时
只支持调用无参的默认构造函数,所以在调用带参数的构造函数上我就死了心(不知道各位高手能不能搞定),下面我还原一下我的场景:
阅读全文
摘要: 前些天有同事问我怎么从一个Button的Click事件中移除所有委托,我想了一下可以这样来做:
阅读全文
摘要:
在操作系统中,利用进程可以对正在运行的应用程序进行隔离,每个应用程序被加载到单独的进程中,并为其分配虚拟内存,进程无法直接访问物理内存,只能通过
操作系统将虚拟内存映射到物理内存中,并保证进程之间的物理内存不会重叠,但是进程最大的缺点就是效率问题,尤其是进程的切换开销很大,而进程间不能共享
内存,所以不可能从一个进程通过传递指针给另一个进程。
在.NET中出现了一个新的概念:AppDomain——应用程序域,所有.NET应用程序都需要运行在托管环境中,操作系统能提供的只有进程,因
此.NET程序需要通过AppDomain这个媒介来运行在进程中,同时使用该incheng提供的内存空间,只要是.NET.
阅读全文
摘要: Anonymous
Method--匿名方法说的是不对方法进行显式定义而将方法的执行代码直接封装到Delegate对象中,这样做的好处不仅仅是简化代码这么简单,它还
可以帮助你进行多个方法间的状态共享和将代码段作为参数进行传递。一、Anonymous Method初探 下面看一个不使用Anonymous
Method的例子:
usingSystem;usingSystem.Collections.Generic;usingSystem.Windows.Forms;namespaceAnonymous_Method{staticclassProgram{///<summary>
///应
阅读全文
CLR
摘要: 一、初探MetaData
把支持CLR的编程语言(如C++/CLI、C#、VB等)编写的源代码文件通过微软的或者自己写的编译器可以编译为一个托管模块,它实际上是一个标准的
PE文件,其结构可以参见深入了解CLR的加载过程一文。Metadata(元数据)与IL代码都存在于该PE文件的Sections
中,Metadata与IL是同时生成且永远同步的,本文主要讨论Metadata的内容,并以如下代码为例:
阅读全文
摘要: CLR是如何找到托管代码的入口方法并对其Jit的呢?Jit的发生过程是怎么样的呢?Jit编译器和Metadata表又有什么关系呢?本文试图寻找出答案,在此之前,不妨先了解一下CLR Header的大致结构。
以如下代码为例:
阅读全文
摘要: 我们知道,.net编译器在生成托管代码时会将一些重要信息写入PE文件的header和.text section(后边我会介绍这些写入程序集的重要信息是什么),本文介绍当我们双击一个托管代码写的exe程序时发生的事情。
阅读全文
摘要: Microsoft intermediate language
(MSIL)是一种编程语言,可以把它看成是组成.NET
Framework的一部分,不论从内容还是形式上它都像是一种汇编语言,但是与传统的汇编语言又不太一样,初学MSIL的时候觉得它很亲切,我可以用使
用高级语言编程的习惯来使用MSIL编程,例如它是面向对象的,可以用newobj指令生成一个类型实例,所以我在代码中可以这样来新建一个类型的对象:
newobj instance void AOP_Programing.UsingAOP::.ctor()
可以用callvirt指令来调用其虚方法:
callvirt instance void AOP_Programing.UsingAOP::Display()
阅读全文
摘要:
纵观SMO算法,其核心是怎么选择每轮优化的两个拉格朗日乘子,标准的SMO算法是通过判断乘子是否违反原问题的KKT条件来选择待优化乘子的,这里可能
有一个问题,回顾原问题的KKT条件:
是否违反它,与这几个因素相关:拉格朗日乘子、样本标记、偏置。的更新依赖于两个优化拉格朗日乘子,这就可能出现这种情况:拉格朗日乘子已经能使目标函数
达到最优,而SMO算法本身并不能确定当前由于两个优化拉格朗日乘子计算得到的是否就是使目标函数达到最优的那个,换句话说,对一些本来不违反KKT条件
的点,由于上次迭代选择了不合适的,使得它们出现违反KKT条件的情况,导致后续出现一些耗时而无用的搜索,针对标...
阅读全文
摘要: 1、前言 接触SVM也有一段时间了,从理论到实践都有了粗浅的认识,我认为SVM的发展可以划分为几个相对独立的部分,首先是SVM理论本身,包括寻找最大间隔分类超平面、引入核方法极大提高对非线性问题的处...
阅读全文
摘要: 1、为什么要进行矩阵分解 个人认为,首先,当数据量很大时,将一个矩阵分解为若干个矩阵的乘积可以大大降低存储空间;其次,可以减少真正进行问题处理时的计算量,毕竟算法扫描的元素越少完成任务的速度越快,这...
阅读全文
摘要: 前几篇侃了侃SVM的基本原理和一些相关知识,尤其是在SVM学习——软间隔优化这一篇,提到了SVM学习器的两种形式,常被叫做L1-SVM和L2-SVM,这两种形式的区别在损失函数的形式上...
阅读全文
摘要:
回想SVM学习——线性学习器一文中提到的Rosenblatt感知器的原始形式,当时的讨论是基于输入空间线性可分的情况,包括后来的最大间隔算法,通
过核函数隐式的将输入空间映射到了一个高维特征空间中了,此时的假设同样是映射后的数据线性可分,那自然就会想到如果输入空间或者由核函数映射得到的特征
空间依然是线性不可分的可怎么办呀?
阅读全文
摘要:
关于统计学习的理论博大精深,想要弄明白是需要花费很大功夫的,涉及到方方面面的数学知识(比如泛函分析、高等数学、概率论、统计学…….),我这里也就
是把一些基本概念、理论规整一下。
存在一个未知的系统、给定的输入样本空间和这些输入样本通过处理后的输出。机器学习的过程可以看做是这样的:利用机器学习的方法,根据和得到一个学习机
(也可以叫模型),学习机在接受训练、测试样本以外的样本后得到的输出可以被认为是未知系统针对输入得到的输出的近似,所以这个学习机可以认为是对的内在
规律的近似。
阅读全文
摘要: 上一篇最后提到要解决最优化问题,稍微对它做一下改动,如下:
阅读全文
摘要: 变量之间存在的一次函数关系是线性关系,那么线性分类就应该是利用这样一种线性关系将输入学习器的样例按照其标记分开。一个线性函数的因变量值是连续的,而分类问题则一般是离散的,这个实值函数可以这样表示:
阅读全文