IT技术博客

IT技术博客,精选各种精华文章供您阅读,是您学习各种IT技术的博客优选之地

数据结构与算法回顾之二叉树的遍历(下)

上节我们给出了广度优先遍历算法的实现和深度优先遍历算法的递归实现,本节我们讨论深度优先的三种遍历形式的非递归实现。 1.非递归先序遍历:先访问树的根节点,然后是左子树和右子树。根节点入栈,循环判断栈是否为空,如果不为空,出栈跟节点并访问根节点,如果右子树非空,让右子树先入栈;如果左子树非空,再让左子树入栈,执行循环,直到栈中为空。 代码如下: /// <summary> /// 先序遍历 /// </summary> /// <param name="root">开始节点</param> public void IterativePreorder(BSTNode root) { BSTNode p = root;

SVM学习——核函数

还记得上篇末提到的对于优化问题:                                                                &#

[SharePoint 2010]在SharePoint中几种访问域用户profile的方法

在SharePoint2010中,我们可以选择几种不同的方式来访问域用户的profile,下面简单介绍3种方法: 1.通过客户端直接调用user profile service来访问 例如项目中有silverlight模块想显示当前用户的profile信息,可以这么作: 首先添加Service Reference,输入service url http://rootsite/sites/subsite/_vti_bin/UserProfileService.asmx?WSDL rootsite & subsite请根据实际情况替换。然后我们为我们的Service reference取名为UserProfileServiceProxy。 其次在maipage方法中加入调用service 代码以及回调方法代码: public MainPage()   &nb

关于编程的浅学习与深学习

关于编程的学习,大家肯定都知道,也是大家都说来说去的,就几句话:1.多看书。2.多看代码。3.多敲代码。这些我不想多说,也觉得没有多说的必要。经常在CSDN上看到有人问“我学习C++一段时间了,该如何进阶?”,然后接着就是一大堆的人,重复这上面的三句话或者更多,我不是说这些方法是错的,我只是认为,这样没有点到本质,初学者喜欢依赖于书籍,他们看书了,他们也照着书敲了代码,但是他们就是感觉一直在基础的层面上打转,这是为何呢?在C++里定义复制构造函数时,大家知道,一般对于类中含有指针的,要进行深复制,而不是浅复制。而我在这里也要讲一个类似的方法,那就是关于编程的浅学习与深学习的问题。大家在这里可以先试着想想自己平时是怎么学习编程的?遇到一个新函数、新概念,大家是看书?记住概念?看看代码?抑或是其他?我根据个人的理解和经验,在没遇到一个新知识时,我把学习这个知识点的深度分

OnLoad与Page_Load的差异分析

记得最开始学习ASP.NET的时候,我们就被告知:Page_Load方法里面可以写页面加载的代码。 于是我们就懵懵懂懂写了很长时间的Page_Load方法。最近回过头思考,为什么一个普通的方法, 能被自动调用呢?于是就得知了AutoEventWireup属性。 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %> 一般我们新建页面的时候,AutoEventWireup就为true。MSDN的解释是:指示控件的事件是否自动匹配 (Autowire)。 如果启用事件自动匹配,则为 true;否则为 false。默认值为 true。 那么我们先得到一个结论是:AutoEventWireup为true时,Page_Load、Page_Init之类的方法

OEA中AutoUI重构-新的Command生成设计

    OEA框架的核心之一是AutoUI,其职责是面向领域模型及UI元模型进行生成统一的界面。     在本次的迭代开发中,需要对命令按钮的生成方式进行一些定制。由于原来并没有为这样的需求留有特别的扩展点,加之原来的生成代码是过程式的代码、且也变得比较冗长,所以我们决定对这一部分的代码进行重构。 原来的模式     历史代码中,为某一实体类生成命令按钮的流程是这样的: 找到实体类可用的所有命令按钮元数据。 对它们进行过滤,依靠权限、版本的客户化元信息等。 构造几个生成控件的List容器,分别是:itemsInToolbar,itemsInContextMenu,itemsInGroup。 遍历所有的命令按钮,根据其对应的元数据,分别生成相应的控件(按钮、菜单等),然后添加到容器中。其中,还有

