常用经典算法之分治法 基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。... 2016年05月08日 算法 暂无评论 喜欢 0 阅读 882 views 次 阅读全文
操作系统之哲学原理-操作系统历史 操作系统进化的推动因素 硬件成本不断下降 计算机的功能和复杂性不断变化 XP系统代码达到4000w行。 第一阶段:状态机操作系统 时间:1940年以前 所谓状态机操作系统实际上算不上我们现在通常所定义的操作系统,而是一种简单的状态转换程序:根据特定输入和现在的特定状态进行状态转换而已。 驱动力:个人英雄主义 第二阶段:单一操作员单一控制端操作系统 时间:20世纪40年代 第一台电子计算机:ENIAC 原... 2016年05月10日 读书笔记 暂无评论 喜欢 0 阅读 729 views 次 阅读全文
大话Future模式 说在前面的话 什么是Future 模式呢?对于多线程,如果线程A要等待线程B的结果,那么线程A没必要等待B,直到B有结果,可以先拿到一个未来的Future,等B有结果是再取真实的结果。其实这个模式用的很多,比如浏览器下载图片的时候,刚开始是不是通过模糊的图片来代替最后的图片,等下载图片的线程下载完图片后在替换。 思想 实例 Main:系统启动,调用Client发出请求 package com.ifcoding.future; pub... 2016年05月17日 Java 暂无评论 喜欢 0 阅读 1,428 views 次 阅读全文
基于Java的BFS和DFS的简单实现 说在前面的话 读研期间研究的方向为社区发现,现阶段社区发现都是基于图来进行划分。所以讲复杂网络学习中的一些知识点进行笔记记录。同时,图在算法世界中的重要地位是不言而喻的,面试官问的问题中有很多的问题都可以用图的方法去解决。由此也可以看出图确实适用范围确实很广。 图的表示 邻接矩阵 ,对于N个点的图,需要N×N的矩阵表示点与点之间是否有边的存在。这种表示法的缺点是浪费空间,尤其是对于... 2016年05月05日 复杂网络, 数据结构 暂无评论 喜欢 0 阅读 1,679 views 次 阅读全文
图解字符串匹配之Horspool算法和Boyer-Moore算法 说在前面的话 字符串匹配问题要求在一个较长的称为文本的n个字符的串中,寻找一个称为模式的给定的m个字符的串。 Horspool算法是Boyer-Moore算法的一个简化版本,都是从右到左进行比较。 Horspool算法 horspool算法将主串中匹配窗口的最后一个字符跟模式串中的最后一个字符比较。如果相等,继续从后向前对主串和模式串进行比较,直到完全相等 或者在某个字符处不匹配为止(如下图中的α与σ失配)。如果不匹... 2016年05月18日 算法 暂无评论 喜欢 24 阅读 6,422 views 次 阅读全文
Java transient关键字使用详解 1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。 然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,打个比方,如果一个用户有一... 2016年08月14日 Java 暂无评论 喜欢 0 阅读 1,744 views 次 阅读全文
Java并发包之线程池 在之前的所有案例中,我们总是通过启动一个新的线程来执行新的任务。对于一些小的应用来说, 这是OK的,但是对于一些大型的应用来说,这是不太合适的。例如对于一个高并发的web服务器,如果每一个HTTP请求,我们都使用一个新的线程来处理, 那么内存中必然会存在大量的线程,线程的上下文切换以及线程的创建与销毁,都会消耗大量的资源。 因此我们最好将线程的管理、创建、销毁等操作与线程需要执行的任务... 2016年08月14日 Java 暂无评论 喜欢 0 阅读 1,351 views 次 阅读全文
Java并发容器之ConcurrentHashMap精讲 ConcurrentHashMap是Java5中新增加的一个线程安全的Map集合,可以用来替代HashTable。对于ConcurrentHashMap是如何提高其效率的,可能大多人只是知道它使用了多个锁代替HashTable中的单个锁,也就是锁分离技术(Lock Stripping)。实际上,ConcurrentHashMap对提高并发方面的优化,还有一些其它的技巧在里面(比如你是否知道在get操作的时候,它是否也使用了锁来保护?)。 ConcurrentMap 提供其他原子 put... 2016年08月07日 Java 暂无评论 喜欢 0 阅读 1,156 views 次 阅读全文
并发编程之可见性、有序性和原子性的理解 并发处理的广泛应用使得Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类“压榨”计算机运算能力的最有力武器。 在学习并发编程,很多概念需要理解透彻,理解清楚。 其中有三个基本的关注点: 安全性,也就是正确性,指的是程序灾并发情况下执行的结果和预期一致 活跃性,比如死锁,活锁 性能,减少上下文切换,家少内核调用,较少一致性流量等等 安全性问题是首要解决的问题,保证程... 2016年07月24日 Java 暂无评论 喜欢 1 阅读 2,446 views 次 阅读全文
class文件常量池和运行时常量池比对 在学习JVM过程中,接触到常量池这个概念,后来发现不仅仅有一个运行时常量池概念,还有一个class文件常量池概念,使得本来不懂的我更加迷惑了。要想理解,那么就得对这两者进行比较理解,加深记忆。 那么,我们先看一下JVM运行时数据区: 其中, 程序计数器(PC计数器):是JVM执行程序的流水线,存放一些跳转指令。 本地方法栈:是JVM调用操作系统方法所使用的栈。 虚拟机栈:是JVM调用Java代码所使用的... 2016年07月21日 Java 暂无评论 喜欢 6 阅读 2,572 views 次 阅读全文