精华内容
下载资源
问答
  • Java代码到机器

    2020-03-17 13:33:57
    但是,字节并不是机器语言,要想让机器能够执行,还需要把字节翻译成机器指令,这个过程是Java虚拟机做的,这个过程也叫编译,是更深层次的编译。 在编译原理中,把源代码翻译成机器指令,一般...

    在《Java代码的编译与反编译》中,有过关于Java语言的编译和反编译的介绍,我们可以通过javac命令将Java程序的源代码编译成Java字节码,即我们常说的class文件,这是我们通常意义上理解的编译。

    但是,字节码并不是机器语言,要想让机器能够执行,还需要把字节码翻译成机器指令,这个过程是Java虚拟机做的,这个过程也叫编译,是更深层次的编译。

    在编译原理中,把源代码翻译成机器指令,一般要经过以下几个重要步骤:

    根据完成任务不同,可以将编译器的组成部分划分为前端(Front End)与后端(Back End)

    前端编译:主要指与源语言有关但与目标机无关的部分,包括词法分析、语法分析、语义分析与中间代码生成。
    后端编译:主要指与目标机有关的部分,包括代码优化和目标代码生成等。
     

    我们可以把将.java文件编译成.class的编译过程称之为前端编译。把将.class文件翻译成机器指令的编译过程称之为后端编译。

    我们所熟知的javac的编译就是前端编译,除了这种以外,我们使用的很多IDE,如eclipse,idea等,都内置了前端编译器,主要功能就是把.java代码转换成.class代码。

     

    一,前端编译:

    词法分析

    词法分析阶段是编译过程的第一个阶段,这个阶段的任务是从左到右一个字符一个字符地读入源程序,将字符序列转换为标记(token)序列的过程,这里的标记是一个字符串,是构成源代码的最小单位,在这个过程中,词法分析器还会对标记进行分类。

    词法分析器通常不会关心标记之间的关系(属于语法分析的范畴),举例来说:词法分析器能够将括号识别为标记,但并不保证括号是否匹配。

     

    语法分析

    语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如 “程序”,“语句”,“表达式” 等,语法分析程序判断源程序在结构上是否正确,源程序的结构由上下文无关文法描述。

     

    语义分析

    语义分析是编译过程的一个逻辑阶段, 语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息。

    语义分析的一个重要部分就是类型检查,比如很多语言要求数组下标必须为整数,如果使用浮点数作为下标,编译器就必须报错,再比如很多语言允许某些类型转换,称为自动类型转换。

     

    中间代码生成

    在源程序的语法分析和语义分析完成之后,很多编译器生成一个明确的低级的或类机器语言的中间表示,该中间表示有两个重要的性质: (1) 易于生成; (2) 能够轻松地翻译为目标机器上的语言;

    在Java中,javac执行的结果就是得到一个字节码,而这个字节码其实就是一种中间代码。

    PS:著名的解语法糖操作,也是在javac中完成的。

     

    二,后端编译:

    我们大家都知道,通常通过 javac 将程序源代码编译,转换成 java 字节码,JVM 通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。很显然,经过解释执行,其执行速度必然会比可执行的二进制字节码程序慢很多。这就是传统的JVM的解释器(Interpreter)的功能。为了解决这种效率问题,引入了 JIT 技术。

    JAVA程序还是通过解释器进行解释执行,当JVM发现某个方法或代码块运行特别频繁的时候,就会认为这是“热点代码”(Hot Spot Code)。然后JIT会把部分“热点代码”翻译成本地机器相关的机器码,并进行优化,然后再把翻译后的机器码缓存起来,以备下次使用。

    HotSpot虚拟机中内置了两个JIT编译器:Client Complier和Server Complier,分别用在客户端和服务端,目前主流的HotSpot虚拟机中默认是采用解释器与其中一个编译器直接配合的方式工作。

    当 JVM 执行代码时,它并不立即开始编译代码。首先,如果这段代码本身在将来只会被执行一次,那么从本质上看,编译就是在浪费精力。因为将代码翻译成 java 字节码相对于编译这段代码并执行代码来说,要快很多。第二个原因是最优化,当 JVM 执行某一方法或遍历循环的次数越多,就会更加了解代码结构,那么 JVM 在编译代码的时候就做出相应的优化。

    在机器上,执行java -version命令就可以看到自己安装的JDK中JIT是哪种模式:

    上图是我的机器上安装的jdk1.8,可以看到,他是Server Compile,但是,需要说明的是,无论是Client Complier还是Server Complier,解释器与编译器的搭配使用方式都是混合模式,即上图中的mixed mode。

     

    热点检测

    上面我们说过,要想触发JIT,首先需要识别出热点代码。目前主要的热点代码识别方式是热点探测(Hot Spot Detection),有以下两种:

    1、基于采样的方式探测(Sample Based Hot Spot Detection) :周期性检测各个线程的栈顶,发现某个方法经常出险在栈顶,就认为是热点方法。好处就是简单,缺点就是无法精确确认一个方法的热度。容易受线程阻塞或别的原因干扰热点探测。

    2、基于计数器的热点探测(Counter Based Hot Spot Detection):采用这种方法的虚拟机会为每个方法,甚至是代码块建立计数器,统计方法的执行次数,某个方法超过阀值就认为是热点方法,触发JIT编译。

    在HotSpot虚拟机中使用的是第二种:基于计数器的热点探测方法,因此它为每个方法准备了两个计数器:方法调用计数器和回边计数器。

    方法计数器:顾名思义,就是记录一个方法被调用次数的计数器

    回边计数器:是记录方法中的for或者while的运行次数的计数器

     

    编译优化

    前面提到过,JIT除了具有缓存的功能外,还会对代码做各种优化。说到这里,不得不佩服HotSpot的开发者,他们在JIT中对于代码优化真的算是面面俱到了。

    这里简答提及几个我觉得比较重要的优化技术,并不准备直接展开,读者感兴趣的话,我后面再写文章单独介绍。

    逃逸分析、 锁消除、 锁膨胀、 方法内联、 空值检查消除、 类型检测消除、 公共子表达式消除。

    展开全文
  • 前文从总结恶意代码检测技术,包括恶意代码检测的对象和策略、特征值检测技术、校验和检测技术、启发式扫描技术、虚拟机检测技术和主动防御技术。这篇文章将介绍基于机器学习的恶意代码检测技术,主要参考郑师兄的...

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~

    前文从总结恶意代码检测技术,包括恶意代码检测的对象和策略、特征值检测技术、校验和检测技术、启发式扫描技术、虚拟机检测技术和主动防御技术。这篇文章将介绍基于机器学习的恶意代码检测技术,主要参考郑师兄的视频总结,包括机器学习概述与算法举例、基于机器学习方法的恶意代码检测、机器学习算法在工业界的应用。同时,我再结合自己的经验进行扩充,详细分享了基于机器学习的恶意代码检测技术,基础性文章,希望对您有所帮助~

    作者作为网络安全的小白,分享一些自学基础教程给大家,主要是关于安全工具和实践操作的在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,点赞、评论、私聊均可,一起加油喔!

    作者的github资源:

    从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!

    接下来我将开启新的安全系列,叫“系统安全”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~

    前文分析:

    声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。(参考文献见后)


    随着互联网的繁荣,现阶段的恶意代码也呈现出快速发展的趋势,主要表现为变种数量多、传播速度快、影响范围广。在这样的形势下,传统的恶意代码检测方法已经无法满足人们对恶意代码检测的要求。比如基于签名特征码的恶意代码检测,这种方法收集已知的恶意代码,以一种固定的方式生成特定的签名,维护这样的签名库,当有新的检测任务时,通过在签名库中检索匹配的方法进行检测。暂且不说更新、维护签名库的过程需要耗费大量的人力物力,恶意代码编写者仅仅通过混淆、压缩、加壳等简单的变种方式便可绕过这样的检测机制。

    为了应对上面的问题,基于机器学习的恶意代码检测方法一直是学界研究的热点。由于机器学习算法可以挖掘输入特征之间更深层次的联系,更加充分地利用恶意代码的信息,因此基于机器学习的恶意代码检测往往表现出较高的准确率,并且一定程度上可以对未知的恶意代码实现自动化的分析。下面让我们开始进行系统的介绍吧~


    一.机器学习概述与算法举例

    1.机器学习概念

    首先介绍下机器学习的基本概念,如下图所示,往分类模型中输入某个样本特征,分类模型输出一个分类结果。这就是一个标准的机器学习检测流程。机器学习技术主要研究的就是如何构建中间的分类模型,如何构造一组参数、构建一个分类方法,通过训练得到模型与参数,让它在部署后能够预测一个正确的结果。

    在这里插入图片描述

    训练是迭代样本与标签对的过程,如数学表达式 y=f(x) ,x表示输入的样本特征向量,y表示标签结果,使用(x,y)对f进行一个拟合的操作,不断迭代减小 y’ 和 y 的误差,使得在下次遇到待测样本x时输出一致的结果。该过程也称为学习的过程。


    构造分类方法
    构造分类方法是机器学习中比较重要的知识,如何设计一种分类模型将f(x)表达出来。比如:

    • 超平面(SVM)
      在二维坐标轴中,可以设计一条直线将空间内分布的散点区分开来,如下图所示。
    • softmax
      另外一种方法是构造类别概率输出(softmax),比如归一化处理得到A+B=1,最后看A和B的概率,谁的概率大就属于哪一类,该方法广泛使用于神经网络的最后结果计算中。

    在这里插入图片描述



    2.机器学习算法举例

    作者之前Python系列分享过非常多的机器学习算法知识,也推荐大家去学习:机器学习系列文章(共48篇)

    (1) 支持向量机(SVM)
    首先存在很多训练数据点,包括直线上方和下方两个簇,支持向量机的方法是寻找这两个簇分类的超平面。如何寻找这个超平面呢?支持向量机先求解每个簇离对面最近的点,然后通过拟合方法计算出两边簇的边界,最终计算出中间的平面,其基本思路就是这样,而这些点就是支持向量。支持向量机往往用来处理超高维的问题,也不一定是类似直线的平面,也可能是圆形的分类边界。

    在这里插入图片描述

    (2) 神经网络(Neural Network)
    神经网络基本网络结构如下图所示,包括三个常用层:输入层、隐藏层、输出层。在神经网络中,最基本的单位是人工神经元,其基本原理是将输入乘以一个权重,然后将结果相加进行激活,最后得到一个概率的输出,其输出结果谁大就预测为对应的结果。推荐作者的文章:神经网络和机器学习基础入门分享

    在这里插入图片描述

    (3) 深度卷积神经网络
    普通的神经网络通常只包括一个隐藏层,当超出之后可以称为深度神经网络。现在比较流行的包括CNN、RNN、RCNN、GRU、LSTM、BiLSTM、Attention等等。其中,卷积神经网络常用于处理图片,应用了卷积技术、池化技术,降低图片维度得到很好的结果。

    在这里插入图片描述

    如上图所示,将手写数字“3”(32x32个像素)预测为最终的数字0-9的结果。模型首先使用了6个卷积核,对原始图片进行固定的计算,如下5x5的图像卷积操作后变成了 3x3 的图像。其原理是将特征提取的过程放至神经网络中训练,从而得到比较好的分类结果。卷积之后进行了一个2x2的下采样过程,将图片进一步变小(14x14),接着降维处理,一般采用平均池化或最大池化实现,选定一个固定区域,求取该区域的平均值或最大值,然后将向量进行组合,得到一个全连接网络,最终完成分类任务。
    参考作者前文:[Python人工智能] 四.神经网络和深度学习入门知识

    在这里插入图片描述

    深度神经网络是深度学习中模型,它主要的一个特点是将特征提取的过程放入到真个训练中,之前对于图片问题是采用手工特征,而CNN让在训练中得到最优的特征提取。

    在这里插入图片描述



    3.特征工程-特征选取与设计

    上面介绍了机器学习和深度学习方法,但是这些方法往往是该研究领域的学者所提出,而在恶意代码检测中,往往我们的主要工作量是一些特征的提取和特征的设计,这里面涉及一个特征工程的概念。

    特征工程:选取特征,设计特征的过程。
    例如,在路边预测一个人是否是学生,假设我们不能去询问,只能通过外表去预测他是否是一个学生,包括:年龄(低于15岁就是学生)、性别(不影响学生)、衣着(穿着活泼年轻的可能是学生,如果穿着西装可能性就小)等等,然后根据这些特征输入机器学习模型,从而判断是否是学生。

    在这些特征中,显然有些特征是非常重要的,比如年龄和衣着。数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限,所以如何选取特征是机器学习的一个关键性因素。再比如淘宝的推荐系统,购买电脑推荐鼠标、键盘等。

    当然,上面仅仅是一个比较简单的问题,当我们推广到恶意代码检测等复杂问题时,如果不了解这个领域,可能就会导致模型的结果不理想。

    在这里插入图片描述


    特征设计——人脸识别
    局部二值特征(Local Binary Pattern),再举一个人脸识别例子,深度学习出来之前,图片分类都是使用一些特征算子提取特征的。比如存在一个3x3的窗口,我们取阈值5,比5小的窗口置为0,其他的置为1,然后顺时针转换为一个8位的二进制数字,对应的十进制就是19。显然,LBP特征进行了一个降维的操作,左边的图片显示了人脸识别不应该受光照影响,不同光照的图片进行LBP特征提取后,显示结果都一样。

    在这里插入图片描述

    该部分的最后,作者也推荐一些书籍供大家学习。

    • 《统计学习方法》李航,数学理论较多
    • 《机器学习》周志华,西瓜书,较通俗透彻
    • 《Deep Learning》Ian Goodfellow,花书,深度学习内容全面
    • 《精通特征工程》结合恶意代码特征学习,包括如何向量化

    再看看我的桌面,这些都是作者最近看的一些安全、AI类书籍,希望也您喜欢~

    在这里插入图片描述



    二.基于机器学习方法的恶意代码检测

    1.恶意代码的静态动态检测

    (1) 特征种类

    首先,特征种类如果按照恶意代码是否在用户环境或仿真环境中运行,可以划分为静态特征和动态特征。

    • 静态特征: 没有真实运行的特征
      字节码:二进制代码转换成了字节码,比较原始的一种特征,没有进行任何处理
      IAT表:PE结构中比较重要的部分,声明了一些函数及所在位置,便于程序执行时导入,表和功能比较相关
      Android权限表:如果你的APP声明了一些功能用不到的权限,可能存在恶意目的,如手机信息
      可打印字符:将二进制代码转换为ASCII码,进行相关统计
      IDA反汇编跳转块:IDA工具调试时的跳转块,对其进行处理作为序列数据或图数据

    在这里插入图片描述

    • 动态特征: 相当于静态特征更耗时,它要真正去执行代码
      API调用关系:比较明显的特征,调用了哪些API,表述对应的功能
      控制流图:软件工程中比较常用,机器学习将其表示成向量,从而进行分类
      数据流图:软件工程中比较常用,机器学习将其表示成向量,从而进行分类

    举一个简单的控制流图(Control Flow Graph, CFG)示例。

    if (x < y)
    {
       y = 0;
       x = x + 1;
    }
    else
    {
       x = y;
    }
    

    在这里插入图片描述


    (2) 常见算法

    普通机器学习方法和深度学习方法的区别是,普通机器学习方法的参数比较少,相对计算量较小。

    • 普通机器学习方法(SVM支持向量机、RF随机森林、NB朴素贝叶斯)
    • 深度神经网络(Deep Neural Network)
    • 卷积神经网络(Convolution Neural Network)
    • 长短时记忆网络(Long Short-Term Memory Network)
      针对序列模型进行建模,包含上下文依赖关系,比如“我 是 一名 大学生”中的“我”和“是”前后出现的条件概率更高。广泛应用于文本分类、语音识别中,同样适用于恶意代码检测。
    • 图卷积网络 (Graph Convolution Network)
      比较新兴的方法,将卷积应用到图领域,图这种数据类型比较通用,非图数据比较容易转换成图数据,CCF论文中也已经应用到恶意代码检测中。。


    2.静态特征设计举例

    首先分享一个静态特征的例子,该篇文章发表在2015年,是一篇CCF C类会议文章。

    • Saxe J,Berlin K. Deep neural network based malware detection using two dimensional binary program features[C] // 2015 10th International Conference on Malicious and Unwanted Software(MALWARE). IEEE, 2015: 11-20

    在这里插入图片描述

    文章的主要方法流程如下所示:

    在这里插入图片描述

    该模型包含三个步骤:

    • 特征抽取
      使用了四种特征
    • 特征抽取输入到深度神经网络
      包含两层隐含层的深度神经网络
    • 分数校正

    特征抽取
    特征提取包括以下四种特征:

    在这里插入图片描述

    • 字节-熵对统计特征:统计滑动窗口的(字节,熵)对个数
      在下图中,假设白框是一个二进制文件,其中红色框W是滑动窗口,二进制文件如果有100KB大小,每个滑动窗口是1024字节,那么滑动100次可以将整个二进制文件扫描完。如果对窗口内的数值进行计算,首先计算它的熵值,熵是信息论的概念(下图中的E),它描述了一个数组的随机性,熵越大其随机性越大。在图中,每一个滑动窗口都有固定的熵值,包含了1024字节,标记为(Bi,Ewi),最后滑动得到100x1024的字节熵对。

      在这里插入图片描述
      统计最后滑动得到100x1024的字节熵对个数,得到如下图所示的二维直方图结果,横坐标是熵值最小值到最大值的范围,纵坐标是一个字节转换成10进制的范围0-256,最终得到字节熵对分布的范围,再将16x16维的二维数组转换成1x256维的特征向量。

      在这里插入图片描述

    • PE头IAT特征:hashDLL文件名与函数名为[0-255)范围
      第二种特征是PE头IAT特征。它的计算工程是将PE头的IAT表里面的文件名和函数名hash到0到255范围,如果某个文件出现某个函数,就将该位置为1,当然每位对应表示的函数是固定的,最终得到256数组。

    • 可打印字符:统计ASCII码的个数特征
      可打印字符和字节熵对比较相似,这里推荐大家阅读原文。

    • PE元信息:将PE信息抽取出来组成256维数组,例如编译时间戳
      PE元信息是将PE信息的数值型信息抽取出来,组成256维数组,每一个数组的位置表示了一个固定的信息种类,再信息种类将对应的信息填入到元素的位置,比如编译时间戳。

    总共有上述四种特征,然后进行拼接得到4*256=1024维的数组,这个数组就代表一个样本的特征向量。假设有10000个样本,就有对应10000个特征向量。

    在这里插入图片描述

    得到特征向量之后,就开始进行模型的训练和测试,一般机器学习任务事先都有一个数据集,并且会分为训练数据集和测试数据集,按照4比1或9比1的比例进行随机划分。训练会将数据集和标签对输入得到恶意和非恶意的结果,再输入测试集得到最终结果。

    在这里插入图片描述

    下面是衡量机器学习模型的性能指标,首先是一幅混淆矩阵的图表,真实类别中1代表恶意样本,0代表非恶意样本,预测类别也包括1和0,然后结果分为:

    • TP:本身是恶意样本,并且预测识别为恶意样本
    • FP:本身是恶意样本,然而预测识别为非恶意样本,这是误分类的情况
    • FN:本身是非恶意样本,然而预测识别为恶意样本,这是误分类的情况
    • TN:本身是非恶意样本,并且预测识别为非恶意样本

    然后是Accuracy(准确率)、Precision(查准率)、Recall(查全率)、F1等评价指标。

    在这里插入图片描述

    通常Accuracy是一个评价恶意代码分类的重要指标,但本文选择的是AUC指标,为什么呢?
    假设我们模型的效果非常差,它会将所有本测试样本标记为恶意样本,这样我有两个数据集,一个样本包括100个数据(99个恶意样本、1个非恶意样本),另一个样本包括50个数据(50个恶意样本、50个非恶意样本),如果我单纯的计算ACC,第一个样本的结构是0.99,显然不符合客观的描述,不能用来评价性能高低的,并且这种情况是很容易产生的。所以论文中广泛采用AUC指标。

    在这里插入图片描述

    AUC指标包括TPRate和FPRate,然后得到一个点,并计算曲线以下所包围的面积即为AUC指标。其中,TPRate表示分类器识别出正样本数量占所有正样本数量的比值,FPRate表示负样本数量站所有负样本数量的比值。举个例子,我们撒网打鱼,一网下去,网中好鱼的数量占池子中所有好鱼的数量就是TPRate,而FPRate表示一网下去,坏鱼的数量占整个池子中所有坏鱼的数量比例,当然FPRate越小越好。最好的结果就是TPRate为1,而FPRate为0,此时全部分类预测正确。

    在这里插入图片描述

    该论文测试了六种特征集合,其计算的TPR和AUC值如下所示。

    在这里插入图片描述



    3.经典的图片特征举例

    下面介绍另一种比较新兴经典的方法,就是图片特征。但一些安全界的人士会认为这种特征不太好,但其方法还是比较新颖的。

    它的基本方法是按照每8位一个像素点将恶意软件的二进制文件转换为灰度图片,图片通常分为R、G、B通道,每个8位像素点表示2^8,最终每隔8位生成一个像素点从而转换为如下图所示的灰度图片。图片分别为Obfuscator_ACY家族、Lolipop家族、ramnit家族恶意软件样例,这些样例由微软kaggle比赛公布的数据生成。

    这是因为对于某些恶意样本作者来说,他只是使用方法简单的修改特征码,从而每个家族的图片比较相似,最终得到了较好的结果。

    在这里插入图片描述



    4.动态特征设计举例

    接下来分享一个动态特征的例子,该篇文章发表在2016年,文章的会议一般,但比较有代表性。

    • Kolosnjaji B,Zarras A,Webster G,et al. Deep learning for classification of malware system call sequences[C] // Australasian Joint Conference on Artificial Intelligence. Springer,Cham,2016:137-149.

    下图展示了该方法的整体流程图。PE文件进入后,直接进入Cuckoo沙箱中,它是一个开源沙箱,在学术论文中提取动态特征比较通用;接着进行进行预处理操作,将文本转换成向量表示的形式,比如提取了200个动态特征,可以使用200维向量表示,每个数组的位置表示对应API,再将所得到的序列输入卷积神经网络LSTM进行分类,最终得到家族分类的结构。

    • Cuckoo沙箱
    • LSTM

    在这里插入图片描述

    在这里插入图片描述

    下图展示了实验的结构,其指标是高于单纯的神经网络和卷积网络的效果更好,这是一篇比较基础的文章。

    在这里插入图片描述



    5.深度学习静态检测举例

    下面再看一个深度学习静态检测的文章。

    • Coull S E,Gardner C. Activation Analysis of Byte-Based Deep Neural Network for Malware Classification[C] // 2019 IEEE Security and Privacy Workshops(SPW). IEEE,2019:21-27.

    这篇文章是火眼公司的两名员工发布的,所使用的也是静态检测特征,其流程如下所示。

    • 首先,原始的字节码特征直接输入一个Byte Embedding层(词嵌入),对单个元素进行向量化处理,将字节码中的每个字节表示成一个固定长度的向量,从而更好地将字节标记在一个空间维度中。词嵌入技术广泛应用于自然语言处理领域,比如“女人”和“女王”关系比较紧密,这篇文章的目的也是想要在恶意代码中达到类似的效果。
    • 然后将矩阵输入到卷积和池化层中,比如存在一个100K字节的二进制文件,得到100102410矩阵输入卷积神经网络中,最后通过全连接层完成恶意和非恶意的分类任务。

    在这里插入图片描述

    Fireeye使用了三个数据集进行训练和测试,其训练的模型分类效果结果如下表所示,博客Small、Baseline、Baseline+Dropout模型,其网络结构是一样的,其中Small表示使用小的数据集,Baseline表示使用大的数据集,Dropout表示对训练好的神经网络中随机丢弃一些神经元,从而抑制过拟合现象,也是比较常用的深度学习技术。

    在这里插入图片描述

    这篇文章的重点是对深度学习的解释性,就是解释深度学习是否能学习到恶意软件的本质特性。下图展示了不同特征对于分类结果的影响,横坐标是Offset偏移,通常用Offset记录字节,从0到右边也对应文件大小,前面可能就是PE头,中间有各种段。

    它的横纵坐标分别表示了某些特征对于恶意性分类比较重要,还是非恶意性比较重要。如果它的校验和(CheckSum)是0,就对恶意性分类比较重要,这表示深度学习并没有学习到恶意软件为什么是恶意的,只是通过统计学去发现恶意软件和非恶意软件差别最大部分,以此进行数据建模。

    深度学习进行恶意软件检测的问题:没有学习到恶意和非恶意特征,而是学习到区别的统计差异,而这种差异如果被黑客利用是可以被规避的。

    在这里插入图片描述



    6.优缺点

    静态特征

    • 优点
      特征提取速度快
      特征种类丰富,可以组合多种特征向量
    • 缺点
      易受加壳、加密、混淆干扰
      无法防范无文件攻击,难以反映恶意软件行为的恶意性

    动态特征

    • 优点
      提供恶意软件的动作,调用API
      规避一些静态的混淆对抗方法
    • 缺点
      反虚拟化,延时触发等技术的对抗
      测试时间较长,单个样本2-3分钟(Cuckoo)

    最后给出推荐资料:



    7.静态分析和动态分析对比

    下面简单总结静态分析和动态分析与深度学习结合的知识,该部分内容源自文章:深度学习在恶意代码检测 - mbgxbz,在此感谢作者,觉得非常棒,故引用至此!谢谢~

    恶意代码的检测本质上是一个分类问题,即把待检测样本区分成恶意或合法的程序。基于机器学习算法的恶意代码检测技术步骤大致可归结为如下范式:

    • 采集大量的恶意代码样本以及正常的程序样本作为训练样本;
    • 对训练样本进行预处理,提取特征;
    • 进一步选取用于训练的数据特征;
    • 选择合适的机器学习算法训练分类模型;
    • 通过训练后的分类模型对未知样本进行检测。

    深度学习作为机器学习的一个分支,由于其可以实现自动化的特征提取,近些年来在处理较大数据量的应用场景,如计算机视觉、语音识别、自然语言处理时可以取得优于传统机器学习算法的效果。随着深度学习在图像处理等领域取得巨大的成功,许多人将深度学习的方法应用到恶意软件检测上来并取得了很好的成果。实际上就是用深度神经网络代替上面步骤中的人为的进一步特征提取和传统机器学习算法。根据步骤中对训练样本进行预处理的方式,可以将检测分为静态分析与动态分析:

    • 静态分析不运行待检测代码,而是通过直接对程序(如反汇编后的代码)进行统计分析得到数据特征
    • 动态分析则在虚拟机或沙箱中执行程序,获取程序执行过程中所产生的数据(如行为特征、网络特征),进行检测和判断。

    (1) 静态分析
    一般来说,在绝大部分情形下我们无法得到恶意程序的源代码。因此,常用的静态特征包括程序的二进制文件、从使用IDA Pro等工具进行反汇编得到的汇编代码中提取的汇编指令、函数调用等信息,另外基于字符串和基于API调用序列的特征也是比较常见的。文献[i]提出一种对PE文件的恶意程序检测方法,提取PE文件四个类型的特征:字节频率、二元字符频率、PE Import Table以及PE元数据特征,采用包含两个隐藏层的DNN作为分类模型,但是为了提取长度固定的输入数据,他们丢弃了PE文件中的大部分信息。文献[ii]使用CNN作为分类器,通过API调用序列来检测恶意软件,其准确率达到99.4%,远高于传统的机器学习算法。然而,当恶意代码存在混淆或加壳等情形时,对所选取的静态特征具有较大的影响,因此静态分析技术本身具有一定的局限性。

    (2) 动态分析
    利用虚拟机或沙箱执行待测程序,监控并收集程序运行时显现的行为特征,并根据这些较为高级的特征数据实现恶意代码的分类。一般来讲,行为特征主要包括以下几个方面:文件的操作行为;注册表键值的操作行为;动态链接库的加载行为;进程访问的操作行为;系统服务行为;网络访问请求;API调用。文献[iii]通过API调用序列记录进程行为,使用RNN提取特征向量,随后将其转化为特征图像使用CNN进行进一步的特征提取,提取其可能包含的局部特征并进行分类。文献[iv]提出了一个基于动态分析的2层架构的恶意软件检测系统:第1层是RNN,用于学习API事件的特征表示;第2层是逻辑回归分类器,对RNN学习的特征进行分类,然而这种方法的误报率较高。文献[v]提出了用LSTM和GRU代替传统RNN进行特征的提取,并提出了使用CNN的字符级别的检测方案。文献[vi]提出在恶意软件运行的初期对其进行恶意行为的预测,他们使用RNN进行PE文件检测,根据恶意代码前4秒的运行行为,RNN对恶意软件的预测准确率是91%,随着观察的运行时间的增长,RNN的预测准确率也随之提高。可以看到,相对于静态分析,动态分析的过程更加复杂耗时,相对而言采用了较高层次的特征,因此可解释性也较差。


    在网络攻击趋于精细化、恶意代码日新月异的今天,基于深度学习算法的恶意代码检测中越来越受到学术界和众多安全厂商的关注。但这种检测技术在现实应用中还有很多尚未解决的问题。例如上面提到的静态分析与动态分析存在的不足,现在发展的主流方向是将静态、动态分析技术进行结合,使用相同样本的不同层面的特征相对独立地训练多个分类器,然后进行集成,以弥补彼此的不足之处。

    除此之外,深度学习算法的可解释性也是制约其发展的一个问题,当前的分类模型一般情况下作为黑盒被加以使用,其结果无法为安全人员进一步分析溯源提供指导。我们常说攻防是息息相关的,螺旋上升的状态。既然存在基于深度学习的恶意代码检测技术,那么自然也有基于深度学习的或者是针对深度学习的恶意代码检测绕过技术,这也是近年来研究的热点问题,那么如何提高模型的稳健性,防止这些定制化的干扰项对我们的深度学习算法产生不利的影响,对抗生成网络的提出或许可以给出答案。



    三.机器学习算法在工业界的应用

    首先普及一个概念——NGAV。NGAV(Next-Gen AntiVirus)是下一代反病毒软件简称,它是一些厂商提出来的新的病毒检测概念,旨在用新技术弥补传统恶意软件检测的短板。

    • 多家杀毒引擎厂商将机器学习视作NGAV的重要技术,包括McAfee[11], Vmware[9], CrowdStrike[10], Avast[6]
    • 越来越多的厂商开始关注机器学习技术,并发表相关的研究(卡巴斯基[7],火眼[8]),火眼还是用机器学习技术对APT进行分析(组织相似度溯源)

    越来越多的安全厂商将机器学习视为反病毒软件的一个关键技术,但需要注意,NGAV并不是一个清晰的定义,你没法去界定一个反病毒软件是上一代产品还是下一代产品。衡量反病毒软件的性能只有对恶意软件的检测率、计算消耗、误报率等,我们只是从现状分析得到越来越多安全领域结合了机器学习。

    作为安全从业人员或科研人员,机器学习技术也是我们必须要关注的一个技术。

    在这里插入图片描述

    机器学习算法需要解决的问题如下:

    • 算力问题
      机器学习和深度学习算法需要大量的算力,如果我们在本地部署还需要GPU的支持,这样就带来了一个硬件配置问题,所以如何减小模型的size及提升模型的检测能力是一个关键性的问题。

    • 大规模的特征数据
      特征对于分类训练非常关键,如何抽取这些数据特征呢?

    • 训练的模型是可解释的
      这个问题可以说是机器学习算法和深度学习算法在反病毒软件应用中最关键的一个问题,病毒的对抗是黑客与安全从业人员的对抗的前线,如果我们训练的模型是不可解释的,那么一旦被黑客发现某些规则存在的弱点,他们就可以针对这些弱点设计免杀方法,从而绕过造成重大安全隐患。另一方面,如果机器学习算法是不可解释黑盒的,用户他也是不可接受的,难以起到保护重要。

    • 误报需要维持极度的低水平
      误报是反病毒软件用户体验的一个重要指标,传统的特征码技术、主动防御技术都具有误报低的特性,而机器学习是一个预测技术,会存在一些误报,如何避免这些误报并且提高检测的查全率也是重要的问题。

    • 算法需要根据恶意软件作者的变化快速适应新的检测特征
      这也是关键性问题,在机器学习模型应用中,恶意软件是不断变化的,而机器学习算法部署到本地中,它的参数是不变的,所以在长时间的恶意演化中其模型或参数不再适用,其检测结果会有影响。目前,云沙箱、在线更新病毒库特征是一些解决方法。

    最后作者总结下机器学习算法的优势,具体如下:
    (1) 传统方法

    • 优点:速度快,消耗计算资源少
      只需要将特征码提取出来,上传至云端进行检测;相对于机器学习大量的矩阵计算,其计算资源消耗少。
    • 缺点:容易绕过,对于未知恶意软件检出率低
      使用加壳、加密、混淆容易绕过,对于未知软件不知道其特征码,只能通过启发式方法、主动防御济宁检测,相对于机器学习检测率要低。

    (2) 机器学习方法

    • 优点:能够建立专家难以发现的规则与特征
      发现的规则和特征很可能是统计学特征,而不是恶意和非恶意的特征,所以这些特征很容易被黑客进行规避,这既是优点也是缺点,虽然有缺陷,但也能发现恶意样本的关联和行为。
    • 缺点:资源消耗大,面临漂移问题,需要不断更新参数


    四.总结

    写到这里,这篇文章就介绍完毕,希望对您有所帮助,最后进行简单的总结:

    • 机器学习方法与传统方法不是取代与被取代的关系,而是相互补充,好的防御系统往往是多种技术方法的组合。
    • 机器学习的检测方法研究还不充分,安全领域的专有瓶颈与人工智能研究的共有瓶颈均存在、
    • 机器学习算法本身也面对一些攻击方法的威胁,比如对应抗本。

    对抗样本指的是一个经过微小调整就可以让机器学习算法输出错误结果的输入样本。在图像识别中,可以理解为原来被一个卷积神经网络(CNN)分类为一个类(比如“熊猫”)的图片,经过非常细微甚至人眼无法察觉的改动后,突然被误分成另一个类(比如“长臂猿”)。再比如无人驾驶的模型如果被攻击,Stop标志可能被汽车识别为直行、转弯。

    在这里插入图片描述
    在这里插入图片描述

    学安全一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,感谢师傅、师兄师弟、师姐师妹们的教导,深知自己很菜,得努力前行。

    在这里插入图片描述

    《珈国情》
    明月千里两相思,
    清风缕缕寄离愁。
    燕归珞珈花已谢,
    情满景逸映深秋。
    最感恩的永远是家人的支持,知道为啥而来,知道要做啥,知道努力才能回去。
    夜已深,虽然笨,但还得奋斗。

    欢迎大家讨论,是否觉得这系列文章帮助到您!任何建议都可以评论告知读者,共勉。

    (By:Eastmount 2020-07-24 星期六 夜于东西湖 http://blog.csdn.net/eastmount/ )



    参考文献:

    • [1] Saxe J, Berlin K. Deep neural network based malware detection using two dimensional binary program features[C]//2015 10th International Conference on Malicious and Unwanted Software (MALWARE). IEEE, 2015: 11-20.

    • [2] https://www.kaggle.com/c/malware-classification

    • [3] https://www.fireeye.com/blog/threat-research/2018/12/what-are-deep-neural-networks-learning-about-malware.html

    • [4]Kolosnjaji B, Zarras A, Webster G, et al. Deep learning for classification of malware system call sequences[C]//Australasian Joint Conference on Artificial Intelligence. Springer, Cham, 2016: 137-149.

    • [5] Wüchner T, Cisłak A, Ochoa M, et al. Leveraging compression-based graph mining for behavior-based malware detection[J]. IEEE Transactions on Dependable and Secure Computing, 2017, 16(1): 99-112.

    • [6]https://www.avast.com/technology/malware-detection-and-blocking

    • [7] https://media.kaspersky.com/en/enterprise-security/Kaspersky-Lab-Whitepaper-Machine-Learning.pdf

    • [8] https://www.fireeye.com/blog/threat-research/2019/03/clustering-and-associating-attacker-activity-at-scale.html

    • [9] https://www.carbonblack.com/resources/definitions/what-is-next-generation-antivirus/

    • [10] https://www.crowdstrike.com/epp-101/next-generation-antivirus-ngav/

    • [11] https://www.mcafee.com/enterprise/en-us/security-awareness/endpoint/what-is-next-gen-endpoint-protection.html

    • [i] Saxe, J., & Berlin, K. (2015, October). Deep neural network-based malware detection using two-dimensional binary program features. In 2015 10th International Conference on Malicious and Unwanted Software (MALWARE) (pp. 11-20). IEEE.

    • [ii] Nix, R., & Zhang, J. (2017, May). Classification of Android apps and malware using deep neural networks. In 2017 International joint conference on neural networks (IJCNN) (pp. 1871-1878). IEEE.

    • [iii] Tobiyama, S., Yamaguchi, Y., Shimada, H., Ikuse, T., & Yagi, T. (2016, June). Malware detection with deep neural network using process behavior. In 2016 IEEE 40th Annual Computer Software and Applications Conference (COMPSAC) (Vol. 2, pp. 577-582). IEEE.

    • [iv] Pascanu, R., Stokes, J. W., Sanossian, H., Marinescu, M., & Thomas, A. (2015, April). Malware classification with recurrent networks. In 2015 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (pp. 1916-1920). IEEE.

    • [v] Athiwaratkun, B., & Stokes, J. W. (2017, March). Malware classification with LSTM and GRU language models and a character-level CNN. In 2017 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (pp. 2482-2486). IEEE.

    • [vi] Athiwaratkun, B., & Stokes, J. W. (2017, March). Malware classification with LSTM and GRU language models and a character-level CNN. In 2017 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (pp. 2482-2486). IEEE.

    展开全文
  • 完整全面的java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行...
    完整全面的
    java
    资源库(包括构建、操作、代码分析、编译器、
    数据库
    、社区等等)构建 
    

    这里搜集了用来构建应用程序的工具。

    • Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了一种过程化的方式进行配置,所以维护起来相当困难。
    • Gradle:Gradle采用增量构建。Gradle通过Groovy编程而不是传统的xml声明进行配置。Gradle可以很好地配合Maven进行依赖管理,并且把Ant脚本当作头等公民。
    字节码操作

    编程操作Java字节码的函数库。

    • ASM:通用底层字节码操作及分析。
    • Javassist:尝试简化字节码编辑。
    • Byte Buddy:使用“流式API”进一步简化字节码生成。
    代码分析

    软件度量和质量评估工具。

    • Checkstyle:对编程规范和标准进行静态分析。
    • FindBugs:通过字节码静态分析找出潜在Bug。
    • PMD:对源代码中不良编程习惯进行分析。
    • SonarQube:通过插件集成其它分析组件,提供评估最终结果报告。
    • Safe.ijiami:应用代码安全,一键检测漏洞,并最终提供分析报告,包括解决方案,强大的漏洞检测工具。
    编译器

    创建分析器、解释器和编译器的框架。

    • ANTLR:功能完备的自顶向下分析复杂框架。
    • JavaCC:相对ANTLR更具体,上手略为简单。支持语法语法超前预测(syntactic lookahead)。
    持续集成

    支持持续集成、测试和应用发布的工具。

    • Bamboo:Atlassian的持续集成(CI)解决方案,包含很多其它产品。
    • CircleCI:提供托管服务,可免费试用。
    • Codeship:提供托管服务,提供有限免费计划。
    • Go:ThoughtWork开源持续集成解决方案。
    • Jenkins:提供基于服务器的部署服务。
    • TeamCity:JetBrain持续集成方案,提供免费版。
    • Travis:提供托管服务,常用于开源项目。
    数据库

    简化数据库交互的工具、库。

    • Flyway:使用Java API轻松完成数据库迁移。
    • H2:小型SQL数据库,以内存操作著称。
    • JDBI:便捷的JDBC抽象。
    • jOOQ:基于SQL schema生成类型安全代码。
    • PResto:针对大数据的分布式SQL查询引擎。
    • Querydsl:针对Java的类型安全统一查询。
    日期和时间

    处理日期和时间的函数库。

    • Joda-Time:Java 8出现之前,它是日期、时间处理的标准函数库。
    • Time4J:Java高级日期、时间函数库。
    依赖 注入

    帮助代码实现控制反转模式的函数库。

    • Dagger :编译期的注入框架,没有使用反射,主要用于Android开发。
    • Guice:轻量级注入框架,功能强大可与Dagger媲美。
    开发库

    从基础层次上改进开发流程。

    • aspectJ:面向切面编程扩展,与程序无缝连接。
    • Auto:源代码生成器集合。
    • DCEVM:通过修改JVM,在运行时可无限次重定义已加载的类。OpenJDK 7、8已提供支持,详情可查看这个分支(fork)。
    • JRebel:商用软件,无需重新部署可即时重新加载代码及配置。
    • Lombok:代码生成器,旨在减少Java冗余代码。
    • RxJava:使用JVM中可观察序列,创建异步、基于事件应用程序的函数库。
    • Spring Loaded:另一个JVM类重载代理。
    • vert.x:JVM多语言事件驱动应用框架。
    分布式应用

    用来开发分布式、具有容错性应用程序的函数库和框架。

    • Akka:构建并发、分布式和具有容错功能的事件驱动应用程序所需的工具包和运行时。
    • Apache Storm:分布式实时计算系统。
    • Apache ZooKeeper:为大型分布式系统,使用分布式配置、同步和命名注册提供协调服务。
    • Hazelcast:分布式、高可扩展性内存网格。
    • Hystrix:为分布式系统提供延迟和容错处理。
    • JGroups:一组提供可靠消息传输的工具包,可用来创建集群。集群中的节点可互相发送消息。
    • Quasar:为JVM提供轻量级线程和Actor。
    发布

    使用本机格式分发Java应用程序的工具。

    • Bintray:对二进制发布进行版本控制,可与Maven或Gradle配合使用。
    • IzPack:为跨平台部署建立授权工具。
    • Launch4j:将JAR包装为小巧的Windows可执行文件。
    • packr:将程序JAR、资源和JVM打包成Windows、linux和Mac OS X的本机文件。
    文档处理

    用来处理Office格式文档的函数库。

    • Apache POI:支持OOXML (XLSX、DOCX、PPTX)以及 OLE2 (XLS, DOC or PPT)格式的文档。
    • jOpenDocument:处理OpenDocument格式文档。
    游戏 开发

    游戏开发框架。

    • jMonkeyEngine:支持现代3D开发的游戏引擎。
    • libGDX:全面的跨平台高级开发框架。
    • LWJGL:抽象了OpenGL、CL、AL等函数库的健壮框架。
    • ijiami.cn:游戏开发全方位的加密安全解决方案,针对游戏app面临的一系列安全问题,提前加入安全解决措施,防患于未然。
    GUI

    用来创建现代图形用户界面的函数库。

    • JavaFX:Swing的继承者。
    • Scene Builder:JavaFX虚拟布局工具。
    高性能

    与高性能计算有关的资源,包括集合以及很多具体功能的函数库。

    • Disruptor:线程间消息函数库。
    • fastutil:快速紧凑的Java类型安全集合。
    • GS Collections:受Smalltalk启发的集合框架。
    • hftc:Hash set和hash map。
    • HPPC:基本类型集合。
    • Javolution:针对实时嵌入式系统的函数库。
    • Trove:基本类型集合。
    IDE

    视图简化开发的集成开发环境。

    • Eclipse:后台做了很多工作,以其丰富插件著称。
    • IntelliJ IDEA:支持很多JVM语言,为Android开发提供了很多不错的选项。其商业版本主要面向企业用户。
    • NetBeans:集成了很多Java SE和Java EE特性,包括数据库访问、服务器、HTML5以及AngularJS。
    图像处理

    用来帮助创建、评估或操作图形的函数库。

    • Picasso:Android下载图像和图像缓存函数库。
    • ZXing:多种格式的一维、二维条形码处理函数库。
    JSON

    简化JSON处理的函数库。

    • Gson:将Java对象序列化为JSON及反向操作。使用时提供了很好的性能。
    • Jackson:与GSON类似,但如果需要频繁初始化Jackson库会带来性能问题。
    JVM和JDK

    目前的JVM、JDK实现。

    • JDK 9:JDK 9早期访问版本。
    • OpenJDK:开源实现。
    日志

    记录应用程序的日志函数库。

    • Apache Log4j 2:对之前版本进行了完全重写。现在的版本具备一个强大的插件和配置架构。
    • kibana:对日志进行分析并进行可视化。
    • Logback:Log4j原班人马作品。被证明是一个强健的日志函数库,通过Groovy提供了很多有意思的配置选项。
    • logstash:日志文件管理工具。
    • SLF4J:日志抽象层,需要与某个具体日志框架配合使用。
    机器学习

    提供具体统计算法的工具。其算法可从数据中学习。

    • Apache Hadoop:对商用硬件集群上大规模数据存储和处理的开源软件框架。
    • Apache Mahout:专注协同过滤、聚类和分类的可扩展算法。
    • Apache Spark:开源数据分析集群计算框架。
    • h2o:用作大数据统计的分析引擎。
    • Weka:用作数据挖掘的算法集合,包括从预处理到可视化的各个层次。
    消息

    在客户端之间进行消息传递,确保协议独立性的工具。

    • Apache ActiveMQ:实现JMS的开源消息代理(broker),可将同步通讯转为异步通讯。
    • Apache Kafka:高吞吐量分布式消息系统。
    • JBoss HornetQ:清晰、准确、模块化且方便嵌入的消息工具。
    • JeroMQ:ZeroMQ的纯Java实现。
    其它

    其它资源。

    • Design Patterns:实现并解释了最常见的设计模式。
    • Jimfs:内存文件系统。
    • Lanterna:类似curses的简单console文本GUI函数库。
    • LightAdmin:可插入式CRUD UI函数库,可用于快速应用开发。
    • Metrics:创建自己的软件度量或者为支持框架添加度量信息,通过JMX或HTTP进行发布或者发送到数据库。
    • OpenRefine:用来处理混乱数据的工具,包括清理、转换、使用Web Service进行扩展并将其关联到数据库。
    • RoboVM:Java编写原生iOS应用。
    • jingpin:代码编写的应用全面的竞品分析,用数据诠释应用的市场竞争性,包括下载量、评论、推广信息、版本更新等具体信息。
    自然语言处理

    用来专门处理文本的函数库。

    • Apache OpenNL:处理类似分词等常见任务的工具。
    • CoreNLP:斯坦佛的CoreNLP提供了一组基础工具,可以处理类似标签、实体名识别和情感分析这样的任务。
    • LingPipe:一组可以处理各种任务的工具集,支持POS标签、情感分析等。
    • Mallet:统计学自然语言处理、文档分类、聚类、主题建模等。
    网络

    网络编程函数库。

    • Netty:构建高性能网络应用程序开发框架。
    • OkHttp :一个Android和Java应用的HTTP+SPDY客户端。
    ORM

    处理对象持久化的API。

    • EclipseLink:支持许多持久化标准,JPA、JAXB、JCA和SDO。
    • Hibernate:广泛使用、强健的持久化框架。Hibernate的技术社区非常活跃。
    • Ebean:支持快速数据访问和编码的ORM框架。
    PDF

    用来帮助创建PDF文件的资源。

    • Apache FOP:从XSL-FO创建PDF。
    • Apache PDFBox:用来创建和操作PDF的工具集。
    • DynamicReports:JasperReports的精简版。
    • iText:一个易于使用的PDF函数库,用来编程创建PDF文件。注意,用于商业用途时需要许可证。
    • JasperReports:一个复杂的报表引擎。
    REST框架

    用来创建RESTful 服务的框架。

    • Dropwizard:偏向于自己使用的Web框架。用来构建Web应用程序,使用了Jetty、Jackson、Jersey和Metrics。
    • Jersey:JAX-RS参考实现。
    • RESTEasy:经过JAX-RS规范完全认证的可移植实现。
    • Retrofit:一个Java类型安全的REST客户端。
    • Spark:受到Sinatra启发的Java REST框架。
    • Swagger:Swagger是一个规范且完整的框架,提供描述、生产、消费和可视化RESTful Web Service。
    科学

    用于科学计算和分析的函数库。

    • SCaVis:用于科学计算、数据分析和数据可视化环境。
    搜索

    文档索引引擎,用于搜索和分析。

    • Apache Solr :一个完全的企业搜索引擎。为高吞吐量通信进行了优化。
    • Elasticsearch:一个分布式、支持多租户(multitenant)全文本搜索引擎。提供了RESTful Web接口和无schema的JSON文档。
    安全

    用于处理安全、认证、授权或会话管理的函数库。

    • Apache Shiro:执行认证、授权、加密和会话管理。
    • Cryptomator:在云上进行客户端跨平台透明加密。
    • Keycloak:为浏览器应用和RESTful Web Service集成SSO和IDM。目前还处于beta版本,但是看起来非常有前途。
    • PicketLink:PicketLink是一个针对Java应用进行安全和身份认证管理的大型项目(Umbrella Project)。
    • Spring Security:专注认证、授权和多维度攻击防护框架。
    • ijiami.cn:专业的移动应用安全智能服务,通过安全的加密解决方案,保证app开发者等的利益,有最全面最安全的加密服务。
    序列化

    用来高效处理序列化的函数库。

    • FlatBuffers:序列化函数库,高效利用内存,无需解包和解析即可高效访问序列化数据。
    • Kryo:快速和高效的对象图形序列化框架。
    • MessagePack:一种高效的二进制序列化格式。
    服务器

    用来部署应用程序的服务器。

    • Apache Tomcat:针对Servlet和jsp的应用服务器,健壮性好且适用性强。
    • Apache TomEE:Tomcat加Java EE。
    • GlassFish:Java EE开源参考实现,由Oracle资助开发。
    • Jetty:轻量级、小巧的应用服务器,通常会嵌入到项目中。
    • WildFly:之前被称作JBoss,由Red Hat开发。支持很多Java EE功能。
    模版引擎

    模板中表达式进行替换的工具。

    • Apache Velocity:提供HTML页面模板、email模板和通用开源代码生成器模板。
    • FreeMarker:通用模板引擎,不需要任何重量级或自己使用的依赖关系。
    • Handlebars.java:使用Java编写的模板引擎,逻辑简单,支持语义扩展(semantic Mustache)。
    • JavaServer Pages:通用网站模板,支持自定义标签库。
    • Thymeleaf:旨在替换JSP,支持XML文件。
    测试

    测试内容从对象到接口,涵盖性能测试和基准测试工具。

    • Apache JMeter:功能性测试和性能评测。
    • Arquillian:集成测试和功能行测试平台,集成Java EE容器。
    • AssertJ:支持流式断言提高测试的可读性。
    • JMH:JVM微基准测试工具。
    • JUnit:通用测试框架。
    • Mockito:在自动化单元测试中创建测试对象,为TDD或BDD提供支持。
    • Selenium:为Web应用程序提供可移植软件测试框架。
    • Selenide:为Selenium提供精准的周边API,用来编写稳定且可读的UI测试。
    • TestNG :测试框架。
    • VisualVM:提供可视化方式查看运行中的应用程序信息。
    工具类

    通用工具类函数库。

    • Apache Commons:提供各种用途的函数,比如配置、验证、集合、文件上传或XML处理等。
    • Guava:集合、缓存、支持基本类型、并发函数库、通用注解、字符串处理、I/O等。
    • javatuples:正如名字表示的那样,提供tuple支持。尽管目前tuple的概念还有留有争议。
    网络爬虫

    用于分析网站内容的函数库。

    • Apache Nutch :可用于生产环境的高度可扩展、可伸缩的网络爬虫。
    • Crawler4j:简单的轻量级爬虫。
    • JSoup :刮取、解析、操作和清理HTML。
    Web框架

    用于处理Web应用程序不同层次间通讯的框架。

    • Apache Tapestry:基于组件的框架,使用Java创建动态、强健的、高度可扩展的Web应用程序。
    • Apache Wicket:基于组件的Web应用框架,与Tapestry类似带有状态显示GUI。
    • Google Web Toolkit:一组Web开发工具集,包含在客户端将Java代码转为Javascript的编译器、XML解析器、RCP API、JUnit集成、国际化支持和GUI控件。
    • Grails:Groovy框架,旨在提供一个高效开发环境,使用约定而非配置、没有XML并支持混入(mixin)。
    • Play: 使用约定而非配置,支持代码热加载并在浏览器中显示错误。
    • PrimeFaces:JSF框架,提供免费版和带技术支持的商业版。包含一些前端组件。
    • Spring Boot:微框架,简化了Spring新程序的开发过程。
    • Spring:旨在简化Java EE的开发过程,提供依赖注入相关组件并支持面向切面编程。
    • Vaadin:基于GWT构建的事件驱动框架。使用服务端架构,客户端使用Ajax
    • Ninja:Java全栈Web开发框架。非常稳固、快速和高效。
    • Ratpack:一组Java开发函数库,用于构建快速、高效、可扩展且测试完备的HTTP应用程序。
    资源 社区

    活跃的讨论区。

    • r/java:Java社区的Subreddit。
    • stackoverflow:问答平台。
    有影响的书籍

    具有广泛影响且值得阅读的Java经典书籍。

    • Effective Java (2nd Edition)
    • Java Concurrency in Practice | Java并发编程实战
    • Thinking in Java | 中文版
    播客

    可以一边编程一边听的东西。

    • The Java Posse
    Twitter

    值得关注的帐号。

    • Adam Bien:自由职业者、作家、JavaONE明星演讲者、顾问、Java Champion。
    • Antonio Goncalves:Java Champion、JUG Leader、Devoxx France、Java EE 6/7、JCP、作家。
    • Arun Gupta:Java Champion、JavaONE明星演讲者、JUG Leader、Devoxx4Kids成员、Red Hatter。
    • Bruno Borges:Oracle产品经理、Java Jock。
    • Ed Burns:Oracle技术团队顾问。
    • Eugen Paraschiv:Spring安全课程作者。
    • James Weaver:Java、JavaFX、IoT开发者、作者和演讲者。
    • Java EE:Java EE Twitter官方账号。
    • Java Magazine:Java杂志官方账号。
    • Java.net:Java.net官方账号。
    • Java:Java Twitter官方账号。
    • Javin Paul:知名Java博客作者。
    • Lukas Eder:Data Geekery(jOOQ)创始人兼CEO。
    • Mario Fusco:RedHatter、JUG协调、活跃讲师和作者。
    • Mark Reinhold:Oracle首席架构师、Java平台开发组。
    • Martijn Verburg:London JUG co-leader、演讲者、作家、Java Champion等。
    • OpenJDK:OpenJDK官方账号。
    • Reza Rahman:Java EE、GlassFish、WebLogic传道者、作家、演讲者、开源黑客。
    • Simon Maple:Java Champion、virtualJUG创始人、LJC leader、RebelLabs作者。
    • Stephen Colebourne: Java Champion、演讲者。
    • Tim Boudreau:作家、NetBeans大牛。
    • Trisha Gee:Java Champion、演讲者。
    网站

    值得阅读的网站。

    • Google Java Style
    • InfoQ
    • Java Code Geeks
    • Java.net
    • Javalobby
    • JavaWorld
    • RebelLabs
    • The Java Specialist’ Newsletter
    • TheServerSide.com
    • Thoughts On Java
    • ImportNew(ImportNew 专注 Java 技术)
    • ijiami.cn
    展开全文
  • 我国高等学校研究生教育专业设置按“学科门类”、“学科大类(一级学科)”、“专业”(二级学科)三个层次来设置。学科门类:学科门类是对具有一定关联学科的归类,是授予学位的学科类别。根据国务院学位委员会、教育部...

    考研的童鞋都关注了研考君。

    99da49223f6088d908e8c1683ae16569.png

    我国高等学校研究生教育专业设置按“学科门类”、“学科大类(一级学科)”、“专业”(二级学科)三个层次来设置。

    学科门类学科门类是对具有一定关联学科的归类,是授予学位的学科类别。根据国务院学位委员会、教育部印发的《学位授予和人才培养学科目录设置与管理办法》(学位〔2009〕10号)的规定,学科门类由国务院学位委员会和教育部共同制定,是国家进行学位授权审核与学科管理、学位授予单位开展学位授予与人才培养工作的基本依据。

    2011年3月,国务院学位委员会和教育部颁布修订的《学位授予和人才培养学科目录(2011年)》,规定我国分为哲学、经济学、法学、教育学、文学、历史学、理学、工学、农学、医学、军事学、管理学、艺术13个学科门类

    一级学科:根据科学研究对象、范式、知识体系和人才培养的需要划分的学科分类体系,是具有共同理论基础或研究领域相对一致的学科集合。一级学科原则上按学科属性进行设置。根据国务院学位委员会、教育部印发的《学位授予和人才培养学科目录设置与管理办法》(学位〔2009〕10号)的规定,一级学科目录由国务院学位委员会和教育部共同制定,是国家进行学位授权审核与学科管理、学位授予单位开展学位授予与人才培养工作的基本依据。2011年3月,国务院学位委员会和教育部颁布修订的《学位授予和人才培养学科目录(2011年)》设置了110个一级学科

    2018年4月,国务院学位委员会和教育部颁布《学位授予和人才培养学科目录(2018年4月更新)》设置了111个一级学科,2018年颁布的目录与2011年颁布的目录相比,新增工学,1个一级学科:

    网络空间安全(0839)

    540fe26d3f5f3f878851a86aa94590e4.png

    二级学科 :根据科学研究对象、知识体系和人才培养的需要,在一级学科内进一步划分的若干种既相关又相对独立的学科、专业,是组成一级学科的基本单元。根据国务院学位委员会、教育部印发的《学位授予和人才培养学科目录设置与管理办法》(学位〔2009〕10号)的规定,二级学科原则上由学位授予单位依据国务院学位委员会、教育部发布的学科目录,在一级学科学位授权权限内自主设置与调整。教育部有关职能部门在对现有二级学科的招生、学位授予和毕业生就业等情况进行统计分析的基础上,将已有一定数量学位授予单位设置的、社会广泛认同的、且有较大培养规模的二级学科编制成二级学科目录。二级学科目录每5年编制一次,供学位授予单位实施人才培养时参考。

    专业代码:考研专业前面的代码是专业代码,方便计算机和考生识别以及研究生招生管理。

    专业代码前2位是学科门类,即:

    01哲学、02经济学、03法学、04教育学、05文学、06历史学、07理学、08工学、09农学、10医学、11军事学、12管理学、13艺术学;

    专业代码前4位是一级学科,如:1202指工商管理;

    二级学科用六位码表示,如:120201指会计学专业;

    此外,专业代码还可以区分学硕、专硕,凡第3位数字为5的专业就是专硕,如120201会计学是学硕,125300会计是专硕。

    2dabc2ebe15e45e5b07f873df00ad6a4.png

    你必须知道的考研常识:

    b9b838124aa4435c5f0840ce6a3fe2e5.png

    (一)考研分哪些阶段

    以2021考研为例:

    1、准备阶段:2020年3月中旬前,搜集考研资料,确定考研目标院校和专业。

    2、基础阶段:2020年3月中旬-2020年6月,第一轮复习,注重基础,重点复习英语和数学、专业课。政治可以在马原这门学科多积累。

    3、强化阶段:2020年7月-2020年8月,这个阶段为暑期,由于具备了基础阶段的积累,对问题、知识点的认知己有一定的基础。数学、英语、专业课进行第2轮的复习。政治第一轮也要全方位开始。

    4、提升阶段:2020年9月-2020年10月,该阶段在整个考研过程中是一个知识、技能提高和深化的阶段,也是最直接为冲刺服务的阶段。另外,招生简章、考研大纲都出来了,也要格外关注。

    5、冲刺阶段:2020年11月-2020年12月,第三轮复习,做真题模拟题,现场确认一般在11月。

    6、临考阶段:2020年12月中旬,考前一周,下载打印准考证。

    7、复试备考阶段:2021年1月-2月,备考复试。

    8、复试调剂阶段:2021年3月-2021年5月,进行复试或调剂。

    9、录取阶段:2021年6月-2021年9月,政审、领取通知书等。

    b9b838124aa4435c5f0840ce6a3fe2e5.png

    (二)考研初试介绍

    1、初试时间

    全国硕士研究生统一招生考试(简称"考研")初试日期是由国家教育部统一规定的,2012考研-2014考研的初试时间为1月的第一个周末;2015考研-2017考研的初试时间为12月的最后一个周末;2021考研的初试时间预计为12月的倒数第二个周末。

    一般来说,若无重大原因,考研初试时间不会发生太大的变化,具体时间公布后,也会第一时间告诉大家。

    2、考试科目

    一般共四门:两门公共课、两门业务课。

    两门公共课为:政治、英语一或英语二;

    业务课一为:数学或专业基础;

    业务课二(分为13大类):哲学、经济学、法学、教育学、文学、历史学、理学、工学、农学、医学、军事学、管理学、艺术学等。

    法硕、西医综合、中医综合、教育学、历史学、心理学、计算机、农学等属于统考专业课,其他非统考专业课都是各院校自主命题。

    3、考试时间

    第一天上午8:30-11:30:思想政治理论、管理类联考综合能力;

    第一天下午14:00-17:00:外国语;

    第二天上午8:30-11:30:业务课一;

    第二天下午14:00-17:00:业务课二。

    考试科目超过3个小时的安排在第三天。

    4、考研科目分数设置

    总分500分(政治:100分;英语:100分;业务课一:150分;业务课二:150分)

    此外,会计硕士(MPAcc)、图书情报硕士、工商管理硕士(MBA)、公共管理硕士(MPA)、旅游管理硕士、工程管理硕士和审计硕士只考两门,即:英语二;管理类联考综合能力。总分是300分,包括英语二100分,管综200分。

    5、公共课试卷结构

    △ 政治:

    马原;毛中特;史纲;思修法基;当代。

    △ 英语:

    英语一:完形;阅读A节;阅读B节(即新题型);翻译;小作文;大作文。

    英语二:完形;阅读A节;阅读B节(即新题型);翻译;小作文;大作文。

    △ 数学:

    理工类专业一般考数一、数二,经济类专业一般考数三。

    数一:高数、线代、概率统计;

    数二:高数、线代、不考概率统计;

    数三:高数、线代、概率统计。

    6、考试成绩公布时间

    一般是每年2、3月份,但是不固定,具体时间还要看省教育考试院的通知。

    b9b838124aa4435c5f0840ce6a3fe2e5.png

    (三)一些相关的名词解释

    1、学术型硕士

    以培养教学和科研人才为主,授予学位的类型主要是学术型学位。学术型学位按招生学科门类分为哲学、经济学、法学、教育学、文学、历史学、理学、工学、农学、军事学、医学、管理学、艺术学13大类。

    2、专业学位硕士

    具有职业背景的学位,培养特定职业高层次专门人才。中国经批准设置的专业硕士己达15类,专业硕士教育的学习方式比较灵活,主要分为非全日制和全日制学习两类。

    3、同等学力考生

    报考硕士研究生同等学力者是指未获得国家承认的本科学历,但是业务水平达到了本科毕业生水平的生源,这类没有国家教育部承认的本科毕业证书的考生,均属同等学力考生。

    4、非全日制研究生

    指在从事其他职业或者社会实践的同时,采取多种方式和灵活时间安排进行非脱产学习的研究生。2016年11月30日前录取的研究生按原有规定执行;2016年12月1日后录取的研究生从培养方式上按全日制和非全日制形式区分。

    5、非定向研究生

    在录取时不确定未来的工作单位,在校期间享受国家规定的奖学金和其他生活待遇。毕业时应服从国家就业指导,在国家规定的服务范围内进行安排或实行双向选择。

    6、定向培养研究生

    在招生时即通过合同形式明确其毕业后工作单位的研究生,其学习期间的培养费用按规定标准由国家向培养单位提供。

    7、统考

    统考也就是全国研究生入学统一考试。分为公共课统考和专业课统考。公共课统考包括政治、英语、数学。专业课统考有以下专业:法硕、西医综合、中医综合、教育学、历史学、心理学、计算机、农学。

    8、联考

    联考也就是全国联考,是由招收该专业硕士的多所高校联合招收,统一命题,一般有管理类联考、法律硕士联考等。

    9、高校自设专业是什么?

    2011年《关于做好授予博士、硕士学位和培养研究生的二级学科自主设置的通知》(以下简称《通知》)表明,各高校有权利自主设置1997年公布的《授予博士、硕士学位和培养研究生的学科、专业目录》的二级学科目录自主设置目录内二级学科。

    所谓高校自设专业,即高校在教育部规定的一级学科下自主设置的二级学科,同时教育部规定,高校自设专业在专业代码上表示为“Z”,例如,中央财经大学自设学科“金融服务法”专业,代码为“0301Z1”。

    b9b838124aa4435c5f0840ce6a3fe2e5.png

    (四)英语几和数学几的区别

    1、完全适用英语一的专业

    所有学术硕士全部适用(十三大门类,110个一级学科)

    8类(法律硕士含法学专业与非法学专业)

    专业硕士适用:临床医学(1051),口腔医学(1052),公共卫生(1053),护理(1054),法律硕士(非法学专业)(035101),法律硕士(法学专业)(035102),汉语国际教育(0453),建筑学(0851),城市规划(0853)

    2、完全适用英语二的专业

    7类专业硕士适用:工商管理(1251),公共管理(1252),会计(1253),旅游管理(1254),图书情报(1255),工程管理(1256),审计(0257)

    3、不适用英语一或英语二的专业

    学术硕士中的外国语专业及专业硕士中的翻译硕士(0551),初试外国语科目具体参照相关规定执行,不使用英语一或英语二试卷

    4、数一考什么内容?

    ①高等数学:函数、极限、连续、一元函数微积分学、向量代数与空间解析几何、多元函数的微积分学、无穷级数、常微分方程

    ②线性代数:行列式、矩阵、向量、线性方程组、矩阵的特征值和特征向量、二次型

    ③概率论与数理统计:随机事件和概率、随机变量及其概率分布、二维随机变量及其概率分布、随机变量的数字特征、大数定律和中心极限定理、数理统计的基本概念、参数估计、假设检验

    5、哪些专业考数一?

    ①工学门类的力学、机械工程、光学工程、仪器科学与技术、冶金工程、动力工程及工程热物理、电气工程、电子科学与技术、信息与通信工程、控制科学与工程、计算机科学与技术、土木工程、水利工程、测绘科学与技术、交通运输工程、船舶与海洋工程、航空宇航科学与技术、兵器科学与技术、核科学与技术、生物医学工程等一级学科中所有的二级学科、专业

    ②管理学门类中的管理科学与工程一级学科中所有的二级学科、专业

    6、数二考什么内容?

    ①高等数学:函数、极限、连续、一元函数微积分学、常微分方程

    ②线性代数:行列式、矩阵、向量、线性方程组、矩阵的特征值和特征向量

    7、哪些专业考数学二?

    工学门类的纺织科学与工程、轻工技术与工程、农业工程、林业工程、食品科学与工程等一级学科中所有的二级学科、专业

    8、数学三考什么内容?

    ①微积分:函数、极限、连续、一元函数微积分学、多元函数微积分学、无穷级数、常微分方程与差分方程

    ②线性代数:行列式、矩阵、向量、线性方程组、矩阵的特征值和特征向量、二次型

    ③概率论与数理统计:随机事件和概率、随机变量及其概率分布、随机变量的联合概率分布、随机变量的数字特征、大数定律和中心极限定理、数理统计的基本概念、参数估计、假设检验

    9、哪些专业考数学三?

    ①经济学门类的理论经济学一级学科中所有的二级学科、专业

    ②经济门类的应用经济学一级学科中的二级学科、专业:统计学、数量经济学、国民经济学、区域经济学、财政学(含税收学)、金融学(含保险学)、产业经济学、国际贸易学、劳动经济学、国防经济

    ③管理学门类的工商管理一级学科中的二级学科、专业:企业管理(含财务管理、市场营销、人力资源管理)、技术经济及管理、会计学、旅游管理

    ④管理学门类的农林经济管理一级学科中所有的二级学科、专业

    b9b838124aa4435c5f0840ce6a3fe2e5.png

    (五)学硕和专硕的区别

    1、培养方向不同

    学术型硕士教育以培养教学和科研人才为主,授予学术型学位。

    专业型硕士以培养市场紧缺的应用型人才为主,是为克服学术型硕士的不足新增的一种硕士。

    2、招生条件不同

    学术型硕士报考者无需有一定年限的工作经历。

    工商管理、公共管理、工程管理、旅游管理、工程硕士中的项目管理、教育硕士中的教育管理、体育硕士中的竞赛组织专业学位硕士研究生对工作年限有一定要求。

    3、学制不同

    学硕的学习年限一般为3年;专硕的学习年限一般为2年。

    4、学习费用不同

    学硕学费一般为8000元/年;专硕学费一般高于8000元/年,不同专业有所不同,但学费普遍高于学硕。

    5、读博方式不同

    学硕可以通过自己的导师直接读博,也就是我们所说的直博。专硕基本不能硕博连读或直博,想读博必须考博。

    b9b838124aa4435c5f0840ce6a3fe2e5.png

    (六)考研英语与四六级的联系

    毋庸置疑,考研英语与大学英语四六级肯定是有很大差别的。但是同为英语考试,四六级和考研英语必然有些地方是相通的,一起复习能够一起进步。

    1、词汇要求

    考研词汇要求5500+的词汇,而六级的要求也是差不多的(四级的要求少了1000左右)。而从大纲的要求来看,六级词汇和考研词汇考察的基本上差不多。

    2、考查英语运用能力

    不论复习四六级还是考研英语,基础是相当关键的,比如在作文考试中,考查的就是你的语言表达能力,语句是否通顺,衔接是否顺畅,这和英语的基础功底是分不开的。不论复习考研英语还是四六级,在日常生活中都要注重基础的培养。

    3、作文方面

    考研英语的大作文和四六级英语的写作题型,表面上看起来差距非常之大,但是,如果深入研究其本质我们会发现,考研英语作文的图画或图表作文,本质上来讲,还是一个话题作文,因为这些图画或图表,往往是反映一种社会现象或社会问题,需要考生从图画或图表中,提炼出图画图表所要表达的观点,再进行深入讨论。所以,除了第一段的图画或图表描述与四六级考试的作文有一定差别,后面的段落内容与四六级考试的作文并没有本质上的区别。

    4、做题方法

    无论是考研英语还是四六级考试,带着选项去做题都不失为一种好办法。一般来讲,两种考试都是接照文章的顺序安排问题,定位准确后就可以在短时间内找到答案。

    b9b838124aa4435c5f0840ce6a3fe2e5.png

    (七)考研英语与四六级的区别

    1、考查目的的区别

    ①考研面向的是报考研究生考试的同学,而四六级是面对所有的大学生,因此前者的选拔目的更加突出,考查形式也更为灵活,而四六级则更注重基础。

    ②考研英语和四六级是两种不同类型的考试,前者由教育部考试中心出题,后者由大学英语四六级考试委员会出题,出题的风格略有区别。

    2、题型的区别

    ①考研英语没有昕力,这对于大多数习惯了应试的考生们无疑是一个好事。大部分的院校只有在复试的时候才会涉及听力和口语的考查,因此初试的时候掌握答题技巧更为重要。

    ②此外,考研英语阅读理解B部分即阅读理解新题型是考研独有的题型,该题型主要考查考生对连贯性、一致性、逻辑性等语篇、语段整体性特征及文章结构的理解,这对考生的综合阅读能力提出了更高的要求。

    3、词汇考查难度上的区别

    考研英语在词汇上主要考查熟词新义,有些中学词汇的新用法都能考到,考研会考一些常见词汇的非常见释义;四六级主要考查生词的第一意义或常用意义,只要你背了大纲的词汇表,基本就没问题。

    4、阅读理解难度的区别

    ①相比四六级考试的阅读文章和阅读题,考研阅读文章选材更加广泛,文章不论从长度、词汇、句子、还是逻辑等各个角度来说难度都远远大于四六级,同时命题也更加具有多变性和迷惑性。这些都对考生的实战能力提出了更高的要求,特别要对阅读理解题目的考点和命题原则知根知底。

    ②考研英语试题选项多陷阱,考生要有很强的分析能力和抗干扰的能力;四六级试题选顶的迷惑性不是很强,只要具备了相应的阅读能力,很快就能看出哪个是正确答案,哪个是干扰顶。

    ③一般来说,四六级阅读每篇花大约10-15分钟就能够完成,而考研阅读每篇则需要15-20分钟。

    b9b838124aa4435c5f0840ce6a3fe2e5.png

    (八)专科生考研常见问题

    1、以同等学力报考是什么意思?

    专科毕业两年及以上(截至录取当年9月1日)就拥有与大学本科毕业生同等的学习能力,简称同等学力。

    2、招生单位对专科生有什么要求?

    除了必须满足专科毕业满两年(截至录取当年9月1日),部分学校还对英语四级证书、本科阶段的课程成绩、学术成果等有要求,具体可以到目标院校的研究生招生网查看招生简章和专业目录,了解清楚目标院校的具体要求。 

    3、专科毕业后报考时间的计算方法

    比如一位大专学生2016年7月毕业,那么截至2018年9月1日,他/她是毕业满两年的。所以,这位考生是可以在2017年10月报考,在2017年12月参加2018考研的初试。

    4、什么是应届和非应届自考生?

    有些学校接受10月现场确认时还没领到毕业证的自考生,但如果你复试时领到毕业证了,就按应届本科的身份进行考试。如果复试时你还没有领到毕业证,那招生单位可以自主确定是否加试专业课。

    5、自考本科算不算同等学力?

    不算。按教育部规定,自考本科跟普通统招本科报考资格是一样的。不过一般比较好的学校都对这方面有严格的要求,这就需要你具体地了解你所要报考学校的招生要求。

    6、专科生考研是否有额外的考试科目?

    是的,部分院校复试时会加试该校该专业的核心课程,但初试是同其他类别的考生考一样的科目。

    7、英语基础差怎么办?

    很多专科考生会担忧自己的英语水平,因为没过四六级,而觉得考研英语更是不可逾越的高峰。其实并非如此,考研英语同四六级有着不同的难度侧重点,考研英语没有听力,分值集中在阅读,这是可以通过多做多读多背获得高分的。

    8、同等学力考研可以调剂吗?

    可以的。虽然很多学校不接收同等学力的考生调剂,但也有一些学校招收。如果决意读研,可以多主动去联系一下同类学校。

    9、自考的成绩,能否作为本科成绩报考相关院校?

    能。但是需要在复试时提交学业内的成绩单,一定要加盖教务处的公章。未取得本科毕业证的,每年12月份毕业时,全国硕士研究生统考前,可到本地招考办申请"自学考试在读考生成绩单"。

    b9b838124aa4435c5f0840ce6a3fe2e5.png

    (九)享受初试加分政策的考生

    1、享受初试加分政策的考生类别

    ①大学生志愿服务西部计划;

    ②三支一扶计划;

    ③农村义务教育阶段学校教师特设岗位计划;

    ④赴外汉语教师志愿者等项目服务期满考核合格的考生;

    ⑤普通高等学校应届毕业生应征入伍服义务兵役退役后的考生(3年内参加全国硕士研究生招生考试,初试总分加10分,同等学力下优先录取);

    ⑥选聘高校毕业生到村任职,项目服务期满、考核称职以上的考生(3年内参加全国硕士研究生招生考试,初试总分加10分,同等学力下优先录取,其中报考人文社科类专业研究生的,初试总分加15分)。

    2、考研照顾的专业

    照顾专业(一级学科):

    力学[0801]、冶金工程[0806]、动力工程及工程热物理[0807]、水利工程[0815]、地质资源与地质工程[0818]、矿业工程[0819]、船舶与海洋工程[0824]、航空宇航科学与技术[0825]、兵器科学与技术[0826]、核科学与技术[0827]、农业工程[0828];’

    以上照顾专业自主划线的,与工科类统一划线没有任何关系。也就是说,如果小伙伴们报考了照顾专业的研究生,只要达到了照顾专业的国家线就可以。但是这种情况也要分学校来具体看待。如果小伙伴报考的是34所自主划线院校的照顾专业,这34所院校也会根据照顾专业划定单独的分数线,同学们只要超过了这个分数线就可以参加复试了。而具体的划线也是因学校而异的。

    3、哪种类型的考生可以享受少数民族政策优惠?

    (1)报考地处二、三区招生单位,并且毕业后在国务院公布的民族区域自治地方就业的少数民族普通高校应届本科毕业考生。

    (2)工作单位在民族区域自治地方范围,为原单位定向或委托培养的少数民族在职人员考生。

    注,以上信息整理自网络,若国家和招生调整,以最新调整为主。

    关注研考君,获取最靠谱的考研信息。

    f0feff639473248b424cf7e312a52058.png

    展开全文
  • 开源代码网站

    万次阅读 2018-01-17 09:29:04
    (1)到sourceforge上查找相关代码; (2)到google code上面查找具体的代码; (3)到apache网站上寻找java的相关代码; (4)直接到开源项目网站上面寻找代码; (5)到csdn等网站下载代码,偶尔会有...
  • 前文分享了传统的恶意代码检测技术,包括恶意代码检测的对象和策略、特征值检测技术、校验和检测技术、启发式扫描技术、虚拟机检测技术和主动防御技术。这篇文章将介绍基于机器学习的恶意代码检测技术,主要参考郑...
  • :用作数据挖掘的算法集合,包括从预处理到可视化的各个层次。 消息 在客户端之间进行消息传递,确保协议独立性的工具。 Apache ActiveMQ :实现JMS的开源消息代理(broker),可将同步通讯转为异步通讯。 Apache ...
  • 前一篇文章普及了基于机器学习的恶意代码检测技术,主要参考郑师兄的视频总结,包括机器学习概述与算法举例、基于机器学习方法的恶意代码检测、机器学习算法在工业界的应用。这篇文章将分享两篇论文,介绍机器学习是...
  • 编写可读性代码的艺术

    千次阅读 2016-07-16 10:30:42
    在更高层次上组织大的代码块以及在功能层次上解决问题的方法。 精选话题 把“易于理解”的思想应用于测试以及大数据结构代码的例子。 如何阅读本书 我们希望本书读起来愉快而又轻松。我们...
  • 字符,字节和编码, ASCII, DBCS,SBCS 与Unicode http://www.regexlab.com/zh/encoding.htm 1. 编码问题的由来,相关概念的理解 1.1 字符与编码的发展 从计算机对多国语言的支持角度看,大致可以分为...
  • 代码轮子

    千次阅读 2019-03-06 14:36:14
    PPRows for Mac- 在Mac上优雅的计算你写了多少行代码。open-source-ios-apps- iOS开源App集合,分:swift与Objective-C--国外人整理。NewsBlur作者独自一个人 Samuel Clay 做出来的一款名为 NewsBlur 的新闻阅读器, ...
  • 项目代码风格要求

    千次阅读 2013-08-23 15:05:06
    作者: Jimmy Zhang 来源: 博客园 发布时间: 2013-06-06 13:37 阅读: 2835 ...代码风格没有正确与否,重要的是整齐划一,这是我拟的一份《项目代码风格要求》,供大家参考。 1. C# 代码风格要求 1.1注释 类型
  • Android开发代码规范

    千次阅读 2014-04-07 21:25:24
    android看法代码规范,能够纠正你在编写代码时候不正规、难读的问题。帮助你成为大神!
  • 代码质量工具总结

    万次阅读 2018-10-13 11:59:02
    代码质量 代码质量检测工具 PMD FindBugs checkstyle SonarLint/SonarQube alibaba coding guiding 仅仅有质量检测工具还不够,还需要代码审查工具,加以人工审查辅助 代码审查工具简介 Review Board ...
  • 比如基于签名特征的恶意代码检测,这种方法收集已知的恶意代码,以一种固定的方式生成特定的签名,维护这样的签名库,当有新的检测任务时,通过在签名库中检索匹配的方法进行检测。暂且不说更新、维护签名库的过程...
  • 本文按照自己的理解从硬件磁盘到文件系统的逐层网上的思路开展,从操作系统的角度详解Linux文件系统层次、文件系统分类、文件系统的存储结构、不同存储介质的区别(RAM、ROM、Flash)、存储节点inode。
  • 华为代码规范文档

    千次阅读 2013-07-12 19:18:50
    代码规范文档                 目录 1 概述............................................................................................................................................
  • 条形扫描技术

    千次阅读 2017-04-26 09:44:24
    就像一个平台扫描仪,它包括一个光源,一个镜头和一个光传感器把光变成电的冲动.此外,几乎所有的条形阅读器包含解码器电路分析条码的形象提供的数据传感器和发送的条码内容的扫描仪的输出端口. 条形的扫描需要...
  • 华为代码风格要求

    千次阅读 2017-03-15 16:58:58
    2-13:在代码的功能、意图层次上进行注释,提供有用、额外的信息。 说明:注释的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,帮助读者理解代码,防止没必要的重复注释信息。 2-14:在程序块...
  • 代码好习惯

    千次阅读 2016-10-28 10:02:31
    代码看一个程序员的笔力 从代码的整洁度上就可以看出一个程序员的实力,规范其实就是让你养成一种良好习惯的标杆,在此面前我们应该顺从。本篇我们以OC为例,统计了一些在编写程序中需要注意的事项,共有20条,...
  • 代码规范

    千次阅读 2015-08-04 10:57:34
    3.6 注释与代码一致............................................................................................................... 14 3.7 注释内容...................................................
  • 编程能力层次模型

    千次阅读 2015-04-02 14:38:26
    前言  程序员的编程技能随着经验的积累,会逐步提高。我认为编程能力可以分为一些层次。... 一个维度是编程技能层次,另一个维度是领域知识层次。 编程技能层次  编程技能层次,指的程序员设计和编写程序的能
  • 代码规范文档

    千次阅读 2015-12-31 19:53:43
    代码规范文档代码规范文档目录 1 概述 5 1.1 编写目的 5 1.2 文档约定 5 1.3 预期的读者和阅读建议 5 1.4 参考文献 5 2 排版要求 5 2.1 程序块缩进 5 2.2 程序块之间空行 5 2.3 长语句和长表达式 6 2.4 ...
  • Win32多线程程序设计--源代码

    热门讨论 2012-04-22 17:09:08
    所属分类:计算机 > 软件与程序设计 > 综合 内容简介  使用线程,你可以产生高效率的服务器,建立Internet服务器扩充软件,获得多CPU系统的好处,建立精巧的COM/OLE对象,并改善程序的反应度。写出这样的软件,...
  • CPU存储器层次结构

    千次阅读 2018-07-18 22:26:32
    3 存储器层次结构 3.1 内容概要 简单的计算机系统模型为CPU执行指令,存储器系统为CPU存放指令和数据。在该简单的计算机系统模型中,存储器系统是一个线性的字节数组,而CPU能够在一个常数时间内访问每个存储器...
  • 普通恶意代码技术分析与检测

    千次阅读 2008-04-03 22:42:00
    1 引言 近些年来,恶意代码依赖一些特殊的Native API函数和内核系统函数进行感染、传播、隐藏的这种趋势愈加明显代码,并大量的使用了多重加密壳、驱动关联壳、变形壳等代码保护机制和多态和变形等新的技术。...
  • 寻找开源代码的方式

    千次阅读 2016-02-29 21:33:34
    我平时看代码主要是C和C++代码为主,Java代码也会偶尔看一下。平时除了自己积累一些代码之外,也会主动去寻找一些代码,比如说, (1)到sourceforge上查找相关代码; (2)到google code上面查找具体的代码; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,290
精华内容 18,116
关键字:

代码的种类包括层次码