关于自己学习计算机的一些经历(二)

时间很快大二已经结束了。

大二的暑假,我和往常一样,在家待的时间不长,然后就回到学校了。在这个暑假,我做了三件事情:破解了一个软件、学习了写Android应用、学习了操作系统。

首先说一下破解软件,我做的是具体实现功能,实际上是帮孙同学的忙。因为孙同学是学钢琴的,他们有一个软件叫钢琴学院,挺贵的,一套7百多。这个软件其实就是一个普通的音乐播放软件(还带加密狗),只不过它自带的音乐总量比较大,有20多G,因此买软件还附带一个小容量的硬盘,硬盘里面基本上都是wma音频文件,只不过命名方式都是数字和字母,所以你不知道每段钢琴曲的名字(在软件界面是你选择一个钢琴曲的名字,然后就会播放相应的钢琴曲),破解的任务就是把这些曲子重命名为我们能读懂的名字。孙同学之所以要破解是为了省钱。当初破解是有四个人参与的,杨老师、刘师兄、我和孙同学。我对于这类问题还没啥想法,因此主要是杨老师和刘师兄在想破解的方法。刘师兄观察出文件名很像是md5加密命名的,因为都是16进制数,后来观察软件的配置文件和自带的excel文件,刘师兄大胆地假设文件名是文件id经过加密后得到的,于是我们又借助“process monitor”来观察程序运行的过程,基本上和预期的是一样的,但是和真实效果还是有些区别的,不知道是采用哪种具体的加密方法。我们暂停了讨论,第二天刘师兄找到了一个md5加密网站又验证了一下自己的设想,又做了一些尝试,最终成功了。加密的方法是id+1然后进行hash,我们找到了破解软件的方法,很是开心。我想刘师兄之所以能找到破解方法是因为他有广泛的知识面和丰富的软件开发经验,知道一个软件是如何开发出来的,这又给我上了一课。于是我要做的就是用代码来实现这个破解,因为杨老师要把wma转换成mp3以压缩文件,并且mp3文件要带tag标签,他推荐了一个开源c#库来完成这个功能,因此我选择用C#来完成这个任务。说句实在话,我之前也只是听过C#,根本没有学过,因此又自学了一把,不过这次自学是看着官方文档学习的,效果还可以,不精通,但是完成这项任务还是没任何问题的。在做这个任务过程中,我使用了日志来记录每一次改名的过程,因为没有日志的话你不知道你的程序是否成功,我记得wma文件好像有6000多个吧,因此程序运行了一段时间,有时候日志是一个很重要和很有用的工具。

其次说一下写Android应用,这个是为了要做一个Android版的视唱练耳。除了Java其他都是全新的东西,要自学,不过我这次想挑战一下自己,学习以官方的文档为主,上网查为辅。2011年的时候官方的Api文档和教程是没有中文版的,只有英文和日文的,因此在语言上也是个小挑战,有的时候看了很久才看一两段,还要自己搭建虚拟机,用Eclipse搭建开发环境,好的是文档中有教程,挺不错的。那时候自己有一种冲劲,有一份自学的自信。看文档自学之所以快的原因是你可以随机学习,需要啥找啥学啥。在做这个项目时,我先列一个功能表,也就是需求,为了完成这些功能我都需要实现那些技术原型,然后我又列了个技术原型表 。根据技术原型表做多个原型实验,然后推进项目的进展,比如如何随机生成midi文件,如何读取文件,如何播放midi文件,播放完要把midi文件删除,按钮的单击事件等等。根据要完成的实验,找相关的api,所以这样学习会比较快。当然了,在学一项技术时最好还是先概览的看一下,要不然会很模糊的 。最终假期做出了一个技术原型,可以满足基本的需求。

最后说一下学习操作系统(OS)。这个暑假学习OS纯粹是出于偶然,因为我假期到师大FTP下载电影时无意间浏览到了OS的教学视频,顺便就下载下来看看了,我们毕业的时候FTP不知啥原因不提供服务了。现在已经记不清当初为啥会看这个视频。这个视频是哈工大的孙志刚老师录的自己上课的视频,看着很棒,激发了我的兴趣,就这样开启了自己学习OS之路。孙老师在第一课的时候推荐了三本书,《操作系统概念》影印版,《现代操作系统》英文版,《操作系统的哲学原理》。看完第一集我就去图书馆找书,第一次没找到《操作系统概念》,只是找到了后两本,因为《操作系统的哲学原理》是中国人写的,所以先看了这一本,看完这本书对OS有了大概的认识,也学了一些OS方面的专业单词,这对后面看《现代操作系统》大有帮助。看完教学视频,开始看《现代操作系统》,当然了,在暑假没把这本书看完,因为是英文的,所以才开始看的比较慢,到暑假结束把第一章看完了。看了这本书有一种高屋建瓴的感觉,同时赞叹作者的才华。

