代码改变世界

随笔分类 - .Net

程序员之网络安全系列(五):数字证书以及12306的证书问题

2016-01-12 15:12 by 敏捷的水, 4707 阅读, 收藏, 编辑
摘要:如何防止中间人攻击,以及为什么12306网站的锁在地址栏里没有变绿 阅读全文

程序员之网络安全系列(四):数据加密之非对称秘钥

2016-01-12 09:07 by 敏捷的水, 2407 阅读, 收藏, 编辑
摘要:1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。 阅读全文

程序员之网络安全系列(三):数据加密之对称加密算法

2016-01-11 15:15 by 敏捷的水, 3665 阅读, 收藏, 编辑
摘要:要想不让别人看到数据,那么我们就们就需要对数据加密。 **加密技术** 是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。 加密包括两个元素:算法和密钥。一个加密算法是将普通的文本(或者可以理解的信息)与一窜数字(密钥)的结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解码的一种算法。 阅读全文

程序员之网络安全系列(二):如何安全保存用户密码及哈希算法

2016-01-11 08:51 by 敏捷的水, 5832 阅读, 收藏, 编辑
摘要:在很多网站的早期,甚至是现在仍然有一些网站,当你点击忘记密码功能时,你的邮箱会收到一封邮件,然后里面赫然写着你的密码,很多普通用户还会觉得庆幸,总算是找回来了,殊不知,这是多么可怕地一件事,说明了网站是“几乎是”明文存储你的密码,一旦数据用户数据泄露或者被拖库,那么用户密码将赤裸裸的暴露了,想想之前几次互联网密码泄露事件。 阅读全文

程序员之网络安全系列(一):为什么要关注网络安全?

2016-01-08 10:17 by 敏捷的水, 6269 阅读, 收藏, 编辑
摘要:大家都知道最近几年闹的沸沸扬扬的网络安全事件,之前的CSDN密码泄露,不久前的网易邮箱密码泄露,那么如果你的密码泄露,除了本身的网站外,还有很多人其它很多地方甚至银行密码都使用相同的密码,从而带来了很大的麻烦,据说“半个” 互联网的库都被人拖过。 阅读全文

单元测试及最佳实践

2016-01-07 09:59 by 敏捷的水, 8875 阅读, 收藏, 编辑
摘要:在工作中或者在面试中,我经常碰到的开发人员就是对单元测试不重视,这一类基本上都表现出了一种“无知的自信”,总觉得自己写的代码质量很高,直到一次次虫子(Bug)把自己咬的头破血流时,才发现原来自己的代码已经到了剪不断理还乱的状态,而每一次修改一个bug,都需要走一遍“墨镜迷宫” (看上图)。还有很多人知道单元测试或者写出了单元测试,但是就是写了一个方法,上面标注了一个[Test]属性而已,甚至很多的人单元测试上面标注的是[IgnoreTest], 每次看见这些,我都深深的感到推行单元测试之路是艰难的,是遥远的,但是我依然坚信是是渴望也可及的,只要有着深深的信念,坚强的意志,无谓的勇气,一头扎进去泥巴堆里,假以时日,当大雨来临,必将带走泥巴,从此你拔剑扬眉,哦,你不用拔剑了,因为你就是剑。。。 阅读全文

前端构建大法 Gulp 系列 (四):gulp实战

2016-01-06 09:41 by 敏捷的水, 9798 阅读, 收藏, 编辑
摘要:"前端构建大法 Gulp 系列 (一):为什么需要前端构建" "前端构建大法 Gulp 系列 (二):为什么选择gulp" "前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家" "前端构建大法 Gulp 系列 (四):gulp实战" 前面讲了很多理论,那么这一... 阅读全文

前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家

