Brief is Life, Love is Long.

2018沈阳东软睿道Java实训笔记系列 No.7:再遇 WannaCry 2018-07-12

前言

今天上午还在吐槽,说:“经过这几天的实训,我领悟了一个道理:拥有一台装了Win7的电脑有多么重要。”,下午我的Win7就差点GG了。虽然今天主要讲的是对于 Java Web 来说很重要的JSP,但说实话,真的不是我不学,也真的不是我不努力学,也真的不是我不认真听且努力学,而是这老师讲的实在是太混乱了,完全无法理解。他所做的,就是嗷嗷快地敲一遍代码,再把代码的意思大致提一下,对JSP程序的构成之类的完全不提。我对此表示极其不满意!强烈建议学校有关部门对实训的质量进行严格监督和把控!现在这种级别的实训简直就是在浪费生命!


与JSP有关的内容今天先不提了,我何时研究明白,整理透彻,何时再写。今天记录一下下午差点让我的Win7 GG的东西——

再遇 WannaCry 勒索病毒

继上一次在哈工程某实验室的机子上的Win7系统里中了一次 WannaCry 后,我的Win7系统的副电脑(ThinkPad X200)在沈阳东软睿道的网络上又一次中了 WannaCry。

开心不?开心。刺激不?刺激。意外不?意外。

我在今日(2018-07-12)使用 Proxifier + 酸酸乳 的时候,发现有大量的 mssecsvc.exe 进程访问各种奇怪的IP地址,看文件名本以为是系统服务,也没当一回事。下午装 MyEclipse 2017 的时候,电脑莫名其妙地卡,看了以下资源监视器,发现这个进程的线程数量莫名其妙地多,占了大量的CPU和内存,我这才反应过来什么地方不太对。上网大致查了一下,觉得可能就是 WannaCry 这位只有一面之缘的老朋友。又找到了进程的exe文件,发现居然能用WinRAR打开。打开看了一下内容,确实就是WannaCry,目录结构也和上一次中的时候基本一致。这铁定是实锤了。紧接着我又看了以下病毒的文件属性,发现是在本机上的创建时间是 2018-07-05,也就是说,这玩意已经潜伏了7天,而我竟然没有发现,真是奇耻大辱!不过根据我的观察,这玩意一直在连接各种奇怪的IP,似乎是在积极传播,貌似还没有对我的文件下手,我这几天还插过好几次且好长时间的硬盘,也真是万幸了……不过用 WinRAR 打开 WannaCry 的时候,WinRAR 报了个“不可预料的压缩文件末端”错误,难道是因为病毒传播不全才让我的文件免于一死?虽然我不太懂病毒这种东西,不过我的理性告诉我应该不是这样。合理的解释应该是,病毒的构成包括一段压缩文件,但不完全是压缩文件,后面还合成了一段注入程序之类的东西,WinRAR 成功地打开了前面的压缩文件部分,而对后面的程序束手无策。rar文件和其他文件的合并也不是什么新鲜事了,我早就尝试过把压缩包和图片合并在一起,使用图片的后缀名,以此隐藏压缩文件的内容,想要压缩文件的时候把后缀名改成rar就可以正常打开和解压了。

咋办?淡定地下了火绒,杀毒,先临时解决一下。然后?打补丁啊打补丁!!!紧急打补丁啊!!!尽管东软的网速也是要了命的级别,但也不能不打啊……毕竟补丁才是真正彻底的解决之道……其实也不一定非要用火绒,网上还是有很多专杀工具的。不过至少我是不待见某数字全家桶,无论如何都不想用他们家的东西……(其实我装火绒就是准备放弃裸奔了……国产杀毒我只信任这一家。)

我仔细回忆了一下之前的上网情况,我在5日左右的确没有执行什么奇怪的下载操作,我有充足地信心认为,这病毒是从局域网里传播而来的。既然如此,那么局域网内除了我这台机子以外,应该至少还有一台感染了这种病毒的电脑。鉴于Win10的强制自动更新机制,我不认为另外至少一台应当是Win10系统。老师讲课用的电脑尽管也是Win7,但是他上课用的文件基本都是带来的而不是现下的。所以有两种我认为可能性较大的情况,第一是东软的网不干净,局域网内早就有这种病毒潜伏了,只是我运气不好,恰好条件符合就被感染了而已;另外一种可能就是某个学员不小心下载并执行了这种病毒,他先被感染,然后再导致我被感染。不过话说回来,这两种情况好像对解决问题而言并没有什么差别……无论如何,既然老师讲课用的电脑是Win7,那么他也有极大被感染的可能性,我决定等下课之后去他的电脑上看看,是不是也中招了。哦,又想起来了一件事……由于这 Java 课水得不得了,虽然技术都是目前还在使用的技术,但用的相关软件和环境都是早就过了时的,很多软件与Win10系统不兼容,因此不少同学的电脑都改成Win7了……要是这样的话……emmm……过两天可就有戏看了……不过也不见得,毕竟我是裸奔主义者,一般人应该都会装杀毒的吧……

