C#并发编程经典实例
一旦你输入new Thread(),那就糟糕了,说明项目中的代码太过时了。
常见术语一句话解释
自己闲着无聊写的,当然有些描述不是十分准确,毕竟一句话不能表达太多意思。
- 装箱与拆箱:我们习惯了在网上购物,这次你想买本编程书 -- 《C 语言从入门到放弃》 ,下单成功后,卖家会帮你将这本入坑指南打好包装,我们可以称之为装箱;经过快递员的快马加鞭,风雨无阻,包裹就直接送到你手上了。你一定会以迅雷不及掩耳盗铃儿响叮当之势拆开包装,这个过程我们可以称之为拆箱,这时,入坑指南就顺利的送到你手上。
装箱:将值类型(如 int ,或自定义的值类型等)转换成 object 或者接口类型的一个过程。当 CLR 对值类型进行装箱时,会将该值包装为 System.Object 类型,再将包装后的对象存储在堆上。 拆箱就是从对象中提取对应的值类型的一个过程。
装箱是隐式的;拆箱必定是显式的。
相对于简单的赋值而言,装箱和拆箱都需要进行大量的数据计算。对值类型进行装箱时,CLR 必须重新分配一个新的对象。拆箱所需的强制转换也需要进行大量的计算,只是相比,程度不高,并且也可能会出现类型转换的异常情形。如果你的操作正处于循环的中心,通过测试(如:Stopwatch),你会很明显的感觉到性能问题。
.NET 2.0 引入的泛型其实在很大的程度上解决了装拆箱产生的类型转换问题,也减少了类型转换所引起的运行时的异常,从而提高了性能。
- 委托:把方法当做参数进行传递。
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。
- 泛型:在类、方法中对使用的类型参数化。
- 匿名方法:委托及调用委托的简化版。
- Lambda表达式:匿名方法的进一步进化。
- 事件:event为声明事件的关键字,其实事件是一种特殊类型的委托;
Event出场了,它封装了委托类型的变量,使得:在类的内部,不管你声明它是public还是protected,它总是private的。在类的外部,注册“+=”和注销“-=”的访问限定符与你在声明事件时使用的访问符相同。
事件其实没什么不好理解的,声明一个事件不过类似于声明一个进行了封装的委托类型的变量而已。
- 扩展方法:给现有类添加新的方法。
- LINQ: 将SQL方式的查询从数据库扩展到其它方面(集合对象,XML等)。
- 反射:获取运行时类型信息。
最初使用反射的时候,总是不理解,既然可以通过new 一个对象的方式得到对象,然后通过对象去调用属性和方法,那么为什么还需要反射去调用呢?后来使用多了发现这就是一个先绑定还是后绑定的问题,很多初使用反射的开发人员通常都会有类似这种疑虑:既然在开发时就能够写好代码,干嘛还放到运行期去做,不光繁琐,而且效率也受影响。觉得主要是适用性的问题,如果你的系统没有那么高的扩展性和灵活性要求,你大可不必考虑反射。但在架构设计时,很多东西都需要考虑复用性,并且在某些特定的场景下你得不到具体的类时,你就必须用到反射。
- 特性:特性就是在类的类名称、属性、方法等上面加一个标记,使这些类、属性、方法等具有某些统一的特征,从而达到某些特殊的需要。特性能大大减少统一需求的代码量。
比如:方法的异常捕捉,你是否还在某些可能出现异常的地方(例如数据库的操作、文件的操作等)经常使用try...catch。这个时候如果使用特性,就可以大大减少方法里面的try...catch的使用。你只需要定义一个专门捕捉异常的特性类ExceptionExAttribute,然后给这个特性类做些特殊处理,比如给它增加一个AOP拦截的功能。那么在可能出现异常的方法名称上面加上一个[ExceptionEx]特性标签,这个方法就具有自动捕捉异常的能力。特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集、类型、方法、属性等)相关联。 特性与程序实体关联后,即可在运行时使用名为“反射”的技术查询特性。
- 部分类: 把一个类的声明分散到多个文件中。
- 类型推断:编译时自动推断类型。
- 匿名类型:封装只读属性的对象。
- 自动属性:编译器帮你自动生成一个私有变量。
- 动态绑定:将类型从编译时推迟到运行时绑定。
- MVC:路由(Route)就相当于一个公司的前台小姐,她负责带你(请求)找到跟你面试的面试官(控制器Controller),面试官可能会面试不同的职位(Action),你(请求)也会拿到不同的结果(ActionResult);
- 架构:就是代码的组织方式;
- 死锁:什么是死锁呢? 其实我们生活中也有很多类似死锁的例子。 我先举一个生活中的例子:过年回家,父亲买了一把水弹枪,儿子和侄子争抢着要先玩,谁也不让谁,拆开包装后,一个抢了枪, 一个逮住了子弹和弹夹。两个都争着要先玩,但是都互不相让。结果两个人都玩不了。如果儿子要先玩,就必须让侄子把子弹和弹夹给他,如果侄子要先玩,就必须让儿子把枪给侄子。他们就这样对峙了十几分钟,互不相让。 我出来调停,让儿子把枪先给侄子玩,每个人玩十分钟。然后两个人开开心心一起玩起来。其实这就是一个活生生的死锁(Dead Lock)的例子。
我们再来看看数据库死锁的概念, 所谓死锁,是指两个会话,每个会话都持有另外一个会话想要的资源,因争夺资源而造成的一种互相等待的现象,此时就会出现死锁,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。Oracle对于“死锁”采取的策略是回滚其中一个事务,让另外一个事务顺利进行。
英文关于deadlock的概念如下:
A deadlock occurs when a session (A) wants a resource held by another session (B) , but that session also wants a resource held by the first session (A). There can be more than 2 sessions involved but the idea is the same.
- 集群:即将相同服务部署在多台服务器上构成一个集群整体对外提供服务。
- 负载均衡:当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车。软件负载解决的两个核心问题是:选谁、转发;
-
序列化和反序列化:把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化。
序列化相当于加密了,反序列化相当于解密了。这就是区别。序列化的作用是方便存储和传输。 - 持久化:仅仅指把域对象永久保存到数据库中;广义的理解,“持久化”包括和数据库相关的各种操作。
- 实例化:在面向对象的编程中,通常把用类创建对象的过程称为实例化,为对象开辟内存空间。
- 推拉模型:所谓“拉”,就是指轮询地去获取更新,所谓推,就是发生更改后主动的“推”给其它机器。
- 云计算
给大家普及一下云计算的知识:
你娶了一个老婆,这叫传统IT架构。
你觉得一个老婆满足不了你,这叫传统企业CIO的燃眉之急。
你又娶了一个老婆,这叫双活数据中心。
你在外地又娶了一个小老婆,这叫两地三中心容灾。
你娶了很多风格气质各异的小老婆,以至于形成了后宫,这叫私有云。
你的后宫就叫计算资源池。
你从后宫里选出懂事有能的管理其他小老婆,这叫私有云管理方案。
管事的那个就是Hyper-V或VMWARE。
你不娶小老婆,改成包养很多情人,这叫托管云。
你是穷人,没有钱包养任何人也没钱娶小老婆,你选择去洗浴中心解决问题,这叫面向中小企业的公有云服务。
你在享受公有云服务的同时还得交公粮,这叫中小企业的混合IT架构。
你是富人,但也喜欢去高级夜总会,这叫面向大企业用户的公有云服务。
你有钱,同时包养小老婆和情人,还去洗浴中心,这叫混合云。
但是在混合云里,最关键的业务还是会谨慎地采用传统IT架构。
你有钱,包养小老婆,但有一天所有小老婆都来大姨妈,你还得去洗浴中心,这叫CLOUD BURST。
洗浴中心就是云服务提供商。
本地最大的洗浴中心是AWS。
高端那个比如天上人间是18M(IBM)。
打出商务会所的名头的是SALESFORCE。
在性息论坛上发帖“我们的技师服务态度超过对面那家9倍”的是O记(ORACLE)。
不开洗浴中心,但是专门卖水床卖情趣床的是等灯等灯(英特尔)。
不开洗浴中心,但是做陌陌类应用开发运营的是C记(思科)。
本地的洗浴中心都是两个有背景的大老板开的,他们是OpenStack和CloudStack。
场子小且只用本地或附近技师的是本土中小云服务商。
如果上头没人罩,本土中小云服务商很难开得长。
开洗浴中心的老板有政府背景,这是城市云。
开洗浴中心的老板有黑社会背景,这是电信云。
洗浴中心要VIP卡才让进,这是行业云。
洗浴中心只面向本小区业主服务,这是园区云。
你的小老婆们和情人们可能因为矛盾而让你的经济问题败露,这叫私有云安全问题。
你去洗浴中心可能染上病,这是公有云安全问题。
由此可见公有云和私有云的安全问题是两种不同性质的问题。
只提供场所,需要你自己去找技师的洗浴中心叫IAAS。
提供场所和技师的洗浴中心叫PAAS。
做到东莞ISO的程度就叫SAAS。
一个有很多人分享心得的洗浴中心信息网站,这是开放数据中心联盟。
洗浴中心的行业协会叫CLOUD BUILDER。
下榻一家五星级宾馆,你习惯性地用你用微信陌陌定个位,这叫CLOUD FINDER。
良家妇女下海,这叫传统IT应用的云化。
你去洗浴中心的经验很多,看见门脸就知道洗浴中心提不提供服务,看见新技师就能推测出服务质量,这叫数据分析和挖掘。
你把这些信息和心得有偿分享给其他人,你是大数据服务商。
一个地方不严打洗浴中心,这是智慧城市。
洗浴中心根据技师的外貌和性格特点提供不同的房间布置和服务,这是软件定义基础架构。
洗浴中心为了提高服务质量,把情趣床和水床作为房间标配,这叫融合基础架构。
你在各大论坛上发表技师质量点评帖子,推荐靠谱的洗浴中心和新玩法,并威胁洗浴中心的技师打折服务或给好处费,这叫跟踪云计算领域的IT记者。
一些资源
- easyicon
- martinfowler
- 开发者工具
- runjs
- licecap
- 墨刀 - 免费的移动应用原型与线框图工具
- TinyPNG
- 象棋巫师
- HTML Minifier
- AbpZeroTemplate admin 123456
- 通过游戏学习编程
- Json格式化
网友评论