| 启转's profile启转的共享空间PhotosBlogLists | Help |
|
August 10 参加Oracle Open World心得7月30日到8月2日 本人参加了在上海国际会议中心举行的2007 Oracle OpenWorld 会议! 参加了其中的4场主题演讲, 和好多感兴趣的专题演讲!
Oracle 在这次大会上全面介绍的她的三大块产品, 即是 Oracle 数据库, Oracle 中间件(Middleware)
和Oracle 应用程序(Application) . 由于本人对数据库关注比较多, 所以下面就介绍本次会议对Oracle 11g
的心得!
现在的Oracle数据库,在数据库的基本理论上, 相应的功能增加,已经基本看不到了! Oracle 11g的功能增
加单纯就是应对Oracle实贱应用提出的挑战. 这些挑战显然有以下几个方面:
下面具体讲一下Oracle11g对这些挑战给出的新功能
现在随着信息系统的不段运行, 一个数据库以每年三倍的量在增加, 这对数据库在,管理和成本上提出了 很大的挑战. Oracle11g提出了信息生命周期管理的概念(Information Lifecycle management(ILM)), 她把数据分为三类和 它门占总体数据的比例如下
利用Oracle的分区技术, 把这些数据放在不同性能的磁盘上, 而不是象原来的一样把所有数据都放在高性能的磁盘上, 这样的 ILM显然可以大大降低存储的成本(大约可降低70%). Oracle 11g还提供了压缩功能, 也可降低存储成本.
软件有以下一个特点:
这些, 对拥护利用这写改变出很到挑战, 主要是改变的时间成本和改变的安全性提出很大挑战. Oracle提出了改变生命周期管理的概念(Change lifecycle management). 为此有
通过捕获(capture)实际数据库系统操作的,在测试系统中重演(replay)这个过程的, 对测试系统进行测试 微调的功能! 大大改进了传统数据库的测试效率 2. 在线更新和补丁(Online Upgrade and patch) 这个显然是提高改变的可用性. 3. 继续增强Oracle的自管理功能
以前, 对Oracle的Log, 和Standby 数据库, 只有在数据备份回复, 和数据库崩溃的时候有用. 显然这样的情况是少数 造成资源的浪费. Oracle 11g提出了高可用性体系构架, 把log, 产品数据库和备用数据库, 做为一个体系来考虑, 充分利用这些部件. 显然这 是一个开扩思路的方式. 在这思路上, Oracle 给出以下功能
提供了Select from tablename as of date, 这样的查询语句, 对以前表的内容查询. 2.Data guard 是Standby 数据库有以下功能
以上就是在Oracle Open world 对Oracle 11g的体会. 对与数据库或其它软件增加新功能, Oracle11g给出了她的一个方法 就是面对实践的压力, 提出具有指导意义的思路, 在这个思路下逐进和不断增加新功能.
July 06 设计计算机算法思路(design algorithm technique)计算机被用于解决各种各样的问题. 我们都是用程序来解决问题! 本质上说就是,设计数据结构,和相应的算法来解决问题.
那么设计算法极的技术是一个是一个更高层次思路! 有了这个思路,可一更有效的设计算法,解决问题!
目前常用的设计算法的技术有以下6大类, 我介绍我对这些算法的理解和学习心得.
就是利用计算机快速运算的特点, 遍历所有的可能情况最后得到需要的解. 它是一种朴素的直接算法(brute force),看起来显得有点笨,而且它的效率是N!, 但不要小看着种算法!
2. 贪心算法 每次选择一个局部最优策略进行实施, 最好成绩得到结果. 由于每次决策不考虑对整体的影响, 它可能得到的不是最优解. 如果能用贪心算法, 我们可以大大提高算法的效率!
有一类叫矩阵胚(matriod)的子集系统的优化问题可用贪心算法. 矩阵胚就是极大独立子集的具有相同基数的
3. 递归和分治法(divide and conquer) 如果一个问题可以转化成一个结构相同, 规模更小的问题, 就可以通过递归来解决. 递归法思路清晰, 编成简单,但有时难以想到. 最重要的是递归是一种分析方法, 可以帮助我们看清问题的本质.
1. Tree
树是一种典型的递归数据结构. 常用的树的定义都可以用递归的方法定义, 而它们的性质都可以利用递归性质的归纳法来证明.
所以树的绝大部分算法,都可以用递归方法.
2. 排序算法
象quickSort 和mergeSort都可以用递归法来设计 4. 递推 5. 动态规划法(dynamic programming) 动态规划发是解决多阶段问题决策最优化问题的一种思想方法. 它有两种动机.
利用动态规划法设计著名的算法
6.状态空间搜索发
June 27 学习的算法心得我这几年读了segewick的算法书, 尽管它的分类很清楚!
我还是要默写一下它的目录, 来促进我对它的掌握, 毕竟算法是计算机的基础!
无论怎么发展, 这个总是要的! 下面就的的介绍是表示我对学习的回顾!
我的自学,主要有以下5部分
Part 1 fundemental
通过介绍并查集(union-find set)介绍如何实现朴素算法,到给出各种优化的算法, 以及如何评价算法的基本方法.
介绍算法的两种分析方法经验分析(empirical analysis)和数学分析(mathematical anaysis),及其优缺点 Part 2 Data Structures
介绍计算机世界的三个基本数据结构(Array, LinkedList, String). 所有的数据结构可以说都是这三个数据结构的组合.
以面向对象编程的角度, 总结出一些基本抽象数据结构(Stack, FIFO), 它们都是可以用上面的基本数据结构做Field, 来实现的
递归思想是编成重要思想, 如果熟练掌握它, 可以大大提高我们的编程能力, 提高代码的效率, 使代码简洁, 可读性好. 介绍了Trees的类型和定义(Tree, rooted-tree, ordered -tree, M-ary tree, Binary tree), 上面后一类树是前类树的特例 具体分析了binary Tree, 有以下几个性质:
Part 3 Sort
In place 排序, 就是要求空间复杂度最小的拍序, 很有意思 Part 4 Search
介绍的不是search算法, 主要是介绍构建高效的查询数据结构,(考虑, insert, delete, union, search,来权衡效率)
考虑从三个思路实现平衡( randomized, optimized, amortized), 并介绍相应的BST( Splay Tree, red-black tree, 2-3-4 树)
著名的有trie
主要介绍了基本的外部搜索结构但是没有展开, 有以下两种 BTree 和External Hash Part 5 Graph
June 26 算法的性能分析最近看了一点算发分析,有写心得把它写出来
一、算法分析的种类:
它的就是写一个算法正确的完整的实现,产生输入的测试数据,然后测试实现的性能, 对算法进行评价. 根据测试数据可分下面三种:
经验分析,还是比较容易实现。缺点是,复杂的算法实现起来非常费时,对整个算法的总体性能,不能够完整的给出 2. 数学分析(mathematical analysis) 数学分析,我们得到算法最坏情况(worst case)和平均情况(average case)的时间复杂读T(n)和空间复杂度S(n). T(n), S(n)就是个涵数,给出n情况下,所需的时间和空间 显然数学分析是我们对算法运用于实际更有把握, 分析出来更具有信息性. 缺点是对复杂的算法,得到T(n)和S(n)比是一见容易的事情 二、大O表示法 定义: 对于个涵数g(n)是O(f(n)) ,如过存在c > 0 n0 > 0, 如果对于任意n > n0 有g(n) < cf(n). 称函数g(n)以f(n)为界或者称g(n)囿于f(n)。记作g(n)=O(f(n))。 我们常用大O表示法表示一个算法时间复杂性。大O表示有上界, 由定义T(n) = O(n), 显然T(n) = O(n^2). 它给了一个上界, 不是一个上确界。但是人们习惯当然用前者。 此外一个问题本身有起复杂性, 当算法的复杂性达到问题复杂性的的下界, 这个算法就是最优算法了 三、常用算法的复杂度 1. T(n) = T(n-1) + n ; T(1) = 1; T(n) = O(n(n+1)/2) 具有此特征的典型算法就是Selection Sort
2. T(n) = T(n/2) + 1 ; T(1) = 1 T(n) = O(lg(n)) 具有此特征的典型算法就是Binary Search 3. T(n) = T(n/2) + n; T(1) = 0 T(n) = O(2n) 4. T(n) = 2T(n/2) + n; T(1) = 1; T(n) = O(nlg(n)) 具有此特征的典型算法就是merge sort 5. T(n) = 2T(n/2) +1; T(1) = 1; T(n) = 0(n) 具有此特征的典型算法就是 6. Harmony 数 T(n) = 1 + 1/2 + 1/3 + ... + 1/n, 那么T(n)就叫和谐数 T(n) = ln(n) + O(1); 7. Fibonacci数 T(n) = T(n-1) + T(n -2) 8. N! 数 T(n) = n! T(n) = (n/e) ^n 四、Guarantee、Predicate、Limitation 这三个是非常有意思的概念 1.Guarantee 如果一个算法在最坏的情况下, 时间复杂度是O(f(n)), 显然对每一次运算, 我们保证(guarantee)它的时间是不O(f(n)), 所以 我们也就找到下界了 2. Limitation 在计算机理论中,对一些问题,我们可以证明它有下确界, 而当一个算法的时间复杂度和下确具有同一大O表示时, 我们认为
算法到了它的限制了(limitation).这时候找新的算法,意义不大了! June 04 提高性能的一种方法 今天看了一篇文摘, 介绍固态硬盘(Solid state driver)技术, 它依据的是闪存(Flash memory)技术.
显然比起普通机械硬盘来说, 闪寸具有, 速度快, 能耗低, 可靠性高.
但是闪存的价格是普通硬盘的5倍, 如果直接应用有成本的压力!
要解决这个问题有常用的一个思路,就是开发出一种价格便比闪存便宜的, 性能是差不多的新技术了应用!
但是新技术能不能成功, 有时间和成本的压力! 显然是一种有很大风险,我们可以换个思路.
把两个各自的有点结合起来!
采用混和记忆的方式,可以很快的解决这些问题! 它采用闪存和传统磁盘结合的系统! 最常用的代码和数据被输入闪存
而普通硬旁可以存储那些暂时不用的信息. 由于减少磁盘的转动时间,因此可以提高速度,降低能耗!
显然这是解决问题的两全其美的办法!
其实这也是我们计算机对于不同的各有优点的技术的进行取舍的一种很好的模式.它其实这种思路已经广泛的应用在
我们计算机的系统上了! 例如
显然这是一种很好的解决问题的模式. 那么如何在软件算法上实现这种解决模式呢? 当然我们可以想出解决问题的完美模式! 但这样会增加难度,增加bugs的风险! 如果时间紧,要求不高,下面的方式就很直接. 下面以可回存在硬盘上的Hash结构为例. 有以下几步;
这是一个简单的思路, 看起来不起眼,但是确实能解决问题! 对于沉迷于技术的人来说, 这个应该给我们一个很好的思考! 就是用技术的时候,应该考虑结合技术的方法和模式. 另外不是先进的技术越好. 技术是为应用和解决问题而生的, 不能为技术而技术啊
May 27 eclipse 的一些心得 对于程序的开发来说, 一个好的开发环境可以大大提高我们的开发效率.
对开发人员来说, 有了好的开发工具,只有熟练掌握它提供的功能, 才能真正使你
自己的开发效率提高. 就象军人,只有熟练掌握武器的功能, 才能转化成真正的战斗力.
本人开发java程序用Eclipse, 只有利用它提供的基本功能, 效率不是很高! 而且对程序
进行修改, 调整和refactor 都觉得工作量很大, 不敢去实施! 如果充分理解Eclipse提供的功能
我可以大大减轻负担.
下面我列出我要学习的和已经知道的一些功能
一、有用的功能
eclipse 提供功能,使我们轻易的从源程序中提取常量的String信息放如 properies文件中, 轻松实现localization 2. refactor功能
二、需要深入学习功能
具体叫Notation processing tool, 针对 java提供的源文件的的说明信息的格式, 使用方法, 和一写关键字. 这个不是很重要.
充分理解, Eclipse 提供 的开发功能的核心. 尤其要理解它的incremental build的原理. 使我门编写大型程序, 尽量少用build, 因为一次全体build, 要耗费半个小时, 大大影响开发, 而且影响开发心情. 如果不小心弄的全体 build 一两次, 一天的工夫就没.
充分理解 它提供的debugger功能.
May 17 利用java的reflect功能,对方法调用做预处理,和后处理
对方法调用,做预处理,和后处理是我们经常碰到的问题,日常编成比如
对与数据库编成,更有意义了比如
目前我们编成时,对方法调用,常用的方法是
后者是一个简洁的办法,因为预处理,和后处理代码和实现是分离的,但是她需要大量重复的编码工作. 下面介绍的利用java.lang.reflection包提供的接口InvocationHandler和Proxy类实现代理, 可以大大减轻编码的工作
看下面我实现的一个代码: package beasts; public interface DogInterface { /* (non-Javadoc) /* (non-Javadoc) } //////////////////////////////////////////////////// package beasts; import java.lang.reflect.InvocationHandler; public class DogInvocationHandler implements InvocationHandler { protected Object dog; }
//////////////////////////////////////////////////////////// package beasts; import java.lang.reflect.Proxy;
/* (non-Javadoc) }
显然动态代理, 使我们不必为每个实现写一个proxy,大大减轻我们的工作, 而且使我们的程序更加简洁. 当然有些缺陷了
|
|
|||
|
|