一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Backend

十大编程算法助程序员走上高手之路

算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。 算法步骤: 1 从数列中挑出一个元素,称为 “基准”(pivot), 2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。 3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。 递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。 算法二:堆排序算法 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 堆排序的平均时间复杂度为Ο(nlogn) 。 算法步骤: 创建一个堆H[0..n-1] 把堆首(最大值)和堆尾互换 3. 把堆的尺寸缩小1,并调用shift_down(0),目的是把新的数组顶端数据调整到相应位置 4. 重复步骤2,直到堆的尺寸为1 算法三:归并排序 归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 算法步骤: 1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置 3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置 4. 重复步骤3直到某一指针达到序列尾 5. 将另一序列剩下的所有元素直接复制到合并序列尾 算法四:二分查找算法 二分查找算法是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜 素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组 为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,时间复杂度为Ο(logn) 。 算法五:BFPRT(线性查找算法) BFPRT算法解决的问题十分经典,即从某n个元素的序列中选出第k大(第k小)的元素,通过巧妙的分 析,BFPRT可以保证在最坏情况下仍为线性时间复杂度。该算法的思想与快速排序思想相似,当然,为使得算法在最坏情况下,依然能达到o(n)的时间复杂 度,五位算法作者做了精妙的处理。 算法步骤: 1. 将n个元素每5个一组,分成n/5(上界)组。 2. 取出每一组的中位数,任意排序方法,比如插入排序。 3. 递归的调用selection算法查找上一步中所有中位数的中位数,设为x,偶数个中位数的情况下设定为选取中间小的一个。 4. 用x来分割数组,设小于等于x的个数为k,大于x的个数即为n-k。 5. 若i==k,返回x;若i<k,在小于x的元素中递归查找第i小的元素;若i>k,在大于x的元素中递归查找第i-k小的元素。 终止条件:n=1时,返回的即是i小元素。 算法六:DFS(深度优先搜索) 深度优先搜索算法(Depth-First-Search),是搜索算法的一种。它沿着树的深度遍历树的节点,尽可能深的搜索树的分 支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发 现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。DFS属于盲目搜索。 深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。一般用堆数据结构来辅助实现DFS算法。 深度优先遍历图算法步骤: 1. 访问顶点v; 2. 依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问; 3. 若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。 上述描述可能比较抽象,举个实例: DFS 在访问图中某一起始顶点 v 后,由 v 出发,访问它的任一邻接顶点 w1;再从 w1 出发,访问与 w1邻 接但还没有访问过的顶点 w2;然后再从 w2 出发,进行类似的访问,… 如此进行下去,直至到达所有的邻接顶点都被访问过的顶点 u 为止。 接着,退回一步,退到前一次刚访问过的顶点,看是否还有其它没有被访问的邻接顶点。如果有,则访问此顶点,之后再从此顶点出发,进行与前述类似的访问;如果没有,就再退回一步进行搜索。重复上述过程,直到连通图中所有顶点都被访问过为止。 算法七:BFS(广度优先搜索) 广度优先搜索算法(Breadth-First-Search),是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。如果所有节点均被访问,则算法中止。BFS同样属于盲目搜索。一般用队列数据结构来辅助实现BFS算法。 算法步骤: 1. 首先将根节点放入队列中。 2. 从队列中取出第一个节点,并检验它是否为目标。 如果找到目标,则结束搜寻并回传结果。 否则将它所有尚未检验过的直接子节点加入队列中。 3. 若队列为空,表示整张图都检查过了——亦即图中没有欲搜寻的目标。结束搜寻并回传“找不到目标”。 4. 重复步骤2。 算法八:Dijkstra算法 戴克斯特拉算法(Dijkstra’s algorithm)是由荷兰计算机科学家艾兹赫尔·戴克斯特拉提出。迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法最终得到一个最短路径树。该算法常用于路由算法或者作为其他图算法的一个子模块。 该算法的输入包含了一个有权重的有向图 G,以及G中的一个来源顶点 S。我们以 V 表示 G 中所有顶点的集合。每一个图中的边,都是两个顶点所形成的有序元素对。(u, v) 表示从顶点 u 到 v 有路径相连。我们以 E 表示G中所有边的集合,而边的权重则由权重函数 w: E → [0, ∞] 定义。因此,w(u, v) 就是从顶点 u 到顶点 v 的非负权重(weight)。边的权重可以想像成两个顶点之间的距离。任两点间路径的权重,就是该路径上所有边的权重总和。已知有 V 中有顶点 s 及 t,Dijkstra 算法可以找到 s 到 t的最低权重路径(例如,最短路径)。这个算法也可以在一个图中,找到从一个顶点 s 到任何其他顶点的最短路径。对于不含负权的有向图,Dijkstra算法是目前已知的最快的单源最短路径算法。 算法步骤: 1. 初始时令 S={V0},T={其余顶点},T中顶点对应的距离值 若存在<v0,vi>,d(V0,Vi)为<v0,vi>弧上的权值 若不存在<v0,vi>,d(V0,Vi)为∞ 2. 从T中选取一个其距离值为最小的顶点W且不在S中,加入S 3. 对其余T中顶点的距离值进行修改:若加进W作中间顶点,从V0到Vi的距离值缩短,则修改此距离值 重复上述步骤2、3,直到S中包含所有顶点,即W=Vi为止 算法九:动态规划算法 动态规划(Dynamic programming)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。 动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解。 通常许多 子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量: 一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个 子问题解之时直接查表。 这种做法在重复子问题的数目关于输入的规模呈指数增长时特别有用。 关于动态规划最经典的问题当属背包问题。 算法步骤: 1. 最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重要线索。 2. 子问题重叠性质。子问题重叠性质是指在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。 动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是 在表格中简单地查看一下结果,从而获得较高的效率。 算法十:朴素贝叶斯分类算法 朴素贝叶斯分类算法是一种基于贝叶斯定理的简单概率分类算法。贝叶斯分类的基础是概率推理,就是在各种条件的存在不确定,仅知其出现概率的情况下, 如何完成推理和决策任务。概率推理是与确定性推理相对应的。而朴素贝叶斯分类器是基于独立假设的,即假设样本每个特征与其他特征都不相关。 朴素贝叶斯分类器依靠精确的自然概率模型,在有监督学习的样本集中能获取得非常好的分类效果。在许多实际应用中,朴素贝叶斯模型参数估计使用最大似然估计方法,换言之朴素贝叶斯模型能工作并没有用到贝叶斯概率或者任何贝叶斯模型。   from:http://www.techug.com/10-algorithm-help-programmer-grow-up

