2020-01-30 22:37:44    29    0    0

Java从8开始,不但引入了Lambda表达式,还引入了一个全新的流式API:Stream API。它位于java.util.stream包中。这个Stream不同于java.io的InputStream和OutputStream,它代表的是任意Java对象的序列,它类似Python中的迭代器。

一. 创建Stream

1.1 Stream.of()

创建Stream最简单的方式是直接用Stream.of()静态方法,传入可变参数即创建了一个能输出确定元素的Stream,虽然这种方式基本上没啥实质性用途,但测试的时候很方便。

  1. import java.util.stream.Stream;
  2. public class Main {
  3. public static void main(String[] args) {
  4. Stream<String> stream = Stream.of("A", "B", "C", "D");
  5. stream.forEach(System.out::println);
  6. }
  7. }


2020-01-29 19:37:04    24    0    0

反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息。


一. 类的加载

1.1 加载的流程

class是由JVM在执行过程中动态加载的。JVM在第一次读取到一种class类型时,将其加载进内存。Java的所有类都是一个叫做Class的类的一个实例,Class类大概如下所示。每加载一种classJVM就为其创建一个Class类型的实例,并关联起来。注意:这里的Class类型是一个名叫Classclass

  1. public final class Class {
  2. private Class() {}
  3. }

注意JVM在执行Java程序的时候,并不是一次性把所有用到的class全部加载到内存,而是第一次需要用到class时才加载。

2020-01-29 01:02:52    19    0    0

一. 定义枚举类

通过enum关键字来定义枚举类,enum定义的类型就是class,只不过它有以下几个特点:

  • 定义的enum类型总是继承自java.lang.Enum,且无法被继承;
  • 只能定义出enum的实例,而无法通过new操作符创建enum的实例;
  • 定义的每个实例都是引用类型的唯一实例;
  • 可以将enum类型用于switch语句。
  1. enum Weekday {
  2. MON(1, "星期一"), TUE(2, "星期二"), WED(3, "星期三"), THU(4, "星期四"), FRI(5, "星期五"), SAT(6, "星期六"), SUN(0, "星期日");
  3. public final int dayValue;
  4. private final String chinese;
  5. private Weekday(int dayValue, String chinese) {
  6. this.dayValue = dayValue;
  7. this.chinese = chinese;
  8. }
  9. @Override
  10. public String toString() {
  11. return this.chinese;
  12. }
  13. }
2020-01-29 00:38:39    18    0    0

一. 数据类型

Java的数据类型分如下两种,引用类型可以赋值为null,表示空,但基本类型不能赋值为null

  • 基本类型:byte,short,int,long,boolean,float,double,char
  • 引用类型:所有classinterface类型


Java核心库为每种基本类型都提供了对应的包装类型:

基本类型对应的引用类型
booleanjava.lang.Boolean
bytejava.lang.Byte
shortjava.lang.Short
intjava.lang.Integer
longjava.lang.Long
floatjava.lang.Float
doublejava.lang.Double
charjava.lang.Character

2020-01-29 00:10:14    23    0    0

一. 字符串原理

  • 概要说明
    Java中,String是一个引用类型,它本身也是一个class,实际上字符串在String内部是通过一个char[]数组表示的,因此,按下面的写法也是可以的String s2 = new String(new char[] {'H', 'e', 'l', 'l', 'o', '!'}); 因为String太常用了,所以Java提供了"..."这种字符串字面量表示方法。Java字符串的一个重要特点就是字符串不可变。这种不可变性是通过内部的private final char[]字段,以及没有任何修改char[]的方法实现的。

  • 早期JDK版本的String
    总是以char[]存储,它的定义如下:

  1. public final class String {
  2. private final char[] value;
  3. private final int offset;
  4. private final int count;
  5. }
2020-01-27 18:42:27    33    0    0

一. 类和实例

  • 一个.java文件只能包含一个public类,但可以包含多个非public类。如果有public类,文件名必须和public类的名字相同。
  • 如果不确定是否需要public,就不声明为public,即尽可能少地暴露对外的字段和方法。
  • 创建新对象时,优先选用静态工厂方法而不是new操作符。
  1. class Person {
  2. public String name;
  3. public int age;
  4. }
  5. Person ming = new Person();
  6. ming.name = "Xiao Ming";
  7. ming.age = 12;
  8. System.out.println(ming.name);


  • 定义为publicclassinterface,可以被当前包,其他包的任何类访问。
