Spring AOP动态代理初学

所谓AOP,就是相对于OOP(Object Oriented Programming)面向对象编程的说法,有些人喜欢叫面向切面编程,有些人喜欢叫做面向方面,事实上这两个都是指同一个东西,只是叫法不同。 

 
我们传统的编程都是面向对象,就是说每个类都有它实际的意义。而面向切面略有不同,它在面向对象的基础上扩展了一下,它编程的时候不是先考虑的一个具体对象(比如用户类),而是先考虑的对象的行为或者功能。这个不是编程方法的不同,而是编程思维的转变。 
 
动态代理是实现AOP的一种方式,Spring缺省使用J2SE 动态代理(dynamic proxi[……]

继续阅读

Spring实现数据库读写分离

借助于Spring框架在2.0.1之后提供的AbstractRoutingDataSource可以实现动态的选择数据源datasource,下面先举一个最简单的例子(可以参考这个链接):
 
1. 首先新建一个Catalog VO对象的DAO(见代码1),它继承了SimpleJdbcDaoSupport,JdbcDaoSupport需要注入一个DataSource,同时也提供了操作模板JdbcTemplate。添加一个方法用于获取所有的“货物Item”。货物Iteam是一个POJO类(见代码2)。
 
代码1:
import jav[......]<p class="read-more"><a href="http://neoremind.com/2011/06/spring%e5%ae%9e%e7%8e%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb/">继续阅读</a></p>

MySQL主从同步

mysql 数据库的主从同步主要依赖Replication 线程 .   

Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave)。在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master 端。 
 
