自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (1)
  • 收藏
  • 关注

原创 交友服务端重构总体设计

1. 业务需求1.1. 概述由于目前花田的技术架构已经历经多手,代码高度耦合,而且风格各异,许多业务逻辑都已经无人知晓。造成了维护成本高、追查问题困难的局面,严重不适应现在互联网的快速响应节奏。本文档是花田服务端重构的总体设计,为重构的方向、原则、步骤带来指导性的准则和参考。但并非是概要设计文档,不会过多的聚焦于技术选型和细节。如有建议或意见,欢迎提问和补充。

2017-03-29 10:01:06 894 1

原创 希尔排序

一. 算法描述先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。

2015-06-26 12:34:22 446

原创 冒泡排序

一. 算法描述冒泡排序:依次比较相邻的数据,将小数据放在前,大数据放在后;即第一趟先比较第1个和第2个数,大数在后,小数在前,再比较第2个数与第3个数,大数在后,小数在前,以此类推则将最大的数"滚动"到最后一个位置;第二趟则将次大的数滚动到倒数第二个位置......第n-1(n为无序数据的个数)趟即能完成排序。init0 1 2 3 4 5 6 7 8 9---------

2015-06-24 12:44:47 455

原创 Tomcat源码阅读(五)Service

描述Tomcat的StandardService主要方法和作用

2015-06-21 12:06:28 467

原创 插入排序

继续研究太阳落雨兄的算法文章,本篇是插入排序。一、算法描述插入排序:插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中……第N-1次,数组前N-1个元素组成有序的数

2015-06-16 13:08:10 417

原创 选择排序

拜读了太阳落雨兄的排序算法文章,受益良多,本文是在他的选择排序一文基础上加上个人理解和算法分析增强。一、算法描述选择排序:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换……第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。 0 1 2

2015-06-15 17:57:48 327

原创 Dal介绍2:自动分页功能