2020-01-15 22:35:17    22    0    0

一. 概要

  在 Hadoop 1.0 时代,NameNode 保存了整个 HDFS 的元数据信息,一旦 NameNode 挂掉,整个 HDFS 就无法访问,同时 Hadoop 生态系统中依赖于 HDFS 的各个组件,包括 MapReduce、Hive、Pig 以及 HBase 等也都无法正常工作,并且重新启动 NameNode 和进行数据恢复的过程也会比较耗时。这些问题在给 Hadoop 的使用者带来了极大的困扰。所幸的是,在 Hadoop2.0 中,HDFS NameNode 和 YARN ResourceManger 的单点问题都得到了解决。下面是整体架构图。

2020-01-15 18:18:47    16    0    0

入门hadoop相对于其他技术来说要稍微难一点,因为它的复杂性决定了它的学习曲线,不过在类似CHD这样的工具出现以后给hadoop的维护管理带来了方便,下面是针对初学者来说的一个简单组件描述。

一、NameNode

  • NameNode维护着文件系统树及整棵树内的所有文件和目录,它保存了整个集群文件系统的元数据信息,元数据信息存在于内存中,会不间断地往磁盘上镜像成文件,叫做fsimageNameNode负责文件元数据信息的操作,这些操作日志会存下来,叫做edits日志。NameNode也记录着每个文件中各个块所在的数据节点信息,但是它并不会永久保存块的位置信息,因为这些信息会在启动时,根据DataNode数据节点上报而重建。

  • 元数据
    元数据包括文件名,目录结构,文件创建时间,文件副本数,文件权限,每个文件的block列表等。

  • fsimage文件
    元数据的镜像文件。为了保证fsimage文件的高可用,一般的做法是将dfs.namenode.name.dir设置成逗号分隔的多个目录,且多个目录至少不要在一块磁盘上。

2019-12-31 17:24:54    2    0    0

一. 概述

  Netcat用于从TCP/UDP连接中读取或发送网络数据。catLinux中查看或连接文件的命令,所以netcat本意为从网络上查看文件内容。而Netcat的作者Hobbit为它添加了非常丰富的功能,使它几乎能够完成网络操作中各式各样的操作,所以Netcat在网络安全领域被称作TCP/IP的瑞士军刀(Swiss-army knife forTCP/IP)。

  Netcat稳定版1.10Hobbit19963月发布(开源软件),之后作者没有再对其进行维护,但该工具十多年来依然在被广泛地使用,而且基于Netcat的各种衍生工具也层出不穷,他们在很多方面增强或扩展了Netcat的功能。

2019-12-28 16:16:08    25    0    0

目前所能见到的硬盘接口类型主要有IDE、SATA、SCSI、SAS、FC等等。 IDE是俗称的并口,SATA是俗称的串口,这两种硬盘是个人电脑和低端服务器常见的硬盘。SCSI是”小型计算机系统专用接口”的简称,SCSI硬盘就是采用这种接口的硬盘。SAS就是串口的SCSI接口。一般服务器硬盘采用这两类接口(SAS SCSI),其性能比上述两种硬盘要高,稳定性更强,但是价格高,容量小,噪音大。FC是光纤通道,和SCIS接口一样光纤通道最初也不是为硬盘设计开发的接口技术,是专门为网络系统设计的,但随着存储系统对速度的需求,才逐渐应用到硬盘系统中。SSD也称作电子硬盘或者固态电子盘,是由控制单元和固态存储单元(DRAMFLASH芯片)组成的硬盘。固态硬盘的接口规范和定义、功能及使用方法上与普通硬盘的相同,在产品外形和尺寸上也与普通硬盘一致。新一代的固态硬盘普遍采用SATA-2接口。但其成本较高。

一. IDE

  IDEIntegrated Drive Electronics集成驱动器电子的缩写,它的本意是指把控制器与盘体集成在一起的硬盘驱动器,是一种硬盘的传输接口,它有另一个名称叫做ATA(Advanced Technology Attachment),这两个名词都有厂商在用,指的是相同的东西。