写到这的时候,我已经用火绒的快速查杀干掉 WannaCry 了,我还特地把病毒导出了一份作为样本留档,也是没谁了……以防万一,我再执行一次全盘扫描,估计得等到下课。那就等着吧……待全盘查杀结果出炉且我观察过老师的电脑之后再继续。

全盘扫描已经完成了,并没有扫出来别的什么东西,说明病毒的传播本体应该不在我的电脑上,也就是说,要么是我下载的病毒已经被我删掉了,要么就是我下载的病毒在注册到系统后对传播本体执行了自毁(这种可能性还是很低的,因为据我所知,WannaCry 基本上是那种毫不避讳自己病毒身份的程序),或者是局域网不干净,从别的电脑上直接干进来的。实际到底是怎样我也是不可能知道的了,毕竟我也没有掌握相关的技术。老师讲课用的电脑我也瞅了一眼,并没有在进程列表中找到 mssecsvc.exe。无论如何,接下来的事情就是要装完我这电脑的漏洞补丁了,这一事情也就告一段落罢。

2018沈阳东软睿道Java实训笔记系列 No.6:关于HTML与JavaScript 2018-07-12

前两天(2018-07-10~2018-07-11)讲的是HTML和JavaScript。

先声夺人一下:

JavaScript 与 Java 没有任何关系!!!

JS与JSP也没有任何关系!!!

(JS是 JavaScript 的缩写,JSP是 Java Server Pages 的缩写)

JavaScript 的名字中有一个Java完全就是为了蹭热度!!!

(蹭热度的无耻之徒)

也不知道这鬼名字坑了多少人……反正我没被坑过~(摊手)

HTML和JS我不是很擅长……虽然懂也不是特别懂……目前也就停留在看代码的阶段,离独立编写一个完整的页面还有好长的路要走。

好在HTML和JS的入门门槛还是很低的,网上可供查阅的资料也非常多且详尽。在诸多教学网站中,愚以为,W3School 的教程是最好的,他们家的网址是:www.w3school.com.cn。一定要和伪W3CSchool(www.w3cschool.cn)区分开!又一个蹭热度的无耻之徒!前端圈子都这么乱的嘛???

HTML 的全称是 Hyper Text Markup Language,它是一种标记语言(Markup Language),即一套标记标签 (Markup Tag),是一种用于控制网页文档排版格式的标签,而不是一门编程语言。看到了吗?HTML不是一门编程语言!!!

JavaScript 与 JAVA 和 JSP 完全没有任何关系,这个刚才已经说过了。JavaScript是一门脚本语言,脚本语言是一种无需显示编译的编程语言。看到了吗?JavaScript 是一门编程语言!!!

不过也巧了,今天早上出门的时候正好看到某面向程序员的微信公众号推的一个图:
俩孩子在打仗,一老者前来劝架:“孩子们,暴力不能解决任何问题。”
其中一个被老者拉开的孩子说:“HTML是一门编程语言!“
POOM!老者狠狠地给了他一记重拳。

嗯。这篇文章就这么多。

2018沈阳东软睿道Java实训笔记系列 No.5:Java 开发基础 第二部分 & 面向对象概念 2018-07-09~2018-07-11

记录一下关于Java的几个我印象中“比较新”的内容。


定义Java数组时直接赋值:

对于一位数组:
int n[] = {1,2,3};
对于多维数组:
int n[][] = {{1,2},{3,4},{5,6}};

与之相对的是较为常用的“先定义长度,再赋值”:

int n[3] = new int[3];
n[0] = 1;
n[1] = 2;


foreach循环――“有冒号的for循环”:

这种带冒号的for循环叫做foreach循环,其在遍历数组/集合方面为开发人员提供了极大的方便,且其执行效率高于for循环。foreach语句是for语句的特殊简化版本,但其不能完全取代for语句。然而,任何foreach语句都可以改写为for语句。

for(<元素的数据类型> <元素的标识符> : <遍历对象>){
//此处为与元素标识符有关的语句,而非遍历对象
}

比如:

int[] n = {1,2,3};
for(int i : n){
    System.out.println(i);
}

对于多维数组:

int[][] n = {{1,2},{3,4},{5,6}};
for(int i : n){
    for(int j : i){
        System.out.println(j);
    }
}


面向对象概念

既然本日课上提到了面向对象的特性以及相关的概念,最后一个部分,就容我粗略地讲述一下面向对象的起源与我对面向对象的认知。

在讲正经内容之前,我还是要先谈谈教学重点的问题。老师的“试错”演示过程着实不错,确实更能让学生对代码的写法产生较为深刻的认知,但是,老师没有讲到“面向对象”概念的精髓,没有谈到编程语言的发展过程中面向对象方法产生的必然性,没有谈到面向对象方法所面对的问题,也没有谈到面向对象的几大特性对解决实际问题的意义。我的意思是,语句的写法固然是编程的一个方面,而且可以说是根基的一个方面,但是,相比于语法而言,更重要的是设计思路和对编程语言特性的理解。就此而言,我不认为这种只介绍基本概念而不展开说明,反而注重与语句的基本写法的教学是不当且失败的。相比而言,本人高中刚毕业的时候,与 Michael Lee 所师从的那位中国移动营口分公司的Java程序员老师就做得很好。对编程语言的理解到位了,对设计思路的认知到位了,面对问题时自然就会想到解决办法,自然就乐于解决更多问题,敲得多了,语句的写法也就熟悉了。

