Ubuntu 17/18 版本默认已经预装 Python 3.6, 系统安装完成之后将直接可用, 而旧版的 Ubuntu, 比如 14/16 默认预装的均不是最新的 Python 3.6 版本, 如果希望通过 apt 包管理器在旧版系统上安装 Python 3.6, 需要添加特殊的软件源才可以. 当然你也可以通过 3.6 版本的 Python 源码来安装, 后续我们抽空再介绍一次, 如何通过源码安装 Python 3.6.

默认情况下, Ubuntu 14.04Ubuntu 16.04 默认安装的是 Python 2.7Python 3.5 版本,要安装最新的 Python 3.6 版本, 需要添加 deadsnakes PPA 软件源.

# add-apt-repository ppa:deadsnakes/ppa
# apt update
# apt install python3.6

而在 Ubuntu 16.10Ubuntu 17.04 版本上直接从仓库源安装即可

# apt update
# apt install python3.6

- 阅读剩余部分 -

RedHat Enterprise Linux 8 上 Python 环境默认是不预装的, 因此, 用户需要根据自己需要选择安装 Python 3 还是 Python 2.官方源中默认对 Python 3.6 有全面的支持. 接下来我们看看如何安装需要的 Python 版本.

注: 大多情况下, yum 包管理器是需要依赖 Python 和 一些基础包, 早期的发行版是将系统依赖的 Python 和 用户应用软件 公用 Python 环境, 这样就容易造成系统和用户环境对 Python 环境的冲突. 从 RedHat Enterprise Linux 8 将系统 Python 环境独立出来作为 Platform-Python, 即系统平台 Python 环境, 用户将不能使用该 Python 环境, 仅有系统功能使用, 有官方统一维护. 当然, 用户可以编写一些系统使用的 Python 程序有 Platform-Python 使用.

## 安装 Python 3

RedHat Enterprise Linux 8 开始启用新的包管理工具 dnf, 我们使用 dnf 来安装 python3

dnf install python3

因为官方支持的 3.6 版本, 因此随同 python3 的安装, 也将同时将 pipsetuptools 等依赖将一并安装好.

- 阅读剩余部分 -

概述

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.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语言中的一个核心概念——数组。

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

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

什么是数组

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

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

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

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

- 阅读剩余部分 -

httpd 是 Apache HTTP 服务器, 运行于常见操作系统(包括UNIX和Windows)HTTP服务器, httpd 安全,高效且可扩展,该服务器提供与当前HTTP标准同步的HTTP服务。

安装

安装 httpd 比较简单, 各个发行版本的默认仓库中均包含该程序, 少量发行版需要手动编译安装, 依据项目描述的 README.md 文档, 可快速安装到目标系统.

  • Debian/Ubuntu
apt -y install apache2
  • REHL/CentOS
yum -y install httpd
  • Gentoo
emerge www-servers/apache

- 阅读剩余部分 -

概述

每个程序都需要一个开始执行的地方,说到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))

- 阅读剩余部分 -