龙生   28 Oct 2014
View Details

22条日常技巧助程序员提高工作效率、节约时间

我一直在测试和调整各种生产效率的技术,在过去的五年中,阅读了大量的书籍(其中大多数是重复的) ,这里是我的一些结论: 这不是一个关于时间的问题,而是关于精力。 为了“有效率”,我们试图在一个工作日内塞进尽可能多的小时,但最终一切都更多地取决于你的注意力,积极性和良好状态(这些都是直接与精力等级联系在一起)而不是工作时间 。 我最近在葡萄柚的一个内部演示上提及了我提高效率的想法,结果性的演示是在Slideshare上的:producitivity porn. 其中一些关键结论: 1. 决定什么是重要的事,因为在5年之内,你现在做的80%的事情都不会有任何结果。那只是无用功,没有有用的结果。 2. 睡眠,饮食和运动可以让你的成果提高到三倍,因为他们可以帮助你增强你的注意力,动力和精力水平。 3. 两分钟法则:如果你可以在两分钟内做完一件事(比如回复邮件或是一个家务),那就现在做。计划着一会儿完成它,记着它,并在未来完成它会花费五分钟甚至更多的时间。 4. 五分钟法则:治疗拖延症最好的办法不是定目标去完成一个可怕的大任务,而是只在那件事上花五分钟。你会发现在大多数情况下,它在超出五分钟的时候依旧很顺利,因为你进入了平坦期。 5. Seinfeld生产链:如果你想做好一件事,那就每天去做。包括圣诞节,复活节和审判日。没有例外。 6. 微小的生活习惯:与五分钟法则高度结合起来,你可以很快地形成好习惯。这个很有用,我测试过的。 7. 你的记忆力烂透了。 即使你是一个天才也要把每件事都从你的脑子里清出来。把他们写在一个笔记本上,放进待办事项列表的应用程序里,记在手机里,或是告诉Siri,我不在意你使用的方法。 8. 尽量少使用工具。我曾经测试过大多数代办事件管理器,并最终保持使用Cultured Code的Thing app和谷歌日历(iCal 是不错,但是谷歌日历和我的默认客户端Gmail结合得很好)。如果你了解了下一条规则,你用什么就并不重要了(铅笔或是钢笔都是可以的)。 9. 规则强于工具。你需要纪律,这对我来说意味着两件事:我每天早晨做得第一件事是计划我的一天,并且我每天都写一个简短的工作日志。这有助于帮助我保持清醒,有良好的优先级排序,去掉无用的任务,并且做有意义的事情。这节约了我很多时间。 10. 番茄计时器,这是一个时间盒。在30分钟内只做手头的事情,不做任何其他的事情:没有电话,邮件,不和别人说话,没有社交网站。除了记得在发生火灾时从楼里跑出来外,没有别的了。 11. 总是带着耳机。 你没必要在听音乐,但是这会阻碍别人接近你。 12. 邮箱调度和收件箱清零。不要把查邮箱当做你一天里的第一件事,也不要在晚上看它(这件事毁掉了我的很多 个晚上),试着一天只查三次:早上十一点,下午两点和下午五点。你的收件箱并不是一个待办事项列表。把它清空:每一封邮件都应该是一个可操作的任务(把它 和待办列表连在一起),或是一个参考文献(把它发到Evernote或存档),或是现在就应该删掉。 13. 对手机来说也是一样的。不要总是能被联系到,我总是把手机静音,并分批回电话。 14. 把小事情分批,比如邮件,电话,或是facebook等等。 15. MI3,最重要的三件事(或是改成一件必做的,3件应该做的,或是五件可以做的)。早晨开始做最重要的一件事。 16. 意志力是有限的。不要认为在你遇到麻烦的时候意志力会帮你。把最重要的事情放在早晨做,并且尽可能地让所有事情自动化(委托,分批等等)。美国总统不需要每天选择他们的菜单和衣服颜色,否则他们的意志力会在晚些他们需要按下(或不按)红色按钮时耗尽。 17. 最有驱使力的事情。总是问问自己,你现在能做的最有驱使力的事情是什么,然后应用规则14。 18. 经常推出新产品。不要过分地润色它。就像他们在创业公司圈所说的,“如果你不因你的产品感到难堪,你已经推出得太晚了。” 19. 压力会带来奇迹。使用奖励或是社会承诺。我们最近在新的葡萄柚网站上实施了这一点。之前的那个网站投入使用花了两年半的时间,而新的这个只花了两天半,我们用了一个周末进行编程马拉松(外加周一)。 20. 有计划的拖延。你的大脑需要休息,并且有时候新一期的绿箭侠可以比最好的TED演讲创造更大的奇迹。 21. 删除,说不,忽略,不要坚守日程表。我喜欢最后一点,它来自于马克·安德森,因为这样可以让他立即见任何他想见的人。这样很多人会恨你,但是你有时间做相关的事情。你认为你会在20年后后悔这样做吗?或是为了一些人做一些你不在意的事情,只是为了表面上的赞赏。 22. 假装无能。这是一个应用之前规矩的很有策略的方法。 这次就到这里,我的拖沓休息结束了,我要回去工作了。 【补充】: Colin Shillingford 在他的回复中认为,“节约”时间的最好方法是充分利用我们的时间。我们无法创建之前不存在的时间。我们所能做的,改变任务的优先级,或者调整任务的顺序。 我们中的大多数,正是在这方面出问题了。此外,Colin 在回复中也推荐了他认为很不错的番茄时间管理方法。 稿源:程序师 from:http://www.oschina.net/news/56502/what-are-the-best-day-to-day-time-saving-hacks

