显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

0与1构筑世界,程序员创造时代

软件架构设计 Java编程

 
 
 
 
 
 

广东省 广州市 处女座

 发消息  写留言

 
职    业 高级软件工程师
专长技能软件架构设计、Java编程
兴趣爱好: 编程、旅游、电影、音乐
喜欢名人毛泽东、邓小平、 朱镕基
人生格言宝剑锋从磨砺出, 梅花香自苦寒来!
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 
心情随笔列表加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 
 
 
 
 
 
网易云音乐 曲目表歌词秀
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

开源站点

 
 
模块内容加载中...
 
 
 
 
 
 
 
列表加载中...
 
 
 
 
 
 

我的个人网站

 
 
模块内容加载中...
 
 
 
 
 

免费/开源 软件

 
 
模块内容加载中...
 
 
 
 
 
 
 

MySQL 5.5将字符集从utf8升级为utf8mb4

2016-1-4 20:08:44 阅读519 评论1 42016/01 Jan4

升级原因

MySQL默认的utf8只支持三字节字符,不支持Emoji表情符(四字节),如果有四字节的字符写入会报错。从MySQL 5.5开始,提供了utf8mb4,支持四字节的字符。

许多使用iphone的用户来在填写昵称的时候会加入Emoji表情符,如果MySQL没有使用utf8mb4字符集,这样的昵称信息就无法写入。

一、升级前。mysql> SHOW VARIABLES LIKE 'character_set%'; +--------------------------+--------------------------------------------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8

作者  | 2016-1-4 20:08:44 | 阅读(519) |评论(1) | 阅读全文>>

Gson教程-自定义反序列化 | Gson Tutorial - Custom Deserialization

2015-8-17 20:21:12 阅读1342 评论0 172015/08 Aug17

一、需求 二、实现     1、自定义反序列化     2、注册自定义的反序列化 三、参考资料

上一篇文章《Gson教程-自定义序列化》介绍了使用Gson的自定义序列化满足一些业务场景下的需求。同样的,反序列化(JSON字符串转换成Java对象)也需要自定义,使用方式与序列化一样,两步搞定:

实现JsonDeserializer接口。注册自定义的反序列化实现。一、需求

1、有如下JSON字符串,需要转换成Person对象。

{"PersonName":"aofeng","PersonAge":32}

2、Person有两个属性:name和age,点击查看源代码

二、实现1、自定义反序列化

实现JsonDeserializer接口的deserialize方法:

