rpm简介

rpm( Red Hat Package Manager )是一个开放的软件包管理系统。它工作于Red Hat Linux及其他Linux系统,成为Linux中公认的软件包管理标准。

rpm将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作

rpm维护一个所有已安装的软件包和文件的数据库,可以让用户进行功能强大的软件包查询和验证工作。

在rpm学习前我们需要知道其它一些知识点来辅助学习:RPM学习第一篇



rpm软件包的命名格式

rpm包的命名格式一般有两部分组成。

  第一部分是源代码版本号。比如:

name-VERSION.tar.gz

  name:源代码包的名称

  VERSION: major.minor.release 

    major: 主版本号,一般程序功能有重大改变才会变动

    minor: 次版本号,程序功能某个小的分支有变动,才会变动

    release: 发行号,修正了某个BUG或升级了某段代码,才会变动

  

   第二部分是rpm打包制作的版本

如果用源代码比作面粉,rpm包比作馒头,它们的区别在于: 面粉有不同的工艺,拿面粉又做出了各种可口的馒头。

这样最终的软件包就构成了:

name-VERSION-release.arch.rpm

其中

name-VERSION仍然沿用源代码包的命名

release : 是rpm包打包制作的发行号

arch:是指明适用于哪种操作系统平台,有i386, x64(amd64), ppc, noarch等



获取包的方法

除了系统发行版的光盘自带的rpm软件包外,通常还需要到网上下载,下面是几个可信的获取软件包的途径

(1) 官方的文件服务器(或镜像站点)

http://mirrors.aliyum.com

http://mirrors.sohu.com

http://mirrors.163.com

(2) 项目的官方站点

(3) 第三方组织

(a) EPEL

(b) 搜索引擎

http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net

下载后建议先检查程序包的合法性和完整性。(4) 自己动手编译



rpm命令使用

安装:-i, --install        

升级:-U, --update, -F, --freshen

卸载:-e, --erase

查询:-q, --query

验证:-V, --verify

数据库维护:--builddb, –initdb

包的来源合法性验证和完整性验证: -K , --import



No1、安装

命令格式:

    rpm {-i|--install} [install-options] PACKAGE_FILE ...

 通用选项

-v : verbose ,详细信息

-vv : 更详细的信息

[install-options]

-h:hash marks输出进度条,每个#表示2%的进度

--test:测试安装,检查并报告依赖关系及冲突消息等

--nodeps:忽略依赖关系;不建议使用

--replacepkgs:强制重新安装已经安装的软件包  【这种安装,其配置文件可能不会安装,也有可能把原来的配置文件覆盖了】

--nosignature:不检查包签名信息,不检查来源合法性

--nodigest:不检查包完整性信息

注意:每一个程序安装时可能会运行脚本,做一些准备操作。rpm包可以自带脚本,这些脚本有四类(四类脚本不一定会全部带上),分别在不同的时刻被触发,分别是:

preinstall : 安装过程开始之前运行的脚本,%pre , --nopre

postinstall : 安装过程完成之后运行的脚本,%post , --nopost

preuninstall : 卸载过程真正开始执行之前运行的脚本,%preun, --nopreun

postuninstall : 卸载过程完成之后运行的脚本,%postun , --nopostun

常用命令:

    rpm  -ivh  PACKAGE_FILE ...

-------------------------------------------------------------

-------------------------------------------------------------

示例:

1、测试安装:

1 [root@oldboy mnt]# rpm -ivh --test mysql-5.1.73-5.el6_6.x86_64.rpm
2 warning: mysql-5.1.73-5.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 Preparing... ########################################### [100%]
4 [root@oldboy mnt]#

2、正常安装:

1 [root@oldboy mnt]# rpm -ivh python-2.6.6-64.el6.x86_64.rpm
2 warning: python-2.6.6-64.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 Preparing... ########################################### [100%]
4 package python-2.6.6-64.el6.x86_64 is already installed
5 [root@oldboy mnt]#

【注意:该warning是没有对包进行合法验证】

3、测试安装,且忽略依赖关系:

 1 [root@oldboy mnt]# rpm -ivh --test php-odbc-5.3.3-40.el6_6.x86_64.rpm
2 warning: php-odbc-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 error: Failed dependencies:
4 libodbc.so.2()(64bit) is needed by php-odbc-5.3.3-40.el6_6.x86_64
5 php-common(x86-64) = 5.3.3-40.el6_6 is needed by php-odbc-5.3.3-40.el6_6.x86_64
6 php-pdo(x86-64) is needed by php-odbc-5.3.3-40.el6_6.x86_64
7 [root@oldboy mnt]# rpm -ivh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
8 warning: php-odbc-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
9 Preparing... ########################################### [100%]
10 [root@oldboy mnt]#
11
12 rpm -ivh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm

