菜鸟 技术入门指南

时间:2022-11-29 09:39:31 作者:加菲猫 综合材料 收藏本文 下载本文

“加菲猫”通过精心收集,向本站投稿了7篇菜鸟 技术入门指南,下面是小编收集整理后的菜鸟 技术入门指南,供大家参考借鉴,欢迎大家分享。

篇1:菜鸟 技术入门指南

一 序言

学东西如果找到好的方法,会事半功倍,反之则事倍功半了。 的入门学习也是如此。

因此我总结了一下我个人的一些学习方法与心得(当然有一些方法也是网上的朋友教我的),希望能给刚入门的朋友一些参考,使其少走弯路。如果您是一只老鸟,觉得这个教程对您毫无帮助,那么请您跳过此教程,毕竟不是所有人都像您一样掌握了良好的学习方法,那些迷惑中的菜鸟,正需要这样一个教程!

以下序号不分先后,希望大家也能拿出你们自己的心得体会来补充。

二 具体hack学习方法

1 利用搜索引擎

这是一种高效的学习方法,相信每个高手都从这里受益匪浅,这也是菜鸟最好的老师,她随叫随到,言听即从,力量强大。强烈建议大家在遇到问题前,先请教一下www.google.com/

1)公共搜索引擎

比如大名鼎鼎的Google(别告诉我你不知道哟),还有百度等。利用这类搜索引擎,你几乎可以搜到任何你想要的东西,比如:文章,教程,软件,安全站点,安全论坛,一切的一切。

所以以后不要再问诸如3389是什么端口(去搜一下3389+空格+端口+空格+漏洞);流光在哪里下载(去搜流光+空格+工具+空格+下载);ipc$怎样利用(去搜ipc$Content$空格+入侵+空格+教程)等完全可以向搜索引擎请教的问题,如果你非要问一下,没关系,你会得到简单明了的答案:‘去搜!!’请不要埋怨这位高手不耐心,面对千百个这样的菜鸟问题,他这么做已经很人道了。

因此可以看出,掌握良好的学习技巧对菜鸟来说是多莫重要,不少菜鸟就是因为像这样到处碰壁后,最终放弃了hack学习。

*不会利用搜索引擎对菜鸟来说是致命的,你将举步为艰,反之,你将进步神速。

2)站点内部/论坛的搜索引擎

使用方法上大同小异,比如你现在需要一篇教程或是一个hack软件,而你又觉得google上搜出来的东西太杂或觉得没有专业性,那么这时候你就可以到各大安全站点或论坛上去搜索,比如www.cnhacker.org/;安全焦点; ;小榕的论坛;www.20cn.org/等,在这些站点的内部引擎里搜到的教程或软件,一般都是比较有保证的。

*如果你是一只想飞的菜鸟,那么就学着去搜索吧。

2 阅读书籍

hack学习中,书籍是必不可少的,这个我不用多少,只是希望大家能有选择的购买书籍,找到最适合自己的那一种。

1)基础知识类:一般来说菜鸟的基础是比较差的,甚至一些基本常识都不知道,因此有几本基础知识的书作为参考是必不可少的,比如关于TCP/IP,网络,操作系统,局域网等,甚至是关于DOS,windows基础的书都是很有必要的。在读书的过程中,你一定会遇到许多不懂的名字或术语,该怎么办呢?白学了??去搜索吧!!

注意:此类书籍关键在于它的通俗易懂性,不要追求多莫深入,对菜鸟来说,急于求成是最要不得的。因为我还是学生,因此学校的图书馆是很好的书源(主要是免费),我几乎借遍了所有hack方面书籍,如果你已经不是学生,建议你到各大图书馆去借,因为这样要比买书不知省多少钱,

*菜鸟准备2-4本即可

2)大众杂志类

此来书籍的精华在于它的合订本,比如电脑报合订本,电脑应用文萃合订本等等,就相当于一个大百科,分类详细,内容丰富,每年买上一两本就足够了,你会从中受益匪浅。

注意:此类书籍的优势在于内容全面,各个方面都能涉及到,查找方便,但因其定位在大众杂志,内容相对比较基础,适合菜鸟做全方位了解。

*菜鸟准备1-2本即可

3)hack杂志类

比如《 防线》,《 X档案》等,此类杂志专业性强,内容由浅入深,讨论详细,并附送光盘,对比较富裕的朋友来说是个不错的选择,当然,你也可以到网上找一些电子版,下载观看。

注意:这是一种比较好的入门方法,许多朋友都是在无意中买了此类杂志后,才开始对hack技术感兴趣的。

*菜鸟不定期购买即可,如果你经济确实不富裕,可以放弃,或找电子版观看

3 察看教程

教程大部分发布于网上,你可以到各大安全站点的文章系统中去找,或者去相关论坛或Google搜索。这是一种令人兴奋的学习方法,一篇好的教程能让你进步飞快,如果你能找到一些专业而又详细的教程,你的hack学习将会事半功倍,因为教程比书籍读起来更亲切,而且语言通俗易懂,寻找方便(如果是书籍,那要买多少本啊),而且他最大的特点在于百家争鸣,对于同一个问题可能有很多的教程,你可以一一观看,从中总结出最精华的部分。

注意:由于任何人都可以发布教程(当然,好的安全站点是有验证机制的),所以一些个别教程并不能保证其正确性,或者不能保证在任何情况下都具有正确性,因此在阅读时要有所取舍。还有,一些老的教程其内容或所涉及软件可能不再适用,请大家注意这点。

另外,现在比较流行动画教程,这种教程的优点在于直观,对菜鸟中的菜鸟帮助很大(许多菜鸟只看的懂动画教程),但我个人更倾向于文字教程,原因:连文字教程都看不懂,还做什么hacker,看动画教程只会让你越来越懒,而不愿再去思考(个人观点)。当然,有些文字教程写得的确很烂,读了以后让人更晕。

