自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (2)
  • 收藏
  • 关注

转载 Java远程调试原理与运用

Java远程调试的原理是两个VM之间通过debug协议进行通信,然后以达到远程调试的目的。两者之间可以通过socket进行通信。首先被debug程序的虚拟机在启动时要开启debug模式,启动debug监听程序。jdwp是Java Debug Wire Protocol的缩写。java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,

2017-07-19 15:42:40 570

原创 桥接模式

解决的问题当一个类存在多个维度的变化时,使用桥接模式可以增加类的灵活性。该模式体现了优先使用组合/聚合,而不是继承。实例考虑记录日志的类,从日志输出终端维度考虑,可以有控制台、文件、网络socket;而从日志输出的格式维度考虑,可以按xml格式输出,也可以按json格式输出,或者简单的字符串格式输出。如果所有的日志都来自于继承自Log接口,那么上述场景的类图可能为:可以看到

2017-07-02 23:22:26 305

原创 装饰者模式

解决的问题在不改变原有对象结构情况下,为类动态增加功能,避免了通过继承方式进行功能扩充导致的类体系臃肿 ,且可以采用任意顺序组织这些功能。装饰者模式类图Component是要被装饰的接口,ConcreteComponent是具体被装饰的类;Decorator是装饰器共同接口,各个具体的装饰器实现相同的装饰器接口;在装饰器中持有被装饰的Component,因为装饰器也继承自Com

2017-06-25 17:08:02 251

原创 观察者模式