龙生   28 Oct 2014
View Details

ASP.NET伪静态实现

1.什么是伪静态?使用伪静态的作用是什么?

定义:动态网页通过重写URL的方法实现去掉动态网页的参数,但在实际的网页目录中并没有必要实现存在重写的页面。

龙生   25 Oct 2014
View Details

C#操作IIS7程序池新建站点站点配置

最近在做一个WEB程序的安装包;对一些操作IIS进行一个简单的总结;主要包括对IIS进行站点的新建以及新建站点的NET版本的选择,还有针对IIS7程序池的托管模式以及版本的操作;首先要对Microsoft.Web.Administration进行引用,它主要是用来操作IIS7; using System.DirectoryServices; using Microsoft.Web.Administration; 1:首先是对本版IIS的版本进行配置:

2:是判断程序池是存在;

3:删除应用程序池

4:创建应用程序池 (对程序池的设置主要是针对IIS7;IIS7应用程序池托管模式主要包括集成跟经典模式,并进行NET版本的设置)

运用C#代码来对IIS7程序池托管管道模式及版本进行修改; 5:针对IIS6的NET版进行设置;因为此处我是用到NET4.0所以V4.0.30319 若是NET2.0则在这进行修改 v2.0.50727

6:平常我们可能还得对IIS中的MIME类型进行增加;下面主要是我们用到两个类型分别是:xaml,xap