一个Quicksort究竟可以写到多么短

一个Quicksort究竟可以写到多么短 说实话,我从来没有能一次写对一个快速排序,总是有各种各样的错误。 快排麻烦就麻烦在,没办法去调试它,因为它是生成递归的,只能去静态调试,或者是不断的打印数组的状态以推测错误的可能性。 然而快排的基本思想却是极其简单的:接收一个数组,挑一个数,然后把比它小的那一摊数放在它的左边,把比它大的那一摊数放在它的右边,然后再对这个数左右两摊数递归的执行快排过程,直到子数组只剩一个数为止。 下面我先用最常用的C语言来写一个快速排序: 首先可以先写出一些伪代码: void quicksort(int array[], int left, int right) { //Do nothing if left <= right //p <- Get a number from array //Put elements <= p

新浪微博PC客户端(DotNet WinForm版)——功能实现分解介绍

上一篇:新浪微博PC客户端(DotNet WinForm版)—— 初探 说明一下:只是兴趣,并不是想发布为一个软件,说实在的,如果要作为一个软件发布,要做的工作还有很多。  新浪微博API地址:http://open.t.sina.com.cn/wiki/index.php/API%E6%96%87%E6%A1%A3?retcode=0。目前提供的SDK: 1 Adobe Air2 Flash SDK3 PHP4 C++5 C#6 Java SDK7 Python SDK8 Javascript SDK(JSSDK)9 iOS SDK10 OAuth Library其它的不清楚,C#的还不完善,而且不是官方的。 当前已

Working with FBX SDK (2)

Working with FBX SDK (2) 仅供个人学习使用,请勿转载,勿用于任何商业用途 作者:clayman      上一篇文章介绍了fbx sdk的基本用法,接下来我们继续讨论如何取得normal,tangent,binormal和uv信息。先介绍一些关于KFbxLayer对象的概念。KFbxLayer对象是一个容器,对mesh来说,它包含了除控点,多边形信息以外大部分数据,比如normal,tangent,vertex color,uv等等。一个mesh可以包含多个KFbxLayer对象,不同layer之间的元素类型,个数通常都不相同。下面是一个简单的mesh结构关系: mesh ---- layer 0 { KFbxLayerElementNormal, KFbxLayerElementTangent, KFbxLayerElementUV&

Gamemonkey编程---高级进阶3

这些东西是平时遇到的, 觉得有一定的价值, 所以记录下来, 以后遇到类似的问题可以查阅, 同时分享出来也能方便需要的人, 转载请注明来自RingOfTheC[ring.of.the.c@gmail.com]      继续翻译GameMonkey脚本语言的文章, 这些文章都是在GameDev网站上找到的. 在翻译的过程中, 更加深了我对GM的了解和兴趣, 它的协程机制确实比Lua的协程在原生支持方面争强了很多, so enjoy! 上次GM参考手册的翻译放在了一篇文章, 感觉显的太长了, 所以这次我决定将这些长篇翻译分成多篇文章, 这样阅读起来比较方便, 而且可以避免一次信息过大 原文地址: http://www.gamedev.net/reference/programming/features/gmScriptAdv/page2.asp &nbs

.NET 4.0网络开发入门之旅——我在“网” 中央

.NET 4.0网络开发入门之旅--    我在“网” 中央(上)注:     这是一个针对网络开发领域初学者的系列文章,可作为《.NET 4.0 面向对象编程漫谈 》一书的扩充阅读,写作过程中我假设读者可以对照阅读此书的相关章节,不再浪费笔墨重复介绍相关的内容。     对于其他类型的读者,除非您已经有相应的.NET 技术背景与一定的开发经验,否则,阅读中可能会遇到困难。     我希望这系列文章能让读者领略到网络开发的魅力!     另外,这些文章均为本人原创,请读者尊重作者的劳动,我允许大家出于知识共享的目的自由转载这些文章及相关示例,但未经本人许可,请不要用于商

C#基础之进程管理

今天 我们来讲一个很基础的东西--进程,我们知道一个Win32程序都会被分配到一个进程里面,进程之间是相互独立的个体,一个进程出现了问题停止工作不会影响其它的进程。那我们怎样用C#来获取当前系统中运行的进程呢?我们来看看下面这段代码   Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> Process[] ps = Process.GetProcesses(); foreach (Process p in ps) { Console.WriteLine("{0}, {1}", p.ProcessName, p.Id); }  

写在项目开工之前--一些心得

新的项目马上就要开始了,我一个人负责Android平台,这是第一次自己完全掌控一个软件的开发,心里有些忐忑,怕自己能力不够,做不好,但是没有办法,只好咬紧牙关迎头赶上。回想以前的项目经历,有些感悟,总结一下。 1. 在进行界面布局的时候,一定要考虑到横竖屏的切换,尽量做到后期不用适配很多的机器。 2. 对于Activity的生命周期的控制,一定要严谨,考虑周全,什么时候查询,什么时候移除监听器,activity的三种生命周期的切换,保存界面信息,恢复界面信息,都要在代码编写之前尽量考虑周全,切不可跟着bug走。 3. 经常整理代码,类中用不到的属性,方法,一定要删除,不要想着以后可能用到,99%的情况是以后绝对用不到,这样做可以避免以后代码整理的混乱 4. 工作台的编码和工程的编码统一使用utf-8,同时将家里的电脑上的工作台与之同步,避免乱码。 5. 要做好工作记录,公司小,没有开

canvas的魔法,X光效果

一 图片预览 HTML5给web开发带来很多好东西,可以说,它将开创新一代web开发。 其中canvas就是它带来的东西之一,canvas非常强大,可以做到很多东西,不过我觉得学习canvas几乎等于在学习一种独立的技术了。这里只是展示一个简单的canvas效果。如下图: 二 原理介绍 我在代码中通过ctx.getImageData(0,0,width,height);获取canvas里面的imagedata对象,而这个对象就是这个效果实现的关键。 我们可以通过imagedata.data来获取一个数组,这个数组的length是canvas像素数量的四倍,其中每四个项代表一个像素。在每四个项里,他们一次代表rgba,rgb就很明显了,而a就代表透明,当a为255的时候完全不透明,当a为0的时候就是透明的。而这次的效果无需用到透明,所以没对这个进行操作。 最后我通过ctx.putImage

mongodb分片集群(sharding with replica set)配置

一共有4台机器,各自挂接一个存储,希望实现: 尽量节约存储 高可用性 存储大量数据 配置方案: 每一台机器做一个分片的主数据库 每一台机器做一个分片的后备数据库 每一台机器做一个分片的仲裁服务 两个两个一组交叉作对方的后备 有三台机器开配置服务 有一台机器开路由服务(生产环境可以在每一台Windows App服务器上开路由服务,App服务器集群做负载均衡) 这样的话,任何一台服务器完全离线(或者交叉的两台服务器离线),都能保证整个系统正常运行。不过在服务器和服务器起来之后需要: 在升级成为主数据库的那个后备数据库上运行rs.StepDown(100)来让它让出主数据库的位置,因为每一个分片的活动数据库都应该由独立服务器担当,以获得最好的性能 配置服务和后备数据库起来之后不需要做任何调整   192.168.129.142 mkdir -p /usr/data/shar

自创用于节点操作的API,颠覆原生操作HTML DOM节点的API --- 敏捷开发

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。第一次看到敏捷开发的定义,我就被敏捷开发迷住了。通俗来说,敏捷开发可以让我们用过的代码可以再次重用,因为是再次重用,所以相对安全,再次调试也没有第一次那么费心,省时省力。不断重用代码的过程中把存在的bug不断的修复,也因为不断的去重用, 这个模板变得起越来越独立,适用的情况越来越广范,最后在安全方面达到铜墙铁壁,在开发方面达到随心所欲,在维护方面达到从容面对。敏捷开发的确是利害,但如何练就这种深奥的武功呢?就我自身的情况靠人传授武功是不可能了,因为公司就我一个做开发的,苦思幂想之后,决定从开源的优秀框架入手,把它一行一行代码看懂,然后再为我所用。因为是一个人开发,前台和后台都得包办,哪从那一面做起呢? 之前有过一二个月的开发经验,觉得前台的

GSM蜂窝基站定位基本原理浅析

位置服务已经成为越来越热的一门技术,也将成为以后所有移动设备(智能手机、掌上电脑等)的标配。随着人们对BLS(Based Location Serices,基于位置的服务)需求的飞速增长,无线定位技术也越来越得到重视。GSM蜂窝基站定位,以其定位速度快、成本低(不需要移动终端上添加额外的硬件)、耗电少、室内可用等优势,作为一种轻量级的定位方法,也越来越常用。本文简单介绍一下各种基于GSM蜂窝基站的定位方法及基本原理,给开发人员作为参考。我将尽量尝试用开发人员熟悉的方式来描述问题。 预备知识:GSM蜂窝网络基础结构 我们知道,GSM网络的基础结构是由一系列的蜂窝基站构成的,这些蜂窝基站把整个通信区域划分成如图所示的一个个蜂窝小区(当然实际上,一个基站往往不并不只是对应一个小区,但是这个与我们讨论的主题关系不大,我们不做深究)。这些小区小则几十米,大则几千米。如下图所示,我们用移动设备在G

PowerShell 2.0在远程主机上运行命令和脚本

在前面的文章里关于持久远程线程的讨论中,曾经介绍了如何在本地主机上进入远程线程并执行命令。如果没有显式的终止线程的情况下,用户能在本地计算机上执行远程主机的命令,而PowerShell的提示符能够直接反映当前所使用线程的状况。在本章将会介绍PowerShell的内置特性,这些特性能够使用户在远程主机上运行命令和脚本。 通过使用交互式远程管理可以克服使用Invoke-Command的一些缺点,然而这种方法也是有其局限性的。在交互式远程管理中,用户需要显式的进入或退出远程线程,这就意味着,同时只能连接到一个远程主机上,而且只能访问对应远程主机上的cmdlet和模块。如果需要让不同的cmdlet在不同的主机上都可以执行,这就做不到了。 比如,有两台主机分别各自安装了Exchange 2010和SharePoint 2010,如果用户需要访问两台主机上各自可用的cmdlet,两台主机和本机

告别aspx,高性能快捷开发 — JQuery Smart UI 快捷开发实例应用(一)入门【后篇】

上篇把服务端Bll层的内容完成了,下面就开始UI层的开发,打造简洁而“清爽”的功能页面. 第四步,配置Fncode   与BLL后台方法对应,在UI层进行FnCode的配置,位置在:Config/FnCode.xml中。 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> <Module name="UIDemo"> <BR name="BRNews"> <Fn no="fn_ns01"></Fn><!--查询--> <Fn no="fn_ns02"></Fn><!--保

Spring.Net实现AOP以及AOP相关概念(学习笔记四)

Spring的重要应用是在AOP(Aspect- Oriented programming面向方面编程)编程方面。Spring.Net是如何进行AOP的呢?下面是我在学习Spring实现AOP的例子以及我个人的一些浅显的理解,若有不妥之处,还望大侠们指出。   本节重点分如下两部分:   1、Spring实现AOP。   2、AOP相关概念。   先介绍如何实现AOP,然后再通过使用过程中的用法,谈谈我自己对AOP概念的理解。   首先还是介绍一下开发环境以及软件版本:   VS版本:VS2008 SP1、Spring版本:1.3.0。   在我使用Spring.Net实现AOP的例子中有两个部分:1、使用编程方式实现。2、使用配置方式实现。实际在应用中,应用配置实现AOP还是相对更好点。实现AOP除了之前用到的程序集以外,还需使用程序集Spring.AOP。   1、Spring实现AO