虽然老师不讲,但咱们也不能不知道是不是?毕竟也是211大学的学生,要有自学和自悟能力。

那么下面我就来浅述一下在我的认知中,编程语言的发展,以及面向对象的意义。




继续阅读 >>>

2018沈阳东软睿道Java实训笔记系列 No.4:Java 开发基础 第一部分 2018-07-06

今天的主题是宣扬企业文化。没错,宣扬企业文化。

老师说了,你做的东西经理不一定能看懂,理论上里面的东西也不一定是公司的东西,但是表面上你要让经理知道你做的是公司的东西。emmmm……这么一说确实好像挺有道理……

不过听起来虽然挺复杂,但实际上就是换个软件启动时出现的图的事。

鉴于我写到这的时候还没装“特别版”的 MyEclipse 8.6,那么就先说说 Eclipse 怎么换图。

首先,找到 Eclipse 的安装路径。

里面有个 plugins 文件夹。在这个文件夹里找到一个名称为“org.eclipse.epp.package.common_<版本号>”的文件夹,里面有个splash.bmp,这个文件就是加载图,把它改掉就行了。

如果你的Eclipse曾经坐地升级过(就是执行过Update操作),那么应该会有好几个“org.eclipse.epp.package.common_<版本号>”文件夹,找其中版本号和你对应的那个(一般就是最新的那个),改这个文件夹里的splash图就好。

鉴于我写到这的时候,“特别版”的 MyEclipse 8.6 还是没到手……那么我就再写点别的……

这老师啊……怎么说呢……讲SQL的时候觉得好水啊,内容也拓展不开(比如分组查询的部分),操作也菜得很,总感觉知识深度又不够,推进速度又慢……感觉上都不如我高中刚毕业那会师从的一位在营口移动工作的已经提前进入退休养老状态的早就不剩多少头发了的老程序员。不是因为我自恃水平不错而作此评价,而是基于较为客观的考虑:俺们毕竟也算是正经211大学的学生,就算这学校再水,俺们学院在学校的地位再水,接受知识的能力应该不至于这么差吧……也不知道是老师懒得讲还是天生性子慢还是因为性子慢又考虑到教学计划所以才略掉不讲还是怎么样的我就不得而知了,但毕竟这老师居然连三款数据库的异同都熟知,讲的东西也基本上都够入门了,也就算是功过相抵了,毕竟不能指望一个人的知识面又广又深,熊和鱼掌不可兼得嘛~

继续阅读 >>>

2018沈阳东软睿道Java实训笔记系列 No.3:MySQL数据库 第三部分 2018-07-07~2018-07-10

这一天的内容,就整理一下余下的SQL部分的笔记。

创建从表(也称子表)

首先说明,为什么需要从表,从表与主表有何关系。

想象一下,生活中常常会遇到一对多的情况,比如一个学校有多个学院,一个学院有多个教师,一位教师有多位学生,一门学生要修多门科目,如此这般。在现有的数据库系统中,一个表的各条记录只能表示一条数据,由于主键不可重复,因此想要只用一个表就解决一对多的情况,是不现实的。主表与从表就是从解决一对多问题的角度出发而设计的。从表中有一列或多列,这(些)列使用了一种特殊的约束,叫做“外键约束”,即这一列的字段必定与另一表(主表)的某一列的字段(要求这一字段为候选键(也称候选码),通常是主键)相同,即形成一种一对多的映射关系。这样,通过外键就可以知道子表中的哪一行数据与主表中的哪一行相对应,这样就可以形成一对多关系。外键约束与主键约束不能并存,即一列不能是主键的同时也是外键,否则无法形成一对多的关系,外键约束的意义也就不存在了。

下面,我将以一个例子说明主表和从表的关系。

首先,建立一个主表:

create table stuInfo(
sid int(4) primary key auto_increment,
sname varchar(8) not null
);

然后,创建一个从表:

create table marks(
mid int(4) primary key,
mysql float not null,
mjava float not null,
mhtml float not null,
mweb float not null,
sid int(4) not null references stuInfo(sid) # sid即为外键
);

为主表和从表添加相关数据:

#添加主表数据
insert into stuInfo(sname)  values('小张'),('小李'),('小王');

#添加从表数据
insert into marks(mid,mysql,mjava,mhtml,mweb,sid)
values(10001,80.5,90,60,70,1);
insert into marks(mid,mysql,mjava,mhtml,mweb,sid)
values(10002,81.5,92,66,80,1);
insert into marks(mid,mysql,mjava,mhtml,mweb,sid)
values(10003,70.5,85,90,60,2);

这样,以上两表就形成了一对多的关系:
stuInfo表:主表(一)
marks表:从表/子表(多)

对于存在外键约束的表的查询,通常采用联合查询,即在查询的过程中将从表与主表的数据关联起来,给出“一对多”的查询结果。


继续阅读 >>>