自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Chris.Xiao

点滴记录技术进步进程

  • 博客(66)
  • 资源 (2)
  • 收藏
  • 关注

原创 利用GSON解析简单Json字符串

之前一直使用fastjson来解析json串,性能高,上手快,简单易学不错的!最新听说fastjson爆出一个安全漏洞,只能寻找新的json库替代,就找到了gson,google开发的一款解析json的库,平时工作中,复杂的json串解析用不太多,一般就是最基本的json串用gson解析简单json串的示例如下:String jsonString = "{\"uid\":\"189

2017-03-29 17:47:04 4510 2

原创 Shell变量while循环内改变无法传递到循环外

今天刷Leecode(192 Word frequency)时,遇到一个shell语法问题,记录下来。首先将题目描述和代码呈上  1 #!/bin/bash  2   3 # Write a bash script to calculate the frequency of each word in a text file words.txt.  4 #  5 # For

2017-03-24 15:33:25 8534 1

原创 JDK源码走读(4):容器之LinkedList

本章分析List系列中的LinkedList,真正意义上的链表,底层采用链表形式存储数据元素。LinkedList是一个双向链表,可以向前或向后两个方向遍历链表。LinkedList也可以存放null元素。一、 类实现/继承体系结构为了对整个List实现/继承体系有个全貌,先将体系结构图画出来:二、 关键数据成员(1)节点类private static classNode,包含

2017-01-19 17:27:36 335

原创 JDK源码走读(3):容器之ArrayList

本章分析List系列中的ArrayList,有些与PriorityQueue类似,比如底层同样采取数组存储元素,也涉及到扩容操作等;也有不同之处,比如PriorityQueue不允许存入的元素为null,而ArrayList允许将null元素存放其中。一、 类实现/继承体系结构为了对整个List实现/继承体系有个全貌,先将体系结构图画出来:二、 关键数据成员(1)存储结构tra

2017-01-03 11:30:47 347

原创 JDK源码走读(2):容器之PriorityQueue

Java的容器分成四个系列:Set, List, Queue,Map,除Map外,其余三个都实现了Collection接口,List和Queue实现顺序存储,Map实现了K-V对。本章分析其中实现较为简单的Queue系列一、类实现/继承体系结构为了对整个Queue实现/继承体系有个全貌,先将体系结构图画出来:二、关键数据成员(1)存储结构PriorityQueue内部使用平

2016-12-28 12:08:18 674

原创 JDK源码走读(1):开篇

概述        打算从今天开始阅读jdk源码,一方面更熟悉各种结构、算法和功能库的实现机制,能更好的使用Java;另一方面,这些Java代码都是业界大牛所编写,经历几十年、各种场景的考验,非常值得学习!本系列作为阅读源码的笔记,记录代码实现的主要逻辑和自己的思考,也许有理解不对的地方,随着使用经验增加,对代码的理解会加深,后面再来优化。        JDK版本

2016-12-28 11:48:51 567

原创 使用HtmlUnit实现自动打卡

打卡制度由来已久,对于公司管理员工的出勤比较重要,存在也是合情合理,但对于程序员这个向往弹性工作的群体,内心里还是不太乐意,遂利用HtmlUnit写了一个自动打卡的工具,放到公司内网,通过Crontab实现自动打卡,本意不在打卡,更多是为了学习HtmlUnit,为将来实现自动化测试热身。^_^        对于网页解析部分,仅适用于我所在的公司的打卡页面,如果有同学恰好也需要这个功能,需要自

2016-12-06 11:51:44 2820

原创 Twemproxy源码走读(5):事件处理

概述Twemproxy中的IO复用考虑了跨平台的情况,针对不同平台采用不同的IO复用机制,比如Linux下使用epoll、FreeBSD使用kqueue等,在event目录下都有实现,所有的IO复用机制对外实现了统一的接口(event/nc_event.h):struct event_base *event_base_create(int size, event_cb_t cb);voi

2016-12-02 09:33:29 1748

原创 Twemproxy源码走读(4):运行主流程

Twemproxy在初始化完毕、运行前准备(nc_pre_run)结束后,开始进入正式的运行过程,(1)   nc_run的整体流程整体流程很清晰,图1 nc_run整体流程图(2)   core_start流程core_start流程也不复杂,其中主要是创建struct context变量ctx,nc使用结构体structcontext变量ctx保存运行时的上下文

