摘要:
开始实习之后,才发现自己是多么地菜。还有好多东西还要去学习。公司很好,还可以帮你买书。有一天随口问了一下上司D,代码规范上面有什么要求。然后D在Amazon上面找到了这本书《C#编程风格(The Elements of C# Style)》(中英对照),让我直接买下开看,按上面的要求编写就可以了。书可以找秘书F去报销。上个星期四在Amazon下单,周一才到。这书确实来的有点慢,没关系,我看的快。从周一到周五,用每天上下班在挤地铁(广州地铁你懂的)的时间,我把书在五个工作日就看完了。当然,关键是够薄。描述也相当简练。以下是我看完还记得的部分:1.空白这个没啥好说的,意思就是该留空白的时候要果断留 阅读全文
摘要:
关于FTP的应用免不了要对FTP进行增删查改什么的。通过搜索,整理和修改,自己写了一个FTP的Helper类。此篇文章目的有二(2最近流行)。累积代码,方便自己以后查阅使用;分享代码,方便他人使用。以下是类:FtpHelper.cs以下是重点说明:如何获取某一目录下的文件和文件夹列表。由于FtpWebRequest类只提供了WebRequestMethods.Ftp.ListDirectory方式和WebRequestMethods.Ftp.ListDirectoryDetails方式。这个方法获取到的是包含文件列表和文件夹列表的信息。并不是单单只包含某一类。为此我们需要分析获取信息的特点。分 阅读全文
摘要:
将文件夹A内的文件夹和文件同步到文件夹B。
其实需求也就那么一句话,没啥还需要解释的了吧。详细点说,需要同步文件/文件夹的“新增,删除,重命名,修改”。
一开始我的想法是先Google,然后在博客园找到这篇文章《C#文件同步工具教程》。这篇文章的核心来自msdn里面FileSystemWatcher 的解释。就是用对象FileSystemWatcher 去监听文件是否被创建,重命名,删除,修改。如果发生了就调用相对应的事件,将被修改,创建,重命名的文件复制到目标目录B当中。这个例子比较简单,很多事情都没考虑到。而且我认为用FileSystemWatcher 去监听所有的文件,太浪费CPU和内存。我的想法
是采用递归,遍历整个源目录,对比目标目录。
如果目标目录下没有相对应的文件,将文件复制到目标目录;
如果文件在两个路径下都存在,但是文件大小和最后写入时间不一致时,将原目录下的文件复制到目标目录下;
如果文件存在于目标目录下而不存在源目录下,则将目标路径下的文件删除。 阅读全文
摘要:
回溯法回溯法有“通用的解题法”之称。用它可以系统地搜索一个问题的所有解或任一解。回溯法是一种即带有系统性又带有跳跃性的搜索算法。它在问题的解空间树中,按深度优先策略,从根节点出发搜索解空间树。算法搜索至解空间树的任一结点时,先判断该节点是否包含问题的解。如果不包含,则跳过对以该节点为根的子树的搜索,逐层向其它祖先节点回溯。否则,进入该子树,继续按照深度优先策略搜索。回溯法求问题的所有解时,要回溯到根,且根节点的所有子树都已被搜索遍才结束。回溯法求问题的一个解时,只要搜索到问题的一个解就可结束。这种以深度优先方式系统搜索问题的算法称为回溯法,它是用于解组合数大的问题。问题的解空间用回溯法解问题时 阅读全文
摘要:
在当前节点(扩展节点)处,先生成其所有的儿子节点(分支),然后再从当前的活节点(当前节点的子节点)表中选择下一个扩展节点。为了有效地选择下一个扩展节点,加速搜索的进程,在每一个活节点处,计算一个函数值(限界),并根据函数值,从当前活节点表中选择一个最有利的节点作为扩展节点,使搜索朝着解空间上有最游记
解的分支推进,以便尽快地找出一个最优解。分支限界法解决了大量离散最优化的问题。//对比回溯法:回溯法的求解目标是找出解空间中满足约束条件的所有解,想必之下,分支限界法的求解目标则是找出满足约束条件的一个解,或是满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。
另外还有一个非常大的不同点就是,回溯法以深度优先的方式搜索解空间,而分支界限法则以广度优先的方式或以最小耗费优先的方式搜索解空间。 阅读全文
摘要:
贪心算法贪心算法通过一系列的选择来得到问题的解。它所做的每一个选择都是当前状态下局部的最好选择,即贪心选择。贪心选择的一般特征:贪心选择性质和最优子结构性质。贪心选择性质:所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。在动态规划算法中,每步所做的选择往往依赖于相关子问题的解。因而只有在解出相关子问题后,才能做出选择。而在贪心算法中,仅在当前状态下做出最好选择,即局部最优选择。然后再去解出做出这个选择后产生的相应的子问题。贪心算法所做的贪心选择可以依赖于以往所做过的选择,但决不依赖于 阅读全文
摘要:
MVC模式是一种不一般的设想。MVC模式包含有封装业务逻辑和数据处理的数据模型层(Models),显示用户界面的视图层(Views)和控制和连接模型层和视图层的控制层(Controllers)。
什么?
我很肯定我不是第一个发现下面这一点的。当你不清楚在那里写代码的时候,MVC会带来让你将过多的代码写在控制层(Controllers)的问题。
为了解决这个问题,我采用一种新的模式:MOVE。模型层(Models),操作层(Operations),视图层(Views)和事件层(Events)。图片显示了MOVE模式的基本结构,下面是对每个层的解释:
模型层(Models)封装应用程序所知道的一切。
操作层(Operations)封装应用程序所作的一切。
视图层(Views)完成用户与应用程序的交互。
事件层(Events)被用于安全地连接组件。 阅读全文
摘要:
动态规划法基本思想:将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。著名的应用实例有:求解最短路径问题,背包问题,项目管理,网络流优化等。个人对动态规划的理解,主要就是避免重复计算。就是那些曾经发生过的事情,曾经计算过的值先保存下来,然后再次遇到相同的子问题的时候,直接用保存好的值给出,不再进行计算。有一个很简单的例子,关于斐波那契数列。什么是斐波那契数列?根据维基百科的解释是这样的,费波那西数列(Fibonacci Sequence),又译费波拿契数、斐波那契数列、费氏数列、黄金分割数列。在数学上,费波那西数列是以递归的方法来定义:用文字来说,就是费波那西数列由 0 阅读全文
摘要:
笔试题目:判断一个字符串是否是IPv4地址。如果是返回ture,否则返回false。同样不可以使用库函数。可以选择用C/C++,C#或者Java。
e.g. C/C++: bool checkIPv4(char * ip){}
解决方法:
鄙人是这样想的,按照‘.’先将每个字串分割出来。如“192.168.203.70”分割为192,168,203,70四个整型。然后再判断这四个整型的范围,是否在0~255之间。我总觉得这种考虑欠妥,应该选择类似正则表达式那样的方法吧。 阅读全文
摘要:
笔试题目//写一个函数,将字符串翻转,翻转方式如下:“I am a student”反转成“student a am I”,不借助任何库函数。据说这题在笔试或者面试当中,出现的频率非常高。刚好在书上也看到这题,又在博客园看到这题出现了(“发职位经典面试题”)。作者也提示了,方法是先反转整个字符串,然后再反转字串。譬如先将“I am a student”反转为“tneduts a ma I”,然后再对每个字串(空格分割)反转一次。思想就那么简单吧。实现起来的话,我就有点凌乱了。C++没学好。伤不起。算法 1 #include <stdio.h> 2 3 void main() 4 { 阅读全文