上一篇文章介绍了Dal的结构和基本方法。本文主要分析缓存+db的分页方法。find_by_page:分页查询@ctime(NAME) """ table:mongodb的表名 prefix:缓存前缀 query:查询条件,dict类型 cache:是否使用缓存 cache_time:缓存时间 sort:排序条件 criteria:查询的

2015-06-12 12:54:48 467

原创 Tomcat源码阅读(四)Server

Server的继承关系Lifecycle:通用接口组件生命周期方法 LifecycleBase:Lifecycle接口的基本实现,实现start和stop的状态转换规则。 LifecycleMBeanBase:主要实现JmxEnabled的方法 StandardServer:Server接口的标准实现,当Catalina是deploying和starting时使用(但不是必须)Standard

2015-06-08 14:25:22 477

原创 Dal:基于Mongodb和redis的Python持久库

dal(Data Access Layer)的含义是数据访问层。背景在团队的开发中,我们主要是使用mongodb作为持久化db,redis作为缓存服务。两者组合交替使用,当访问缓存的数据不存在时,会访问db。然后把db的数据加载进缓存中。在不断堆积的业务代码中,我发现了一个代码重复的问题。每次都是需要写那么一段判断缓存数据是否存在,不存在就从数据库加载的逻辑。基于这种情况,我封装了一套redis+

2015-06-07 19:24:33 812

原创 学习Linux C-网络调用:select

学习Linux c,首先需要写的是一个基于tcp的网络调用server,下面逐个注释分析代码逻辑。#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <stdlib.h>#include <string.h>

2015-06-01 09:52:55 384

原创 Tomcat源码阅读(三)Catalina

上一节说到,Bootstrap执行的加载操作,实际都需要反射执行Catalina类方法。现在介绍一下Catalina的主要方法load和start究竟做了些什么。1、loadpublic void load() { long t1 = System.nanoTime(); initDirs();//初始化临时目录 // Before digester - i

2015-05-26 20:59:41 1788

转载 Tomcat源码阅读(三)Catalina.createStartDegester

在研究Catalina之前,首先转一下createStartDegester的解析说明,这是对Tomcat配置文件server.xml的解析并初始化到Tomcat中。本来想自己研究一番,再写阅读心得上来。但发现这个解析过程也是比较复杂,涉及东西挺多的,然后搜了一下其他研究Tomcat源码大神们的心得,发现这篇文章的确不错。详尽介绍了解析xml的过程,值得转载一番。感谢holly2k这位大神的杰作。

2015-05-26 18:00:59 819

转载 分治法

许多有用的算法在结构上是递归的:为了解决一个给定的问题,算法一次或多次递归地调用其自身以解决紧密相关的若干子问题。这些算法典型地遵守分治法(Divide and Conquer)的思想:将原问题分解成几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解。三个步骤分治模式在每层递归时都有三个步骤:分解(Divi

2015-05-26 17:12:03 317

原创 Tomcat源码阅读(二)Bootstrap

Catalina的引导加载程序。这个应用程序构造一个类装入器使用加载Cataline内部类(通过收集在”catalina.home”下的server目录下的所有Jar文件),并开始容器的定期执行。这种迂回的方法目的是保持Catalina内部类(和任何其它类的依赖,如XML解析器)脱离系统class路径,因而在应用程序级别的类不可见(翻译自注释)。程序入口:main方法public static vo

2015-05-18 12:55:12 514

原创 Tomcat源码阅读(一)初始化

近来,我开始阅读tomcat的源码,感觉还挺清晰易懂;为了方便理解,我参考了网上的一些文章,把tomcat的组成归纳一下;整个tomcat的组成如下图所示:Tomcat在接收到用户请求时,将会通过以上组件的协作来给最终用户产生响应。首先是最外层的Server和Service来提供整个运行环境的基础设施,而Connector通过指定的协议和接口来监听用户的请求,在对请求进行必要的处理和解析后将请求的内

2015-05-17 23:04:05 834

原创 推送平台架构

由于CC部门没有一个公共的推送平台,各个业务之间推送手机消息会非常费劲,而且沿用了PC架构的局限性,只有用户建立连接到服务器才会收到各种消息,在当今移动为王的环境,如果用户的手机进入了休眠或者退出应用之后就不能接收消息的话,是非常被动非常滞后的。因此,一个公共的推送平台就出现了。简单解释一下各个组件的含义 hzpush:杭研的push服务,负责向安卓和IOS设备推送消息 pushsvr:推送服务

2015-05-17 22:55:56 2748

原创 CC手机服务平台架构

下面是目前CC手机服务平台的整体架构图红框代表手机TCP服务 绿框代表手机CGI接口TCP服务 mobilelink:手机App的连接目标,相当于一个超级客户端,负责与手机之间的所有通讯 namesvr:所有TCP服务都会注册到namesvr,负责管理服务之间的通讯 mmgr:负责mobilelink的负载均衡,定时计算出5个最空闲的mobilelink连接地址 mcollsvr:收集手

2015-05-17 22:52:51 755

原创 Log4j的配置

在启用日志记录之前,你必须先配置log4j。配置Log4j意味着增加appender(destinations/targets/handlers)类别(logger)和分配每个appender布局(格式化程序)。类别可以在任何顺序创建和配置。特别是,一个类别将找到并链接到它的后代即使是实例化。您还可以配置类别以编程方式登录到特定appender使用类别对象的addAppender()方法。添加多达你

2015-05-17 22:44:03 477

原创 如何解决Python2的内存泄漏问题

python进程内存撑大了下不去,只能手动重启释放内存,这么坑爹的事情你遇到过吗?哪家内存分配器强?结果一目了然。线上进程目前都是使用原生的Python内存分配器(pymalloc),在正常的情况下表现还算稳定,但如果来了一波类似于武神坛或者天下第一的比武大会,为手机瞬间带来了10倍于平时的流量,一阵狂虐之后,Python进程占用的内存被撑大就下不去了。关于Python的内存不释放问题,可以参考一下

2015-05-17 22:08:09 3787

他山之石-敏捷项目管理的经典实践

敏捷项目的实践经验

2017-05-17

空空如也

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

TA关注的人

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