4、强制重新安装

 1 [root@oldboy mnt]# rpm -ivh zsh-4.3.11-4.el6.centos.x86_64.rpm
2 warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 Preparing... ########################################### [100%]
4 package zsh-4.3.11-4.el6.centos.x86_64 is already installed
5 [root@oldboy mnt]# rpm -ivh --replacepkgs zsh-4.3.11-4.el6.centos.x86_64.rpm
6 warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
7 Preparing... ########################################### [100%]
8 1:zsh ########################################### [100%]
9 [root@oldboy mnt]#
10
11 rpm -ivh --replacepkgs zsh-4.3.11-4.el6.centos.x86_64.rpm

5、安装时候不检查包的来源合法性

1 [root@oldboy mnt]# rpm -ivh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
2 warning: php-odbc-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 Preparing... ########################################### [100%]
4 [root@oldboy mnt]# rpm -ivh --test --nosignature --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
5 Preparing... ########################################### [100%]
6 [root@oldboy mnt]#
7
8 rpm -ivh --test --nosignature --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm


No2、升级

命令格式:

    rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

    rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

注意事项:

-U|--upgrade:如果没有旧版程序包,则安装程序包;如果有旧版程序包,则升级程序包
-F:仅升级,如果没有旧版程序包,则不执行任何操作  【好像不支持降级功能】

通用选项:

-v : verbose ,详细信息

-vv : 更详细的信息

[install-options]:

-h:hash marks输出进度条,每个#表示2%的进度

--test:只进行升级测试

--nodeps:忽略依赖关系;不建议使用

--nosignature:不检查包签名信息,不检查来源合法性

--oldpackage:降级,如果新版本存在很多问题,就要用到降级  【注意:-F好像不支持降级功能】

--force:强制升级,如果新版本不再为其它程序提供依赖服务,这时会报错,可用强制升级

注意:

  (1) 内核升级可能会有若然隐患问题,所以不要对内核进行升级,如果要测试新版本内核,可用直接安装新版本内核,让与老版本并存。

  (2) 如果某程序包在安装后配置文件曾做过修改,在升级时,新版本程序提供的同名配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名( FILENAME.rpmnew )后提供。

常用命令:    

    rpm -Uvh PACKAGE_FILE ...
     rpm -Fvh PACKAGE_FILE ...

--------------------------------------------------------------------------

--------------------------------------------------------------------------

示例:

1、-U和-F的区别

1 [root@oldboy mnt]# rpm -Fvh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
2 warning: php-odbc-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 [root@oldboy mnt]# rpm -Uvh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm
4 warning: php-odbc-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
5 Preparing... ########################################### [100%]
6 [root@oldboy mnt]#
7
8 rpm -Fvh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm / rpm -Uvh --test --nodeps php-odbc-5.3.3-40.el6_6.x86_64.rpm

2、当老版本存在,升级"老版本"

1 [root@oldboy mnt]# rpm -q zsh
2 zsh-4.3.11-4.el6.centos.x86_64
3 [root@oldboy mnt]# rpm -Uvh --nodeps zsh-5.0.2-28.el7.x86_64.rpm
4 warning: zsh-5.0.2-28.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
5 Preparing... ########################################### [100%]
6 1:zsh ########################################### [100%]
7 [root@oldboy mnt]#
8
9 rpm -Uvh --nodeps zsh-5.0.2-28.el7.x86_64.rpm

3、降级新版本

 1 [root@oldboy mnt]# rpm -q zsh
2 zsh-5.0.2-28.el7.x86_64
3 [root@oldboy mnt]# rpm -Fvh --oldpackage zsh-4.3.11-4.el6.centos.x86_64.rpm [-F 好像不支持降级功能]
4 warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
5 [root@oldboy mnt]# rpm -Uvh --oldpackage zsh-4.3.11-4.el6.centos.x86_64.rpm
6 warning: zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
7 Preparing... ########################################### [100%]
8 1:zsh ########################################### [100%]
9 [root@oldboy mnt]#
10
11 rpm -Uvh --oldpackage zsh-4.3.11-4.el6.centos.x86_64.rpm


No3、卸载

命令格式:

    rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...      

注意:这里的PACKAGE NAME  指的是包名,不是包的全名。

选项:

--allmatches:卸载所有匹配指定名称的程序包的各版本,即删除系统里有同一程序的多个安装版本