*这是菜鸟必须掌握而且要会灵活运用的学习方法

4 在论坛上学习/交流

论坛是菜鸟成长必不可少的基石,如果你能找到一个管理严格,技术含量高,充满活力的论坛,那么我真的要祝贺你,因为你将在这个论坛中学到许多许多东西。那么如何使用一个论坛呢?如下:

1)留意精华版:这是一个论坛的精华所在,所有一级棒的帖子几乎都在这里了,慢慢的读吧,你会收获很多。

2)提问前先搜索:这是许多菜鸟忽略的问题,如果你不注意,将浪费你很多时间,原因是这样的:菜鸟一般所提的问题就那么几十个,在一个稍微老一些的论坛上基本上应该都有人提过了,而且是不止一次的提过了,因此你事先搜索一下,应该会搜到不止一篇的帖子,在这些帖子的回复中,应该有你想要的答案,但如果你不去搜索而直接提问,那么你将花费一定的时间去等待回复,这就是浪费,况且大部分高手都反感提问简单而重复的问题,那么你得到的回复也许将更加粗略而潦草,这更是浪费。所以,在提问前恳请你,现搜索一下问题吧!!

篇2:职场菜鸟入门第一击

职场菜鸟入门第一击

眼下,又有一批大学毕业生走出学校,步入职场,有一点是他们必须要学习的,就是与“老手”过招!下面总结了一些职场“恶人”的个性特征,给初入职场的菜鸟以警示!

■倚老卖老型

王辉是一家知名广告公司的新职员。有一个广告客户,要做一个片子。整个片子由很多组镜头连接而成,工作量很大。客户找他们单位一个比较有资历的人做,承诺给他2000元提成,可这位“老人儿”嫌钱太少,觉得这个片子太费事,就推给王辉做。王辉想,自己是个新人,这样的机会也很难得,就欣然接受了。经过几天的苦战,客户对做出来的样片非常满意,决定跟他们公司做这个项目。这时候,那位“老人儿”又借口王辉不熟悉业务上的事,让王辉把做好了的样片交给他,他去跟客户洽谈。项目谈成后,那个人拿了3000元的提成,却只给了王辉500元。

专家分析

新员工入职以后,如果企业没有提供实际有效的入职培训,在职业的初期,新员工往往需要从老员工身上学习更多的业务知识和业务技能,这个阶段可以简单地理解成新员工“交学费”,老员工“教本领”,也可以认为是一个“拜师傅”,一个“带徒弟”。尽管可能没有正式的仪式,但潜意识里彼此可能都有一点这样的心理认同。此时如果老员工“倚老卖老”,而本身职业素质又不高,极容易引起新员工的反感。至于这个案子中的王辉,暂时只能当作交了一次学费吧!

■爱打小报告型

王波在一家航空公司做机票受理员,和她同一售票柜台的是一个同龄人,只是比她进公司早了一年多,

由于工作不久,王波有些业务上的东西还是不太熟练,有时也会向那个同事请教。但是,当王波出现错误的时候,那个同事就背地里给上司打小报告,说王波的坏话。

专家分析