7:下面是做安装时一段对IIS进行操作的代码;兼容IIS6及IIS7;新建虚拟目录并对相应的属性进行设置;对IIS7还进行新建程序池的程序;并设置程序池的配置;

8:下面的代码是对文件夹权限进行设置,下面代码是创建Everyone 并给予全部权限

龙生   21 Oct 2014
View Details

CORS, IIS and WebDAV

The most common problem encountered when trying to get CORS working in IIS is WebDAV. WebDAV is installed as both a module and a handler. It wants to process OPTIONS requests but doesn’t know what to do for CORS (especially if you’re using the CORS support fromThinktecture.IdentityModel). The fix is to remove both the module and handler in web.config. The other common problem when using the CORS support from Thnktecture.IdentityModel is that the handler for .NET code (the ExtensionlessUrlHandler) by default only allows GET, POST, HEAD and DEBUG […]

龙生   21 Oct 2014
View Details

查询一个ip上有多少个网站的方法

查询一个ip地址上面绑定了多少个域名,一般是不进行二级域名的查询的。 主要用途是: 1、租用主机前的查询,比如查询oversales的情况 2、针对某些感兴趣的网站进行查询,可以方便的查询出同一人的多个网站来 3、满足八卦心理 4、其它 目前可提供服务的包括: 1、myipneighbors,有认证码,无其它查询限制; 2、iwebtool,没注册的情况下,1小时可以查询5次; 3、whosonmyserver,无限制;使用的是discountedscripts的代码,也可以使用discountedscripts demos查询; 4、http://www.domaintools.com/reverse-ip/,有限制查询,可以给出数量和前三个域名; 5、ip-domain,连界面都是1是一致的,估计是用的同一程序或者是clone的; 6、webhosting info, 7、yougetsignal, 查询质量分析: 这些脚本都无法保证查询结果的完整性,即会有部分结果被遗漏。以本blog域名为例,以上查询的数字为: No. name numbers 1 myipneighbors 14 2 iwebtool 1 3 whosonmyserver 14 4 domaintools 22 5 ip-domain 14 6 webhosting 33 7 yougetsignal 14 此外,针对国内虚拟主机的查询,因国内IP数量有限,相对有效;针对国外虚拟主机,因技术、ip丰富等原因,查询的有效性相对不高,仅供参考。 from:http://www.cnblogs.com/top5/archive/2011/08/01/2124242.html

龙生   30 Sep 2014
View Details

最最常用的 100 个 Java 类

