如何开发一个maven插件

maven是当下最流行的项目管理工具,其丰富的插件为我们的工作带来了很大的便利。 但是在一些情况下,开源的插件并不能完全满足我们的需求,我们需要自己创建插件,本文就从0开始带大家一起创建自己的插件。 【命名规范】 首先,官方的命名规范是maven-xxx-plugin,为了避免于官方冲突,我们可以将 ... »

Maven依赖管理系统

【背景】 之前在领英上读到一篇软文,《Managing Software Dependency at Scale》,讲述了领英是如何处理模块之间的依赖解析,以及如何去更好的处理依赖关系以及依赖管理。感觉在一家多产品的公司,在产品有可能相互依赖的情况下,都应该有这么一套系统,来进行依赖关系的管理以及维 ... »

谈谈nginx和lvs各自的优缺点以及使用

在最开始呢,咱们先说一下什么叫负载均衡,负载均衡呢,就是将一批请求,根据请求的内容,分发到不同的后端去进行相应的处理,从而提供负载分担,主备切换等功能。 对于不同的负载均衡软件,有不同的流量分发算法,今天,我们最市面上比较主流的两种负载均衡做一个对比,看看他们分别的优缺点,以及在很多情况下如何去做配 ... »

13排序:经典排序算法原理解析与优劣对比

衡量一个排序算法的优劣,我们主要会从以下 3 个角度进行分析: 1.时间复杂度,具体包括,最好时间复杂度、最坏时间复杂度以及平均时间复杂度。 2.空间复杂度,如果空间复杂度为 1,也叫作原地排序。 3.稳定性,排序的稳定性是指相等的数据对象,在排序之后,顺序是否能保证不变。 【冒泡排序】 冒泡排序最 ... »

openstack-taskflow 组件记录

【Summary】 TaskFlow 是一个为了 openstack 实现的 python 库,使得执行 task 变得简单,一致,易扩展,可靠; 它能以一种声明的方式,将轻量级 task 对象的创建与 flows 结合起来; 它以一个可以声明的方法可以使得其包含的 engines 去运行这些 fl ... »

递归:如何利用递归求解汉诺塔问题?

【什么是递归】 在数学与计算机科学中,递归 (Recursion))是指在函数的定义中使用函数自身的方法,直观上来看,就是某个函数自己调用自己。 递归有两层含义: 递归问题必须可以分解为若干个规模较小、与原问题形式相同的子问题。并且这些子问题可以用完全相同的解题思路来解决; 递归问题的演化过程是一个 ... »

Java 源码刨析 - 线程的状态有哪些?它是如何工作的?

线程(Thread)是并发编程的基础,也是程序执行的最小单元,它依托进程而存在。 一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源、更加轻量化,也因此被称为轻量级的进程。 线程的状态在 JDK 1.5 之后以枚举的方式被定义在 Thread 的源码 ... »

qemu-guest-agent详解

qemu guest agent简称qga, 是运行在虚拟机内部的一个守护程序(qemu-guest-agent.service),他可以管理应用程序,执行宿主机发出的命令。 QEMU为宿主机和虚拟机提供了一个数据通道(channel),这个通道的两端分别是在虚拟机内看到的串口和在宿主机上看到的un ... »

Java 源码刨析 - String

【String 是如何实现的?它有哪些重要的方法?】 String 内部实际存储结构为 char 数组,源码如下: public final class String implements java.io.Serializable, Comparable<String>, CharSequence  ... »

Ansible之playbook

【介绍】 Playbook与ad-hoc(点对点)相比,是一种完全不同的运用ansible的方式。 playbook是由一个或者多个play组成的列表,让他们可以联同起来同时按照预先编排好的机制执行。 task呢,其实更简单,其实就是调用ansible的一个模块。 要注意的是,模块执行是幂等的,意思 ... »

ansible模块详解

【简单介绍】 Ansible是一种agentless(基于ssh),可实现批量配置、命令执行和控制,基于Python实现的自动化运维工具。 有以下两个特性: 模块化:通过调用相关模块,完成指定任务,且支持任何语言编写的自定义模块 playbook:剧本,可根据需要一次执行完剧本中的所有任务或某些任务 ... »

HashMap详解

【基本介绍】 链接相关知识:Map, List, Set基本介绍。 HashMap是一个散装桶(数组或链表),它存储的内容是键值对(key-value)映射。 HashMap采用了数组和链表的数据结构,继承了数组的线性查找和链表的寻址修改。 HashMap是非synchronized的,所以很快。 ... »

scheduler_default_filters 详解

Filter scheduler 是 nova-scheduler 默认的调度器,调度过程分为两步: 通过过滤器(filter)选择满足条件的计算节点(运行 nova-compute) 通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创建 Instance。 Nova 允许使用 ... »

交换机三种模式Access、Hybrid和Trunk

【端口介绍】 以太网端口有 3种链路类型:access、trunk、hybird Access类型端口:只能属于1个VLAN,一般用于连接计算机端口; Trunk类型端口:可以允许多个VLAN通过,可以接收和发送多个VLAN 报文, 一般用于交换机与交换机相关的接口。 Hybrid类型端口:可以允许 ... »

Linux三剑客之sed的基本用法介绍

【介绍】 sed是一款强大的非交互式的文本编辑器,可以对文件文本进行增删改查的相关操作,本文主要是讲解以下sed的基本用法。 【常用选项】 -e 下一个参数为一个sed指令,一般只会用于同一行有多个sed的时候 -f 后面跟保存了sed指令的文件 -i 直接对内容进行修改,不加i时只是预览,并不做实 ... »

如何查看linux是否打开虚拟化

【服务器虚拟化】 执行命令: cat /proc/cpuinfo |grep vmx 如果有输出,则说明CPU支持虚拟化技术。 > svm - Secure virtual machine, AMD的虚拟化技术AMD-V > vmx - Intel的虚拟化技术Intel-VT 然后执行命令: lsm ... »

ssh学习笔记

【修改登陆端口】 修改/etc/ssh/sshd.config里面的Port字段 【修改ssh主动登陆默认端口】 修改/etc/ssh/ssh_config里面的Port字段 【修改ssh监听IP】 修改/etc/ssh/ssh_config里面的ListenAddress字段 ListenAddr ... »

mysql数据库编码问题

【修改编码格式】 修改数据库编码 ALTER database database_test character set utf8; 修改数据库表编码 ALTER table table_test character set utf8; 修改数据库编码 ALTER database database_ ... »

浏览器输入URL到返回页面的全过程

【问题描述】 在浏览器输入www.baidu.com,然后,浏览器显示相应的百度页面,这个过程究竟发生了什么呢? 【第一步,解析域名,找到主机】 正常情况下,浏览器会缓存DNS一段时间,一般2分钟到30分钟不等。如果有缓存,直接返回IP。 缓存中如果没有查到IP,浏览器会做系统调用,读取主机的hos ... »