这类人的深层心理需要是满足心理上的平衡,一方面他们会认为自己是有理的`,把别人或其他事情的错误报告上司是正确的做法,是为了公司好;还有一类人可能有些报复的心理,自己感觉受到伤害的时候,会通过其他的方式进行报复。

■心胸狭隘型

侯小姐大学刚刚毕业,但是已经经历过一次单位的变动。“离开原来的单位实在是迫不得已。”侯小姐的开场白简单中透着一丝无奈,“实在是因为被一个元老级的同事挤对得无法忍受!”作为刚到单位的新人,侯小姐表现得很积极,她的努力也换来了回报,领导的赏识就是对她能力的认可。然而,积极的表现在为自己赢得了领导的信任的同时,也招来了一些同事的嫉妒,其中更有一位是公司的元老级人物。不知道是出于对侯小姐能力的嫉妒还是因为不接受她干练的作风,总之那位元老总是处处挑侯小姐的毛病,不仅在私下的时候没有好脸色,在公司的会议上也是毫不留情地当面斥责她,让她完全没有一点回旋的余地。而且,作为公司的元老,那位同事也在公司内部建立起一层属于自己的关系网,这个圈子里的人都陆续开始排斥侯小姐,原来一些关系不错的同事也慢慢开始疏远她,最后迫于无奈,她选择了辞职。

专家分析

侯小姐遇到的问题其实是一个如何处理人际关系和全局意识的问题,她工作环境中出现的问题,首先应从全局来看,除分析自身的问题外,还应和公司元老及其他同事多沟通,求同存异。自己的能力即已得到领导和同事的认可和信任,就应从协作上和同事多交流多沟通,善于和团队中不和睦的人相处,不光独立工作能力强,还要倡导团队精神。这样会赢得元老和同事的尊敬,如现工作是自己喜欢的工作,草率的离职对自己职业生涯的发展很不利。

篇3:创业入门指南

1、市场调研宜先做。

没有调查就没有发言权。在确定创业方向之前,如果做些市场调查,就能够大大减少失败的几率,提高成功的可能性。有些地方虽然看起来很小,但是通过市场的调查和研究后却发现有一个很广阔的市场。刘强多年来一直在广州打工,直到4年前江西老家的父亲得了重病,刘强为了回家照顾父亲,便开始筹划着回家创业。但由于自己是农民出身,没有什么文化,身上也只有几万块本钱,到底要选择什么项目呢,刘强苦思冥想了好几天。最后他回到老家进行市场调查,发现在广州家喻户晓、大受市民喜爱的河粉,在自己的家乡小镇上却还没有出现过,于是刘强又回到广州买了一台河粉机械,最终他获得了比较丰厚的收入。

2、生活当中勤琢磨,摸着石头能过河。

有人说,我也进行过调查,发现市场上商品琳琅满目,要什么就有什么。我们想到的项目别人早就想到了,该搞的别人都搞起来了,没有我们的市场了。其实不然。只要是生活,人们就有生活需求,发现这种需要,关键是我们要细心,肯思考。刘玺家附近有两所学校,有一天他看到两个同学为了一本书争得不可开交,于是突发奇想开了间书屋。开始他把家里原先积累的书拿出来摆到学校门口出租,因为书旧而没有生意。是退还是进?他们硬着头皮按照学生们开列的书单到南京进了1000多元的新书,结果学生发现大多是盗版的,不愿意看。一周之后,刘玺再次去南京进货,这次他成功了。

3、“吃穿住用行”五字,抓住一个能致富。

没有专业知识,我们干脆从人们的衣食住行开始做起。许多人尤其是老一代经商的人都知道,吃是永恒的需要,这就是永恒的市场,当然就有永恒的生意。人要吃的东西很多,光是这“吃”字就可以做出很多文章来。不光是吃,在人们的其它基本生活需要方面,我们也同样可以做出很多文章来。

4、充分发挥专业优势。

许多工人下岗失业,并不是因为自己没有技术或技术不佳,而是由于非主观的种种原因,无法在市场经济中发挥作用。只要我们自己主动到市场中去,将自己的专业优势或技术优势与人们的需要结合起来,必定能大有作为

篇4:搭讪入门指南

搭讪怎么开场呢?许多男生纠结于怎么开始,那么就一起来学一学搭讪入门指南吧。

直接开场适用于完全没有说话理由的场合,比如目标是在大街上匆匆行走的美女。经典话语是:“你好,我想认识你。”话虽生硬但却非常实用。原因一,当今社会上推销和骗子太多了,所以必须先表明你的来意,否则人家没有安全感。原因二,我们的文化婉约了几千年,所以有时直抒来意反而会成为一种魅力。原因三,搭讪讲究个眼缘,直接开场可以让彼此都快速筛选。

间接开场也叫自然开场,顾名思义就是从一个自然的话题开始交谈,适用于party、夜店、书店、展会、旅行途中、朋友的婚礼。因为当你们必须共处一个空间的时候,直接开场一旦不成功就会让双方都陷入尴尬,而街搭失败,大家可以马上离开。

1.商场搭讪选择人流少、相对开阔的地方,直接跑过去说,“你好,我想认识你”,行就行,不行就拉倒。

2.街头搭讪不要在四下无人的地方出手,尤其是晚上,尽量找有路灯的地方再开口,显得你心胸坦荡光明无比。还是直接开场,“你好,我想认识你”,行就行,不行更要拉倒,因为MM在街头比在商场安全感要低。

3.食堂、自习室、咖啡厅、快餐厅搭讪直接过去,先坐下,然后问:“你好,我其实是想认识你的,我能坐在这里吗?”行就行,不行起身就走。

4.校园搭讪直接、间接开场都可以。比如,搭讪一个背着画板的MM,间接开场可能就会先从美术聊起,而直接开场则还是先表明来意,确定MM态度友好之后,再聊画画。我个人偏爱直接开场,因为如果对方对我没兴趣,她不必碍于礼节陪我寒暄。很多菜鸟有一个误区,以为直接开场会降低自己给别人的第一印象,而间接开场能让自己有更多表现内在美的机会。其实间接开场的唯一好处就是不让MM尴尬,对你自己的形象几乎没有什么修饰作用。

5.旅行途中的搭讪因为时间比较充裕,可以把一步分成两步走,创造最佳时机。比如在火车上,吃饭和去卫生间都是好机会,通道里谦让一下,排队时微笑一下,过会儿再遇到,自然就可以聊天了。

再次强调,这样的意义还是为了让MM更加不会尴尬。

我的原则是,有条件的话尽量避免尴尬,实在做不到,那也就不客气了。

6.公交车、地铁车厢里、飞机上搭讪最好用间接开场,比如,“你的杂志能借我看看吗?”“你的手机很漂亮。”而直接开场的麻烦在于,被拒绝时不能立即跳车(跳伞),你和MM面子都将很不好受。所以,如果实在找不到话题,可你又非常想认识她,那就跟踪她一起下车(下飞机),然后在路上用直接开场。

7.书店里的搭讪先小声问一句:“这本书好看吗?”通常会有三种反应:一,对方态度积极,那一路聊下去就行了。二,对方露出迟疑迷惑但也并不拒绝的神态,那么你马上重拾直接开场“其实,我就是来想认识你的。”三,对方回答冷淡、爱搭不理,你直接闪人就行了。

8.婚礼或者社交场合的搭讪一定不要直接开场,因为这样不仅会让搭讪对象尴尬,更重要的是还会影响活动发起者的形象。稳妥的搭讪方式是自我介绍开场,比如:“我是新郎的中学同学,你是哪拨儿的呀?”

篇5:官方推荐浅谈菜鸟日语入门经验

如果你刚刚踏入日语学习的门槛,还处于日语入门的菜鸟阶段,我想你已经饱尝了日语入门阶段为各种假名、助词苦苦打基础阶段的心酸,日语想比世界其他语言来说,算是比较难学的一门语言。如果你是从看动漫,日剧到现在的日语入门阶段,现在我只想叫醒你,如果你想要靠著多看日剧、多听日文歌等方式自学日文,到最後恐怕也只是学了一堆单字而已。日语入门阶段就是靠着刻苦勤奋的练习,背诵,记忆,除此之外别无其他捷径可寻。

下面就来说一说,在日语入门阶段比较有效的学习方法,帮助大家更快更好的突破这一阶段的学习。

一、 日语文法

文法当然不能靠死背,而是像算数学一样要理解其中的逻辑。比如说,5*3=8和5*3=2的式子中,你一看就知道空格中要填上加号和减号,日文的单字就像式子前后的阿拉伯数字,助词就像加减乘除的运算符号,中间放上什么助词,句子的意思就完全不同。因此在学文法中抓住助词的用法,就能事半功倍。抓住助词,也是练习写作的秘诀,因为助词是使句子越接越长的关键,而写文章就是从一句一句开始增加的。

二、日语假名

很多初学者片假名会记不起来,有一个好的方式是,找任何一本日文课本,每天挑其中一课抄课文,但抄的同时把课文的平假名翻成片假名,

备考资料

每天抄的课文不同,就等于每天用了一次平假名、片假名的转换。

三、 日本文化

其实在学日文之前,你一定要有的心理准备是,日文是一个受到文化影响非常大的语言。如果你对日本文化不够了解,即使你的日文已有一定程度,也会因此丧失许多与日本人练习日文的机会。

大家都知道日本是个非常重视礼仪的国家,你如果有机会跟日本人共事,就会发现跟他们相处非常辛苦,不同性别、不同职务、位阶和彼此关系不同,在语言交谈与行为上都有不同的份际。而无论是男生或女生,用日文讲话时语气、腔调也都应该要尽量柔软、谦卑,所以在与日本人交谈时千万不能像平常讲中文一样,否则即使你讲的很正确,也会因为你的口气而让人讨厌。如果你希望能获得更多交谈、练习机会,以及希望对方能大方给予你建议,你就要学习去观察日本人的互动、礼貌的细腻之处。

或许你会怀疑,日本人的礼貌习惯真的会影响日文说法、甚至是你的学习?我举个例子,当日本人有事想问你时,都喜欢用否定问法:「可以这N做吗?」都会用「不可以这N做吗?」「你喜欢我吗?」也会用「你不喜欢我吗?」来问。日本人会用这种用法,就是担心万一对方的答案刚好是否定的,那N对方就可以直接点头示意,而不需要摇头。日本人不希望对方有一丁点为难、不知如何是好的感觉,简单来说,让对方摇头就是不礼貌、不体贴的表现。无论你是初学者或进阶学习者,学日文和学英文的方式和态度截然不同,深入了解日本文化,我想是学好日文最重要的关键之一。

篇6:论文写作入门指南

论文写作入门指南

1写论文投稿,要么投期刊,要么投会议。

期刊论文质量一般要求会高一些,审稿周期也比较长,快的半年,慢的一年也是有的。越是顶级的期刊,内容越是精雕细刻,时间也就越长。

会议论文讲究时效性,审稿也属于比较宽松的。但是再烂的会议收稿率也在40%。好一点的会议,15%的。一般要选择收稿率在30%以下的会议,才对得起自己交的注册费。各个学校和实验室根据方向不同,有各自比较看重的会议。国内比较重视SCI/EI,关系到成果统计,不纯粹看会议本身的声誉。不排除有很牛的会议,但是无法SCI/EI检索的。

2初学者可以考虑从写些会议论文开始训练。

但是就写论文而言,首先要明确这实际上是一次战斗,非生即死。作为总是写论文的团队,有必要制定一些“军规”,好保证自己的论文质量在某一个水平线以上。从个人而言,有必要学习一些“战斗常识”,好让自己的努力不至于成为“分母”。

3最重要的是要知道到底有哪几类读者会看到你的论文,了解一下他们各自的行为习惯和价值取向对你写论文没有坏处。

他们有:

(1)花3-5分钟就看完论文的评审者,他们很可能直接凭借5分钟的印象判断是否把你直接枪毙掉,还是继续往下读。

(2) 以后查阅资料的小朋友,你发表的文章是后来人们的literature,对小朋友们有价值的是你为什么研究这些问题,以及你研究了什么,作到了什么程度。他们阅读的时间1-5分钟不等。

(3)仔细推敲你文章的人,如果你写的是pioneer的文章,有特色的文章,那么你要注意了,你的文章一定会被仔细推敲。各个细节都不能马虎。文章中的核心段落是你需要持续雕琢的,而且这些段落是写给真正的知音和研究伙伴,要慎重对待人家的阅读体验。

(4)你的师弟师妹,在未来他们需要写论文的时候,你的论文将作为他们效仿的对象。他们会据此判断你的水平以及老板要求的严格程度决定自己是精益求精还是敷衍了事。

(5)看最近几年的趋势,你有理由在阅读者队伍中加上你未来的老板、同事、下属以及大众媒体等等。如果你感到疑惑,请看看最年轻的市长是怎么被曝光的。

由此你可以想到在网络化如此发达的时代,“文章千古事,一篇永流传”对你未来的职业生涯意味着什么。即便你不进行学术抄袭,如果你一旦成名,你孩提时的作品也会被检查、被细读、被品评。

4论文是创新工作的呈现。

论文选题的模式往往也对应着创新工作的几种模式。创新以无法为法,境界高的,摘叶飞花,皆可伤人,暂且按下不表。

就初学而言,有必要清晰论文有几种常见模式:

(1)独孤九剑之破剑式,

为专门找前人工作中的'破绽进行的。无招可循,见招拆招是其妙。

(2) Mouse+brick式。

互联网公司里面的鼠标+砖块模式,实际上是互联网新方法与传统商业模式的结合。在论文中也有这样的,例如最近有把生物界的知识用到信息领域的。

(3)民工工作汇报式。

计算机界论文的框架看上去千篇 一律,行家能看到细微处的差别,但一般人很难区分论文的高下,因此整个行业比较看重solid work,如果是真正作了实现方面工作的,结合实现谈观点,能够一定程度增加印象分。

(4)对比式。

别人提出过一个某某算法,你再进行改进,提出一个某某算法,是最常见的。但是作literature的时候要小心,如果你专门拣“软柿子”捏,行家看了以后,也很感到很不忿,而毙掉你。

(5)结合式。

A工作有人做过了,B工作也有人做过了。但A+B同时发生或相互结合的工作没有人作过。

你拿来作一作,说创新吧,有一点,当做练手吧。说意义吧,也不好说不大,case by case吧。

5论文的内部构造一般有如下模块。

a.提出问题(general)

b.系统描述

c.问题在系统框架内的细化描述

d.解决问题的思路概述-e.解决问题的细节

f.实验/仿真设计

g.实验/仿真结果呈现与分析

h.结论以及未来工作

篇7:MongoDB 入门指南、示例

一、MongoDB简介

MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种,它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。Mongo使用C++开发。Mongo的 地址是:www.mongodb.org/,读者可以在此获得更详细的信息。

小插曲:什么是NoSql?

NoSql,全称是 Not Only Sql,指的是非关系型的数据库。下一代数据库主要解决几个要点:非关系型的、分布式的、开源的、水平可扩展的。原始的目的是为了大规模web应用,这场运动开始于2009年初,通常特性应用如:模式自由、支持简易复制、简单的API、最终的一致性(非ACID)、大容量数据等。NoSQL被我们用得最多的当数key-value存储,当然还有其他的文档型的、列存储、图型数据库、xml数据库等。

特点:

高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

面向集合存储,易存储对象类型的数据。

模式自由。

支持动态查询。

支持完全索引,包含内部对象。

支持查询。

支持复制和故障恢复。

使用高效的二进制数据存储,包括大型对象(如视频等)。

自动处理碎片,以支持云计算层次的扩展性

支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序。

文件存储格式为BSON(一种JSON的扩展)。

可通过网络访问。

功能:

面向集合的存储:适合存储对象及JSON形式的数据。

动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。

完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。

查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。

复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。

高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)

自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。

适用场合:

网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。

缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源 过载。

大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。

高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。

用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。

二、下载和安装配置

1、下载mongoDB

下载地址:www.mongodb.org/downloads

选择合适你的版本

相关文档:www.mongodb.org/display/DOCS/Tutorial

2、安装mongoDB

A、不解压模式:

将下载下来的mongoDB-xxx.zip打开,找到bin目录,运行mongod.exe就可以启动服务,默认端口27017,db保存的路径是系统C硬盘目录的根目录的/data/db目录。也就是说,如果你的mongoDB-xxx.zip在E盘,那么你需要在C盘下建立data/db目录。mongoDB不会帮你建立这个目录的。

然后运行mongo即可连接到test数据库,你就可以进行数据操作。运行help显示帮助命令行。

B、解压模式

将下载下来的mongoDB-xxx.zip解压到任意目录,找到bin目录,运行mongod.exe就可以启动mongoDB,默认端口27017,db保存的路径是当前zip所在硬盘目录的根目录的/data/db目录。也就是说,如果你的mongoDB-xxx.zip在E盘,那么你需要在E盘下建立data/db目录。mongoDB不会帮你建立这个目录的。

然后运行mongo即可连接到test数据库,你就可以进行数据操作。运行help显示帮助命令行。

3、简单测试

>2+4

6

>db

test

>//第一次插入数据会创建数据库

Fri May 20 16:47:39 malformed UTF-8 character sequence at offset 27

error2:(shellhelp1) exec failed: malformed UTF-8 character sequence at offset 27

>db.foo.insert({id: 2011, userName:'hoojo', age: 24, email:“hoojo_@126.com”});

>db.foo.find();

{“_id”: ObjectId(“4dd62b0352a70cbe79e04f81”),“id”: 2011,“userName”:“hoojo”,

“age”: 24,“email”:“hoojo_@126.com”}

>

上面完成了简单运算,显示当前使用的数据库,以及添加数据、查询数据操作

三、DB shell操作数据库

shell命令操作语法和JavaScript很类似,其实控制台底层的查询语句都是用JavaScript脚本完成操作的。

? 数据库

1、Help查看命令提示helpdb.help();db.yourColl.help();db.youColl.find().help();rs.help();2、切换/创建数据库>use yourDB;当创建一个集合(table)的时候会自动创建当前数据库3、查询所有数据库show dbs;4、删除当前使用数据库db.dropDatabase();5、从指定主机上克隆数据库db.cloneDatabase(“127.0.0.1”);将指定机器上的数据库的数据克隆到当前数据库6、从指定的机器上复制指定数据库数据到某个数据库db.copyDatabase(“mydb”, “temp”, “127.0.0.1”);将本机的mydb的数据复制到temp数据库中7、修复当前数据库db.repairDatabase();8、查看当前使用的数据库db.getName();db;db和getName方法是一样的效果,都可以查询当前使用的数据库9、显示当前db状态db.stats();10、当前db版本db.version();11、查看当前db的链接机器地址db.getMongo();

? Collection聚集集合

1、创建一个聚集集合(table)db.createCollection(“collName”, {size: 20, capped: 5, max: 100});2、得到指定名称的聚集集合(table)db.getCollection(“account”);3、得到当前db的所有聚集集合db.getCollectionNames();4、显示当前db所有聚集索引的状态db.printCollectionStats();

? 用户相关

1、添加一个用户db.addUser(“name”);db.addUser(“userName”, “pwd123”, true);添加用户、设置密码、是否只读2、数据库认证、安全模式db.auth(“userName”, “123123”);3、显示当前所有用户show users;4、删除用户db.removeUser(“userName”);

? 其他

1、查询之前的错误信息db.getPrevError();2、清除错误记录db.resetError();

四、Collection聚集集合操作

? 查看聚集集合基本信息

1、查看帮助db.yourColl.help();2、查询当前集合的数据条数db.yourColl.count();3、查看数据空间大小db.userInfo.dataSize();4、得到当前聚集集合所在的dbdb.userInfo.getDB();5、得到当前聚集的状态db.userInfo.stats();6、得到聚集集合总大小db.userInfo.totalSize();7、聚集集合储存空间大小db.userInfo.storageSize();8、Shard版本信息db.userInfo.getShardVersion()9、聚集集合重命名db.userInfo.renameCollection(“users”);将userInfo重命名为users10、删除当前聚集集合db.userInfo.drop();

? 聚集集合查询

1、查询所有记录db.userInfo.find();相当于:select * from userInfo;默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize = 50;这样每页就显示50条记录了。2、查询去掉后的当前聚集集合中的某列的重复数据db.userInfo.distinct(“name”);会过滤掉name中的相同数据相当于:select distict name from userInfo;3、查询age = 22的记录db.userInfo.find({“age”: 22});相当于: select * from userInfo where age = 22;4、查询age >22的记录db.userInfo.find({age: {$gt: 22}});相当于:select * from userInfo where age >22;5、查询age < 22的记录db.userInfo.find({age: {$lt: 22}});相当于:select * from userInfo where age < 22;6、查询age >= 25的记录db.userInfo.find({age: {$gte: 25}});相当于:select * from userInfo where age >= 25;7、查询age <= 25的记录db.userInfo.find({age: {$lte: 25}});8、查询age >= 23 并且 age <= 26db.userInfo.find({age: {$gte: 23, $lte: 26}});9、查询name中包含 mongo的数据db.userInfo.find({name: /mongo/});//相当于%%select * from userInfo where name like ‘%mongo%’;10、查询name中以mongo开头的db.userInfo.find({name: /^mongo/});select * from userInfo where name like ‘mongo%’;11、查询指定列name、age数据db.userInfo.find({}, {name: 1, age: 1});相当于:select name, age from userInfo;当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。12、查询指定列name、age数据, age >25db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});相当于:select name, age from userInfo where age >25;13、按照年龄排序升序:db.userInfo.find().sort({age: 1});降序:db.userInfo.find().sort({age: -1});14、查询name = zhangsan, age = 22的数据db.userInfo.find({name: 'zhangsan', age: 22});相当于:select * from userInfo where name = ‘zhangsan’ and age = ‘22’;15、查询前5条数据db.userInfo.find().limit(5);相当于:select top 5 * from userInfo;16、查询10条以后的数据db.userInfo.find().skip(10);相当于:select * from userInfo where id not in (select top 10 * from userInfo);17、查询在5-10之间的数据db.userInfo.find().limit(10).skip(5);可用于分页,limit是pageSize,skip是第几页*pageSize18、or与 查询db.userInfo.find({$or: [{age: 22}, {age: 25}]});相当于:select * from userInfo where age = 22 or age = 25;19、查询第一条数据db.userInfo.findOne();相当于:select top 1 * from userInfo;db.userInfo.find().limit(1);20、查询某个结果集的记录条数db.userInfo.find({age: {$gte: 25}}).count();相当于:select count(*) from userInfo where age >= 20;21、按照某列进行排序db.userInfo.find({sex: {$exists: true}}).count();相当于:select count(sex) from userInfo;

? 索引

1、创建索引db.userInfo.ensureIndex({name: 1});db.userInfo.ensureIndex({name: 1, ts: -1});2、查询当前聚集集合所有索引db.userInfo.getIndexes();3、查看总索引记录大小db.userInfo.totalIndexSize();4、读取当前集合的所有index信息db.users.reIndex();5、删除指定索引db.users.dropIndex(“name_1”);6、删除所有索引索引db.users.dropIndexes();? 修改、添加、删除集合数据1、添加db.users.save({name: ‘zhangsan’, age: 25, sex: true});添加的数据的数据列,没有固定,根据添加的数据为准2、修改db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);相当于:update users set name = ‘changeName’ where age = 25;db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);相当于:update users set age = age + 50 where name = ‘Lisi’;db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);相当于:update users set age = age + 50, name = ‘hoho’ where name = ‘Lisi’;3、删除db.users.remove({age: 132});4、查询修改删除db.users.findAndModify({ query: {age: {$gte: 25}}, sort: {age: -1}, update: {$set: {name: 'a2'}, $inc: {age: 2}}, remove: true});db.runCommand({ findandmodify : “users”, query: {age: {$gte: 25}}, sort: {age: -1}, update: {$set: {name: 'a2'}, $inc: {age: 2}}, remove: true});

update或remove其中一个是必须的参数; 其他参数可选,

参数

详解

默认值

query

查询过滤条件

{}

sort

如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将 作

{}

remove

若为true,被选中对象将在返回前被删除

N/A

update

一个修改器对象

N/A

new

若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。

false

fields

参见Retrieving a Subset of Fields(1.5.0+)

All fields

upsert

创建新对象若查询结果为空。示例(1.5.4+)

false

? 语句块操作

1、简单Hello Worldprint(“Hello World!”);这种写法调用了print函数,和直接写入“Hello World!”的效果是一样的;2、将一个对象转换成jsontojson(new Object());tojson(new Object('a'));3、循环添加数据>for (var i = 0; i < 30; i++) {... db.users.save({name: “u_” + i, age: 22 + i, sex: i % 2});... };这样就循环添加了30条数据,同样也可以省略括号的写法>for (var i = 0; i < 30; i++) db.users.save({name: “u_” + i, age: 22 + i, sex: i % 2});也是可以的,当你用db.users.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;4、find 游标查询>var cursor = db.users.find();>while (cursor.hasNext()) { printjson(cursor.next()); }这样就查询所有的users信息,同样可以这样写var cursor = db.users.find();while (cursor.hasNext()) { printjson(cursor.next); }同样可以省略{}号5、forEach迭代循环db.users.find().forEach(printjson);forEach中必须传递一个函数来处理每条迭代的数据信息6、将find游标当数组处理var cursor = db.users.find();cursor[4];取得下标索引为4的那条数据既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();那样我们也可以用循环显示数据for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);7、将find游标转换成数组>var arr = db.users.find().toArray();>printjson(arr[2]);用toArray方法将其转换为数组8、定制我们自己的查询结果只显示age <= 28的并且只显示age这列数据db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson);排除age的列db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson);9、forEach传递函数显示信息db.things.find({x:4}).forEach(function(x) {print(tojson(x));});

五、Java操作MongoDB

开发环境:

System:Windows

IDE:eclipse、MyEclipse 8

Database:mongoDB

开发依赖库:

JavaEE5、mongo-2.5.3.jar、junit-4.8.2.jar

1、首先,下载mongoDB对Java支持的驱动包

驱动包下载地址:github.com/mongodb/mongo-java-driver/downloads

mongoDB对Java的相关支持、技术:www.mongodb.org/display/DOCS/Java+Language+Center

驱动源码下载:github.com/mongodb/mongo-java-driver/archive/master.zip

在线查看源码:github.com/mongodb/mongo-java-driver

2、下面建立一个JavaProject工程,导入下载下来的驱动包。即可在Java中使用mongoDB,目录如下:

3、Java操作MongoDB示例

在本示例之前你需要启动mongod.exe的服务,启动后,下面的程序才能顺利执行;

1)、建立SimpleTest.java,完成简单的mongoDB数据库操作

Mongo mongo = new Mongo();

这样就创建了一个MongoDB的数据库连接对象,它默认连接到当前机器的localhost地址,端口是27017。

DB db = mongo.getDB(“test”);

这样就获得了一个test的数据库,如果mongoDB中没有创建这个数据库也是可以正常运行的。如果你读过上一篇文章就知道,mongoDB可以在没有创建这个数据库的情况下,完成数据的添加操作。当添加的时候,没有这个库,mongoDB会自动创建当前数据库。

得到了db,下一步我们要获取一个“聚集集合DBCollection”,通过db对象的getCollection方法来完成。

DBCollection users = db.getCollection(“users”);

这样就获得了一个DBCollection,它相当于我们数据库的“表”。

查询所有数据

DBCursor cur = users.find();

while (cur.hasNext()) {

System.out.println(cur.next());

}

完整源码

package com.hoo.test;import java.net.UnknownHostException;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.Mongo;import com.mongodb.MongoException;import com.mongodb.util.JSON;/***function:MongoDB 简单示例* @author hoojo* @createDate 2011-5-24 下午02:42:29* @file SimpleTest.java* @package com.hoo.test* @project MongoDB* @blog blog.csdn.net/IBM_hoojo* @email hoojo_@126.com* @version 1.0*/public class SimpleTest { public static void main(String[] args) throws UnknownHostException, MongoException { Mongo mg = new Mongo(); //查询所有的Database for (String name : mg.getDatabaseNames()) { System.out.println(“dbName: ” + name); } DB db = mg.getDB(“test”); //查询所有的聚集集合 for (String name : db.getCollectionNames()) { System.out.println(“collectionName: ” + name); } DBCollection users = db.getCollection(“users”); //查询所有的数据 DBCursor cur = users.find(); while (cur.hasNext()) { System.out.println(cur.next()); } System.out.println(cur.count()); System.out.println(cur.getCursorId()); System.out.println(JSON.serialize(cur)); }}2)、完成CRUD操作,首先建立一个MongoDB4CRUDTest.java,基本测试代码如下:package com.hoo.test;import java.net.UnknownHostException;import java.util.ArrayList;import java.util.List;import org.bson.types.ObjectId;import org.junit.After;import org.junit.Before;import org.junit.Test;import com.mongodb.BasicDBObject;import com.mongodb.Bytes;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.DBObject;import com.mongodb.Mongo;import com.mongodb.MongoException;import com.mongodb.QueryOperators;import com.mongodb.util.JSON;/***function:实现MongoDB的CRUD操作* @author hoojo* @createDate 2011-6-2 下午03:21:23* @file MongoDB4CRUDTest.java* @package com.hoo.test* @project MongoDB* @blog blog.csdn.net/IBM_hoojo* @email hoojo_@126.com* @version 1.0*/public class MongoDB4CRUDTest {private Mongo mg = null; private DB db; private DBCollection users;@Before public void init() { try { mg = new Mongo(); //mg = new Mongo(“localhost”, 27017); } catch (UnknownHostException e) { e.printStackTrace(); } catch (MongoException e) { e.printStackTrace(); } //获取temp DB;如果默认没有创建,mongodb会自动创建 db = mg.getDB(“temp”); //获取users DBCollection;如果默认没有创建,mongodb会自动创建 users = db.getCollection(“users”); }@After public void destory() { if (mg != null) mg.close(); mg = null; db = null; users = null; System.gc(); }public void print(Object o) { System.out.println(o); }}3)、添加操作 在添加操作之前,我们需要写个查询方法,来查询所有的数据。代码如下:/***function:查询所有数据* @author hoojo* @createDate 2011-6-2 下午03:22:40*/private void queryAll() { print(“查询users的所有数据:”); //db游标 DBCursor cur = users.find(); while (cur.hasNext()) { print(cur.next()); }}@Testpublic void add() { //先查询所有数据 queryAll(); print(“count: ” + users.count());DBObject user = new BasicDBObject(); user.put(“name”, “hoojo”); user.put(“age”, 24); //users.save(user)保存,getN()获取影响行数 //print(users.save(user).getN());//扩展字段,随意添加字段,不影响现有数据 user.put(“sex”, “男”); print(users.save(user).getN());//添加多条数据,传递Array对象 print(users.insert(user, new BasicDBObject(“name”, “tom”)).getN());//添加List集合 Listlist = new ArrayList(); list.add(user); DBObject user2 = new BasicDBObject(“name”, “lucy”); user.put(“age”, 22); list.add(user2); //添加List集合 print(users.insert(list).getN());//查询下数据,看看是否添加成功 print(“count: ” + users.count()); queryAll();}4)、删除数据 @Testpublic void remove() { queryAll(); print(“删除id = 4de73f7acd812d61b4626a77:” + users.remove(new BasicDBObject(“_id”, new ObjectId(“4de73f7acd812d61b4626a77”))).getN()); print(“remove age >= 24: ” + users.remove(new BasicDBObject(“age”, new BasicDBObject(“$gte”, 24))).getN());}5)、修改数据 @Testpublic void modify() { print(“修改:” + users.update(new BasicDBObject(“_id”, new ObjectId(“4dde25d06be7c53ffbd70906”)), new BasicDBObject(“age”, 99)).getN()); print(“修改:” + users.update( new BasicDBObject(“_id”, new ObjectId(“4dde2b06feb038463ff09042”)),new BasicDBObject(“age”, 121), true,//如果数据库不存在,是否添加 false//多条修改 ).getN()); print(“修改:” + users.update( new BasicDBObject(“name”, “haha”),new BasicDBObject(“name”, “dingding”), true,//如果数据库不存在,是否添加 true//false只修改第一天,true如果有多条就不修改 ).getN());//当数据库不存在就不修改、不添加数据,当多条数据就不修改 //print(“修改多条:” + coll.updateMulti(new BasicDBObject(“_id”, new ObjectId(“4dde23616be7c19df07db42c”)), new BasicDBObject(“name”, “199”)));}6)、查询数据 @Testpublic void query() { //查询所有 //queryAll();//查询id = 4de73f7acd812d61b4626a77 print(“find id = 4de73f7acd812d61b4626a77: ” + users.find(new BasicDBObject(“_id”, new ObjectId(“4de73f7acd812d61b4626a77”))).toArray());//查询age = 24 print(“find age = 24: ” + users.find(new BasicDBObject(“age”, 24)).toArray());//查询age >= 24 print(“find age >= 24: ” + users.find(new BasicDBObject(“age”, new BasicDBObject(“$gte”, 24))).toArray()); print(“find age <= 24: ” + users.find(new BasicDBObject(“age”, new BasicDBObject(“$lte”, 24))).toArray());print(“查询age!=25:” + users.find(new BasicDBObject(“age”, new BasicDBObject(“$ne”, 25))).toArray()); print(“查询age in 25/26/27:” + users.find(new BasicDBObject(“age”, new BasicDBObject(QueryOperators.IN, new int[] { 25, 26, 27 }))).toArray()); print(“查询age not in 25/26/27:” + users.find(new BasicDBObject(“age”, new BasicDBObject(QueryOperators.NIN, new int[] { 25, 26, 27 }))).toArray()); print(“查询age exists 排序:” + users.find(new BasicDBObject(“age”, new BasicDBObject(QueryOperators.EXISTS, true))).toArray());print(“只查询age属性:” + users.find(null, new BasicDBObject(“age”, true)).toArray()); print(“只查属性:” + users.find(null, new BasicDBObject(“age”, true), 0, 2).toArray()); print(“只查属性:” + users.find(null, new BasicDBObject(“age”, true), 0, 2, Bytes.QUERYOPTION_NOTIMEOUT).toArray());//只查询一条数据,多条去第一条 print(“findOne: ” + users.findOne()); print(“findOne: ” + users.findOne(new BasicDBObject(“age”, 26))); print(“findOne: ” + users.findOne(new BasicDBObject(“age”, 26), new BasicDBObject(“name”, true)));//查询修改、删除 print(“findAndRemove 查询age=25的数据,并且删除: ” + users.findAndRemove(new BasicDBObject(“age”, 25)));//查询age=26的数据,并且修改name的值为Abc print(“findAndModify: ” + users.findAndModify(new BasicDBObject(“age”, 26), new BasicDBObject(“name”, “Abc”))); print(“findAndModify: ” + users.findAndModify( new BasicDBObject(“age”, 28), //查询age=28的数据 new BasicDBObject(“name”, true), //查询name属性 new BasicDBObject(“age”, true), //按照age排序 false, //是否删除,true表示删除 new BasicDBObject(“name”, “Abc”), //修改的值,将name修改成Abc true, true));queryAll();}mongoDB不支持联合查询、子查询,这需要我们自己在程序中完成。将查询的结果集在Java查询中进行需要的过滤即可。7)、其他操作 public void testOthers() { DBObject user = new BasicDBObject(); user.put(“name”, “hoojo”); user.put(“age”, 24);//JSON 对象转换 print(“serialize: ” + JSON.serialize(user)); //反序列化 print(“parse: ” + JSON.parse(“{ ”name“ : ”hoojo“ , ”age“ : 24}”));print(“判断temp Collection是否存在: ” + db.collectionExists(“temp”));//如果不存在就创建 if (!db.collectionExists(“temp”)) { DBObject ptions = new BasicDBObject(); options.put(“size”, 20); options.put(“capped”, 20); options.put(“max”, 20); print(db.createCollection(“account”, options)); }//设置db为只读 db.setReadOnly(true);//只读不能写入数据 db.getCollection(“test”).save(user);}

技术向左管理向右求职指南

参考:新人菜鸟面试

菜鸟如何找到好工作

初中英语作文入门

钢琴入门教学计划

法语入门学习方法

青菜鸟五年级作文

职场菜鸟怎么在职场生存

指南读后感

儿童教育指南

菜鸟 技术入门指南(精选7篇)

欢迎下载DOC格式的菜鸟 技术入门指南,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档