大三开学了,大三我们的课程很多,上课学习比较紧张,基本上每天上下午都有课,晚上还有实验。我的操作系统就是在这个学期学的,我也是在这个学期认识李老师的,我的另一位恩师。说一个小故事,上第一节OS课,因为我去的有点晚,后边的座位都被别的同学占了,所以我选择了坐在前排,并且是离讲桌最近的地方。因为暑假自己自学了操作系统,所以上课回答问题很积极从容,一方面是自己会,另一方面想找个会操作系统的交流一下,有时候跟有共同语言的人交流是很开心的事情。因为上课表现比较突出,所以李老师对我印象很深刻。从此每次操作系统课我都坐在同一个位置,离老师近好交流,上课的时候同学用的都是普通老式课本,我用的是《现代操作系统》,一边听李老师讲,一边记笔记,并在课本上做相应的标注。因为这个课比较难,所以越往后面,能听懂的同学就越少,甚至有些时候上课就像是我和李老师在对话,这也引起了其他同学对我的怨言,认为我是在抢风头,可能是有点嫉妒吧,不过我并不在意这些。李老师还在班上成立了两个兴趣小组,一个是Linux,一个是Solaris。我负责Solaris,程同学负责Linux,因为李老师知道我会Linux,所以为了让我多学点,让我来负责Solaris。因为是小组,所以我们就要有小组学习交流活动,我们也开展了很多次活动,多数时候是我在给小组成员分享。在这个过程中感觉Solaris是一个很了不起的Unix操作系统,特别是它的ZFS文件系统,更是超越了这个时代,现在FreeBSD用的就是ZFS文件系统,Linux之所以不用是因为开源协议冲突。这个学期杨老师还带着我们去图书馆听了一次技术部隋主任的讲课,参观了图书馆的中心机房,那是我第一次见到机房,感觉很好奇很激动,其中有三台SUN的服务器,据说当年是一百多万买的,一块硬盘都两三万,感觉那机器太值钱了。现在工作了,我们学校是一所新建的学校,也有一个中心机房,配置也还可以,由我管理,感觉自己很富有。杨老师还要求我们几个做10道ACM题,然后还要写一个扫雷程序。我记得我是用一个星期时间把扫雷程序写完了,在此之前我都不会扫雷游戏,而刘师兄当时给我们讲的时候他说他是用了一下午写完的,不过我同样还是很有成就感的。大三的下学期,因为10级的OS课调到大二下学期上了,还是李老师上课,但是实验课缺一位助教,所以李老师就找到了我。我在机房做两台Linux机器用于大家做实验用,因为大二很多学弟学妹都知道我,所以在给大家上课的时候他们还是很尊重我的,我们配合的也很好。当时为了给他们设计好进程间通信的实验,我又看了看《Unix网络编程》卷二——进程间通信,感觉这本书也是醍醐灌顶那种。

大三的暑假,其实做的事情不多,只是看了本《Unix环境高级编程》(英文版),做了读书笔记,收获很大,让我对计算机系统的认识又加深了,原来觉得很高深的东西,看完后感觉自己也能实现了,所以也推荐大家看这本书。另外,想说一点就是,你不要怕自己的英文水平不高而担心自己看不懂英文书。才开始大家都有相似的经历,觉得难,看着很费劲,但是一旦你入门后,就觉得你是能看懂的,因为计算机的专业单词就那么多,在一本书中就那么多常见的专业单词,记住以后读书就没那么困难了,其实我的英文水平很一般,六级都没过,不过我还是喜欢看英文的,因为英文的看着很直接。

说了这么多,我想总结一下。计算机专业的文献我们要读经典的,大家写的书,这种书总会给你一种醍醐灌顶的感觉。至于哪些是好书,就需要你平时多看多浏览了。

