子瞻的技术空间

收雨集露,厚积薄发
 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔档案

  • 2012年3月 (1)
  • 2010年7月 (1)
  • 2010年1月 (1)
  • 2009年12月 (2)
  • 2009年10月 (1)

文章档案

  • 2012年3月 (1)
  • 2011年8月 (1)
  • 2010年7月 (1)
  • 2010年2月 (1)

搜索

  •  

最新评论

  • 1. re: JAVA 连接 Https Server, 用户认证后获取网页内容
  • 评论内容较长,点击标题查看
  • --clausewitzer
  • 2. re: ABC of Extensibility && Scalability
  • 对哦,不但可以成比例扩展,还可以成比例缩小,谢谢~@honeyjava
  • --柴子瞻
  • 3. re: ABC of Extensibility && Scalability
  • 后者叫可伸缩性
  • --honeyjava

阅读排行榜

  • 1. 解决MYSQL出现Can't create/write to file 'C:\WINDOWS\TEMP\#*.MYD' (Errcode: 17)一类问题(3051)
  • 2. ZZ java获得CPU使用率,系统内存,虚拟机内存等情况(不用JNI or Sigar)(1838)
  • 3. 弄清楚脏读、不可重复的读和虚读(941)
  • 4. ABC of Extensibility && Scalability(737)
  • 5. Static Import since 1.5(288)

评论排行榜

  • 1. ABC of Extensibility && Scalability(2)
  • 2. 弄清楚脏读、不可重复的读和虚读(0)
  • 3. ZZ java获得CPU使用率,系统内存,虚拟机内存等情况(不用JNI or Sigar)(0)
  • 4. 解决MYSQL出现Can't create/write to file 'C:\WINDOWS\TEMP\#*.MYD' (Errcode: 17)一类问题(0)
  • 5. Dump抓取(0)

Powered by: 博客园
模板提供:沪江博客
BlogJava | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

2012年3月28日

Dump抓取
windbg目录,采用工具cdb生成dump文件:cdb -pv -pn 进程名 -c ".dump /m c:/文件名.dmp;q"。
例如:
cdb -pv -pn explorer.exe -c ".dump /m c:/explorer.dmp;q"
posted @ 2012-03-28 14:24 柴子瞻 阅读(217) | 评论 (0) | 编辑 收藏
 

2010年7月3日

Static Import since 1.5
In order to access static members, it is necessary to qualify references with the class they came from. For example, one must say:
double r = Math.cos(Math.PI * theta);
In order to get around this, people sometimes put static members into an interface and inherit from that interface. This is a bad idea. In fact, it's such a bad idea that there's a name for it: the Constant Interface Antipattern (see Effective Java Item 17). The problem is that a class's use of the static members of another class is a mere implementation detail. When a class implements an interface, it becomes part of the class's public API. Implementation details should not leak into public APIs.

The static import construct allows unqualified access to static members without inheriting from the type containing the static members. Instead, the program imports the members, either individually:

import static java.lang.Math.PI;
or en masse:
import static java.lang.Math.*;

Once the static members have been imported, they may be used without qualification:
double r = cos(PI * theta);
The static import declaration is analogous to the normal import declaration. Where the normal import declaration imports classes from packages, allowing them to be used without package qualification, the static import declaration imports static members from classes, allowing them to be used without class qualification.

So when should you use static import? Very sparingly! Only use it when you'd otherwise be tempted to declare local copies of constants, or to abuse inheritance (the Constant Interface Antipattern). In other words, use it when you require frequent access to static members from one or two classes. If you overuse the static import feature, it can make your program unreadable and unmaintainable, polluting its namespace with all the static members you import. Readers of your code (including you, a few months after you wrote it) will not know which class a static member comes from. Importing all of the static members from a class can be particularly harmful to readability; if you need only one or two members, import them individually. Used appropriately, static import can make your program more readable, by removing the boilerplate of repetition of class names.

posted @ 2010-07-03 21:12 柴子瞻 阅读(288) | 评论 (0) | 编辑 收藏
 

2010年1月13日

ABC of Extensibility && Scalability

 

我想计算机专业的兄弟们对标题的这两个词恐怕都不陌生吧!我们会在很多文档中找出这两个词,一般是形容某某系统的优点,或者是形容某某架构的优势等等。甚至有的时候我们自己会说我们做的项目有很好的“Extensibility”和“Scalability”。