--nodeps:忽略依赖关系

--test:测试卸载,dry run模式

--noscripts:

---------------------------------------------------------

---------------------------------------------------------

示例:

1、卸载包

1 [root@oldboy mnt]# rpm -q zsh
2 zsh-5.0.2-28.el7.x86_64
3 [root@oldboy mnt]# rpm -e zsh-5.0.2-28.el7.x86_64
4 [root@oldboy mnt]# rpm -q zsh
5 package zsh is not installed
6 [root@oldboy mnt]#
7
8 rpm -e zsh-5.0.2-28.el7.x86_64


四、查询

命令格式:

    rpm {-q|--query} [select-options] [query-options] 

其中

[select-options]

PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本

-a, --all:列出所有已经安装过的包

-f FILE:查询指定的文件由哪个程序包安装生成

-p, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作

--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供

--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖

[query-options]

--changelog:查询rpm包的changlog,注意非源码包的历史修订

-l, --list:程序安装生成的所有文件列表

-i, --info:程序包相关的信息,版本号、大小、所属的包组,等

-c, --configfiles:查询指定的程序包提供的配置文件

-d, --docfiles:查询指定的程序包提供的文档

--provides:列出指定的程序包提供的所有CAPABILITY

-R, --requires:查询指定的程序包所依赖的CAPABILITY

--scripts:查看程序包自带的脚本片断

常见组合用法:

查询已安装包的信息【后直接接包名就可实现】

  -qi PACKAGE //查询程序包information

  -qf FILE //查询文件由哪个程序包生成

  -qc PACKAGE //查询程序包的配置文件

  -ql PACKAGE //查询程序包生成的文件列表

  -qd PACKAGE //查询程序包安装后生成的文档

查询为安装包的信息【后接包的全名】

  -qpi PACKAGE_FILE //查询未安装程序包的information

  -qpl PACKAGE_FILE //查询未安装程序包将要生成的文件列表

  -qpc PACKAGE_FILE, ... //查询未安装程序包将要提供的配置文件

示例:

1、查询bash软件包提供的所有CAPABILITY  【需要理解】

 1 [root@oldboy mnt]# rpm -q --provides bash
2 config(bash) = 4.1.2-33.el6
3 bash = 4.1.2-33.el6
4 bash(x86-64) = 4.1.2-33.el6
5 [root@oldboy mnt]# rpm -q --provides mysql
6 mysql = 5.1.73-5.el6_6
7 mysql(x86-64) = 5.1.73-5.el6_6
8 [root@oldboy mnt]# rpm -q --provides zsh
9 config(zsh) = 5.0.2-28.el7
10 zsh = 5.0.2-28.el7
11 zsh(x86-64) = 5.0.2-28.el7
12 [root@oldboy mnt]# rpm -q --whatprovides 'config(bash)'
13 bash-4.1.2-33.el6.x86_64
14 [root@oldboy mnt]# rpm -q --whatprovides 'bash(x86-64)'
15 bash-4.1.2-33.el6.x86_64
16 [root@oldboy mnt]# rpm -q --whatprovides 'bash'
17 bash-4.1.2-33.el6.x86_64
18 [root@oldboy mnt]#

2、查询sed软件包所依赖的CAPABILITY

 1 [root@oldboy mnt]# rpm -qR sed
2 /bin/sh
3 /bin/sh
4 /sbin/install-info
5 /sbin/install-info
6 libc.so.6()(64bit)
7 libc.so.6(GLIBC_2.2.5)(64bit)
8 libc.so.6(GLIBC_2.3)(64bit)
9 libc.so.6(GLIBC_2.3.4)(64bit)
10 libc.so.6(GLIBC_2.4)(64bit)
11 libselinux.so.1()(64bit)
12 rpmlib(CompressedFileNames) <= 3.0.4-1
13 rpmlib(FileDigests) <= 4.6.0-1
14 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
15 rtld(GNU_HASH)
16 rpmlib(PayloadIsXz) <= 5.2-1
17 [root@oldboy mnt]#
18
19 rpm -qR sed

3、查询未安装php-common软件包的配置文件

 1 [root@oldboy mnt]# rpm -qpc php-common-5.3.3-40.el6_6.x86_64.rpm
2 warning: php-common-5.3.3-40.el6_6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
3 /etc/php.d/curl.ini
4 /etc/php.d/fileinfo.ini
5 /etc/php.d/json.ini
6 /etc/php.d/phar.ini
7 /etc/php.d/zip.ini
8 /etc/php.ini
9
10 rpm -qpc php-common-5.3.3-40.el6_6.x86_64.rpm

