Java 文件操作
Java 文件操作
在平时编写程序的时候,经常会对文件进行操作,比如文件的赋值,重命名,删除等。接下来学习使用 Java 操作文件。
拷贝可以使用 Files 工具类的 copy(Path source,Path target,CopyOption… options) 拷贝文件或者目录。如果目标文件存在,那么赋值将失败,除非我们在 options 中指定了 REPLACE_EXISTING 属性。当该命令复制目录时,如果目录中已经有了文件,目录中的文件将不会被复制。CopyOption 参数支持以下 StandardCopyOption 和 LinkOption 枚举:
REPLACE_EXISTING:即使目标文件已存在,也执行复制。如果目标是符号链接,则复制链接本身(而不是链接的目标)。如果目标是非空目录,则复制将失败并显示 FileAlreadyExistsException 异常。
COPY_ATTRIBUTES:将与文件关联的文件属性复制到目标文件。支持的确切 - 文件属性是文件系统和平台相关的,但 last-modified-time 跨平台支持并复制到目标文件。 NO ...
java 泛型和集合
泛型和集合
泛型即参数化类型,也就是说数据类型变成了一个可变的参数,在不使用泛型的情况下,参数的数据类型都是写死了的,使用泛型之后,可以根据程序的需要进行改变。
定义泛型的规则:只能是引用类型,不能是简单数据类型。泛型参数可以有多个。可以用使用 extends 语句或者 super 语句 如 表示类型的上界,T 只能是 superClass 或其子类, 表示类型的下界,K 只能是 childClass 或其父类。可以是通配符类型,比如常见的 Class<?>。单独使用 ? 可以表示任意类型。也可以结合 extends 和 super 来进行限制。
接下来我们来定义一个泛型类,它有一个成员,成员的类型待定。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647/*使用T代表类型,无论何时都没有比这更具体的类型来区分它。如果有多个类型参数,我们可能使用字母表中T的临近的字母,比如S。*/class Test<T> & ...
Java Throwable 抛出异常
Java 关于抛出异常
异常指不期而至的各种状况,它在程序运行的过程中发生。作为开发者,我们都希望自己写的代码永远都不会出现 bug,然而现实告诉我们并没有这样的情景。如果用户在程序的使用过程中因为一些原因造成他的数据丢失,这个用户就可能不会再使用该程序了。所以,对于程序的错误以及外部环境能够对用户造成的影响,我们应当及时报告并且以适当的方式来处理这个错误。
之所以要处理异常,也是为了增强程序的鲁棒性。
异常都是从 Throwable 类派生出来的,而 Throwable 类是直接从 Object 类继承而来。你可以在 Java SE 官方 API 文档中获取更多关于它们的知识。
异常分类异常通常有四类:
Error:系统内部错误,这类错误由系统进行处理,程序本身无需捕获处理。
Exception:可以处理的异常。
RuntimeException:可以捕获,也可以不捕获的异常。
继承 Exception 的其他类:必须捕获,通常在 API 文档中会说明这些方法抛出哪些异常。
平时主要关注的异常是 Exception 下的异常,而 Exception 异常下又主要分为两大类异 ...
Hadoop 伪分布式配置部署
Hadoop 伪分布式配置部署
在阅读本章节之前,请确定你已经阅读过,Hadoop 单机版部署 并存在环境
Hadoop 伪分布式模式配置
再次提醒 当前环境 必须是 您在阅读 Hadoop 单机版部署 后部署的环境
修改 core-site.xml这里我们需要修改 core-site.xml, 使用下面的命令调用 Vim 编辑器来编辑文件。
123$ cd /home/hadoop/hdfs/etc/hadoop$vim ./core-site.xml
先说一下常用配置项:
fs.defaultFS
fs.defaultFS 是默认的HDFS 路径。 当有多个 HDFS 集群同时工作时,用户在这里指定默认HDFS 集群, 该值来自于 hdfs-site.xml 中的配置。
fs.default.name
fs.default.name 是一个描述集群中 NameNode 节点的 URI(包括协议、主机名称、端口号), 集群里面的每一台机器都需要知道 NameNode 的地址。 DataNo ...
Hadoop 单机安装
Hadoop 单机安装Hadoop 启动模式Hadoop 集群有三种启动模式:
单机模式:默认情况下运行为一个单独机器上的独立 Java 进程,主要用于调试环境
伪分布模式:在单个机器上模拟成分布式多节点环境,每一个 Hadoop 守护进程都作为一个独立的 Java 进程运行
完全分布式模式:真实的生产环境,搭建在完全分布式的集群环境
用户及用户组需要添加用来运行Hadoop 进程的用户组 Hadoop 及用户 Hadoop
注意:没有linux 环境可以使用docker
可以使用下面的命令来查看已经创建好的 hadoop 用户和 uid 与 gid
1$ id hadoop
另外在 /etc/passwd 文件中也记录了用户的信息,使用下面的命令查看:
1$ tail -5 /etc/passwd
添加用户及用户组的步骤如下:
创建用户 Hadoop
1$ sudo adduser hadoop
请按照提示输入 hadoop 用户的密码,例如密码设定为 hadoop 。
将 hadoop 用户添加进 sudo 用户组
1 ...
hadoop-了解什么是hadoop
了解Hadoop
Hadoop 简介
开源
Apache Hadoop 是一款支持数据密集型分布式应用并以 Apache 2.0 许可协议发布的开源软件框架。它支持在商品硬件构建的大型集群上运行的应用程序。
源于 MapReduceHadoop 是根据 Google 公司发表的 MapReduce 和 Google 档案系统的论文自行实作而成。
提供可靠性和数据移动Hadoop 框架透明地为应用提供可靠性和数据移动。它实现了名为 MapReduce 的编程范式:应用程序被分割成许多小部分,而每个部分都能在集群中的任意节点上执行或重新执行。
分布式文件系统此外,Hadoop 还提供了分布式文件系统,用以存储所有计算节点的数据,这为整个集群带来了非常高的带宽。MapReduce 和分布式文件系统的设计,使得整个框架能够自动处理节点故障。它使应用程序与成千上万的独立计算的电脑和 PB 级的数据。
Hadoop 平台现在普遍认为整个 Apache Hadoop “平台” 包括 Hadoop 内核、MapReduce、Hadoop 分布式文件系统(HDFS)以及一些 ...
国外VPS搭建SSR多用户教程[中文一键安装管理]
国外VPS搭建SSR多用户教程[中文一键安装管理]
首先一切的基础都建立在你有一台 [非大陆]的 VPS ,拥有基础服务器知识(例如连接服务器)
如果你想多用户使用,可以使用不同的端口来控制。所以,本文的SSR多用户搭建就是在一个VPS下面分别设置多个SSR账号,相同的IP地址,不同的端口和SSR密码。
本文也适用任何可用的国外VPS搭建SS/SSR,可以搭建SS多用户也可以搭建SSR多用户。
第一步 连接服务器登录服务器,远程连接你的服务器(或者VPS)
第二步 安装管理在命令行内输入下列命令 :(该脚本适用于Centos。其他系统没有测试,如果你的系统非Centos,可以使用Docker 具体使用方法,本文不作任何阐述)
12yum -y install wgetwget -N --no-check-certificate https://raw.githubusercontent.com/CecilWu/SSR-Chinese/master/ssr.sh && chmod +x ...
Scala 类和对象(二)
Scala 类和对象(二)本章知识点概括
类的定义规范
定义类
前提条件检查
添加成员变量
自身引用
辅助构造函数
私有成员变量和方法
定义运算符
标识符
方法重载
隐式类型转换
Rational 类的定义规范首先,我们回忆下有理数的定义:一个有理数(rational)可以表示成分数形式: n/d , 其中 n 和 d 都是整数( d 不可以为 0 ),*n*** 称为分子(numerator),*d*** 为分母(denominator)。和浮点数相比,有理数可以精确表达一个分数,而不会有误差。
因此我们定义的 Rational 类支持上面的有理数的定义。支持有理数的加减乘除,并支持有理数的规范表示,比如 2/10 ,其规范表示为 1/5 。分子和分母的最小公倍数为 1 。
有了有理数定义的实现规范,我们可以开始设计类 Rational 。一个好的起点是考虑用户如何使用这个类,我们已经决定使用 “Immutable” 方式来使用 Rational 对象,我们需要用户在定义 Rational 对象时提供分子和分母。因此我们可以开始定 ...
Scala 类和对象 (一)
Scala 类和对象 (一)类和对象的定义首先介绍Scala的类定义,我们以一个简单的例子开始,创建一个计算整数累计校验和类 ChecksumAccumulator
12345class ChecksumAccumulator { private var sum=0; def add(b:Byte) :Unit = sum+=b def Checksum() : Int = ~ (sum & 0xFF) + 1}
可以看到Scala类定义和Java非常类似,也是以 class 开始,和Java 不同的,Scala的缺省修饰符为 public, 也就是如果不带有访问范围的修饰符 public、protected、private等,Scala将默认定义为 public。 类的方法以 def定义开始,要注意的是Scala的方法的参数都是 val 类型,而不是 var 类型, 因此在函数体内不可以修改参数的值,比如:如果你修改 add 方法如下:
1234def add(b:Byte) :Unit ...
Scala 基本数据类型
Scala 基本数据类型基本数据类型简介如果你是个Java 程序员,你会发现 Java 支持的基本数据类型,Scala都有对应的支持,不过Scala的数据类型都是对象(比如整数),这些基本类型都可以通过隐式自动转换的形式支持比 Java 基本数据类型更多的方法。
隐式自动转换的概念将在后面介绍,简单的说就是可以为基本类型提供扩展,比如如果调用 (-1).abs() , Scala 发现基本类型Int没有提供 abs() 方法,但可以发现系统提供了从 Int 类型转换为 RichInt 的隐式自动转换,而 RichInt 具有 abs() 方法, 那么Scala就自动将 1 转换为 RichInt 类型, 然后调用 RichInt 的 abs 方法。
Scala 的基本数据类型有: Byte、Short、Int、Long 和 char (这些称为整数类型)。 整数类型加上 Float 和 Double 称为数值类型。 此外还有 String 类型,除 String 类型在 java.lang 包中定义,其他的类型都定义在包 scala 中。 比如 Int 的全名为 scala.I ...
开始学习Scala
开始学习Scala
老规矩,请您先自行安装 Scala
开始使用 Scala 的最简单的方式是使用交互式 Scala 解释器,只要输入 Scala 表达式, Scala 解释器会立即解释执行该语句并输出结果。当然你也可以使用如 Scala IDE 或 IntelliJ IDEA 集成开发环境。不过本教程开始还是以这种交互式 Scala 解释器为主。
开始使用 Scala 的最简单的方式是使用交互式 Scala 解释器,只要输入 Scala 表达式, Scala 解释器会立即解释执行该语句并输出结果。当然你也可以使用如 Scala IDE 或 IntelliJ IDEA 集成开发环境。不过本教程开始还是以这种交互式 Scala 解释器为主。
你可以使用 :help 命令列出一些常用的 Scala 解释器命令
退出Scala解释器,输入:
1:quit
使用表达式在 scala > 提示符下,你可以输入任意的Scala表达式,比如输入 1+2 ,解释器显示:
11+2
输入上面的表达式 结果显示包括:
一个由Scala解释器自动生成的变量名或者由你指定的变 ...
Scala 控制语句
Scala 控制语句Scala 的所有控制结构都有返回结果,如果你使用过 Java 或 C#, 就可能了解 Java 提供的三元运算符 ?: ,它的基本功能和 if 一样,都可以返回结果。 Scala在此基础上所有控制结构( while、*try**、if***等) 都可以返回结果。这样做的一个好处是,可以简化代码,如果没有这种特点,程序员常常需要创建一个临时变量用来保存结果
总的来说,Scala提供的基本程序控制结构,”麻雀虽小,五脏俱全”,虽然少,但足够满足其他指令式语言(如 Java,C++)所支持的程序控制功能。而且,由于这些指令都有返回结果,可以使得代码更为精简。
if 表达式Scala 语言的 if 的基本功能和其他语言没有什么不同,它根据条件执行两个不同的分支。比如,使用Java风格编写下面Scala的if语句的一个例子
123456789var age = 25var result = ""if (age > 20){ result = "worker"}e ...
开启Scala编程
开启Scala编程
首先 需要安装 Scala 软件 进入scale 终端
Hello World每次使用开发的时候 必定输出 Hello World
代码:
12345object HelloWorld { def main(args: Array[String]) { println("Hello, world!") }}
如果一行中的代码太长,可以在该行最后以 Shift键+Enter键 进行换行即可。输入上述代码后,显示如下图所示:
如果一行中的代码太长,可以在该行最后以 Shift键+Enter键 进行换行即可。输入上述代码后,显示如下图所示:
这段代码,你可以使用命令行交互式执行:
1HelloWorld.main(null)
参考链接
百度百科 - Scala
Redis 持久化机制
Redis 持久化机制内存和磁盘的区别除了速度差别以外,还有就是内存中的数据会在重启之后消失,持久化的作用就是要将这些数据长久存到磁盘中以支持长久使用。
Redis 是一个支持持久化的内存数据库,Redis 需要经常将内存中的数据同步到磁盘来保证持久化。
Redis 支持两种持久化方式:
snapshotting(快照):将数据存放到文件里,默认方式。
是将内存中的数据以快照的方式写入到二进制文件中,默认文件 dump.rdb,可以通过配置设置自动做快照持久化的方式。可配置 Redis 在 n 秒内如果超过 m 个 key 被修改就自动保存快照。比如:
save 900 1:900 秒内如果超过 1 个 key 被修改,则发起快照保存。
save 300 10:300 秒内如果超过 10 个 key 被修改,则快照保存。
Append-only file(缩写为 aof):将读写操作存放到文件中。
由于快照方式在一定间隔时间做一次,所以如果 Redis 意外 down 掉的话,就会丢失最后一次快照后的所有修改。
aof 比快照方式有更好的持久 ...
Redis 主从复制
Redis 主从复制为了分担服务器压力,会在特定情况下部署多台服务器分别用于缓存的读和写操作,用于写操作的服务器称为主服务器,用于读操作的服务器称为从服务器。
从服务器通过 psync 操作同步主服务器的写操作,并按照一定的时间间隔更新主服务器上新写入的内容。
Redis 主从复制的过程:
Slave 与 Master 建立连接,发送 psync 同步命令。
Master 会启动一个后台进程,将数据库快照保存到文件中,同时 Master 主进程会开始收集新的写命令并缓存。
后台完成保存后,就将此文件发送给 Slave。
Slave 将此文件保存到磁盘上。
Redis 主从复制特点
可以拥有多个 Slave。
多个 Slave 可以连接同一个 Master 外,还可以连接到其它的 Slave。(当 Master 宕机后,相连的 Slave 转变为 Master)。
主从复制不会阻塞 Master,在同步数据时, Master 可以继续处理 Client 请求。
提高了系统的可伸缩性。
从服务器的主要作用是响应客户端的数据请求,比如返回一篇博客信息。
上面说 ...