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

Category Archives: Backend

IP地址与数字地址相互转换

站长网IP查询地址:http://tool.chinaz.com/ip/ 可以看到,IP查询工具是先将IP段地址转化成数字地址,再才得到IP的物理地址。 ————————————————————————————————————————————- 为什么要将IP段地址转化成数字地址? 根据TCP/IP协议规定,IP地址是由32位二进制数组成,而且在INTERNET范围内是唯一的。例如,某台联在因特网上的计算机的IP地址为: 11010010 01001001 10001100 00000010 很明显,这些数字对于人来说不太好记忆。人们为了方便记忆,就将组成计算机的IP地址的32位二进制分成四段,每段8位,中间用小数点隔开,然后将每八位二进制转换成十进制数,这样上述计算机的IP地址就变成了:118.123.15.102。 由于在同一个区域里,IP段都是很相近的,如果拿IP段(118.123.15.102)直接进行比较,在操作上很是麻烦,而且数据的存储也不易实现,所以才会把IP转换成数字地址,再来确定IP段的物理地址。 ————————————————————————————————————————————- 理解了IP的概念之后,诸如IP(118.123.15.102)怎样转换成数字地址呢? IP本是32为二进制,为了方便记忆才转化成了四段十进制,所以只要把IP还原成二进制,再转换成十进制就可以得到IP的数字地址。 .NET C# IP与数字地址相互转化: //IP转换成数字地址 public static uint IPToInt(string ipAddress) { string disjunctiveStr = ".,: "; char[] delimiter = disjunctiveStr.ToCharArray(); string[] startIP = null; for (int i = 1; i <= 5; i++) { startIP = ipAddress.Split(delimiter, i); } string a1 = startIP[0].ToString(); string a2 = startIP[1].ToString(); string a3 = startIP[2].ToString(); string a4 = startIP[3].ToString(); uint U1 = uint.Parse(a1); uint U2 = uint.Parse(a2); uint U3 = uint.Parse(a3); uint U4 = uint.Parse(a4); uint U = U1 […]

龙生   30 Oct 2014
View Details

动画讲解Eclipse常用快捷键

Eclipse有强大的编辑功能, 工欲善其事,必先利其器, 掌握Eclipse快捷键,可以大大提高工作效率。小坦克我花了一整天时间, 精选了一些常用的快捷键操作,并且精心录制了动画, 让你一看就会。 注释 Ctrl+/ 能为光标”所在行”或者”选中行”添加注释或者取消注释。 也可以对多行添加或取消注释 快速修复 Ctrl + 1 删除当前行 Ctrl+d 光标位于行的任何地方, 按Ctrl+D 删除当前行, 当然也可以删除空行, 不用为了删除行,而按很多删除键了 格式化整个文档 Ctrl+Shift+f 插入空行 Shift + Enter Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后) Shift + Ctrl + Enter 在当前行的上一行插入空行 编辑窗口最大化 Ctrl + m 大屏幕可以提高工作效率, Ctrl + m 可以将编辑窗口最大化 显示大纲 Ctrl + O 显示类中方法和属性的大纲,能快速定位类的方法和属性 查找Java类文件 Ctrl + Shift + T 查找工作空间(Workspace)构建路径中的可找到Java类文件,不要为找不到类而痛苦,而且可以使用“*”、“?”等通配符。 查找引用 Ctrl+Shift+G 查找类、方法和属性的引用。这是一个非常实用的快捷键,例如要修改引用某个方法的代码,可以通过【Ctrl+Shift+G】快捷键迅速定位所有引用此方法的位置。 后退历史记录 Alt+ ←、Alt+ → 后退历史记录和前进历史记录,在跟踪代码时非常有用,用户可能查找了几个有关联的地方,但可能记不清楚了,可以通过这两个快捷键定位查找的顺序。 快速查找选定的内容 Ctrl+K Ctrl + K 快速向下查找选定的内容,从此不再需要用鼠标单击查找对话框了。 Ctrl + Shift + K 快速向上查找选定的内容 重命名 Alt+Shift+R from:http://www.techug.com/eclipse-shortcut-keys

龙生   28 Oct 2014
View Details

程序员写代码时应该反复问自己的10个问题

