裸泳的猪

沾沾自喜其实最可悲

0%

事务

一般是指要做的或所做的事情。
在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。
事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

阅读全文 »

PMBOK指南笔记

1.引论

1.1《PMBOK®指南》
收录项目管理知识体系中被普遍认可为“良好实践”的那一部分。

  • 所谓普遍认可,是指这些知识和做法在大多数时候适用于大多数项目
  • 所谓良好实践,在项目管理过程中使用这些知识、技能、工具和技术,
    能够达成预期的商业价值和成果,从而提高很多项目成功的可能性

1.1.3 道德与专业行为规范

  • 全球项目管理业界定义的最重要的价值观是:责任、尊重、公正和诚实
阅读全文 »

String(字符串常量)概述

在API中是这样描述:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。
String str = "abc";

相当于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);

以下是一些有关如何使用字符串的更多示例:
System.out.println("abc");
String cde = "cde";
System.out.println("abc" + cde);
String c = "abc".substring(2,3);
String d = cde.substring(1, 2);

类String包括用于检查序列中的单个字符、比较字符串、搜索字符串、提取子字符串以及创建所有字符都转换为大写或小写的字符串副本的方法。 大小写映射基于Character类指定的 Unicode 标准版本。
...
*/
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
...
}

需要注意的是:String是一个不可变对象,可以认为是特殊的常量,因此存在方法区的运行时常量池中,可以被共享使用(享元模式),而不是创建一个新对象,但是这样的做法仅仅适合于通过=符号进行的初始化

由此引申出许多判断各种情况下,string对象是否相等的判断

常见的String == 比较

首先,我们在比较两个string对象之前,需要了解:

  1. 通过构造方法创建(new创建)的String对象,存放在java虚拟机的堆内存,堆内存里存放的是字符串常量的地址,字符串常量存放在方法区的常量池中;
  2. 直接赋值:通过直接赋值所创建的对象直接是方法区中的常量池中的字符串常量。

下面列举一些常见的比较例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   String s1 = "Hello";
String s2 = "Hello";
String s3 = "Hel" + "lo";
String s4 = "Hel" + new String("lo");
String s5 = new String("Hello");
String s6 = s5.intern();
String s7 = "H";
String s8 = "ello";
String s9 = s7 + s8;

System.out.println(s1 == s2); // true 都是方法区常量池
System.out.println(s1.equals(s2)); //true 值都相同
System.out.println(s1.equals(s5)); //true 值都相同
System.out.println(s1 == s3); // true 做+号的时候,会进行优化,自动生成Hello赋值给s3都是方法区常量池
System.out.println(s1 == s4); // false s4最后生成的是一个在堆中的string对象
System.out.println(s1 == s9); // false 用的是动态调用,所以s9返回的是一个新的String对象
System.out.println(s4 == s5); // false s4,s5不同的对象
System.out.println(s1 == s6); // true

分析:

  1. s1 = = s2 很容易可以判断出来。s1 和 s2 都指向了方法区常量池中的Hello。
  2. s1 = = s3 这里要注意一下,因为做+号的时候,会进行优化,自动生成Hello赋值给s3,所以也是true
  3. s1 = = s4 s4是分别用了常量池中的字符串和存放对象的堆中的字符串,做+的时候会进行动态调用,最后生成的仍然是一个String对象存放在堆中。
  4. s1 = = s9 在JAVA9中,因为用的是动态调用,所以返回的是一个新的String对象。所以s9和s4,s5这三者都不是指向同一块内存
  5. s1 = = s6 为啥s1 和 s6地址相等呢? 归功于intern方法,这个方法首先在常量池中查找是否存在一份equal相等的字符串如果有的话就返回该字符串的引用,没有的话就将它加入到字符串常量池中,所以存在于class中的常量池并非固定不变的,可以用intern方法加入新的

String、StringBuffer、StringBuilder。

  • String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象;
  • 而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。
  • StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer线程安全的,而 StringBuilder非线程安全的;
  • 但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。

如何将字符串反转

使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。

1
2
3
4
// StringBuffer reverse
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("abcdefg");
System.out.println(stringBuffer.reverse()); // gfedcba

