- 博客(243)
- 资源 (12)
- 收藏
- 关注
原创 日志分析常用命令
日志分析常用命令查看文件内容cat access.log分页显示文件less access.log使用/GET查找字符串GET显示文件尾tail -n2 access.log-f 可以让tail程序不退出内容排序sort -n sortfile-n是指定按数字顺序进行排序sort -k 2 -t ’ ’ -n access.log字符统...
2019-07-06 17:34:53 518
原创 质量免费读后感
质量免费,但不是赠品!拜读克劳士比先生《质量免费》,让我回想起卡耐基先生所著的《人性的弱点》一书。两位作者都根据自身的宝贵经验让读者可以在生活和工作借鉴并运用。两本书都利用真实而生动的案例强有力地论证和强调核心观点,推动读者沉下心来结合自身实际进行深入思考。我刚拿到本书,就被题目给迷糊了。质量免费,那么何为质量免费?直到作者一针见血的指出:“质量是免费的。虽然它并不是赠品,可是它的确是不花钱的...
2019-03-03 17:17:13 5276
原创 OpenStack环境部署
OpenStack环境部署安装Ubuntu 16.04或者Ubuntu 14.04获取OpenStack源码下载 devstack 代码,并切换到 stable/ocata 分支apt-get install git -ygit clone http://git.trystack.cn/openstack-dev/devstack -b stable/ocata配置 ...
2019-02-12 15:50:16 365
原创 LVS+Keeplived原理与实现
LVS介绍常用的软负载均衡由如下几种nginx+keeplivedLVS+keeplivedHaproxy+keepliveDNS负载均衡LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。LVS的转发主要通过修改IP地址(NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标...
2019-02-12 15:07:12 1158 1
原创 基于OpenVSwitch实现Vlan进行测试
背景目前公司二层网络机器和交换机越来越多,当广播的时候二层网络上的机器都会受到报文,这样网络性能就会下降。解决方案:1.物理隔离:需要通信的交换机连接在单独的交换机上,交换机之间通过路由器连接。2.虚拟隔离(VPC采用的技术):VLan/VxLan/GRE。使用VLan可以连接在一个交换机上的机器进行通信隔离。VLan介绍VLan技术在原来的二层报文的头上加一个 TAG,里面有一个 V...
2019-02-12 14:26:30 3552
原创 Docker学习笔记
本文介绍Docker的安装步骤,容器的使用,镜像构建和使用。用于记录Docker中所使用到的命令,方便查阅。Docker安装安装方式1添加Docker的APT仓库sudo sh -c “echo deb https://apt.dockerproject.org/repo ubuntu-trusty main > /etc/apt/sources.list.d/docker...
2019-02-11 15:53:22 332
原创 OVS+Docker实现TCP/IP详解中的实验环境
ovs+docker实现TCP/IP详解中的实验环境本文搭建了TCP/IP详解中的实验环境,以用于学习TCP/IP协议。一.网络配置 为VMARE虚拟机添加NAT和Host网络,DHCP启动 修改网络配置文件 vi /etc/network/interfaces,编辑如下 # This file describes the network interfaces availa...
2019-02-11 15:10:23 968
原创 即时编译与优化技术
即时编译与优化技术Java程序最初是仅仅通过解释器解释执行的,即对字节码逐条解释执行,这种方式的执行速度相对会比较慢,尤其当某个方法或代码块运行的特别频繁时,这种方式的执行效率就显得很低。于是后来在虚拟机中引入了JIT编译器(即时编译器),当虚拟机发现某个方法或代码块运行特别频繁时,就会把这些代码认定为“Hot Spot Code”(热点代码),为了提高热点代码的执行效率,在运行时,虚拟机将会把...
2018-10-02 16:47:05 815
原创 Javac编译器与语法糖
Javac编译器与语法糖Javac编译过程大致分为3个过程:解析与填充符号表插入式注解器的注解处理过程分析与字节码生成过程###解析与填充符号表词法、语法分析:词法分析是将源代码的字符流转变为标记(Token)集合。 语法分析是根据Token序列来构造抽象语法树的过程。经过这个步骤后,编译器就基本不会再对源码文件进行操作了,后续的操作都建立在抽象语法树之上。填充符号表:符号表是...
2018-10-02 15:18:30 409
原创 方法调用
方法调用当方法调用时会产生一个栈帧,栈帧包含局部变量表,操作数栈,动态连接,方法返回地址和附件信息。每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的动态连接。Class文件中的常量池中存在大量的符号引用,字节码中的方法调用指令就以常量池中指向方法的符号引用作为参数。这些符号在类加载阶段或第一次使用时转化为直接引用,这种转化称为静态解析。另外一部分...
2018-10-02 14:35:32 185
原创 类加载机制
类加载机制类的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。这7个阶段的发生顺序下图所示:类初始化时机Java规范对类加载时机没有做强制约束,但对类的初始化阶段,严格规定有且只有以下情况必须立即对类“初始化”(而加载等阶段自然需要在初始化之前开始)。1.当虚拟机启动时,初始化用户指定的主类(包含main...
2018-10-01 21:48:00 158
原创 Class类文件结构
Class类文件结构Class文件是一组8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部都是程序运行的必要数据,没有空隙存在。当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。根据Java虚拟机规范的规定,Class文件格式采用一种类似于C语言结...
2018-10-01 16:51:02 246
原创 虚拟机性能监控与故障处理工具
虚拟机性能监控与故障处理工具jpsjps是jdk提供的一个查看当前java进程的小工具。常用命令:jps –l:输出主类或者jar的完全路径名jstack找出最耗时的java线程,据此分析代码步骤1.ps -ef | grep java(或者输入服务的名称)2.top -Hp pid1(pid1为需要分析的进程)3.找到pid1中最耗时的线程ID pid2;将pid2...
2018-10-01 10:38:38 174
原创 垃圾收集算法
垃圾收集算法垃圾回收的三种方式标记-清除标记—清除算法是最基础的收集算法,它分为“标记”和“清除”两个阶段:首先标记出所需回收的对象,在标记完成后统一回收掉所有被标记的对象,它的标记过程其实就是前面的可达性分析算法中判定垃圾对象的标记过程。标记—清除算法的执行情况如下图所示:缺点:1.造成内存碎片:标记清除后会产生大量不连续的内存碎片,导致当程序在运行过程中需要分配较大对象时无法找...
2018-10-01 09:51:36 538
原创 4.高效安全地发起垃圾收集
高效安全地发起垃圾收集可达性分析安全性和效率问题虽然可达性分析的算法本身很简明,但是在实践中还是有不少其他问题需要解决的。第一个问题便是在多线程环境下,会出现分析过程中对象引用关系还在不断变化的情况。比如垃圾回收器可能回收事实上仍被引用的对象内存,一旦从原引用访问已经被回收了的对象,则很有可能会直接导致 Java 虚拟机崩溃。这样无法保证安全性。另外一个问题是GCRoot节点主要在全局性引...
2018-09-24 19:30:20 173
原创 3.判断Java对象存活还是死亡
判断Java对象存活还是死亡由于Java运行时数据区域中的程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着入栈和出栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具备确定性,在这几个区域就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。因此,垃圾收集器...
2018-09-24 16:44:37 217
原创 2.Java内存溢出程序举例
Java内存溢出程序举例OutOfMemoryError: Java heap spaceimport java.util.ArrayList;import java.util.List;/**-Xms20M -Xmx20M -XX:+HeapDumpOnOutOfMemoryError**/public class JVMTest { static class OOM{}...
2018-09-23 20:07:41 289
原创 1.Java运行时内存区域
Java运行时数据区域JVM虚拟机运行时数据区域包括程序计数器,Java虚拟机栈,本地方法栈,Java堆,方法区。此外,java程序运行时也会经常用到本地内存。关于它们的内存分布图如下所示:下面具体介绍下上面提到的几块内存区域:程序计数器一块较小的内存空间,它是当前线程所执行的字节码的行号指示器,字节码解释器工作时通过改变该计数器的值来选择下一条需要执行的字节码指令,分支、循环、跳转、...
2018-09-23 12:13:27 946
原创 深入理解Vector
简要介绍Vector也是基于数组实现的,是一个动态数组,其容量能自动增长。Vector是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。Vector 继承了AbstractList,实现了List;所以它是一个队列,支持相关的添加、删除、修改、遍历等功能。Vector没有实现S...
2018-07-26 21:17:38 380
原创 深入理解TreeSet
简要介绍TreeSet简介TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。它继承于AbstractSet抽象类,实现了NavigableSet, Cloneable, java.io.Serializable接口。TreeSet 继承于AbstractSet,所以它是一个Set集合,具有Set的属性和方法。TreeSet 实现了NavigableSet接口,意味着...
2018-07-26 21:11:18 385
原创 深入理解TreeMap
简要介绍TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合。TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合。TreeMap 实现了Cloneable接口,意味着它能被克隆。TreeMap 实现了java.io...
2018-07-26 11:35:01 21694
原创 深入理解LinkedList
简要介绍LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。LinkedList 实现 List 接口,能对它进行队列操作。LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。L...
2018-07-26 11:31:17 184
原创 深入理解HashSet
简要介绍HashSet 是一个没有重复元素的集合。它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素。HashSet是非同步的。如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它必须 保持外部同步。这通常是通过对自然封装该 set 的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Collections....
2018-07-26 11:25:34 211
原创 深入理解HashMap
简要介绍HashMap是基于哈希表实现的,每一个元素都是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阈值)时,同样会自动增长。HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。HashMap的实现不是同步的...
2018-07-26 11:22:32 208
原创 集合快速失败检测机制(fail-fast)
简要介绍“快速失败”也就是fail-fast,它是Java集合的一种错误检测机制。当多个线程对集合进行结构上的改变的操作时,有可能会产生fail-fast机制。记住是有可能,而不是一定。例如:假设存在两个线程(线程1、线程2),线程1通过Iterator在遍历集合A中的元素,在某个时候线程2修改了集合A的结构(是结构上面的修改,而不是简单的修改集合元素的内容),那么这个时候程序就会抛出 Con...
2018-07-26 11:18:21 530
原创 Collections使用
public static void main(String[] args) { int arr[] = {1,3,5,4,6,2}; ArrayList<Integer> arrInt = new ArrayList<Integer>(); for(int i=0; i<arr.length;++i){ ...
2018-07-26 11:11:32 149
原创 Arrays使用
public static void main(String[] args) { int arr[] = {1,3,5,4,6,2}; printArr("before sort",arr); Arrays.sort(arr); printArr("after sort",arr); Arrays.fill(arr...
2018-07-26 11:08:43 224
原创 深入理解ArrayList
简要介绍ArrayList是基于动态数组实现的,其容量能自动增长。ArrayList继承了AbstractList,实现了List,提供了相关的添加、删除、修改、遍历等功能。ArrayList实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速随机访问功能。ArrayList实现了Cloneable接口,即...
2018-07-26 11:05:55 129
原创 C/C++基础学习代码(4)
程序1/************************构造和析构函数**********************/#include<vector>#include<iostream>struct Exampl{ //默认构造函数 Exampl() { std::cout << "exampl()" <...
2018-07-22 18:10:56 602
原创 C/C++基础学习代码(4)
程序1.//使用迭代器寻找和删除string对象中所有的大写字母#include <iostream>#include <string>using namespace std;int main(){ string str1("fhAsiSEFrh"); string::iterator first = str1.begin(); ...
2018-07-22 11:59:27 204
原创 C/C++基础学习代码(3)
程序1./**编写一个函数,其唯一的形参和返回值都是istream&类型。*该函数应一直读取流直到到达文件结束符为止*还应该将读到的内容输出到标准输出中,*以cin为实参来调用测试函数*/#include <iostream>using namespace std;istream& get(istream& in){ stri...
2018-07-22 11:06:02 225
原创 C/C++基础学习代码(2)
程序1./**编写程序定义一个vector对象,其每个元素都是指向string类型的指针,*读取该vector对象,输出每个string的内容及其相应的长度。*/#include <iostream>#include <vector>#include <string>using namespace std;int main(){ ...
2018-07-22 10:31:43 204
原创 C/C++基础学习代码(1)
/**编写程序由从标准输入的设备读入的元素数据建立一个int型vector对象,*然后动态创建一个与该vector对象大小一致的数组,*把vector对象的所有元素复制给新数组。*/#include &amp;amp;lt;iostream&amp;amp;gt;#include &amp;amp;lt;vector&amp;amp;gt;using namespace std;int main(){ vector
2018-07-22 10:05:04 6650 1
原创 C/C++之内存函数管理使用
C/C++之内存函数管理使用malloc()、free()、calloc()、realloc()函数在头文件stdlib.h中malloc()函数 原型: void *malloc(size_t size);malloc()的参数是需要分配的内存字节数。 如果内存池中的可用内存可以满足这个需求,maollc就返回一个指向被分配的内存块起始位置的指针(指针类型为voi...
2018-07-21 21:08:56 212
原创 C/C++学习之指针
C++学习之指针什么是指针指针:一个变量的地址称为该变量的指针。 指针变量:用来存放一个变量的地址的变量称为指针变量。但常把指针变量简称为指针。指针的用法//指针p被初始化,&amp;为取址符,表明p的初值为n的地址&amp;n。int n;int *p = &amp;n;//指针q被赋值,q的初值为&amp;n,则*q等于n;符号*为指针运算符。int *q;q ...
2018-07-21 20:29:55 140
原创 Linux常用命令
Linux命令1.用户创建使用useradd命令使用方法:useradd 选项 用户名其中各选项含义如下:-c comment 指定一段注释性描述。-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。-g 用户组 指定用户所属的用户组。-G 用户组,用户组 指定用户所属的附加组。-s Shell文件 指定用户的登录Shell。代码:#...
2018-07-21 16:56:34 181
转载 Oracle分析函数简介
http://www.jb51.net/article/85116.htm一、Oracle分析函数简介:在日常的生产环境中,我们接触得比较多的是OLTP系统(即Online Transaction Process),这些系统的特点是具备实时要求,或者至少说对响应的时间多长有一定的要求;其次这些系统的业务逻辑一般比较复杂,可能需要经过多次的运算。比如我们经常接触到的电子商城。在这些系统之
2017-03-28 15:53:55 348
原创 排列组合总结
组合1.位运算实现求组合:在此介绍二进制转化法,即,将每个组合与一个二进制数对应起来,枚举二进制的同时,枚举每个组合。如字符串:abcde,则有00000---------null00001---------a00010 --------b00011---------ab00100---------c… …11111--------abcde给出程序
2014-09-04 11:01:14 1320
原创 从一个字符串中删除另一个字符串中出现过的字符
定义一个函数,输入两个字符串,从第一个字符串中删除在第二个中出现过的所偶字符串。例如从第一个字符串"We are students."中删除第二个字符中“auiou”中出现过的字符得到的结果是"W r stdnts"解题思路:利用哈希查找。#include void deleteStr2FromStr1(char* str1, char* str2){ if(str1 == NUL
2014-09-02 09:02:42 2324
转载 关系数据库设计范式介绍
关系数据库设计范式介绍 .1 第一范式(1NF)无重复的列 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就
2014-08-20 09:35:50 576
深入理解Nginx(Nginx模块开发与架构解析).pdf
2014-07-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人