第一篇:期货学习路线
期货交易是现有几种能凭借动力,耐力和技巧,以相对较少的资金投入来获得无限潜在利润的投资工具之一。可以说没有任何资本投机像期货交易那样充满投机性,迷惑性,风险性而又前景广阔。
那么如何成功参与期货交易呢?我个人认为有如下几个因素:
一、要对期货市场拥有正确全面的理解:
这方面的知识我认为不用买书,完全可以通过论坛新手学苑以及各大期货论坛的帖子来获得.通过大量的阅读,你要弄明白以下几个问题:
1、期货交易不是一门科学,它更多的是一门艺术。
2、没有捷径,没有菜谱式的公式来获得期货交易的成功。
3、期货市场中九亏一赢,对这样的结果原因知道个大概。
4、如果一个人能清醒认识到交易中亏损的风险,能为获得成功不懈努力并具有自律精神的话,期货交易将为他提供一条通往巨额财富的谋生之路。
有了以上认识后,还需要端正学习态度和坚定信念。
虽然每个人来学习和期货交易的最初动机都不一样,所受到的影响也不一样。但是可以想象的到,大家听到最多的就是期货风险很大很大,几乎没有人能够赚到钱。其实这是偏见,很多人过早被市场消灭,不是因为期货本身的错,而是因为自己的思维和做法错误,想想看,还像股票那样全仓杀入期货,不知道错在哪里,如何改错?不死才怪!在股票里没死,是因为股票是慢慢割杀。就好象那句话说的那样,股票是温水慢慢煮死,期货是开水利马烫死。如此说来两者还有优劣厚重之分吗?
所以,我觉得交易什么不重要,重要的是你对市场对自己的了解有多深!
另外,该不该学习期货?该不该交易期货?这个问题我想没有人可以给出正确的答案。很多人仅仅因为自己或周围人赔钱就告诉新手不可以来交易;也有很多人因为一时的运气就对新手特吹狂吹;更有经纪人自己交易失败不得不退出,却鼓动新手大做特做,这样的行为都很不负责。
适合不适合?如何调整自己?谁也别问,你是自己的主人,对照大作手的话就成.投机,天下最彻头彻尾充满魔力的游戏。但是,这个游戏愚蠢的人不能玩,懒得动脑子的人不能玩,心理不健全的人不能玩,企图一夜暴富的冒险家不能玩。这些人如果贸然卷入,到头来终究是一贫如洗。
二、行情分析方法的学习和掌握
行情分析方法非常重要,针对众多市场是观望还是入市参与交易,都取决于你对市场的准确分析。要想做好分析工作,首先要学习所有的分析方法,然后根据自己的优势,确定自己的分析方法。目前行情分析方法有三种,基本分析,技术分析和心理分析。
基本分析:它要求我们具备经济情势的能力。在新手尤其是股票新手当中,很多人是由此入市操作的。在他们眼里这个分析是最容易进行的,看看新闻,浏览一下某公司的投资报告,注意一下产量和销量就可以操作了。其实这是非常错误的,在各大投资公司,薪水最高的就是基本面研究员,这说明这个分析是非常难的和专业化的,一般的散户无论是资历还是财力是做不到全面及时的基本分析的。这方面请看看<史瓦格期貨基本分析>就会知道我们的无奈。但是这也不能说明我们就要完全放弃基本分析,我们可以学习根据重要事件对市场的影响来判断后续的走势。例如,如果一件重大利好没有造成市场继续上升就是多头减仓或建空仓信号。
技术分析:它是借助于图表和技术指标的帮助来分析市场行为,帮助我们决定何时买入卖出或者不参与,也帮助我们判断走势的正常与异常。它包括:
1、图形分析:头肩,反转,连续,支撑,压力等。这个是最基础的,也是陷阱最多的地方。学习参考书目《期货市场技术分析》《期货交易技术分析》《日本蜡烛图技术》《甘氏理论:形态—价格—时间》《完全技术分析手册》。
2、顺势分析:趋势线,均线。都说顺势操作,可是如何发现趋势的开始,如何确定趋势是否延续?这个太难太难了!学习参考书目《趋势跟踪》《专业投机原理》《股市晴雨表》(《股市晴雨表》中的道氏理论对趋势的理解非常重要)
3、结构分析:季节性,循环,波浪。结构分析是帮助我们确定行情所处的位置,从而确定市场随后的发展,这个学习是很深的,弄不好要陷入迷信的怪圈,大家要小心才好。刚开始可以只做了解,有了一定经验和分析能力后,再来深入研究它。学习参考书目《艾略特波浪理论-市场行为的关键》《应用艾略特波浪理论获利》《江恩华尔街45年》《市场轮廓理论》《驾驭市场--优秀交易商是如何造就的》
4、市场性质:它的重点是判断超买或超卖的行情,主要是用于没有明确方向的震荡行情。学习书目《短线交易秘诀》《我如何从股市中赚得200万》《震荡盘操作策略》《箱型賺錢法》《市場韻律與時效分析》
在期货交易中,技术分析人士占很大一部分,也许就是因为使用的人多,常常使得经典技术信号失灵。
心理分析:在技术分析中说到,经典技术信号失灵,那么如何解决这问题呢?这就引出了心理分析。心理分析是非常复杂和难以掌握的,因为它没有什么指标可以准确量化,只能说是斗志斗勇吧。
它分为两个方面:
1、自己心理分析:参考书目《重塑证券交易心理》《赢家操作心法》《最佳卖出点》《战胜华尔街--成功投资的心理学与哲学》《股票投资心理分析》
2、大众心理分析:参考书目《大众心理与走势预测 》《逆向思考的艺术 》《乌合之众》《88种股市陷阱》
这里还要特别提到一本书,那就是《行为金融》。重点推荐的理由可在此书内容简介得知。
纯金融理论并不是考虑人们的情感波动,认识偏见和预期,而这些因素常常会导致人们做出并不高明的决策。尽管知道成功的希望渺茫,但对于回报丰厚、获胜概率微小的机会,人们仍然准备下手一搏,这从世界上到处风靡的彩票抽奖活动可以看出。因此,社会的行为方式比数理化理论模型要有用的多,许多人会听从一些传言和小道消息或随大流,而并不想对一些事情做出客观公正的评判。本书的两位作者,一名是经验丰富的金融市场实践者,另一名是在研究市场心理的专家,向我们阐述了行为金融的科学意义。该书探讨了人们在寻求更好的投资机会有关决策的几个问题,决策如何引起证券市场价格波动,投资者如何选择信息和交流信息。
三、形成自己的分析体系并建立交易规则
通过大量的学习后,每个人或多或少拥有了自己的分析方法,但是这时候的方法基本都是书上看到或者别人那里听来的,悟性好的人会知道其中的涵义,悟性稍差或者懒惰的人则根本不知。无论知道与否,别人的方法终究是别人的,依靠它们来操作很难获利可这又是每个人必经之路!那么若想在这个过程少花一点冤枉钱,就先用模拟交易或者历史数据测试去
试验其有效性,然后用最少的资金去实盘。在这两个过程中,根据自己的观察和思考对原有的方法进行更正和完善。
学习参考书目《混沌操作法》《克罗谈投资策略——神奇的墨菲法则》《原版海龟交易法则》《成功交易--与金融大师谈投资》《高績效期貨操作:名家交易策略》《甘氏理论:型态-价格-时间》
四、实现复制性学习到创造性学习的质变
如果说交易学习很难,那么就应该体现在这个过程中了。当人们拥有了属于自己的分析方法进行操作后(太多的人是没有耐心经历验证过程的),他们会慢慢发现,他们所学到的方法在交易中竟然无法让他们赚到钱,当然有一些人刚开始是获利的,但最终也要陷入亏损。于是又学新的方法,但还是不行。这时有的人或者去花高价寻找秘诀,或者责怪自己的心态不好,事实上,这个时候大家关键的问题是操作犯了一个严重的错误,那就是拿来主义----无论什么方法,只要看到了,不问究竟或不懂究竟,拿来就用。
比如最著名的突破买入法,很多人都是在创新高时买入。这个方法在股票中无伤大雅,可是在期货中却常常是非常的被动。因为在期货中,这个方法的最好使用时机应该是高位或低位(常见的是低位)长时间横盘整理后的突破第一笔仓介入。因为这一突破说明了新的趋势很有可能从这里开始。而在趋势形成后的过程中,再用这个方法,却是非常的被动,可以看看伦敦铜,在上升趋势中,有几个突破是没有跌回的?!而且在趋势行进中的突破买入使你的止损点非常的不合理,同时这样的操作会让你多次止损受伤。期货是保证金制度,太宽的止损将使你的这笔交易风险报酬比很不划算,太低的止损又没说明你错了,所以最后的结果你总是受伤。而形态识别更是太多的陷阱在里面。
要解决这些问题必须跳出书本,从理论世界中来到现实世界,每天大量的看盘解盘,这个过程就像《乌合之众》所说的那样:取得成功的条件是判断力,是经验,是开拓精神和个性。观念只有在自然而正常的环境中才能形成。要促进观念的培养,需要在现实中获得大量的感官印象;他得亲眼看到各种工具、材料和操作;他得身临其境。在不知不觉中获得细节,默默推敲,在心中逐渐成形,并且或迟或早会产生出一些提示,然后着手新的组合,简化,创意。改进或发明。
当有一天,你对他人的技术不再是拿来主义,而是详细检查方法和结果,并能通过图表了解到背后人们的情绪因素,那么你的交易也就赢多于亏了。不过这个过程很长,没有失望绝望是无法有这个质变的。好在相对于股票,期货的迷惑时间少很多。勤奋刻苦的人大概1---2年就能熬过去了,股票可就没这么幸运,10年可能还不知究竟。这也是我热爱期货的一个原因所在。
五、培养高超的交易技能和技巧
期货市场是买家和卖家因为某种原因聚集在一起交换货物、进行交易的地方。在这个斗智斗勇的高级游戏中,要获得胜利需要正确的行情分析同时,更需要高超的交易技巧.然而如前辈所说,交易界里同时具备分析能力与交易技巧的人并不多见.因此这项学习既是挑战更是机遇。
成功稳健的交易是由一系列环节组成:买(卖)什么--何时买(卖)--怎么买(卖)--买(卖)入量占资金组合的比例多大--买(卖)入后的监控--何时加仓--加仓后的监控--何时平仓--对不可预知的意外情况防范措施--错误的处理--系统无效时的行为等。这其中的任何一个环节,初学者都不能很好的完成,甚至说有了几年交易经验的老手也都很难做到。想要掌握它,一方面通过冥想,在交易前尽可能把所有环节中自己的处理方式想象出来,这个过程要细致,不能
有纰漏;另一方面用最小量去实盘交易,在实盘中对自己的执行能力和自己的优点弱点进行最严格的检验和修正。
有专家说:“技能的高低在于熟练的程度”。一个司机车开的好坏,在于他开车的时间长短,在于他对车况的熟悉程度,在于他应对不良路况反映的灵敏度,关键的一样就是熟练的程度。你能想象一个未经练习,就直接开车上路的后果吗?交易技能的高低虽然涉及不到生命安全问题,但是势必会影响到交易绩效。
<体育运动心理学>曾说,对于一种运动技能,如弹琴、打字、驾驶汽车等,要达到熟练必须经过1000-1500小时的练习。这仅是一般性的熟练而言,至于在竞技运动领域,要形成一种能够在比赛中灵活运用的技巧,显然要经过更长的时间。
体育如此,交易也是这样。国债交易员查理D曾说,当你经过了5000笔交易后,你才会把交易中所有可能遇到的各种情况经历了。5000笔---这是什么样的概念啊?!因此到了这个阶段,如果波段交易技巧能够比较成熟的掌握,那么可以用最小的仓位从趋势波段过渡到短线甚至日内。在短线和日内的不断交易中,执行能力和技术水平会得到很大的锻炼和提高,最终交易绩效也将取得明显提高。《精准获利K线战技》说的好:理性而熟练的操作技巧,是来自惨痛教训。某些人的反应敏锐,可以很快从这类失败中吸取教训。归纳出一套胜算较高的运作方法。可是并不是每个人都具有敏锐的反省能力,否则市场上就不会有那么多失败者。
六、在学习和交易中培养严格的自律和谦卑精神
常听说以交易为生很难,我想该是体现这以后的过程中。因为没有任何一行像保证金交易这样严格要求我们人格的完整性。
当我们千辛万苦有了不错的方法,用起来也得心应手时,却常常发现交易成绩还是不稳定,时好时坏,甚至损失惨重,造成这样的原因主要是缺乏自律和谦逊心态。一方面因为这样那样的原因没有按照计划执行,任由情形任意发展;一方面因为过于自大,或者固步自封,或者交易过量。回顾过去众多前辈,他们的惨败不是因为缺少方法,也不是缺少技巧,就是因为缺乏自律和对市场的谦卑,比如大作手。
不是吗?每个拥有丰富交易经验的人都或多或少拥有这样的经历,常常犯些十分愚蠢的错误,过后想起来都不能原谅自己。这就是《十年一梦》所说的那样:明明知道,却做不到。要做到理性,就要先承认非理性。只有承认自己的不足,才会去想完善措施,这个过程是一生一世的。惟独你的素养和境界都提高上去了,那么你的交易才是真正的交易,没有情绪,没有自大。正如前辈们所说的那样:交易好的人,为人也一定好!这个阶段可以学习交易前辈的回忆录,各行各业顶尖人物访谈以及陶冶情操方面的书,在学习他们的过程中,你会找到自己没能成功的真正原因。
我刚开始交易时,把交易想的十分简单,成为百万富翁只是近在咫尺的事情。经过7年学习和磨练后,我一次又一次感叹自己的不足和欠缺。当我们想取得交易大师的成绩时,请扪心自问一下,我们拥有了大师的心态,素养和技巧了吗?电影《泰坦尼克号》有这样一个画面:当那些男人把女人和孩子送到救生船后,他们没有一丝的恐慌和悲哀,继续安详的演奏,和船一起慢慢沉没。试问这个境界有几人能达?!这样的人做什么不能做成呢?!
七、永远保留学习的好习惯
无论你之前的交易多么成功,切不可放弃学习。一方面交易环节细致全面,市场也不断变化之中,就算人性本质不变,但人们的表达和应变方式却是与时俱进的,这一切都需要我们时时关注和领会;另一方面人是充满惰性的,稍微放纵和膨胀自己,就会给交易带来无比的祸害。
为保持最敏锐的头脑,要时刻关注市场最近观念和操作方法。这个可以从知名人士的相关文章和最近图书取得。另外要对之前的经典书籍不定期回顾和体会,随着自己水平的不断提高,你一定会有更深的感悟和启迪。
至此,这个帖子似乎可以结束了。但是,交易并不是这么简单的线条,这几个过程几乎没有明显的界限。这里,我只能说在交易的初级和中级阶段,方法和技巧更重要一些,在交易的高级阶段,心态和自律更重要一些。(转)
第二篇:Java学习路线
怎么学习Java,这是很多新手经常会问我的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西:
首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA)。J2SE,Java 2 Platform Standard Edition,我们经常说到的JDK,就主要指的这个,它是三者的基础,属于桌面级应用开发,这部分如果学得好很容易拓展J2EE和J2ME。J2ME,The Micro Edition of the Java 2 Platform。主要用于嵌入式Java,如手机,PDA等等。J2EE,Java 2 Platform,Enterprise Edition,就是所谓的企业级Java,适合企业的大型应用开发。
J2SE:
新手最初学习的时候先要从J2SE开始学起,所包含的内容主要分为:面向对象概念的理解、Java基本语法的学习,Java桌面图形界面应用程序的开发,掌握常用的Java API等(关键是要学会怎样查阅)。
重点:Java基本语法(循环结构,数据类型,数组,运算符等)、Swing,awt,事件机制、文件输入输出流处理等
难点:面向对象思想的理解(接口、类等)、线程、socket网络编程等
视频教程推荐:孙鑫的Java基础视频教程、张孝祥的Java基础视频教程,讲的都很细,而且这两位老师在教学方面都有很好的经验。
J2EE:
在学习了J2SE之后,你可以尝试着慢慢过渡到J2EE,当然,学习J2EE海需要很多非JAVA技术的支撑,比如数据库技术,网页编程技术等等,待会我会详细介绍这两方面的内容。J2EE有三个必学的框架,如果你说你学了J2EE,但又不会这三个框架的话,那会让人笑掉大牙,这三个框架分别是Struts、Spring和Hibernate,虽然这三个框架应用很广,但不代表这三个框架就代表了J2EE,J2EE还有很多其他的东西,比如EJB,作为一款重量级(此重量级不是指重量级选手那个意思,此重量级非彼重量级)框架,虽然这个应用慢慢的再被其他框架所取代,但EJB3.0的出现也给它带回一些生机,作为一个分布式应用的框架,也是大家要去学习和了解的知识。
当然,刚才说到J2EE包含的范围很广,即使我把我所了解的所有技术说出来,也并不能代表J2EE,这是一个很深很广的学问,需要大家以后再工作的时候慢慢去发现了。我所了解的还包括:
JDBC:Java数据库连接对象,基础中的基础,Hibernate也只是对它的封装而已 JNDI: Java 命名与目录接口,J2EE重要规范之一 EJBS: 上面已经提到过了
RMI: 提供远程调用方法的支持,主要用于程序分布式开发 JMS: Java消息服务,中间件技术
JAVA IDL: 提供J2EE平台与CORBA交互能力和互联能力的技术 JTS: 组件事务监视器 JTA: 事务划分的一个技术 JAVAMAIL: Java中的邮件技术 JAF: Java启动框架,没研究过 Log4j,一款日志处理的框架应用
Junit:单元测试的好帮手
freemarker、velocity:两款不错的模板引擎
与Flash的交互Flex:目前很多的SNS应用就是使用到了这个技术
Web services:想知道我们论坛天气预报的效果是怎么做的吗?请关注这个技术 SOA:面向服务架构,未来技术发展的趋势之一 ……
不过前面介绍到得这些都不是J2EE的基础,是属于框架应用级别的.要真正把上面说到的知识掌握好,还是的学习J2EE最核心的东西:JDBC、JSP、servlet和JavaBean,后面三个也是学习SSH的基础(StrutsSpringHibernate的简称).鉴于J2EE的内容太过复杂,建议大家最初只学习: JSP, servlet和JavaBean,等这个基础掌握好再把SSH学习了,再对其他J2EE技术有个大致的了解就可以出去找工作了。当然,找工作的前提除了把Java学习好,还会有一些其他的技术也是必须要掌握的。数据库技术:
数据库几乎是程序中不可或缺的一部分,在整个软件开发中更是占据了重要作用.数据库在整个软件中扮演的是地基的角色,你要修房子,就要先打好地基,你要做软件,就要先设计好的数据库.目前数据库几乎都是关系型数据库,代表的有: SQL Server,目前最新的好像是2008,我不是很喜欢追赶时髦,用的还是2005,不过也很不错了,在此之前还有2000.MySQL,最知名的开源数据库之一,我很喜欢它的小巧耐用,学过SQL SERVER数据库再学它,无师自通,易如反掌.ORACLE.甲骨文公司的产品,大型数据库,正版的一般公司买不起.只有看看了,不过现在Java开发60%都是会使用到这个数据库,再加上现在甲骨文已经把sun公司收购了,JAVA和ORACLE得关系更加暧昧,各位得多花些时间在这上面了.除了这些,你还应该了解一些桌面应用软件开发用到的数据库,比如说sqlite。你在制作安装程序的时候可以把这个数据库打包进你的安装程序。
网页编程基础:
网页编程基础要学的内容也比较多,但主要集中在以下这三个技术之上,大家每天看的各种样式的网页都是它们呈现的: HTML:超文本标记语言 CSS:层叠样式表
Javascript:浏览器客户端脚本语言
现在更是流行各种JavaScript库,比如:Jquery、ExtJs等,你要是会其中的某一个库的使用,找工作so easy。
J2ME:
如果你在学习了以上技术还不过瘾,可以再学习手机程序的开发,就我个人看来,开发手机程序技术其实蛮简单的,难点在于优化,比如怎么让你写的程序尽量的节约手机资源,“代码诚可贵,手机价更高“,所以不得不比PC机多考虑很多成本和实用性问题。J2ME的学习的话,切忌不要单纯的再模拟器上测试,一定要找真机测试,真机和模拟器的效果之间差别是很大的。更多手机开发技术,有兴趣的朋友可以和我一起探讨。
开发工具:
开发工具的选择主要还是看大家的习惯,我个人比较喜欢使用eclispe,功能很强大,也很好拓展其他的功能。当让初学你也可以选择JCreator,或者最好就直接用记事本。等你熟悉了Java代码之后,就可以使用JBuilder、eclispe或者netbeans这一类的工具了。
先说到这里先,以后大家一起完善这个帖子。尽量再给大家整理一些学习的资源在这里。也欢迎大家一起整理我文章中提到的一些技术资源和开发工具。最后,再和大家分享一句话:生命欣欣向荣,唯奋斗不息。也和大家分享一幅Java学习路线图:
第三篇:嵌入式学习路线
语言基础 1.C 与 C++ A.《c reference》 B.《c++ 编程思想》 C.《effective c++》 D.《more effective c++》 E.《effective c++ stl》 2.软件设计 A.《UML 2.0 Reference》 B.《设计模式-可复用的面向对象软件的基础》 C.《重构》 D.《修改代码的艺术》 E.《面向模式的软件体系结构》卷 1,卷 2,卷 3,卷 4,卷 5 3.Linux 开发基础 A.《鸟哥的 linux 私房菜》 B.《GNU make reference》 C.《Shell 编程》 D.《unix 高级环境编程》 E.《linux kernel development》 F.《深入理解 Linux 内核》 G.《Linux 驱动程序开发》 H.《Unix 网络编程》 I.《Linux 进程间通信》 4.嵌入式开发基础 A.《ARM 体系结构》 B.《ARM 程序分析与设计》 C.《ARM 嵌入式系统基础教材》周立功 D.《嵌入式操作系统μC/OS》 E.《嵌入式 Linux 基础教材》 F.《嵌入式系统设计》 G.《嵌入式硬件设计》 H.《Qt4 图形设计与嵌入式系统开发》 I.《嵌入式系统中的实时概念》 J.《实时设计模式》 5.专业选看 A.FPGA 设计 B.《高性能嵌入式计算》 C.数字图像处理,视频编解码基础 MPEG4,H.264,AVS D.Android,iphone,symbian 开发。
第四篇:大数据学习路线
大数据学习路线
年薪30W大数据学习路线图:
一、Hadoop入门,了解什么是Hadoop
1、Hadoop产生背景
2、Hadoop在大数据、云计算中的位置和关系
3、国内外Hadoop应用案例介绍
4、国内Hadoop的就业情况分析及课程大纲介绍
5、分布式系统概述
6、Hadoop生态圈以及各组成部分的简介
7、Hadoop核心MapReduce例子说明
二、分布式文件系统HDFS,是数据库管理员的基础课程
1、分布式文件系统HDFS简介
2、HDFS的系统组成介绍
3、HDFS的组成部分详解
4、副本存放策略及路由规则
5、NameNode Federation
6、命令行接口
7、Java接口
8、客户端与HDFS的数据流讲解
9、HDFS的可用性(HA)
三、初级MapReduce,成为Hadoop开发人员的基础课程
1、如何理解map、reduce计算模型
2、剖析伪分布式下MapReduce作业的执行过程
3、Yarn模型
4、序列化
5、MapReduce的类型与格式
6、MapReduce开发环境搭建
7、MapReduce应用开发
8、更多示例讲解,熟悉MapReduce算法原理
四、高级MapReduce,高级Hadoop开发人员的关键课程
1、使用压缩分隔减少输入规模
2、利用Combiner减少中间数据
3、编写Partitioner优化负载均衡
4、如何自定义排序规则
5、如何自定义分组规则
6、MapReduce优化
7、编程实战
五、Hadoop集群与管理,是数据库管理员的高级课程
1、Hadoop集群的搭建
2、Hadoop集群的监控
3、Hadoop集群的管理
4、集群下运行MapReduce程序
六、ZooKeeper基础知识,构建分布式系统的基础框架
1、ZooKeeper体现结构
2、ZooKeeper集群的安装
3、操作ZooKeeper
七、HBase基础知识,面向列的实时分布式数据库
1、HBase定义
2、HBase与RDBMS的对比
3、数据模型
4、系统架构
5、HBase上的MapReduce
6、表的设计
八、HBase集群及其管理
1、集群的搭建过程讲解
2、集群的监控
3、集群的管理
九、HBase客户端
1、HBase Shell以及演示
2、Java客户端以及代码演示
十、Pig基础知识,进行Hadoop计算的另一种框架
1、Pig概述
2、安装Pig
3、使用Pig完成手机流量统计业务
十一、Hive,使用SQL进行计算的Hadoop框架
1、数据仓库基础知识
2、Hive定义
3、Hive体系结构简介
4、Hive集群
5、客户端简介
6、HiveQL定义
7、HiveQL与SQL的比较
8、数据类型
9、表与表分区概念
10、表的操作与CLI客户端演示
11、数据导入与CLI客户端演示
12、查询数据与CLI客户端演示
13、数据的连接与CLI客户端演示
14、用户自定义函数(UDF)的开发与演示
十二、Sqoop,Hadoop与rdbms进行数据转换的框架
1、配置Sqoop
2、使用Sqoop把数据从MySQL导入到HDFS中
3、使用Sqoop把数据从HDFS导出到MySQL中
十三、Storm
1、Storm基础知识:包括Storm的基本概念和Storm应用
场景,体系结构与基本原理,Storm和Hadoop的对比
2、Storm集群搭建:详细讲述Storm集群的安装和安装时常见问题
3、Storm组件介绍: spout、bolt、stream groupings等
4、Storm消息可靠性:消息失败的重发
5、Hadoop 2.0和Storm的整合:Storm on YARN
6、Storm编程实战
第五篇:JAVA学习路线
1.JAVA学习路线
1.1 基础语法及JAVA原理
基础语法和JAVA原理是地基,地基不牢靠,犹如沙地上建摩天大厦,是相当危险的。学习JAVA也是如此,必须要有扎实的基础,你才能在J2EE、J2ME领域游刃有余。参加SCJP(SUN公司认证的JAVA程序员)考试不失为一个好方法,原因之一是为了对得起你交的1200大洋考试费,你会更努力学习,原因之二是SCJP考试能够让你把基础打得很牢靠,它要求你跟JDK一样熟悉JAVA基础知识;但是你千万不要认为考过了SCJP就有多了不起,就能够获得软件公司的青睐,就能够获取高薪,这样的想法也是很危险的。获得“真正”的SCJP只能证明你的基础还过得去,但离实际开发还有很长的一段路要走。
1.2 OO思想的领悟
掌握了基础语法和JAVA程序运行原理后,我们就可以用JAVA语言实现面向对象的思想了。面向对象,是一种方法学;是独立于语言之外的编程思想;是CBD基于组件开发的基础;属于强势技术之一。当以后因工作需要转到别的面向对象语言的时候,你会感到特别的熟悉亲切,学起来像喝凉水这么简单。
使用面向对象的思想进行开发的基本过程是:
●调查收集需求。
●建立用例模型。
●从用例模型中识别分析类及类与类之间的静态动态关系,从而建立分析模型。
●细化分析模型到设计模型。
●用具体的技术去实现。
●测试、部署、总结。
1.3 基本API的学习
进行软件开发的时候,并不是什么功能都需要我们去实现,也就是经典名言所说的“不需要重新发明轮子”。我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它。那么这些类中究竟提供了哪些方法给我们使用?方法的参数个数及类型是?类的构造器需不需要参数?总不可能SUN公司的工程师打国际长途甚至飘洋过海来告诉你他编写的类该如何使用吧。他们只能提供文档给我们查看,JAVA DOC文档(参考文献4.4)就是这样的文档,它可以说是程序员与程序员交流的文档。
基本API指的是实现了一些底层功能的类,通用性较强的API,如字符串处理/输入输
出等等。我们又把它成为类库。熟悉API的方法一是多查JAVA DOC文档(参考文献4.4),二是使用JBuilder/Eclipse等IDE的代码提示功能。
1.4 特定API的学习
JAVA介入的领域很广泛,不同的领域有不同的API,没有人熟悉所有的API,对一般人而言只是熟悉工作中要用到的API。如果你做界面开发,那么你需要学习Swing/AWT/SWT等API;如果你进行网络游戏开发,你需要深入了解网络API/多媒体API/2D3D等;如果你做WEB开发,就需要熟悉Servlet等API啦。总之,需要根据工作的需要或你的兴趣发展方向去选择学习特定的API。
1.5 开发工具的用法
在学习基础语法与基本的面向对象概念时,从锻炼语言熟练程度的角度考虑,我们推荐使用的工具是Editplus/JCreator+JDK,这时候不要急于上手JBuilder/Eclipse等集成开发环境,以免过于关注IDE的强大功能而分散对JAVA技术本身的注意力。过了这一阶段你就可以开始熟悉IDE了。
程序员日常工作包括很多活动,编辑、编译及构建、调试、单元测试、版本控制、维持模型与代码同步、文档的更新等等,几乎每一项活动都有专门的工具,如果独立使用这些工具的话,你将会很痛苦,你需要在堆满工具的任务栏上不断的切换,效率很低下,也很容易出错。在JBuilder、Eclipse等IDE中已经自动集成编辑器、编译器、调试器、单元测试工具JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档生成与更新等等,甚至可以把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码,让我们的开发变得更轻松。应该说IDE发展的趋势就是集成软件开发中要用到的几乎所有工具。
从开发效率的角度考虑,使用IDE是必经之路,也是从一个学生到一个职业程序员转变的里程碑。
JAVA开发使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种;而Eclipse、JBuilder占有的市场份额是最大的。JBuilder在近几年来一直是JAVA集成开发环境中的霸主,它是由备受程序员尊敬的Borland公司开发,在硝烟弥漫的JAVA IDE大战中,以其快速的版本更新击败IBM的Visual Age for JAVA等而成就一番伟业。IBM在Visual Age for JAVA上已经无利可图之下,干脆将之贡献给开源社区,成为Eclipse的前身,真所谓“柳暗花明又一村”。浴火重生的Eclipse以其开放式的插件扩展机制、免费开源获得广大程序员(包括几乎所有的骨灰级程序员)的青睐,极具发展潜力。
2.学习要点
确立的学习路线之后,我们还需要总结一下JAVA的学习要点,这些要点在前文多多少少提到过,只是笔者觉得这些地方特别要注意才对它们进行汇总,不要嫌我婆婆妈妈啊。
2.1勤查API文档
当程序员编写好某些类,觉得很有成就感,想把它贡献给各位苦难的同行。这时候你要使用“javadoc”工具(包含在JDK中)生成标准的JAVA DOC文档,供同行使用。
J2SE/J2EE/J2ME的DOC文档是程序员与程序员交流的工具,几乎人手一份,除了菜鸟之外。J2SE DOC文档官方下载地址:。
对待DOC文档要像毛主席语录,早上起床念一遍,吃饭睡觉前念一遍。
当需要某项功能的时候,你应该先查相应的DOC文档看看有没有现成的实现,有的话就不必劳神费心了直接用就可以了,找不到的时候才考虑自己实现。使用步骤一般如下:
●找特定的包,包一般根据功能组织。
●找需要使用类,类命名规范的话我们由类的名字可猜出一二。
●选择构造器,大多数使用类的方式是创建对象。
●选择你需要的方法。
2.2 查书/google->写代码测试->查看源代码->请教别人
当我们遇到问题的时候该如何解决?
这时候不要急着问别人,太简单的问题,没经过思考的问题,别人会因此而瞧不起你。可以先找找书,到google中搜一下看看,绝大部分问题基本就解决了。而像“某些类/方法如何使用的问题”,DOC文档就是答案。对某些知识点有疑惑是,写代码测试一下,会给你留下深刻的印象。而有的问题,你可能需要直接看API的源代码验证你的想法。万不得已才去请教别人。
2.3学习开源软件的设计思想
JAVA领域有许多源代码开放的工具、组件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等等多如牛毛。这些可是前辈给我们留下的瑰宝呀。入宝山而空手归,你心甘吗?对这些工具、框架进行分析,领会其中的设计思想,有朝一日说不定你也能写一个XXX框架什么的,风光一把。分析开源软件其实是你提高技术、提高实战能力的便捷方法。
2.4 规范的重要性
没有规矩,不成方圆。这里的规范有两层含义。第一层含义是技术规范,多到
http:///docs/codeconv/,中文的也有,啊,还要问我在哪,请参考3.2.2节。
2.5 不局限于JAVA
很不幸,很幸运,要学习的东西还有很多。不幸的是因为要学的东西太多且多变,没时间陪老婆家人或女朋友,导致身心疲惫,严重者甚至导致抑郁症。幸运的是别人要抢你饭碗绝非易事,他们或她们需要付出很多才能达成心愿。
JAVA不要孤立地去学习,需要综合学习数据结构、OOP、软件工程、UML、网络编程、数据库技术等知识。
软件工程的由来
据说上个世纪60年代的程序员都是天才,写程式就像写日记一样,吃过晚饭没事干随手就可以写几个出来玩,第二天还可以拿去卖钱。所以那时候程序员在大家眼中,跟那些搞美术,音乐的是一类的,被称为“艺术家”。
但事过境迁,就像任何人都不会嫌钱多一样,永远都不会有人嫌CPU快的。于是,随之而来的就是硬件的迅猛发展和越来越变态的软件。记得以前常去同学家拷游戏,通常几张软盘就可以搞定,而现在的游戏,两三张CD-ROM都算少的了。像如此庞大复杂的怪物,就算你是如何的天才,一个人肯定是搞不定的,否则,等你把程式写出来,人家Intel连奔腾N都开发出来了。既要开发大型的软件还要追求速度(这样才能赚钱),于是很自然地,合作的概念被提了出来。
在开始合作的初期,由于大家都习惯了当很有个性的“艺术家”,结果可想而知,一个是毕加索派的,而另一个是意大利印象派的,再加上一个画泼墨山水画的,要是像这样凑出来的东西都能不出问题的话,那么Bill早就转行了。所以,那时侯的大型软件,据说“蓝屏”比WINDOWS 98还多。
马克思告诉我们,万物都是从量变到质变的。随着问题的不断涌现,一些master们开始尝试去总结经验,并归纳了一些规范去指导软件的分析,设计,实现,测试,维护,人员交流协作,项目预算及时限控制等方方面面,这就是软件工程的前身。
软件工程到现在已发展了30多年,可以说是相当成熟的了。现在开发软件,据说都是一大帮人排排坐,按着一整套的规章制度来干活。于是,软件开发成了“工程”,程序员也就沦为“工人”了。
最初提出问题的是Dijkstra。他于1968年写给ACM的一封题为Goto Statement
Considered Harmful 的信中,指出了GOTO语句的负面作用,并提出了解决之道,其引发的一系列效应最终带来了软件工程的诞生。(信的原文可在www.xiexiebang.com/classics/oct95 上看到,不过,当你看到本文的时候,天知道它还在不在那里!)
软件工程的核心
无论是在上个世纪还是在现在,软件开发所涉及的工作基本上都没有变化,它们都起始于一个实际需要或某个灵感,然后就是分析,设计,编码,调试,维护。这些任务以某种方式动态地结合起来就构成了软件开发的整个过程,这就是所谓的“软件开发周期”。
但对于这些工作,具体怎样做,什么时候做,每个人都有自己的一套方式,甚至有的人有几套方式。这样,当几个人合在一起干活的时候,最终的结果就只能是一片混乱。所以就需要一套规则,大家都按规则来办事,问题就会少得多。好的规则就叫做规范,规范都是由一些master们根据经验总结的,又经过长时间的历练,不断地被补充修正,可以说都是精华,按照规范来干活,对于提高软件质量和工作效率自然大有帮助。
而软件工程,说白了,就是这样一套用于软件的团队开发,以提高软件质量和程序员工作效率为目的的规范。其核心就是,对于软件开发的5个重要组成部分:需求分析,设计,编码,调试,维护,如何组织这5个部分的工作,以及如何完成每一个工作。简单来说,就是对于总体的组织和对于局部的实现。
规范只是提供一个好的例子,以描述一种思想,具体到每一个环节怎样实现,对于不同的公司或团体则是各有千秋,因为根本就不可能存在一套放之天下皆可行的标准。就像C++,也只是提供了一套标准,不同的编译器都有各自的实现,对标准的支持程度也互不相同。所以,在不同的公司或团体中,尽管核心思想都是大同小异,但具体到每一个步骤,往往都是不相同的。我手上就有一份GB8567-88的文档模板,对于那些顶多只有几千行的小程序来说,假如真按上面的要求全写上了,简直就是一种折磨!据说,当前业界最权威的标准是CMM。
软件开发过程的组织
如何组织软件开发过程中的每一个步骤,就是软件开发周期模型要解决的问题。其实开发软件,就像是解决一个逻辑问题。想想自己平时是怎样写程序的。首先是要有一个想法,即我写的这个程序是要干什么的;然后就是对要实现的核心功能大概构思一种或多种实现方法,并从中选出一种自认为是较好的;接下来就是将涉及的各种主要或次要功能分成各个模块;最后就是分模块来编码和DEBUG。在我看来,除了第一步外,其余的步骤应该是一个循环的过程。在编码的过程中,你总是需要不断地回过头来修改原先的模块设计,甚至最初选定的实现算法。例如,最简单的情况是,你通常都会突然发现在两个成员函数中有相同的代码,这时,程序员的直觉告诉你,你应该为你的类再添加一个private成员函数并将公共的代码放于其中;又或者是,你突然发现一个模块中的某个功能具有很高的通用性,完全可以提取出来作为一个独立的功能组件,而你也确实应该这样做;要是倒霉一点的话,你很有可能会在最后调试的时候突然发现,你的程序跑得太慢了,连你自己都无法忍受。于是你找呀找,终于找到了80/20中的那段可恶的20,原来是用了一个O(N)的算法,这时你就得老老实实地换一个更好的算法。
总之,除非你是先知,否则,对于一个具有一定规模和复杂度的软件来说,在“设计—编码”这个过程中,实在有太多的不可预知性和变化性,你根本不可能全盘地把握住每一个细节。当然,这是建立在我现时的水平之上的观点。我不知道是否成为高手以后会有所不同,因为我身边没有那样的人。
既然软件开发是一个具有不可预知性和变化性的动态的过程,那么,对其每一个步骤的组织,即周期模型,就必须包容它的这种性质。
现在来看一下最古老,最经典,同时也是最倍受批评的瀑布模型。
瀑布模型是一种线性模型,其最大的特点就是简单直观。它将软件开发过程规划为“分析—设计—编码—测试—维护”的线性过程,也就是说,你必须首先把你的软件要干的每一件工作都分析得彻彻底底,再对每一个模块,每一个接口,事无巨细,都设计得非常完美,然后才开始编码的工作,并且在编码的时候就像在对着图纸砌模型,根本不用再回头作任何修改,当然,是在把所有的代码都写完以后才开始测试的。
整个过程,光想一下就觉得冒冷汗!
瀑布模型完全忽视了软件开发过程的动态变化。恐怕只有那些已经发展得非常成熟,且规模不大的系统,例如:用Access做后台,用VB画前端的数据库应用程序,才有瀑布模型一展拳脚的地方。
相比之下,现在常用的一些周期模型则更接近于人的自然思维,例如螺旋模型就是一种我比较喜欢的模型。
软件开发过程的实现
具体到每一步的工作要怎样完成,我前面已提到过,是非常灵活的,只要把握住大体的方向就行。在进行分析,设计,编码,调试,维护这几部分的工作的时候,最核心的就是文档的编写。文档的作用在于以下3个方面:一是可以帮助整理思路。把要完成的目标,系统的结构,每一个模块的功能等整理一下,然后分门别类地写下来,这样在开发的过程中,就有据可依,在需要回过头来修改设计的时候,也有证可考。二是便于交流。想象一下开会时的情形。一大帮子人争先恐后,激烈辩论,然后会终人散,思想灵感也就随之散了,结果是开了半天会,什么也没讨论出来。这就是后来会议记录被发明出来的原因。在脑子里的东西一多,就会散而且乱,用语言表达的时候,很容易会丢三落四,别人也很难把握住你的思想。但经过整理写在纸上以后,则会清晰得多,无论是别人还是自己,看起来都可以一目了然。三是可以作为以后维护时的参考资料。有一句名言:“笔和纸永远都比大脑可靠”,意思就是说,放在大脑里的东西说不准哪天就忘了,但写在纸上的东西,只要不发生什么意外,一般是丢不了的。当过了一段时间,你需要再回过头来修改你的程序的时候,你就会发现,你以前写下的文档实在太有价值了。别指望你的源代码,对于复杂一点的程序来说,单纯的源代码几乎会扼杀掉你所有的时间。
至于文档怎样写,教科书上大多都是一条一条列得满满的,就像一些地方政府的规章制度一样,其实大可不必,只要能满足需要就行。如果是在公司,则每个公司大多都有一套自己内部的文档模板,个人没有选择的余地。而对于像我这种业余的,写个程序除了练练手艺,无非就是供自己和亲朋好友玩玩,则根本没必要搞得过于复杂。以下就是我自己的一份文档模板的概要,麻雀虽小,但五脏俱全。
可行性分析 就是关于当前项目能不能干的分析结果。主要考虑的方面包括:是否能把这个项目开发出来;假如可以的话,预计需要多少时间,能否满足客人的时间要求;需要多少人力和资金的投入;最重要的是,这个项目能否赚钱,能赚多少。还要对可能存在的风险进行评估,例如,万一项目主管被车撞了要怎么办。当然,这对于我来说毫无意义,我在这里写上只是为了保持完整而已。
项目描述 这是在决定立项以后,对当前项目的一份扼要说明。必须包括以下几个方面:
(1)项目的名称或编号;(2)对客户方的描述;(3)对开发人员的描述;(4)工程任务的描述;(5)工程的输入和输出;(6)开发环境;(7)其他的附加条件。在这里,对工程任务的描述是从整体的角度来说的,例如:能对当前的象棋棋局进行分析并作出最优决策的人工智能系统。而工程的输入输出则可以这样写:输入当前的象棋棋局的数据描述;输出最优的棋步,包括选择行动的棋子和步法。
需求分析 就是对客户要求的功能的定义。注意这里用了“定义”这个词,这就意味着对客户需求的说明,尽管不一定要是形式定义,但也必须是精确,无歧义的。同时,还要列
出程序的功能模块和逻辑流程,即与客户的每一项功能要求对应的程序功能模块有哪些以及这些功能模块是按照怎样的逻辑步骤来逐项完成客户的要求的。注意这里所说的功能模块与编码时所说的程序模块的区别。对于客户的一个复杂的功能要求,一般可以用分治法分为一个或多个子功能,每一个子功能对应一个功能模块,而每一个功能模块则可以由一个或多个程序模块来实现。功能模块是建立在设计逻辑上的,而程序模块则是直接面向实现的。在用OO编程的时候,我通常以类作为程序模块划分的基本单元。综上所述,这个部分的文档必须包括3个部分:(1)客户需求的详细描述;(2)程序功能模块的划分以及其与客户需求的对应关系;(3)功能模块的逻辑流程。
软件设计 这就是对程序的每一个模块的详细设计的说明文档。其由以下几部分组成:
(1)程序模块与功能模块的对应关系和相关描述;(2)实现每个功能模块的程序模块的逻辑流程和组织结构;(3)对每一个程序模块的详细描述。这个部分的文档是改动得最多的,如果与螺旋周期模型结合,甚至需要循环地对每一个模块进行深入设计和细化,所以,为了便于管理,我通常都对每一个较复杂的模块都单独立一份文档。至于模块的流程图或结构图,一直都是我最头疼的问题,那一大堆琳琅满目的画法和符号往往令人无所适从。其实对于个人来说,只要能把意思表达出来,想怎样画都无所谓,关键是自己要有一套标准,别在这个图中,矩形表示过程,而在另一个图中,则是表示I/O。对每个符号表示的意思进行说明那是必须的,不然别人看起来会一头雾水。假如嫌麻烦的话,就干脆使用那些被大多数人认可的标准,例如UML图。但以后如果进到公司,还是老老实实地按公司规矩办事吧。
开发日志 我一直都认为这是文档中最有趣的部分。开发日志相当于编码阶段的文档,它的形式可以很随意,主要是记录一些在写程序时突然萌发的灵感,或对代码的一些微小的修改,或对程序结构的一些微小变动等,还要对上述这些修改变动作些说明,例如,为什么要改成现在的这个样子。别小看这些记录,它往往会成为你以后对程序进行维护时的重要依据。要知道,人的IQ,EQ等,是会随着人的生理和心理状态的不同而变化的。在某个时刻,你可能会灵光一闪,做出了一个非常伟大的改动,但过了一段时间,当你再回过头来重新阅读同一段代码的时候,你很有可能只记得在这里的改动是非常明智的,可是却无论如何也想不起其明智在哪里。这时,一份日志就会省却你不少的麻烦。
测试分析 用于指出程序存在或潜在的缺陷和错误,以及程序性能的数字描述。其包括几个部分:(1)对被测模块的描述;(2)测试人员;(3)对该模块每个功能的测试的详细描述;(4)指出当前存在或潜在的问题。在测试描述中应该包括输入的数据集和输出的结果,还有运行的时间等。对于公司来说,对测试分析的要求是非常严格的。但对于我个人来说,我只是将其作为一份模块测试的文字记录,以防会忽略掉某些已知的缺陷和错误,以及对一些核心模块的时间和空间效率进行简单的测试,以便日后翻查。