你想成为一名优秀的程序员吗? 那么,现在是时候放下《24小时学会xxx语言v8.3》超级骗子书,相反,你应当养成每天反问自己以下10个问题的习惯。 你的代码中是否有一种模式存在? 找寻模式中的可行与不可行将发现其中看似无关的想法或基本原则。要对工作达到深入的理解,你必须养成反问自己“是否有一种模式存在?”的习惯。 它不仅仅适用于你的代码。是否有适应各类型商业变化的模式吗?是否有一种适用于技术发展的模式?你有没有看到同类型的错误如雨后春笋般冒出来? 所谓理解就是要理解模式 — 以赛亚·伯林 怎么让代码变得更简单? 开发者经常想得到复杂的和可扩展的解决方案。做一些极为复杂的东西,觉得自己就是自己宇宙的主宰。问题是将来你永远无法预知产品和业务会如何改变。 “架构”和代码更像是园艺而不是建筑。你必须要有能力去适应不断变化的环境。越复杂的解决方案越难做。 简洁是终极的复杂 —  列昂纳多·达·芬奇 你知道程序为什么要这样运行吗? 知道东西像那样运作和知道为什么会像那样运作是两个完全不同的事。如果你知道事情为什么会那样,那么你就能够做出更好的决策。 一个伟大的程序员和知道有某种编程语言的人来说,差别在于理解为什么的深度。 同样的原理也适用于问题修正。“重启一下服务。” “你试过重启吗?” 当有问题发生时,我们经常会想到这些话。每次你这样说时,你就失去了一个学习的黄金机会。 理解为什么出现这样的错误,将修正根本原因,避免出现治标不治本。最起码,你以后不要再犯同样的错误。 之前有没有人写过这样的代码? 无论何时,你发现自己发明了一个复杂的算法,你很可能走在了错误的轨道上。除非你搜索到一份别人正好解决了这个问题博士论文。 需要编写一个向用户鼠标旁的item添加标签的算法?看看Voronoi Tesselations. 想要找到卡车送货的最短路径?看看Dijkstra. 想要找到用户输入内容的最接近的标记?应该是找到它的Levenschtein distance. 这只是几个简单示例,相信我,它们无处不在。 我能够看得更远,那是因为我站在巨人的肩上 — 艾萨克·牛顿 你知道这种技术的出处吗? 你认为你知道REST吗? 你有读过Roy Fielding描述REST的论文原文吗?你真的明白它的最初用意吗?那种在IDE v7工具中比你多用REST API生成向导5分钟的家伙写出来的博客可不算数的。 帮自己一个忙,试图去读概念或原理的原始文档,然后通过各种手段去了解行业领袖的最新发展动态。如果你不知道他们是从哪些开始的,那就紧跟他们的步伐吧?(不知道他们从哪来,就跟着他们到哪去吧!) 我喜欢现在所做的吗? 请面对编程其实是很难的。 除了很难以外,编程还是发展很快的。Art框架从2年前的“笨重恐龙”已经发展到今天的标准。为了站到你“游戏”的顶端,你必须树立一个终生学习和研究的信念。 如果你不喜欢你所做的,那么你就没有跟上其他家伙(喜欢自己所做的)的可能。所以找到让你激情燃烧的编程类型!不要因为市场缺口或者收入不菲而决定成为一名安全专家,不要因为一篇文章说UX是最热门的职业而决定成为一名UX专家。 再说一次,做你喜欢的。 做你喜欢的,所需的资源将随之而来的 — 彼得·麦克威廉斯 这些代码还可以用在其它地方吗? 我看到程序员最大的一个限制就是,自己失败的想象力。 如果我们学习到一个适应于特定环境的东西,或者看到解决某个特定问题的技术时,我们认为这就它唯一适用的地方。这是完全错误的。每当学到新东西时,反问自己:“其他地方还可以使用吗?” 当发现了在图表上定位节点的新的伟大的方法时,是不是可以将它应用于二维数据集中感兴趣数据的定位呢?当发现通过websockets从客户端发送数据到服务器端的新方法时,它怎么才能应用到可扩展的后台服务上呢?有时是错误的,但有时也是正确的。 这给我们带来了下一个问题…… 逻辑只能带你从A到Z,想像力去可以带你到任何地方 — 阿尔伯特·爱因斯坦 今天有什么做错的吗? 增加创收的最简单方法是降低错误的损失。 游戏开发公司Valve和其他几个公司很认为这个观点。这同样适用你成为web开发者的进步过程。如果你害怕失败,你就不会有大的突破。 勇敢、尝试、失败、学习然后再来。 不要害怕错误,它能让你认识失败,然后重新来过。— 本杰明·富兰克林 难道真的没有办法吗? 我们生活在世界上很小的一个地方是不可能的(除了少数例外)。 假设不管你做的什么事情都是可行的,然后采用向后的方向回推回去。你可能会发现,你想做的暂时是不切实际的,但它足以改变世界,可能变成现实的速度比你想像的还要快。 似乎一切看起来都是不可能,除非你完成它 — 纳尔逊曼德拉 我可以向谁学习? 永远不要在一群你在其中是最聪明的人的地方工作。 挑选拥有可以启发你、激励你做得更多的同事的工作和公司。不要与编程扯上关系,在文本编辑器和命令行外面还有一个完整的世界存在。从其他领域学习,设法应用到你的工作中。 永远不要满足于能胜任现有的工作! from:http://www.techug.com/10-questions-developers-should-be-asking-themselves