更有趣的是,这两个词经常会出现在描述同一事物上,而且单词会紧挨着。我估计以英语为母语的人会明白这二者到底指的是什么意思,但是咱们中国的IT人士是否能明白二者到底是什么意思呢?

乍一翻译过来,Extensibility是“可扩展性”,而Scalability也可以翻译成“可扩展性”或者“规模可扩展性”。反正我是这么翻译的。这么一看,这二者不意思差不多嘛!那干嘛还用两个词阿?写一个算了。

而实际并非如此,虽然Extensibility和Scalability翻译成中文很相近,但是二者却有着截然不同的内涵。

Extensibility, 表明系统设计的原则,考虑到了将来对系统实现的更改和增强。如果一个系统有很好的Extensibility,那么当对该系统某部分进行功能的添加或修改时,几乎不会影响到系统现有的其他部分。

Scalability, 表示的是当对一个系统的任务量或工作量增加时,该系统能够用一个优雅的方式来应对,而且达到了很好的效果。比如,当一个系统在增加了硬件资源之后,它的性能随之也能够成比例的提升,这就表明这个系统有很好的Scalability。

通过上面的解释,我想你差不多能明白二者到底表明什么意思了吧!虽然都有“扩展性”的意思,但是表现的方面可是不相同的。

posted @ 2010-01-13 23:19 柴子瞻 阅读(737) | 评论 (2) | 编辑 收藏
 

2009年12月10日

弄清楚脏读、不可重复的读和虚读
脏读 dirty reads:当事务读取还未被提交的数据时,就会发生这种事件。举例来说:Transaction 1 修改了一行数据,然后 Transaction 2 在 Transaction 1 还未提交修改操作之前读取了被修改的行。如果 Transaction 1 回滚了修改操作,那么 Transaction 2 读取的数据就可以看作是从未存在过的。     
不可重复的读 non-repeatable reads:当事务两次读取同一行数据,但每次得到的数据都不一样时,就会发生这种事件。举例来说:Transaction 1 读取一行数据,然后 Transaction 2 修改或删除该行并提交修改操作。当 Transaction 1 试图重新读取该行时,它就会得到不同的数据值(如果该行被更新)或发现该行不再存在(如果该行被删除)。     
虚读 phantom read:如果符合搜索条件的一行数据在后面的读取操作中出现,但该行数据却不属于最初的数据,就会发生这种事件。举例来说:Transaction 1 读取满足某种搜索条件的一些行,然后 Transaction 2 插入了符合 Transaction 1 的搜索条件的一个新行。如果 Transaction 1 重新执行产生原来那些行的查询,就会得到不同的行。


事务场景是这样的:
对于同一个银行帐户A内有200元,甲进行提款操作100元,乙进行转帐操作100元到B帐户。如果事务没有进行隔离可能会并发如下问题:
1、第一类丢失更新:首先甲提款时帐户内有200元,同时乙转帐也是200元,然后甲乙同时操作,甲操作成功取走100元,乙操作失败回滚,帐户内最终为200元,这样甲的操作被覆盖掉了,银行损失100元。
2、脏读:甲取款100元未提交,乙进行转帐查到帐户内剩有100元,这是甲放弃操作回滚,乙正常操作提交,帐户内最终为0元,乙读取了甲的脏数据,客户损失100元。
3、虚读:和脏读类似,是针对于插入操作过程中的读取问题,如丙存款100元未提交,这时银行做报表进行统计查询帐户为200元,然后丙提交了,这时银行再统计发现帐户为300元了,无法判断到底以哪个为准?
大家好像觉得统计这个东西肯定是时时更新的,这种情况很正常;但是如果统计是在一个事务中的时候就不正常了,比如我们的一个统计应用需要将统计结果分别输出到电脑屏幕和远程网络某台计算机的磁盘文件中,为了
提高性能和用户响应我们分成2个线程,这时先完成的和后完成的统计数据就可能不一致,我们就不知道以哪个为准了。
4、不可重复读:甲乙同时开始都查到帐户内为200元,甲先开始取款100元提交,这时乙在准备最后更新的时候又进行了一次查询,发现结果是100元,这时乙就会很困惑,不知道该将帐户改为100还是0。
和脏读的区别是,脏读是读取前一事务未提交的脏数据,不可重复读是重新读取了前一事务已提交的数据。
5、第二类丢失更新:是不可重复读的一种特例,如上,乙不做第二次查询而是直接操作完成,帐户内最终为100元,甲的操作被覆盖掉了,银行损失100元。感觉和第一类丢失更新类似。