解决的问题:当一个类的状态变化需要通知多个类,且被通知的类型要动态变化时,就可以使用观察者模式。标准定义:观察者模式(有时又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。类结构图如下:类图中Obse

2017-06-25 16:21:53 792

原创 适配器模式

适配器使用场景当系统依赖的接口提供了需要的功能,但是接口签名并不是完全匹配时,就可以使用适配器模式,将外部接口桥接到内部系统上。代码实例依赖接口public interface RemoteCallBackA {    void doCallBackA();}public interface RemoteCallBackB {    void doCallB

2017-06-17 16:20:34 270

原创 动态代理

动态代理当项目规模扩大时静态代理的方式不便于扩展。在上面的例子中,如果A增加新方法fun3,那么则需要联动修改代理类;如果其他类型B也需要同样的代理,那么就需要有一个ProxyB来完成和ProxyA类似的功能,会非常繁琐。有时候无法提前获知要代理的类有哪些,例如第三方框架Spring,要为你编写的类做代理,但是事先不知道有哪些类;只能在运行时确认。因此诞生了动态代理,来解决这些问题

2017-05-25 20:18:55 249

原创 代理模式

代理模式解决的问题:控制被代理对象的访问,简单来说就是在原有类的方法上增加一些行为。代理模式又分为静态代理和动态代理,静态代理是在编译期就确定如何修改方法行为,动态代理要在运行时决定。静态代理例如有类A:class A { void fun2() { do logic2; }}现在需求增加新的功能,要求A场景下调用fun2时向数

2017-05-25 17:37:55 174

转载 单例模式

单例模式大家并不陌生,也都知道它分为什么懒汉式、饿汉式之类的。但是你对单例模式的理解足够透彻吗?今天我带大家一起来看看我眼中的单例,可能会跟你的认识有所不同。下面是一个简单的小实例:[java] view plain copy//简单懒汉式  public class Singleton {            //单例

2017-05-23 16:15:45 191

转载 git rebase

转自:http://gitbook.liuhui998.com/4_2.htmlrebase假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。$ git checkout -b mywork origin现在我们在这个分支做一些修改,然后生成两个提交(commit).$ vi file.txt$ git c

2016-10-31 12:14:41 164

原创 字符编码

转自:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能

2016-10-25 12:17:03 190

原创 mysqldump导入导出数据

导出导出表结构和数据mysqldump -h 机器 -u 用户名 -p密码 数据库 表 --where="id=211">/Users/chendusheng/tmp/t.sql在where中仅写条件就可以了,不用再写select和表名。如果不加where条件,默认是导出全表的数据。仅导出数据加上-t选项,表示仅导出数据mysqldump -h 机器 -u 用户

2016-09-28 11:06:20 463

原创 python字符串替换

s='123{hh}'.format(hh='jjj')print(s)输出123jjj

2016-09-28 01:47:17 855

原创 python引入自己写的工具类

假设项目目录结构是:common--dateutils.pyscrip--report.py当我们在report.py中直接使用from dateutils import DateUtils会报找不到模块的错误:ImportError: No module named dateutils原因是因为common文件夹并不在python搜索module的路径中,

2016-09-28 01:25:37 5917

原创 使用pip安装MySQL-python模块

在python程序中连接mysql会用到import MySQLdb而MySQLdb是在MySQL-python这个模块中。在安装了pip后,可以使用pip install MySQL-python尝试安装,一般会碰到EnvironmentError: mysql_config not found这个错误。解决办法是1:安装mysqlwhich mysql如果安装了mysq

2016-09-27 23:36:54 37615 2

原创 Mac下设置vim语法高亮

一:终端进入 cd /usr/share/vim/二:sudo vim vimrc三:添加syntax enablesyntax on

2016-09-27 23:26:11 341

转载 Mac下使用brew

brew 又叫Homebrew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件, 只需要一个命令, 非常方便brew类似ubuntu系统下的apt-get的功能 阅读目录安装brew使用brew安装软件使用brew卸载软件使用brew查询软件其他brew命令 安装brewbrew 的官方网站: http://bre

2016-09-27 21:28:45 291

原创 mac下安装和使用pip

安装在Python2.7的安装包中,easy_install.py是默认安装的,而pip需要我们手动安装。执行命令:sudo easy_install pip即可安装pip使用安装excel模块sudo pip install xlrdsudo pip install xlwt

2016-09-27 20:38:01 22983

原创 Jetty-为web应用添加网页

为web应用添加内容以$JETTY_HOME作为Jetty根目录,启动jettycd $JETTY_HOMEjava -jar start.jar在启动jetty后,可以看到日志:webapps就是默认的web应用目录,你可以在其中存放你的网页。此时webapps下什么内容都没有,访问localhost:8080会返回404。添加静态页面在webapp

2016-09-25 17:23:33 1583

原创 Jetty安装和运行

安装在https://www.eclipse.org/jetty/download.html 下载适合的版本,解压zip包即可。在jetty根目录中有一个start.jar文件,运行该jar文件,即可启动jetty。运行jetty在jetty根目录中执行:java -jar start.jar即可启动jetty,jetty默认监听在8080端口。在浏览器中访问loc

2016-09-25 16:33:54 353

原创 linux信号研究

1,在linux下,父进程的信号处理函数能被子进程继承,如果在父进程设置了catch SIGCHLD的信号处理函数,那么如果子进程创建了子进程,叫做孙子进程,那么孙子进程的终止会由子进程捕捉。但如果子进程先于孙子进程终止,在孙子进程终止时,父进程不会感知到它,因为在子进程终止时,系统会自动将孙子进程的父进程设置为init进程。2,由终端产生的信号,如SIGINT(ctrl+C),会发送给和该终

2013-05-24 21:11:30 434

原创 fopen中文件的几种打开模式比较

r:只读.  w:只写,有create和truncate语义.  r+:update模式,可以读和写,要求文件必须存在,且没有truncate语义.读和写共用同一个指针位置,且如果读之前有写操作发生,必须调用fflush或者fseek等文件定位操作。比如有文件out.txt:cds 555 ccc.当以r+模式打开该文件并执行:FILE* pFile=fopen("out.

2013-05-24 12:29:03 2023

原创 linux的文件描述符集fd_set的实现方式

通过赋值语句可以在两个文件描述符集之间进行赋值,例如可以这样写:fd_set readset,tmpset; FD_ZERO(&readset); FD_ZERO(&tmpset); FD_SET(listener,&tmpset); readset=tmpset; select(maxfd+1,&readset,NULL,NULL); 那么显而易见,fd_set的实现方

2013-05-15 22:09:29 870

原创 CGI介绍

CGI的基本概念:CGI程序放置在服务器上,当客户发送http请求到服务器时,服务器会调用执行相应的CGI程序完成相应的功能,最终再将执行结果以html的形式返回给客户端。CGI程序的输入和输出:CGI程序的输入来自客户端的表单,当用户点击表单的submit后,会以get/post方式将表单数据放入http header后发往服务器,服务器fork产生子进程,并将客户数据通过pipe等

2013-05-15 20:47:54 511

Boost程序库完全开发指南

C++准标准库boost,每一个C++开发者必备工具箱,在boost上投入时间必将得到回报。

2013-02-06

C++标准程序库 高清版

C++标准程序库,有目录,高清版,是学习C++标准模板STL的必备书籍。

2013-02-05

空空如也

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

TA关注的人

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