public static class PersonDeserializer implements JsonDeserializer<Person> { @Override public Person deserialize(JsonElement jsonEle, Type type, JsonDeserializationContext context) throws JsonParseException {

作者  | 2015-8-17 20:21:12 | 阅读(1342) |评论(0) | 阅读全文>>

一、普通对象(POJO) 二、数组     1、序列化     2、反序列化 三、集合类     1、序列化     2、反序列化 四、参考资料

Gson是众多开源JSON类库中的一个,使用非常简单,使用toJson和fromJson方法可将JSON字符串和Java对象相互转换,主要的特性有:

全面支持泛型。Java对象不需要在源代码中增加注解就可以进行转换。转换时使用Java对象的字段,而非setter和getter方法。可自定义序列化和反序列化满足个性化需求,甚至编写自己的TypeAdapter改变底层的解析。

下面,通过几段代码展示Gson如何将Java中常用的POJO、数组和集合序列化成JSON字符串,并反序列化。

作者  | 2015-8-12 19:57:18 | 阅读(1374) |评论(0) | 阅读全文>>

将项目从HG迁移至Git | Converting Hg repositories to Git

2015-7-21 20:38:18 阅读649 评论4 212015/07 July21

GIT对多分支有着非常好的支持,团队的项目逐渐从HG迁移至GIT。迁移后,如何能保留原来HG项目中的提交历史和tag,是一个必须要解决的问题,fast-export正是因此而产生。

预备 需要迁移的HG项目本地路径:/devdata/projects/game/threadpool-jws-merge迁移的目的GIT仓库:git@git.aofeng.local:jws-module/threadpool.git迁移过程

1、获取fast-export工具。

cd $OPEN_SOURCE_DIR git clone git://repo.or.cz/fast-export.git

说明:

$OPEN_SOURCE_DIR为存放开源项目的目录 ,如:/devdata/projects/open_source/

2、新建GIT本地仓库并初始化。

cd $GIT_REPO_ROOT mkdir threadpool-jws cd threadpool-jws git init

说明:

$GIT_REPO_ROOT为存放GIT项目的目录 ,如:/devdata/projects/git/

3、使用fast-export将HG项目转换成GIT项目。

$OPEN_SOURCE_DIR/fast-export/hg-fast-export.sh -r <HG项目本地仓库路径>

说明:

作者  | 2015-7-21 20:38:18 | 阅读(649) |评论(4) | 阅读全文>>

一、预备 | Prerequisites CentOS5 / RedHat5 /CentOS6 / RedHat6GCC-4.1.2Nginx-1.9.2pcre-8.21zlib-1.2.5openssl-1.0.2c二、配置依赖组件 | Setup Dependents# 进入存放下载文件的目录 cd ~/download # PCRE源码下载和解压 wget http://sourceforge.net/projects/pcre/files/pcre/8.21/pcre-8.21.tar.gz/download tar -zxvf pcre-8.21.tar.gz -C ../build/ # zlib源码下载和解压 wget http://sourceforge.net/projects/libpng/files/zlib/1.2.5/zlib-1.2.5.tar.gz/download?use_mirror=nchc&download= tar -zxvf zlib-1.2.5.tar.gz -C ../build/ # OpenSSL源码下载和解压 wget --no-check-certificate https://www.openssl.org/source/openssl-1.0.2c.tar.gz tar -zxvf openssl-1.0.2c.tar.gz -C ../build/ 三、安装Nginx | Install Nginx

1、下载Nginx源码并解压。

# 进入存放下载文件的目录 cd ~/download #

作者  | 2015-6-30 20:49:04 | 阅读(1723) |评论(0) | 阅读全文>>

MySQL5.5编译安装和多实例配置

2015-5-12 19:05:30 阅读1463 评论0 122015/05 May12

MySQL有多种安装方式:编译安装、二进制发布包安装。我想大家的第一反应是使用二进制安装,选择针对当前系统发布的二进制直接安装就行,比编译安装简单得多。但编译安装有它的好处:

可针对当前系统进行优化;定制需要的引擎;定制安装目录,可多版本并存;定制各种默认参数。

那多实例有什么用途呢?在业务早期,系统的访问量较小,许多模块的读写操作不频繁,从节约成本的角度和系统以后的扩展性考虑,会在一台物理机中部署多个MySQL实例,不同的模块使用不同的实例,如果其中某个模块的读写量不断上升,到达一定程度后再将它使用的实例迁移至另外的服务器。

另外,在研发的开发环境和测试的测试环境中,部署的环境要模拟生产环境的架构,也往往采用在同一台物理服务器中部署多个MySQL实例的情况,进行主从同步、主主同步的配置。

环境 RedHat 5.x / CentOS 5.xGCC 4.1.2安装MySQL解压tar -C build -zxvf mysql-5.5.43.tar.gz 编译安装

1、配置。

cmake -DCMAKE_INSTALL_PREFIX=/home/nieyong/local/mysql-5543 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=1 -DMYSQL_UNIX_ADDR=/home/nieyong/local/mysq

作者  | 2015-5-12 19:05:30 | 阅读(1463) |评论(0) | 阅读全文>>

HTTP缓存 - If-Modified-Since与Last-Modified

2015-4-14 17:34:38 阅读3056 评论0 142015/04 Apr14

概述

当浏览器本地缓存的数据已经过期或无法判断是否为最新版本,就会向服务器发起请求进行核对,常见的是Last-Modified与If-Modified-Since结合使用。

如果自指定的时间之后,文档发生了变化,就返回文档内容和新的修改时间,浏览器用新的数据覆盖本地缓存。如果文档没有变化,返回304 Not Modified,只返回一些需要在浏览器中更新的Header信息。

注:一些WEB服务器在实现时,只是比较If-Modified-Since与文档的修改时间是否一致,并没有确认是否在这个时间之后修改过。

实例首次请求与响应

1)浏览器首次访问时,请求的Header中没有If-Modified-Since。

2)响应状态码为200,响应的Header中返回了Last-Modified并完整地返回了文件内容。