String 类的常用方法都有那些?

  • indexOf():返回指定字符的索引。
  • charAt():返回指定索引处的字符。
  • replace():字符串替换。
  • trim():去除字符串两端空白。
  • split():分割字符串,返回一个分割后的字符串数组。
  • getBytes():返回字符串的 byte 类型数组。
  • length():返回字符串长度。
  • toLowerCase():将字符串转成小写字母。
  • toUpperCase():将字符串转成大写字符。
  • substring():截取字符串。
  • equals():字符串比较。

Object类 是类层次结构的根类。

Object类是所有类的超类。所有对象(包括数组)都实现这个类的方法。

所以需要了解Object类的所有方法:

1.hashCode()

1
public int hashCode()

返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
不同对象的 hashCode() 的值一般是不相同。但是,同一个对象的hashCode() 值肯定相同。

阅读全文 »

要想知道网络的配置和状态,我们可以使用 ifconfig 或者 ip 命令来查看。

这两个命令功能都差不多,不过它们属于不同的软件包,ifconfig 属于 net-tools 软件包,ip 属于 iproute2 软件包,我的印象中 net-tools 软件包没有人继续维护了,而 iproute2 软件包是有开发者依然在维护,所以更推荐你使用 ip 工具。

1
2
ipconfig eth0
ip -s addr show dev eth0

第一,网口的连接状态标志。其实也就是表示对应的网口是否连接到交换机或路由器等设备,如果 ifconfig 输出中看到有 RUNNING,或者 ip 输出中有 LOWER_UP,则说明物理网路是连通的,如果看不到,则表示网口没有接网线。

第二,MTU 大小。默认值是 1500 字节,其作用主要是限制网络包的大小,如果 IP 层有一个数据报要传,而且数据帧的长度比链路层的 MTU 还大,那么 IP 层就需要进行分片,即把数据报分成干片,这样每一片就都小于 MTU。事实上,每个网络的链路层 MTU 可能会不一样,所以你可能需要调大或者调小 MTU 的数值。

第三,网口的 IP 地址、子网掩码、MAC 地址、网关地址。这些信息必须要配置正确,网络功能才能正常工作。

第四,网路包收发的统计信息。通常有网络收发的字节数、包数、错误数以及丢包情况的信息,如果 TX(发送) 和 RX(接收) 部分中 errors、dropped、overruns、carrier 以及 collisions 等指标不为 0 时,则说明网络发送或者接收出问题了,这些出错统计信息的指标意义如下:

阅读全文 »

 

什么是 TCP ?

Transmission Control Protocol(传输控制协议)

TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。

  • 面向连接:一定是「一对一」才能连接,不能像 UDP 协议 可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;

  • 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;

  • 字节流:消息是「没有边界」的,所以无论我们消息有多大都可以进行传输。并且消息是「有序的」,当「前一个」消息没有收到的时候,即使它先收到了后面的字节已经收到,那么也不能扔给应用层去处理,同时对「重复」的报文会自动丢弃。

什么是 TCP 连接?

TCP连接主要包括三个部分:socket,序列号,窗口大小。

通过TCP连接可以控制流量,和提高可靠性。

  • Socket:由 IP 地址和端口号组成
  • 序列号:用来解决乱序问题等
  • 窗口大小:用来做流量控制

TCP

如何唯一确定一个 TCP 连接呢?

  • 源地址
  • 源端口
  • 目的地址
  • 目的端口
阅读全文 »

所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。
贪心算法的理解: 整个问题的最优解一定由在贪心策略中存在的子问题的最优解得来的。

阅读全文 »

什么是HTTP?

HyperText Transfer Protocol(超文本传输协议),它是一个无状态的工作在应用层的协议.

超文本指的是HTML,css,JavaScript和图片等,HTTP的出现是为了接收和发布HTML页面,也可以用于接收一些音频,视频,文件等内容。

HTTP协议是用于客户端和服务器端之间的通信,用于客户端和服务器端之间的通信有HTTP协议和TCP/IP协议族在内的其他众多的协议。

HTTP的短连接和长连接

在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。可以持久连接,TCP连接默认不关闭,可以被多个请求复用,只有在一段时间内,没有请求,就可以自动关闭。使用长连接的HTTP协议,会在响应头加入这行代码:

1
2
// 默认:
Connection:keep-alive
阅读全文 »