我的个天天,被人挖矿minerd 处理

我处理的辛酸之路

  1. top命令查看 , minerd 进程占用cpu接近100%
  2. ps -ef | grep minerd 命令查看,脚本执行位置
  3. kill -9 杀死这个进程,并删除脚本文件(一般在  /opt/minerd)
    如果以上还是不行

在执行以下操作

  1. crontab -l 查看定时任务,有没有可以脚本,大部分情况都有一个定时任务在跑,删除可疑的定时任务
  2. 删除 /usr/local/etc/minerd.conf 配置文件
  3. 我发现还是不行,没有找到好的解决方案,杀死进程, 把 /opt/minerd  文件权限都关了,这下可以了,但是治标不治本,挖矿脚本还在机器里面,一直没找到,
  4. 有好的解决方案,可以邮件我,xiaofangmoon@foxmail.com  , 困扰我好久

java 学习笔记

java 学习笔记

基础知识

  1. 编写Java程序时,应注意以下几点:
    • 大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的。
    • 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
    • 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
    • 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。
    • 主方法入口:所有的Java 程序由public static void main(String []args)方法开始执行。
  2. Java标识符

    Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。关于Java标识符,有以下几点需要注意:

    • 所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始
    • 首字符之后可以是任何字符的组合
    • 关键字不能用作标识符
    • 标识符是大小写敏感的
    • 合法标识符举例:age$salary_value__1_value
    • 非法标识符举例:123abc、-salary
  3. Java修饰符

    像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:

    • 可访问修饰符 : default, public , protected, private
    • 不可访问修饰符 : final, abstract, strictfp
  4. 源文件声明规则 当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则。
    • 一个源文件中只能有一个public类
    • 一个源文件可以有多个非public类
    • 源文件的名称应该和public类的类名保持一致。例如:源文件中public类的类名是Employee,那么源文件应该命名为Employee.java。如果一个类定义在某个包中,那么package语句应该在源文件的首行。
    • 如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。
    • import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明
  5. 内置数据类型

    Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型

    • byte:
      • byte数据类型是8位、有符号的,以二进制补码表示的整数;
      • 最小值是-128(-2^7);
      • 最大值是127(2^7-1);
      • 默认值是0;
      • byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一;
      • 例子:byte a = 100,byte b = -50。
    • short:
      • short数据类型是16位、有符号的以二进制补码表示的整数
      • 最小值是-32768(-2^15);
      • 最大值是32767(2^15 – 1);
      • Short数据类型也可以像byte那样节省空间。一个short变量是int型变量所占空间的二分之一;
      • 默认值是0;
      • 例子:short s = 1000,short r = -20000。
    • int :
      • int数据类型是32位、有符号的以二进制补码表示的整数;
      • 最小值是-2,147,483,648(-2^31);
      • 最大值是2,147,483,647(2^31 – 1);
      • 一般地整型变量默认为int类型;
      • 默认值是0;
      • 例子:int a = 100000, int b = -200000。
    • long:
      • long数据类型是64位、有符号的以二进制补码表示的整数;
      • 最小值是-9,223,372,036,854,775,808(-2^63);
      • 最大值是9,223,372,036,854,775,807(2^63 -1);
      • 这种类型主要使用在需要比较大整数的系统上;
      • 默认值是0L;
      • 例子: long a = 100000L,Long b = -200000L。
    • float:
      • float数据类型是单精度、32位、符合IEEE 754标准的浮点数;
      • float在储存大型浮点数组的时候可节省内存空间;
      • 默认值是0.0f;
      • 浮点数不能用来表示精确的值,如货币;
      • 例子:float f1 = 234.5f。
    • double:
      • double数据类型是双精度、64位、符合IEEE 754标准的浮点数;
      • 浮点数的默认类型为double类型;
      • double类型同样不能表示精确的值,如货币;
      • 默认值是0.0d;
      • 例子:double d1 = 123.4。
    • boolean:
      • boolean数据类型表示一位的信息;
      • 只有两个取值:true和false;
      • 这种类型只作为一种标志来记录true/false情况;
      • 默认值是false;
      • 例子:boolean one = true。
    • char:
      • char类型是一个单一的16位Unicode字符;
      • 最小值是’\u0000’(即为0);
      • 最大值是’\uffff’(即为65,535);
      • char数据类型可以储存任何字符;
      • 例子:char letter = ‘A’。
  6. Java常量 常量在程序运行时,不会被修改的量。 在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:
       final double PI = 3.1415927;

    虽然常量名也可以用小写,但为了便于识别,通常使用大写字母表示常量。

Maven生命周期

Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),这个生命周期可以从两方面来理解,第一,顾名思义,运行Maven的每个步骤都由它来定义的,这种预定义的默认行为使得我们使用Maven变得简单,相比而言,Ant的每个步骤都要你手工去定义。第二,这个模型是一种标准,在不同的项目中,使用Maven的接口是一样的,这样就不用去仔细理解每个项目的构建了,一般情况下,mvn clean install 这样的命令是通用的。我想,一定是吸收了许多项目的经验,Maven才能定义出如此完善的模型。

 