2016-11-29 10:18:31 768

原创 Twemproxy源码走读(2):数据结构

Twemproxy内部定义了若干种数据结构,如概述中所述,包括自定义的数据结构和关键数据结构,本章将讲述两种数据结构,为后面的复杂的逻辑分析扫清障碍。自定义的数据类型: nc_array.c、nc_array.h、nc_string.c、nc_string.h 关键数据结构和算法: nc_rbtree.h、nc_rbtree.c、nc_queue.h、nc_request.c、nc_res

2016-11-27 09:20:22 817

原创 Twemproxy源码走读(3):初始化流程

Twemproxy初始化过程比较简单,这里把Twemproxy初始化过程分成两部分:(1)读取运行选项;(2)运行前的初始化和准备;(1)   读取运行选项             读取各项参数的设置,比如是否后台运行(daemonize)、日志级别、日志文件、配置文件名称等信息。            正如前一章(概述)里讲到的,NC使用了一个全局变量nc(类型为struct ins

2016-11-23 11:54:43 731

原创 Twemproxy源码走读(1):概述

Twemproxy(又称nutcracker,以下简称NC)是Memcached和Redis协议的代理服务器(下文中简单起见,只提及Redis,大部分情况适用于Memcached,不适用时会特别说明),并能有效减少大量连接对Redis服务器的性能影响。虽然Redis3.0版本具有集群的特性,但还不适合生产环境,单台Redis机器又受到内存大小限制,还存在出现故障会直接影响业务,同时,过多的客户端连

2016-11-20 09:19:51 1243

原创 服务开发需考虑的事项

开发一个服务不是简单的将服务功能实现,程序能跑这么简单,还需要考虑到各个方面,大致整理如下:逻辑正确,首先要保证程序的运行结果符合预期;方便修改,比如有些参数可能会修改,(1)这些就可以放到配置信息里,运行时,只需要改下配置,重启或者热修改,新的参数/配置就可以生效了;(2)还可以通过发送信号,与服务交互,服务代码中包含信号处理的逻辑,不同的信号,代表不同的信息;性能问题,现在的实

2016-11-17 11:47:43 559

原创 Redis简单扩容经验谈

team中的一个同学在其项目中使用了Redis作为缓存,将热点数据存放在Redis中。为了提升性能,写Redis时采用了管道的方式,平时使用时,Redis的性能、资源使用都能符合项目需求,但当访问量增加的时候,Redis的QPS还能满足要求,但CPU使用率高的时候已经达到90%+,平时只有30%+,而众所周知,Redis是单进程的,只能占用1个CPU核,跑满了也就100%,无法利用机器的多核,而当

2016-11-14 23:11:58 12544 1

原创 开篇——概述

本分类记录了在工作过程中,遇到的、经历的或者听说过的问题,记录解决问题的思考过程,当然也有尚未解决的问题,也会记录在此,        一来有知识经验的积累,加深印象,对自己算是个交代;        二来呢,如果有哪位同行遇到了类似的问题,但有更优的解决方案,希望能在此留言指教,起到一个抛砖引玉的作用,倘若如此,不胜感激;        这三来呢,也许有同学遇到了相同的问题,但还没有

2016-11-14 23:07:24 319

原创 深入调试的技术和工具读书笔记二

第2章 调试前的必知必会Hack #4 获取进程的Coredump启用内核转储ulimit -c unlimited            //开启coredump,不限制coredump文件的大小。ulimit -c 1073741824      //设置coredump文件的上限是1G利用gdb调试Coredump文件:gdb -c core_file_name ./

2013-11-15 07:15:35 647

转载 sigaction函数解析

sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)。他是POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非POSIX系统上运行,那么就应该使用这个接口)给信号signum设置新的信号处理函数act, 同时保留该信号原有的信号处理函数oldactintsigaction(int signo,const

2013-10-31 18:42:05 603

原创 linux下astyle的使用

最近接触到一款格式化代码文件的小工具——astyle,感觉比较好用,记录如下:1.首先下载astyle,本人使用的是linux版本的,下载地址:http://download.csdn.net/detail/northteam/5385182.tar -zxvf astyle_1.22_linux.tar.gz3.cd astyle; cd buildgcc/  执行make

2013-10-31 13:05:14 4909 1

转载 EINTR错误

慢系统调用(slow system call):此术语适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用是指调用有可能永远无法返回,多数网络支持函数都属于这一类。如:若没有客户连接到服务器上,那么服务器的accept调用就没有返回的保证。EINTR错误的产生:当阻塞于某个慢系统调用的一个进程捕获某个信号且相应信号处理函数返回时,该系统调用可能返回一个EINTR错误。例如:在socket服

2013-10-30 20:16:15 963

原创 深入调试的技术和工具读书笔记一

第1章      热身准备Hack #1 调试是什么调试的流程如下:(1)      bug复现;(2)      调试;(3)      确认执行过程(测试);(4)      程序行为与预期相同,则停止;程序行为与预期不同,转到(2)。Hack #2 Debug hacks的地图图1-3和图1-4将故障分类为“异常停止”、“不停止”和“其他现象”,并分别说明原因

2013-10-30 19:33:53 871

原创 MySQL学习资料收集

MySQL数据库开发视频教程 http://video.1kejian.com/computer/database/25486/

2013-10-29 12:08:41 565

原创 UML学习资料整理

UML类图详解 http://developer.51cto.com/art/200601/17308.htm开源UML画图工具StarUML使用方法 : http://www.doc88.com/p-612600388402.htmlUML类图符号 各种关系说明以及举例 http://www.cnblogs.com/duanxz/archive/2012/06/13/2547

2013-10-29 10:26:50 714

转载 堆排序

堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:Key[i]=Key[2i+1]&&key>=key[2i+2]即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足 Key[i]2.堆排序

2013-10-28 19:43:18 500

转载 二叉树中找出和为某一值的所有路径

在二叉树中找出和为某一值的所有路径#include #include #include "btree.h" void printPath(int* path, int size){ for (int i = 0; i < size; ++i) std::cout << path[i] << " "; std::cout << std::endl

2013-10-28 19:35:59 1082

转载 Astyle使用说明

Astyle是一个开源的代码美化工具,可以用于美化C/C++,C#,JAVA代码等。1 Linux下安装使用1.1 安装http://astyle.sourceforge.net/解压,编译,安装1.2 配置代码格式cat > ~/.astylerc--style=allman--indent=tab=8#--brackets=linux--brac

2013-10-22 20:57:36 1260

转载 Python中的random模块

Python中的random模块用于生成随机数。下面介绍一下random模块中最常用的几个函数。random.randomrandom.random()用于生成一个0到1的随机符点数: 0 random.uniform  random.uniform的函数原型为:random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a

2013-10-20 22:15:26 578

转载 python中list操作详解

1.定义list>>> li = ["a","b", "mpilgrim","z", "example"]>>> li['a', 'b', 'mpilgrim','z', 'example']>>> li[0]'a'>>> li[4]'example'2.负的list 索引>>> li['a', 'b', 'mpilgrim','

2013-10-20 20:40:16 638

转载 Python中map()内建函数浅析

MapReduce的设计灵感来自于函数式编程,这里不打算提MapReduce,就拿python中的map()函数来学习一下。文档中的介绍在这里:map(function, iterable, ...)Apply function to every item of iterable and return a list of the results. If addition

2013-10-20 20:02:51 1101

转载 python中string的操作函数

在python有各种各样的string操作函数。在历史上string类在python中经历了一段轮回的历史。在最开始的时候,python有一个专门的string的module,要使用string的方法要先import,但后来由于众多的python使用者的建议,从python2.0开始, string方法改为用S.method()的形式调用,只要S是一个字符串对象就可以这样使用,而不用import。

2013-10-20 19:31:18 1705

原创 Effective C++读书笔记

第0章       导读1.      Size_t只是typedef,是C++计算个数(例如char*-based字符串内的字符个数或STL容器内的元素个数等等)时用的某种不带正负号(unsigned)类型。它也是vector,deque和string内的operator[]函数接受的参数类型。第1章       让自己习惯C++条款01:视C++为一个语言联邦1.      今

2013-10-20 14:44:22 743

原创 打开/关闭 HP超极本鼠标触摸板

不小心不知道按了啥键,把鼠标触摸板给禁用了,摸索出了解禁的方法:打开鼠标控制板:Control Panel->Hardware and sound->Mouse选中Device Setting中的第三项,红框处,然后点击"Enable",就OK拉!

2013-10-20 14:13:21 3141

转载 linux删除除某(多)个文件之外的文件

最简单的方法是# shopt -s extglob# rm -fr !(file1)如果是多个要排除的,可以这样:# rm -rf !(file1|file2) 执行完rm命令后,将extglob恢复默认,shopt -u extglobshopt命令是set命令的一种替代,很多方面都和set命令一样,但它增加了很多选项。可以使用"-p"选项

2013-10-20 07:08:48 656

原创 python使用CSV实现电话本

开始学习Python,看了一道程序 http://www.oschina.net/code/snippet_230735_8468, 在此基础上修改了一下,#!/bin/python# coding:utf-8import timeimport csvclass TelBook: def __init__(self, filename): self.

2013-10-19 19:31:09 850

原创 高效程序员的45个习惯读书笔记

第1章      敏捷——高效软件开发之道敏捷开发宣言*个体和交互胜过过程和工具*可工作的软件胜过面面俱到的文档*客户协作胜过合同谈判*响应变化胜过遵循计划2. 敏捷工具箱*Wiki*版本控制*单元测试*自动构建第2章 态度决定一切态度非常重要,包括团队中的所有人。专业的态度应该着眼于项目和团队的积极结果,关注个人和团队的成长,围绕最后的成功开展

2013-10-19 18:22:44 853

转载 Git使用教程

Git 基础知识 http://www.open-open.com/lib/view/open1327827323139.htmlGit 服务器使用基础 http://www.open-open.com/lib/view/open1328355622046.htmlGit详解之一 Git起步 http://www.open-open.com/lib/view/open132

2013-10-18 12:46:42 512

转载 使用git进行版本控制

本文将介绍一种强大的版本控制工具,git的基本使用。与之前svn工具类似,首先给出一些常见的使用需求,然后以这些需求为中心,来展开git的学习过程。由于我也是在学习当中所以其中不准确之处可以通过后面的联系方式来交流,谢谢。^_^主要内容: 简介 基本概念 常用命令 具体实践 其它 简介 ========= 本文将介绍一种强大的版本控制工具,git的基本使

2013-10-18 12:39:09 813

转载 举例说明Python的CSV模块

by Gary Jia —上次修改时间: 2007-11-30 17:28 文章标签pythonzope举几个例子来介绍一下,Python 的 CSV模块的使用方法,包括,reader, writer, DictReader, DictWriter.register_dialect一直非常喜欢python的csv模块,简单易用,经常在项目中使

2013-10-17 17:28:38 831

转载 Linux服务器当前各种TCP网络连接状态的统计

例如服务器上的TCP网络连接状态显示如下:[[email protected] ~]# netstat -nat Active Internet connections (servers and established)Proto Recv-Q Send-Q Local Address               Foreign Address             S

2013-09-30 06:37:00 2179

转载 Function Pointers

A function pointer is a variable that stores the address of a function that can later be called through that function pointer. This is useful because functions encapsulate behavior. For instance, ever

2013-09-26 16:46:28 763

转载 《程序员的自我修养--链接、装载与库》读书笔记之基础篇

学了这么久的计算机知识,却对程序的编译、链接、静态库和动态库等方面的知识几乎一无所知,想起这本书,打算读一读,记录本文,以便查阅。计算机的发展1.早期的计算机CPU核心频率不高,跟内存频率一样,二者都是直接连接在同一个总线上的。   为了协调I/O设备(如显示设备、键盘、软盘和磁盘等)与总线之间的速度,也为了CPU能够和I/O设备进行通信,一般每个设备都有一个I/O Controlle

2013-09-26 08:08:37 606

DeviceTree V2.10

DeviceTree工具用于列举出系统中的驱动对象和设备对象,对驱动开发人员有很大帮助!

2010-11-11

著名的大公司程序员面试题目

包括google,百度等大公司的程序员面试题目

2009-09-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除