0%

  1. DAO[data access object]数据访问对象

    DAO层对开发人员黑盒,由架构师设计封装。
    在很长一段时间内,我将它理解为对数据库的访问,后面随着项目的积累。
    发现自己的理解相对狭隘,对数据访问不仅仅指的是对数据库的访问。
    假如A系统调用B系统的服务获取数据,这时候A系统对B系统访问数据对象的封装也可以称为DAO。

  2. DTO[data transfer object]数据传输对象

    假设数据表中存在20个字段,但是在页面展示列表的时候,这20个字段显然都不会用到。
    我想对其中的5个字段进行展示,而且这5个字段展示的时候,也并不是数据库中他们原有的样子。
    还需要进行计算、截取、业务代码转名称 …..等等
    数据传输对象因此而被诞生,一是能提高数据传输的速度,二能隐藏后端表结构。

  3. PO[persistant object]持久层对象

    持久对象属性和数据库中的字段是一一对应的,数据库中的一条数据可以理解为一个持久对象。
    因ORM框架的广泛使用而被引入到 JavaEE 项目设计当中。

  4. BO[bussiness object]业务对象

    业务对象顾名思义是在业务处理中抽象出来的对象,里面除了get/set 方法外,也可以有对字段进行业务处理的方法。
    假设你要对一个班级进行业务处理,其中的学生、教师、甚至是桌椅板凳都是业务对象的组成部分。
    当然其中的学生、教室….都可以是和数据库对应的PO。

  5. VO[value object]值对象

    值对象也可以称做页面对象,如果称做页面对象,那门它所代表的将是整个页面展示层的对象。
    可以由需要的业务对象进行的换算转换而来。
    如果称呼他为值对象的话,那门他可以理解为存放业务对象的一个地方。
    假设锅碗瓢盆分别为对应的业务对象的话,那门整个碗柜就是一个值对象。

  6. POJO[plain ordiary java object] 简单java对象

    简单java对象应该是JavaEE世界里面最灵活的对象。
    在简单系统中,如果从数据库到页面展示都是POJO的话,它可以是DTO。
    如果从数据库中到业务处理中都是POJO的话,他也可以是BO。
    同样如果从数据库到整个页面的展示的话,它同样可以是VO。

小结:

各个数据对象之间的转换是相当灵活的,在项目中可以定义上述对象的全部和其中的几种类型,这取决与架构师和需求。
在大型项目中,架构师在项目初期的任务除了搭建起整个开发环境以外,定义在系统中流转的数据结构对象同样是重重之重。
这项工作需要许多项目的积累和长期对软件开发的思考,多实践,多思考,提供最合适的数据对象解决方法,方能展现架构师的魅力。

NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:

  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 “npm -v” 来测试是否成功安装。命令如下,出现版本提示表示安装成功:

1
2
$ npm -v
2.3.0

如果你安装的是旧版本的 npm,可以很容易得通过 npm 命令来升级,命令如下:

1
2
3
$ sudo npm install npm -g
/usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
npm@2.14.2 /usr/local/lib/node_modules/npm

如果是 Window 系统使用以下命令即可:

1
$ npm install npm -g
阅读全文 »

VirtualBox共享目录,建立软链接

  1. 关闭 VirtualBox。

  2. 将VirtualBox安装目录的路径加入系统环境变量PATH中。

  3. 打开命令行窗口,执行如下命令:

    1
    2
    VBoxManage setextradata {YOURVMNAME}
    VBoxInternal2/SharedFoldersEnableSymlinksCreate/{YOURSHAREFOLDERNAME} 1

    参数说明
    YOURVMNAME:为虚拟机中ubuntu系统的名
    YOURSHAREFOLDERNAME:为共享的目录名称

  4. “以管理者身份运行” VirtualBox 即可!

iptables命令可用于配置Linux的包过滤规则,常用于实现防火墙、NAT。咋一看iptables的配置很复杂,掌握规律后,其实用iptables完成指定任务并不难,下面我们通过具体实例,学习iptables的详细用法。

阅读全文 »

简介

参考了TC的很多文档,自己也整理了一篇配置记录。在实际使用过程中效果还不错,在此分享给大家以备参考。
环境:局域网规模不是很大40多台机器。 NAT共享上网(内网:eth0 外网:eth2)
CBQ是通过硬件的闲置时间来计算队列,硬件不同,效果也不同,对于比较大的网络使用HTB比较好。以下限制上传和下载的方法可以写成脚本,通过mrtg发现流量的异常情况,然后通过ntop查处是谁在干坏事,最后用写好的tc脚本限制他的流量,避免影响其他人的网络使用。

阅读全文 »

  1. ** 需求 **

将192.168.3.195:80 映射到192.168.3.193:80,即访问192.168.3.195:80,得到192.168.3.193:80的结果,实现linux的路由。

  1. ** 实现 **
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash

#打开转发功能
echo "1" > /proc/sys/net/ipv4/ip_forward

/sbin/iptables -F -t filter

#清空iptables
/sbin/iptables -F -t nat