Maven有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,初学者容易将Maven的生命周期看成一个整体,其实不然。这三套生命周期分别是:

  • Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
  • Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
  • Site Lifecycle 生成项目报告,站点,发布站点。

我再次强调一下它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。

 

知道了每套生命周期的大概用途和相互关系以后,来逐个详细看一下每套生命周期,Clean和Site相对比较简单,先解释一下。

 

每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这个的clean是Clean生命周期的一个阶段。有点绕?要知道有Clean生命周期,也有clean阶段。Clean生命周期一共包含了三个阶段:

  • pre-clean  执行一些需要在clean之前完成的工作
  • clean  移除所有上一次构建生成的文件
  • post-clean  执行一些需要在clean之后立刻完成的工作

mvn clean 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,mvn clean 等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。

 

下面看一下Site生命周期的各个阶段:

  • pre-site     执行一些需要在生成站点文档之前完成的工作
  • site    生成项目的站点文档
  • post-site     执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy     将生成的站点文档部署到特定的服务器上

这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。

 

最后,来看一下Maven的最重要的Default生命周期,绝大部分工作都发生在这个生命周期中,这里,我只解释一些比较重要和常用的阶段:

  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources     复制并处理资源文件,至目标目录,准备打包。
  • compile     编译项目的源代码。
  • process-classes
  • generate-test-sources
  • process-test-sources
  • generate-test-resources
  • process-test-resources     复制并处理资源文件,至目标测试目录。
  • test-compile     编译测试源代码。
  • process-test-classes
  • test     使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
  • prepare-package
  • package     接受编译好的代码,打包成可发布的格式,如 JAR 。
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install     将包安装至本地仓库,以让其它项目依赖。
  • deploy     将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

基本上,根据名称我们就能猜出每个阶段的用途,关于其它阶段的解释,请参考http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

MongoDB

NoSQL

NoSQL (NoSQL = not only sql )

关系型数据库遵行的ACID规则

  1. A(Aomicity)原子性
  2. C(Consistency) 一致性
  3. I(Isolation) 独立性
  4. D(Durability) 持久性

分布式系统

分布式系统(distributed system):由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。 因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。 分布式系统可以应用在在不同的平台上如:Pc、工作站、局域网和广域网上等。

分布式的优缺点

  1. 优点
    • 可靠性
    • 可扩展性
    • 资源共享
    • 灵活性
    • 更快的速度
    • 开放系统
    • 更高的性能
  2. 缺点:
    • 故障排除
    • 软件
    • 网络
    • 安全性

RDBMS vs NoSQL

  1. RDBMS
    • 高度组织化结构化数据
    • 结构化查询语言(SQL) (SQL)
    • 数据和关系都存储在单独的表中。
    • 数据操纵语言,数据定义语言
    • 严格的一致性
    • 基础事务
  2. NoSQL
    • 代表着不仅仅是SQL
    • 没有声明性查询语言
    • 没有预定义的模式
    • 键 – 值对存储,列存储,文档存储,图形数据库
    • 最终一致性,而非ACID属性
    • 非结构化和不可预知的数据
    • CAP定理
    • 高性能,高可用性和可伸缩性

CAP定理(CAP theorem)

在计算机科学中, CAP定理(CAP theorem), 又被称作布鲁尔定理(Brewer’s theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  • 一致性(Consistency) (所有节点在同一时间具有相同的数据)
  • 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
  • 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作) CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:
  • CA – 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
  • CP – 满足一致性,分区容忍必的系统,通常性能不是特别高。
  • AP – 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

NoSQL的优点/缺点

  1. 优点:
    • 高可扩展性
    • 分布式计算
    • 低成本
    • 架构的灵活性,半结构化数据
    • 没有复杂的关系
  2. 缺点:
    • 没有标准化
    • 有限的查询功能(到目前为止)
    • 最终一致是不直观的程序

BASE

BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定义。CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。 BASE是NoSQL数据库通常对可用性及一致性的弱要求原则:

  1. Basically Availble –基本可用
  2. Soft-state –软状态/柔性事务。 “Soft state” 可以理解为”无连接”的, 而 “Hard state” 是”面向连接”的
  3. Eventual Consistency –最终一致性 最终一致性, 也是是 ACID 的最终目的。

who use

Google/Facebook/Mozilla/Adobe/Foursquare/LinkedIn/Digg/McGraw-Hill Education/Vermont Public Radio

用git搭建一个小的远程仓库

建立远程仓库

  1. git init 初始化
  2. git remote add origin ssh://root@ip/~/testgit/.git 建立远程仓库
  3. git push origin master 将本地仓库跟踪到git仓库

