2013年11月20日

java集合框架分析

摘要: 接口框架: 集合框架中包含List,Queue,Set和Map这四大块,注意:Map虽然属于集合框架,但Map接口并不从Collection接口扩展。 一个Map提供了通过Key对Map中存储的Value进行访问,也就是说它操作的都是成对的对象元素,比如put()和get()方法,而这是一个Set或List所不就具备的(它们是add()和remove())。当然在需要时,你可以由keySet()方法或values()方法从一个Map中得到键的Set集或值的Collection集。 1.Collection Collection接口提供了一组操作成批对象的方法 它提供了基本操作... 阅读全文

posted @ 2013-11-20 11:50 依蓝jslee 阅读(229) 评论(0) 推荐(0) 编辑

2013年11月19日

鸡蛋篮子与格子取数

摘要: 1.鸡蛋篮子 有N个鸡蛋和M个篮子,把鸡蛋放到M个篮子里,每个篮子都不能为空。另外,需要满足:任意一个小于N的正整数,都能由某几个篮子内蛋的数量相加的和得到。写出程序,使得输入一个(N,M),输出所有可能的分配情况。 思路: 1.规定篮子鸡蛋数量从小到大递增枚举。 basket[M]:M个篮子中的鸡蛋数量 current_sum:当前所有篮子鸡蛋的总和, basket_id:当前篮子的序号, current_num:将要放到当前篮子去的鸡蛋数量, 2.由题意:任意一个小于N的正整数,都能由某几个篮子内蛋的数量相加的和得到 对于这M个篮子中的鸡蛋数量,我们用数组basket[M... 阅读全文

posted @ 2013-11-19 17:00 依蓝jslee 阅读(397) 评论(0) 推荐(0) 编辑

贪心与回溯与DP

摘要: 一.贪心 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。 它采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪婪法不要回溯。 贪婪算法是一种改进了的分级处理方法。其核心是根据题意选取一种量度标准... 阅读全文

posted @ 2013-11-19 11:13 依蓝jslee 阅读(1715) 评论(0) 推荐(0) 编辑

NP问题

摘要: 1.复杂度与规模 时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。 多项式级的复杂度:如O(1),O(log(n)),O(n^a)等——注意它的规模n出现在底数的位置! 非多项式级的复杂度:如:O(a^n)和O(n!)等。 一个问题的规模指的是输入的总位数,比如一个n个数的排序问题,输入规模就是n。注意,在某些时候,输入规模是要值得注意的,比如判定一个数n是否是一个质数这个问题,它的输入规模并不是n,而是log(n),因为一个... 阅读全文

posted @ 2013-11-19 09:17 依蓝jslee 阅读(828) 评论(0) 推荐(0) 编辑

2013年11月16日

子集生成和全排列

摘要: 一、子集生成 给定一个集合,枚举它所有可能的子集,eg:{0,1,2} 解: {0} {1} {2} {0,1} {1,2} {0,2} {0,1,2} 子集是无序的1.增量构造法public static void subsetIncre(int n,int[] A,int cur){ for (int i = 0; i >=1; } System.out.println(); }4.集合的所有子集是2的n次方证明 一个集合中的元素个数一共有n个,这个集合称为n元集。 n 元集的子集,按子集中元素个数来分类,可以是0个元素,1个元素,2个元素……n个元... 阅读全文

posted @ 2013-11-16 09:58 依蓝jslee 阅读(734) 评论(0) 推荐(0) 编辑

2013年11月14日

JDK动态代理实现原理(转)

摘要: 转自:http://m.oschina.net/blog/149055之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白。比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的,直到前几个星期才把这些问题全部搞明白了。 废话不多说了,先来看一下JDK的动态是怎么用的。Java代码packagedynamic.proxy;importjava.lang.reflect.InvocationHandler;importjava.lang.reflect.Method;importjava.lang.reflect.Proxy;/***实现自己的In 阅读全文

posted @ 2013-11-14 19:45 依蓝jslee 阅读(197) 评论(0) 推荐(0) 编辑

java类初始化/生命周期及反射及动态代理

摘要: 在java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这个策略虽然稍微增加了一些性能开销,但会给java应用程序带来高度的灵活性,java的动态扩展特性就是依赖动态加载和动态连接来实现的。 1.加载 1.1过程: *类的加载就是把类的.class文件中的二进制数据读入到内存中。 *转换字节流的数据结构(静态-运行时),把它存放在java运行时数据区的方法区内 *在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。Class对象封装了类在方法区的数据结构。并且向java程序提供了访问类在方法区的数据结构的入口。 类加载采用了缓存机... 阅读全文

posted @ 2013-11-14 19:42 依蓝jslee 阅读(494) 评论(0) 推荐(0) 编辑

2013年11月13日

分布式理解

摘要: 1.分类 狭义的分布是指,指多台PC在地理位置上分布在不同的地方。 分布式操作系统:负责管理分布式处理系统资源和控制分布式程序运行。它和集中式操作系统的区别在于资源管理、进程通信和系统结构等方面。 分布式文件系统具有执行远程文件存取的能力,并以透明方式对分布在网络上的文件进行管理和存取。 分布式计算:利用分布式系统解决来计算问题。在分布式计算里,一个问题被细化成多个任务,每个任务可以被一个或者多个计算机来完成。 分布式程序设计语言:用于编写运行于分布式计算机系统上的分布式程序。一个分布式程序由若干个可以独立执行的程序模块组成,它们分布于一个分布式处理系统的多台计算机上被同时执行。... 阅读全文

posted @ 2013-11-13 21:25 依蓝jslee 阅读(790) 评论(0) 推荐(0) 编辑

Spring IOC与AOP

摘要: 1.IOC原理 IOC(Inversion of Control)控制反转。 伴随着工业级应用的规模越来越庞大,对象之间的依赖关系也越来越复杂,经常会出现对象之间的多重依赖性关系,因此,架构师和设计师对于系统的分析和设计,将面临更大的挑战。对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。 IOC即借助于“第三方”(IOC容器)实现具有依赖关系的对象之间的解耦。 IOC模式,系统中通过引入实现了IOC模式的IOC容器,即可由IOC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分开。其中一个特点就是通过文本的配置文件进行应用程序组件间... 阅读全文

posted @ 2013-11-13 20:43 依蓝jslee 阅读(298) 评论(0) 推荐(0) 编辑

java内存模型

摘要: 1.总体概述(多线程) jvm系统中存在一个主内存(Main Memory或Java Heap Memory),Java中所有变量都储存在主存中(不包括局部变量和方法参数,因为它们是完全私有的),对于所有线程都是共享的。 每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。 volatile变量依然有工作内存的拷贝,但是由于它特殊的操作顺序规定,每次使用之前都要先刷新,它还能禁止指令重排序优化,所以它看起来如同直接在主内存中读写访问一般。顺便... 阅读全文

posted @ 2013-11-13 15:51 依蓝jslee 阅读(176) 评论(0) 推荐(0) 编辑

导航