[i=s] 本帖最后由 不吃鱼的喵酱 于 2016-1-21 20:15 编辑 喵是不明白学校怎么想的啦,才大三就把我们都赶去实习…… 联系公司的时候也是各种拒绝,你们都这么看不起喵吗…… 最可气的是一听要考研就直接没下文了! 喵实力又不弱,又好养……实在不行还可以抓去卖萌啊(死…… 不过最后总算还是找到一家愿意收留喵的,还是蛮开心的啦~ (简历在最后丢上来做个错误示范,好孩子不要学喵) 这样算下来的话假期只剩下一个月了。不出意外的话这一个月应该都是做实习准备了吧。 那么就记录一下这一个月的生活吧。 目标是在实习开始前熟悉JavaScript和HTML/CSS,有时间再去接触一下jQuery和Bootstrap框架。 看起来活挺多的,其实也没那么多啦~ 因为喵还打算把这个当小剧场练手啦,所以承诺每天至少一更,多更看心情。 更到2月16日正式入职就不更了。如果中间有特殊情况不能更新的话喵会提前说的。 所以,要是发现有忘记更新的情况就使劲戳喵吧,怎么戳都可以……大概吧…… (说好的简历。因为太花了导致重点不突出。简历不应该这么设计的。) [attach]443020[/attach] 【为什么都只有喵自己在更新啊……就没有人评论一下吗……呐,人呢QvQ……】
15. 打点行装 H娘:明天早上就要走了。 喵酱:是啊…… H娘:要去帝都了。 喵酱:嗯…… H娘:完全是未知的环境呢。 喵酱:对…… H娘:所以,我们的目标是星辰大海! 喵酱:…… H娘:喵喵怎么了?好像有心事啊? 喵酱:(轻声啜泣) H娘:哎哎哎?怎么了? 喵酱:姐姐……呜呜呜…… H娘:你这是……舍不得离开家吗? 喵酱:嗯…… H娘:我还以为我家喵喵真的什么感情都没有呢,原来也会想家啊…… 喵酱:…… H娘:呐,夏天的衣服就先不带了,到五一的时候再回来拿或者再买好了。 喵酱:好、好的……可是…… H娘:被子只带一床厚被子,天热的时候就不盖了好吧? 喵酱:感觉春天会被冻死……不过…… H娘:那就再加一床薄被子好了……不过这样箱子就有点放不下了啊…… 喵酱:我说,姐姐…… H娘:羽绒服两套,保暖衣两套,卫衣两套,薄毛衣两套,秋衣三套,衣服足够了吧? 喵酱:有点多……姐姐…… H娘:有衣服换总比没有强。 喵酱:我说…… H娘:呐,数位板就留给母上大人用了,还有你的智能手表和蓝牙耳机我都留下了。 喵酱:! H娘:手柄我还给你带着了,还有雨伞也装书包里了。 喵酱:…… H娘:好了,晚上把电脑也收进去就行了。 喵酱:姐姐大笨蛋!听人家把话说完啊! H娘:哎?突然间怎么了? 喵酱:我…… H娘:我知道,离开家去一个陌生的地方会有很多忐忑,尤其是现在还不是去上学而是去工作。 喵酱:呜…… H娘:但是你还有我呀,想想也不是那么寂寞了对吧? 喵酱:姐姐…… H娘:所以,打起精神来吧,想想还有什么落下的东西? 喵酱:应该没有了。 H娘:可惜锦鲤坊关门了,明天车上没有面包吃了。 喵酱:哼,饿死大笨蛋姐姐好了。 H娘:我倒是无所谓,但是饿到我家喵喵了怎么办? 喵酱:噗!姐姐! H娘:(坏笑)怎么了?我可爱的喵喵? 喵酱:别、别这样说……我…… H娘:好了好了,不调戏你了。好好说,明天不能真的饿肚子吧? 喵酱:我没想好呢…… H娘:难得之前买了这么大一块火腿…… 喵酱:(喵酱的肚子:咕——) H娘:噗…… 喵酱:不、不许笑!姐姐不许笑! H娘:好好好,不笑不笑。我觉得也许明天早上可以去KFC买点东西带着路上吃。反正才三个小时车程。 喵酱:不是很喜欢KFC…… H娘:那你还有更好的计划吗? 喵酱:…… H娘:那就这样了。 喵酱:好吧…… H娘:去到以后还要买好多东西。 喵酱:各种各样的生活必需品都要买……必须的,不必须的,急用的,暂时用不到的,好多好多…… H娘:拖鞋洗发水口杯牙刷脸盆都得买。 喵酱:炒锅煮锅平底锅都得买。 H娘:你买那些做什么? 喵酱:做饭啊。 H娘:你还打算自己做啊…… 喵酱:不然呢?天天下馆子会破产的。 H娘:…… 喵酱:……? H娘:我们不去实习了好不好QwQ
14. 排版 H娘:这乱七八糟的家长信怎么看啊…… 喵酱:所以说现在才要开始排版啊。 H娘:一封一封排版那还不如当初就一封一封手写呢。 喵酱:哼哼,要不然为什么说姐姐笨呢~ H娘:…… 喵酱:我为什么要输出成HTML?就是因为我可以用CSS排版啊。 H娘:那是什么? 喵酱:说了你也不懂。 H娘:嘤嘤嘤,喵喵嫌弃姐姐了QwQ 喵酱:是你自己让我这么说的…… H娘:我不管,你就是嫌弃我了QwQ 喵酱:…… H娘:嘤嘤嘤…… 喵酱:(敲键盘中……) H娘:呜呜呜…… 喵酱:(继续敲键盘……) H娘:蠢猫!你就不能安慰一下我吗! 喵酱:姐姐要是生气了的话,今天晚上想怎么欺负喵酱都可以。不管是捆绑play还是放置play都没关系的……大概吧…… H娘:噗……别把我说得像个Hentai一样啊喂! 喵酱:原来姐姐不想那样啊……那就算了。 H娘:别别别,我想。 喵酱:姐姐真H…… H娘:不过比起那个,你先给我解释一下CSS是什么。 喵酱:CSS就是层叠样式表,姐姐就理解成布局文件就好了。(事实上就是布局文件) H娘:哦…… 喵酱:CSS的最大好处在于,现在有800封家长信,而我只需要做一次布局,就可以对于所有的家长信都生效。 H娘:这么方便啊? 喵酱:是的。 H娘:那还要word干什么? 喵酱:HTML+CSS毕竟是web技术嘛,跟桌面应用还是有区别的。 H娘:那你还拿来用…… 喵酱:要不是她的源数据这么糟糕,我干嘛用这种东西…… H娘:有道理。 喵酱:总之,我先来调调看吧,该居中的居中,该加粗的加粗,该加边框的加边框。 H娘:稍微好一点了,然而还是乱七八糟的。 喵酱:别急啊,我们来看看打印预览。 H娘:这下看起来舒服多了。 喵酱:唔,字号再调一调,还有表头加上阴影,嗯嗯,完美~ H娘:不错不错。 喵酱:好了,交差吧。 H娘:这就结束了? 喵酱:我都快累死了,再不结束怎么活啊…… H娘:这样啊……那行,你好好休息一下,我去跟她说吧。 喵酱:谢谢姐姐…… H娘:把体力养足哦,不然晚上就糟糕了呐。 喵酱:姐、姐姐!
13. 输出 喵酱:下面就该输出家长信了。 H娘:终于到正题了。 喵酱:现在要做的工作就是通过程序把需要的HTML代码生成出来了。 H娘:这样就可以使用表格了吗? 喵酱:是的。 H娘:这个跟记事本有什么区别? 喵酱:哈?姐姐你说什么呢?这么著名的标签语言都没听说过吗? H娘:…… 喵酱:具体是怎么回事我也不跟姐姐讲,反正姐姐也听不懂。 H娘:信不信我让你明天下不了床…… 喵酱:姐姐快把你那些奇♂怪的玩♂具收起来…… H娘:咳咳……你怎么能这么污蔑姐姐的清白呢? 喵酱:哼唧= = H娘:总之,用这个就可以完成要求是吧? 喵酱:是的。来,我们首先打开一个文件输出流,然后把HTML文档的头部先写好。 H娘:那是什么? 喵酱:HTML文档是以html标签开始的,然后还有一个head标签用来定义一些全局信息,其中又有title标签来规定标题栏,link标签来链接其他文件,等等。 H娘:…… 喵酱:姐姐问了我才说的啊…… H娘:下次你直接跟我说“讲了你也听不懂”就好了…… 喵酱:是是是…… H娘:继续吧。 喵酱:好的。下面我们来输出家长信。标题使用h1标签,正文使用p标签。姐姐来帮我个忙吧? H娘:哎?什么忙?即使是我也能做到的事情吗? 喵酱:姐姐帮忙把这封家长信抄在这个标签里面吧。 H娘:就是打字是吗? 喵酱:嗯,就是打字。 H娘:好的,交给我吧。 (五分钟后……) H娘:我算是知道你为什么让我帮忙了…… 喵酱:嗯? H娘:这就是个苦力活…… 喵酱:对呀。 H娘:所以你才让我来干是吗…… 喵酱:不然呢? H娘:没什么…… 喵酱:好的,那么接下来就是表格部分了。这个部分需要查找数据库,拼装SQL语句。 H娘:还有什么需要我帮忙的吗? 喵酱:暂时没有。 H娘:那我就安安静静的看着好了。 喵酱:下面用table标签打印表格,然后联立几张表查询成绩来填充就好了。 H娘:…… 喵酱:先这样,然后再这样,嗯嗯,完美~ H娘:(到底哪样了啊……) 喵酱:那么,让我来测试一下吧。 H娘:生成出来了…… 喵酱:打开看一下。 H娘:这什么格式啊……乱七八糟的…… 喵酱:打印预览……好的,分页是正常的。行了,成功了。 H娘:哎?这就成功了? 喵酱:对啊,不然你还想怎么样? H娘:……
12. 统计 H娘:下面该干什么了? 喵酱:下面差不多就可以把成绩都入库了。 H娘:有什么需要我帮忙的吗? 喵酱:暂时没有,姐姐看着就可以了。 H娘:哦…… 喵酱:一共有五次考试,所以我把学生的准考证号作为外键来建立索引,这样到时候找起来也好找。 H娘:不是很明白…… 喵酱:就是说,学生表里面存储该学生每次考试的准考证号,然后对于每次考试都建立一个表,保存准考证号和各科成绩,这样当我需要的时候就可以直接根据准考证号在某一次考试中查找某个学生的成绩了。 H娘:这种应该是叫树形结构吧? 喵酱:应该是吧……不过没那么深就是了。 H娘:好的,我大概理解了。 喵酱:嗯,现在我需要做的就只是一次读取一行数据,然后用String.split()把每一个数据项分开,再根据需要拼装一条SQL语句来插入数据库就可以了。 H娘:听上去好像很简单的样子啊? 喵酱:事实上也是很简单的啊,我可以直接把之前生成名单的代码框架拿来用,很快就能写完了。 H娘:大概要多久? 喵酱:二十分钟差不多了吧…… H娘:行,我来给你计时。 喵酱:噗…… (二十分钟后……) H娘:如何? 喵酱:写完了,我们来运行一下看看啊…… H娘:结果如何? 喵酱:报了一个数组越界的异常……我看看啊…… H娘:啧。 喵酱:唔……我觉得应该不是程序的问题。让我看看源数据。 H娘:都跟原文件放在同一个文件夹下了,你看吧。 喵酱:嗯……哎?第一场考试怎么只有四列数据?姐姐你是不是偷懒了? H娘:别随随便便就怀疑我啊……当心你的晚饭…… 喵酱:姐姐欺负人QwQ H娘:咳咳,反正我是按照你的要求复制粘贴的,绝对跟原文件里一模一样。 喵酱:我看看……噗…… H娘:怎么了? 喵酱:他们第一次考试一共就只有三科加一个总分…… H娘:…… 喵酱:所以说第一次考试跟其他考试的数据是不一样的…… H娘:于是呢? 喵酱:于是就因为这个我得为它单独写一个录入程序…… H娘:这不是坑人呢吗! 喵酱:姐姐……算了算了,还好东西不多。 H娘:不多也不行!把我家喵喵累坏了谁负责? 喵酱:没事的,喵酱还撑得住。 H娘:…… 喵酱:比起这个,还是先试一下其他数据能不能正常录入吧。 H娘:好吧。 喵酱:结果一切正常,从数据库里查看也确实是录入了。 H娘:不错不错。 喵酱:(伸了个懒腰)呼~下面单独写一下第一次考试的插入程序就好了。给我五分钟足矣。 H娘:乖,不着急啊。 (五分钟后……) 喵酱:行了,完成~ H娘:这样全部数据的入库工作就都做完了? 喵酱:是的。 H娘:松了一口气……
【去串亲戚了,没有网络,没法更新】 真抱歉呐,已经四天没有更新了 所以攒了三篇一起放出来 没网络我也没有办法啊…… 今年除夕没人放炮了,挺开心的 春晚还是一如既往的没看,又一次在B站过年了 话说相声和打牌王那两个节目真棒啊 好了好了,废话不多说了,一次性更新三篇出来 至此这次项目的故事就更新完了哦 下面会再写什么还不一定呢 还有五天就该去上班了,到那时就不再更新了……
11. 编码 (关于那个奇怪的字节的问题,喵酱还是在群里问了一下……) 喵酱:总之,就是这么一个情况。 同学:也就是说入库数据和查出来的数据不一样? 喵酱:是的。 同学:会不会是因为那属于不可显示字符的范畴,所以用phpMyAdmin的时候才没看出来? 喵酱:也就是说,你认为数据库里的数据根本就是有问题的? 同学:我怀疑是。 喵酱:那我把这一条数据重新插入一下再看看吧…… 同学:嗯。 喵酱:(重新插入了一条数据)啊啦,正常了…… 同学:果然。 喵酱:唔……那也就是说入库的时候根本就是有问题的…… 同学:啧,你怎么建的数据库…… 喵酱:我哪知道还能出现这种问题啊……让我统计一下有问题的数据一共有多少条吧…… 同学:还能犯这种低级错误,你真是老了…… 喵酱:哼唧,我才20出头……啊啦,五列,一列一个,一共五个。 同学:你回去查查源文件。看看这五条数据怎么写的。 喵酱:数据都是直接复制粘贴的,没道理只有这五条出问题啊…… 同学:那我就不知道了。 喵酱:我想想……哎,等一下,这几条数据是每个文件的第一条数据。 同学:有什么不同吗? 喵酱:唔……不对,我想起来了,Unicode编码有个字节序的问题。 同学:啥? 喵酱:我好像想明白了,之所以是五条数据出问题是因为源文件一共有五个,而之所以每列一个是因为五个源文件每个对应一列。每个文件只有一个头,所以只会有一个数据出错。 同学:首先,Unicode是个字符集…… 喵酱:你不管嘛,反正我知道是怎么出的问题了,我也知道怎么解决了。 同学:…… (作者:这一节故事到这里就完了,下面是补充资料,软件工程专业的孩子可以仔细研究研究,其他孩子看一看就好了) H娘:(呼……终于到我了……正文都没有我的戏份……) 喵酱:(大人说话,小孩子不要插嘴) H娘:(行,我记住了,今晚没你饭吃) 喵酱:(哼唧= =) H娘:所以说这一个字节到底是什么? 喵酱:是UTF-8编码的BOM啊。 H娘:能说点我听得懂吗? 喵酱:是这样的,Unicode字符集有很多编码方案,其中在web开发上常用的是UTF-8方案。除此之外还有UTF-16,UTF-32之类的方案。 H娘:有什么不同吗? 喵酱:最显著的就是单字的长度不同。UTF-8是存在8位(即一字节)单字的,而UTF-16的最小单字就是16位(即两字节),UTF-32依此类推。 H娘:仅此而已? 喵酱:当然不是。Unicode系列的编码都是变长编码,一个单字从一字节到六字节都有可能,不过具体的编码方法可以不必深究。然而UTF-16是不存在一字节单位的,所以它的单字是二、四或六字节。 H娘:这不是也不会有太大影响嘛。 喵酱:(摇头)不是哦。姐姐还记得BOM吗? H娘:哦对,你还没解释呢,那是什么? 喵酱:BOM全称是Byte Order Mark,即字节序块。这个块位于一串Unicode字符流的开头。通常一种编码方式会有两种规格的BOM,因此也可以说是每一种编码方式下面还有两种子方式。 H娘:这两种子方式应该是有不同的吧? 喵酱:那当然,不然为什么是两种= = H娘:…… 喵酱:就说UTF-16吧,它的两种子方式分别称为UTF-16BE和UTF-16LE。由于UTF-16是已两字节为单位,所以存在一个高字节和低字节的区别。其中BE是指将高8字节放在前,而LE是指将低8字节放在前。 H娘:等等……不是很懂…… 喵酱:就是说,我们假设一个字在Unicode中的编码是0x006C49,那么UTF-16BE的编码结果就是6C 49,而UTF-16LE的编码结果就是49 6C。 H娘:你这么说我就懂了。继续吧。 喵酱:下面我要讲一下这两种子方式的BOM。UTF-16LE的BOM是FF FE,而UTF-16BE的BOM是FE FF。 H娘:正好是相反的。 喵酱:是的。UTF-32的情况也是这样的。 H娘:道理我都懂,可是这跟出现的问题有什么关系啊? 喵酱:问题就出在UTF-8上。UTF-8是已一个字节为最小单位的,所以它没办法通过颠倒几个字节的方式来区分BE和LE子方式啊。 H娘:这确实是个问题……等等,UTF-8一共就一个字节,有什么顺序问题啊! 喵酱:啊啦…… H娘:(哼哼,被我抓到破绽了吧) 喵酱:然而UTF-8确实也是有两种不同的子方式的。 H娘:哦?那就请你说来听听吧。 喵酱:好的。UTF-8的两种子方式分别是UTF-8 with BOM和UTF-8 without BOM。 H娘:哎? 喵酱:因为UTF-8编码一共就只有一个字节作为基本单位,所以不存在字节序的问题,因此就有人想把这个BOM拿掉,所以出现了没有BOM的UTF-8方式。 H娘:然而这个就更影响不到什么了吧? 喵酱:是的。但是有BOM的UTF-8在处理的时候就容易出问题了。姐姐知道那个BOM是几字节吗? H娘:一字节?不对不对……我想想啊…… 喵酱:别猜了。那个BOM是三字节。 H娘:哎? 喵酱:UTF-8的BOM是三字节,依次是EF BB BF。 H娘:…… 喵酱:所以我推测多出来的那一个字节的内容就是BF。 H娘:你又把我搞糊涂了…… 喵酱:Java的内部使用的是Unicode字符集,然而它用的是UTF-16方式,但是我的源文件是使用UTF-8保存的。那么,当两字节的UTF-16跳过UTF-8的BOM的前两个字节以后会发生什么呢? H娘:会把第三个字节和第四个字节读进去…… 喵酱:然而第三个字节还是BOM的部分,是无意义的信息。所以说,那个问号应该就是BOM的一部分了。这样正好也解释了为什么只有每个文件的第一条数据会出现乱码。 H娘:等等……如果是UTF-8 without BOM的编码方式呢?会不会丢失两个字节的数据? 喵酱:不会的。之前说过UTF-8是个变长编码方式,有效范围是一字节到六字节,然而这个第一字节的有效值是00到FD,正好避开了其他方式的BOM的有效值。所以如果第一字节不是BOM的有效值的话那么直接开始读取数据就好了。 H娘:…… 喵酱:呼~一口气说了这么多,姐姐给我端杯水来吧~ H娘:你让我消化一下…… 喵酱:有什么好消化的,反正你也用不到这些知识,我知道这些就行了。 H娘:那倒也是…… 喵酱:所以给我端杯水吧~ H娘:好吧,现在多喝点水,省得晚上没饭吃夜里又吵着饿。 喵酱:姐、姐姐QwQ
10. 入库 喵酱:本来觉得也许不使用数据库也能完成的,但是现在这数据乱成这个样子不得不使用数据库整理了。 H娘:有什么我能帮忙的吗? 喵酱:.xls我处理不了,姐姐帮忙把这些数据复制出来放到记事本里好了。 H娘:记事本里就能处理了吗? 喵酱:记事本是标准的文本流嘛,当然好处理了。 H娘:好嘛,你说怎么样就怎么样咯~ 喵酱:我看看啊……有学生姓名、班级、准考证号和各科成绩以及排名,这里面排名应该是不需要的,剩下的需要插入数据库。那么首先应该先要总结一份学生名单出来。显然学生名单应该是所有考试中学生名单的并集。 H娘:(……?) 喵酱:那么,程序逻辑应该是在插入的时候遍历,如果没有重复项就插入,否则不执行。 H娘:…… 喵酱:嗯嗯,就这样……姐姐你弄完了吗? H娘:…… 喵酱:姐姐? H娘:啊?哦,好了…… 喵酱:那么,姐姐帮忙把五次考试所有的学生的姓名和班级放到一个txt文件中吧。 H娘:哎?全部吗? 喵酱:是的。 H娘:重复的怎么办? 喵酱:你不管嘛,我会处理的。 H娘:哦……这样就可以了吗? 喵酱:可以了。谢谢姐姐~ H娘:下面你打算怎么处理呢? 喵酱:打开一个FileInputStream,用Scanner过滤一下,一次处理一行就好了嘛。 H娘:我就不该问这句话…… 喵酱:我可以在内存中维护一个List,每次添加的时候就遍历一下,只插入不存在于List中的数据,等到所有数据都处理完了以后再把这个List插入数据库就好了。 H娘:好像明白一点了……需要多久能写完呢? 喵酱:这个应该很快吧……半小时以内? H娘:那我就开始规划今晚吃什么了啊。 喵酱:就知道吃…… (半小时以后……) H娘:好了吗? 喵酱:…… H娘:晚餐煮白象大骨面吧,下一把菠菜,打个鸡蛋,再切两片火腿,怎么样? 喵酱:…… H娘:你不说话我就当你同意了啊。 喵酱:…… H娘:乖,怎么了? 喵酱:插入数据出现了奇怪的问题。 H娘:哎?奇怪的问题? 喵酱:姐姐你看,数据库里这一条数据是个8位数字,然而读出来前面就多了个问号。 H娘:哎?这是什么问题? 喵酱:刚开始我以为是数据的问题,检查了数据库发现并没有问题,然后我尝试用String.subString()去掉问号,结果莫名其妙的去不掉。 H娘:去不掉? 喵酱:而且我还发现了一件很奇怪的事,正常情况下这个8位数字的字符串运行String.length()的结果应该是8,那么多了一个空格以后再运行应该是9了,然而事实上运行结果依然是8…… H娘:我有点不太明白……这意味着什么吗? 喵酱:也就是说,计算姬在执行的时候并不认为这个问号是一个可见的字符,甚至不认为它占长度,然而事实上打印的时候确实将这个问号打印出来了。 H娘:呃…… 喵酱:更进一步地讲,这个字符串不算结尾标记的话在内存中应该是占了9个字节的,然而我却没有办法访问它的第一个字节,甚至没有办法把它和其他正常的字符串区分开来,但是计算姬自己确实是知道它们是不一样的。 H娘:…… 喵酱:既然length()的运行结果是相同的,那么我推测equals()的运行结果也应该是相同的,也就是说作为执行语言的Java很有可能根本没有办法分辨它们的,然而很不幸的是MySQL是可以分辨的。我不知道该怎么处理这种奇怪的问题……这一个字节到底是什么内容?是怎么来的?该怎么消除?这些我完全没有头绪……我……我……呜呜呜…… H娘:哎哎哎,怎么还哭上了…… 喵酱:都怪喵酱学艺不精……说大话接下这种需求然后又完不成……连累姐姐了…… H娘:你可别这么说。遇到困难是常有的事,没有困难还怎么进步嘛。 喵酱:可是…… H娘:就算是一点头绪也没有,冷静分析一下,慢慢的就会有发现的。 喵酱:呜…… H娘:行了行了,先吃饭,吃完饭再想啊。 喵酱:…… H娘:看来你是不饿,那算了,等凉了我拿去楼下喂猫好了。 喵酱:喵!喂我、喂我就好了!