本地有缓存,文档在服务器未修改

1)浏览器再次访问,请求的Header携带了If-Modified-Since,其值为上次响应的Last-Modified的时间。

2)此文件没有修改过,服务器返回响应状态码为304,响应的Body为空。

本地有缓存,文档在服务器有修改

1)在服务器修改文件。

2)浏览器的请求的Header携带If-Modified-Since。

3)由于文件已修改并且比If-Modified-Since的时间新,因此响应状态码为200,返回文件内容并在响应的Header中返回了Last-Modified,其值为文件的最新修改时间。

作者  | 2015-4-14 17:34:38 | 阅读(3056) |评论(0) | 阅读全文>>

Python-使用python-memcache操作Memcached

2015-4-1 20:21:49 阅读6624 评论2 12015/04 Apr1

预备 Python 2.7Memcached 1.4.xpython-memcached-1.54安装

1、下载源码包。

wget http://ftp.tummy.com/pub/python-memcached/old-releases/python-memcached-1.54.tar.gz

2、解压缩。

tar -zxvf python-memcached-1.54.tar.gz

3、安装。

python setup.py install

注:需要root权限

编程#coding:utf8 import memcache class MemcachedClient(): ''' python memcached 客户端操作示例 ''' def __init__(self, hostList): self.__mc = memcache.Client(hostList); def set(self, key, value): result = self.__mc.set("name", "NieYong") return result def get(self, key): name = self.__mc.get("name") return name def delete(self, key): result

作者  | 2015-4-1 20:21:49 | 阅读(6624) |评论(2) | 阅读全文>>

Python - 使用Connector/Python操作MySQL

2015-3-20 20:47:15 阅读13304 评论3 202015/03 Mar20

预备

Python 2.7

Connector/Python 2.1.1

安装

1、下载源码包。

wget http://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-2.1.1.tar.gz

2、解压缩。

tar -zxvf mysql-connector-python-2.1.1.tar.gz

3、安装。

python setup.py install

注:需要root权限

编程#coding:utf8 # 使用 Connector/Python 进行查询操作。 import mysql.connector # 创建连接 config = { 'user':'uzone', 'password':'uzone', 'host':'127.0.0.1', 'port':19816, 'database':'ucgc_sdk'} conn = mysql.connector.connect(**config) # 创建游标 cur = conn.cursor() # 执行查询SQL sql = "SELECT notice_id,notice_name,creator,ctime,modifier,mtime FROM

作者  | 2015-3-20 20:47:15 | 阅读(13304) |评论(3) | 阅读全文>>

TCP/IP建立连接(三次握手)和关闭连接(四次挥手)

2015-3-3 15:53:07 阅读2318 评论0 32015/03 Mar3

在日常分析和定位生产环境的问题时,经常会碰到各种各样的网络问题,查看应用监听端口上连接的数量、各种状态的连接数量分布成为常用的手段之一。但一些同学看不懂使用netstat过滤出来的各种状态是什么含义以及各种状态的连接数量分布可能存在什么问题。其实只要弄懂了TCP/IP建立连接(即三次握手)和关闭连接(即四次挥手),上面的问题迎刃而解。

一、建立连接(三次握手)

第一次握手:建立连接时,客户端发送SYN(seq=x)包到服务器,并进入SYN_SENT状态,等待服务器的确认。SYN:同步序列编号(Synchronize Sequence Numbers)。第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即发送SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到SYN+ACK包,向服务器发送ACK(ack=y+1)包,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。

下面是通过Wirkshark抓包得到的TCP/IP三次握手的数据包截图:

说明:

10.0.2.15是建立请求的发起方(即客户端)。42.121.252.58是建立请求的接收方(即服务端)。为什么建立连接要三次握手?

目的: 防止已经失效的连接请求到达服务端,创建无效的连接,浪费资源。

说明: 当客户端发出的第一个连接请求在网络上的某个节点被滞留了(网

作者  | 2015-3-3 15:53:07 | 阅读(2318) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
日志评论
评论列表加载中...
 
 
 
 
 
博友列表加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017

注册 登录  
 加关注