2016-01-05 08:50 by 敏捷的水, 8553 阅读, 收藏, 编辑
摘要:gulp 本身能做的事情非常少,主要是通过插件来提供各种功能,gulp本身只提供了4个非常简洁的API, 掌握这4个API你就基本掌握了gulp的全部。 [前端构建大法 Gulp 系列 (一):为什么需要前端构建; 前端构建大法 Gulp 系列 (二):为什么选择gulp; 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家; 前端构建大法 Gulp 系列 (四):gulp实战 阅读全文

前端构建大法 Gulp 系列 (二):为什么选择gulp

2016-01-03 09:36 by 敏捷的水, 8803 阅读, 收藏, 编辑
摘要:在上一篇 [前端构建大法 Gulp 系列 (一):为什么需要前端构建](http://www.cnblogs.com/cnblogsfans/p/5093012.html) 中,我们说了为什么需要前端构建,简单一句话,就是让我们的工作更有效率。 相信熟悉前端的人对Grunt一定不陌生,实际上我自己之前的很多项目也是在用Grunt, Grunt的出现是前端开发者的福音,大大减少了前端之前很多手工工作的繁琐以及我上一篇 [前端构建大法 Gulp 系列 (一):为什么需要前端构建](http://www.cnblogs.com/cnblogsfans/p/5093012.html) 提到的那些问题。 那么既然Grunt可以做到几乎所有的事情,那么为什么我们需要Gulp呢? 阅读全文

前端构建大法 Gulp 系列 (一):为什么需要前端构建

2016-01-01 09:39 by 敏捷的水, 7838 阅读, 收藏, 编辑
摘要:我们都知道使用IDE编写后端程序时,我们都需要Build, 对.NET来说,我们一般需要使用Visual Studio来确保我们的项目编译通过,而且项目编译通过是对所有程序员的基本要求。 但是,由于很多后端程序员对前端的很多东西不了解,导致在做WEB项目时出现了一些问题。 阅读全文

一小时学会C# 6

2015-12-29 16:55 by 敏捷的水, 19698 阅读, 收藏, 编辑
摘要:C# 6的新特性不是很多,有些非常有用,有些则意义不大,主要有字符串插值 (String Interpolation)、空操作符 ( ?. )、 NameOf、在Catch和Finally里使用Await、表达式方法体、 自动属性初始化器、只读自动属性、异常过滤器 Exception Filter、Index 初始化器、using 静态类的方法可以使用 static using。 如果你有一定的C#基础,相信你一个小时可以掌握,然后勇敢的开始使用C#6吧。 阅读全文

.NET WEB程序员需要掌握的技能

2015-12-28 08:50 by 敏捷的水, 12660 阅读, 收藏, 编辑
摘要:本文包括基础,提高,进阶,扩展,以及推荐书籍。本来这个是我给我们公司入职的新人做一个参考,由于 @张善友 老师在他的微信号转了我的这篇文章,很多人觉得比较有用,说是看了后知道一步步怎么学,这个让我受宠若,另外我看到有些同学文章引用了这部分,但是格式很乱看不清楚,所以我就重新整理一下在博客园发一下,希望对更多人有用,也希望大家补充。 阅读全文

微软程序员最好的时代来了

2015-12-23 16:08 by 敏捷的水, 23674 阅读, 收藏, 编辑
摘要:.NET可以开发桌面程序,可以开发WEB, 可以开发移动程序,C#, WCF, WPF, ASP.NET WEB API, ASP.NET MVC, Xamarin, Microsoft Azure, DDD 这些你都熟悉了吗?每过一段时间就有人跳出来说微软不行了,.NET不行了,然后就去舔Java, 但是一直让我觉得比较奇怪的是,几年以后那些人还在用.NET,而且继续喷着.NET, 舔着JAVA, 在我看来,这些人和那些天天喷自己的公司,却依然在那个公司,天天喷中国,却依然在中国的那些人是一样的。 阅读全文

Get All Cultures in .Net

2010-03-25 12:47 by 敏捷的水, 393 阅读, 收藏, 编辑
摘要:This example shows how to get all culture names in the .NET Framework. Use static method CultureInfo.Get Cultures. To get associated specific culture use static method CultureInfo.Cre­ateSpecificC... 阅读全文

svn实例

2010-03-21 11:28 by 敏捷的水, 4387 阅读, 收藏, 编辑
摘要:签出 svn checkout URL path 签出指定版本 svn checkout –r rev URL 签出指定指定日期 svn checkout –r “{date}” URL 查看工作拷贝从哪里来 svn info path 更新工作拷贝 svn update 添加文件到工作拷贝 svn add path 设置文件或者目录的属性 svn ... 阅读全文

Subversion命令汇总

2010-03-21 10:15 by 敏捷的水, 5419 阅读, 收藏, 编辑
摘要:svn 命令共同的选项 --targets list 读取list并将其解释为一个将要操作的参数列表 --non-recurisive, –N 只操作单个目录,不处理子目录 --verbose, –v 打印额外的信息 --quiet, –q 打印的信息尽可能少 --username, name 指定在连接授权时使用的用户名 --password, pawd 指定... 阅读全文

正则表达式:为站内链接加上域名

2010-01-24 11:42 by 敏捷的水, 963 阅读, 收藏, 编辑
摘要:1、测试文本 <a href='http://search/a.aspx'>home</a><a href='/aab/bb'>hello</a><a href='http://www.sohu.com'>sohu</a><p>sdfsf</p><a href="/aab/bb&quo... 阅读全文

设计模式:工厂方法

2009-11-26 14:16 by 敏捷的水, 302 阅读, 收藏, 编辑
摘要:在简单工厂模式中,将实例化对象的工作推迟到了专门负责创建对象的工厂类中,可以根据我们预知动态创建产品类。但是,一旦客户的变化超过预知我们就必须修改我们的源代码(FoodShop工厂)了。 switch (foodName){ case "Sugar": return new Sugar(); case "Bread": return new Bread()... 阅读全文

设计模式:简单工厂

2009-11-26 13:47 by 敏捷的水, 333 阅读, 收藏, 编辑
摘要:         简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。          简单工厂实例化的类具有相同的接口,在类有限并且基本不需要扩展时,可以使用简单工厂。例如,数据库连接对象,常用的数据库类类可以预知... 阅读全文

设计模式:单件模式

2009-11-26 11:43 by 敏捷的水, 326 阅读, 收藏, 编辑
摘要:Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。 1. 单线程时方法 public sealed class Singlton{ static Singlton instance = null; Singlton() { } public static Singlton Instance { get { if (instance == null) { return... 阅读全文

.NET面试题 密码保护

2009-11-06 23:06 by 敏捷的水, 75 阅读, 收藏, 编辑
该文被密码保护。 阅读全文

.NET多线程小记(6):线程同步

2009-11-06 15:15 by 敏捷的水, 392 阅读, 收藏, 编辑
摘要:同步块的机制: 在.NET被加载时初始化同步块数组 每一个被分配在堆上的对象都会包含两个额外的字段,其中一个存储类型指针,而另外一个就是同步块索引,初始时被赋值为-1. 当一个线程试图使用该对象进入同步时,会检查该对象的同步索引。如果索引为负数,则会在同步块数组中寻找或者新建一个同步块,并且把同步块的索引值写入该对象的同步索引中。如果该对象的同步索引不为负值,则找到该对象的同步块并且检查是否有其他... 阅读全文

.NET多线程小记(7):进程同步Mutex

2009-11-06 15:15 by 敏捷的水, 730 阅读, 收藏, 编辑
摘要:互斥体是跨进程的同步,效率非常低 using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading;using System.Diagnostics;namespace MultiThreadTest{ class Pro... 阅读全文

.NET多线程小记(5):线程独享数据TLS

2009-11-06 15:13 by 敏捷的水, 534 阅读, 收藏, 编辑
摘要:线程本地存储(Thread Local Storage TLS) 在.NET程序中,静态变量是全局(整个应用程序域)可见的数据,一个普通的静态变量对于应用程序域内的所有线程都是可见并且是可访问的。 TLS是指存储在线程环境块内的一个结构,用来存放该线程内独享的数据。进程内的线程不能访问不属于自己的TLS,这就保证了TLS内的数据在线程内是全局共享的,而对于线程外却是不可见的。   ... 阅读全文

.NET多线程小记(4):线程池

2009-11-06 15:01 by 敏捷的水, 345 阅读, 收藏, 编辑
摘要:.NET线程池 线程池中运行的线程都为后台线程,线程的IsBackground属性都会被设为true.所谓的后台线程是指这些线程的运行不会阻碍应用程序的结束。相反的,应用程序必须等待所有前台线程结束后才能退出。 示例 using System;using System.Collections.Generic;using System.Linq;using System.Text;using ... 阅读全文

.NET多线程小记(3):线程的状态

2009-11-06 14:57 by 敏捷的水, 333 阅读, 收藏, 编辑
摘要:线程的状态 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace MultiThreadTest{ class Program { static void Main(string[] args) { Console.Wri... 阅读全文

.NET多线程小记(2):多线程示例

2009-11-06 14:53 by 敏捷的水, 332 阅读, 收藏, 编辑
摘要:多线程示例: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace MultiThreadTest{ class Program { static void Main(string[] args) { Console.Wri... 阅读全文

.NET多线程小记(1):进程、线程、纤程

2009-11-06 14:48 by 敏捷的水, 1311 阅读, 收藏, 编辑
摘要:进程 进程代表了操作系统上运行着的一个应用程序。进程拥有自己的程序块,拥有独占的资源和数据,并且可被操作系统来调度。即使同一个应用程序,当被强制多次启动时,也会被安装到不通的进程之中单独运行。 线程 线程有时候也被称为微进程或者轻量级进程,它的概念和进程十分相似,是一个可以调度的单元,并且维护自己的堆栈和上下文环境。线程是附属于进程的,一个进程可以包含一个或者多个线程,并且同一个进程内的多个线... 阅读全文

[Tips]:值类型和引用类型的一个例子

2009-07-22 15:56 by 敏捷的水, 294 阅读, 收藏, 编辑
摘要:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { string[] a = { "a", "b", "c", "d" }; ... 阅读全文

[tips]: 多线程 ManualResetEvent

2009-05-21 14:23 by 敏捷的水, 315 阅读, 收藏, 编辑
摘要:WaitHandle用于实现对共享资源的独占访问,AutoResetEvent和ManualResetEvent都继承自它。 WaitHandle.WaitOne方法将阻塞当前线程,直到WaitHandle收到信号。但有时候,我们需要非阻塞的方式测试WaitHandle 状态。 public virtual bool WaitOne(int millisecondsTimeout)可以指定等待的... 阅读全文

[Tips]:Read value from Resource file in C#

2009-05-18 16:18 by 敏捷的水, 723 阅读, 收藏, 编辑
摘要:1: //Namespace reference 2: using System; 3: using System.Resources; 4:  5:  6: #region ReadResourceFile 7: /// <summary> 8: /// method for reading a value from a resource file 9: /// ... 阅读全文

Get countries from system 密码保护

2009-05-08 16:02 by 敏捷的水, 34 阅读, 收藏, 编辑
该文被密码保护。 阅读全文

代码段:ASCII to Unicode

2009-04-17 10:44 by 敏捷的水, 501 阅读, 收藏, 编辑
摘要:1: private string ConvertAsciiToUnicode(string theAsciiString) 2: { 3: // Create two different encodings. 4: Encoding aAsciiEncoding = Encoding.ASCII; 5: Encoding aUnicodeEncoding = Encoding.Unicode;... 阅读全文

MSIL(1): Hello World

2009-03-09 22:14 by 敏捷的水, 465 阅读, 收藏, 编辑
摘要:1. 用记事本编写如下代码.assembly HelloWorld{}.assembly extern mscorlib{}.class HelloWorld extends [mscorlib]System.Object{ .method public static void HelloWorld() { .maxstack 1 ldstr "Hello World" call void [... 阅读全文

MSIL(0):简介

2009-03-04 23:06 by 敏捷的水, 540 阅读, 收藏, 编辑
摘要:Microsoft Intermediate Language (MSIL)微软中间语言 MSIL是将.NET代码转化为机器语言的一个中间过程。它是一种介于高级语言和基于Intel的汇编语言的伪汇编语言。当用户编译一个.NET程序时,编译器将源代码翻译成一组可以有效地转换为本机代码且独立于CPU的指令。当执行这些指令时,实时(JIT)编译器将它们转化为CPU特定的代码。由于公共语言运行库支持多种... 阅读全文

C#拾遗系列(9):继承、接口、扩展方法、分部类、类操作、Ref and Out、可空类型

2008-06-19 15:07 by 敏捷的水, 1022 阅读, 收藏, 编辑
摘要:本文内容: 继承 Equal示例 结构和类 属性 Ref and Out 类操作 扩展方法 接口 可空类型 分部类 1. 继承 using System; using System.Collections.Generic; using System.Linq; using System.Text; names... 阅读全文

C#拾遗系列(8):异常

2008-06-19 11:02 by 敏捷的水, 240 阅读, 收藏, 编辑
摘要:using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace NetTest { public class TestException { public void TestThrow() { ... 阅读全文

C#拾遗系列(7):自定义属性

2008-06-18 14:52 by 敏捷的水, 1187 阅读, 收藏, 编辑
摘要:1 .描述 属性提供功能强大的方法以将声明信息与 C# 代码(类型、方法、属性等)相关联。属性与程序实体关联后,即可在运行时使用名为“反射”的技术查询属性。 属性以两种形式出现: 一种是在公共语言运行库 (CLR) 中定义的属性。 另一种是可以创建的用于向代码中添加附加信息的自定义属性。此信息可在以后以编程方式检索。 2. 示例代码: using System; using S... 阅读全文

C#拾遗系列(6):迭代器

2008-06-14 23:03 by 敏捷的水, 296 阅读, 收藏, 编辑
摘要:1. 示例: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace NetTest { public class TestIteration { public void ... 阅读全文

C#拾遗系列(5):泛型委托

2008-06-14 17:25 by 敏捷的水, 331 阅读, 收藏, 编辑
摘要:using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace NetTest { //泛型委托 class TestGenericDelegate { public delegate void StackEventHa... 阅读全文

C#拾遗系列(4):索引器

2008-06-11 15:30 by 敏捷的水, 401 阅读, 收藏, 编辑
摘要:1. 概述 索引器允许类或结构的实例就像数组一样进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。索引器在语法上方便您创建客户端应用程序可将其作为数组访问的类、结构或接口。索引器经常是在主要用于封装内部集合或数组的类型中实现的。 例如,假定具有一个名为 TempRecord 的类,此类表示在 24 小时内的 10 个不同时间记录的华氏度。此类包含一个表示温度的 float 类型的名为“... 阅读全文

C#拾遗系列(3):构造函数

2008-06-11 15:19 by 敏捷的水, 363 阅读, 收藏, 编辑
摘要:1. 主要演示构造函数的继承 声明空构造函数可阻止自动生成默认构造函数。 如果您不对构造函数使用访问修饰符,则在默认情况下它仍为私有构造函数。 通常显式地使用 private 修饰符来清楚地表明该类不能被实例化。 2. 静态构造函数 静态构造函数具有以下特点: ... 阅读全文

C#拾遗系列(2):属性

2008-06-11 14:54 by 敏捷的水, 230 阅读, 收藏, 编辑
摘要:1. 这里主要演示属性的继承和覆盖 2. 把属性理解为方法,实际上编译器就是把属性生成方法 示例: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace NetTest { public class TestPerpoerty { ... 阅读全文

C#拾遗系列(1):委托

2008-06-11 14:43 by 敏捷的水, 602 阅读, 收藏, 编辑
摘要:一、委托概述 委托具有以下特点: 委托类似于 C++ 函数指针,但它们是类型安全的。 委托允许将方法作为参数进行传递。 委托可用于定义回调方法。 委托可以链接在一起;例如,可以对一个事件调用多个方法。 方法不必与委托签名完全匹配。(委托中的协变和逆变) ... 阅读全文