<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[zxahu的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/foreverwingsfly</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; foreverwingsfly]]></copyright><item><title><![CDATA[监控libary开发]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/80656482</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/80656482</guid><author>foreverwingsfly</author><pubDate>Mon, 11 Jun 2018 19:07:53 +0800</pubDate><description><![CDATA[我遇到的一个场景是，想提供一个jar包，各个服务引用后，可以将相关数据上报到监控中心。咨询一轮同事后，大家对主动上报的做法比较不能接受(即需要些一行代码，代码里传入监控数据的key-value)。而对注解上报的方式比较好接受，所谓注解上报，是指在方法上添加一个注解，由注解+返回值来组成上报的key-value。调研了目前市面上主要的aop方案，主要有spring aop, aspectj, jav...]]></description><category></category></item><item><title><![CDATA[服务运行原理]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/76236645</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/76236645</guid><author>foreverwingsfly</author><pubDate>Fri, 28 Jul 2017 11:09:52 +0800</pubDate><description><![CDATA[当我们写完代码，发布之后，服务器上到底发生了什么。目前我们的代码都是部署在tomcat上，tomcat运行在虚拟机上，虚拟机运行在物理服务器上。下面是服务运行的整体结构，分析每层都发生了什么，有助于我们了解服务是怎么运行的。



tomcat

tomcat是一个开源的应用服务器，它可以运行Java web应用。先看下tomcat的结构：

server: 表示这个tomcat]]></description><category></category></item><item><title><![CDATA[工作环境搭建]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/76197687</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/76197687</guid><author>foreverwingsfly</author><pubDate>Thu, 27 Jul 2017 15:26:17 +0800</pubDate><description><![CDATA[在搭建开发环境时记录的步骤，软件安装包已上传犀牛云盘，可选择官网或公司内部的犀牛云盘下载


intellij idea 安装：

下载：http://www.jetbrains.com/idea/download/ ， 选择ultimate版本
直接双击安装使用licence code激活： http://idea.lanyus.com/ 生成注册码
java环境安装：

下载]]></description><category></category></item><item><title><![CDATA[审核回调原子化方案]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/76187948</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/76187948</guid><author>foreverwingsfly</author><pubDate>Thu, 27 Jul 2017 14:41:03 +0800</pubDate><description><![CDATA[要解决的问题：

目前UGC的审核分为三种，一种是审核评价文字，会变更评价的整体状态；一种是审核评价带图，会变更评价图片的状态；还有一种是审核回应，会变更回应的状态。现在存在一种情况，当审核方同时或者在很短的时间间隔内提交一个评价的多张图片状态更新请求，会出现某张图片的更新操作没有生效。

出现此问题的根本原因是因为，每次更新图片状态时，都会先读整个ReviewData，更新该图片在Rev]]></description><category></category></item><item><title><![CDATA[回调原子化方案调研]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/76187742</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/76187742</guid><author>foreverwingsfly</author><pubDate>Thu, 27 Jul 2017 14:34:38 +0800</pubDate><description><![CDATA[目前审核分为三种，一种是审核评价文字，会变更评价的整体状态；一种是审核评价带图，会变更评价图片的状态；还有一种是审核回应，会变更回应的状态。现在存在一种情况，当审核方同时或者在很短的时间间隔内提交一个评价的多张图片状态更新请求，会有某张图片的更新操作没有生效。

出现此问题的主要原因是因为，每次更新图片状态时，都会先读整个ReviewData，更新该图片在ReviewData中的状态，然后再根]]></description><category></category></item><item><title><![CDATA[泛型]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/76177385</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/76177385</guid><author>foreverwingsfly</author><pubDate>Thu, 27 Jul 2017 11:15:12 +0800</pubDate><description><![CDATA[什么是泛型

Java 泛型（generics）是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制，该机制允许程序员在编译时检测到非法的类型。

泛型的本质是参数化类型，也就是说所操作的数据类型被指定为一个参数。


怎么使用泛型

泛型方法

泛型方法，该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型，编译器适当地处理每一个方法调用。]]></description><category></category></item><item><title><![CDATA[Map]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/71698873</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/71698873</guid><author>foreverwingsfly</author><pubDate>Thu, 11 May 2017 22:32:32 +0800</pubDate><description><![CDATA[HashMap存储方式：数组加链表 
支持key value为null, null key总是放在数组的第一个位置 
线程不安全 
元素在数组的位置是hashcode() % table.length，所以一个位置链表的元素的hashcode不一定一致构建参数: threshold = initialCapacity(默认为16）, loadFactor = loadFactor 
当Key-val]]></description><category></category></item><item><title><![CDATA[【JVM读书笔记】- Java内存区域]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/54340401</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/54340401</guid><author>foreverwingsfly</author><pubDate>Wed, 11 Jan 2017 09:01:14 +0800</pubDate><description><![CDATA[Java虚拟机在执行Java程序的过程中会把它所管理的内存分为若干个区域。1. 程序计数器
作用：通过改变这个计数器的值来选取下一条需要执行的指令。 
如果正在执行的是Java方法，那么计数器记录的是正在执行的虚拟机字节码指令地址；如果正在执行的是Native方法，那么此计数器为空。
存储方式：由于Java虚拟机是通过线程轮流切换并分配处理器的方式来实现的，在任何一个确定的时刻，一个处理器（内核）都]]></description><category></category></item><item><title><![CDATA[【Java并发编程】读书笔记]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/54177658</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/54177658</guid><author>foreverwingsfly</author><pubDate>Sat, 07 Jan 2017 20:12:43 +0800</pubDate><description><![CDATA[volatile定义：Java编程语言允许线程访问共享变量，为了确保共享变量能被准确和一致的更新，线程应该确保通过排他锁单独获得这个变量。 
理解：如果一个字段被声明为volatile的，那么Java线程内存模型确保所有线程看到的这个变量是一致的。 
实现原理：
Lock前缀指令会引起处理器缓存回写到内存]]></description><category></category></item><item><title><![CDATA[职业规划]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/53001356</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/53001356</guid><author>foreverwingsfly</author><pubDate>Tue, 01 Nov 2016 21:45:00 +0800</pubDate><description><![CDATA[职业规划来现在的公司工作已快一年，这一年来一直在做些简单的java开发，感觉进步异常缓慢，如果继续在这里混下去，估计2年或3年后仍是个java初级工程师。 
主要发展的技能：java web
会使用spring mvc开发web应用
阅读spring mvc源码
会前端开发，会使用一种前端框架
快捷键
加粗    Ctrl + B 
斜体    Ctrl + I 
引用    Ctrl + Q
插入]]></description><category></category></item><item><title><![CDATA[最大连续子序列]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/46446607</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/46446607</guid><author>foreverwingsfly</author><pubDate>Wed, 10 Jun 2015 21:08:17 +0800</pubDate><description><![CDATA[leetcode题目： 
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [−2,1,−3,4,−1,2,1,−5,4], 
the contiguous subarray [4,−1]]></description><category></category></item><item><title><![CDATA[openstack rolling upgrade from havana to icehouse]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/46118837</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/46118837</guid><author>foreverwingsfly</author><pubDate>Thu, 28 May 2015 10:13:52 +0800</pubDate><description><![CDATA[升级步骤：


备份配置文件、数据库 更改mysql配置，将default
 character 设为utf-8

升级Keystone


更改配置文件 

编译安装python包



升级数据库 


升级glance

更改数据库，UTF8的问题



更改配置文件 

编译安装python包


Db sync



升级]]></description><category></category></item><item><title><![CDATA[java面试]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/45012327</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/45012327</guid><author>foreverwingsfly</author><pubDate>Sun, 12 Apr 2015 18:00:35 +0800</pubDate><description><![CDATA[快一年没看过java，面试的时候被虐成狗，还是复习一下吧 
内容有些是从书上看到，有些是百度到的。JVMJava运行时的数据区域： 
    1. 程序计数器 
        a. 当前线程所执行的字节码的行号指示器，通过改变本区域的值来选取下一条要执行的指令 
        b. 如果线程正在执行的是java方法，那么计数器记录的是正在执行的虚拟机字节码指令地址 
        c. 如果正]]></description><category></category></item><item><title><![CDATA[python 排序]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/44087415</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/44087415</guid><author>foreverwingsfly</author><pubDate>Thu, 05 Mar 2015 21:31:54 +0800</pubDate><description><![CDATA[python 排序python用for in range的方式真是不习惯，所以搜了一下：for i in range(1, 5): 
    print i 
 输出是1,2,3,4 
 range(a,b)返回是 a到b-1 
 range(a)返回是0到a-1 
 range(a,b,2)返回的是从a到b-1，每次步长是2 
 所以range(1,10,2)返回是1,3,5,7,9 
 想要逆序]]></description><category></category></item><item><title><![CDATA[openstack horizon 报 error]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/42147119</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/42147119</guid><author>foreverwingsfly</author><pubDate>Thu, 25 Dec 2014 15:54:17 +0800</pubDate><description><![CDATA[[Thu Dec 25 07:29:51 2014] [error]     **kwargs)
[Thu Dec 25 07:29:51 2014] [error]   File "/usr/lib/python2.7/dist-packages/novaclient/client.py", line 195, in _time_request
[Thu Dec 25 07:29:51 20]]></description><category></category></item><item><title><![CDATA[OPENSTACK运维感想]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/41556865</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/41556865</guid><author>foreverwingsfly</author><pubDate>Thu, 27 Nov 2014 22:33:37 +0800</pubDate><description><![CDATA[一个PRO环境中的Openstack集群，在倒下后1个月还没完全恢复，我也是醉了。如果不在这里，实在无法想象到外企的工作效率。
不过还好坑的只是部门内部的人，倒也没闹出什么大的幺蛾子。


一个月下来，有些感想，仅作记录吧。


1.永远不要低估一个线上操作的影响。
   线上的每个操作，都应该在beta环境经过测试验证没有危害才能实行。有些操作可能看起来只会影响那么一点，但是总会]]></description><category></category></item><item><title><![CDATA[Openstack Avalibility Zone and Host Aggregates]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/39612223</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/39612223</guid><author>foreverwingsfly</author><pubDate>Sat, 27 Sep 2014 15:44:15 +0800</pubDate><description><![CDATA[又找到一位大神的博客
http://blog.chinaunix.net/uid-20940095-id-4064233.html

http://blog.chinaunix.net/uid-20940095-id-3875022.html



大神在博客里说的很清楚了，总结一下
A]]></description><category></category></item><item><title><![CDATA[shinken troubleshooting]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/39376479</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/39376479</guid><author>foreverwingsfly</author><pubDate>Thu, 18 Sep 2014 18:10:44 +0800</pubDate><description><![CDATA[shinken的安装于配置 参见 litrin大神的博客]]></description><category></category></item><item><title><![CDATA[linux vim 常用操作笔记]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/38134013</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/38134013</guid><author>foreverwingsfly</author><pubDate>Sat, 26 Jul 2014 00:19:31 +0800</pubDate><description><![CDATA[vim里跳到对应括号 按%
全局替换： %s/被替换词/替换词/g g表示global

跳到最后： shift +g

跳到最前： gg]]></description><category></category></item><item><title><![CDATA[puppet  中在site.pp中调用module中某个方法]]></title><link>https://blog.csdn.net/foreverwingsfly/article/details/37874523</link><guid>https://blog.csdn.net/foreverwingsfly/article/details/37874523</guid><author>foreverwingsfly</author><pubDate>Wed, 16 Jul 2014 11:32:36 +0800</pubDate><description><![CDATA[因为class中的参数不能动态变化，当需要给配置文件dong]]></description><category></category></item></channel></rss>