大部分的 Java 软件开发都会使用到各种不同的库。近日我们从一万个开源的 Java 项目中进行分析,从中提取出最常用的 Java 类,这些类有来自于 Java 的标准库,也有第三方库。每个类在同一个项目中只计数一次,下面的列表中显示前 100 名的类。 以下列表中按使用最多的类进行排序,第三个数值表示 10000 个项目里使用到该类的项目数,而完整的列表请看 here. java.util.ArrayList (6958) java.io.IOException (6866) java.util.List (6784) java.util.HashMap (5590) java.util.Map (5413) java.io.File (5097) java.io.InputStream (4234) java.util.Set (3915) java.util.Arrays (3884) java.util.Iterator (3856) java.util.Collections (3643) java.util.Date (3461) java.util.HashSet (3278) java.io.BufferedReader (3257) java.util.Collection (3192) java.net.URL (3168) java.io.FileInputStream (3044) java.io.InputStreamReader (3023) org.junit.Test (3008) java.io.FileOutputStream (2843) java.io.FileNotFoundException (2669) java.io.OutputStream (2563) java.util.regex.Pattern (2469) java.io.Serializable (2437) java.util.LinkedList (2372) java.text.SimpleDateFormat (2245) java.util.Properties (2190) java.util.Random (2171) java.lang.reflect.Method (2141) java.io.ByteArrayOutputStream (2112) java.util.regex.Matcher (2012) android.os.Bundle (2007) java.util.logging.Logger (1999) java.io.UnsupportedEncodingException (1968) org.junit.Before (1920) java.util.Comparator (1896) java.io.ByteArrayInputStream (1868) java.io.PrintWriter (1862) java.util.Calendar (1854) android.app.Activity (1843) java.net.MalformedURLException (1828) android.content.Context (1780) android.view.View (1731) java.util.Locale (1719) java.util.Enumeration (1709) java.util.Map.Entry (1705) java.io.FileWriter (1677) java.io.FileReader (1651) android.util.Log (1614) android.content.Intent (1601) java.lang.reflect.InvocationTargetException (1594) java.util.logging.Level (1557) java.lang.reflect.Field (1499) java.io.StringWriter (1499) android.widget.TextView (1442) java.util.LinkedHashMap (1409) java.io.Reader (1390) java.net.URI (1377) java.io.Writer (1339) java.text.ParseException (1318) junit.framework.TestCase (1318) java.io.OutputStreamWriter (1295) java.io.StringReader (1279) java.io.BufferedWriter (1265) java.util.Vector (1254) java.util.StringTokenizer (1251) java.text.DateFormat (1246) java.util.concurrent.TimeUnit (1237) java.io.BufferedInputStream (1235) java.util.TreeMap (1227) org.xml.sax.SAXException (1218) javax.servlet.http.HttpServletRequest (1175) java.io.PrintStream (1168) […]

龙生   30 Sep 2014
View Details

