第一篇:软件开发专业调查报报告范文
人
才
需
求
调
查
报
告
班级:计算机XX班 姓名:XXX 学号:08030100 时间:2009年2月5日 软件开发专业调查报报告
1946年,世界上第一台电脑在美国诞生。1999年,中国大学扩招计算机专业大学生,计算机一直在发展,而且以一种翻天覆地的速度再发展。随着社会经济的发展,对信息化的高度要求,IT行业在2003年进入一种火热的发展趋势。到了今天,根据近几年的大学生毕业就业调查显示,计算机专业成为了各种就业低下的专业之一。很多人认为计算机专业将成为,或者已经成为一个冷门的专业了。这是事实吗?
作为计算机专业的一名学生当然对这些问题十分的关注,我们关注自己的专业,关注自己未来的工作,未来计算机行业的发展,为此,在寒假生活里,我特地通过各种渠道,对自己的专业做了个比较全面的调查,希望对自己的未来能获得一个清醒的认识,进而对现在做个更好的规划,是自己始终在发展的社会中立于不败之地。
我们不能否定的是随着科技的进步和信息事业的发展,尤其是计算机技术的发展与网络应用的逐步普及,电脑已成为人们工作和生活中不可缺少的东西。IT行业迅猛发展,就业工作岗位也比比皆是,在最近几年内,IT职场排行榜仍旧处于所有行业中的“老大”。计算机专业学生就业方向也应该有所提高,但据统计表明,计算机专业学生就业率有明显的下降,这是为什么呢?虽然说计算机这行就业单位很多,但是面临的竞争更加激烈。只有对基础知识的学习才可以受用终身。由于网络的普及,有人认为计算机是随便专业的学生都可以抢饭碗的专业。大家都说计算机是“民工专业”,随便一个学数学,生物,甚至物理化学的学生都可以很容易踏足这个方向,然后一脚踢开科班出生的计算机专业学生,拿到offer。但是我们从实际调查了解到的情况,的确很多搞计算机很厉害的人并非科班出身。毕竟,计算机现在成了大众消费品,门槛低,一台PC,再买几本书,就可以学了。做实验也都是下载网上数据,然后实施, 而如VB之类写个小程序跑跑就行了。确实不像生物,化学,物理这些,需要严格昂贵的实验设备才能做。可是,有很多学科,比如数学,平面设计,现代文学,连PC都可以不要,只要铅笔和白纸就可以做了,那不是更 “民工化”?仔细想想在国内工业界,还是学术圈认识非科班出身的IT们,知识体系或许多多少少是有缺陷的, 虽然他们在局部领域有很不错的工作。我的一个叔叔很喜欢计算机。他自学J2EE。从基本的Web开发,JSP,一直到大型的JBOSS,轻量级的Spring,都是无一不精通。甚至还自学了TCP/IP,Linux下大规模多进程的开发。这里说的精通,不是纸上谈兵,会背书和考试的标准。他的精通,都是在真实的大型服务器上有过实际的产品开发作为依据的。这样人在国内拿个月薪一万应该算保守吧。但是,他始终在计算机理论方面的学习无法跟进科班出身的同学相比。专业出身的人和他合作之初的时候,发现他在处理实际优化问题上,几乎只会做两件事情,一个是缓冲,第二就是Hash索引。由于没有深入学习算法,数据结构,操作系统等理论知识,所以在他看来,很多优化策略都是如此教条式的策略。遇到实际问题的时候,不见得就有效了。真正一个合格的科班计算机学生是应该能够根据实际问题分析缓冲,Hash索引的平均时间复杂度,空间复杂度的。而对于他这样来自文科班,光是求数学期望结合概率问题,就足够麻烦了,自然看不明白深入的算法分析。还好,凭着他个人对计算机无限的兴趣,后来他自己也逐步完善自己的知识体系。而在优化的实际的软件开发,产品设计,需要处理大规模数据的时候,涉及到了很多数据库,操作系统的知识,就发现自己很难适应。比如说,为什么实际系统里面瓶颈都是数据库?数据库里面的聚集索引为什么快,为什么读数据的策略要顺序读?为什么一定要使用异步I/O,如何使用„等等一系列的问题,让一个完全没有操作系统,数据库,网络背景的人会感到无所适从。而我们都知道,这些东西在实际的应用环境下的优化很多时候比数理计算上的优化更重要。缺乏了实际基础知识而做的理论优化,很多都是空中楼阁。CS毕竟是一个应用学科,脱离了实际应用的研究是没有意义的。其实身边的非科班出身最后学得比科班出身还好的人也大有人在。但是,他们私底下付
出的汗水也是有相当的份量,并非所谓外行人所说的,轻轻松松就可以抢IT 的饭碗。即便能轻松抢到的,也不见得是什么好饭碗。可以打一个比方。国内现在职业技术培训学校很多,很多教3DMax也可以快速培养出一个美工来。但是,真正能够在各大游戏公司里面做美术总监,原画设计的人,始终都还是从大学里面学平面设计出来的。真的美工设计,都要从基本的色彩,素描,构图一步一步学过来的,不是只会一点3DMax就可以速成的。从我自身的感受来说,要是真的打算好好学习CS专业,大学本科到硕士期间需要不断地学各种基础数理知识,专业课程,同时也要不断地做各种Project汲取工程经验。计算机学科算是一个相当综合的领域。既需要科学家一样的数理头脑,同时又要有工程师那样的系统头脑,能同时最好这两点真的很不容易。即便是在科班出身的人,也往往只能在其中一个方面突出。但是,科班出生的学生们,真的不需要惧怕外专业的竞争者。老天给所有人的都是一天24个小时。遇到学数理厉害的,我们可以跟他比工程,遇到工程厉害的,我们可以跟他们比数理。如果真的遇到两者都很厉害的,那么认命也不会亏。
对此,计算机专业出身的我们只有不断的完善自我才能使自己在趋于白热化竞争的IT行业找到立足之地,实现自身的价值与追求。我们应该从以下几个方面从大学生活开始就不断的提高自身素质。
一、要生活在群体之中,群体是我们生活的灵魂。
二、锻炼自己的表达能力。
三、学好专业知识,基础知积功底要好,社会知识渊博。
四、对生活、对工作要积极主动、充满热情、灵活自信。
五、锻炼自身管理经验和能力,提升自我的天资、号召力、管理能力。
六、诚信做人、严于律己、宽以待人。
当然,做到以上几点并不意味着就可以找到好工作,挣到大钱了,大学生在学校时,如果想在计算机高层职业有所突破,就要学好数学和英语,特别是在算机应用、算法和编程。同时要不断地挑战自我、完善自我,让自己的一生过得精彩和充实。用业余时间去做点兼职工作,开阔眼界。同时要注重自己的人际关系。把握好自己的发展方向。无论在哪个行业,干好都是不容易的。在今天这个充满机遇和挑战的时代里,在软件产业这个高速发展、不断创新的领域内,只有那些不懈努力、善于把握自己、勇于迎接挑战的人才能取得真正的成功。中国高新技术产业能够在新世纪中蓬勃发展,中国的人才能够在事业上不断取得成功。所以,大学里要好好把握机会,培养自己的学习能力、交流能力和团队合作能力,诚信处事。学会与人相处,这也是大学中的一门“必修课”。
这些年计算机有些专业确实已经发展的有饱和之势,然而计算机的迅猛发展同时也提出了对软件的不断更新与测试,同时在安全保护计算机方面也出现了高度的发展空间。2011年各行业就业依然严峻,据2月22日在北京举行的全国就业工作座谈会得知。2010年应届毕业生规模是本世纪初的6倍,2011年高校毕业生人数为660万人,“十二五”时期应届毕业生年平均规模将达到近700万人。“高校毕业生,是就业工作的重中之重。”人力资源和社会保障部部长尹蔚民在会上强调,“我们必须下大气力抓好高校毕业生就业工作。”
而据国内某知名网站统计,目前软件测试工程师的需求逐年增加,据相关数据统计未来软件测试的工作岗位需求将突破40万大关。如果你认为软件测试只是对计算机专业的人来说是个好工作,那么你就错了。其实的软件测试这个行业的入门门槛很低,它不像开发人员那样要熟练编写程序代码,掌握JAVA、c++等语言,测试人员只要能看懂程序代码,掌握基本的C语言知识,了解数据库等相关知识即可。和开发相比而言门槛算是很低了,因此很多非计算机专业的人学习起来也都是很快的。更重要的是它不像开发那般重男轻女,测试人员一般要求对工作更加耐心、细致、敏感,这从某种程度上来说更适合女性。在很多公司里,相比开发人员的“阴阳失调”,测试人员的男女比例更加均衡。而且测试的职业生涯比开发
要长很多。一般的开发人员到了40岁的时候都要转行了,但是测试人员却是个越老越吃香的职业,很多人在50多岁的时候仍然从事测试行业,工作时间越久,测试经验越丰富。软件测试已经在国外非常成熟,国内的发展也是刚刚起步,同时国内大专院校没有相关软件测试专业,目前从事测试的人员都是从开发人员转测试工作,对系统的软件测试工作理解不到位。国内目前只有少数软件测试的培训机构,其中北测教育作为国内最专业的软件测试工程师培训机构,每年帮助上千名应届生顺利入职国内外知名IT企业。
在新浪求职上显示,IT行业巨头争夺软件测试人才,当然也不能说其他的计算机行业就难以就业,对此专家建议切忌有病乱投医的行为,大学毕业生应理智看待自身条件,合理选择职业。在凭借自身专业能力无法突破瓶颈时,可以放宽视野,通过职业培训转变行业,选择进入就业前景好的行业。大学毕业生该选择哪些专业?专家认为如软件测试师等一批朝阳职业就值得选择,并对软件测试行业做出了相应的分析。
近年来,中国软件产业保持了迅猛发展的态势,但是,由于一直以来中国许多软件企业存在着“重开发、轻测试”的倾向,在造成软件产品质量问题日渐突出的同时,也突显了中国软件测试人才的极度匮乏。这不但已经成为影响中国软件产业发展的瓶颈,制约着软件整体质量的提高,同时也加重了软件产业的开发和服务成本负担。因此,如何尽快建立软件测试人才的系统培养机制、进而保障软件业的健康化发展已成为现阶段亟需解决的当务之急。
为了同国际IT行业接轨,软件测试行业近几年有了飞速发展,以前人们认为的“重开发、轻测试”倾向有了很大改观,测试人员的缺口越来越大,2006年软件测试人才的缺口超过30万,据专家预测,在未来5到10年中这一数字还将继续增大。统计显示,在中国一百二十多万软件从业人员中,真正能担当软件测试职责的不超过5万人。在软件业发达国家,软件测试人员与开发人员之比接近11,而在中国该比例仅为18左右,很多企业没有专门的测试职位。在目前已有的IT职业中,软件测试工程师职业寿命长,发展前景广阔,待遇优厚等特点,已经成为现在求职者关注的职业。
IT行业是一个充满挑战和机遇的行业,只要我们有勇气,能坚持,有决心,一定可以在计算机行业找到自己的成功,实现自己的理想。
个人认为未来计算机安全和软件测试以及计算机网络的发展会有很大的发展空间。通过这次调查我对计算机获得了更深刻的认识,但依然浅薄,希望自己在以后的学习之中获得更大的进步,在未来的发展过程中始终进步,始终立于不败之地。希望自己在专业方面可以获得突破。
2009/02/05
第二篇:软件开发专业实习报告
软件开发专业实习报告
软件开发专业实习的开展能使实习生们加深对自己专业的认识,确定自己以后的努力方向。以下是小编为大家精心整理的软件开发专业实习报告,欢迎大家阅读。
第一篇:软件开发专业实习报告
转眼已经在东软实训这样的大家庭中生活快10个月时间了,之前的兴奋、喜悦如今已经让我熟悉,在这里的每一天都会让我有成为一名真正财富拥有者的冲动。也许对别人来说,一定不能体会为什么在这不到10个月的时间会让一个人有翻天覆地的变化,但是变化就是这样一点一点产生的。
在东软的实训生活中,我深深体会到了自己在专业知识方面的欠缺和不足,也意识到了自己做为计算机软件工程专业的学生,要想在以后的职业中崭露头角,除了要有过硬的理论知识,健康的体魄外,还必须具备良好的心理素质,使自己在以后的途中无论经历什么样的困难,都立于不败之地。这正是本次实训的根本目的。
通过实训中心老师的课堂讲解与企业化标准的培训,使我加深了对自己专业的认识。从而确定自己以后的努力方向。要想在短暂的实训时间内,尽可能多的学到东西,就需要我们跟老师或同学进行很好的沟通,加深彼此的了解。只有我们跟老师多沟通,让老师更了解我们,才能跟真切的对我们进行培训工作。由此,班级的文化共享就在生活中慢慢形成了。
纸上得来终觉浅,绝知此事要躬行!在这短短的时间里,让我深深的感觉到自己在实际应用中所学专业知识的匮
乏。让我真真领悟到学无止境这句话的涵义。而老师在专业认识周中所讲的,都是课本上没有而对我们又非常实用的东西,这又给我们的实训增加了浓墨淡采的光辉。我懂得了实际生活中,专业知识是怎样应用与实践的。在这些过程中,我不仅知道了职业生涯所需具备的专业知识,而且让我深深体会到一个团队中各成员合作的重要性,要善于团队合作,善于利用别人的智慧,这才是大智慧。靠单一的力量是很难完成一个大项目的,在进行团队合作的时候,还要耐心听取每个成员的意见,使我们的组合达到更加完美。
这次实训带给我太多的感触,它让我知道工作上的辛苦,事业途中的艰辛。让我知道了实际的工作并不像在学校学习那样轻松。
人非生而知之,虽然我现在的知识结构还很差,但是我知道要学的知识,一靠努力学习,二靠潜心实践。没有实践,学习就是无源之水,无本之木。这
次实训让我在一瞬间长大:我们不可能永远呆在象牙塔中,过着一种无忧无虑的生活,我们总是要走上社会的,而社会,就是要靠我们这些年轻的一代来推动。这就是我们不远千里来实训的心得和感受,而不久后的我,面临是就业压力,还是继续深造,我想我都应该好好经营自己的时间,充实、完善自我,不要让自己的人生留下任何空白!
实训中除了学到不少专业知识,也了解一些社会的现实性,包括人际交往,沟通方式及相关礼节方面的内容,对于团队开发来说,团结一致使我深有体会。团队的合作注重沟通和信任,不能不屑于做小事,永远都要保持亲和诚信,把专业理论运用到具体实践中,不仅加深我对理论的掌握和运用,还让我拥有了一次又一次难忘的开发经理,这是也是实训最大的收获。
现在我对一个人最大的财富是他的人生经历和关系网络这句话非常的有感情,因为它确实帮了我们不少。除此
课本上的知识毕竟有限。通过实训,我班同学都有这样一个感觉,课本上的理论知识与实际工作有很大差距,只有知识是远远不够的,专业技能急需提高。
从最初的笨手笨脚,到现在可以熟练的按照流程开发软件,这都与我班每个人的努力是分不开的。十个月的实训,教会了我们很多东西,同时也锻炼了大家踏实、稳重的能力,每个人都很珍惜这来之不易的实训机会。
在实际工作中经常会和不同的人打交道,然而他们的态度是不可恭维的,你会感觉到他的不耐烦以及他的高傲,所以这就需要学会沟通的方式及说话技巧,学会灵活面对。通过这十个月的实训,我班同学都收获颇丰,总体来说对这次实训还是很满意的。尽管实训很累,每天早出晚归。但真的很感谢学校能够提供我们这样好的实训机会,以及东软给予我们的实训平台。我们深刻的了解到,只有经历过,才知道其中的滋味。对于我而言,喜欢体验生活,可以说通
过这次实训,真真切切的让我了解了什么是软件开发,什么是软件工程,让我对于软件最初的观点也有了本质性的改变!程序员不仅仅是一份职业,更是一份细心+一份耐心+一份责任心=人生价值的诠释。即将走向工作岗位的我们更要不断加强自己的专业技能,社会不会要一个一无是处的人,所以我们要更多更快的从一个学校人向社会人转变。为此我们将会在以后的日子里继续努力,不断激励经验,不断磨砺自己,早日走向工作岗位。
第二篇:软件开发专业实习报告
短短两周的很快就过去了,在xx的实习马上就要过去了。虽然只有短短的两周,但我学会了很多知识,熟悉了软件开发的流程,也很好的增强了自己的动手能力。
我是一名即将大四的学生,纵观现在的就业形势,国家高校的扩招,世界金融危机的横扫,大学生应该有一种居
安思危的紧迫感,特别是对已经度过两年大学的我来说,毕业并不是一个遥远的词汇。宝剑锋从磨砺出,梅花香自苦寒来,缺少了平时的锻炼,没有厚积当然不能有薄发。首先我得有思想上的紧迫感,在学校学习的都是理论知识,实践经验则是少之又少。综合能力强的人才才是这个社会需要的,成长成为社会需要的人才是我的个人奋斗目标。有了强大的精神动力,有了坚如磐石的毅力,相信成功并不遥远。
首先,我的自我能力得到了加强。在实习的前几天主要进行的是与JAVA有关知识的学习及预备知识的普及。在这之前由于种种原因我没有学习过JAVA,所以对于J我几乎一无所知。但我曾经学习过C++,所以对语言的理解和接受能力还不算太慢,尽管老师讲解速度较快但我还是尽量跟上老师的速度。在这个过程中我学会一种自学方法可以在第一遍时不求甚解,先了解知识框架,之后再在使用的过程中不断加强
对知识的理解,从而较快的学会知识并应用于实践。
其次我的实际的操作能力得到了加强。知识讲解告一段落后我们就进入了紧张而又短暂的项目中。但不得不说刚开始就碰了一鼻子灰代码书写总是出错。由于对原理理解不够透彻,语言使用缺乏足够经验所以进度极慢。在经过多次的讨论后我们对项目理解逐渐深入,所以在此投入的过程就比较顺利了。在这个过程中我明白了实践和理论的差距及二者不可分割的关系。
最后是团队协作能力的提高。在整个过程中团队协作发挥着不可替代的作用。从在刚拿到项目时对项目进行分析,然后进行分工,之后就开始工作,既各干各的又不失默契的合作。在这个过程中我们谁遇到问题会互相帮助解决提高了工作效率。
这次实习拉近了我就和社会的距离,也让自己在实践中开拓了视野,增长了才干。社会和大学一样也是受教育
和学习的地方,实习中我收获颇丰,再次感谢实习期间各位老师的指导教诲,你们给我的知识财富将让我受益终生。但是我知道学无止境,仅仅这段时间的学习还是不够的,在以后的生活中我会继续努力学习,培养自己能力,进一步完善自己。
第三篇:软件开发专业实习报告
时间过得真快,转眼间,在山大实习生活就结束了。
四周的时间能够和山大的同学一起工作、学习、生活我感到非常的荣幸,同时也感觉到很大的压力,作为电子商务专业的学生从事软件开发感觉还是有一定的困难,特别是我们还是和山大大三的学生一起,在初来时自己就有一些不自信,但随着项目的进展,我慢慢的找到了自己的位置,找到自己的目标,虽然自己与好的同学还有差距,这也给了我很大压力,但是我相信没有压力就没有动力,所以整个实训过程中我都在
不断地努力。
实训期间让我学到很多东西,不仅在理论上让我对it领域有了全新的认识,在实践能力上也得到了很大的提高,真正的学到了学以致用,更学到很多做人的道理,对我来说受益匪浅。特别是利用周六上午的时间山大为我们安排的讲座让我们了解it领域一些新的发展动态以及一些领先的技术,让我意识到自己知识的缺少,这激励我在以后的学习、工作、生活中要不断了解信息技术发展动态以及信息发展中出现的新的技术。
除此之外,我还学到了如何与人相处,如何和人跟好的交流,我们组成一个团队大家一起开发一个项目,大家的交流沟通显得尤为重要,如何将自己的想法清楚明白的告诉队友,如何提出自己想法的同时又不伤害其他的队友的面子,这些在我的实训生活中都有一些体会。可是说,第一次亲身体会理论与实际相结合,让我大开眼界。也是对以前学习的一个初审吧,相信这次实训多我
以后的学习、工作也将会有很很大的影响,在短短的二十几天里这些宝贵的经验将会成为我以后工作的基石。
作为大二的学生,经过两年的在校学习,对程序设计有了一些基本的理性的认识和理解。在校期间一直忙于理论的学习,没有机会也没有经验来参与我们项目的开发,所以在实习之前软件按开发对我来说是非常抽象的,一个完整的项目要怎么来分工以及完成该项目所需要的基本步骤也不明确,经过这次实训让我明白一个完整项目的完成必须团队分工合作,并在每个阶段进行必要的总结和检查。
在我们项目的开发过程中我们项目的步骤:详细设计、详细设计review、编码、编码review、单体测试。在项目开发过程中我也深刻的体会到详细设计对一个项目开发有明确的指引作用,它可以使开发人员对这个项目所要实现的功能在总体上有具体的认识,并能减少在开发过程中出现不必要的脱节。
经过二十多天的obbligato信息安全管理的java开发,是我对java软件开发平台有了更深一步的了解,也对nec公司的obbligato平台有了一定的了解。
这次实训是对我们两年学习的一个检验,虽然项目中很多知识我们在日常的学习中都没有遇到,这同时提醒我:要想成为一个合格的程序员就有具备一种自学能力,在工作中会遇到很多从未接触过的问题,当有了问题时要去解决,在你不断努力,寻找答案的过程中,自己的能力也在潜移默化的提升。有时遇到问题时可能有很多想法但却不知道那个正确,这就让我们不断地去探索,不断地尝试。
这次实训也让我深刻的了解到,不管在工作中还是在生活中要和老师、同学保持良好的关系是很重要的。做事首先要先做人,要明白做人的道理,如何与人相处是现代社会的做认得一个最基本的问题,对已自己这样一个即将步入社会的人来说,需要学习的东西很多。
从一起做项目的同学身上我看到了谦虚谨慎、细心努力的态度,在以后我的生活中我还会留意身边同学的优点,从他们身上找寻我所缺少的品质,不断学习。从老师那里我看到了企业人的生活面貌,没有事情可以不劳而获,今天老师们能够领导我们是他们之前努力的结果,虽然老师没有和我们讲很多公司里的事情,可是他们的言行中所表现出来的都是比我们要严谨的多的对工作的态度。
在此次的实训中我感觉到我们最大的不足就是动手的能力太差,在项目组中山大的同学也给我提出一些建议,让我有机会自己多动手,不是我们缺乏知识,而是我们没有运用知识的能力,在二十多天的项目开发过程中,我自己也认识到虽然我们的理论知识没有山大同学那么全面,但是如果在学校认真学习了,我们的理论知识并不比他们差,所以以后的日子,如果自己还要继续从事软件开发相关工作,我会更加注重自
己的动手能力。
再者,我们要有更好的学习心态,看到山大的很多同学会在晚上项目结束后再去教室上自习,深深地意识到我们的学习态度有多大的差距,原来在学校的时候我们九点基本就要从教室回宿舍了,而他们还会再继续利用九点以后的时间努力学习,虽然在山大就短短不到一个月的时间,可是我所体会到的对我以后的学习将会有很大的影响,我想在大三专升本复习的过程中,在山大的经历会让我更加有动力,更能坚定信念:坚持、努力。学习山大学生刻苦、勤奋的学习态度。
山大的实训已经成为过去,可是在山大学到的东西会一直影响我以后的发展,突然想起鲁迅先生的一句话:世上本没有路,走的人多了,便成路。生活的路也是人走出来的,每个人一生总要去很多陌生的地方,然后熟悉,然后再走向另一个陌生的地方。在不久的将来,就要踏上人生的另一段旅程,以后的路
上有时不免会感到有些茫然、无助,但生活的路谁都无法预测,只能一步步摸索,但只要方向正确,只要我们向着目标不断努力,相信在不远的将来我们一定会有一片属于我们自己的天空。
第三篇:java软件开发专业实习报告
JAVA软件开发专业实习报告一、二、三、实习的时间:2010年4月5日—2010年6月20日 实习的地点:软帝有限公司 实习的目的:
进一步了解java开发的相关知识,掌握java开发的基本技术,丰富java开发的实战经验。学习SQL的基础知识及正确的运用方法,和有用的相关技术,提高自己的工作效率。通过实习,培养我们综合运用已学知识Java语言的面向对象编程能力;培养我们动手能力;培养我们良好编程规范、编程方法;以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力;增强自己的团队协作意识,了解软件开发的思考角度和主要流程。为毕业之后能够更快地进入工作状态并且能够更好的工作,打好一定的基础。
四、实习的方式、方法:实践操作
五、实习的要点:
1.MySql数据库和SQL 数据库的使用;
2.Java中的常用设计模式;
3.控制技术-Servlet技术
4.页面设计-JSP页面;
六、实习的内容:
Mysql数据库
1)MySQL数据库管理系统概述
MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。MySQL AB是由多名MySQL开发人创办的一家商业公司。它是一家第二代开放源码公司,结合了开放源码价值取向、方法和成功的商业模型。
数据库是数据的结构化集合。计算机是处理大量数据的理想工具,因此,数据库管理系统在计算方面扮演着关键的中心角色,或是作为独立的实用工具,或是作为其他应用程序的组成部分。MySQL服务器还有一套实用的特性集合,这些特性是通过与我们用户的密切合作而开发的。在我们的基准测试主页上,给出了MySQL服务器和其他数据库管理器的比较结果。
MySQL服务器最初是为处理大型数据库而开发的,与已有的解决方案相比,它的速度更快,多年以来,它已成功用于众多要求很高的生产环境。尽管MySQL始终在不断发展,但目前MySQL服务器已能提供丰富和有用的功能。它具有良好的连通性、速度和安全性,这使的MySQL十分适合于访问Internet上的数据库。
2)MySQL稳定性
每次发布的MySQL服务器均是可用的。仅当用户尝试源自“灰色区域”的代码时才会出现问题。当然,新用户不了解“灰色区域”是什么。因此,在本节中,我们介绍了目前已知的这类区域。本节所作的介绍主要针对MySQL服务器5.0版和更高版本。在最新的版本中,更正了所有已知和通报的缺陷,但“缺陷”一节所列的除外,这类缺陷与设计有关。
java与SQL的应用
Java语言是编写数据库应用程序的杰出语言之一,它提供了方便访问数据的技术。利用Java语言中的JDBC技术,用户能方便地开发出基于Web网页的数据库访问程序,从而扩充网络应用功能。JDBC(Java Database Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一的访问接口。JDBC由一组用Java语言编写的类与接口组成,通过调用这些类和接口所提供的方法,用户能够以一致的方式连接多种不同的数据库系统(如Access、SQL Server 2000、Oracle、Sybase等),进而可使用标准的SQL语言来存取数据库中的数据,而不必再为每一种数据库系统编写不同的Java程序代码。
SQL Server2000是微软公司新一代的数据库产品,它是在SQL Server7.0建立的坚固基础上产生的,并对SQL Server7.0做了大量扩展。SQL Server2000通过高端硬件平台以及最新网络和存储技术的支持,可为最大的Web站点和企业级应用提供可扩展性和高可靠性。
Java中的常用设计模式
1)工厂模式
客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。
3)工厂方法模式
核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
控制技术-Servlet技术
1)什么是Servlet?
一个servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然servlet可以对任何类型的请求产生响应,但通常只用来扩展Web服务器的应用程序。Java Servlet技术为这些应用程序定义了一个特定于HTTP的 servlet类。
javax.servlet和javax.servlet.http包为编写servlet提供了接口和类。所有的servlet都必须实现Servlet接口,该接口定义了生命周期方法。
2)Servlet的生命周期
一个servlet的生命周期由部署servlet的容器来控制。当一个请求映射到一个servlet时,该容器执行下列步骤。
页面设计-JSP页面
1)MVC 模式
为了把表现层presentation从请求处理request processing 和数据存储data storage中分离开来,SUN公司推荐在JSP文件中使用一种“模型-视图-控制器”Model-view-controller 模式。规范的SERVLET或者分离的JSP文件用于处理请求。当请求处理完后,控制权交给一个只作为创建输出作用的JSP页。有几种平台都基于服务于网络层的模-视图-控件 模式(比如Struts 和Spring framework)。
2)JSP技术的强势
(1)一次编写,到处运行。在这一点上Java比PHP更出色,除了系统之外,代码不用做任何更改。
(2)系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比ASP/PHP的局限性是显而易见的。
(3)强大的可伸缩性。从只有一个小的Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力。
(4)多样化和功能强大的开发工具支持。这一点与ASP很像,Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下。
3)JSP技术的弱势
(1)与ASP一样,Java的一些优势正是它致命的问题所在。正是由于为了跨平台的功能,为了极度的伸缩能力,所以极大的增加了产品的复杂性。
(2)Java的运行速度是用class常驻内存来完成的,所以它在一些情况下所使用的内存比起用户数量来说确实是“最低性能价格比”了。从另一方面,它还需要硬盘空间来储存一系列的.java文件和.class文件,以及对应的版本文件。
4)JSP内置对象
(1)request对象:
该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以获取用户提交信息。
(2)response对象:
对客户的请求做出动态的响应,向客户端发送数据。
(3)session对象
session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。
(4)application对象
服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。
(5)out对象
out对象是一个输出流,用来向客户端输出数据。out对象用于各种数据的输出。
七、实践的感受和体会:
实习是为将来打基础的重要阶段,珍惜自己每一个工作的机会,不论什么人,什么学历,从事什么工作,好好的表现、展示自己的能力,不要错过好的机遇。没有一件事情是轻轻松松的,但每一件事都是让人成长的,经历一段过程,喜悦或是艰辛,尽管经历的方式不尽相同,但它的结果是相同的,我们都会因涉事而成长。
通过实习,我自身发生了重大的转变。首先,进入公司,你就是一名职业人,不再是一名学生,你要具备一名职业人应具备的素养,不迟到不早退是必然的,而且还要时刻严格要求自己,公司的规定要严格遵守。然后,在技术上也有了很大的提高,学习了很多公司自己的框架和工具,这都是一些前辈的宝贵经验。而且所作的软件应用性更强。所以,我要坚定自己的信念,在公司好好实习,争取提早转正,我相信我会在JAVA开发这条路上走的更长更远。
第四篇:软件开发专业求职信
软件开发专业求职信1
尊敬的:
本人叫xx,今年22岁,现在是xx大学05届软件开发与信息管理专业方向的三年级学生,对软件开发怀有浓烈的兴趣,且对java语言尤其熟悉,能熟练使用jsp、struts、struts2、sring2和hibernate3等流行的编程技术,并且不断学习新技术来继续丰富自已的知识,目前已经独自编写了好几个项目,例如:基于j2ee的图书管管理系统,网络商城和库存管理系统等。
基于j2se的.教师管理系统,生产线故障管理系统等。拥有一定的实践经验。但仍觉得经历甚浅,希望通过与社会接触,了解社会与软件之间的需求关系,通过更多的项目实践来提高自身的软件设计能力和编程技术。
建立本站的主要目的是为了通过网络应接一些与java技术相关的一些项目,例如基于j2ee的jsp、struts等开发web网站;或基于j2se开发应用软件件。
建立本站除了希望增加接项目和寻找编程相关的兼职的途径外,还希望能通过本网站结交更多的软件开发人士,交流软件开发知识和java编程技术,更好地提高自已的软件开发技术。
此致
敬礼!
求职人:
求职者:
软件开发专业求职信2
尊敬的领导:
你好
首先感谢您抽出时间来阅读我的求职信!
我于20xx年毕业于广东xx大学的软件开发专业,网络技术专业是21世纪的热门专业!贵公司招聘职位也是个热门专业,所以对专业人才的整体素材有严格要求!
本人是一个做事认真负责、积极主动、善于团队工作的人,思维严谨,具有良好的`学习心态,性格开朗,好学,有良好的沟通能力,与人处事方面有自己的见解,人际关系融洽,能积极吸取别人的意见和建议,工作热情高,拥有一颗年轻的心,崇高的理想,能不断的学习,更新自己,以适应社会的发展,时代的需求!有上进心、恒心、信心、诚心,能够吃苦耐劳!
期望您在阅读这求职信之后给予考虑,我期待能和贵公司一起创造辉煌!期待您的佳音!
此致
敬礼!
XXX
20xx年XX月XX日
软件开发专业求职信3
尊敬的xxx:
您好!首先非常感谢您在百忙之中审阅我的求职信!我怀着一颗赤诚的心和对事业的执着追求,真诚地向您递上我的求职信。
我叫xx,是xxx工业工程职业技术学院XX届计算机系软件开发专业的应届毕业生。并获计算机学士学位。从考入大学那天起我一直努力学习,在大学生活中培养了良好的学习习惯,所学的'课程包括了从计算机的基础知识到运用等许多方面。
通过对这些知识的学习,我对这个领域的相关知识有了一定程度的理解和掌握。并做了大量的实践,进一步加深了对计算机的认识。在学好基础知识的同时还注重多方面全面发展,多次参加了学校的各种活动,在实习过程中将理论与实践结合起来,深受学校老师和同学的欢迎。
XX年初参加了微软认证系统工程师培训,培训科目:windows nt technology,windows nt enterprise,networking with tcp/ip on windows nt,ⅱs4.0 windowsnt
具备丰富的工作经验,认真踏实负责,且具备优秀的表达能力,曾多次主持对用户和内部的技术讲解和培训,获得用户和公司的一致好评。曾在电子工业部“三金工程展风采展示会”上向来宾讲解chinagbn专线集团用户解决方案。
在激烈的人才竞争中,虽然我只是名刚毕业的大学生,也许没有工作经验,但我有颗真挚的心和拼搏进取的精神,愿为贵公司贡献出一分自己的力量,为了更好的掌握知识理论,也为更好地服务贵公司,我现在正努力自学一些更深的理论书,虽然我刚从大学毕业,没有实际的工作经验,但我相信像贵公司那样重能力,重水平,重开拓,有远见的公司,一定把能力,水平与经验同等同视,给新人一个显身手的机会,希望贵公司给我一个机会,能考虑我,我迫切希望早日成为贵公司一员。
此致
敬礼!
求职者:xxx
20xx年xx月xx日
软件开发专业求职信4
各位领导:
您好!
首先衷心感谢您在百忙之中浏览我的自荐信,为一个热情的大学生打开了希望之门。
我叫王海燕,是一名20xx年7月从长春大学毕业的学生。借此选择职业的机会,我以一颗真诚的心和对事业的执着追求,真心推荐自己。
我热爱这个专业,并致力于此。在校期间,掌握了扎实的专业基础知识,学习了数学和计算机基础知识,培养了逻辑思维能力和认真细致的学习态度,完成了各项学习任务。因为我对java编程语言特别感兴趣,所以我在业余时间参加了Jisoft国际软件工程师的培训班,并专业地学习了java编程。主要学习了java核心技术、oracle数据库的相关操作和使用、JDBC连接数据库、SSH框架的web编程,还做过几个项目,具有基本的java开发能力;此外,我成功通过了英语四级考试,具有良好的听、说、读、写能力。
学习一丝不苟,努力争取好成绩。我曾经是班里的团支书,在班里成功策划了一系列团日活动,获得一致好评。我组织的共青团日活动被评为十大共青团日活动之一,我也被评为“优秀共青团干部”,为提高我的交际能力和培养我的团队合作精神奠定了良好的基础。
20xx年10月20日至20xx年2月20日期间,我在Pactera科技有限公司的.VMware测试组实习,主要工作是根据测试要求搭建一个德国系统,在德国平台上做一些基于案例的VM产品测试。
大学毕业既是终点,也是起点。现在,我自信地踏上了人生的新台阶,我真诚地希望有一个可以展示自己潜力和价值的舞台。希望贵公司给我一个机会,我会以饱满的热情和辛勤的汗水,全力以赴奉献我的青春和才华!
祝贵公司事业蒸蒸日上!
此致
敬礼!
自荐人:xxx
20xx年xx月xx日
软件开发专业求职信5
尊敬的领导:
您好!
首先非常感谢您在百忙之中审阅我的求职信。
我叫xx,是xxx工业工程职业技术学院xx届计算机系软件开发专业的应届毕业生。并获计算机学士学位。从考入大学那天起我一直努力学习,在大学生活中培养了良好的学习习惯,所学的课程包括了从计算机的基础知识到运用等许多方面。
通过对这些知识的学习,我对这个领域的相关知识有了一定程度的理解和掌握。并做了大量的实践,进一步加深了对计算机的认识。在学好基础知识的同时还注重多方面全面发展,多次参加了学校的各种活动,在实习过程中将理论与实践结合起来,深受学校老师和同学的.欢迎。
于xx年初参加了微软认证系统工程师培训,培训科目:windowsnt technology,networking with tcp/ip on windowsnt。windowsnt,具备丰富的工作经验,认真踏实负责,且具备优秀的表达能力,曾多次主持对用户和内部的技术讲解和培训,获得用户和公司的一致好评。曾在电子工业部“三金工程展风采展示会”上向来宾讲解chinagbn专线集团用户解决方案。
我正处于人生中精力充沛的时期,我渴望在更广阔的天地里展露自己的才能,我不满足与现有的知识水平,期望在实践中得到锻炼和提高,因此我希望能够加入你们的单位。我会踏踏实实的做好属于自己的一份工作,竭尽全力的在工作中取得好的成绩。我相信经过自己的勤奋和努力,一定会做出应有的贡献。
感谢您在百忙之中所给与我的关注,愿贵单位事业蒸蒸日上,屡创佳绩,祝您的事业百尺竿头,更进一步!希望各位领导能够对我予以考虑,我热切期盼你们的回音。谢谢!
此致
敬礼!
求职人:XXX
XX年XX月XX日
软件开发专业求职信6
尊崇的小姐/先生:
您好!我叫xx,我是广东播送电视大学XX届毕业生,主修计算机使用与软件开发。欣闻贵单位是一个极具活力和生机的个人,能给予每个员工充沛的开展空间。初出茅庐,有道是良禽择木而栖,是以毛遂自荐,盼望参加贵公司的行列,一展拳脚,为贵公司更上一层楼尽我所能。
经过大学三年学习和理论的`历练,我的全体素质失掉了进步。有了一定的专业知识和技艺,具有了一定的英语根底,可以用常用的英语与人交流。此外,在校时期已经屡次参与班里的户外活动和一些校内活动,因而有较强的组织才能。幽默悲观,与人交往真诚,与冤家同窗可以相互宽容、忍让,结交了许多冤家。并且在校时期积极参与社会理论,不时锤炼本人,完成自我价值。
初涉社会难免经历尚浅,我任务踏实仔细,能享乐耐劳,责任心强。置信可塑性与开展潜力具有的我一定能在贵公司的精心打造下,成为贵公司旗下的一员。我热切等待着为贵单位愈加辉煌的今天奉献出本人的一份力气!盼望与您进一步联络!
此致
敬礼!
求职者:xxx
软件开发专业求职信7
尊敬的领导:
您好!首先,请容许我向贵公司和您致以诚挚的问候。
我是一名即将于20xx年毕业的陕西xxxx职业技术学院计算机系的`学生,所学专业是软件技术。三年来我一直坚持不懈的努力,不断充实自己和完善自我,努力提高自己的综合素质,系统掌握了所学的专业知识。因此冒昧的向您投上了这份求职信,并真实的希望能成为贵公司的一员,同时也获得一个发展自我、完善自我的的机会。
在软件方面,曾学习过c、java等,对办公软件都很熟练,还对软件工程和软件的项目管理有系统的认识。在网络方面,学习过Web应用技术,有基本的'了解,对网页美化有很大的兴趣。
在生活中,我严格要求自己,勤奋节约,具有强烈的责任心和进取心,对人热情诚恳,虚心学习,具有较强的人际协调能力和组织能力,关系集体,注重自身的团队精神的培养。
如果有幸我被贵公司聘用,愿从最基层做起,并在工作中不断进取,相信只要通过自己的努力就能为贵公司做出应有的贡献,并在工作中磨练自己,认真工作,以感谢你的知遇之恩!
再次感谢贵领导抽空阅读我的自荐信,谨祝贵公司事业蓬勃发展!
此致
敬礼!
求职人:xxx
20xx年xx月xx日
软件开发专业求职信8
尊敬的领导:
您好!
我是一名即将毕业的本科毕业生。我很荣幸有机会向您呈上我的个人资料。在投身社会之际,为了更好地发挥自己的才能,谨向各位领导作一下自我推荐。
伴着青春的激情和求知的欲望,我即将走完四年的求知之旅,美好的'大学生活,培养了我科学严谨的思维方法,更造就了我积极乐观的生活态度和开拓进取的创新意识。课堂内外拓展的广博的社会实践、扎实的基础知识和开阔的视野,使我更了解社会;在不断的学习和工作中养成的严谨、踏实的工作作风和团结协作的优秀品质,使我深信自己完全可以在岗位上守业、敬业、更能创业!我相信我的能力和知识正是贵单位所需要的,我真诚渴望,我能为单位的明天奉献自己的青春和热血!
21世纪呼唤综合性的人才,我个性开朗活泼,兴趣广泛;思路开阔,办事沉稳;关心集体,责任心强;待人诚恳,工作主动认真,富有敬业精神。在四年的学习生活中,我很好的掌握了专业知识,学习成绩一直名列前茅。在学有余力的情况下,我阅读了大量专业和课外书籍,自学部分工商管理课程,并熟悉掌握了各种设计软件。
自荐书不是广告词,不是通行证。但我知道:一个青年人,可以通过不断的学习来完善自己,可以在实践中证明自己。尊敬的先生/小姐,如果我能喜获您的赏识,我一定会尽职尽责地用实际行动向您证明:您的过去,我来不及参与;但您的未来,我愿奉献我毕生的心血和汗水!
再次致以我最诚挚的谢意!
此致
敬礼!
自荐人:xx
20xx年xx月xx日
软件开发专业求职信9
尊敬的经理:
您好!感谢你能在百忙之中垂阅的我的求职信!贵银行的良好形象和员工素质吸引着我这位即将毕业的学生,我很愿意能为贵公司效一份微薄之力!
我叫xx,是xxx工业工程职业技术学院xx届计算机系软件开发专业的应届毕业生。并获计算机学士学位。从考入大学那天起我一直努力学习,在大学生活中培养了良好的学习习惯,所学的课程包括了从计算机的基础知识到运用等许多方面。
通过对这些知识的学习,我对这个领域的相关知识有了一定程度的理解和掌握。并做了大量的实践,进一步加深了对计算机的认识。在学好基础知识的同时还注重多方面全面发展,多次参加了学校的.各种活动,在实习过程中将理论与实践结合起来,深受学校老师和同学的欢迎。
*年初参加了微软认证系统工程师培训,培训科目:windows nt technology,windows nt enterprise,networking with tcp/ip on windows nt,ⅱs4.0 windowsnt
具备丰富的工作经验,认真踏实负责,且具备优秀的表达能力,曾多次主持对用户和内部的技术讲解和培训,获得用户和公司的一致好评。曾在电子工业部“三金工程展风采展示会”上向来宾讲解chinagbn专线集团用户解决方案。
在激烈的人才竞争中,虽然我只是名刚毕业的大学生,也许没有工作经验,但我有颗真挚的心和拼搏进取的精神,愿为贵公司贡献出一分自己的力量,为了更好的掌握知识理论,也为更好地服务贵公司,我现在正努力自学一些更深的理论书,虽然我刚从大学毕业,没有实际的工作经验,但我相信像贵公司那样重能力,重水平,重开拓,有远见的公司,一定把能力,水平与经验同等同视,给新人一个显身手的机会,希望贵公司给我一个机会,能考虑我,我迫切希望早日成为贵公司一员。
随信附有我的简历。如有机会与您面谈,我将十分感谢。愿贵单位事业蒸蒸日上,屡创佳绩,祝您的事业白尺竿头,更进一步!
此致
敬礼!
求职人:XX
软件开发专业求职信10
尊敬的小姐/先生:
您好!我叫XX,我是广东广播电视大学20xx届毕业生,主修计算机应用与软件开发。欣闻贵单位是一个极具生机和活力的集体,能给予每个员工充分的发展空间。初出茅庐,有道是良禽择木而栖,是以毛遂自荐,渴望加入贵公司的行列,一展拳脚,为贵公司更上一层楼尽我所能。
经过大学三年学习和实践的历练,我的整体素质得到了提高。有了一定的专业知识和技能,具备了一定的'英语基础,能够用常用的英语与人交流。此外,在校期间曾经多次参加班里的户外活动和一些校内活动,因此有较强的组织能力。幽默乐观,与人交往真诚,与朋友同学能够互相宽容、忍让,结交了许多朋友。并且在校期间积极参加社会实践,不断锻炼自己,实现自我价值。
初涉社会难免经验尚浅,我工作踏实认真,能吃苦耐劳,责任心强。相信可塑性与发展潜力具有的我一定能在贵公司的精心打造下,成为贵公司旗下的一员。我热切期待着为贵单位更加辉煌的明天贡献出自己的一份力量!盼望与您进一步联系!
此致
敬礼!
求职人:XXX
20xx年X月X日
软件开发专业求职信11
尊敬的公司领导:
您好!我希望成为贵公司深圳分部的项目管理工程师,亦可胜任应用开发工程师的工作,我自信符合贵公司的要求。
我是中山大学计算机科学系计算机软件专业XX届的本科毕业生。面临择业,贵公司立足于计算机基础业务,积极发展垂直网站群和宽带网络服务,其明确的战略部署、良好的发展势头深深地吸引了我,我殷切地期望公司能给我一个展现激情和才智的舞台。
项目管理是我的特长。和同学多次合作完成课程项目的经历中,一直负责项目规划:决定使用原型开发还是其他模型开发、分配各人应完成的任务以及任务完成的时间、监控模块完成的质量等等。特别是在实习期间,以asp+sql server7.0为平台,我成功完成了电子商务系统 项目的管理和开发,项目的综合要求不仅使自己对网络数据库有了初步了解,而且对软件工程在开发中的运用也得到了更多感性的认识,而不是只停留在理论层面,提高了如何规划项目、如何控制项目进度和质量、如何协调各小组的工作等管理规划能力。目前,我正在进行mcse的备考工作,进一步提高自己。
我拥有较强的英文专业文献阅读能力,使自己能够直接获得最新的技术信息,跟上时代发展的脚步。我还积极参加各种活动和社会实践,如参予学校社团的'组织策划工作,参予组织班集体活动,在网络公司从事兼职等等,开拓了自己的视野并积累了宝贵的工作经验,特别是和同事的合作让自己获益良多。
在毕业之际,我热诚地希望获得贵公司提供的职位,为联想成为一流的信息企业贡献自己的力量,和联想一起成长!我满怀热情,期待一个施展才华的工作环境。
随信附有我的简历。如有机会能和您面谈,我不胜感激。
最后,祝贵公司事业蒸蒸日上!
此致
敬礼!
求职人:XXX
20xx年X月X日
软件开发专业求职信12
尊敬的领导:
您好!
首先衷心感谢您在百忙之中浏览我的自荐信,为一位满腔热情的大学生开启一扇希望之门。
我叫王海艳,是一名即将于20xx年7月毕业于长春大学计算科学与技术专业的学生。借此择业之际,我怀着一颗赤诚的心和对事业的执著追求,真诚地推荐自己。
我热爱这个专业,并投入热情和努力。在校期间,我掌握了扎实的专业基础知识,学习数学和计算机的基础知识,培养了逻辑思维能力和认真细心的学习态度,并完成了各项学习任务。由于我对java编程语言特别感兴趣,我利用课余时间参加了吉软国际软件工程师实训的培训班,专业的进行java编程方面的学习。主要学习了java核心技术、oracle数据库的相关操作和使用、JDBC连接数据库、web编程SSH框架,还做过几个项目,具备java开发的基础能力;此外,我顺利通过了国家英语四级考试,具备良好的听说读写能力。
在学习上我一丝不苟,工作上我也任劳任怨,争创佳绩。我曾担任班上团支书,成功策划了班上的一系列团日活动,获得一致好评,我组织的团日活动被评为十佳团日活动之一,我也被评为“优秀团干部”,这为提高我的交际能力和培养我的团队合作精神打下了良好基础。
在20xx年10月到20xx年2月这段期间,我曾在文思海辉技术有限公司VMware测试组实习,我负责的主要工作是根据测试的需求搭建德语系统,并在德语平台上根据case对VM的.产品做一些测试。
大学毕业,既是一个终点,更是一个起点。现在,我满怀信心地踏上了人生的新台阶,热忱地希望有一个让我发挥潜力和展现价值的舞台。盼望贵单位给我一个机会,我将全力以赴,用满腔的热情和辛勤的汗水,奉献自己的青春和才华!
祝贵单位事业蒸蒸日上!
此致
敬礼!
求职者:xx
20xx年xx月xx日
软件开发专业求职信13
公司领导:
您好!
感谢您关注我的个人申请信。
本人大三,就读于211重点大学西南交通大学。我叫程XX,在我校软件学院计算机软件专业。在校期间,努力学习,严格遵守校规校纪,恪守社会公德,尊师重道,团结同学,助人为乐,德、智、体、美、劳全面发展。通过我的努力…我的专业是面向对象编程(Java)、离散结构、数据结构与算法分析(C++)、软件工具与环境(C++)、XML及相关技术、软件工程与软件项目管理(英语)、数据库管理系统与应用技术、网络与应用技术(英语)、系统分析,并且我已经具备了计算机操作的基本能力,坚信我会在计算机应用与编程领域创造一片蓝天。
在做好本职工作的同时,也积极参加学校组织的各种活动。在日常生活中,我可以紧密团结同学。我相信集体力量是强大的。只有把我们拧在一起,才能把所有的工作都做好。
我兴趣广泛,比如唱歌和打球。所以我说我性格外向,善于与人沟通,有一定的交际能力。我在处理一些事情的时候也有自己的见解,因为我经常组织一些小活动,所以逐渐培养了一定的组织能力。现在感觉我的经理挺丰富的。在学校,我经常期待在我喜欢的.工作中很好地运用我的能力。现在我怀着对工作的热情和渴望申请这份工作,渴望在贵公司的广阔空间里展示自己的才华。我会继续努力,脚踏实地地完成工作,争取好成绩。我想我会用这份努力和诚意有所作为。
此致
敬礼!
自荐人:xxx
20xx年xx月xx日
软件开发专业求职信14
尊敬的贵公司领导:
您好!
当今是一个机遇与挑战并存,知识与能力齐驱的时代,只有不断地完善自我,才能成为激烈竞争中的弄潮儿,而几年的大学生活正提供了这一契机,让我受益匪浅,在良好的环境中进行学习与磨练,塑造一个全新的自我。最重要的是培养了我吃苦耐劳的精神,脚踏实地的作风,较强的社会工作能力。为了使自己能够全方位的发展,更好的适应这个日新月异的社会。几年的学习中,我广泛深入学习asp.net、vb.net 、sql server20xx、网页制作、web程序设计、java语言程序设计、软件工程、电子商务、vb、应用、计算机专业英语、计算机网络等专业课程,并选修电子商务,市场营销,网站制作实用技术等课程。在校期间积极参加学校我社团的各种活动和在外实践中学到了不少课本之外的东西,使自己有了一定的工作经验,故我相信我能够在最快的时间适应快节奏的现代工作和生活,能够从事有创造性和挑战性的工作。
过去只能记载历史,应该好好把握的是未来。在以后的日子里,我会努力的.工作,不断的充实自己,完善自己,超越自己。在社会实践工作方面,本着多学多练的态度,在实践中锻炼自己的工作能力、交际能力,培养团体协作的精神。如蒙不弃,我愿贵公司共创美好未来。给我一个机会,相信您不会后悔。
良禽择木而栖,倘蒙录用,当尽职尽责,不负所望。如果能与您携手同行,我将深感荣幸 ,再次感谢您在百忙中给予我的关注。最后,谨祝贵公司事业蒸蒸日上,前程似锦 !
此致
敬礼!
自荐人:
时间:
软件开发专业求职信15
尊敬的领导:
您好!我是百色学院计算机科学与技术专业的一名毕业生,你的关注将翻开我人生的新的一页。
四年的大学校园生活是我人生的一大转折点。在校园生涯和社会实践生活中我不断的挑战自我、充实自己,为实现人生的价值打下坚实的基础。对本专业一丝不苟,因而在成绩上一直都得到肯定,在不满足于学好理论课的同时也注重于对各种应用软件和硬件的研究。为了锻炼我的实际开发能力,在大四第一学期就开始跟随老师开发数据库管理软件,并很快成为骨干力量,得到了老师的好评。身为学生的我在修好学业的同时也注重于对社会的实践。本着学以致用,实践理论结合方针,20xx年暑假我在打印社学习名片和小型广告,有较强自学能力的.我用一周时间就熟练了各样设计软件,之后做出了大量出色的设计方案。本人具有积极向上的生活态度和广泛的兴趣爱好,对工作责任心强、勤恳踏实,有较强的组织、宣传能力,注重团队合作精神和集体观念。路漫漫其修远兮,吾将上下而求之!如果一个人能够踏实做人做事,那么他的世界就是灿烂的。我坚信这一点并不断完善自己。
我仅在此冒昧推荐,期望成为贵单位的一员,充分发挥自己的聪明才智。如果能到贵单位的青睐,我一定以不断学习,积极进取的精神竭诚为贵单位服务,与贵单位共同发展,共创美好的未来!昨天的我为今天努力,今天的我为明天奋斗,明天的我将为知遇的您拼搏。
自荐人:xx
xx月xx日
第五篇:软件开发报告
负载均衡器软件
开发报告
院系: 班级: 成员:
目录
1.可行性分析报告..........................................................................................................................1 1.1 项目背景..............................................................................................................................1 1.2产品分析...............................................................................................................................1 1.3 结论意见..............................................................................................................................2 2.项目开发计划..............................................................................................................................2 2.1 总体功能要求......................................................................................................................2 2.2 软件开发平台要求..............................................................................................................2 2.3 软件项目的开发实施过程管理要求...................................................................................2 3.软件开发......................................................................................................................................2 3.1 软件的需求分析..............................................................................................................3 3.3软件的详细设计...................................................................................................................4 3.4 软件的编码..........................................................................................................................5 3.5软件的测试.........................................................................................................................31 3.5.1测试计划.....................................................................................................................31 3.5.2 软件测试....................................................................................................................31 4.项目开发总结报告....................................................................................................................32
I
1.可行性分析报告
1.1 项目背景
面对庞大的数据流量,面对集中性的访问,是不是觉得网络服务器岌岌可危呢?不用怕,负载均衡器就能帮你缓解这个问题。负载均衡器通过虚拟IP地址方法,解决了轮流排程所面临的许多问题。使用了负载均衡器集群系统,在外部看来,像是具有一个IP地址的单一服务器一样,当然,这个IP地址是虚拟的,它映射了集群中的每一台机器的地址。所以,在某种程度上,负载均衡器是将整个集群的IP地址报漏给外部网络。
当请求到达负载均衡器时,它会重写该请求的头文件,并将之指定到集群中的机器上。如果某台机器被从集群中移除了,请求不会别发往已经不存在的服务器上,因为所有的机器表面上都具有同一个IP地址,即使集群中的某个节点被移除了,该地址也不会发生变化。而且,internet上缓存的DNS条目也不再是问题了。当返回一个应答时,客户端看到的只是从负载均衡器上所返回的结果。也就是说,客户端操作的对象是负载均衡器,对于其更后端的操作,对客户端来讲,是完全透明的。
1.2产品分析
服务器一致性负载均衡器读取客户端发出的每一个请求中所包含的cookies或url解释。基于所读出的这些信息,负载均衡器就可以重写报头并将请求发往集群中合适的节点上,该节点维护着相应客户端请求的会话信息。在HTTP通信中,负载均衡器可以提供服务器一致性,但并不是通过一个安全的途径(例如:HTTPS)来提供这种服务。当消息被加密后(SSL),负载均衡器就不能读出隐藏在其中的会话信息。
通过故障恢复机制获得高可靠性故障恢复发生在当集群中某个节点不能处理请求,需将请求重新导向到其他节点时。主要有两种故障恢复:
请求级故障恢复。当集群中的一个节点不能处理请求时(通常是由于down机),请求被发送到其他节点。当然,在导向到其他节点的同时,保存在原节点上的会话信息将会丢失。
透明会话故障恢复。当一个引用失败后,负载均衡器会将之发送到集群中其他的节点上,以完成操作,这一点对用户来说是透明的。由于透明会话故障恢复需要节点具备相应的操作信息,因此为了实现该功能,集群中的所有节点必须具有公共存储区域或通用数据库,存储会话信息数据,以提供每个节点在进行单独进程会话故障恢复时所需要的操作信息。
既然所有的Web应用请求都必须经过负载均衡系统,那么系统就可以确定活动会话的数量,在任何实例访问中的活动会话的数目,应答的次数,高峰负载
次数,以及在高峰期和低谷期的会话的数目,还有其他更多的。所有的这些统计信息都可以被很好的用来调整整个系统的性能。
1.3 结论意见
虽然此项目存在一定的技术难度和风险,但我们对项目要达到的目标十分清楚,对所要开发系统将要实现的功能也非常了解。而且有一些成品作为参考,并且在项目的实施过程中我们能够获得帮助,我认为只要我们能够认真思考、仔细规划、明确分工,我们可以承担此项目的开发。
2.项目开发计划
2.1 总体功能要求
1.扩展网络设备和服务器的带宽 2.增加吞吐量
3.加强网络数据处理能力 4.提高网络的灵活性和可用性
2.2 软件开发平台要求
Visual c++ 6.0 SQL Server 2008 C++ Builder 网络架构:
完全支持TCP/IP协议
2.3 软件项目的开发实施过程管理要求
3.软件开发
3.1 软件的需求分析
1.DNS负载均衡最早的负载均衡技术是通过DNS来实现的,在DNS中为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。DNS负载均衡是一种简单而有效的方法,但是它不能区分服务器的差异,也不能反映服务器的当前运行状态。
2.代理服务器负载均衡 使用代理服务器,可以将请求转发给内部的服务器,使用这种加速模式显然可以提升静态网页的访问速度。然而,也可以考虑这样一种技术,使用代理服务器将请求均匀转发给多台服务器,从而达到负载均衡的目的。
3.地址转换网关负载均衡 支持负载均衡的地址转换网关,可以将一个外部IP地址映射为多个内部IP地址,对每次TCP连接请求动态使用其中一个内部地址,达到负载均衡的目的。
4.协议内部支持负载均衡除了这三种负载均衡方式之外,有的协议内部支持与负载均衡相关的功能,例如HTTP协议中的重定向能力等,HTTP运行于TCP连接的最高层。
5.NAT负载均衡NAT简单地说就是将一个IP地址转换为另一个IP地址,一般用于未经注册的内部地址与合法的、已获注册的Internet IP地址间进行转换。适用于解决Internet IP地址紧张、不想让网络外部知道内部网络结构等的场合下。
6.反向代理负载均衡普通代理方式是代理内部网络用户访问internet上服务器的连接请求,客户端必须指定代理服务器,并将本来要直接发送到internet上服务器的连接请求发送给代理服务器处理。反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。反向代理负载均衡技术是把将来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理,从而达到负载均衡的目的。
7.混合型负载均衡在有些大型网络,由于多个服务器群内硬件设备、各自的规模、提供的服务等的差异,可以考虑给每个服务器群采用最合适的负载均衡方式,然后又在这多个服务器群间再一次负载均衡或群集起来以一个整体向外界提供服务(即把这多个服务器群当做一个新的服务器群),从而达到最佳的性能。将这种方式称之为混合型负载均衡。此种方式有时也用于单台均衡设备的性能不能满足大量连接请求的情况下。
3.2软件的概要设计
软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一
个或多个附加软件来实现负载均衡,DNSLoadBalanceCheckPointFirewall-1 ConnectControl等,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。
一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵。本地负载均衡能有效地解决数据流量过大、网络负荷过重的问题,并且不需花费昂贵开支购置性能卓越的服务器,充分利用现有设备,避免服务器单点故障造成数据流量的损失。其有灵活多样的均衡策略把数据流量合理地分配给服务器群内的服务器共同负担。即使是再给现有服务器扩充升级,也只是简单地增加一个新的服务器到服务群中,而不需改变现有网络结构、停止现有的服务。
全局负载均衡主要用于在一个多区域拥有自己服务器的站点,为了使全球用户只以一个IP地址或域名就能访问到离自己最近的服务器,从而获得最快的访问速度,也可用于子公司分散站点分布广的大公司通过企业内部互联网来达到资源统一合理分配的目的。
3.3软件的详细设计
1.轮转法:轮转算法是所有调度算法中最简单也最容易实现的一种方法。在一个任务队列里,队列的每个成员(节点)都具有相同的地位,轮转法简单的在这组成员中顺序轮转选择。在负载平衡环境中,均衡器将新的请求轮流发给节点队列中的下一节点,如此连续、周而复始,每个集群的节点都在相等的地位下被轮流选择。这个算法在DNS域名轮询中被广泛使用。
轮转法的活动是可预知的,每个节点被选择的机会是1/N,因此很容易计算出节点的负载分布。轮转法典型的适用于集群中所有节点的处理能力和性能均相同的情况,在实际应用中,一般将它与其他简单方法联合使用时比较有效。
2.散列法:散列法也叫哈希法(HASH),通过单射不可逆的HASH函数,按照某种规则将网络请求发往集群节点。哈希法在其他几类平衡算法不是很有效时会显示出特别的威力。例如,在前面提到的UDP会话的情况下,由于轮转法和其他几类基于连接信息的算法,无法识别出会话的起止标记,会引起应用混乱。
而采取基于数据包源地址的哈希映射可以在一定程度上解决这个问题:将具有相同源地址的数据包发给同一服务器节点,这使得基于高层会话的事务可以以适当的方式运行。相对称的是,基于目的地址的哈希调度算法可以用在Web Cache集群中,指向同一个目标站点的访问请求都被负载平衡器发送到同一个Cache服务节点上,以避免页面缺失而带来的更新Cache问题。
3.最少连接法:在最少连接法中,平衡器纪录目前所有活跃连接,把下一个新的请求发给当前含有最少连接数的节点。这种算法针对TCP连接进行,但由于
不同应用对系统资源的消耗可能差异很大,而连接数无法反映出真实的应用负载,因此在使用重型Web服务器作为集群节点服务时(例如Apache服务器),该算法在平衡负载的效果上要打个折扣。为了减少这个不利的影响,可以对每个节点设置最大的连接数上限(通过阈值设定体现)。
4.最低缺失法:在最低缺失法中,平衡器长期纪录到各节点的请求情况,把下个请求发给历史上处理请求最少的节点。与最少连接法不同的是,最低缺失记录过去的连接数而不是当前的连接数。
5.最快响应法:平衡器记录自身到每一个集群节点的网络响应时间,并将下一个到达的连接请求分配给响应时间最短的节点,这种方法要求使用ICMP包或基于UDP包的专用技术来主动探测各节点。
在大多数基于LAN的集群中,最快响应算法工作的并不是很好,因为LAN中的ICMP包基本上都在10ms内完成回应,体现不出节点之间的差异;如果在 WAN上进行平衡的话,响应时间对于用户就近选择服务器而言还是具有现实意义的;而且集群的拓扑越分散这种方法越能体现出效果来。这种方法是高级平衡基于拓扑结构重定向用到的主要方法。
6.加权法:加权方法只能与其他方法合用,是它们的一个很好的补充。加权算法根据节点的优先级或当前的负载状况(即权值)来构成负载平衡的多优先级队列,队列中的每个等待处理的连接都具有相同处理等级,这样在同一个队列里可以按照前面的轮转法或者最少连接法进行均衡,而队列之间按照优先级的先后顺序进行均衡处理。在这里权值是基于各节点能力的一个估计值。
3.4 软件的编码
#include
conn::conn(){ m_srvfd =-1;m_clt_buf = new char[ BUF_SIZE ];if(!m_clt_buf){ throw std::exception();}
m_srv_buf = new char[ BUF_SIZE ];if(!m_srv_buf){ throw std::exception();} reset();}
conn::~conn(){ delete [] m_clt_buf;delete [] m_srv_buf;}
void conn::init_clt(int sockfd, const sockaddr_in& client_addr){ m_cltfd = sockfd;m_clt_address = client_addr;}
void conn::init_srv(int sockfd, const sockaddr_in& server_addr){ m_srvfd = sockfd;m_srv_address = server_addr;}
void conn::reset(){ m_clt_read_idx = 0;m_clt_write_idx = 0;m_srv_read_idx = 0;m_srv_write_idx = 0;m_srv_closed = false;m_cltfd =-1;memset(m_clt_buf, ' ', BUF_SIZE);memset(m_srv_buf, ' ', BUF_SIZE);}
RET_CODE conn::read_clt(){ int bytes_read = 0;while(true){ if(m_clt_read_idx >= BUF_SIZE){ log(LOG_ERR, __FILE__, __LINE__, “%s”, “the client read buffer is full, let server write”);return BUFFER_FULL;}
bytes_read = recv(m_cltfd, m_clt_buf + m_clt_read_idx, BUF_SIZEm_clt_write_idx)> 0)? OK : NOTHING;}
RET_CODE conn::read_srv(){ int bytes_read = 0;while(true){ if(m_srv_read_idx >= BUF_SIZE)
{ log(LOG_ERR, __FILE__, __LINE__, “%s”, “the server read buffer is full, let client write”);return BUFFER_FULL;}
bytes_read = recv(m_srvfd, m_srv_buf + m_srv_read_idx, BUF_SIZEm_srv_write_idx)> 0)? OK : NOTHING;}
RET_CODE conn::write_srv(){ int bytes_write = 0;while(true){ if(m_clt_read_idx <= m_clt_write_idx){ m_clt_read_idx = 0;m_clt_write_idx = 0;return BUFFER_EMPTY;
}
bytes_write = send(m_srvfd, m_clt_buf + m_clt_write_idx, m_clt_read_idxm_srv_write_idx, 0);if(bytes_write ==-1)
{ if(errno == EAGAIN || errno == EWOULDBLOCK){ return TRY_AGAIN;} log(LOG_ERR, __FILE__, __LINE__, “write client socket failed, %s”, strerror(errno));return IOERR;} else if(bytes_write == 0){ return CLOSED;}
m_srv_write_idx += bytes_write;} } #ifndef FDWRAPPER_H #define FDWRAPPER_H
#include
int setnonblocking(int fd){ int old_option = fcntl(fd, F_GETFL);int new_option = old_option | O_NONBLOCK;fcntl(fd, F_SETFL, new_option);return old_option;}
void add_read_fd(int epollfd, int fd){ epoll_event event;
0 1
event.data.fd = fd;event.events = EPOLLIN | EPOLLET;epoll_ctl(epollfd, EPOLL_CTL_ADD, fd, &event);setnonblocking(fd);}
void add_write_fd(int epollfd, int fd){ epoll_event event;event.data.fd = fd;event.events = EPOLLOUT | EPOLLET;epoll_ctl(epollfd, EPOLL_CTL_ADD, fd, &event);setnonblocking(fd);}
void closefd(int epollfd, int fd){ epoll_ctl(epollfd, EPOLL_CTL_DEL, fd, 0);close(fd);}
void removefd(int epollfd, int fd){ epoll_ctl(epollfd, EPOLL_CTL_DEL, fd, 0);}
void modfd(int epollfd, int fd, int ev){ epoll_event event;event.data.fd = fd;event.events = ev | EPOLLET;epoll_ctl(epollfd, EPOLL_CTL_MOD, fd, &event);
} #endif #include
static int level = LOG_INFO;static int LOG_BUFFER_SIZE = 2048;static const char* loglevels[] = { “emerge!”, “alert!”, “critical!”, “error!”, “warn!”, “notice:”, “info:”, “debug:” };
void set_loglevel(int log_level){ level = log_level;}
void log(int log_level, const char* file_name, int line_num, const char* format,...){ if(log_level > level){ return;}
time_t tmp = time(NULL);struct tm* cur_time = localtime(&tmp);if(!cur_time){
1
return;}
char arg_buffer[ LOG_BUFFER_SIZE ];memset(arg_buffer, ' ', LOG_BUFFER_SIZE);strftime(arg_buffer, LOG_BUFFER_SIZELOG_EMERG ]);
va_list arg_list;va_start(arg_list, format);memset(arg_buffer, ' ', LOG_BUFFER_SIZE);vsnprintf(arg_buffer, LOG_BUFFER_SIZE-1, format, arg_list);printf(“%sn”, arg_buffer);fflush(stdout);va_end(arg_list);} #include
1
#include
#include “log.h” #include “conn.h” #include “mgr.h” #include “processpool.h”
using std::vector;
static const char* version = “1.0”;
static void usage(const char* prog){ log(LOG_INFO, __FILE__, __LINE__, “usage: %s config_file]”, prog);}
int main(int argc, char* argv[]){ char cfg_file[1024];memset(cfg_file, ' ', 100);int option;while((option = getopt(argc, argv, “f:xvh”))!=-1){ switch(option){ case 'x': { set_loglevel(LOG_DEBUG);break;} 4 [-v] [-h] [-f
case 'v': { log(LOG_INFO, __FILE__, __LINE__, “%s %s”, argv[0], version);return 0;} case 'h': { usage(basename(argv[ 0 ]));return 0;} case 'f': { memcpy(cfg_file, optarg, strlen(optarg));break;} case '?': { log(LOG_ERR, __FILE__, __LINE__, “un-recognized option %c”, option);usage(basename(argv[ 0 ]));return 1;} } }
if(cfg_file[0] == ' '){ log(LOG_ERR, __FILE__, __LINE__, “%s”, “please specifiy the config file”);return 1;} int cfg_fd = open(cfg_file, O_RDONLY);
1
if(!cfg_fd){ log(LOG_ERR, __FILE__, __LINE__, “read config file met error: %s”, strerror(errno));return 1;} struct stat ret_stat;if(fstat(cfg_fd, &ret_stat)< 0){ log(LOG_ERR, __FILE__, __LINE__, “read config file error: %s”, strerror(errno));return 1;} char* buf = new char [ret_stat.st_size + 1];memset(buf, ' ', ret_stat.st_size + 1);ssize_t read_sz = read(cfg_fd, buf, ret_stat.st_size);if(read_sz < 0){ log(LOG_ERR, __FILE__, __LINE__, “read config file error: %s”, strerror(errno));return 1;} vector< host > balance_srv;vector< host > logical_srv;host tmp_host;memset(tmp_host.m_hostname, ' ', 1024);char* tmp_hostname;char* tmp_port;char* tmp_conncnt;bool opentag = false;char* tmp = buf;char* tmp2 = NULL;char* tmp3 = NULL;
met met
char* tmp4 = NULL;while(tmp2 = strpbrk(tmp, “n”)){ *tmp2++ = ' ';if(strstr(tmp, “
file failed”);return 1;} *tmp4 = ' ';memcpy(tmp_host.m_hostname, strlen(tmp_hostname));} else if(tmp3 = strstr(tmp, “
”)){ tmp_port = tmp3 + 6;tmp4 = strstr(tmp_port, “”);if(!tmp4){ log(LOG_ERR, __FILE__, __LINE__, “%s”, “parse config file failed”);return 1;} *tmp4 = ' ';tmp_host.m_port = atoi(tmp_port);} else if(tmp3 = strstr(tmp, “
tmp_hostname,else if(tmp3 = strstr(tmp, “Listen”)){ tmp_hostname = tmp3 + 6;tmp4 = strstr(tmp_hostname, “:”);if(!tmp4){ log(LOG_ERR, __FILE__, __LINE__, “%s”, “parse config file failed”);return 1;} *tmp4++ = ' ';tmp_host.m_port = atoi(tmp4);memcpy(tmp_host.m_hostname, tmp3, strlen(tmp3));balance_srv.push_back(tmp_host);memset(tmp_host.m_hostname, ' ', 1024);} tmp = tmp2;}
if(balance_srv.size()== 0 || logical_srv.size()== 0){ log(LOG_ERR, __FILE__, __LINE__, “%s”, “parse config file failed”);return 1;} const char* ip = balance_srv[0].m_hostname;int port = balance_srv[0].m_port;
int listenfd = socket(PF_INET, SOCK_STREAM, 0);assert(listenfd >= 0);
int ret = 0;struct sockaddr_in address;
1
bzero(&address, sizeof(address));address.sin_family = AF_INET;inet_pton(AF_INET, ip, &address.sin_addr);address.sin_port = htons(port);
ret = bind(listenfd, sizeof(address));assert(ret!=-1);
ret = listen(listenfd, 5);assert(ret!=-1);
//memset(cfg_host.m_hostname, ' ', 1024);//memcpy(cfg_host.m_hostname, “127.0.0.1”, strlen(“127.0.0.1”));//cfg_host.m_port = 54321;//cfg_host.m_conncnt = 5;processpool< conn, host, mgr >* pool = processpool< conn, host, mgr >::create(listenfd, logical_srv.size());if(pool){ pool->run(logical_srv);delete pool;}
close(listenfd);return 0;} #include
0
2(struct sockaddr*)&address,#include
#include
using std::pair;
int mgr::m_epollfd =-1;int mgr::conn2srv(const sockaddr_in& address){ int sockfd = socket(PF_INET, SOCK_STREAM, 0);if(sockfd < 0){ return-1;}
if(connect(sockfd,(struct
sockaddr* sizeof(address))!= 0){ close(sockfd);return-1;} return sockfd;1)&address,}
mgr::mgr(int epollfd, const host& srv): m_logic_srv(srv){ m_epollfd = epollfd;int ret = 0;struct sockaddr_in address;bzero(&address, sizeof(address));address.sin_family = AF_INET;inet_pton(AF_INET, srv.m_hostname, &address.sin_addr);address.sin_port = htons(srv.m_port);log(LOG_INFO, __FILE__, __LINE__, “logcial srv host info:(%s, %d)”, srv.m_hostname, srv.m_port);
for(int i = 0;i < srv.m_conncnt;++i){ sleep(1);int sockfd = conn2srv(address);if(sockfd < 0){ log(LOG_ERR, __FILE__, __LINE__, “build connection %d failed”, i);} else { log(LOG_INFO, __FILE__, __LINE__, “build connection %d to server success”, i);conn* tmp = NULL;try { tmp = new conn;} catch(...)
2
{ close(sockfd);continue;} tmp->init_srv(sockfd, address);m_conns.insert(pair< int, conn* >(sockfd, tmp));} } }
mgr::~mgr(){ }
int mgr::get_used_conn_cnt(){ return m_used.size();}
conn* mgr::pick_conn(int cltfd){ if(m_conns.empty()){ log(LOG_ERR, __FILE__, __LINE__, “%s”, “not connections to server”);return NULL;}
map< int, conn* >::iterator iter = m_conns.begin();int srvfd = iter->first;conn* tmp = iter->second;if(!tmp)
enough srv
{ log(LOG_ERR, __FILE__, __LINE__, “%s”, “empty server connection object”);return NULL;} m_conns.erase(iter);m_used.insert(pair< int, conn* >(cltfd, tmp));m_used.insert(pair< int, conn* >(srvfd, tmp));add_read_fd(m_epollfd, cltfd);add_read_fd(m_epollfd, srvfd);log(LOG_INFO, __FILE__, __LINE__, “bind client sock %d with server sock %d”, cltfd, srvfd);return tmp;}
void mgr::free_conn(conn* connection){ int cltfd = connection->m_cltfd;int srvfd = connection->m_srvfd;closefd(m_epollfd, cltfd);closefd(m_epollfd, srvfd);m_used.erase(cltfd);m_used.erase(srvfd);connection->reset();m_freed.insert(pair< int, conn* >(srvfd, connection));}
void mgr::recycle_conns(){ if(m_freed.empty()){ return;}
2
for(map< int, conn* >::iterator iter = m_freed.begin();iter!= m_freed.end();iter++){ sleep(1);int srvfd = iter->first;conn* tmp = iter->second;srvfd = conn2srv(tmp->m_srv_address);if(srvfd < 0){ log(LOG_ERR, __FILE__, __LINE__, “%s”, “fix connection failed”);} else { log(LOG_INFO, __FILE__, __LINE__, “%s”, “fix connection success”);tmp->init_srv(srvfd, tmp->m_srv_address);m_conns.insert(pair< int, conn* >(srvfd, tmp));} } m_freed.clear();}
RET_CODE mgr::process(int fd, OP_TYPE type){ conn* connection = m_used[ fd ];if(!connection){ return NOTHING;} if(connection->m_cltfd == fd){ int srvfd = connection->m_srvfd;
2
switch(type){ case READ: { RET_CODE res = connection->read_clt();switch(res){ case OK: { log(LOG_DEBUG, __FILE__, __LINE__, read from client: %s“, connection->m_clt_buf);} case BUFFER_FULL: { modfd(m_epollfd, srvfd, EPOLLOUT);break;} case IOERR: case CLOSED: { free_conn(connection);return CLOSED;} default: break;} if(connection->m_srv_closed){ free_conn(connection);return CLOSED;} break;
”content
} case WRITE: { RET_CODE res = connection->write_clt();switch(res){ case TRY_AGAIN: { modfd(m_epollfd, fd, EPOLLOUT);break;} case BUFFER_EMPTY: { modfd(m_epollfd, srvfd, EPOLLIN);modfd(m_epollfd, fd, EPOLLIN);break;} case IOERR: case CLOSED: { free_conn(connection);return CLOSED;} default: break;} if(connection->m_srv_closed){ free_conn(connection);return CLOSED;} break;
2
} default: { log(LOG_ERR, __FILE__, __LINE__, “%s”, “other operation not support yet”);break;} } } else if(connection->m_srvfd == fd){ int cltfd = connection->m_cltfd;switch(type){ case READ: { RET_CODE res = connection->read_srv();switch(res){ case OK: { log(LOG_DEBUG, __FILE__, __LINE__, read from server: %s“, connection->m_srv_buf);} case BUFFER_FULL: { modfd(m_epollfd, cltfd, EPOLLOUT);break;} case IOERR: case CLOSED: { modfd(m_epollfd, cltfd, EPOLLOUT);
”content
connection->m_srv_closed = true;break;} default: break;} break;} case WRITE: { RET_CODE res = connection->write_srv();switch(res){ case TRY_AGAIN: { modfd(m_epollfd, fd, EPOLLOUT);break;} case BUFFER_EMPTY: { modfd(m_epollfd, cltfd, EPOLLIN);modfd(m_epollfd, fd, EPOLLIN);break;} case IOERR: case CLOSED: { /* if(connection->m_srv_write_idx connection->m_srvread_idx){ free_conn(connection);
==
} else { modfd(m_epollfd, cltfd, EPOLLOUT);} */ modfd(m_epollfd, cltfd, EPOLLOUT);connection->m_srv_closed = true;break;} default: break;} break;} default: { log(LOG_ERR, __FILE__, __LINE__, “%s”, “other operation not support yet”);break;} } } else { return NOTHING;} return OK;}
0 3
3.5软件的测试
3.5.1测试计划 功能部分将使用单元测试来确定其适合符合需求,性能部分将使用自动化测试来检验。主要测试为: 运行测试;逻辑测试; 3 业务处理能力测试; 4 系统安全性测试; 5 性能测试; 6 高负荷下工作测试; 7 稳定性测试; 8 易用性测试;
3.5.2 软件测试 1.运行测试
在进行该项测试过程中,按照按照《用户操作手册》对软件进行了全面详细的操作测试,对软件所罗列出的所有功能模块进行了精细的操作,发现了一些容错和反馈信息方面的问题,以及部分功能模块无法实现或出错。2.逻辑测试
在进行该项测试过程中,主要对软件的逻辑设计方面进行了深入评判,检查软件设计是否在某些方面有悖于正常的逻辑思维,是否在实际情况相符。发现了一些诸如单个包间可容纳客人数无限制、同一服务员可服务客人数无限制等逻辑错误。
3.业务处理能力测试
在进行该项测试过程中,主要针对系统对业务的处理能力进行测试,检查了业务处理的连贯性、全面性和正确性,并检查业务处理结果是否满足客户需求。4.安全测试
在进行该项测试过程中,检查了系统的安全登录,查看了系统内资料的安全保密性,以及系统会不会有漏洞容易遭受外部的攻击。5.性能测试
在进行该项测试过程中,对于系统的运行速度、加载速度、业务处理速度等进行了测试。结果发现如果数据库中有大量数据,此时进行数据库访问,性能将会下降。
6.高负荷下工作测试
3
在进行该项测试过程中,对于当数据库有大量数据,并长时间运行时,软件的运行速度、性能和资源使用情况进行了检查。通过性能监视器分别对服务器的内存、CPU、硬盘的I/O速度等系统资源的使用情况进行观察,发现系统的资源使用有所提高,查询性能有所降低,但不影响正常使用。7.稳定性测试
在进行该项测试过程中,主要看软件是否会出现死机、操作系统或者网络瘫痪、程序崩溃等问题。8.易用性测试
在进行该项测试过程中,考察了本软件的界面设计布局是否合理,外形是否美观,操作是否简单无歧义,帮助文档是否简单易懂。
4.项目开发总结报告
在对该项目进行开发的过程中,我们遇到了很多的困难。在于我们对于市场的研究和可行性考量的过程中。虽然我们明确了设计的目的,但国内以及国际市场的广阔性使我们在对客户需求的分析中走入了迷雾中,因此耽误了很多时间。但是,幸好最后我们还是完成了该项目。而从对该项目的开发中,我们也学到了以下几点。
我们要尽量的让客户也参与到项目的开发团队中来,也就是说我们要使客户把自己也纳入到项目的开发团队中来。如此一来,我们掌握客户需求的真实性、可靠性就会大大的提高,也就不会为项目的后期功能开发埋下陷阱。
在项目确立后,我们就需要做好项目开发计划,需求调研用时,开发用时,测试用时,实施用时,维护用时。在我们做好了计划后,我们要随时的跟踪计划任务的完成进度,从而使我们的项目进度掌控在我们的开发周期范围之内,今日计划、行动,明日成功。
在其他行业中,人与人的之间的沟通是很重要的。项目开发也不例外,很好的沟通能够加快项目的进度,这就要求我们每一个开发人员要学会和善于沟通于客户和同事之间。在一个项目的开发过程中,我们与客户的沟通是一个不断交流和沟通的过程。在开发到一定的阶段,我们就需要和客户沟通已有功能,尽量的去避免一些隐藏的问题,及时的发现问题,解决问题,从而按时或者提前完成项目的开发。
3
3