|
DocBook或 reStructuredText都是纯文本文档格式。也可以考虑xlst StructuredText和reStructuredText不一样 Sphinx简单来说,是一个文档生成工具,用于把reStructuredText 格式的源文件生成诸如HTML, PDF, LaTex一类的格式。编辑者无须亲自处理文本的格式, 程序会自动根据源文件里的设置产生格式, 以及自动生成章节链接等工作。 包括 Python , Django 的文档,全部是使用Sphinx 生成的 http://sphinx.pocoo.org/ 我是如何写博客的 http://www.cnblogs.com/mindsbook/archive/2009/07/09/how_do_i_write_blog.html http://www.cnblogs.com/mindsbook/archive/2009/07/15/how_can_i_write_blog_part2.html 该文主要介绍了如何使用 restructuredText (简称为reST)来写博客, 并且介绍了使用 google code 来管理博客源文件的方法。 另,Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL 也设计了一个存储引擎插件 txt2tags 支持带数字编号的标题 从txt2tags回归markdown http://sinolog.it/?p=503 再找找比较好的wiki: MediaWiki全球最著名的开源wiki引擎,运行于PHP+MySQL环境。 ViKi, 就是 VIM WiKi 的缩写。 WiKi 是一种非常方便快捷地组织信息的方式, 而 ViKi 作为一种“Personal WiKi”, 能够非常快捷地完成个人主页的制作, ViKi 可以支持许多很复杂, 功能很强大的语法。deplate是viki的编译工具。 Javascript闭包真经http://w3er.com/blog/2009/03/master-javascript-closure/ Stack Overflow和GitHub都在用markdown wmd(http://wmd-editor.com,https://github.com/derobins/wmd)是一个专门为Markdown做的在线编辑器,StackOverflow和qingbo.net也用了 https://github.com/philc/vimium/blob/master/README.markdown Markdown 语法支持列编辑模式的编辑器showoff支持用编写markdown脚本的方式在浏览器里显示ppt, 例子在Vim中发布博客内容到WordPress (reStructuredText) 目前最完善的介绍轻量级标记语言的资料:http://en.wikipedia.org/wiki/Lightweight_markup_language 以后不要叫结构化文本了,因为Structured Text已有另外的含义,见 维基百科
1,验证整数 var r1= /^[0-9]*[1-9][0-9]*$/ //正整数 var r2=/^-[0-9]*[1-9][0-9]*$/ //负整数 var r3=/^\d+$/ //非负整数(正整数 + 0) var r4=/^-?\d+$/ //整数 var val=r1.test(str); //str为你要判断的字符 执行返回结果 true 或 false
2, function isNumber(oNum) { if(!oNum) return false; var strP=/^\d+(\.\d+)?$/; if(!strP.test(oNum)) return false; try{ if(parseFloat(oNum)!=oNum) return false; } catch(ex) { return false; } return true; }
要断开svn,把目录下所有的.svn目录删除就OK了 http://realseraph.spaces.live.com/blog/cns!B9695C2468A927AC!265.entry
摘要: 转自http://www.cublog.cn/u/30637/showart_481055.htmlOracle的imp/exp组件是我们常用的工具,它的一个操作原则就是向下兼容。下面是据此总结的几个使用规则和相关测试:
规则1:低版本的exp/imp可以连接到高版本(或同版本)的数据库服务器,但高版本的exp/imp不能连接到低版本的数据库服务... 阅读全文
抛接技术,抛球可说是最基础的必修课,现在就请你从抛球开始练习。
# ^/ w: d! M" v- f% t
' I( M# N- Z4 G: N) D: [
练习用的道具,木球、皮球、网球都可以。球的大小,
; g1 N- D; ] E
- I& d6 ~1 K# ~2 Q
可根据自己手掌的大小来选择,直径为5—9厘米。
, v6 X) x2 D5 D2 H: _, E
! {: E& V# h/ i9 v' P4 @
练习时,球起初不易接住,由于这些球掉在地上到处乱滚,
9 F* g; [4 v0 D$ \3 h$ `" i. ^
9 U, w* B0 C8 \* n$ Y* U( |
捡球、找球很费时间,把皮球切开一个小孔,灌进一些细沙,
' n" U. w8 z7 h+ z( a) `
" {. k" [+ v7 j; [
再用胶布把球面裱贴一层,封住这个小孔,这样,当球落地时,
6 h. m' Q7 X. a* n
; @# o5 \/ c8 M- Z( j% g
就不会滚跑了,练习也方便了
0 I0 ], N, p, R
+ p" E& f/ o% Y0 p
练习方法:先练习一只球,单手抛接。
7 v1 [. H3 a' |
) L$ t, a; k) N# V/ i" D, ?
练习时,人按丁字步形站立,挺胸微收腹,双手自然下垂,
, H' r" B, s, D/ v: x
1 n& H6 y. W& w8 s& X
右手握球,由下往上用力传送,在自己的右胸前,让球脱手,
. C9 k5 ]! s! m
% L) A# ~( n: p. k: Y6 Q$ H m
使它向上微微偏右方飞出,当球升到一定高处后沿右手的右外侧下落,
3 x0 S0 E2 p3 h( p
% E$ [2 F* z, N4 T8 L& k! K
立即把右手从胸部向右移到肩宽之外接住它。
7 j3 z! } ` Q; e, q1 E
- q; _8 B4 x; o5 w
单抛一个球,还须左、右手轮流练习。
4 e4 e* b7 C8 L5 M
# j) a; e8 P8 o/ R
抛双球:在练习抛单球的同时,就开始了抛双球的练习。
) k$ q) Q& q0 h2 }" n" H. h. q
5 t; W- d2 h% f0 L' U
抛两个球,有两种方法:
7 Y( i- H7 {* D" F9 ~( Q2 A
9 Z# m8 \8 n+ i: y' ]- A9 H
一是单手抛两个球,右手握住两球,球A在前,由中指、食指、拇指控制,
" c, M" b; I& k
( v+ K: v0 u& w d- j
球 B由手掌及无名指、小指捏紧。抛时手法和球的运行路线与抛一个球的运行路线相同。
& Y$ ?+ {1 N; X. y; K
/ ?+ g/ _) i g v+ S3 n
右手抛出球,捏住球B,放松球A,让它由胸前向右侧飞出,
2 {3 J, A* j7 h' o; Z
4 T% E7 V6 P* N3 r3 X* ?
当球A飞升到最高点,紧接着沿球A运动的路线抛出第2个——球B,待球B出手之后,
" P. Q- I5 U) |: f0 o0 b2 |
. e6 H2 W) z( `( Q2 q: t' F
立即将手从胸前移到右外侧。正好接住落下的球A,
6 A2 @: v# X! V g
. |; x4 I, e1 u( Y) c
再如前面动作一样,抛 A接 B,循环往复。
: f, W( s% i0 A
7 W3 C8 M0 l0 x6 @* L
由于这两个球在空间形成一个圆形轨迹,所以它们互相不会碰撞。
2 [9 `' c+ d" `( u
% r; L' s# V' T9 C5 k! ~" A8 [
单手抛两个球逐渐熟练之后,再练习改变抛球时所用的力量,使球越抛越高,
: {% B4 V. E3 M- b3 k2 ]7 f) V
' z7 G. u/ T% r( c. P q e
高至球离手约300厘米左右,然后再逐渐放低,低至20厘米左右,必须注意两个球的运行路线不能打乱。
' R, S0 B2 s3 l8 ?% @
+ v% s. w, f- }/ }& H
1 f% c" ^6 o/ J( M( |$ x
抛两个球的另一种基本手法是双手抛接。
2 `2 y$ K/ ^9 F$ [( D
/ C. ~& C$ _/ W6 `6 s
左右手各握一个球,右手将球A横斜向地朝自己面前的中部上空抛出,
7 l( ]& [8 h/ H6 F% y3 K
+ ?7 [" n+ ?; D" D" S
抛出的球高度与自己眼睛等齐,以鼻尖为中心点,使球在面前沿平行抛物线作横向运动;
" Q1 @) w8 e+ u4 }
8 G& W: K9 _0 O6 }9 R
当球越过中心点之后,把左手的球B以同样姿势向右抛出,然后左手接住落下的球A,
( g0 H2 U; N* k9 w0 ~
8 I6 z% `4 ^+ V, r: O
右手再接住球B。再来一次,左手先抛出刚接住的球A,待球A越过中心线后,
! I" {# p% J- N* P7 ~
9 H0 B9 l0 C" A& W+ `( b
右手抛出球B,再接球 A。如此循环起来。
1 a4 d: a; n( y
& j" x7 G4 p0 ~8 S @
练习双手抛接双球,注意球的运行路线,要互相让开,避免两球互撞。
学完这个部分,你就可以进行舞台演出了
& [7 }; S9 N& ]+ M, M. e9 N
9 }6 U% x9 L% u) A& s. v0 V O$ ?, V
练熟了抛两个球,就可以开始抛3个球的尝试。
6 w& I+ X1 @: S9 ?$ R8 [
' ~& L( Z$ R, T8 k
右手握球A和球C,左手握球B,横向抛出球A,
' d& J% z& v0 b5 V
9 b9 j% X' N, T6 b# a5 {" `$ p# j5 c
如同前面双手抛两个球的办法一样,
3 m! X2 w8 h2 V5 u+ w; X
, B. [' ^7 S4 u$ F
待球A越过中心线后,左手抛出球B,接住球A,
* l, H1 t2 \9 c7 a% M
/ z. \- I8 H9 |0 e' O
紧接着,右手以同样姿势抛出球C,接球B。
0 m% B( ^) G2 E6 i. ~) X- `
5 S6 p& ^# @7 ?5 k
如此不断抛接交换,使 3个球在空中运转循环起来,
) X6 c+ P/ l$ b0 K' r' b6 l' v5 Q
* Q6 J2 v1 B1 G# D) w/ s
这是抛球技术最基础的功夫。
1 e- T9 m7 C' n4 w4 H
! Y: q* O+ I3 P( V) K, Q0 D) i
许多杂技演员,3个球抛得出神入化,变化多端,
' S* x0 V8 q7 [8 y. T# |; {" T
& T) Y5 [% ^9 O# W
赢得观众的阵阵掌声,常见的花样如下几个节日。
1 S' @. m$ G& A. E
6 T8 I' Y1 |; ^* A
过桥:在抛接过程中,突然改变球的运行路线,凡右手抛出的球,
; ] ^; {/ w0 M/ Y7 p7 f
9 }! |9 s& T& w# }& `
都绕外层大圈向右运行,凡左手抛出的球,都沿小圈向右运行,
- X2 p: W; l3 P5 p. R
1 Z1 o& g" ~& a0 R3 f6 q+ n
形成美丽的两个半圆轨迹。
$ l2 Q7 ~# C5 y! f6 u
6 W+ h/ i9 k# r9 z: {
流星赶月:在过桥的基础上,右手仍按过桥的手法向上将球抛起来沿大圈运动,
3 \; c) E. z4 m( @9 I
2 }3 X# `* g4 |# |6 `" E
左手一改向上抛小圈子为横向向右手平射,
7 l0 d; v' w; E- w2 {
1 ^7 O6 e. m) T8 N$ t3 O, m$ K1 v* P/ P
使3球形成一个流动不息的圆环状态。
- @' J3 M7 S i$ g) j
# M* c# n. ^. K- i
单个和双个:右手二球(A、C),左手一球(B),
s2 W* `! c( e5 E+ w" p2 j
# _' g' w- }% |3 H8 X
左右双手同时向上垂直抛出一个球(A和B),
, g" v: `1 W5 v1 S/ [7 U
8 Q' f; c. A' i* Z7 G
注意让球沿自身的两侧垂直向上抛,不要偏斜。
5 p& h) Z2 U9 t ^$ O
8 l0 S6 n( o5 ~$ ?/ v0 [7 v
待球A和球B升至最高点时,右手移至中心线部位,向上垂直抛出球C,
% b' M# B$ i+ u- E# h. f9 f
. Z3 D+ r1 X! {2 H* z' B
同时,双手立即移至两旁,接住一齐落下的球A和球B。
8 R" G: L: {9 V2 Y5 M: i6 i3 ~
$ a4 N: w, x. n( ]* E; K# A
然后,又沿两侧垂直方向朝上抛出这两个球……
6 U( |) r5 R' ?
: K k& ?. P& E( n" s
这样,3个球来回垂直运动,犹如齐整的步伐。
: @/ t! c, I: B! c0 I( o: h
! Q+ N* l( S/ [) @- @' T x5 M
骗马:在抛球时作跨腿的动作,就是骗马。在抛接球时,
' _! a$ }+ {. s; J1 o2 k
$ X$ M1 _) O7 K2 T" L
次抬起左右腿,将球由外向胯下扔出,同时扔出后手仍立即还原接球。
0 u+ j0 H9 u" C$ f0 b3 x
/ ?# ]% M1 x2 o7 o- @$ P" }3 h
背剑:在抛接过程中突然将右手的球高高抛起,
7 I2 N G( L. Y( b
( o! y* d$ K9 y9 Q4 J6 t. t/ T: O! W
这样,这个球(如球A)下降的时间就会稍微慢一拍,
) F- P9 W$ @+ \; D9 L, z: b9 E
' d0 t: ?. \6 [
右手乘机又将刚接住的球(如球 B)从背后抛出,使它由后越过背、左肩和头部,
% w3 g. ~) A- V& B- p" O- d
+ | L) w' H; m2 B3 g
从面前落下,这时将左手的球C向右抛出,往复下去,就称为单背剑。
! t& G, K3 ~. R, ^$ _$ _: F
( \* B, ^6 B. C1 \" c* F# O
如果当右手由背后抛出的球B还未落下时,左手也采取与右手同样的动作,
( p8 h0 T( O6 G/ x8 t
. j; ]- ? ~" H
伸到自己背后去抛出球C,然后才急速将左手伸至前面接球B,
; X9 W8 t {* X" g; `- {* B1 N
4 O! v' f+ V! g( Z
双手同样的动作连接起来,就称为双背剑。
* F6 O5 L! E8 a
+ e, h, s1 T! H1 }2 q3 e" b4 J) M
高抛:高抛是为下一步抛四五个球,增加球的数量作准备工作的。
, g+ m$ H B+ R* R4 k) ]
+ U" A9 V$ H2 F( Y; R: c: @
在抛球的中途突然将3个球同时抛向高空,使双手有一个同时脱空的瞬间,
' c' W+ T/ c" U9 g7 Q0 S
/ z% N' ^ J h9 d$ C& I
待3个球落下时,再次把它们抛出。练习这个动作,抛接球的节奏虽然要求快一些,
! S1 t+ \, r) d8 ?6 z$ }
# \% h1 }" ~) g5 [
但不能使球的运行路线错乱,熟练以后,就能增加球的数量了。
http://www.52magic.net/viewthread.php?tid=695376
http://topic.csdn.net/u/20080921/13/87e0922d-2f61-442c-b9ae-d5680f6bec87.html 上周从开发部转来一个刚毕业的小伙子,要我面试一下看看是否适合质量部的相关工作。交谈中,小伙子说大学里已经考过了系统分析员,于是我便问他:“系统分
析员主要做什么?”
小伙子想了一会说道:“系统分析员主要就是组织、管理和规划系统”。于是我接着问道:“如果负责组织、管理、规划的话,那和项目经理的区别是什么?”小伙
子想了半天,终于摇着头说:“不知道。” 问这个问题倒不是为了为难小伙子,主要是希望他能够明白, 书
本上学来的东西必须和实践联系起来,在开发也好在质量部也好,都离不开自己的主动学习和思考,没有思考的学习只是在收集知识而已,是不能够化为己用的。在
离开学校的头两年里,大部分人是无法找到自己真正的兴趣所在,我也是一样,所以刚开始无论在哪个岗位都必须主动学习和思考,包括对自己现有岗位的知识的学
习,以及由于不满而对岗位之外的知识的学习(当然这是在工作之外),而不满正是思考的起点。不过,正是因为无法找到真正的兴趣所在,就需要坚守岗位,一方
面也许它就是自己的兴趣所在,一方面也为了寻找真正的爱好而积蓄力量。 额外的话说了不少,还是回来看看,到底“系统分析员、架构师、项目经理”之间有着什么样的差别?下面按自己的理解粗略的整理了一下,也许并不全面,绿色部分代表每一个角色主要需要参与考虑的活动(注:下面所说的系统分析员混合了设计的职责):
首先看一下架构师和系统分析员的区别:
1、系统分析员必须考虑自己所设计系统的方方面面,他是系统实现的原始作者,也对系统能否满足客户的技术要求以及产品成本是否可接受起着最直接的作用。
2、架构师一般在软件组织内仅仅是少数人,他们主要负责对产品的架构进行评估以及子系统之间的接口批准上,评估的主要方面集中在系统级的质量属性和成本
上,包括:当前架构是否满足可靠性要求、系统架构的可扩展性、可重用性、性能以及基础的公共功能等等。他们必须对系统分析员设计出来的系统进行最初的把
关,所以责任重大,也需要经验非常丰富的人来承担。在公司其他部门和Ivar
Jacobson的交流中,Jacobson明确的指出,架构委员会不是常设组织,通常都来源于团队的系统分析员,唯一常设的职位通常只有一个主席,其他
的成员必须临时来源于系统开发的一线,只有他们最了解系统开发的基本思想。
3、系统成本是架构师和系统分析员最容易忽略的事情,而这个也是他们最基本的职责之一。
接下来看看系统分析员和项目经理的差别:
1、一个不合理的计划往往被归咎于项目经理,但这并不是事实。计划的制定严重依赖于系统分析员所设计系统的部件完成工序,而唯一能对这个作出准确判断的只
有系统分析员。所以,计划的最初版本是来源于系统分析员而不是项目经理。项目经理在这方面的主要作用是协助系统分析员制定计划,帮助考虑人员、资源方面的
投入情况,并在项目的执行过程中严格监控项目的进度情况。
2、质量目标的制定和计划一样,来源于系统分析员,尤其是性能、可靠性等关键技术指标,而这些的第一跟踪主体也是系统分析员。项目经理在其中的角色,只是
协助系统分析员安排各种资源,完成这些目标的测试、跟踪等活动。
3、成本是唯一的需要架构师、系统分析员以及项目经理共同关注并且严格控制的因素,原因很简单,这是大家靠着吃饭的来源。
4、项目其他的非技术方面的因素,则基本都是由项目经理负责搞定,包括合同、人员沟通、采购等等。 我不认同,这样搞失败的几率很大. 你说的: 项目经理,系统分析员,系统架构师 可以用: 项目经理,系统分析设计师 来取代,另外新增由 首席业务分析师带队的业务支持组(纯粹的业务人员). 不管是大项目还是小项目,不管项目规模多大多小,我的观点和实践如下: 1: 项目经理 必须对项目的范围(需求),包括要实现的功能和序列 要有比任何人都清晰的认识. 2: 项目经理 要有广泛的技术背景,广度和深度的技术眼光 至少要能支撑对要实现那些功能的定义(实际上就是承诺). 3: 项目经理全局把控 系统的 WBS, 局部的细节 WBS 可以让其他人员分担, 但并不代表自己对细节无法把握.
4:
一个项目的成功实施后,虽然项目经理不用自己写代码,甚至不用自己亲自写文档.但自己对整个项目的技术包括细节都了不指掌,并且又比项目组其他人员更高度
的认识.而且能够以总结的眼光找出不足的地方,能够想到新的改进的方案
在新的项目中去实施.对系统的功能和业务以及流程进行总结分析,有意识的无形中提升自己理解问题的能力. 5: 一个项目结束后,项目经理 对团队建设和管理以及考评, 项目计划以及执行, 各种变更以及突发或必须经历的事件 的处理能力都会有一个新的台阶的提升.并且能以总结的眼光有更高度的认识. 也就是管理能力的提升. 6:...... 7: 更关键的一点 就是建立发展跟客户的关系,增强客户的信任度,树立自己的个人品牌,进一步维护团队和公司的品质和品牌.客户对公司的认可,是建立在公司执行具体任务的团队的基础上,对团队的认可是建立在对项目的满意度和项目经理的认可上. 系统分析设计师,是对业务有一定基础(最好很熟悉),理解问题和解决问题能力特别突出的,技术广度和深度都非常优秀的人员承担.承担副项目经理的职责. 主要负责进行系统业务的分析和功能定义,接口定义,技术体系的制定,为项目量身定做的技术架构 等职责. 系统分析设计师 领导 设计组组长 和 开发组组长, 完成不同阶段的任务. 项目经理直接领导 系统分析设计师, 测试组, 配置管理组. http://zhidao.baidu.com/question/108354211.html?fr=relateQuestion 系统架构设计师和系统分析师的区别与联系 区别: 系分比架构更贴近用户一点,主要是需求分析,业务分析。 架构比系分更贴近技术一点,是技术专家、资深技术人员。
联系: 都是高级抽象级别,同作为软件高级职称资格,是程序员和软件设计师的领导者和技术顾问。两个联系多于区别,一般系统分析师组和架构师组合作,共同制定一个基础技术框架。 系统架构偏向于技术方面,包括设计
系统分析偏向业务,包括需求分析
它们也有共同之处和联系,两个职位要相互配合的.
http://topic.csdn.net/u/20090811/10/9c233a7f-ab58-4e5f-8ff9-7060715f7c0a_3.html 不可能都完全记住那么多的算法. 常用算法,拿过来就可以写出来 不常用的,拿起书来,看10分钟,就能理解算法(因为以前记过). 对以前没有记过的算法,就不好说了,难的可能要研究好几天. 这样就可以了. 应该熟练掌握的常用的算法应该有: 各种排序算法(插入排序、冒泡排序、选择排序,快速排序,堆排序,归并排序) 线性表(一般的线性表,栈,队列)的插入和删除 二叉树的遍历(前序,中序,后序) 图的遍历(深度优先,广度优先) 二分法查找,排序二叉树,Hash查找(处理冲突的方法)。 对于更深层次的东西,也是建立在自己熟练的基础之上的吧 《算法与数据结构考研试题精析》第2版 机械工业出版社 如果你想练习的话,这里有N多的题可以来练习,但实际中能用到的比较少,除非搞一些高端的玩意,不过平时也可以在自己的项目中结合使用 最重要的就是操作系统了(个人认为此乃计算机的精髓所在,一通百通)
转一个搞ACM需要的掌握的算法. 要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来. 适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什么就眼红, 发挥自己的长处,这才是重要的.
第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码, 因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打 出来. 1.最短路(Floyd、Dijstra,BellmanFord) 2.最小生成树(先写个prim,kruscal要用并查集,不好写) 3.大数(高精度)加减乘除 4.二分查找. (代码可在五行以内) 5.叉乘、判线段相交、然后写个凸包. 6.BFS、DFS,同时熟练hash表(要熟,要灵活,代码要简) 7.数学上的有:辗转相除(两行内),线段交点、多角形面积公式. 8. 调用系统的qsort, 技巧很多,慢慢掌握. 9. 任意进制间的转换
第二阶段:练习复杂一点,但也较常用的算法。 如: 1. 二分图匹配(匈牙利),最小路径覆盖 2. 网络流,最小费用流。 3. 线段树. 4. 并查集。 5. 熟悉动态规划的各个典型:LCS、最长递增子串、三角剖分、记忆化dp 6.博弈类算法。博弈树,二进制法等。 7.最大团,最大独立集。 8.判断点在多边形内。 9. 差分约束系统. 10. 双向广度搜索、A*算法,最小耗散优先.
相关的知识
图论
路径问题 0/1边权最短路径 BFS 非负边权最短路径(Dijkstra) 可以用Dijkstra解决问题的特征 负边权最短路径 Bellman-Ford Bellman-Ford的Yen-氏优化 差分约束系统 Floyd 广义路径问题 传递闭包 极小极大距离 / 极大极小距离 Euler Path / Tour 圈套圈算法 混合图的 Euler Path / Tour Hamilton Path / Tour 特殊图的Hamilton Path / Tour 构造
生成树问题 最小生成树 第k小生成树 最优比率生成树 0/1分数规划 度限制生成树
连通性问题 强大的DFS算法 无向图连通性 割点 割边 二连通分支 有向图连通性 强连通分支 2-SAT 最小点基
有向无环图 拓扑排序 有向无环图与动态规划的关系
二分图匹配问题 一般图问题与二分图问题的转换思路 最大匹配 有向图的最小路径覆盖 0 / 1矩阵的最小覆盖 完备匹配 最优匹配 稳定婚姻
网络流问题 网络流模型的简单特征和与线性规划的关系 最大流最小割定理 最大流问题 有上下界的最大流问题 循环流 最小费用最大流 / 最大费用最大流
弦图的性质和判定
组合数学
解决组合数学问题时常用的思想 逼近 递推 / 动态规划 概率问题 Polya定理
计算几何 / 解析几何
计算几何的核心:叉积 / 面积 解析几何的主力:复数
基本形 点 直线,线段 多边形
凸多边形 / 凸包 凸包算法的引进,卷包裹法
Graham扫描法 水平序的引进,共线凸包的补丁
完美凸包算法
相关判定 两直线相交 两线段相交 点在任意多边形内的判定 点在凸多边形内的判定
经典问题 最小外接圆 近似O(n)的最小外接圆算法 点集直径 旋转卡壳,对踵点 多边形的三角剖分
数学 / 数论
最大公约数 Euclid算法 扩展的Euclid算法 同余方程 / 二元一次不定方程 同余方程组
线性方程组 高斯消元法 解mod 2域上的线性方程组 整系数方程组的精确解法
矩阵 行列式的计算 利用矩阵乘法快速计算递推关系
分数 分数树 连分数逼近
数论计算 求N的约数个数 求phi(N) 求约数和 快速数论变换 ……
素数问题 概率判素算法 概率因子分解
数据结构
组织结构 二叉堆 左偏树 二项树 胜者树 跳跃表 样式图标 斜堆 reap
统计结构 树状数组 虚二叉树 线段树 矩形面积并 圆形面积并
关系结构 Hash表 并查集 路径压缩思想的应用
STL中的数据结构 vector deque set / map
动态规划 / 记忆化搜索
动态规划和记忆化搜索在思考方式上的区别
最长子序列系列问题 最长不下降子序列 最长公共子序列 最长公共不下降子序列
一类NP问题的动态规划解法
树型动态规划
背包问题
动态规划的优化 四边形不等式 函数的凸凹性 状态设计 规划方向
线性规划
常用思想
二分 最小表示法
串
KMP Trie结构 后缀树/后缀数组 LCA/RMQ 有限状态自动机理论
排序 选择/冒泡 快速排序 堆排序 归并排序 基数排序 拓扑排序 排序网络
中级: 一.基本算法: (1)C++的标准模版库的应用. (poj3096,poj3007) (2)较为复杂的模拟题的训练(poj3393,poj1472,poj3371,poj1027,poj2706) 二.图算法: (1)差分约束系统的建立和求解. (poj1201,poj2983) (2)最小费用最大流(poj2516,poj2516,poj2195) (3)双连通分量(poj2942) (4)强连通分支及其缩点.(poj2186) (5)图的割边和割点(poj3352) (6)最小割模型、网络流规约(poj3308, ) 三.数据结构. (1)线段树. (poj2528,poj2828,poj2777,poj2886,poj2750) (2)静态二叉检索树. (poj2482,poj2352) (3)树状树组(poj1195,poj3321) (4)RMQ. (poj3264,poj3368) (5)并查集的高级应用. (poj1703,2492) (6)KMP算法. (poj1961,poj2406) 四.搜索 (1)最优化剪枝和可行性剪枝 (2)搜索的技巧和优化 (poj3411,poj1724) (3)记忆化搜索(poj3373,poj1691) 五.动态规划 (1)较为复杂的动态规划(如动态规划解特别的施行商问题等) (poj1191,poj1054,poj3280,poj2029,poj2948,poj1925,poj3034) (2)记录状态的动态规划. (POJ3254,poj2411,poj1185) (3)树型动态规划(poj2057,poj1947,poj2486,poj3140) 六.数学 (1)组合数学: 1.容斥原理. 2.抽屉原理. 3.置换群与Polya定理(poj1286,poj2409,poj3270,poj1026). 4.递推关系和母函数. (2)数学. 1.高斯消元法(poj2947,poj1487, poj2065,poj1166,poj1222) 2.概率问题. (poj3071,poj3440) 3.GCD、扩展的欧几里德(中国剩余定理) (poj3101) (3)计算方法. 1.0/1分数规划. (poj2976) 2.三分法求解单峰(单谷)的极值. 3.矩阵法(poj3150,poj3422,poj3070) 4.迭代逼近(poj3301) (4)随机化算法(poj3318,poj2454) (5)杂题. (poj1870,poj3296,poj3286,poj1095) 七.计算几何学. (1)坐标离散化. (2)扫描线算法(例如求矩形的面积和周长并,常和线段树或堆一起使用). (poj1765,poj1177,poj1151,poj3277,poj2280,poj3004) (3)多边形的内核(半平面交)(poj3130,poj3335) (4)几何工具的综合应用.(poj1819,poj1066,poj2043,poj3227,poj2165,poj3429)
高级: 一.基本算法要求: (1)代码快速写成,精简但不失风格 (poj2525,poj1684,poj1421,poj1048,poj2050,poj3306) (2)保证正确性和高效性. poj3434 二.图算法: (1)度限制最小生成树和第K最短路. (poj1639) (2)最短路,最小生成树,二分图,最大流问题的相关理论(主要是模型建立和求解) (poj3155, poj2112,poj1966,poj3281,poj1087,poj2289,poj3216,poj2446 (3)最优比率生成树. (poj2728) (4)最小树形图(poj3164) (5)次小生成树. (6)无向图、有向图的最小环 三.数据结构. (1)trie图的建立和应用. (poj2778) (2)LCA和RMQ问题(LCA(最近公共祖先问题) 有离线算法(并查集+dfs) 和 在线算法 (RMQ+dfs)).(poj1330) (3)双端队列和它的应用(维护一个单调的队列,常常在动态规划中起到优化状态转移的 目的). (poj2823) (4)左偏树(可合并堆). (5)后缀树(非常有用的数据结构,也是赛区考题的热点). (poj3415,poj3294) 四.搜索 (1)较麻烦的搜索题目训练(poj1069,poj3322,poj1475,poj1924,poj2049,poj3426) (2)广搜的状态优化:利用M进制数存储状态、转化为串用hash表判重、按位压缩存储状态、双向广搜、A*算法. (poj1768,poj1184,poj1872,poj1324,poj2046,poj1482) (3)深搜的优化:尽量用位运算、一定要加剪枝、函数参数尽可能少、层数不易过大、可以考虑双向搜索或者是轮换搜索、IDA*算法. (poj3131,poj2870,poj2286) 五.动态规划 (1)需要用数据结构优化的动态规划. (poj2754,poj3378,poj3017) (2)四边形不等式理论. (3)较难的状态DP(poj3133) 六.数学 (1)组合数学. 1.MoBius反演(poj2888,poj2154) 2.偏序关系理论. (2)博奕论. 1.极大极小过程(poj3317,poj1085) 2.Nim问题. 七.计算几何学. (1)半平面求交(poj3384,poj2540) (2)可视图的建立(poj2966) (3)点集最小圆覆盖. (4)对踵点(poj2079) 八.综合题. (poj3109,poj1478,poj1462,poj2729,poj2048,poj3336,poj3315,poj2148,poj1263)
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(poj3295) (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法: (1)图的深度优先遍历和广度优先遍历. (2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra) (poj1860,poj3259,poj1062,poj2253,poj1125,poj2240) (3)最小生成树算法(prim,kruskal) (poj1789,poj2485,poj1258,poj3026) (4)拓扑排序 (poj1094) (5)二分图的最大匹配 (匈牙利算法) (poj3041,poj3020) (6)最大流的增广路算法(KM算法). (poj1459,poj3436) 三.数据结构. (1)串 (poj1035,poj3080,poj1936) (2)排序(快排、归并排(与逆序数有关)、堆排) (poj2388,poj2299) (3)简单并查集的应用. (4)哈希表和二分查找等高效查找法(数的Hash,串的Hash) (poj3349,poj3274,POJ2151,poj1840,poj2002,poj2503) (5)哈夫曼树(poj3253) (6)堆 (7)trie树(静态建树、动态建树) (poj2513) 四.简单搜索 (1)深度优先搜索 (poj2488,poj3083,poj3009,poj1321,poj2251) (2)广度优先搜索(poj3278,poj1426,poj3126,poj3087.poj3414) (3)简单搜索技巧和剪枝(poj2531,poj1416,poj2676,1129) 五.动态规划 (1)背包问题. (poj1837,poj1276) (2)型如下表的简单DP(可参考lrj的书 page149): 1.E[j]=opt{D+w(i,j)} (poj3267,poj1836,poj1260,poj2533) 2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最长公共子序列) (poj3176,poj1080,poj1159) 3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最优二分检索树问题) 六.数学 (1)组合数学: 1.加法原理和乘法原理. 2.排列组合. 3.递推关系. (POJ3252,poj1850,poj1019,poj1942) (2)数论. 1.素数与整除问题 2.进制位. 3.同余模运算. (poj2635, poj3292,poj1845,poj2115) (3)计算方法. 1.二分法求解单调函数相关知识.(poj3273,poj3258,poj1905,poj3122) 七.计算几何学. (1)几何公式. (2)叉积和点积的运用(如线段相交的判定,点到线段的距离等). (poj2031,poj1039) (3)多边型的简单算法(求面积)和相关判定(点在多边型内,多边型是否相交) (poj1408,poj1584) (4)凸包. (poj2187,poj1113)
我给你推荐一本书,我就是看了这本书而得到了很大的提升,就是数据结构与抽象JAVA版,我买的是2004年的第一版,还没有找到别的版的,里面基本上讲 的全是数据结构还有数据结构中实现的算法,非常好的一本教程,绝对精典。有很多数据结果与算法的书里讲了很多数学的算法那个对于我们来说基本上看不懂,而
算法这种东西 关键是你了解多少 而不是你会多少,所以学了忘记你也不用怕。 为了学算法而去学算法到头就是一场空,对自己算法没底的,建议先看下java中的各种工具容器的源码,查看 下java对算法是如何用的,然后再去查这些算法的优缺点,和大致流程。在以后用java工具容器的时候你能清楚的知道在什么地方用什么东西 这就足够了。java玩到后面对框架整体把握才是王道 算法都是拿来主义就行了。
常用的算法记住一些,不常用的算法经常看看,有时候是需要的时候才会去看一下算法方面的,因为有时候可以自己想着一些法子来做算法方面的编程,如果大家都 是一个样子出来的东西也就没什么创新的东西。创新能力才是最重要的能力。知识呈现爆炸型发展,不可能有那么多的精力去学习那么多东西的。如果真能记住那么
个人感觉,所谓程序算法,就是解决问题一种思路、想法。你了解一种算法,也只是了解了一种解决问题的思路,而更为重要的是你要把这种解决问题的思想融入自 己的思想,从而用这个思想来解决今后相似的问题。而在这个过程之中,需要的就是思考,要完整而全面地思考算法的思想与你原始思想之间的异同点,要完全消化 这种算法的思想。这就如小说中的人物,他再NB,也没有写小说的作者NB啊。 多的算法那也可以去记住,拿过来用就好了。 且用的也很少。
OracleCallableStatement cst = null; int oracleId = CharacterSet.ZHS16GBK_CHARSET; oracle.sql.CharacterSet dbCharset = oracle.sql.CharacterSet.make(oracleId); cst = (OracleCallableStatement) conn .prepareCall("begin ?:= pkg_test.f_getList(?); end;"); //String sql = "{?=call PckgStudSltCourse.addStudPreSltCourse(?,?,?,?)}";也可以这样写 //sql="{call sp(?,?,?,?,?)}";//如果无返回值 cst.registerOutParameter(1, OracleTypes.ARRAY, "T_ARRAY");//第一个问号表示返回结果 cst.setString(2, userid);//第二个问号 cst.executeUpdate();//哪怕是个查询也用executeUpdate oracle.sql.ARRAY simpleArray = cst.getARRAY(1);//从statement获取,而不是rs String[] values = (String[]) simpleArray.getArray(); for (int i = 0; i < values.length; i++) { oracle.sql.CHAR out_value = new oracle.sql.CHAR(values[i],dbCharset); System.out.println(out_value.stringValue()); } 注意:在new oracle.sql.CHAR处,可能会报 java.lang.NoClassDefFoundError: oracle/gss/util/NLSError at oracle.sql.CharacterSetUnknown.failCharsetUnknown(CharacterSetFactoryThin.java:178) at oracle.sql.CharacterSetUnknown.convert(CharacterSetFactoryThin.java:145) at oracle.sql.CHAR.(CHAR.java:147) 即missing some jar file in runtime environment 原因是weblogic没有加载web应用下的classes12.jar,而是加载了weblogic81\server\lib里的ojdbc14.jar, 而ojdbc14.jar里没有oracle.gss.util.NLSError。 修改classpath先加载classes12.jar,打印出来的是乱码,只出现乱码,这次没有出现类似这样的异常java.sql.SQLException: Non supported character set: oracle-character-set-850 。 还需要修改classpath先加载nls_charset12.jar;(必须这样,光放在web应用的lib下或光放在weblogic81\server\lib都 不行,jar包放置或加载的这三种方式是有区别的) 问题:如果使用的是ojdbc.jar,我觉得可能就不要nls_charset12.jar了,并且不需要new oracle.sql.CHAR(values[i],dbCharset)来转换 http://topic.csdn.net/t/20051110/17/4385336.html 类是通过类加载器classloader载入的。 缺省情况下web容器遵循java的标准标准类载入机制 -- 由现载入父加载器level的类。 weblogic的web容器的classloader继承自ejb容器的classloader,ejb容器的classloader又继承自 application classloader--该loader负责加载classpath下面的类,所以缺省情况下classpath下面的类会被优先载入,即使相同的类存在于web应用的lib目录。 可以通过配置文件来修改这种加载顺序,使得lib目录中的类得到优先调用,在weblogic 8.1中,方法是在weblogic.xml中加入下面的代码段: <container-descriptor> <prefer-web-inf-classes>true</prefer-web-inf-classes> </container-descriptor> weblogic 的加载顺序就是weblogic classpath优先? 一下见http://www.javaeye.com/topic/21141 ClassNotFoundException发生在装入阶段。 当应用程序试图通过类的字符串名称,使用常规的三种方法装入类,但却找不到指定名称的类定义时就抛出该异常。 NoClassDefFoundError: 当目前执行的类已经编译,但是找不到它的定义时 也就是说你如果编译了一个类B,在类A中调用,编译完成以后,你又删除掉B,运行A的时候那么就会出现这个错误 当你使用字符串去转换类,也就是尝试使用Class.forName等方法去获得一个类的时候,如果这个类不存在,就会抛出ClassNotFoundException。 而你编译的类无错,但是在运行时刻,缺乏某些必须的类时,就是抛出NoClassDefFoundError。这种情况最常见就是你在编译时,在classpath下有这个类,但是在运行时,你的classpath缺少这个类。 加载时从外存储器找不到需要的class就出现ClassNotFoundException 连接时从内存找不到需要的class就出现NoClassDefFoundError 问题:加载和连接的区别 创建测试用表 CREATETABLE T_TEST( I_ID NVARCHAR(20), I_NAME NVARCHAR(20) ) 1、建立存储过程
CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS
BEGIN
INSERT INTO T_TEST (I_ID,I_NAME) VALUES (PARA1, PARA2);
END TESTA; 2、相应的JAVA程序
import java.sql.*;
import java.io.OutputStream;
import java.io.Writer;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oracle.jdbc.driver.*;
public class TestProcedureOne {
public TestProcedureOne() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@192.168.10.216:1521:ctbu";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
CallableStatement cstmt = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, "dbname", "password");
CallableStatement proc = null;
proc = conn.prepareCall("{ call dbname.TESTA(?,?) }");
proc.setString(1, "100");
proc.setString(2, "TestOne");
proc.execute();
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(rs != null){
rs.close();
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}
}
catch (SQLException ex1) {
}
}
}
} 二:有返回值的存储过程(非列表) 1、存储过程为
CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS
BEGIN
SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;
END TESTB; 2、JAVA代码
public class TestProcedureTWO {
public TestProcedureTWO() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@192.168.10.216:1521:ctbu";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, "dbname", "password");
CallableStatement proc = null;
proc = conn.prepareCall("{ call HYQ.TESTB(?,?) }");
proc.setString(1, "100");
proc.registerOutParameter(2, Types.VARCHAR);
proc.execute();
String testPrint = proc.getString(2);
System.out.println("=testPrint=is="+testPrint);
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(rs != null){
rs.close();
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}
}
catch (SQLException ex1) {
}
}
}
}
}
注意,这里的proc.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的,如果out是在第一个位置,那就是
proc.getString(1),如果是第三个位置,就是proc.getString(3),当然也可以同时有多个返回值,那就是再多加几个out
参数了。
三:返回列表
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分。
1、在SQL*PLUS中建一个程序包 CREATE OR REPLACE PACKAGE TESTPACKAGE AS
TYPE Test_CURSOR IS REF CURSOR;
procedure TESTC(cur_ref out Test_CURSOR);
end TESTPACKAGE; 建立存储过程,存储过程为:
create or replace package body TESTPACKAGE as
procedure TESTC(cur_ref out Test_CURSOR) is
begin
OPEN cur_ref FOR SELECT * FROM T_TEST;
end TESTC;
END TESTPACKAGE;
可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。
JAVA程序如下: import java.sql.*;
import java.io.OutputStream;
import java.io.Writer;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oracle.jdbc.driver.*; public class TestProcedureOne {
public TestProcedureOne() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@192.168.10.216:1521:ctbu";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
CallableStatement cstmt = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl,"databasename" "password");
CallableStatement proc = null;
proc = conn.prepareCall("{ call cqsb.TESTA(?,?) }");
proc.setString(1, "100");
proc.setString(2, "TestOne");
proc.execute();
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(rs != null){
rs.close();
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}
}
catch (SQLException ex1) {
}
}
}
} 特别注意:
1、在执行前一定要先把oracle的驱动包放到class路径里。
2、Toad在我建立存储过程中搞了很多莫名的错误,多数是没有创建成功而不报错,
或者是创建有误而不提示,应当引起重视。所以最好还是在SQL*PLUS玩这些。
3、在SQL*PLUS中的换行是无效的,要换行的时候一定要空格结尾,特别是你直接复制代码的时候!
对这些东西都没什么整体概念,以下是东抄西抄的。
1,Select isspecified,count(*) from v$spparameter group by isspecified;
如果isspecified里有true,表明用spfile进行了指定配置
如果全为false,则表明用pfile启动
2,spfile是二进制的 3,http://snakeskin.javaeye.com/blog/155136 db_buffer_size=db_block_buffers*db_block_size, db_block_size为数据库默认值, 不要修改 pfile不要有SGA_TARGET这个参数, 也不要有db_cache_size这个参数, SGA_MAX_SIZE也不需要 1)创建pfile
SQL>create pfile from spfile 这样就在d:/oracle/product/10.1.0/db_1/database目录下面多1个文件INITorcl.ORA 或者copy d:/oracle/product/10.1.0/admin/orcl/pfile/init.ora.XXXXXXXX到上述目录, 名字改成INITorcl.ORA init.ora.XXXX也是个pfile文件, 不妨试着用这个文件启动你的数据库 SQL>startup pfile='d:/oracle/product/10.1.0/admin/orcl/pfile/init.ora.XXXXXXXX' 特别是你改动参数导致数据库无法启动的情况下, 用这个文件恢复你的spfile将非常有用 SQL>create spfile from pfile='d:/oracle/product/10.1.0/admin/orcl/pfile/init.ora.XXXXXXXX' 2)修改pfile的内容 修改后主要内容为 sga_target=1700000000(1.7G左右) lock_sga=true pre_aggregate_tagert=250000000(250M左右) workarea_size_policy=auto pre_page_sga=true sga_max_size=1720000000(1.72G左右) 3)根据pfile启动数据库 SQL>startup pfile='d:/oracle/product/10.1.0/db_1/database/INITorcl.ORA' 如果不能启动, 可能是某些参数的原因, 那么就修改INIToracl.ORA的配置文件, 直到能正常启动为止. 4,http://www.orafaq.com/node/5 What is the difference between a PFILE and SPFILE: A PFILE is a static, client-side text file that must be updated with
a standard text editor like "notepad" or "vi". This file normally
reside on the server, however, you need a local copy if you want to
start Oracle from a remote machine. DBA's commonly refer to this file
as the INIT.ORA file. An SPFILE (Server Parameter File), on the other hand, is a
persistent server-side binary file that can only be modified with the
"ALTER SYSTEM SET" command. This means you no longer need a local copy
of the pfile to start the database from a remote machine. Editing an
SPFILE will corrupt it, and you will not be able to start your database
anymore. 5,怎样查看一个参数修改是否需要重启数据库 select name,value ,ISSYS_MODIFIABLE from v$parameter
如果ISSYS_MODIFIABLE 返回的是false,说明该参数无法用alter system语句动态修改,需要重启数据库
6,用命令修改参数 alter system set java_pool_size=2 scope=spfile ; scope=spfile 的修改是需要重启数据库
scope=both 实时生效和写入spfile,不需要重启数据库
scope=memory 实时生效,但不写spfile,这样如果重启数据库,则恢复原来的参数值
每个参数能修改的scope是不一样的,可以查询v$parameter了解参数能被修改的类型 见http://bbs.chinaunix.net/archiver/?tid-974075.html
10,
http://www.cnblogs.com/jacktu/archive/2008/02/27/1083232.html http://topic.csdn.net/u/20090227/16/fb3d88ed-f2ca-44ed-8097-dc363054515c.html
参见: http://www.d9soft.com/article/353/Article25047_1.htm http://topic.csdn.net/u/20070719/09/13f24bd3-5fc4-43dc-b1e4-5475718031b4.html
|