#去192.168.3.193的一条路
/sbin/iptables -t nat -A PREROUTING -d 192.168.3.195 -p tcp --dport 80 -j DNAT --to-destination 192.168.3.193:80

#返回的时候的一条路,ip传输要有去有回才能连通
/sbin/iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o eth0 -j SNAT --to 192.168.3.195

#用2网段访问的时候的回路
/sbin/iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j SNAT --to 192.168.3.195

#用0网段访问的时候的回路
/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to 192.168.3.195

回路的那一条,或者只用下面这一句:
iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -o eth0 -j SNAT --to 192.168.3.195 或者
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.168.3.195把193上的80端口打开

  1. ** 测试 **
    在192.168.3.195上访问 192.168.3.195:80看到 195的apache主页,因为在本机上访问,没有走PREROUTING这条链。在其他主机上访问192.168.3.195:80 返回193的apache主页,路线为PREROUTING–>FORWARD–>PSOTROUTING.

简介

iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。

参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。
阅读全文 »

错误原因之一很有可能是你的脚本文件是DOS格式的, 即每一行的行尾以\r\n来标识, 其ASCII码分别是0x0D, 0x0A.可以有很多种办法看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的。

  1. vi filename然后用命令:set ff?可以看到dos或unix的字样. 如果的确是dos格式的, 那么你可以用set ff=unix把它强制为unix格式的, 然后存盘退出. 再运行一遍看.

  2. joe filename如果是DOS格式的, 那么行尾会有很多绿色的^M字样出现. 你也可以用上述办法把它转为UNIX格式的.

  3. od -t x1 filename如果你看到有0d 0a 这样的字符, 那么它是dos格式的, 如果只有0a而没有0d, 那么它是UNIX格式的, 同样可以用上述方法把它转为UNIX格式的.

转换不同平台的文本文件格式可以用

  1. unix2dos或dos2unix这两个小程序来做. 很简单. 在djgpp中这两个程序的名字叫dtou和utod, u代表unix, d代表dos
  2. 也可以用sed 这样的工具来做:
1
2
$ sed 's/^M//' filename > tmp_filename
$ mv -f tmp_filename filename

来做说明:^M并不是按键shift + 6产生的^和字母M, 它是一个字符, 其ASCII是0x0D, 生成它的办法是先按CTRL+V, 然后再回车(或CTRL+M)

简介

用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

参数说明

使用格式

$ tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ] [ -s snaplen ] [ -wfile ] [ expression ]

抓包选项

1
2
3
4
5
6
7
8
9
10
11
12
13
-c:指定要抓取的包数量。注意,是最终要获取这么多个包。例如,指定"-c 10"将获取10个包,但可能已经 处理了100个包,
只不过只有10个包是满足条件的包。
-i interface:指定tcpdump需要监听的接口。若未指定该选项,将从系统接口列表中搜寻编号最小的已配置
好的接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo),一旦找到第一个符合条件的接
口,搜寻马上结束。可以使用'any'关键字表示所有网络接口。
-n:对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。
-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名。
-N:不打印出host的域名部分。例如tcpdump将会打印'nic'而不是'nic.ddn.mil'。
-P:指定要抓取的包是流入还是流出的包。可以给定的值为"in"、"out"和"inout",默认为"inout"。
-s len:设置tcpdump的数据包抓取长度为len,如果不设置默认将会是65535字节。对于要抓取的数据包较大
时,长度设置不够可能会产生包截断,若出现包截断,输出行中会出现"[|proto]"的标志(proto实际会显示
为协议名)。但是抓取len越长,包的处理时间越长,并且会减少tcpdump可缓存的数据包的数量,从而会导致
数据包的丢失,所以在能抓取我们想要的包的前提下,抓取长度越小越好。

输出选项

1
2
3
4
5
6
7
-e:输出的每行中都将包括数据链路层头部信息,例如源MAC和目标MAC。
-q:快速打印输出。即打印很少的协议相关信息,从而输出行都比较简短。
-X:输出包的头部数据,会以16进制和ASCII两种方式同时输出。
-XX:输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细。
-v:当分析和打印的时候,产生详细的输出。
-vv:产生比-v更详细的输出。
-vvv:产生比-vv更详细的输出。

其他功能性选项

1
2
3
4
5
-D:列出可用于抓包的接口。将会列出接口的数值编号和接口名,它们都可以用于"-i"后。
-F:从文件中读取抓包的表达式。若使用该选项,则命令行中给定的其他表达式都将失效。
-w:将抓包数据输出到文件中而不是标准输出。可以同时配合"-G time"选项使得输出文件每time秒就自动切
换到另一个文件。可通过"-r"选项载入这些文件以进行分析和打印。
-r:从给定的数据包文件中读取数据。使用"-"表示从标准输入中读取。
阅读全文 »

简介

很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以以多种格式去打印,也可以使用命令设置固定的格式。在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间(UTC)1970年1月1日0时0分0秒起流逝的秒数。

参数说明

1
2
3
4
5
-d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
-u:显示GMT;
--help:在线帮助;
--version:显示版本信息。
阅读全文 »