分类 编程 下的文章

常规我们多数使用 ping 命令来检查网络延时, ping 命令是基于ICMP的请求应答报文来测量网络延时情况。ICMP处在网络层协议层, 某些场景下, ICMP 容易被防火墙阻止, 这样场景下 ping 工具就无法使用了。这种场景下, 需要使用TCP/UDP协议来测试三层网络的延时状态。

我们可以使用 tcpping 来进行网络延迟的测量, tcpping 是使用TCP协议的三次握手利用半开连接技术实现.比如想远端的80端口建立连接, 会先发送一个 TCP SYN 包, 如果远端的80端口正常, 将回复 TCP ACK 包, 否则将响应 TCP RST 包。因此 tcpping 可以定时通过 发送 SYN 包, 接收 ACKRST包来计算到远程主机的访问延时(RTT)。

tcptraceroute 软件已经实现了半开连接技术,tcpping依赖该软件来实现网络延迟的测量。

- 阅读剩余部分 -

概述

LinkedListlistDeque接口的双链列表实现。它实现所有可选的列表操作,并允许所有元素(包括null)。

特点

下面你可以找到LinkedList最重要的属性:

  • 索引到列表中的操作将从头到尾遍历列表,以更接近指定索引的操作为准
  • 它不是同步的
  • 它的迭代器和ListIterator迭代器是快速失败的(这意味着在迭代器创建之后,如果列表被修改,将抛出ConcurrentModificationException)
  • 每个元素都是一个节点,它保存对下一个和上一个元素的引用
  • 它保持插入顺序

尽管LinkedList未同步,但我们可以通过调用Collections.SynchronizedList方法检索他的同步版本,如:

List list = Collections.synchronizedList(new LinkedList(...));

- 阅读剩余部分 -

概述

在本文中,我们将研究Java集合框架中的ArrayList类。我们将讨论它的属性、常用用例以及它的优缺点。

ArrayList包含在Java核心库中,因此不需要任何其他库。为了使用它,只需添加以下import语句:

import java.util.ArrayList;

List表示一个有序的值序列,其中某些值可以重复。

ArrayList是构建在数组之上的列表实现之一,它能够在添加/删除元素时动态地增长和收缩。元素的索引可以很容易地从零开始访问。该实现具有以下特性:

  • 随机访问需要O(1)
  • 添加元素需要摊销固定时间O(1)
  • 插入/删除需要O(n)
  • 搜索未排序数组需要O(n),排序数组需要O(log n)

- 阅读剩余部分 -

概述

在本教程中,我们将深入研究Java语言中的一个核心概念——数组。

我们先看看什么是数组,然后再看看如何使用它们;

  • 数组入门
  • 读写数组元素
  • 数组上的循环
  • 将数组转换为其他对象,如ListStreams
  • 数组的排序、搜索和组合

什么是数组

首先,我们了解什么是数组?

根据Java文档,数组是包含固定数量的相同类型的值。数组的元素被索引,这意味着我们可以用数字(索引)访问它们。

我们可以将数组视为单元格的编号列表,每个单元格都是一个包含值的变量。在Java中,编号从0开始。

有基本类型数组和对象类型数组。这意味着我们可以使用intfloatboolean等类型的数组,也可以使用StringObject和自定义类型的数组。

- 阅读剩余部分 -

概述

在本教程中,我们将研究java.util.Arrays,一个实用工具类,我们可以使用Arrays创建、比较、排序、搜索、流和转换数组。

创建

我们来看看创建数组的一些方法:copyOfcopyOfRangefill

copyOf copyOfRange

要使用copyOfRange,我们需要原始数组和要复制的起始索引(包括)和结束索引(排除):

String[] intro = new String[] { "once", "upon", "a", "time" };
String[] abridgement = Arrays.copyOfRange(storyIntro, 0, 3);

assertArrayEquals(new String[] { "once", "upon", "a" }, abridgement);
assertFalse(Arrays.equals(intro, abridgement));

- 阅读剩余部分 -

概述

每个程序都需要一个开始执行的地方,说到Java程序,就是main方法。
我们已经习惯在编写代码时编写main方法,但是没有注意它的细节。在这篇简短的文章中,我们将分析这个方法,并展示其他一些编写方法。

方法签名

最常见的main法模板是:

public static void main(String[] args) { }

- 阅读剩余部分 -

TypeToken

由于类型擦除,您不能在运行时传递泛型类对象——您可以转换它们并假装它们是泛型的,但实际上它们不是。

示例:

ArrayList<String> stringList = Lists.newArrayList();
ArrayList<Integer> intList = Lists.newArrayList();
System.out.println(stringList.getClass().isAssignableFrom(intList.getClass()));
// returns true, even though ArrayList<String> is not assignable from ArrayList<Integer>

Guava提供了TypeToken, 它使用了基于反射的技巧甚至让你在运行时都能够巧妙的操作和查询泛型类型。想象一下TypeToken是创建,操作,查询泛型类型(以及,隐含的类)对象的方法。

- 阅读剩余部分 -

Python MySQLdb 库, 查询结果返回的是tuple, 输出的时候不是很方便, 因为只能通过索引读取内容, 查找了下, 可以通过指定 MySQLdb.cursors.DictCursor 返回 dict 内容数据.

默认情况下, 调用过程和返回结果:

import MySQLdb
db  = MySQLdb.connect(host='localhost', user='root', passwd='admin', db='test')
cur = db.cursor()
cur.execute('select * from user')
rs = cur.fetchall()
print rs
# 返回类似如下
# ((1000L, 0L), (2000L, 0L), (3000L, 0L))

- 阅读剩余部分 -

归并排序

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

算法

归并操作的工作原理如下:

第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置

第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

重复步骤3直到某一指针超出序列尾

将另一序列剩下的所有元素直接复制到合并序列尾

- 阅读剩余部分 -

介绍

Java数据类型有两种,一种是基本数据类型,另一种是引用数据类型。本文主要介绍Java的8种基本数据类型,byteshortintlongfloatdoublebooleanchar

整型

对于整型类型,Java只定义了带符号的整型,因此,最高位的bit表示符号位(0表示正数,1表示负数)

byte

  • byte数据类型是8位、有符号的,以二进制补码表示的整数;
  • 最小值是 -128(-2^7);
  • 最大值是 127(2^7-1);
  • 默认值是 0;
  • byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一;
  • 例子:
byte a = 100;
byte b = -50;

- 阅读剩余部分 -