最近需要将一些命令行程序包装成后台服务, 本来可以用 .NET 完成, 不过又想尝试一下用 C 语言实 现 Windows 服务, 发现用 C 语言做 Windows 服务也是很容易的, 步骤如下: 1 包含必要的头文件, 并定义一些常量, 代码如下: #include <windows.h> #include <stdio.h> // 服务线程暂停时间; #define SLEEP_TIME 5000 // 日志文件输入路径 #define LOGFILE "C:\\memstatus.txt" 2 写日志文件, 几乎所有的服务都有日志输出, 即使是最... 阅读全文
在二叉查找树的最后提到, 二叉树最终的形状如下图所示: 实际上,为了避免二叉树形状向最坏情况靠拢, 通常会创建能够自平衡的 2-3 树。 而 红黑树 是 2-3 树比较简单的一种实现形式: 红黑树将用二叉树表示 2-3 树, 实现起来相对容易; 内部使用向左倾斜的链接表示第三个节点; 红黑树定义如下: 没有任意节点拥有两个红色链接; 从跟节点到末节点的黑色链接数目相等; 红色节点向左倾斜; 用红黑树来表示 2-3 树例子: 红黑树的节点定义 节点定义 在二叉查找树节点的基础上增加一个 Color 字段, 相关代码如下: // Co... 阅读全文
二叉查找树定义 二叉查找树 (Binary Search Tree) 是按照平衡顺序排列的二叉树, 也称二叉搜索树、 有序二叉树(ordered binary tree),排序二叉树(sorted binary tree)。 首先, 要符合二叉树的特性: 可以为空; 也可以拥有连个互不相交的子树, 即: 左子树和右子树。 平衡排序, 每个节点都有一个 key, 并且每个节点的 key 都符合: 大于左子树中所有节点的 key; 小于右子树所有节点的 key ; 二叉查找树节点必须包含四个字段: 一个 Key 和一个 Value ; ... 阅读全文
快速排序 (Quick Sort) 算法简介 快速排序是非常常用的排序方法, 采用分治法的策略将数组分成两个子数组, 基本 思路是: 从数组中取一个元素作为基准元素, 通常取数组的第一个或者最后一个元素; 分区, 即将数组中比基准元素小的元素放到基准元素的左边, 比基准元素大的元素放 到右边; 递归, 分别对比基准元素小的部分和比基准元素大的子数组用相同的方式进行排序; 递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归 下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素 摆到它最后的位置去。 ... 阅读全文
OWIN 请求处理函数 在 OWIN 的最底层, 处理请求的函数定义的委托签名如下: Func<IDictionary<string, object>, Task> 这个函数接受类型为 IDictionary<string, object> 的 OWIN 环境, 返回一个 Task 对象。 通常可以为这个函数起这样的别名: using AppFunc = Func< IDictionary<string, object>, // OWIN 环境 Task>; // 任务 于是,请求处理函数可以这样... 阅读全文
ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动 设备)的 HTTP 服务。 ASP.NET Web API 是一种用于在 .NET Framework 上构建 RESTful 应用程序的理想平台。 ASP.NET Web API 是 OWIN 兼容的, 因此可以在 OWIN 服务器上运行。 接下来使用 Xamarin Studio 创建一个 OWIN 兼容的 C# 类库, 也就是 OWIN 中定义的“应 用 (Application)” , 然后在不同的 OWIN 服务器/宿主上运行。 创建 OWIN 兼容的 Web API 类库 打... 阅读全文
什么是 OWIN ? OWIN 的全称是 “Open Web Interface for .NET”, OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一套标准的接口, 其目的是为了实现服务器与应用之间的解耦, 鼓励为 .NET Web 应用开发简单模块。 OWIN 是一个开源开放的标准, 有助于建设 .NET 开发的开源生态环境, OWIN 定义了如下几个概念: 服务器 (Server) HTTP 服务器直接与客户端交互, 并用 OWIN 语义处理请求, 服务器需要一个适配层将客户请求转换 成 OWIN 语义。 支持 OWIN ... 阅读全文
Xamarin Studio 最近发布了 5.2 版本, 带来了一些相当棒的特性, 其中有一些特性甚至超越了 Visual Studio 2013, 接下来就介绍我认为最棒的并且比 VS2013 要好用的三个特性: NuGet 包管理 Visual Studio 对 NuGet 包的管理是通过对话框来管理的, 如下图所示: 对 NuGet 包的添加、 更新、 删除等操作都在这个对话框内完成, 不过缺点也是每次都得打开这个对话 框。 Xamarin Studio 提供一些更加人性化的管理方式, 一部分功能可以通过上右键下文菜单来管理, 不需要打开包管理对话框。 自动检查更新 ... 阅读全文
本文讲述我认为对 c# 程序员最重要的 10 个提示, 每个提示都会有一段对应的代码, 对 新手来说也很容易掌握。 1: 为非公开的方法编写测试 你尝试过为组件的非公开方法写测试么? 很多开发者都没有写过, 因为这些方法对测试项 目来说是不可见的。 c# 可以通过在 AssemblyInfo.cs 中添加下面的标记 (InternalsVisibleToAttribute) , 让内部成员对其它组件可见。 //Make the internals visible to the test assembly [assembly: InternalsVisibleTo("MyTestA... 阅读全文
iOS 开发中经常看到 CFBundleShortVersionString 和 CFBundleVersion 两个都可以用来标识应 用版本号的变量, 究竟应该用哪个呢? 下面就一探究竟。 CFBundleShortVersionString CFBundleShortVersionString (String - iOS, OS X) 表示 bundle 发布版本号, 标识应 用的一个发布迭代。 发布版本号是由三个用句点 . 分割的整数组成的字符串, 第一个数字是主版本 号,表示重要的功能或重大的更新, 第二个数字表示次要功能的更新,第三个数字表示维护更新, 具体规则也可以参考... 阅读全文
什么是 Scss Scss 是 CSS 的扩展, 在保证兼容性的基础上, 允许使用变量、 嵌套、 混合、 导入等特性, 在编写大量的 CSS 文件时很有帮助。 特色 完全兼容 CSS3 在语法上扩展了变量、 嵌套以及混合等 操作颜色以及其它的有用的函数 高级特性, 比如针对类库的控制声明 格式良好并且可控制的输出 Firebug 集成 基本语法 Scss 是 CSS3 的扩展, 在 CSS3 的基础上, 添加了下面几个重要的特性: 变量 Scss 使用 $ 符号来定义变量, 支持的变量类型有 数字(可带单位)、 字符串 、颜色 以及 布尔值 等,... 阅读全文
1、不要浪费时间找最佳环境。 许多学生认为只要找到了最佳的学习环境,学习就会变得轻而易举,所以他们花了大量的时 间找寻和尝试不同的地方,寝室、咖啡馆、图书馆、草坪……大把的时间浪费于此。更糟的是, 你会觉得,除非你找到理想的学习地点,否则你根本无法学习。有没有什么好办法?找一个 相对安静的地方开始学习。一旦你投入到学习中去,你会觉得周围的环境还不错。 2、不要把准备工作当学习。 一些学生常常“准备好要学习”,却从没有真正开始。不要把清理桌子、整理电脑文件和“准 备好要学习”当成学习。即使在学习的地方,如果你只是泡在Facebook上,发状态说我正在 学习,也不是... 阅读全文