要实现 MySQL 的 Replication ,首先必须打开 Master 端的Binary Log(mysql-bin.xxx[……]

继续阅读

一个DBA对于开发人员使用MySQL的tips

刚刚入职不久,一个陪伴项目组走过3年的DBA离职,在最后的一天给我们培训了下,下面是记录的一些要点,MySQL的使用、表设计学问还是很大的,以后还会陆续学习数据库部分的相关知识。
 
1 insert要写字段名,不能光values,避免库表结构变化 
 
2 不要使用select *,写出确切字段,性能考虑,减少IO,MYSQL优化
 
3 尽量少用联表查询
 
4 不能使用联表更新,尽量少用load data
 
5 数据约束尽量由程序保证
 
6 大数据量排序等操作最好由程序完成
 

[……]

继续阅读

slf4j——A better choice

 

SLF4J来源于log4j项目,英文全称是 Simple Logging  Facade for Java ,官方对这个项目的功能描述如下

The Simple Logging Facade for Java or (SLF4J) serves as a simple facade or abstraction for various logging frameworks, e.g. java.util.logging, log4j and logback, allowing the end-user to plug in the desired logging[……]

继续阅读

从”好友档案”说nginx与长连接、短连接

 最近人人流行这么一个应用“好友档案”,但是这个很火的app用的人很多,确总是在白天高峰时间出现nginx 504 gateway timeout错误页面,究竟为什么呢?带着问题,就顺便补习下web server以及长连接、短连接的相关知识吧。

 
Why 504 gateway timeout?
 
首先介绍一下大明顶顶的nginx。Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SM[……]

继续阅读

万恶的GFW

万恶的GFW,封了我的IP,godaddy换ip又好麻烦,独立ip属于被封锁的ip段,也不好用,neoremind只能过着被墙的日子了。

今天w3c的mike来百度演讲有关HTML5,被告知“U CANT ACCESS TWITTER IN CHINA!”的时候,尽然淡定的说"YE, I KNOW GFW",What a fucking day!GFW你亮了,已经在世界人民的心中站稳脚跟了。

喷子到此为止,不多说,不必说,默默的逃离这局域网的束缚。

 

— 纪念帖

悼念我曾经光明正大的日子

 

 

[……]

继续阅读

md5sum验证文件完整性

 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相 同的报文摘要的可能性是非常非常之小的。

在Linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。
 
1、使用md5sum来产生指[……]

继续阅读

SEO利器——动态页面静态化的方法

SEO有个很严肃的问题,就是关于动态页面与静态页面的问题。搜索引擎Spider总是喜欢.html后缀的URL,因为它看起来稳定像是个老老实实的静态的东西,而像.action?param1=xx&param2=yyy或者任何以jsp,asp,php等应用动态网页技术的URL,spider貌似不是很喜欢,这个问题Google同学比百度同学在态度上貌似要好些(无从求证,不耐的话直接忽略此句)。
 
那么在构建网站的时候我们会使用各种动态请求,甚至Ajax技术(后者更容易让搜索引擎Spider迷惑,因为它会使用javascript动态改变我们网站的DOM结构,Spider会直接忽[……]

继续阅读

eval命令妙用——变量嵌套替换

 eval命令在Linux下的应用非常广泛,在写脚本的时候遇到一个变量嵌套的问题,用eval迎刃而解,略试不爽啊。

var1="hello"
i=1  #有时候i需要放在循环里,所以实际应用中有意义
what=var${i}
temp=what
echo $temp   #打印出what
eval temp=$(echo $$what)
echo $temp #打印出hello

究其原因在于eval替换表达式中的变量再做运算

 

更多eval用法见下:

1、eval会把赋值语句中双引号之间的内容直接赋给‘=&[……]

继续阅读

Linux自动下发送HTML格式并带附件的邮件

引:

进入BEIDOU组的第一个项目就是实现一个统计报表自动发送邮件的应用,利用Shell脚本来做,期间回顾了awk,sed等文本过滤工具,crontab计划任务,还学会了在Linux下发送HTML邮件附带MS WORD/EXCEL/PPT格式附件的方法,在春节前圆满的完成了任务也算是可以踏踏实实过年了,活虽然小但毕竟可以算作一个小Milestone 🙂
 

遇到问题:

统计报表实现基本思想,按处理流程顺序
1) 利用scp下载远程线上机器的Log日志文件  
2) 利用awk,sed,sort等Linux下命令过滤并且分析日志,生成基本的模板(templat[……]

继续阅读

开发工程师——我不是IT民工

关于开发工程师的一点思考,个人感觉写的非常到位,转自Dreamer’s blog,版权归Dreamer所有,转载请注明出处。

——————– 正文 ——————–

按:这几天我一直在写这篇东西,本来是胸有成竹,没想到后来越写越发现自己在这个题目下有太多话想说,而以我现在的能力又不能很好地概括总结,以至于越写越长,文章结构也变得混乱,到后来修改的时候每次都要考虑好久才能下笔,所以决定拆成两部分来发,以便阅读。这篇写得我心力交瘁,质量不算好,凑合着看吧。

 
同样是写程序,不同的岗位工作内容不一样,对程序质量以及工程师[……]

继续阅读

Java中的Annotation注解

一、初识Annotation注解

下面提到的这些注解如果你细心的话是肯定有印象的,我们就从这说起,Java5之后起默认的三个annotation类型。

  • @Override 只能用在方法之上的,用来告诉别人这一个方法是改写父类的。
  • @Deprecated 建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上。
  • @SuppressWarnings 这一个类型可以来暂时把一些警告信息消息关闭。

这些默认的注解很简单,肯定不能满足各个程序的需要,所以我们需要扩展注解。

二、定制自己的注解

首先我们要了解,自定义注解的语法。[……]

继续阅读

使用About.me打造个性的网络名片

不知道什么时候开始慢慢关注互联网这个生态系统里的方方面面,从最初月光博客CNBeta,到现在各处搜罗好的互联网信息,咨询,评论博客,抑或许是看了今年北美最流行的电影《社交网络》,到自己也开了创建了一个网站自己也即将踏入一家互联网公司,种种事情都让我对互联网这块炙手可热的大山芋多了几分热情,只有这里能够让那么多草根像运动员那样十年磨一剑之后一夜成名,神奇的土地每天都孕育着新的Point带来的新产品。

步入正题,随着社交化SNS网站的流行,如何向别人更好的介绍自己呢,About Me网站就像是一个网络名片,打开about.me/你的名字,就可以看到你的网络名片,你可以更换背景图,上传头像,[……]

继续阅读

设计模式学习总结-策略模式

定义

它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

解析

  1. 策略模式中体现了两个非常基本的面向对象设计的基本原则:封装变化的概念;编程中使用接口,而不是对接口实现。
  2. 策略模式使开发人员能够开发出由许多可替换的部分组成的软件,并且各个部分之间是弱连接的关系(聚集)。弱连接的特性使软件具有更强的可扩展性,易于维护;更重要的是,它大大提高了软件的可重用性。
  3. 同时策略模式还体现了开放封闭原则:对扩展开放,对修改封闭。

UML图

代码示例

// 定义了所有支持的算法的公共接口
public inter[......]<p class="read-more"><a href="http://neoremind.com/2010/12/strategy_design_pattern/">继续阅读</a></p>