在多个事务并发做数据库操作的时候,如果没有有效的避免机制,就会出现种种问题。大体上有三种问题,归结如下:
1、丢失更新
如果两个事务都要更新数据库一个字段X,x=100
事务A             事务B
读取X=100    
                  读取X=100
写入x=X+100
                  写入x=X+200
事务结束x=200
                  事务结束x=300
最后x==300
这种情况事务A的更新就被覆盖掉了、丢失了。
丢失更新说明事务进行数据库写操作的时候可能会出现的问题。
2、不可重复读
一个事务在自己没有更新数据库数据的情况,同一个查询操作执行两次或多次的结果应该是一致的;如果不一致,就说明为不可重复读。
还是用上面的例子
事务A             事务B
读取X=100    
                  读取X=100
读取X=100    
                  写入x=X+100
读取X=200    
事务结束x=200
                  事务结束x=200
这种情况事务A多次读取x的结果出现了不一致,即为不可重复读。
再有一情况就是幻影
事务A读的时候读出了15条记录,事务B在事务A执行的过程中删除(增加)了1条,事务A再读的时候就变成了14(16)条,这种情况就叫做幻影读。
不可重复读说明了做数据库读操作的时候可能会出现的问题。
3、脏读(未提交读)
防止一个事务读到另一个事务还没有提交的记录。
如:
事务A             事务B
                  读取X=100
                  写入x=X+100
读取X=200    
                  事务回滚x=100
读取X=100    
事务结束x=100

x锁 排他锁 被加锁的对象只能被持有锁的事务读取和修改,其他事务无法在该对象上加其他锁,也不能读取和修改该对象
s锁 共享锁 被加锁的对象可以被持锁事务读取,但是不能被修改,其他事务也可以在上面再加s锁。
封锁协议:
一级封锁协议:
在事务修改数据的时候加x锁,直到事务结束(提交或者回滚)释放x锁。一级封锁协议可以有效的防止丢失更新,但是不能防止脏读不可重复读的出现。
二级封锁协议:
在一级封锁的基础上事务读数据的时候加s锁,读取之后释放。二级封锁协议可以防止丢失更新,脏读。不能防止不可重复读。
三级封锁协议:
在一级封锁的基础上事务读数据的时候加s锁,直到事务结束释放。二级封锁协议可以防止丢失更新,脏读,不可重复读。

posted @ 2009-12-10 18:22 柴子瞻 阅读(941) | 评论 (0) | 编辑 收藏
 

2009年12月1日

ZZ java获得CPU使用率,系统内存,虚拟机内存等情况(不用JNI or Sigar)
     摘要: 在Java中,可以获得总的物理内存、剩余的物理内存、已使用的物理内存等信息,下面例子可以取得这些信息,并且获得在Windows下的内存使用率。      首先编写一个MonitorInfoBean类,用来装载监控的一些信息,包括物理内存、剩余的物理内存、已使用的物理内存、内存使用率等字段,该类的代码如下: view plaincopy to clipbo...  阅读全文
posted @ 2009-12-01 22:14 柴子瞻 阅读(1838) | 评论 (0) | 编辑 收藏
 

2009年10月28日

解决MYSQL出现Can't create/write to file 'C:\WINDOWS\TEMP\#*.MYD' (Errcode: 17)一类问题
今天一个做项目的时候,查看数据库结构时候出现这个问题,刚开始以为写入问题,试了半天,没弄好,查下资料,网上关于原因的说法是:

    1, C:\WINDOWS\TEMP文件夹权限不够,至少也要给出USERS组的可读可写权限; (给出权限)
    2, C:\WINDOWS\TEMP文件夹的磁盘满了,文件写不进去了;(清空TEMP文件夹)
    3, 你的服务器装了MCAFEE杀毒软件,它的访问保护禁止了TEMP文件可写;(修改访问保护设置)
    4, 还是MCAFEE杀毒软件的问题,解决步骤:按访问扫描属性-所有进程-检测项-扫描文件(在写入磁盘时)勾去掉,OK.

最后呢,发现Temp文件夹已经有8.8M了,也不管有是不是Temp的磁盘满的问题,删了能删的临时文件。幸运的是在接下来的几天里,数据库再也没有出现这类问题了,暂时就当作解决了吧
posted @ 2009-10-28 23:26 柴子瞻 阅读(3051) | 评论 (0) | 编辑 收藏
 
仅列出标题