金鱼淘淘作文(通用12篇)
两只黑黑的眼睛像灯泡一样;又宽又圆的嘴巴,一鼓一鼓的;一身金黄的衣裳,白白的肚皮;一条白色尾巴像被风吹动了一样,摇摇摆摆。你们猜猜这是什么?对,它就是可爱的小金鱼。
淘淘是我从金鱼店里买来的.。那天,我看见有家卖金鱼的商店,我非常想要一条小金鱼,于是我就让妈妈给我买了一条。回到家,我把小金鱼放在鱼缸里,看见它又撞鱼缸,又吐泡泡的,十分淘气。于是,我就给它起了一个名字――淘淘。看它的住所那么简陋,我又帮它重新装饰了一下。我在鱼缸底下铺上一层沙子,放上几棵水草,再来一座假山,又放一条假鱼跟它作伴。淘淘看到它的新家,开心极了。它先在水中转了一个圈,然后又去假山上玩一玩。玩累了,也要吃食物了,它便撞击着玻璃,吸引我的注意。我拿着鱼食走向鱼缸,它见我来了,用渴望的眼神看着我。我把鱼食扔进去,它高兴地吃着,嘴一动一动的,好像在说:“谢谢你,小主人。”
有一次,邻居家的猫来我们家玩,看见淘淘在鱼缸中嬉戏,它不怀好意地走过去,把爪子伸进鱼缸要抓淘淘。淘淘立刻钻进水草里躲了起来,这样才没被抓到。我走近一看,发现鱼缸里没有淘淘,我紧张极了。我又仔细一看,原来淘淘躲在水草里了,它的嘴巴一张一合,好像在说:“主人,你怎么现在才来,我刚才都要被吓死了。”不过淘淘也挺聪明的,遇到危险还知道躲藏,真是临危不惧呀!
无意间走进这间小店,扑面而来的是源源不断的惊喜。满店子都是些古灵精怪的小东西,今年比较流行的布艺手袋、韩国饰物,都可以在这里找到一些。这里展示的居家用品,无不在施展着最大的能量来吸引你的眼球,那些款式别具一格的钟,很容易让你感受到其可爱之处!还有一些从泰国进口的小摆设更能撩拨人的购买欲。
店铺总是把交易作为主题,不过,这间店给人的感觉更多的却是像一个朋友的家。事实上店主也希望来这里逛的人带着欣赏的心情,慢慢玩味,交易反倒退而居之了,千金易得,知己难求嘛,也许是这间店主开店的初衷吧。所以,每次我都要呆很长一段时间,顺带买上一两件心仪的小玩意!
地址:广州市德政中路178号
绿房子诱惑
蓝蓝的天,白白的云,高高的树,绿绿的房子!感觉好像走进了甜甜的田园梦乡。可如果你稍微定一下神,也许最终会恍然大悟,这是一间散发着淡淡田园气息的小店呀!这里的东西都是店主通过互联网,由在全球各个地方留学的朋友给搜罗回来的,所以,这些小东西可是周游了很多地方才到这里安家的,甚至毫不夸张地说,透过这些物品你就可以触摸到世界各地的风情!
为了和“田园”的主题相呼应,店主选择了一盏绿色的百合花型的吊灯。而这里的欧洲传统样式,描绘着温馨花纹的陶器也让人恍然置身于十八、九世纪的田园景致里。另外,这里还有些布艺用品可是出自本地一位软雕设计师之手,立意与表现手法都特别新颖。充满诱惑的绿房子,就是为了召唤你的到来。
地址:广州市天河南一路
丰良艺坊,在灵感之上打滚
一次很偶然的机会经过它,就被它那浓浓的书卷气所吸引,这是一个集名家油画、陶瓷、欣赏、制作为一体的设计公司。站在门外面,透过透明玻璃,马上有了惊奇之心,原来很多种不同艺术观感的东西可以相处一室,而且这么融洽。
推门而入,进入眼帘的是一组以少林和尚习武为题材的陶瓷制品,在灯光的照耀下,分明可以感觉到那种撼人心魄的武魂。还有一个仿古坛子,就像一艘沉舟,孤零零地躺在深海里,从没有人注意过,而此时却有几只螃蟹涌向坛口,显然是想把它据为自己的家。这里陈列的作品多数出自名家之手,包括本地油画家、版画界的名作。
店的一角,放着一台陶艺拉胚机,让来到这里的人除了欣赏大师们的作品外,如果一时兴起,还可以自己动手炮制,能否让自己的灵感在这里打个滚,就看你的了。
地址:广州市丽江花园商业街
现代杂货铺:南北东西
也许很多女人小时候喜欢逛百货商店,那里有很多刺激自己眼球的东西,大一点就喜欢逛精品店,那里可以催生自己的多种情感,现在,如果你知道有一间叫南北东西的小店,是否会一时好奇,先“逛”为快呢。来到南北东西,也许让你找到久违的感觉,扑面而来的是各种各样有意思的家居小物件,东西琳琅满目,一时搞得人无所适从。
一对笨拙的木头小人、一垒散发着油墨香的书籍、一对纯手工的帘饰——他们在这里争奇斗妍,吸引了许多欣赏的目光。
店里还有个小小的书吧,让每位客人在这个包罗万象的世界,安静地停下来,细细品尝这一刻的温馨。
每天上学,同学们都会向淘淘问好,放学时,同学们也会跟她说再见。有时淘淘真有点不耐烦。她问妈妈:“妈妈,总呆在这儿,您不烦吗?那些小同学能自由自在的玩耍,而我们却不行。”向日葵妈妈摸了摸淘淘的头,笑着说:“傻孩子,你难道不愿意和这些同学做朋友吗?”淘淘还是觉得妈妈不理解她。她低着头叹了口气。
这时,太阳公公看见淘淘垂头丧气地站在那里,便问:“淘淘,你为什么叹气啊?”小淘淘把自己的苦恼告诉给太阳公公。太阳公公听了大笑起来说:“像你这样说,那我也不快乐了。我每天高高地挂在天上,不是很累吗?可是,我给大家带来温暖,给大地带来光明,大家都很喜欢我,我感到很快乐。”淘淘听了高兴地说:“我知道了,要是没有您,那大地就会十分黑暗和寒冷。当看见小朋友在阳光下愉快地玩耍时,您心里一定充满了快乐对吗?”
淘淘和太阳公公的对话被大树听见了。淘淘想:“昨天下了一场大雨,我还亲眼看见大树伯伯在淋雨,今天他一定非常冷。”于是,小淘淘昂起头问:“大树伯伯,您快乐吗?”大树伯伯自豪地说:“我很快乐,我给庄稼挡住风沙,大家都喜欢我。”淘淘终于想明白了:没一个人只要做了对大家有益的事情,他便会感到无比的快乐。
它长着一身洁白的皮毛,灵敏的鼻子,樱桃小嘴,乌黑发亮的眼睛一眨一眨的,像两颗小星星,它的耳朵老是直直得竖在那里,好像一个随时作战的战士时刻在警惕周围的动静,它总是翘着一条短短的尾巴,摇来摇去,可爱极了。它喜欢嬉戏追逐,总是活蹦乱跳的,因此取名为”淘淘”。
记得有一次,我正准备画画,找来画纸和笔,可就是找不到油画棒,于是,我去找。突然,淘淘冲进我的房间,跳上我的画桌,用那双粘满泥土的小脚在我的画纸上跳来跳去,觉得好玩,就一直不肯走,直到我找到油画棒正准备回到房间时,淘淘才慌慌张张地逃走了。当我看到画纸上有许多“梅花”,不禁想:这一定是淘淘干的好事。我不但没有责怪淘淘,反而在画纸上画了一些树枝和树叶,一张《梅花图》就完成了,这里面可还有淘淘的功劳哦!
记得淘淘吃骨头时,总是先要闻一闻好像在闻这骨头里有没有西兰花这种毒药吧!然后它再用舌头舔几下,看看里面有没有西兰花的味道。最后再用它那双晶莹剔透的眼睛盯着骨头看,看一下里面到底有没有西兰花,最终确定骨头里面没有西兰花,它才开始享用着美味的骨头大餐。我想:淘淘以后肯定会成为一名鼎鼎有名大侦探的。
淘淘是一名工厂员工的女儿,她刚刚生下不久,妈妈就离开了妈妈在去世时,送给淘淘一只微笑的小熊,妈妈希望她以后快乐的生活,不要因为失妈妈就不开心,要勇敢坚强!
一年又一年的过去了去,当她看到别的小朋友的妈妈来接她是,淘淘总是爸爸来接,她迷惑的问:“爸爸,我的妈妈去哪了?我见都没见过呢!”爸爸勉强微笑道:“妈妈去远方出差了,等你长大她才会回来哦”“哦,爸爸那我是不是马上就可以见到妈妈啦?”“是的”“好,到时候,我让妈妈来接我,不,不,我要让爸爸妈妈一起来接我!
小学三年级了,淘淘渐渐的明白“妈妈”是怎么回事了。她开始逃避这个问题,她上学时,书包里总可以看到一只微笑的小熊,每当她偷看一次小熊,她就偷偷流一滴泪,但是流完后,她就告诉自己要坚强,一定!在学校,没人愿意和她交朋友,不是因为讨厌她,而是,和她交朋友太无聊,一天都不说一句话。没人会知道她心理上的阴影。也没有人会关注她!
在一个风和日丽的星期天,所有的小孩都在享受他们美好的日子。只有淘淘,她的爸爸因为加班而不能再家陪她了,她似乎也习惯了这孤独中的“乐趣”,她独自一人走上本市最大的高楼,对,她拿着妈妈送给她的小熊。她心中想“活着真好!妈妈,你在天堂过的好吗?我好想你,我有无数的话想对你说,妈妈,我的好妈妈,你在哪里。曾经无数次梦见你的女儿想你了!妈妈妈妈……”渐渐地,淘淘的衣服湿了,她的表情纠结而有无奈!绝望了。
突然,一阵猛烈地狂风肆虐的吹来。仿佛要把她那幼小的身躯吹跑。她下意识的搂住小熊,但是,小熊还是掉下去了!“上帝为什么要夺取她微薄的`生命支撑物——小熊。哦,这太不公平了,妈妈,我去找你!”就在这时,她的身体被什么给拽住了,是的,是爸爸!
“淘淘,你怎么了?爸爸听说有一个小孩在大厦上似乎要……,还说是你,我就请了假过来了。没想到真是你!我知道你想妈妈,但是她也回不来了呀!你要明白妈妈送给你的小熊的真正含义呀,宝贝别做傻事,来,过来来爸爸这里……”渐渐地,爸爸的声音哽咽了起来。淘淘,还小,她需要一个温暖的怀抱……她哭着扑上去,“爸爸,小熊掉下去了,没有了,没有了,妈妈,没有了!”“没事,有爸爸呢!”他们带着微笑走下去,围观的人也渐渐少了,他们在寻找着,“找见了,爸爸!”一声亲切的叫声!
从此以后,淘淘不在那么内向了,她很阳光,她的嘴角上时不时带着微笑!不错,她的书包里是装着那只微笑的小熊,但是,当她再看时,不会哭了,会笑,这是一种勇气!
一天,小羊陶陶跟着妈妈去歌厅玩,当时,歌厅里面乱哄哄一片,一点秩序也没有,歌厅里的领班维持了半天秩序,仍然是一片乱糟糟的。小羊陶陶很着急,突然大叫了一声:“Please lend an ear!”歌厅里一下子安静了许多,大家把视线都转向了小羊陶陶,还七嘴八舌的议论:
“What’s the matter with this child?”
“What’s wrong with you?”
“...”
大家迷惑不解。陶陶看出了大家的心思,大声解释起来——“Lend an ear!”这一短语出自莎世比亚的历史剧“Julius Caesar”(《裘力斯·凯撒》)中,这句短语的意思是说“注意,听我说几句”。也可以说成“Lend one’s ears”。
在这部戏剧中,凯撒遭到了谋杀而死,在他的葬礼上,Mark Antony(马克·安东尼)冲着一群拥挤吵杂的罗马人说道:“朋友们、罗马人、同胞们!请听我说。(Dear friends, Roman, Compatriots! Please lend an ear!)” 那群人听到这句语,就立刻安静了下来。所以说,“Lend an ear!”的意思是指“注意,听我说几句”。
陶陶精彩的讲解刚一结束,歌厅里就爆发出了热烈的掌声。大家不停地夸奖陶陶是个了不起的孩子……
周末,小羊陶陶约了好朋友小羊恰恰一起去玩,在回来的路上,他们觉得有点饿了,就一起走进了一家新开的Pizza店吃东西。
嘿,Pizza店里真是热闹。门口摆放着漂亮的花篮,脚下还有红红的地毯,到处都是漂亮的气球。小羊陶陶和小羊恰恰一边品尝着可口的美味,一边讨论着刚才的趣事。正当他们讲到有趣的时候,只听到老板对一个服务生叫道:“Shake a leg!”两个小伙伴停了下来,你看看我,我看看你,都感到非常纳闷。陶陶站起来,礼貌地向身边的服务生询问:“叔叔,打扰您一下,刚才老板说的那句话‘Shake a leg!’是什么意思?”服务生小声对他说:“小点声,老板有点急了,他在催我‘快点’呢。”陶陶答道:“那么说,刚才老板说的那句话,意思就是‘赶快’了,对吗?”服务生点了点头,边干活边向他解释:
“Shake a leg!”其实是一则英语俚语,它有两个意思,一是“跳舞”,二是“赶快”。现在,老板的意思是第二个,他是叫服务生抓紧时间或赶快行动。如:We’d better shake a leg, or we’ll miss the bus.(我们得抓紧点儿,要不就赶不上公共汽车了。)
陶陶谢过叔叔,他对恰恰说:“生活中的知识真多呀!看来不好好学习一番会被落下的。”恰恰直点头。
周末,小羊陶陶的爸爸带他去吃美食。陶陶可高兴了。
陶陶的爸爸开着摩托车来到一家音乐Pizza店。在音乐Pizza店,小羊陶陶一边吃着比萨饼,一边欣赏优美的音乐。这时,爸爸问他:“陶陶,我要考考你。”陶陶边吃边答道:“好,爸爸,您问吧。”爸爸拿出一张纸条给陶陶,陶陶看了一眼,绘声绘色地讲了起来:
爸爸,Colour的意思是“颜色”,不过除此以外,它还有别的意思,colour加上s构成复数后,除了表示“各种颜色”之外,有时还具有和“颜色”毫不相干的意思。在成语show one’s colours中,colours则解释为“本质、本性、真面目”,所以show one’s colours便为是成语“暴露真面目”之意,可译为“原形毕露”。但在运用这个英语成语时,它并不总是用于贬义的,显露出原来不为人知的优良品格时,也可以用成语show one’s colours。如:
When the danger came to, he was brave.(当危险来到时,他是勇敢的。)(褒义)
The fox showed his colours.(狐狸暴露了他的真面目。)(贬义)
“哎呀,陶陶,又长进了不少呀!好,今天爸爸一定要奖赏。”说着,爸爸又给小羊陶陶点了一份比萨。
这下,陶陶可开心了……
今天,在我的软磨硬泡下,爸爸终于同意给我买两只新宠物:实实和淘淘。
首先让我介绍一下他们。淘淘的爸爸是一只黄金鼠,妈妈是一只纯种银狐仓,血统十分高贵。平时很调皮,所以取名叫淘淘。实实是一只东北紫仓,平时很老实,所以取名叫实实。喜欢吃白菜,应该是在他老家吃习惯了吧。
他们住在我家已经十天了,一直生活在那两寸多高,一寸多长的小鼠笼里。今天,我决定给他们“造”一个新家。首先,我去王伯伯的宠物店里买了一个仓鼠大别墅。里面有仓鼠运动滚轮、仓鼠运动滑梯、仓鼠小屋、仓鼠卧室、仓鼠娱乐滑梯、爱心形小食盆、仓鼠饮水机、仓鼠小院、还有仓鼠游乐场…………各式各样。
回到家后,我迫不及待的把两只小仓鼠放了进去,他们就好像很喜欢这个新家似的,四处跑动。淘淘四处看了看,在小院里走了几步,又从小院里的楼梯上(外面有一个楼梯,里面也有一个楼梯)跑了上去,之后在二楼三楼之间跑来跑去,熟悉了“地形”后,淘淘就去跑仓鼠滚轮去了。而实实呢,刚进新家后,它立刻走进了大门,从里面的楼梯爬了上去,来到二楼的仓鼠卧室睡着了。而这时淘淘也走了进来,尖叫一声,之后赶快跑了。实实被吓了一跳,还没明白怎么一回事,淘淘早就已经跑出家们,来到小院里了。
虽然实实和淘淘性格不相同,但他们不会吵架,反而还成为了一对好朋友。淘淘会帮实实寻找食物,当我把食物放进去时,淘淘最先跑过去,观察食物的大小。如果大小适中,就会叫来实实一起分享食物。如果太大,他就会先把一点食物吃掉,剩下的`跟实实一起分享。实实会帮淘淘整理物品,由于淘淘很调皮,每次玩游戏都弄得一团糟。这时,实实就会主动帮淘淘整理物品,方便下次继续玩。他们还真是一对好朋友啊。
在家里我一定得好好听话,尽量当一个好学生。放学后每天回到家里,便被一大堆作业搞得昏头转向,我努力的写啊写,可是今天的做完了,明天还有一大堆作业,明天的作业做完了,后天还有,望不到尽头。在学校里,我一整天都在认认真真地听课,其实我讨厌学习,讨厌枯燥、无味,只因为妈妈和爸爸对我催促和压迫。
放暑假,本以为可以好好玩一玩,可他们又给我报了许许多多的培训班——作文班、英语班和数学培优班。明年我就六年级要毕业了,听表姐们说六年级每天都有好多作业,我只想说:“你们不是说,学生比我们生活容易得多。”每当手机里响起“小小少年,很少烦恼,无忧无虑乐淘淘。”这首歌曲时,我心里总不是滋味。
有一次老师把数学卷子发下来,只有八十三分,我心想这次死定了。因为我平时都在85分左右,但我想妈妈一定会鼓励我的。我回到家里,认认真真地做完作业,然后小心翼翼把卷子递给妈妈,妈妈看完后脸色沉重,眉头紧锁,顿时火冒三丈,生气地对我说:“你怎么只考这么低的分,就这点点分怎么可能考上一个好的初中呢,快!今天我给你买了几本书和几张卷子,赶紧去做。还给你报了几个补习班,你一定得好好听老师的话,听见没有!这都是为了你好啊!”
"小花生米游得可高兴了,于是它大声喊:'大伙都来和我一起玩啊!'花生小孩们听见了都跑了出来,看见它玩得那么高兴,于是一个个都扑通通往水里跳。池塘里面就全是花生小孩了。"---不消说,那盆汤里就浸满了花生。浮上来的大概是水性好的,沉下去的呢---
"不幸淹死了。"讲故事的人说。
说故事的人是淘淘。听故事的人是我,妞妞。
淘淘喊我"妞妞",这个名字总让人想起扎着羊角辫的可爱小女孩。而我小时候少年老成,总是板着脸,一副呆呆的模样。
六岁的时候,我的个子就已经很高。我的爸爸妈妈已经习惯了坐火车不给我买票,但是面对我日益长高的尴尬现实,只好委屈我矮下身子逃票。有一回我企图快速溜过检票口时,被查票的阿姨拦住了,"票呢?"她问我的爸爸妈妈。
"同志,她不用买票的,小孩子嘛。"妈妈申辩道。
"可是她超过高度了,就得买票。"
"但是她好小的,学龄前儿童呀。"妈妈挺委屈。可是查票阿姨一点都不退让,"学龄前?这么高的学龄前小孩?哪个会相信哟!"
还是遵守规章制度的好。大人们只好乖乖地为我补了票。妈妈无奈地看着我,叹了口气:"这孩子,显老。"
淘淘则向来很瘦,夏天穿领口大一点的衣服,锁骨就显得异常分明。我总说她凹进去的那块地方可以当墨水瓶。
小的时候,野心勃勃的。大概是香港的商业片看多了,淘淘建议:我们以后开家公司吧。为了将来的梦想,我们开始攒钱,再也不吃零食了,不买好看的贴纸了,并且把家里每个角落发现的零钱都搜集起来。我们想这样一年年积攒下来,十年八年总有一定规模了吧,我们想我们的事业会做得很大,会是一个集团,跨省跨国跨洲……我们甚至怂恿别的小孩入股,把未来的事业描述得美妙无比,灿烂得一塌糊涂。
无奈这项投资的线放得太长,终于谁都没有了耐心。等这笔款项达到50元的时候,它就变成了一大堆摔炮,被我们恶狠狠地满街乱扔,噼啪作响。
"没有关系的,也许以后我们能做花炮生意。"淘淘说。
夏天吃西瓜,淘淘总要和我分着吃。有一次,我们坐在台阶上,淘淘端着半个西瓜,眯起眼,柔柔地说:"这是一个有月亮的晚上,两个小人儿坐在杨柳堤旁,脚下是潺潺的流水。她们俩正在吃西瓜。你喂我一口,我喂你一勺。含在嘴里,甜在心里。虫在鸣,蛙在叫,风在吹……"这时,淘淘妈跑来喊我们去洗澡。淘淘沮丧地咽下一口瓜,无奈地对我叹道:"真是不解风情呵!"
淘淘和妞妞都爱好文学,不过,淘淘写的是诗。每一个伟大作家最初的习作都是生涩的,淘淘有一次写过一句"迈开大腿与小腿",但是又觉得不对劲,还是把它改为极通俗的"迈开大步向前走"。
淘淘形容坐了很久的汽车后下车的感觉:行尸走肉似的。
淘淘形容一个人嘴大:俩嘴角可以在脑后相逢,还能再打一蝴蝶结。
政治老师喜欢唠叨,老是回忆他当初上中学的时候,大伙挨饿,可学校里要面子,养了一头猪,硬是不杀,留着给上头来人看的。淘淘评价:观赏猪。
淘淘说起她的一个笔友寄来的信:"尽是数字,还附一张译码表,要我翻译了才能看。本姑娘颇为高兴,亦作天书一封,爬虫满页,供其钻研。"我一看,全是象形文字。
淘淘和妞妞照了很多合影,没有一张正经的。有一张背景是白墙,淘淘做惊骇状,而妞妞手拿两条黄瓜好似要劈头扔去。
别人眼中,我和淘淘是一对宝。我妹妹也想和我们一起玩,淘淘对她也挺好。可是,我妹妹是太规矩的小孩子,而我和淘淘都时不时会冒出一些鬼主意,妹妹和我们在一起就常常显得不协调(比如我和淘淘最欣赏的动画片是《飞天少女猪》,而妹妹就总嫌它片名难听)。最后妹妹主动退出了我们的圈子。
"疯疯癫癫的,人家还以为你们有病呢!"妹妹常常这样说我们。
淘淘叫她爸爸"爹爹",她每天放了学,都径直走到她爸跟前,"扑通"一声单膝跪下,头一低,口中喊到:拜见爹爹。这个时候淘淘爸爸就微微一笑,说,吾儿请起,吾儿上学受累了。
淘淘有个哥哥,她把她哥哥叫做"少爷",有时又称他为"地主"。她解释说这个哥哥从来一点家务都不做,懒得要死,还尽玩儿,纨绔子弟似的。淘淘哥哥真是懒,淘淘妈妈喊他倒垃圾了,他嘴里说好,身子依然瘫在沙发里看动画片。这个时候淘淘就笑眯眯地站到他面前,问少爷有何吩咐呀,淘淘哥哥就会说,倒垃圾,5块钱。淘淘说,10块!哥哥说,8块。然后淘淘美滋滋地去执行她的任务了。
后来淘淘有男友了,这可不能叫家里人知道。他们有自己的联络方式。有一次雪后,淘淘带我去一家街心花园,在一处小山坡的一块大石头附近,她扒开那里的雪,露出一个丢弃了的话梅袋子,拾起袋子,里头有一封折得很小的信---是她男友写的。她也掏出写好的信放了进去,把袋子放回原地,用雪埋住。"他会来取的。"她说。
第二天,她对我说:"他怪咱们太笨,留下脚印了,这样一来人家会发现的。于是他满山坡乱跑,扔下无数脚印,这样就没有问题了。"
淘淘总喜欢跟我挤在一张单人沙发里看电视。常常,在连续剧结束以后,她会很严肃地扶着我的肩,说,生活很艰难,我们一定要互相帮助,我们彼此就是对方的力量之源。说得我也怔怔地看着她,是呀,外面的社会也许是很残酷的吧,人生是要打拼的,日子会很苦,像我们这样的弱质真的要互相扶助……
那段时间,我们两个人都很瘦,加起来才84公斤,我们把那段时间称为"嶙峋岁月"。
后来妞妞与淘淘都升入大学,彼此相隔千里。
妞妞假期回家,去找淘淘。只见她床头贴着一张婴儿图片:大大的脑袋,下垂的眼角,微张着的流着口水的嘴巴。图片上写道:想你,让我不思世事,日益呆滞。而整幅图片的名字就叫做"涵情脉脉"。
"涵",是淘淘真正的名字。
"嶙峋岁月"里孩子般的安逸和快乐,小小的,短短的,却充盈着满满的幸福感觉。
小猴淘淘终于到了上学的年龄了,他蹦蹦跳跳地跟妈妈来到了动物幼儿园,到了报名处。
淘淘不安分的坐在椅子上,一会儿抓抓旁边小犀牛的角,一会儿又揪揪小兔子的.耳朵,弄的报名的小动物们怨声载道。终于,轮到了他们,淘淘不再胡闹了,乖乖跟在妈妈后面,填好表格。马阿姨对猴妈妈说说:“那么,您的儿子明天就可以来上学了!”猴妈妈点了点头,带着淘淘回家了。
到了第二天,淘淘背着妈妈给他做的小书包,和妈妈来到了幼儿园,猴妈妈刚把淘淘领进班上正要走时,淘淘见妈妈要走,便大哭起来:“妈妈,妈妈!不要走。”猴妈妈转过头来,对淘淘说:“淘淘,不能这样,你看!班上的小动物们都没哭,你难道想被他们比下去吗?”淘淘是个自尊心很强的小猴,听到妈妈这样说,便不哭了。妈妈离开了幼儿园。
虽然淘淘才刚刚哭过,但是他马上被幼儿园里的新鲜事物吸引了。第一节是手工课,他玩弄着一个个小纸片,需要做的就是把它们拼成一个个图案,可是淘淘懒得动脑子,就模仿起旁边的小松鼠拼的图案,小松鼠一点也没有发觉,到了上交手工的时候了,手工老师长颈鹿阿姨发现了这两个一模一样的图案,处罚了淘淘。
第二节是美术课,淘淘也因为乱画一通而被美术老师熊叔叔给骂了一番……
放学了,猴妈妈了解了淘淘一天的所作所为,生气地对淘淘说:“你要在这样就真的被他们比下去了啊!”
有一次,我经过楼下垃圾桶时发现这只“小淘气”了,它躲在垃圾桶后,想做了坏事害怕妈妈发现的小孩似的,偷偷地看我。哈哈,尽管你藏在那儿,还是难以逃过我的眼睛。看到我一步一步地靠近,它迅速跳上垃圾桶,沿着垃圾桶的边沿走起路来,哇!这可是我第一次看见猫走“平衡木”,它的四肢轻轻地有条不紊地配合着,仿佛这是一个杂技演员的日常训练。走了一会儿,它突然掉下去了,我吓了一大跳,连忙追看,原来是“小淘气”跳到里面找食物去了。
今天,刚下楼,我又见到它,它乖乖地蹲在地上,用手摸摸自己的小脸蛋,不时“喵喵”地说着梦话,那么单纯、可爱。我想如果给它喂点吃的,也许就能让我抱抱了。正好对面有几块鱼刺,我捡了起来,慢慢地放在它的面前,“小淘气”看见后,一下子站起来扑向鱼刺,它先围着食物,转了几圈,然后低头闻了闻,确定没有危险后,就津津有味地品尝着美食,先用舌头舔一舔,再张开小嘴细嚼慢咽,大眼睛盯着食物专心极了。趁它低头吃东西的时候,我轻轻地走近它,悄悄地伸出手,眼看着就要碰到了,它突然一转身,跳到旁边的草丛里,唉!又失败了。
1)分布式soa i.按照功能把系统拆分,拆分成独立的功能,单独为某一个节点添加服务器,需要之间的配合才能完成整个业务逻辑,叫做分布式 ii.iii.系统之间需要进行通信(采用dubbo服务中间件实现系统间的通信)分布式优点:
1.把模块拆分,使用接口通信,降低模块间的耦合度
2.拆成多个子项目,方便任务的分配和分发,这样可以将各个项目交由不同的团队进行开发。
3.对项目的延续开发有很大好处,如:当项目需要添加一个子项目时,只需要调用其他系统的接口即可。4.可以灵活的进行分布式部署
iv.缺点:
1.采用soa增加了项目的工程量,因为soa系统之间需要进行通信,故而也要使用到远程通信,接口的开发工作量的到了巨大的增加。2.各个模块有一些通用的业务逻辑无法公用
2)使用Maven管理工程 i.ii.iii.方便架包管理
方便工程之间的依赖管理 Maven自带自动打包
3)服务端使用Svn(版本控制系统)i.ii.一般一个项目组只有一个svn,并不是每个开发者都需要安装服务端。Svn是把数据放在一个中央资料档案库(repository)中,这个档案库就像一个文件服务器,它会记住每一次的数据变更,这样可以很方便的恢复数据。
iii.Svn的优缺点:svn对中文支持很好,操作简单,没有难度,使用界面统一,功能完善,操作方便。
4)Git(分布式版本控制系统)i.ii.作用:用于有效、高速的处理从很小到非常大的项目版本管理。
分布式相对于集中式的最大区别在于开发者可以提交到本地,每个开发者通过clone,在本地机器上拷贝一个完整git仓库。
iii.Git的功能特性:
1.从服务器上克隆完整的git仓库到单机上,包括代码和版本信息。2.在自己的机器上根据不同的开发目的,创建分支和修改代码 3.在单机上自己创建的分支上提交代码 4.在单机上合并分支
5.解决冲突:一般是编码者之间协商处理
iv.Git的优缺点:对程序源代码进行差异化的版本管理,代码库占极少的空间,易于代码的分支管理,不支持中文,图形界面支持差,使用难度大,不易推广。
5)Dubbo(服务中间件)阿里巴巴产品 i.Dubbo有五个节点 1.provider—服务提供方 2.Consumer—服务消费方 3.Register—服务注册中心 4.Monitor—统计服务的调用次数和调用时间的监控中心 5.Container—服务运行容器 ii.五个节点间的调用关系
1.服务器负责启动,加载,运行服务提供者,服务提供者启动时向注册中心注册自己提供的服务,消费者启动时去注册中心订阅自己所需要的服务,注册中心返回服务提供者地址给消费者,如果有变更注册中心将基于长连接推送变更数据给消费者。消费者从提供者地址列表中,基于负载均衡算法,选一台提供者进行调用,如果失败,再选择另一台调用;提供者与消费者之间,在内存中累积调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
iii.Spring中dubbo的配置
1.提供方:
iv.Zookeeper(注册中心)
1.相当于目录服务器,服务的提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。
2.它是一个树形的目录服务,支持变更推送适合作为dubbo的注册中心 v.使用dubbo的好处:使用rpc协议进行远程调用,直接使用socket通信,传输效率高,并且可以统计出系统间的调用关系和调用次数。(soa项目中推荐使用)
vi.与webservice相比:webservice基于soap协议,效率不高,项目中不推荐使用。vii.使用restful形式的服务:http+json。很多项目中应用,如果服务太多,服务之间的调用关系混乱,需要治疗服务
viii.涉及概念:
1.soap:SOAP 最初代表“简单对象访问协议” SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。使用http协议传输xml文本的技术
2.restful:一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。3.rpc:(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
6)图片服务器FastDFS i.ii.是c语言编写的分布式文件系统
架构:tracker和storage,客户端请求tracker进行文件上传下载,通过tracker调度,最终由storage完成文件的上传下载。
iii.Tracker:
1.作用:负载均衡和调度
2.操作:通过tracker在文件上传时可以根据一些策略找到storage提供文件上传服务,可以将tracker称为追踪服务器或者调度服务器
iv.Storage:
1.作用:文件存储
2.操作:客户端上传的文件最终存储在storage服务器上,storage没有实现自己文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。
v.FastDFS上传流程:
1.Storage定时向Tracker上传状态信息 2.客户端上传连接请求到tracker 3.Tracker自己维护了storage的状态信息表,根据这张表查询可用的storage,返回给客户端信息(查询到的可用的storage的ip和端口号)4.客户端根据得到的storage上传文件。
5.Storage接收到客户端上传的图片,生成file_id,将上传的内容写入磁盘,再返回给客户端file_id(路径信息和文件名)6.存储文件信息完成
vi.FastDFS下载流程:
1.Storage定时向tracker上传状态信息 2.客户端下载链接请求到tracker 3.Tracker查询可用storage(检查同步状态),返回可用的storage的ip和端口号给客户端
4.根据file_id(组名,路径,文件名)去storage服务器上查找文件,storage,查找到文件就返回给file_content vii.本系统中哪使用了FastDFS?
1.添加商品功能中使用了图片服务器
viii.为什么要使用FastDFS?
1.相对于tomcat而言,解决了tomcat再次加载数据丢失问题 2.使用fastDFS的优点:存储空间可扩展,提供统一的访问方式 3.FsastDFS本就是一个分布式文件系统,存储空间可以横向扩展,可以实现服务器的高可用,支持每个节点有备份机。
ix.怎么使用的FastDFS?
1.配置了一台fastDFS服务器 2.创建fastDFS客户端工程
3.在后台视图层工程中加入fastDFS工程的依赖 4.通过配置文件指定trackerserver服务器的地址
5.配置一个MultipartResolver,可以指定编码格式和文件最大限制 6.在表现层创建一个fastDFS客户端对象
7.调用fastDFS客户端对象的uploadfile方法,获取storage的返回地址 8.返回给请求客户端拼装的地址
7)Redis i.本系统的使用场景 1.充当缓存
2.模拟session实现单点登录 3.使用其incr完成主键生成
4.当数据变化不大,数据不会被频繁修改,业务要求不高,访问量比较大 ii.什么是redis?
1.Redis是一个开源的使用anci c语言编写,支持网络,可基于内存亦可持久化的日志型、key_value非关系型数据库,并提供个多种语言的api 2.它有五中数据类型(String,hash,list,set,Sortset)
a)String(最常用),key-value形式 i.常用的api:get(key)、set(key,value)、incr(成成id)自增、decr()自减其中的incr和decr同时使用不会出现重复问题且不适合存储内容大的数据、expire(key,time)设置过期时间
b)Hash(也常用):key-(key-value)形式 i.相当于一个key对应了一个map,存取速度和string类型差不多
c)List(模拟消息队列)i.d)Set i.无顺序,不重复
适合向头部尾部添加数据,栈两头都可以存取,有顺序,可重复
e)Sortset i.有顺序,不重复
3.持久化形式(aof,rdb)
a)AOF(append only file):性能较低,需要手动开启,操作原理是记录每一次操作的命令到文件中,把所有对redis数据库操作命令保存到文件中,数据库恢复时把所有的命令再执行一遍
b)RDB(快照):redis默认支持,性能较高,操作原理:定期把内存中当前时刻的数据保存到磁盘
c)当着两种持久化方案都开启时,执行AOF形式的持久化方法。
iii.那些地方使用了redis? 1.网站门户上内容信息
2.生成商品唯一id(incr—原子性)3.单点登录系统(模拟session)
iv.为什么要使用redis?
1.因为reids是内存级别的非关系型数据库,存取速度快,可使用做缓存,也可使用做数据库,还可以用作dubbo的注册中心。缺点:不适合缓存对象型数据,但是可以将对象型数据转型为key-value形式存储在redis中。
2.对比mysql:MySQL,关系型数据库,二维表行列模式数据,存取都是直接和磁盘打交道,相对存取速度慢。
3.相比较于传统的存储流程:浏览器---》服务器---》数据库单线程返回,传统的方式并发量太低,高并发的情况下,数据库压力巨大
4.而加入缓存后:浏览器---》服务器---》缓存服务器---》数据库形式,服务器可以直接与数据库请求,而在服务器与主句库请求之前,先去找缓存再找数据库,在服务器不忙碌的时候,缓存再与数据库同步,减小了数据库的压力
5.因为redis的key-value形式数据,操作方便,相对于mongodb易学易用,而在处理对象数据时。推荐使用mongodb a)Mongodb和redis都是nosql(非关系型数据库),采用结构型存储,二者在使用场景中,存在一定的区别,这也主要由于二者在内存映射的处理过程、持久化的处理方法不同。
b)Mongodb建议集群部署,更多的考虑到集群方案,redis更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。
c)我们使用redis的主要原因其实也差多不是需要其进程的顺序写入 d)更多redis与mongodb的对于参照http:// 6.redis相对于memcached:
a)redis具有持久化机制,可以定期将内存中的数据持久化到硬盘上 b)redis具备binlog(二进制日志)功能,可以将所有操作写入日志,当redis出现故障,可依照binlog进行数据恢复。
c)redis支持virtual memory,可以限定内存使用大小,当数据超过阈值,则通过类似lru的算法把内存中最不常用的数据保存到硬盘的页面文件中
d)redis原生支持的数据类型比memcache多,使用的想象空间更大。e)redis在性能上要次于memcache,因为redis是单线程的,而memcache是多线程的。
v.怎么使用的redis?
1.在服务器执行查询时,先查找redis缓存,如果缓存中没有此缓存,则查询数据库,服务器将查询到的数据加入redis缓存,然后返回给客户端,当客户端下一次请求此数据时,直接访问缓存获取数据,就不需要再查询数据库了,这样就减少了数据库的访问,减小了数据库的压力。2.使用redis中的重要对象:jedis对象,jedisPool连接池,jedisCluster集群使用。
3.我们使用jedis的客户端jedisClient,集群版的实现类为JedisClientCluster,面向接口编程思想,我们都是统一调用接口就行了,当spring整合redis集群版的时候,在spring中配置好jedisCluster,在我们实例化jedisClientCluster时,我们会向jedisClientCluster中注入一个jedisCluster。4.单机版:不重要,忽略
5.集群版:需要再spring中配置集群的节点,以及每个节点的主机号和端口号,配置一个jedisCluster的bean,方便调用。a)集群的两个共性: i.ii.失败迁移(Failover):解决采用主-从备份 负载均衡(LoadBalance):采用nginx 6.集群版搭建:
a)创建6个redis实例,每个实例运行在不同的主机或者端口,需要修改redis.conf配置文件
b)配置文件中还需要把cluster-enabled yes前面的注释去掉 c)启动每个redis实例
d)使用ruby脚本搭建集群:./redis-trib.rb create –replicas 1 主机:端口,每个redis主机之间使用空格分开。
7.调用jedisclient的set(key,value)方法加入缓存 8.调用jedisclient的get(key)获取缓存
9.调用jedisclient的expire(key,time)设置过期时间
vi.使用缓存存在问题 1.缓存数据同步问题
a)解决:当执行增加修改删除广告时,清空缓存中对应的广告的缓存,当载此取查询时,先查询数据库,再加入缓存,再返回数据到客户端 b)实际生产环境中:使用消息队列同步
8)Solr服务 i.Solr是什么?
1.它是基于Lucene的全文检索服务器,solr提供了比lucene更为丰富的查询语言,同时实现了可配置,可扩展,并对索引,搜索性能进行了优化。Solr可以独立运行在servlet容器中。Solr提供了一个管理界面,通过管理界面可以查询solr的配置和运行情况。
ii.项目中那些地方用到了solr?
1.我们的项目单独搭建了一个solr服务,搜索服务工程,搜索系统。
iii.为什么要使用solr?
1.solr相对比于Lucene,它是一款企业级的搜素引擎系统,可以独立运行,通过solr可以非常快速的构建企业的搜索引擎,通过solr也可以高效的完成站内搜索功能;而Lucene是一个全文检索引擎工具包,它不是完整的全文检索引擎。
2.solr和elasticsearch对比:
a)solr利用zookeeper进行分布式管理,而elasticsearch自身带有分布式协调管理功能
b)solr支持更多格式的数据,而es仅支持json文件格式
c)solr官方提供的功能更多,而es本身更注重于核心功能,高级功能多由第三方插件提供
d)solr在传统的搜索应用中表现好于es,但是在处理实时搜索应用时效率明显低于es e)solr是传统搜索应用的有力解决方案,但es更适合于新兴的实时搜索应用 f)solr成熟,稳定,再不考虑建索引时,其效率更快,故而我们的项目选用solr,g)主要原因也是因为我们做的其实也是一个传统电商项目,不设计太多实时搜索。
iv.怎么使用的solr?
1.安装solr服务器,需要jdk1.7及其以上环境 2.需要一个servlet容器,我们采用tomcat 3.搭建solr集群,需要4个tomcat实例,4个solrhome,3个zookeeper节点。
4.配置zookeeper,在每一个zookeeper里面创建一个data目录,并且创建一个myid,修改zoo.xml中的端口号、dataDir、文件尾部添加server的信息
5.配置4个tomcat:修改端口号,需要把solr.war包复制过来,修改solr的家目录,修改每一个solrhome里的solr.xml,修改tomcat/bin/Catalina.sh添加一个JAVA_OPTS 6.关联zookeeper和solor:使用zkcli.sh-zkhost zookeeper的主机端口号-cmd upconfig-confdir solorhome的conf目录-confname 文件名; 7.添加分词器
8.添加项目所需的域字段:商品id、商品标题、商品买点、商品价格、商品图片、分类名称、商品描述 9.collection分片
10.在项目中于spring整合,配置一个cloudSolrServer的bean,需要bean中指出zkhost和使用的collection 11.在使用时我们使用cloudSolrServer的父接口solrserver。12.为域字段创建一个实体SearchItem便于封装数据 13.服务层使用步骤:
a)创建一个solrserver对象
b)为每一个商品创建一个solrinputdocument对象 c)为文档添加域 d)向索引库中添加文档 14.表现层使用步骤:
a)创建一个solrserver对象 b)创建一个solrquery对象
c)需要设置查询条件,分页条件,设置默认搜索域,高亮设置等 d)执行查询,返回queryResponse对象 e)取返回结果封装到list
g)得到查询结果
v.使用solr存在什么问题? 1.索引库和数据库同步问题
2.解决:使用activeMQ,当我们添加修改删除商品时发送一条topic消息,在我们的搜索服务里需要写一些商品变化监听,当发出消息后我们应该执行那些具体的操作,如接受到商品添加的消息,这向索引库中添加当前商品的信息。
9)ActiveMQ(消息队列)i.什么是activemq? 1.开源的消息总线 2.特点
a)多种语言和协议编写客户端。
b)完全支持jms1.1和j2ee1.4规范(持久化,xa消息,事务)c)对spring支持 d)支持ajax 3.消息传递形式:
a)点对点模式:一个生产者一个消费者 b)发布订阅模式:一个生产者多个消费者
c)Jms消息格式:StreamMessage、mapMessage,textMessage(常用)、objectMessage、bytesMessage 4.在linux在安装启动即可 ii.项目中什么地方使用了activeMQ?
1.在对商品执行添加修改删除功能操作时,使用activeMQ发出一条商品具体变化的消息,如增加一个商品,发出一条商品增加的消息textMessage(包含一个商品id),在搜索服务层监听接收消息,根据消息包含的商品id查询数据库,再将对应的商品同步到索引库。
iii.为什么要使用activeMQ 1.以往在业务逻辑中添加一个同步业务逻辑,这样做的缺点是,业务逻辑耦合度高,业务拆分不明确
2.业务逻辑和调用服务分开实现,业务逻辑达到了分开,但是服务间的耦合变高,服务的启动还有先后顺序。
3.故而引用activeMQ,activeMQ是一个消息中间件,这样可以使我们的服务之间完成解耦。
iv.怎么使用的ActiveMQ?
1.使用activeMQ需要有一个生产者producer和consumer,最重要的是一个JMSTemplate模板
2.发送端Spring整合ActiveMQ(抽象工厂设计模式)
a)配置一个真正可以生产
Connection的工厂ActiveMQConnectionFactory,需要指定borkerURL(activeMQ服务的主机号和端口)
b)配置一个用于管理具体工厂的抽象工厂,需要引用真正的工厂 c)配置jms模板,它可以进行消息发送、接收等,需要给它指定引用connectionFactory d)配置消息的模式)(queue----ActiveMQQueuetopic----ActviveMQTopic)
e)服务层发送消息直接使用JmsTemplate调用send方法发送消息 3.消息接收端Spring整合ActiveMQ
或者a)写一个监听器监听消息的类,这个类需要实现MessageListener接口,这个类中接收消息,取消息包含的信息再去操作具体业务 b)与发送端的spring的整合大体与发送端一致,但是还需要配置自定义监听器和监听器容器,在监听器容器中需要指定连接工厂、消息模式和监听器
v.使用ActiveMQ存在什么问题? 1.怎样保证消息必达
a)消息落地,就是把消息保存到数据库,这也解决了消息服务器宕机的问题
b)消息超时、重传、确认,增加一些方法,解决消息丢失和是否确认收到消息
10)页面静态化(freemarker)i.什么是freemarker?
1.Freemarker是java语言编写的模板引擎,它基于模板来生成文本输出,与web容器无关 2.模板+数据集 3.模板中的常用语法
a)访问map中key:${key} b)访问pojo中的属性:&{pojo.field} c)访问集合中的数据:<#list 集合名 as 变量名>${变量名.field}#list> d)取循环中的下表${变量名_index} e)判断<#if 条件><#else>#if> f)日期格式化${date?date},${data?string(格式)} g)Include:<#include “模板名称”> h)处理空值;${data!} ii.项目中什么地方用到了freemarker? 1.使用freemarker生成商品详情页面
iii.为什么要使用freemarker?
1.商品详情页面存在一定的访问量,整个商场内的商品繁多,如果是用jsp动态展示数据会很大程度的增加数据库的压力;2.直接使用jsp动态展示商品详情,这种方案能抗住的并发量实在太小,稍微大一些的并发访问就会导致数据库崩盘,3.使用jsp+缓存动态展示商品详情页面:这种方案可以支撑起一中小型网站,但是当并发访问量特别大的时候,这种方案就显得很吃力了,因为redis毕竟是内存级别的数据库,并发量过大,也会使其性能大幅度下降。4.使用jspl+redis集群:这种方案其实是可行的,但是代价昂贵
5.使用html页面展示商品详情,html的加载比jsp快,占用资源小。故而我们为了提高并发访问和缩小项目成本而使用freemarker来完成页面静态化。
iv.怎么使用的freemarker?
1.原理:模板+数据集+freemarker=输出,输出可以是html、jsp、xml或者java代码等。2.使用步骤: a)Spring整合freemarker,配置一个FreeMarkerConfigurer的bean,给出模板文件路径和编码格式 b)从spring中获取configuration对象
c)使用configuration获取template对象并指定模板名 d)创建数据集
e)使用template对象的process方法生成文件,在方法中需要指定文件存放的路径。f)关流
3.项目中文件输出的文件名:商品id+“.html” 4.输出文件路径:工程外部的任何目录上都可以
5.生成静态页面的时机:商品添加后,生成静态页面,我们可以订阅商品添加时activeMQ发出的消息,当接收到消息时就开始生成静态页面。6.实际生产项目使用页面静态化技术:
a)将商品详情展示工程部署在一台服务器上 b)工程中订阅商品添加的topicc消息
c)当监听器接收到消息时,这台服务器上的tomcat专门负责生成静态页面,并存储在一个指定的工程外的目录下
d)用户访问时,提供一个http静态资源服务器专门访问生成的静态页面
v.使用freemarker存在什么问题?
1.对实时动态数据处理不敏感,如果要处理实时动态数据,可以使用ajax一部请求 2.11)Nginx i.什么是nginx?
1.Nginx是一款高性能的http服务器、反向代理服务器、电子邮件服务器 2.官方测试nginx能够支撑5W并发连接,并且内存等资源消耗非常低,运行稳定。3.引用场景:
a)http服务器:nginx是一个http服务可以独立提供http服务,可以叫做网页静态服务器
b)虚拟主机:可以实现一台服务器虚拟出多个网站
c)反向代理(负载均衡服务器):在高并发情况下,需要用多台服务器集群可以使用nginx做反向代理,并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
4.ii.项目中什么地方用到了nginx?
1.访问商品详情页面时,是通过访问nginx静态资源服务器访问商品详情页面。
2.登录注册通过nginx反向代理访问sso单点登录的session服务器和应用服务器
iii.为什么要使用nginx?
1.单个Tomcat最大能处理的并发只有500不到,考虑整个商场项目上线后的并发量远不止500,需要更大的并发,tomcat不能满足需求。2.单个Nginx的并发可以达到50000,相对于tomcat,并发量的到巨大的提升
3.传统访问模式:客户端------》应用服务器:并发低,反应慢
4.加入nginx:客户端----》nginx----》引用服务器集群:将一个应用部署在多台服务器上,将大量请求分配给多台服务器处理,同时带来的好处是某台服务器挂了,只要其他服务器还在运行,不会影响用户使用。a)负载均衡原理:http upstream模块,这个模块通过一个简单的调度算法来实现客户端ip到后端服务器的负载均衡,算法有四种: i.轮询(默认):每个请求按时间顺序逐一分配到不 同的后端服务器,如果后端某台服务器挂掉了,故障系统自动剔除,使用户访问不受影响;使用weight指定轮询的权重,权重越大的被访问的几率越大,主要用于后端服务器性能不均衡的情况。ii.Ip-hash:每个请求按访问ip的hash结果分配,这样来自同一个ip的用户固定访问一个后端服务器,有效解决了动态页面存在session共享问题
iii.Fair:这是 一个更加智能的负载均衡算法,此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。
iv.url-hash: 此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
5.nginx高可用,为了屏蔽负载均衡服务器宕机,需要建立一个备份机,主备机之间采用心跳检测机制。6.总之nginx功能强大,用它没毛病
iv.怎么使用的nginx? 1.v.使用nginx存在什么问题?
12)单点登录(single sign on)i.什么是单点登录系统?
1.在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,它包括可以将本次登录映射到其他应用中,用于同一个用户的登录机制
ii.为什么要有点单登录?
1.传统的登录方案是将用户信息保存在session中,放在session中存在一个问题就是session共享问题,也就是在集群情况下,session存在的服务器不一样时,要保证这些session中的内容都一样才能确定用户是否已经登录,一般的解决方案是把session复制,但是当集群过多时,session复制会引发集群风暴,降低服务器的性能,故而我们将session单独提取出来做一个session服务器,每次登录访问session服务器来判断用户是否登录,也实现了session的统一管理。
2.使用session服务器,保存session信息,使集群的每个节点都是五状态的,需要模拟session,我们使用redis模拟session,实现session的统一管理。iii.项目中怎么实现的单点登录? 1.业务逻辑:
a)普通登录,在服务端检查用户名和密码是否正确,不正确返回登录界面,正确执行下一步
b)生成token(令牌),那用户信息保存至redis中并设置一个有效时间
c)返回登录成功 d)Token写入cookie中
e)判断是否有回调url(在用户是从订单页面跳转登录,然后登录成功后应该跳转回订单页面),没有则进入首页,有则进入下一步 f)返回用户已经登录,显示订单信息
g)用户选择查看订单 h)请求查询订单到服务端 i)j)从cookie中取token 调用sso服务根据token查询用户信息,接收token k)根据token查询session l)判断token的值是否还存在,不存在说明已经过期需要重新登录,存在则进入下一步
m)调整token对应的值的过期时间 n)返回用户已登录 o)显示订单
13)Shiro(权限框架)i.Shiro是什么?
1.是java的一个安全框架,使用简单,功能强大,执行身份认证、授权、密码学和会话管理,使用shiro的易于理解的api,可以快速、轻松的获得任何应用程序。2.四大基石
a)身份认证(Authentication),有时也简称为“登录”,这是一个证明用户是他们所说的他们是谁的行为
b)授权(Authorization),访问控制的过程,也就是决定“谁”去访问“什么”
c)会话管理(Session Managerment),管理用户特定的会话,即使在非web或ejb应用
d)加密(Cryptography),通过使用加密算法保持数据安全同时易于使用
ii.iii.项目中什么地方使用了shiro? 为什么要使用shiro? 1.对比springSecurity a)没有springsecurity功能强,实际应用并不需要那么复杂的东西,使用小巧而简单的shiro就足够了。b)
iv.怎么使用shiro?
1.Shiro运行主要运行流程
a)Application(用户编写的代码)b)Subject(就是shrio管理的用户)
c)Shrio securityManager(安全管理器):是shrio权限控制核心对象,在编程时,只需要操作subject方法,底层调用securityManager方法,无需直接操作securityManager d)Realm(应用程序和安全数据之间连接器):应用程序进行权限控制读取安全数据,通过realm对象完成
2.执行流程:应用程序调用subject,subject调用shrio manager,依次调用realm,realm在读取安全数据。3.四种权限控制方式:
a)在程序中通过配置subject编程方式 b)配置filter实现url粗粒度
c)配置dialing,基于注解实现细粒度
d)在页面使用shiro自定义标签实现页面显示权限控制 4.url粗粒度实现过程:
a)在web.xml中配置一个名为shiroFilter的delegatingFilterProxy,名字不能乱取,因为他会去spring的配置文件中取寻找同名的shrioFilter的bean。b)在applicationContext-shiro.xml
中配置
shiroFilter,shiroFilterfactory权限过滤 c)配置realm d)配置安全管理器
e)将自定义realm注入安全管理器securityManager中 f)在登录方法中
g)从securityUtils中获取subject对象,调用个getSubject()方法获取
h)Subject对象调用其中方法(登录退出)i)自定义realm对象,实现认证方法(doGetAuthentication())和授权方法(doGetAuthorizationInfo())j)
5.方法级别细粒度实现过程
a)配(置
applicationContext
激
活
注
解和
defaultAdvisorAutoProxyCreatorauthorizationAttributeSourceAdvisor---注入securityManager)b)在方法上使用注解(@RequiresUser………)
c)代理目标类开启,在注解管理实务
shiro
注解
e)
v.使用shiro存在什么问题?
14)Quartz(任务调度框架)i.什么是quartz?
1.是一个任务日程管理系统,一个预先确定(被纳入日程)的时间到达时负责执行(或通知)其他软件组件的系统 ii.项目中什么地方使用了quartz?
1.编一个:比如商品活动过期是时间,项目数据更新时间啊之类的
iii.为什么要使用quartz?
1.Quartz可以嵌入在另外一个独立的应用程序中 2.可以在用服务器内被实例化,并且参与事物 3.可以作为一个独立的程序运行
4.可以被实例化,作为独立的项目集群(负载均衡和失败转移功能),用于作业的执行。
iv.怎么使用的quartz? 1.使用步骤
a)创建job类
b)配置job到spring中 c)给job类配置jobDetail d)配置调度触发器 e)配置调度工厂 2.实际配置
a)配置JobDetailFactoryBean的bean,指定job类
b)如果配置SimpleTriggerFactoryBean的bean,指定jobDetail,指定开始和持续时间
c)如果配置SchedulerFactoryBean的bean,是定jobFactroy,指定触发器,在触发器中添加simpleTrigger v.使用quartz存在什么问题? 1.它需要使用jdbc-jobstore, 使得quartz本身的新能减低 2.所有节点所在的机器的时间差必须在一秒以内 3.配置文件中的数据密码必须是明文的
【金鱼淘淘作文】推荐阅读:
金鱼小学作文06-24
金鱼的眼泪作文06-04
金鱼的记叙作文10-02
小金鱼二年级作文汇总06-05
描写金鱼的作文700字07-08
写小金鱼的初一作文09-10
我和金鱼三年级作文10-04
我的小金鱼400字作文06-04
我喜爱的小金鱼作文06-15
我的金鱼伙伴作文400字09-10