远程拉取代码

  1. git clone ssh://root@ip/~/testgit/.git 输入root的密码,也可以用其他有访问权限的用户
  2. 以上就可以拉去远程的代码了,不过不能推送
  3. 若果要推送,需要设置 远程仓库 git config receive.denyCurrentBranch=warn/ignore ,这样就可以远程推送了
发表在 git | 标签为

linux命令行编辑快捷键

ctrl + ? 撤消前一次输入

ctrl + c 另起一行

ctrl + r 输入单词搜索历史命令

ctrl + u 删除光标前面所有字符相当于VIM里d shift+^

ctrl + k 删除光标后面所有字符相当于VIM里d shift+$

删除
ctrl + d 删除光标所在位置上的字符相当于VIM里x或者dl
ctrl + h 删除光标所在位置前的字符相当于VIM里hx或者dh
ctrl + k 删除光标后面所有字符相当于VIM里d shift+$
ctrl + u 删除光标前面所有字符相当于VIM里d shift+^
ctrl + w 删除光标前一个单词相当于VIM里db
ctrl + y 恢复ctrl+u上次执行时删除的字符
ctrl + ? 撤消前一次输入
alt + r 撤消前一次动作
alt + d 删除光标所在位置的后单词

移动
ctrl + a 将光标移动到命令行开头相当于VIM里shift+^
ctrl + e 将光标移动到命令行结尾处相当于VIM里shift+$
ctrl + f 光标向后移动一个字符相当于VIM里l
ctrl + b 光标向前移动一个字符相当于VIM里h
ctrl + 方向键左键 光标移动到前一个单词开头
ctrl + 方向键右键 光标移动到后一个单词结尾
ctrl + x 在上次光标所在字符和当前光标所在字符之间跳转
alt + f 跳到光标所在位置单词尾部

替换
ctrl + t 将光标当前字符与前面一个字符替换
alt + t 交换两个光标当前所处位置单词和光标前一个单词
alt + u 把光标当前位置单词变为大写
alt + l 把光标当前位置单词变为小写
alt + c 把光标当前位置单词头一个字母变为大写
^oldstr^newstr 替换前一次命令中字符串

历史命令编辑
ctrl + p 返回上一次输入命令字符
ctrl + r 输入单词搜索历史命令
alt + p 输入字符查找与字符相接近的历史命令
alt + > 返回上一次执行命令

其它
ctrl + s 锁住终端
ctrl + q 解锁终端
ctrl + l 清屏相当于命令clear
ctrl + c 另起一行
ctrl + i 类似TAB健补全功能
ctrl + o 重复执行命令
alt + 数字键 操作的次数

POP3、SMTP和IMAP

POP3

POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

SMTP

SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。
增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

IMAP

IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。

备注:POP3和IMAP的区别

POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。

IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

同时,IMAPPOP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。此外,IMAP 更好地支持了从多个不同设备中随时访问新邮件。

IMAP及POP3有什么区别?

总之,IMAP 整体上为用户带来更为便捷和可靠的体验。POP3 更易丢失邮件或多次下载相同的邮件,但IMAP 通过邮件客户端与webmail 之间的双向同步功能很好地避免了这些问题。

composer 版本介绍

包版本

在前面的例子中,我们引入的 monolog 版本指定为 1.0.*。这表示任何从 1.0 开始的开发分支,它将会匹配 1.0.01.0.2 或者 1.0.20

版本约束可以用几个不同的方法来指定。

名称 实例 描述
确切的版本号 1.0.2 你可以指定包的确切版本。
范围 >=1.0 >=1.0,<2.0>=1.0,<1.1|>=1.2 通过使用比较操作符可以指定有效的版本范围。
有效的运算符:>>=<<=!=
你可以定义多个范围,用逗号隔开,这将被视为一个逻辑AND处理。一个管道符号|将作为逻辑OR处理。
AND 的优先级高于 OR。
通配符 1.0.* 你可以使用通配符*来指定一种模式。1.0.*>=1.0,<1.1是等效的。
赋值运算符 ~1.2 这对于遵循语义化版本号的项目非常有用。~1.2相当于>=1.2,<2.0。想要了解更多,请阅读下一小节。

 

下一个重要版本(波浪号运算符)

~ 最好用例子来解释: ~1.2 相当于 >=1.2,<2.0,而 ~1.2.3 相当于 >=1.2.3,<1.3。正如你所看到的这对于遵循 语义化版本号 的项目最有用。一个常见的用法是标记你所依赖的最低版本,像 ~1.2 (允许1.2以上的任何版本,但不包括2.0)。由于理论上直到2.0应该都没有向后兼容性问题,所以效果很好。你还会看到它的另一种用法,使用 ~ 指定最低版本,但允许版本号的最后一位数字上升。

注意: 虽然 2.0-beta.1 严格地说是早于 2.0,但是,根据版本约束条件, 例如 ~1.2 却不会安装这个版本。就像前面所讲的 ~1.2 只意味着 .2 部分可以改变,但是 1. 部分是固定的。