在 Maven 中使用本地包
在项目中使用本地jar包
在项目根目录新建lib文件夹,将所有本地jar包放入该文件夹内
在Maven pom.xm文件中按如下方式引入本地jar包:
scope : 设为system,告诉maven不再从仓库中查找jar包
systemPath:包在本地中的路径
对于IDEA还有一下配置,选择File–>Project Structure–>Libraries,点击左侧的+号,选择Java,引入刚刚lib目录下的所有jar包。
如果此时运行项目,出现ClassNotDef的异常,且异常信息与我们引入的jar包有关,则还需要配置一下IDEA。
选择File–>Project Structure–>Aritfacts–>项目的exploded,首先查看output root中是否有lib文件夹,没有则新建,然后双击最右侧的所有jar包,它们会自动被添加到lib文件夹中。
将本地jar包打包入war包
在pom.xml的plugins闭合中,添加如下插件即可:
12345678910111213141516<!-- 将 ...
Linux 进程间通信
我们知道,进程是一个程序的一次执行,是系统资源分配的最小单元。这里所说的进程一般是指运行在用户态的进程,而由于处于用户态的不同进程间是彼此隔离的,但是它们很可能需要相互发送一些信息,好让对方知道自己的进度等情况,像这样进程间传递信息就叫进程间通信。
一、什么是进程间通信
1.1 进程间通信的作用
(1)数据传输
一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。
(2)共享数据
多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。
(3)通知事件
一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种时间(如子进程终止时要通知父进程)。
(4)资源共享
多个进程之间共享同样的资源,需要内核提供锁和同步机制。
(5)进程控制
有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变,
1.2 进程间通信的分类
进程间的通信分为同一主机上的进程通信和不同主机上的进程间通信。
对于同一主机上的进程通信,分为:
UNIX进程间通信
无名管道( ...
解决 Xshell 关闭 vim 后内容仍停留在屏幕的问题
问题描述:
使用Xshell远程连接终端后,当关闭vim时,内容仍然停留在屏幕上。
解决问题:
1.编辑.bashrc文件:vim ~/.bashrc
在最后添加一行:export TERM=xterm
2.重新登陆终端:
Java 解析 XML
XML解析方式
(1)DOM解析:解析器把整个XML文件加载到内存,并生成一个Document对象。
优点:元素与元素之前保持依赖管理,可以对其进行CRUD操作。
缺点:当XML文件过大时,可能会出现内存溢出问题。
(2)SAX解析:一种速度更快、更有效的方法。它逐行扫描文档,一边扫描一边解析。基于事件驱动进行具体解析,每执行一行,都将触发对应的事件。
优点:处理速度很快,可以处理大文件。
缺点:只能读,逐行后会释放资源。
(3)PULL解析: Android内置的XML解析方式,类似于SAX。
XML解析器
根据不同的解析方式提供了具体的实现,称为解析器。为了简化解析器的操作,各大公司提供了易于操作的解析开发包:
JAXP: SUN公司提供支持DOM和SAX的开发包
jsoup: 一种处理HTML特定解析开发包
dom4j: 较为常用的解析开发包,Hibernate底层所使用的
JDom: dom4j兄弟
DOM解析原理
XML DOM将整个XML文档加载到内存中,生成一颗DOM树,并获得一个Document对象,通过Document对象就可以对DOM进行操 ...
Operating System,Linux MySQL 安装教程
一、Ubuntu 16.04
sudo apt-get install mysql-server
一旦安装完成,MySQL 服务器应该自动启动。您可以在终端提示符后运行以下命令来检查 MySQL 服务器是否正在运行:
sudo netstat -tap | grep mysql
如果要卸载:
sudo apt-get autoremove mysql-server
二、Centos
如果 Centos 系统版本大于7,默认源使用 mariadb 替换掉了 MySQL, 如果仍要安装 MySQL,只能采取源码安装。
2.1 配置 YUM 源
(1) 下载 mysql 源安装包
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
(2) 安装 mysql 源
yum localinstall mysql57-community-release-el7-8.noarch.rpm
(3) 检查 mysql 源是否安装成功
yum repolist enabled | gr ...
Linux PAM 验证
一、什么是PAM验证
Linux-PAM(linux可插入认证模块)是一套共享库,使本地系统管理员可以随意选择程序的认证方式。换句话说,不用重新编译一个包含PAM功能的应用程序,就可以改变它使用的认证机制。应用程序只需调用API就可方便的使用PAM提供的各种认证功能,而无需了解底层的实现。这种方式下,就算升级本地认证机制,也不用修改程序。
像我们使用su命令时,系统会提示你输入root用户的密码,这就是su命令通过调用PAM模块实现的。
二、PAM层次结构
PAM API是应用程序层与PAM服务模块之间联系的纽带,起着承上启下的作用。系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略。
当应用程序调用PAM API时,应用接口层按照配置文件pam.conf的规定,加载相应的PAM服务模块。当PAM服务模块完成相应的认证操作之后,将结果返回给应用接口层。
三、PAM工作原理
1.用户调用某个应用程序,以得到某种服务
2.PAM应用程序调用后台的PAM库进行认证工作
3.PAM库到/etc/pam.d/目录查找有关程序配置来确定认证机制
4.PAM库装载所需的认证模块
5 ...
MySQL 5.7 绿色版安装教程
一、下载安装包
首先前往官网下载 MySQL,也可以直接下载 mysql-5.7.20-winx64.zip
二、配置 MySQL
(1)下载完毕后(我此时版本为5.7.20),将压缩包解压,将解压后的整个文件夹放在你要放的位置,这里我放在 D 盘根目录下,即路径为:
D:\mysql-5.7.20-winx64
(2)在该路径下,在其中新建 my.ini 文件(注意:文件名后缀为ini),并在其中编辑以下代码(注意:代码中的两个路径要替换成自己实际的路径):
my.ini12345678910111213141516[mysql]# 设置mysql客户端默认字符集default-character-set=utf8 [mysqld]#设置3306端口port = 3306 # 设置mysql的安装目录basedir=D:\mysql-5.7.20-winx64# 设置mysql数据库的数据的存放目录datadir=D:\mysql-5.7.20-winx64\data# 允许最大连接数max_connections=200# 服务端使用的字符集默认为8比特编码的latin1字 ...
Linux IO 模型
一、概念
1.1 IO 模型的分类
Linux 下的 IO 模型一般包括以下五种模型:阻塞IO、非阻塞IO、IO多路复用、信号驱动IO 和 异步IO。
1.2 输入操作
对于文件的输入操作,包括下面两步:
等待数据准备好
将数据从内核复制到用户空间
对于套接字(socket)的输入操作,包括下面两步:
等待数据从网络中到达,到达后复制到内核中的缓冲区
将数据从内核缓冲区复制到应用进程缓冲区
关于套接字的知识,这里不再赘述,参考文章《Linux Socket 编程》 。
1.3 同步和异步
同步: 发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。
异步: 当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
二者区别是会不会导致请求进程(或线程)阻塞。
1.4 阻塞和非阻塞
阻塞: 调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu 不会给线程分配时间片),函数只有在得到结果之后才会返回。
非阻塞: ...
LTP 第六章 开发 IO 阻塞测试集
在本章中,我们将编写以下几个测试:
Convert pselect02
Convert epoll_wait03
Convert epoll_pwait01
Convert mmap04
Convert mmap05
Convert mmap06
Add select05
6.1 Convert pselect02
6.1.1 重写代码
123ltp/testcases/kernel/syscalls/pselect/wxs@ubuntu:~/ltp/testcases/kernel/syscalls/pselect$ rm pselect02.cwxs@ubuntu:~/ltp/testcases/kernel/syscalls/pselect$ vim pselect02.c
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 ...
Linux Socket 编程
前言
进程通信的概念最初来源于单机系统,由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如:管道(pipe)、消息(message)、共享存储区(shared memory)和信号量(semaphore)等。
但是这都仅限于用在本机进程之间通信。网络间进程通信要解决的是不同主机进程间的相互通信问题为此,引入了套接字。
一、套接字
套接字(socket),在Linux环境下,用于表示进程间通信的特殊文件类型(伪文件)。我们知道,在TCP/IP协议中:
IP地址:在网络环境中唯一标识一台主机
端口号:在主机中唯一标识一个进程
IP地址+端口号:在网络环境中唯一标识一个进程
这个在网络中被唯一标识的进程,被称为socket。在网络通信中,套接字一定是成对出现的。这两个socket组成的socket pair就唯一标识一个连接。
在TCP/IP模型中,套接字位于应用层和传输层之间:
套接字一般分为以下三种类型:
流式套接字(SOCK_STREAM)
提供可靠的、面向连接的通信流,通过它发送 ...