- 博客(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引入自己写的工具类
假设项目目录结构是: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 2024
原创 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
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人