龙生   28 Oct 2014
View Details

10个帮程序员减压放松的网站!

同学们工作之余,不妨放下微博跟朋友圈,来这10个网站感受一下看着就醉了的情境:「念完往上一推音乐键,我往后一靠,潮乎乎的软皮耳机里头,音乐排山倒海。」今天推荐的网站,利用代入感强的图片与音频,迅速帮你抹平焦虑,获得平和心态,特别献给改稿千遍的设计师们。 1.  Calm 这是同类型中最火的网站了,站如其名,「平和」,通过自然的图像(阳光下的暖流、淙淙的小溪等)与缓缓的音乐,帮你在短时间内放松下来。 左侧有时间设定,从 2 分钟到 20 分钟,右底部可以改变音频、图像,调节音量等。还有 IOS 客户端下载呦。 2.  Do Nothing For 2 Minutes 「木头人,两分钟」,这是一个简单到极致的网站,当你打开的时候,自动开始计时,这时间你不能触碰键盘和鼠标,否则 2 分钟会重置。 你需要做的,就是放下手头的工作,静静地享受潮声,这也很棒,不是吗?两分钟足够你冷静下来,休息一下了。 3.  Get Relaxed 如果两分钟不足以让你彻底放松,试试这个。如下图,打开网站后,头枕着双手往后仰,欣赏自然风光,聆听网站为你精心挑选的音乐。 图像 3 秒一换,有 15 种,每种持续大概 2 – 4 分钟,现在,开始吧! 提醒:网站有简陋广告,稍微影响体验。 4.  LoungeV Studio 前三个都是图像,现在来个新鲜的。这个网站提供高清的自然风光视频 + 音乐。有沙滩、瀑布、水下景色等等,网站背景是一个温馨的客厅,右侧有视频可选,对喜欢看视频的同学来说,还是蛮不错的。 5.  A Soft Murmur 这个网站太棒了!小编玩了好久都舍不得停下来。网站让你自由创造美妙的声音。你可以通过混合不同的声音(雨声、火柴燃烧的声音、打雷声、海潮声…..不一而足。但是,总有一款令你爱不释手!)当然,声音的大小也可以自己调节。 如果你对混合的声音非常满意,也可以分享到脸书、谷歌等…. 6.  Nature Sounds For Me 这个比上面那个界面稍逊,但是玩起来更嗨!它提供的声音除了以上的自然类声音,还有很多你想不到的:绵羊咩咩、骏马跺脚喷气、不同的鸟叫声,甚至是心脏跳动、厨房叮当的声音,不仅令人身临其境,而且搭配起来简直不能更欢乐! 当然,它还有 IOS 客户端。 7.  Noisli 这个网站根据你的情绪变化,选择不同的音乐和背景颜色。颜色大多朴素平和,背景声音也有对应的图标可以选择。还有一点贴心的设计是,网站右侧有便签本,你可以一边享受静谧时光一边随手记点事。 为了造福大众,网站还提供 IOS 版。 8.  Soundrown 网站一进去,有 3 个关键词:放松、专注、逃离。的确,它成功做到了这一点。它有 10 种不同的声音帮助你放松心情,也可以混合使用。不同的声音对应不同的背景,网站非常有设计感,相信你会重新回来体验一次。 9.  The Thoughts Room 一句话简洁:世界的秘密——树洞类网站。你可以在这里向全世界倾诉你的任何想法,网站支持 37 种语言,不过看了一下,没有中国… 10.  Raining.Fm 有时候,我们需要的仅仅是一点点雨声来帮助我们平静。网站专门提供雨声,因为单一,所以也更加专业。网站有 3 种不同的雨声类型,右侧有定时器可以在你放松时提醒你,简单也好用的一个网站,赞一个。 from:http://www.techug.com/website-make-you-relax