4、查询系统中安装了哪些rpm包: rpm -qa

5、查找所有安装过的包含某个字符串sql的软件包: rpm -qa | grep sql

6、查询MySQL软件包中的文件安装到那里去了:rpm -qa MySQL

7、查询XX.rpm中包含那些文件。

  • 一个没有安装过的软件包,使用rpm -qlp XX.rpm
  • 一个已经安装过的软件包,还可以使用rpm -ql XX.rpm

8、查询某个程序是哪个软件包安装的:

  rpm -qf `/bin/sed`    #返回软件包的全名
  rpm -qif `/bin/sed` #返回软件包的有关信息
  rpm -qlf `/bin/sed` #返回软件包的文件列表


五、校验

命令格式:

    rpm {-V|--verify} [select-options] [verify-options]

【注意: 一般用于对软件包安装后,校验软件包所有的文件有没有发生修改。】

示例:

[root@oldboy mnt]# rpm -V zsh      //没有返回任何提示,即校验通过

[root@oldboy mnt]# vim /usr/share/zsh/5.0.2/functions/send-invisible   //往zsh包的配置文件添加了几个字符

[root@oldboy mnt]# rpm -V zsh

S.5....T. /usr/share/zsh/5.0.2/functions/send-invisible  //这次,就显示被修改过了


如果一切都被校验正确,屏幕上就不会显示输出。如果出现有修改,相关信息就会被显示至屏幕。输出的格式中,单用“ . ” 表示测试通过,如果是下列字符则代表某类测试失败:

5: MD5校验和

S: 文件大小

L: 符号链接

T: 文件修改时间

D: 设备

U: 用户

G: 组群

M: 模式( 包含权限和文件类型 )

?: 不可读文件



六、.数据库重建  --> 仅管理员才能操作,目前还不知道怎么用??

rpm管理器数据库路径:

  /var/lib/rpm/

所有的rpm查询操作都是通过此处的数据库进行的。

命令格式:

    rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]

其中:

--initdb:初始化数据库。如果事先不存在数据库,则新建之;否则,不执行任何操作
--rebuilddb:重新构建。无论当前存在与否,直接重建数据库



No7.包来源合法性验证和完整性验证 --> 这一步需要在包安装之前进行

在上面演示的图片中,在每次安装软件包时都会有一个警告信息。软件包在打包制作时,会附加上用单向加密了的软件包自身的特征码,只有与之对应的公钥才能解密验证包的合法性并得到特征码,再利用特征码验证软件包的完整性。由于在本地没有对应的公钥所以才会出现上面的警告信息。这时需要获取公钥,公钥的获取很关键,直接关系着软件包的来源合法性。

注意:

  1、在可靠站点下的程序包一般我们获取不到公钥,所以就无法进行来源合法性验证,所以最好使用系统光盘自带的rpm程序包。

  2、如果是系统光盘自带的rpm程序包的话,想要进行来源合法性验正的话,直接导入公钥再验证

首先要获取并导入信任的包制作者的密钥,对于CentOS发行版来说:

  系统在安装完成后,系统会自动复制一份公钥至/etc/pki/rpm-gpg/ 下,用命令导入公钥,如下:

1
[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

  还有一种就是把密钥路径指向发行版光盘

1
[root@localhost ~]# rpm --import /media/RPM-GPG-KEY-CentOS-7

接下来安装软件包时系统就可以自动验证了。

还可以在安装软件包前,手动验证:

1
[root@localhost ~]# rpm -K zsh-5.0.2-7.e17.x86_64.rpm

  关于包合法性验证还可以查看博客:链接地址

 

【程序包管理】Linux程序包管理之rpm安装总结的更多相关文章

  1. Apache源码包在LINUX(CENTOS6.8)中的安装(出现问题及解决)

    任务:在CENT6.8系统中安装Apache(版本为:httpd-2.4.41) 前提:由于源码包必须先编译后安装,所以必须先安装编译器:gcc 理论步骤: 1.检测gcc软件包,如果不存在则进行安装 ...

  2. 操作系統3-內存管理(Linux內存管理)

    操作系統3-內存管理(Linux系統的內存管理方法) 9.Linux系統的內存管理方法 Linux採用"按需調頁"算法,支持三層管理策略.由於Intel CPU在硬件級提供了段式存 ...

  3. windows程序员开发linux程序的头一个月

    开发环境选择 vim,vscode,qt,visual studio都可以做linux c++开发,但是作为windows程序员,最熟悉的还是visual stuio,加上visual studio ...

  4. 如何实现在Windows上运行Linux程序,附示例代码

    微软在去年发布了Bash On Windows, 这项技术允许在Windows上运行Linux程序, 我相信已经有很多文章解释过Bash On Windows的原理, 而今天的这篇文章将会讲解如何自己 ...

  5. Linux程序包管理之rpm

    rpm简介 rpm( Red Hat Package Manager )是一个开放的软件包管理系统.它工作于Red Hat Linux及其他Linux系统,成为Linux中公认的软件包管理标准. rp ...

  6. Linux程序包管理之yum及源代码安装

    第十六章.Linux程序包管理之yum及源代码安装 目录 yum介绍 yum配置文件 yum的repo配置文件中可用的变量 yum命令的使用 使用光盘作为本地yum仓库 如何创建yum仓库 编译安装的 ...

  7. Linux程序包管理.md

    rpm 简介 RPM包管理员(简称RPM,全称为The RPM Package Manager)是在Linux下广泛使用的软件包管理器.RPM此名词可能是指.rpm的文件格式的软件包,也可能是指其本身 ...

  8. Linux程序包管理rpm与yum

    Linux程序包管理 Linux中软件的安装主要有两种形式:一种是直接下载源代码包自行编译后安装,另一种直接获取rpm软件包进行安装. 程序的组成部分: 二进制程序:程序的主体文件,比如我们运行一个l ...

  9. Linux 程序包管理-RPM

    程序简介:  POSIX(Portable Openratin System)跨平台系统:不同操作系统平台的标准C库(glibc)都是遵循POSIX规范的,这样基于标准库开发程序的源代码可以夸平台编译 ...

  10. Linux程序包管理初步-rpm的使用

    在Linux系统上,一般而言,对于程序包管理器来说分为三类: debian:dpt,dpkg;             (程序包后缀.deb) rhel:rpm (程序包后缀.rpm) suse:rp ...

随机推荐

  1. P5665 划分

    Part 1 先来看一个错误的贪心做法:假设当前结尾的一段和为 \(a\),等待加入结尾的一段和为 \(b\),现在要处理新进来的数 \(c\). \(a\leq b\),将 \(a\) 算入答案,将 ...

  2. 知识点回顾——C语言知识点复习梳理,看看你是不是都完全掌握了

    前段时间,我分享了关于C语言的一些必备知识点,感兴趣的朋友可以查看我的往期文章,或是关注公众号c语言进阶之路,查看次条文章,或搜索关键字"编程小白基础必备",就能查看相关文章了. ...

  3. [BUGCASE]CI框架的post方法对url做了防xss攻击的处理引发的文件编码错误

    一.问题描述 出现问题的链接: http://adm.apply.wechat.com/admin/index.php/order/detail?country=others&st=1& ...

  4. .NET使用AutoResetEvent实现多线程打印奇偶数

    AutoResetEvent 类 (System.Threading) | Microsoft Docs 定义 命名空间: System.Threading 程序集: mscorlib.dll, Sy ...

  5. FPGA 流水灯

    VerilogHDL那些事儿_建模篇(黑金FPGA开发板配套教程) 作者:akuei2 说明:参照该书将部分程序验证学习一遍 学习时间:2014年5月2号 主要收获: 1. 对FPGA有初步了解: 2 ...

  6. 基于java实现的简单网页日历功能,有兴趣得可以把它转换到前端实现

    之前做项目的时候,因为要用到不同日期显示不同的内容,就自己做了一个日期的显示和选择功能,今天抽空把以前的代码理了一下,顺便就把之前做的日期功能给拿出来回顾一下,大家可以提点意见,帮忙完善下设计.先上一 ...

  7. 简单dp水题

    #include <bits/stdc++.h> using namespace std; #define limit (100 + 5)//防止溢出 #define INF 0x3f3f ...

  8. maven依赖问题的出现原因与解决方式

    摘要 maven依赖问题作为开发者应该是经常遇到的问题,在个人单独开发单独维护的项目里,可能体现不那么明显,一是自己对导入的jar大部分都很明确,二是出现问题第一解决发现也很快,问题就没那么严重,而在 ...

  9. HashMap稍微详细的理解

    此文章用来记录hashmap的一些特点(在学习中的所了解的,如有不足,请指正) 什么是hash表 概念 先来一段百度百科的的解释 散列表(Hash table,也叫哈希表),是根据关键码值(Key v ...

  10. Java中的Reference类使用

    Java 2 平台引入了 java.lang.ref 包,这个包下面包含了几个Reference相关的类,Reference相关类将Java中的引用也映射成一个对象,这些类还提供了与垃圾收集器(gar ...