大四其实课程很少,一般都是第一学期去实习,然后找工作。我也不例外,我实习是在长春市实验中学实习,巧合的是我找工作找到了郑州市实验,而且这两所学校都是在郊区,不知道这算不算是机缘巧合。实习完就是找工作,起初我也和研究所的研究生一起投简历,参加校招会,想丰富一下自己的经历,但是我们那一年是个小年,所以大家找工作找的都不算太如意。杨老师在某一天的早上给我打电话,让我去师大对面的KFC,请我吃了个早餐,然后给我聊了聊,劝我还是别去中学教学,去个公司或是考研,然后去应化所,他为了我做了很大的努力,这让我很感动。李老师也多次给我说让我去公司,我依旧没有答应,因为我是免费师范生,不回家教学是要交违约金的,我不想再给家里增添负担,李老师还说借钱给我,但是我也不想麻烦她,所以就直接往中学投简历了,最后找到了郑州市实验。在此我要感谢我的两位好老师。大四还面临着毕业设计和毕业论文,本来我想偷个懒把以前做的视唱练耳直接交上,选择杨老师为指导教师,但是在寒假放假前和李老师道个别,聊了一会。李老师说让我做个新项目作为毕业设计,这个项目是她参与的大项目的一个子项目,因为我已经选择了杨老师作为导师,所以我答应李老师做这个项目,但是不是用来作毕业设计。而李老师担心我不会足够的重视这个项目,一定要我把这个项目作为毕业设计。因此我很不好意思的给杨老师打了个电话,说明了一下情况,杨老师当然是一位宽宏大量的老师,于是同意了我更改导师的想法(杨老师一般是不带导生的,当初答应我算是一个特例)。我至今仍然觉得对杨老师有愧。

说一下我的毕业设计吧,做的是一个小型垂直搜索引擎。之前一直使用google百度等,并不了解其背后的工作原理,因此也是零起步。搜索引擎分为两大部分——数据抓取和数据索引检索,而我自己实际写的是数据抓取部分,数据索引和检索对我来说太难了,用的是开源库Lucene。对于网络爬虫,我在做的过程中,没有参考任何已有网络爬虫的设计和实现,我只是在网上搜索有关爬虫的运行原理,我想有自己的实现。了解完原理后,我开始设计我的爬虫,我设计的就是多线程的,因为单线程的话太慢了。我用的编程语言是Java,编程环境是Ubuntu下的Eclipse,数据库用的是MySQL,web服务器用的是Tomcat。选择Java的原因是http协议要用HttpClient开源库,而Lucene也是Java写的,选用Linux环境是因为当时自己有点排斥Windows(这是个人原因)。因为是多线程的,肯定要遇到线程同步问题,因此要认真设计好才行。因为自己对Java并不是很精通,所以很多时候要看Java的Api。在做的过程中也遇到了很多麻烦,比如一个网址经过很长时间都下载不下来,然后这个线程就一直停在哪,后来加了一个限制时间才解决问题。多线程出现错误有时候你根本不知道问题出在哪,因此我又想起了日志,我做测试的时候只开了5个线程,让每个线程都分别记录自己的行为,然后运行一段时间停止,打开每个日志文件来分析问题到底出在哪了。查看比对日志也是个麻烦的事情,不过最起码这个个发现问题的好方法,最终还是通过万能的日志把问题解决了。写多线程很锻炼人,在没有完成这个项目前,觉得这个个很牛的项目,但是自己做完后也就兴奋了两三天,后来觉得其实也就那样,可能是自己的能力又上了一个台阶吧。这个项目好像用了一个多月的时间吧,做完后给李老师看,老师很开心,下面这个图是一个搜索结果图(摘自我的毕业论文):

这个项目代码量大概有1000行吧。

以上就是我大学四年的学习经历。在大牛看来其实是很平淡的,不过对于一些担心学不好计算机的同学来说,还是有一定的借鉴意义,希望看完后能给你带来点希望。只要我们努力,我们肯定会有收获,请相信自己,勇敢地向前踏出第一步!

时间: 2024-09-28 19:25:01

关于自己学习计算机的一些经历(二)的相关文章

关于自己学习计算机的一些经历

我是2009年才考试大学的,报考的是东北师范大学,是免费师范生,读的是计算机科学与技术专业.因为是当初报考的是师范,所以就想学一个是不是师范都一样的专业,这样可以在毕业的时候多一条出路,所以就选择的了计算机专业.在上大学前,自己对计算机是没有多少知识的,因此对计算机也没啥认识,只知道学计算机要编程,但是编程是啥,也不知道.高中时候也去过网吧,也算是摸过电脑了吧! 大一的时候,才去大学有很多不懂,就按部就班的学习理论知识,自己也没啥想法.还记得,在学习C语言时,第一节课根本就没听懂,书也没咋看懂,

Halcon学习笔记之支持向量机(二)