龙生   28 Oct 2014
View Details

要想提高工作效率,请拒绝做这7种事

忙未必就说明你有生产力。要想有生产力,更多的是要管理好你的精力而不是时间。要经营好你的生活。我们需要学会花费最小的精力得到最大的收益。不干以下 7 件事,我把每周的工作时间从 80 小时缩短到了 40 小时,但是完成的工作却多了很多。 1、不加班效率高 每周 5 天,每天 8 小时的工作制是福特在 1926 年的发现。实验表明,把每天工作时间从 10 小时降至 8 小时,每周工作时间从 6 天降至 5 天后,生产力反而提升了。 1980 年由商业圆桌会议发布的《建筑项目的加班效应》指出,无论从短期还是长期来看,工作越多,效率和生产力都会下降: 若每周工作时间超过 60 小时的情况持续超过两个月,生产力下降的累积效应将导致完工日期推迟,而同样的人数每周只工作 40 小时甚至还会更早完工。 美国军方研究表明,“每天少睡 1 小时持续一周会导致相当于 0.1 血醇水平的认知退化”。 《睡眠的秘密世界》指出: 熬夜之后无论白天你干得有多好,情绪不会太高。更重要的是前瞻性思考和行动的意愿、对冲动的抑制、乐观程度、同理心、情商等也会下降。 所以保证充足的睡眠对于维持高水平的生产力十分重要。 很多名人的经验是白天多小睡。达芬奇、拿破仑、爱迪生、罗斯福夫人、吉恩•奥特里、肯尼迪、洛克菲勒、丘吉尔、林顿•约翰逊、里根等都有小睡的习惯。 2、不要老说“好的” 根据 20/80 原理(帕累托原理),20% 的努力创造出 80% 的结果;但反过来 20% 的结果消耗了 80% 的努力。因此我们应该把精力集中在能产出 80% 结果的事情上,然后放弃其他的事情。如此就能把更多的时间集中在最重要的任务上。我们应该对低产出甚至无结果的任务停止说“yes”。 成功人士和非常成功人士的区别在于后者几乎对所有事情说“不” ——巴菲特 这就引出一个问题:我们该对哪些事情说“yes”,对哪些事情说“no”呢?如果想不出哪些事情值得花时间,不妨来个简单的分离测试。跟踪自己所做的一切事情然后尽可能优化。 我们中的大多数往往都说了太多的“yes”,因为这比拒绝要容易得多。没人想当坏人。 2012 年的消费者杂志发表了一项研究,研究人员把 120 人分成了 2 组。一组人训练成说“我不能(I can’t)”,另一组则说“我不(I don’t)”。结果很有趣: 告诉自己“我不能吃 X”的学生在 61% 的时间内选择了吃巧克力糖,而告诉自己“我不吃 X”的只在 36% 的时间里抵挡不住诱惑。在说法上作这么简单的一个变化就能显著改善健康食品的选择。 所以,下次需要避免说 yes 的时候,直接说“我不”。 另一个避免不必要活动的技巧是 20 秒规则:对于不应该做的事情多给自己 20 秒的时间考虑。 3、不要事必躬亲 我曾经管理过一个非常大的社区,试图一个人做完所有事情,最后发现我干不了。我筋疲力尽,最后社区接管了自我管理的工作。令人惊奇的是大家做得比我还好。我因而领悟到了社区的力量。 我们必须意识到,在需要的时候可以去寻求帮助,这一点很重要。让做得更好的人接管你的一些工作对你来说更好。这可以让你花更多的时间在自己最重要的任务上。不要把时间浪费在自己解决问题上,让专家帮助你。 很多时候,哪怕朋友不能帮你,他们的陪伴也能让你更有生产力。 4、不要完美主义 达尔豪斯大学的心理学教授 Simon Sherry 的完美主义与生产力研究发现,完美主义是生产力的绊脚石: […]

龙生   28 Oct 2014
View Details

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

算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 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
1 218 219 220 282