谈谈Visual Studio的缺点,比较Eclipse

 3. 跟踪活动项不方便 Visual Studio有这样一个功能叫做Tracking Active Item,有时候我需要它,有时候又希望关闭它。Visual Studio把它放在选项里面,每次修改的时候都要重复点菜单-》选分类-》点CheckBox-》点OK这样一个重复的动作。 Eclipse把这个功能叫做Link with Editor, 放在主界面的Package Explorer的工具按钮里,打开和关闭都只需要点击一次鼠标就行了。  4. 设置代码格式不够灵活 看上去Visual Studio也提供了不少代码格式选项,可还是缺少很多高级设置,比起Eclipse只能算小巫见大巫了。比如,我很喜欢Eclipse把字段对齐这个功能,但Visual Studio压根没有这个选项。  5. 代码行定位功能不如Eclipse Eclipse编辑器右侧有个特殊区域代表了整个代码文件,断点、错误、警告、书签都会在这里标识出来,不论代码有多长,点击一下就可以定位,非常的方便。 在Visual Studio里面定位代码,要么用鼠标滚轮上下翻动直到找到内容,要么从成员列表的组合框里选择,不论哪一种,都没有Eclipse来得简洁方便。   6. 设置文件编码太过麻烦 Visual Studio既不能指定文件的默认编码,也不能批量设置文件编码,只能通过Save As对话框下面一个很小的箭头手工一个一个指定,麻烦到文件多的时候我有一种想砸了它的冲动。 Eclipse可以从文件类型、工作区、项目、单个文件四个级别设置文件编码,而且允许手工输入编码名称,这比Visual Studio从一个长长的列表里选择要快捷得多。  7. 错误信息不够人性化 Visual Studio如果编译出错,错误信息只是简单的列在输出窗口里,要你去一个一个点开来看。而Eclipse的错误信息同时会在Package Explorer里显示成Overlay Icon,从而清楚的了解到项目的哪些部分受到了错误的影响。  8. 添加新类过于简单 Visual Studio在创建新文件时唯一允许你指定的选项是文件名,剩下的只能手工修改。Eclipse在创建新类时提供诸多选项,比如要求实现某个接口,那么所有接口方法的存根也会一并生成,节约了很多时间。 9. 同一文件的导航功能不够一致 在Visual Studio的代码文件中如何导航?使用成员下拉框。 在可视化编辑器里怎么导航?用Document Outline窗口。 在引用的程序集里又如何导航?用Object Browser窗口。 在Eclipse中,上述所有内容都可以通过Outlilne窗口完成,操作也完全一致,不像Visual Studio那样每个窗口都有不同的界面和操作方法。  10. 管理引用 我们创建项目的时候总有一些库是经常要用到的,比如数据项目引用NHibernate,Silverlight项目引用Toolkit,等等。Visual Studio引用哪些程序集只能由我们手工查找,而Eclipse提供了User Library的管理功能,能够让我们将常用的库引用一次性导进来,比Visual Studio的Add References不知方便几许。  11. 重构功能比较初级 Visual Studio支持代码重构,Eclipse也支持,但是你比较一下两者的菜单就知道,它们对重构的支持程度完全不是同一个级别的。 12. 代码提示不够清楚美观 Visual Studio的代码提示同样只有单一的文字格式,大段的文字看下来,很难抓住重点。 Eclipse的代码提示格式是富格式内容,能突出显示重点,可导航的部分会显示成超链接,同时还提供附加的功能按钮,比Visual Studio要细致体贴得多。 13. 缺少本地历史记录功能 Eclipse有一个非常强大的功能是将最近的编辑历史记录保存在本地,这样即使你没有使用版本数据库也能跟踪修订信息、比较版本、还原历史记录,对一些实验性的项目或者不需要签入的开源项目来说是非常有用的,并且你也可以用它来记忆内容,整理思路。Visual Studio则完全没有这种功能。 14. 缺少智能化的快速修复 这是我最爱的Eclipse功能!Eclipse不仅找出编译错误,还能够为许多种类型的错误提供修复选项。这个修复选项确实相当的智能,对很多常见的编译错误都能找到合理的解决方案,比如下面的错误它就能猜到getMessge()实际上是getMessage()拼错了,我只需要在这一项上按回车就万事OK。 Visual Studio的只能机械的显示一些错误信息。有时候错误提示也会附带一些关于如何修正错误的提示,但大多比较死板,需要程序员靠自己的经验来修复错误。   15. 最后一个不得不说的地方是,Eclipse是完全免安装的。   这意味着什么呢?如果我哪天重新安装了系统,那么打开Eclipse马上可以再次使用,以前设置的所有选项和更新内容全部立即可用。而Visual Studio就不得不重新安装、打补丁、设置各种选项,如果运气不好安装过程中突然出了什么错,那你所有过程重来一遍吧,一整天就这样没了。更让人讨厌的是,VS2010安装过程中竟然要重启两次,就算你非重启不可的话,难道不能把所有内容准备好然后一次性解决吗!? from:http://www.cnblogs.com/younggun/archive/2010/11/05/1870026.html

龙生   24 Sep 2014
View Details

