二叉查找树定义 二叉查找树 (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上,发状态说我正在 学习,也不是... 阅读全文
Android 4.4 带来了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏、 虚拟按键动态隐藏, 应用可 以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 “身临其境” 的体验。 Android 4.4 中提供了 IMMERSIVE 和 IMMERSIVE_STICKY 标记, 可以用这两个标记与 SYSTEM_UI_FLAG_HIDE_NAVIGATION 和 SYSTEM_UI_FLAG_FULLSCREEN 一起使用, 来实现沉 浸模式。 注意: 这些标 记在Xamarin.Android 中被映射为 Android.Views.SystemUiFlags... 阅读全文
从源代码编译最新版本的 mono 网上已经有很多从源代码安装 mono 的资料了, 所以就不再啰嗦了, 没有做过的可以参考这两篇文章: 在 Ubuntu Server 上安装配置 Mono 生产环境 CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4 推荐用 git 从源代码获取 mono 源代码的方式来编译安装, 以后更新也很方便。 我获取 mono 最新版 源代码编译安装之后, 版本信息如下图所示: 对于某些 linux 发行版, 可能还没有下列网站的 https 证书, 因此需要导入并同步一下几个网站的 https 证书, 否则无法继续后面... 阅读全文