例程:classify_halogen_bulbs.hdev 在Halcon中模式匹配最成熟最常用的方式该署支持向量机了,在本例程中展示了使用支持向量机对卤素灯的质量检测方法.通过这个案例,相信大家可以对支持向量机的使用有一个更加清晰的了解.在相当多的检测和识别的应用中,都可以使用相同的方法来解决分类问题. 图1. 卤素灯图像 大致原理: 一.准备阶段:描述样本 1. 准备好两组卤素灯图像样本,好坏的各若干张图像: 2. 对样本图像进行分割,获取卤素灯关键部位区域: 3. 选择合适的对图像的描述

如何学习计算机

看了这几篇文章,感触颇深,大学以前也没有怎么接触计算机,当初报志愿也是因为我想尝试一些新的东西,然后选了这个专业.刚接触这个专业的时候比如c#.网页设计等,感觉头都大了,因为学习它们不单单靠老师讲,还得无数次地练习才可能学会.我从学习中总结出一些对我很有用的方法,第一,那就是上课认真听老师讲课的情况下,必须记笔记,因为”好记性不如烂笔头“,因为我们上课是先上理论课,等到实训课的时候老师就让我们自己练,如果不记笔记的话就可能浪费时间,一节课可能做不完一个项目.第二,得学会许多专业的英语单词,得背得

学习计算机的三年

学习计算机的三年 学习经历回顾 ?? 不知不觉中大学三年以及过去,现在回忆起来有,有收获也有遗憾.三年前,我对计算机专业的了解不多,选择计算机专业主要是考虑到他发展前景,就业比较不错,所以也谈不上喜欢与不喜欢.如今学习了三年了,这三年中肯定后悔过,在程序出现问题的时候,在实验课设遇到困难的时候,在思考未来的时候,就会觉得是否当初选择了别的专业更适合自己,但是三年过去,我觉得后不后悔以及不重要了,因为一切都不可能重来,不如接受现实. ?? 经过三年的学习,随着学到计算机知识的增加,我对计算机的一些

第1次作业:学习计算机需要多加思考

这篇随笔记录了我阅读这些博文的感想. 第一部分:结缘计算机 当初选择计算机这个专业,是因为自己对编程这块还是有一定的兴趣的,希望能够编制一些有趣或者有用的软件或者程序:当然另一方面的原因就是这个专业比较好就业,并且对其它大部分专业也没有太大兴趣,所以目前计算机是我喜欢但不是非常擅长的领域.我认为我目前的条件还是可以学好计算机的专业知识,但对比老师推荐的这些博主来说还是相差甚远的. 第二部分:在计算机系里学习 我觉得我最想吐槽的就是选择咱们这个专业并不能完全专一地学习计算机编程,学的太杂.至于国内

【python标准库学习】thread,threading(二)多线程同步

继上一篇介绍了python的多线程和基本用法.也说到了python中多线程中的同步锁,这篇就来看看python中的多线程同步问题. 有时候很多个线程同时对一个资源进行修改,这个时候就容易发生错误,看看这个最简单的程序: import thread, time count = 0 def addCount(): global count for i in range(100000): count += 1 for i in range(10): thread.start_new_thread(ad

每天十分钟学习计算机专业英语(一)

每天十分钟学习计算机专业英语(一) 对于一个程序员来说,良好的英语阅读能力是很重要的.因为我们往往需要阅读英文的文档,比如MDN.除此之外,使用github和stackoverflow这些网站也是需要良好的英语能力作为支撑的.这一系列的博文会记录计算机专业英语的相关知识,以提升我们的英文阅读和翻译水平. 第一部分:基本单词 hardware n 硬件 keyboard n 键盘 typewriter n 打字机 button n 按钮 type v 打字 n 类型 traditional adj

javaweb学习总结(六)——Servlet开发(二)

转载:http://www.cnblogs.com/xdp-gacl/p/3763559.html 只为成功找方法,不为失败找借口! javaweb学习总结(六)——Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. 例如: 1 <servlet> 2 <servlet-name>ServletC

非计算机专业学习计算机

一个同学的问题:李老师好,我是一名文科类专业学生,但本身对计算机信息专业方面很感兴趣,并希望在此方面有所发展,但对该学科总体架构方面诸多迷惑,不知您能否为我提出些许建议? 我想了一下计算机专业的课程设置给了如下建议: 1.找计算机系统结构.组成原理.操作系统.计算机网络.数据库原理.信息管理系统这些书看看,能理解多少理解多少.这个可以和下面的过程同步进行,并且重复多遍.2.找本C语言的书或者Java语言的书,书一定要偏操作的,最好你能跟着书做.把书后的习题上机调试了.3.找本数据结构的书,尽量去