Eclipse快捷键 10个最有用的快捷键

Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合。通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升。    1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了。这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个字母,比如applic*.xml。美中不足的是这组快捷键并非在所有视图下都能用。 2. ctrl+o:快速outline 如果想要查看当前类的方法或某个特定方法,但又不想把代码拉上拉下,也不想使用查找功能的话,就用ctrl+o吧。它可以列出当前类中的所有方法及属性,你只需输入你想要查询的方法名,点击enter就能够直接跳转至你想去的位置。 3. ctrl+e:快速转换编辑器 这组快捷键将帮助你在打开的编辑器之间浏览。使用ctrl+page down或ctrl+page up可以浏览前后的选项卡,但是在很多文件打开的状态下,ctrl+e会更加有效率。 4. ctrl+2,L:为本地变量赋值 开发过程中,我常常先编写方法,如Calendar.getInstance(),然后通过ctrl+2快捷键将方法的计算结果赋值于一个本地变量之上。 这样我节省了输入类名,变量名以及导入声明的时间。Ctrl+F的效果类似,不过效果是把方法的计算结果赋值于类中的域。     5. alt+shift+r:重命名 重命名属性及方法在几年前还是个很麻烦的事,需要大量使用搜索及替换,以至于代码变得零零散散的。今天的Java IDE提供源码处理功能,Eclipse也是一样。现在,变量和方法的重命名变得十分简单,你会习惯于在每次出现更好替代名称的时候都做一次重命名。要使 用这个功能,将鼠标移动至属性名或方法名上,按下alt+shift+r,输入新名称并点击回车。就此完成。如果你重命名的是类中的一个属性,你可以点击alt+shift+r两次,这会呼叫出源码处理对话框,可以实现get及set方法的自动重命名。     6. alt+shift+l以及alt+shift+m:提取本地变量及方法 源码处理还包括从大块的代码中提取变量和方法的功能。比如,要从一个string创建一个常量,那么就选定文本并按下alt+shift+l即可。如果同 一个string在同一类中的别处出现,它会被自动替换。方法提取也是个非常方便的功能。将大方法分解成较小的、充分定义的方法会极大的减少复杂度,并提 升代码的可测试性。     7. shift+enter及ctrl+shift+enter Shift+enter在当前行之下创建一个空白行,与光标是否在行末无关。Ctrl+shift+enter则在当前行之前插入空白行。     8. Alt+方向键 这也是个节省时间的法宝。这个组合将当前行的内容往上或下移动。在try/catch部分,这个快捷方式尤其好使。     9. ctrl+m 大显示屏幕能够提高工作效率是大家都知道的。Ctrl+m是编辑器窗口最大化的快捷键。     10. ctrl+.及ctrl+1:下一个错误及快速修改 ctrl+.将光标移动至当前文件中的下一个报错处或警告处。这组快捷键我一般与ctrl+1一并使用,即修改建议的快捷键。新版Eclipse的修改建 议做的很不错,可以帮你解决很多问题,如方法中的缺失参数,throw/catch exception,未执行的方法等等。 更多快捷键组合可在Eclipse按下ctrl+shift+L查看。 让我们按照使用频率来看看我最爱用的一些热键组合。(注:以下内容在Eclipse3.02及一上版本通过测试) 1. Control-Shift-T: 打开类型(Open type)。如果你不是有意磨洋工,还是忘记通过源码树(source tree)打开的方式吧。用eclipse很容易打开接口的实现类的,按ctrl+t会列出接口的实现类列表 2. Control-Shift-R: 打开资源(不只是用来寻找Java文件)。小提示:利用Navigator视图的黄色双向箭头按钮让你的编辑窗口和导航器相关联。这会让你打开的文件对应显示在导航器的层级结构中,这样便于组织信息。如果这影响了速度,就关掉它。 3. F3: 打开申明(Open declaration)。或者,利用Declaration Tab(在Java视图模式下,选择Windows --> Show View — > Declaration)。当你选中代码中的一个方法,然后按这个按键,它会把整个方法在申明方框里显示出来。 4. Alt-left arrow: 在导航历史记录(Navigation History)中后退。就像Web浏览器的后退按钮一样,在利用F3跳转之后,特别有用。(用来返回原先编译的地方) 5. Alt-right arrow: 导航历史记录中向前。 6. Control-Q: 回到最后一次编辑的地方。这个快捷键也是当你在代码中跳转后用的。特别是当你钻的过深,忘记你最初在做什么的时候。 7. Control-Shift-G: 在workspace中搜索引用(reference)。这 是重构的前提。对于方法,这个热键的作用和F3恰好相反。它使你在方法的栈中,向上找出一个方法的所有调用者。一个与此相关的功能是开启“标记”功能 (occurrence marking) 。选择Windows->Preferences->Java-> Editor-> […]

