前言 重学c#系列继续更新,简单看一下字典的源码. 看源码主要是解释一下江湖中的两个传言: 字典foreach 顺序是字典添加的顺序 字典删除元素后,字典顺序将会改变 正文 那么就从实例化开始看起,这里我们假定key 是string 情况下开始看. 一般我们之间实例化: Dictionary<string, string> keys = new Dictionary<string, string>(); 那么看下内部的实例化是怎么样的. public Dictionary() :…
前言 interface(即接口),是Go语言中一个重要的概念和知识点,而功能强大的reflect正是基于interface.本文即是对Go语言中的interface和reflect基础概念和用法的一次梳理,也算是我阶段学习的总结,以期温故而知新. interface(接口) 定义 在Go语言中,如果自定义类型(比如struct)实现了某个interface中的所有方法,那么就可以说这个类型实现了这个接口.接口可如下定义: type 接口名称 interface { method1(参数列表)…
前言 什么是c#呢? 首先你是如何读c#的呢?c sharp?或者c 井? 官方读法是:see sharp. 有没有发现开发多年,然后感觉名字不对. tip:为个人重新整理,如学习还是看官网,c# 文档天下无敌. 正文 c#和java一样,他们之间有很多故事,尤其是官司,c#同样是一门面向对象的语言,同样也支持面向组件编程. 复制一下面向对象和面向组件编程的概念: 面向对象技术的基础是封装--接口与实现分离,面向对象的核心是多态--这是接口和实现分离的更高级升华,使得在运行时可以动态根据条件来选…
最近,我发现自己对于一个事情,如果不给自己一个说服自己的理由,就会出现不能理解,不能记住,以至于不会使用或者“盲目”应用的情况. 但是,我学的这个学科就是应当建立在对信号作用过程的理解上面的. 下面,阐述一种说得过去的卷积的理解方法. 假如系统是一个非因果系统(即系统输出只与当前时刻的输入有关),y(t)=x(t)h(t)  ps.可以把h(t)理解成系统的一个衰减 但是一般系统都是非因果的,即系统输出不仅与当前时刻的输入有关系,还与之前的输入有关系.那么问题是之前的输入现在对应的衰减是什么呢?…
前言 用户觉得异常是不好的,认为出现异常是写的人的问题. 这是不全面,错误的出现并不总是编写程序的人的原因,有时会因为应用程序的最终用户引发的动作或运行代码的环境而发生错误,比如你用android4去安装现在的微信,或者说我们写的android程序不需要兼容android4,需要的效果就是在android4上安装然后崩溃. 我们编写代码的人需要做的是预测程序中出现的错误,并进行相应的处理,甚至有时候我们应该主动抛出异常. 无论编写的代码技术多么强,程序都必须处理可能发生的错误,比如说做客户端的时…
前言 对上节异常的补充,也可以说是异常使用的注意事项. 正文 减少try catch的使用 前面提及到,如果一个方法没有实现该方法的效果,那么就应该抛出异常. 如果有约定那么可以按照约定,如果约定有歧义,那么还是要抛出异常. 我们知道使用try catch 其实是要消耗性能的,那么是否能避免使用try catch呢?或者减少使用try catch呢? 我们使用api的时候,知道http制定了一套错误码,那么我们是否能使用错误码返回来做一个约定的呢? 答案是否定的,且不论我们的业务的不同,错误码制…
学习来源:计蒜客 平衡树 1.定义 对于每一个结点.左右两个子树的高度差的绝对值不超过1,或者叫深度差不超过1 为什么会出现这样一种树呢? 假如我们依照1-n的顺序插入到二叉排序树中,那么二叉排序树就退化成了一个有序链表,效率大大减少. 2.有关概念 全部平衡树基本由下面三个特征组成: 1.自平衡条件 2.旋转操作 3.旋转的触发 平衡树通过设置合理的自平衡条件,使得二叉排序树的查找.插入等操作的性能不至于退化到 O(n)O(n),而且在进行二叉排序树的查找.插入等操作时进行推断.假设满足当中某…
前言 c# 托管和非托管比较重要,因为这涉及到资源的释放. 现在只要在计算机上运行的,无论玩出什么花来,整个什么概念,逃不过输入数据修改数据输出数据(计算机本质),这里面有个数据的输入,那么我们的内存有限啊,这里面就牵扯到数据释放. 看下c# 的垃圾回收是怎么样的. 了解垃圾回收之前首先要了解数据,了解数据需要了解数据类型啊,数据类型分为值类型还有引用类型. windows 使用一个虚拟寻址系统,该系统把程序可用的内存地址映射到硬件内存中的实际地址上,这些任务完全由windows 在后台管理.我…
前言 这是续第三节. 概况垃圾回收与我们写代码的关系: 强引用和弱引用 针对共享 Web 承载优化 垃圾回收和性能 应用程序域资源监视 正文 强引用和弱引用 垃圾回收器不能回收仍在引用的对象的内存--这是一个强引用.它可以回收不在根表中直接或间接的托管内存.然而,有时可能会忘记释放内存. 注意:如果对象相互引用,但是没有在根表中引用,例如:对象A 引用对象B,B引用C,C引用A,这时候如果ABC没有在根表中引用那么直接会被销毁. 补充一下根表在垃圾回收中的作用: 垃圾回收在引用的根表中找到所有引…
前言 托管资源到是好,有垃圾回收资源可以帮忙,即使需要我们的一些小小的调试来优化,也是让人感到欣慰的.但是非托管资源就显得苍白无力了,需要程序员自己去设计回收,同样有设计的地方也就能体现出程序员的设计水平. 托管类在封装对非托管资源的直接引用或者间接引用时,需要制定专门的规则,确保非托管资源在回收类的一个实例时释放. 为什么要确保呢? 是这样子的,画一个图. 上图中托管中生成并引用非托管,一但非托管和托管中的引用断开(托管资源被回收),那么这个时候非托管资源还在,那么释放这个问题就有一丢丢困难.…