摘要:
今天和人谈起了傅立叶变换,被问到为什么有负频率,加上之前也被问到过相位谱是个什么东西,为什么傅立叶变换的结果是复数,等等问题。于是想把相关的概念写下来,供大家参考。还是老样子,这里的叙述只为说明概念,并不严谨。以 \( T \) 为周期的函数 \( c(t) \) 可以由 \( e^{ik\omeg... 阅读全文
摘要:
凡事都问并不意味着好学,也不是善于交流,更不是主动解决问题。在发问之前没有经过思考的,没有尝试通过百度、谷歌去独立解决的,都是对被问者时间和精力无耻的索取。所以当我拒绝回答你的问题,而是委婉的让你去问度娘时,我的意思是“你是三岁小孩儿啊,这样的事都来烦我!”。而对那些将此作为优点,标榜为”善于提问,... 阅读全文
摘要:
.NET中把“事件”看作一个基本的编程概念,并提供了非常优美的语法支持,对比如下C#和Java代码可以看出两种语言设计思想之间的差异。// C#someButton.Click += OnSomeButtonClick;// JavasomeButton.addActionListener( ... 阅读全文
摘要:
好长时间没有写博文了,今天继续。这次跟大家分享的内容起因于对一个枚举值列表的序列化,下面简化后的代码即能重现。为了明确起见,我显式指定了枚举的基础类型。// 定义一个枚举类型。public enum SomeEnum :int{ First, Second, Third, .... 阅读全文
摘要:
.NET框架为程序员提供了“序列化和反序列化”这一有力的工具,使用它,我们能很容易的将内存中的对象图转化为字节流,并在需要的时候再将其恢复。这一技术的典型应用场景包括[1] :应用程序运行状态的持久化;在应用程序之间通过剪切板传送对象;创建对象复本,以隔离用户操作造成的影响;在网络间传送对象。然而,.NET框架提供的默认序列化行为也存在着有诸多限制,尤其是在版本控制方面——比如一个使用SerializableAttribute标记,而未实现ISerializable的类型,在通过重构修改了某个字段的名称后,再反序列化之前的序列化结果时就会失败。本文首先举例说明了.NET默认序列化方案的限制;然 阅读全文
摘要:
最近在学习Hadoop,于是想使用VMWare建立一个虚拟的集群环境。网上有很多参考资料,但参照其步骤进行设置时却还是遇到了不少问题,所以在这里详细写一下我的配置过程,以及其中遇到的问题及相应的解决方法。一来做个记录,二来也希望能帮到大家。目标我们要建立一个具有如下配置的集群:host nameip addressos1master192.168.224.100CentOS2slave1192.168.224.201CentOS3slave2192.168.224.202CentOS其中master为name node和job tracker节点,slaveN为data node和task t 阅读全文
摘要:
我想有不少人像我一样,刚开始使用.NET中动态加载程序集的功能时,会被Assebmly中那么多加载程序集的方法搞得无所适从。当求助于MSDN和Baidu、Google后,可能会更加迷茫——说实话MSDN中相关的说明确实很难理解甚至有自相矛盾的地方,网上的大多数资料也讲得不甚明了。所以,我在这里分享一下自己对这些函数及其背后相关概念的理解,希望能帮到大家。文中如有错误,还请大家指正。本文的内容主要基于MSDN和Steven Pratschner的《Customizing the Microsoft® .NET Framework Common Language Runtime》一书,这 阅读全文
摘要:
我们在开发过程中曾经遇到过一个奇怪的问题:当软件加载了很多比较大规模的数据后,会偶尔出现OutOfMemoryException异常,但通过内存检查工具却发现还有很多可用内存。于是我们怀疑是可用内存总量充足,但却没有足够的连续内存了——也就是说存在很多未分配的内存空隙。但不是说.NET运行时的垃圾收集器会压缩使用中的内存,从而使已经释放的内存空隙连成一片吗?于是我深入研究了一下垃圾回收相关的内容,最终明确的了问题所在——大对象堆(LOH)的使用。如果你也遇到过类似的问题或者对相关的细节有兴趣的话,就继续读读吧。如果没有特殊说明,后面的叙述都是针对32位系统。首先我们来探讨另外一个问题:不考虑非 阅读全文
摘要:
大家可能都遇到过没有取消事件监听而带来的一些问题,像内存泄露、访问无效数据等。当我们写下如下代码时:source.StateChanged += observer.SourceStateChangedHandler实际上source会保持有对observer的一个引用,所以如果source的生命期长于observer的话,则当其它地方不引用observer时,如果不显示解除监听,则observer不会被垃圾回收。这可能会带来两个问题:其一,如果observer占用了大量内存的话,则这部分内存不会被释放;其二,程序的其它地方可能已经处于不一致的状态,这样当source.StateChanged事 阅读全文
摘要:
在我们的代码中,有时会在控件中添加对数据对象的引用。比如使用树节点的Tag属性保存相应的对象,以便在界面操作中能简单的进行访问。因为其它地方不会引用这些数据,所以我们期望在控件被销毁时,垃圾回收机制能回收相应的内存。但当软件运行了一段时间后,内存使用量会变得非常大。下面是简化后的示例代码: 1 using System; 2 using System.Windows.Forms; 3 4 namespace MemoryLeak 5 { 6 public class MainForm : Form 7 { 8 private Button holderButt... 阅读全文