龙生   24 Sep 2014
View Details

Sql2008 全文索引 简明教程

在SQL Server 中提供了一种名为全文索引的技术,可以大大提高从长字符串里搜索数 据的速度,不用在用LIKE这样低效率的模糊查询了。 下面简明的介绍如何使用Sql2008 全文索引 一、检查服务里面带有Full-text字样的服务是否存在并开启 如果不存在带有Full-text字样的服务的,确认是否安装了sqlserverFullTextSearch 二、新建全文目录 全文目录是用来存储全文索引的 三、为表定义全文索引 四、点击下一步,按提示选择 1.确认下一步 2.选择唯一索引,通常是主键 3.选择要建立的全文索引列,对于断字符的选择如果列存的是中文就选择chinese,如果是英文就选择English 4.选择索引更新方式,可以先自动更新,以后数据量大了可以设置添加全文索引的计划 5.选择全文目录 五、全文索引的SQL查询关键字 建立好全文索引后就可以使用SQL语句来查询了,主要用带三个关键字 CONTAINS、FREETEXT、CONTAINSTABLE和FREETEXTTABLE 1. CONTAINS 搜索单个词和短语的精确或模糊的匹配项,要搜索的内容必须是个有意义的词语,比如说“苹果”、“建设厅”,不能是一些没意义的词语,比如“阿迪撒啊是”,“儿儿的”这样的词语即使 LIKE是能查询出来,但全文索引对这样没意义的词语可能没有建立索引,查不出来 [sql] view plaincopy SELECT * FROM dbo.Business WHERE CONTAINS(Address,'旅游') 实现功能:查询Business表中Address列包含“旅游”的行 详细查看:http://msdn.microsoft.com/zh-cn/library/ms187787.aspx 2. FREETEXT 和CONTAINS类似,不同的是它会先把要查询的词语先进性分词然后在查询匹配项 [sql] view plaincopy 01.select * 02.from dbo.Business 03.where freetext(Address,'带婴儿旅游') 详细查看:http://msdn.microsoft.com/zh-cn/library/ms176078.aspx 3.CONTAINSTABLE 在查询方式上与 CONTAINS 几乎一样。但CONTAINSTABLE 返回的是符合查询条件的表,在 SQL 语句中我们可以把它当作一个普通的表来使用,并且使用 CONTAINSTABLE 的查询对每一行返回一个相关性排名值 (RANK) 和全文键 (KEY)。 [sql] view plaincopy SELECT  * FROM    Business AS FT_TBL         INNER JOIN CONTAINSTABLE(Business, *, 'ISABOUT (婴儿 WEIGHT (.8),赤水 WEIGHT (.4) )')         AS KEY_TBL ON FT_TBL.BusinessId = KEY_TBL.[KEY] ORDER BY KEY_TBL.RANK DESC ISABOUT 是这种查询的关键字,weight 指定了一个介于 0~1之间的数,类似系数。表示不同条件有不同的侧重。 CONTAINSTABLE 返回的表包含有特殊的两列:KEY,RANK。 被全文索引的表必须有唯一索引。这个唯一的索引列在返回的表中就成为 KEY。我们通常把它作为表连接的条件。 在某些网站搜索时,结果中会出现表示匹配程度的数字,RANK 与此类似。它的值在0~1000之间,标识每一行与查询条件的匹配程度,程度越高,RANK 的值大,通常情况下,按照 RANK 的降序排列。  详细查看:http://msdn.microsoft.com/zh-cn/library/ms189760.aspx 4. FREETEXTTABLE 在查询方式上与 FREETEXT 几乎一样。但 FREETEXTTABLE 返回的是符合查询条件的表,在 SQL 语句中我们可以把它当作一个普通的表来使用,并且使用  FREETEXT  的查询对每一行返回一个相关性排名值 (RANK) 和全文键 (KEY)。 [sql] view plaincopy SELECT  * ,         BusinessID ,         Address FROM    Business AS FT_TBL […]

龙生   22 Sep 2014
View Details
1 217 218 219 280