===========================================================
===========================================================
原:Mozy:不错的在线备份解决方案
herosoft
发表于:2010.03.15 20:59
::分类:
(
网赚
)
::阅读:(31次)
::
评论
(0)
===========================================================
===========================================================
转:用HttpClient来模拟浏览器GET POST - jaddy0302
一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交
一些数据等等。所访问的这些页面有的仅仅是一些普通的页面,有的需要用户登录后方可使用,或者需要认证以及是一些通过加密方式传输,例如HTTPS。目前
我们使用的浏览器处理这些情况都不会构成问题。不过你可能在某些时候需要通过程序来访问这样的一些页面,比如从别人的网页中“偷”一些数据;利用某些站点
提供的页面来完成某种功能,例如说我们想知道某个手机号码的归属地而我们自己又没有这样的数据,因此只好借助其他公司已有的网站来完成这个功能,这个时候
我们需要向网页提交手机号码并从返回的页面中解析出我们想要的数据来。如果对方仅仅是一个很简单的页面,那我们的程序会很简单,本文也就没有必要大张旗鼓
的在这里浪费口舌。但是考虑到一些服务授权的问题,很多公司提供的页面往往并不是可以通过一个简单的URL就可以访问的,而必须经过注册然后登录后方可使
用提供服务的页面,这个时候就涉及到COOKIE问题的处理。我们知道目前流行的***页技术例如ASP、JSP无不是通过COOKIE来处理会话信息
的。为了使我们的程序能使用别人所提供的服务页面,就要求程序首先登录后再访问服务页面,这过程就需要自行处理cookie,想想当你用
java.net.HttpURLConnection来完成这些功能时是多么恐怖的事情啊!况且这仅仅是我们所说的顽固的WEB服务器中的一个很常见的
“顽固”!再有如通过HTTP来上传文件呢?不需要头疼,这些问题有了“它”就很容易解决了!
我们不可能列举所有可能的顽固,我们会针对几种最常见的问题进行处理。当然了,正如前面说到的,如果我们自己使用
java.net.HttpURLConnection来搞定这些问题是很恐怖的事情,因此在开始之前我们先要介绍一下一个开放源码的项目,这个项目就是
Apache开源组织中的httpclient,它隶属于Jakarta的commons项目,目前的版本是2.0RC2。commons下本来已经有一
个net的子项目,但是又把httpclient单独提出来,可见http服务器的访问绝非易事。
Commons-httpclient项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。通过它可以
让原来很头疼的事情现在轻松的解决,例如你不再管是HTTP或者HTTPS的通讯方式,告诉它你想使用HTTPS方式,剩下的事情交给
httpclient替你完成。本文会针对我们在编写HTTP客户端程序时经常碰到的几个问题进行分别介绍如何使用httpclient来解决它们,为了
让读者更快的熟悉这个项目我们最开始先给出一个简单的例子来读取一个网页的内容,然后循序渐进解决掉前进中的所形侍狻?/font> 查看全文
herosoft
发表于:2010.03.06 15:55
::分类:
( )
::阅读:(68次)
::
评论
(0)
===========================================================
===========================================================
转:linux tcpdump抓包方法
对应的linux平台下抓包方法
抓整个包:
#tcpdump -X -s 0 host 192.168.1.12 and port xxxx
#tcpdump -X -s 0 host 192.168.1.12 and dst port xxx
抓68字节:
#tcpdump -X host 192.168.1.12
对应的端口抓包:
#tcpdump -X udp port 1812
查看全文
herosoft
发表于:2010.03.06 15:38
::分类:
(
网络技术
)
::阅读:(51次)
::
评论
(0)
===========================================================
===========================================================
转载:Oracle中查找和删除重复记录方法简介
平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录。
下面总结一下几种查找和删除重复记录的方法(以表CZ为例):
查看全文
herosoft
发表于:2010.03.06 14:01
::分类:
(
数据库技术
)
::阅读:(41次)
::
评论
(0)
===========================================================
===========================================================
转:Java添加水印(图片水印,文字水印)
JAVA/JSP在图片中添加文字或在图片中添加图片.
查看全文
herosoft
发表于:2010.03.06 13:33
::分类:
( )
::阅读:(56次)
::
评论
(0)
===========================================================
===========================================================
synchronized关键字 - [JAVA心得]
Java对多线程的支持与同步机制深受大家的喜爱,似乎看起来使用了synchronized关键字就可以轻松地解决多线程共享数据同步问题。到底如何?――还得对synchronized关键字的作用进行深入了解才可定论。
总的说来,synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class literals(类名称字面常量)身上。
在进一步阐述之前,我们需要明确几点:
A.无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象,而不是把一段代码或函数当作锁――而且同步方法很可能还会被其他线程的对象访问。
B.每个对象只有一个锁(lock)与之相关联。
C.实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。
查看全文
herosoft
发表于:2010.03.05 20:25
::分类:
( )
::阅读:(43次)
::
评论
(0)
===========================================================
===========================================================
Starvation in java
Continued the article of Livelock in java, now I will demonstrate a example of starvation in java.
Starvation and livelock are much less common a problem than deadlock, but are still problems that every designer of concurrent software is likely to encounter.
Starvation
Starvation describes a situation where a thread is unable to gain regular access to shared resources and is unable to make progress. This happens when shared resources are made unavailable for long periods by "greedy" threads. For example, suppose an object provides a synchronized method that often takes a long time to return. If one thread invokes this method frequently, other threads that also need frequent synchronized access to the same object will often be blocked.
查看全文
herosoft
发表于:2010.03.05 16:41
::分类:
( )
::阅读:(37次)
::
评论
(0)
===========================================================
===========================================================
转:JDK1.5新语法
1 - 泛性编程
ArrayList<String> list = new ArrayList<String>();
list.add(new String("Hello!"));
System.out.println(list.get(0));
2 - 自动装箱/拆箱
ArrayList list = new ArrayList();
Integer number = new Integer(10); //先要把数字弄进包装类
list.add(number); 查看全文
herosoft
发表于:2010.03.05 16:35
::分类:
( )
::阅读:(35次)
::
评论
(0)
===========================================================
===========================================================
转载:内连接与外连接的区别
(一)内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的
列值。内连接分三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结
果中列出被连接表中的所有列,包括其中的重复列。
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的
列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选
择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
例,在选择列表中删除authors 和publishers 表中重复列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
查看全文
herosoft
发表于:2010.03.04 22:21
::分类:
(
数据库技术
)
::阅读:(48次)
::
评论
(0)
===========================================================
===========================================================
JPA是什么?
Java Persistence API
JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用的对象持久化的开发工作;其二,Sun希望整合对ORM技术,实现天下归一。
JPA由EJB 3.0软件专家组开发,作为JSR-220实现的一部分。但它不囿于EJB 3.0,你可以在Web应用、甚至桌面应用中使用。JPA的宗旨是为POJO提供持久化标准规范,由此可见,经过这几年的实践探索,能够脱离容器独立运行,方便开发和测试的理念已经深入人心了。目前Hibernate 3.2、TopLink 10.1.3以及OpenJPA都提供了JPA的实现。
JPA的总体思想和现有Hibernate、TopLink,JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:
ORM映射元数据,JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
JPA 的API,用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
查询语言,这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
查看全文
herosoft
发表于:2010.03.04 18:40
::分类:
( )
::阅读:(55次)
::
评论
(0)
===========================================================
===========================================================
Livelock in java
Recently I read the chapter of concurrency in the book of <<The Java Tutorial>>. It mentions the concurency problems of starvation and livelock, which are much less common a problem than deadlock, but problems that every designer of concurrent software is likely to encounter.
Then I tried to find out some code snippet example of starvaton and livelock, but unexpectedly, there is not any code snippet at all from the top2 result pages returned by goggle and baidu search engine. Therefore, I have to implement them all by myself. Here is the reference and code example.
http://java.sun.com/docs/books/tutorial/essential/concurrency/starvelive.html
Livelock
A thread often acts in response to the action of another thread. If the other thread's action is also a response to the action of another thread, then livelock may result. As with deadlock, livelocked threads are unable to make further progress. However, the threads are not blocked — they are simply too busy responding to each other to resume work. This is comparable to two people attempting to pass each other in a corridor: Alphonse moves to his left to let Gaston pass, while Gaston moves to his right to let Alphonse pass. Seeing that they are still blocking each other, Alphone moves to his right, while Gaston moves to his left. They're still blocking each other, so...
查看全文
herosoft
发表于:2010.03.03 21:52
::分类:
( )
::阅读:(34次)
::
评论
(0)
===========================================================
===========================================================
原:Dell春节优惠券活动(新年特惠)
- 2010.2.25前在Dell官网在线购买以下Vostro产品,消费者如果使用优惠券代码(请联系我:herosoft_117@hotmail.com或qq:88970658),即可获得RMB300额外现金优惠:
- Vostro成就V13笔记本指定机型T520289CN
- Vostro成就1520笔记本指定机型T520284CN
- Vostro成就1720笔记本指定机型T520255CN,T520256CN
- Dell春节优惠券活动(新年特惠)
http://www1.ap.dell.com/cn/zh/business/advertised_cny/fs.aspx?refid=advertised_cny&s=bsd&cs=cnbsd1 - Dell春节优惠券活动(新年特惠)
http://www1.ap.dell.com/content/topics/promo.aspx/cn%2fzh%2fcoupon?c=cn&cs=cnbsd1&l=zh&s=bsd
herosoft
发表于:2010.02.14 17:52
::分类:
(
程序人生
)
::阅读:(110次)
::
评论
(0)
===========================================================
===========================================================
f4v格式的转化与播放
F4V格式是什么格式_我已解决
解决方法:
Total Video Converter 提供视频文件转换的终极解决方案,它能够读取和播放各种视频和音频文件,并且将他们转换为流行的媒体文件格式。它内置一个强大的转换引擎,所以你能快速的进行文件格式转换。而且对目前来说比较新颖的F4V格式也追加了支持.
下载地址:
f4v格式转化器
安装与破解请看本人上篇文章!
功能:
f4v格式 f4v播放器 f4v文件 f4v转换 f4v解码
youtube f4v f4v格式转换
请您注意:必须是Total Video Converter3.21版本,低版本的不能转化f4v格式!
查看全文
herosoft
发表于:2010.02.09 11:23
::分类:
(
程序人生
)
::阅读:(408次)
::
评论
(0)
===========================================================
===========================================================
最新解决msnmsgr.exe-应用程序错误 unknown software exception
试过杀毒,卸载MSN在安装,均无效。
后来删除MSN保护盾解决了。
查看全文
herosoft
发表于:2010.02.09 11:19
::分类:
(
程序人生
)
::阅读:(147次)
::
评论
(0)
===========================================================
===========================================================
转:Java中使用Runtime和Process类运行外部程序
herosoft
发表于:2010.01.11 14:23
::分类:
( )
::阅读:(204次)
::
评论
(0)
===========================================================
===========================================================
淘宝20元抵价券 idealife老用户答谢活动
herosoft
发表于:2010.01.09 11:15
::分类:
(
程序人生
)
::阅读:(89次)
::
评论
(0)
===========================================================
===========================================================
mySurveyASIA调查网:积分换现金
mySurveyASIA调查网:积分换现金
mySurveyASIA专题讨论调查由TNS全权管理。TNS 为全球最大市场信息顾问公司,其专题市场研究遍及多于110个国家,拥有国际化及丰富的市场研究经验。
注册会员通过参与调查,可以获得积分,而积分可以兑换礼品或现金。
查看全文
herosoft
发表于:2009.12.09 22:17
::分类:
(
网赚
)
::阅读:(99次)
::
评论
(0)
===========================================================
===========================================================
mySurveyASIA注册教程与调查攻略
一、mySurveyASIA公司介绍: mySurveyASIA由TNS运作,是世界领先的市场调查公司。TNS的网络遍布全球,在超过70个国家成功运作。这使我们得以成功地完成客户的各种项目。我们给跨国公司和本土企业提供的市场研究包括评估、分析、调查以及提供我们独到的看法和咨询意见。通过商业调查,我们帮助客户开发有效的商业策略和沟通方式,加强其与顾客之间的关系。
在mySurveyASIA,消费者的看法是我们的主导。通过对消费者意见的调查研究,激发出了无限创意。这其中包括对返还现金的信用卡的调查,安全帽的调查等等。mySurveyASIA的研究结果经常被华尔街时报、今日美国、南华早报等报刊引用。
二、mySurveyASIA注册教程: 1.
注册前请发邮件,主题为“申请mySurveyASIA邀请”的到
7399191@qq.com 主要是为了测试你的邮箱能不能收到来自mySurveyASIA的信件,建议使用
Gmail。
2.完成第一份在线问卷
3.当您完成注册问卷后,系统自动发信到注册邮箱
4.点击链接,激活账户,然后填写完整您的上网习惯、健康状况、购物习惯等资料,以使你以后获得更多参与调查赚积分的机会。
5.一周左右验证期---可以成功登陆网站,此时您就有了65积分的奖励了!马上注册吧!
验证期期间是登录不了的,因为数据库里还没有您的资料。如果过了验证,我们会发邮件给您的,告知您您的用户名和密码,之后您就能成功登陆了。但同时,也不是百分百保证所有注册的都能通过验证的。如果过了两星期还未收到我们的信件,那就是没有通过验证。
三、mySurveyASIA调查攻略: mySurveyASIA专题讨论是中国大陆地区居民的一个网上社区,我们可透过这里参与市场调研活动,以及对不同产品、服务和话题发表和分享意见。通过参与mySurveyASIA专题讨论调查,您的意见不但可以改善新产品,还能让您赢取宝贵的奖励分数并换取丰富的奖品和礼物,包括购物券、日常用品、数码产品等,或者现金,支持工行卡付款。mySurveyASIA由成立于1960年的TNS全权管理及经营,TNS为全球知名的市场信息顾问公司,其专题市场研究遍及多于110个国家,拥有国际化及丰富的市场研究经验。
就是赚网 加入mysurveyASIA的好处 ·调查小组的会员可通过以下各种方法获得奖励积分,10积分=1RMB!
·加入mySurveyASIA小组即可获得65个积分(相当于6.5人民币);
·参与一项调查最高可得100-900个积分(视问卷的长短和内容而定);
·每推荐一位朋友参与mySurveyASIA有奖调查,您将得到80积分奖励;
·阅览mySurveyASIA的每份「会员通讯」即可获得5积分。
您选择的礼品将会在10个工作天內以邮寄方式送出。如果您想兑换成人民币,您需要至少2000积分(200RMB)。mySurveyASIA 暂时只接受中国工商银行作为收款卡号。分可以兑换成大奖和礼物,包括可以在很多商店购物的抵用券。
查看全文
herosoft
发表于:2009.12.09 21:46
::分类:
(
网赚
)
::阅读:(104次)
::
评论
(0)
===========================================================
===========================================================
转:叶檀:可怕的暴利 囤地胜过囤黄金
有三分之一的开发商只囤地不盖房,这是房地产界著名的小潘同志给出的数字。
查看全文
herosoft
发表于:2009.11.05 15:25
::分类:
(
程序人生
)
::阅读:(198次)
::
评论
(0)
===========================================================
===========================================================
转:正则表达式判断号码靓号类型
很多网站需要将好的会员号留着,或用于日后的盈利。实现方法不是本文讨论范围,本文仅列出用于检测靓号类型的一些正则。
靓号检测:主要可以检测连号(正连 12345、倒连65432)、AABB号、手机号码、日期号(生日号、年度号)、ABBCABB号,3位以上重复号。更多类型号码检测可以根据以下表达式改造。
' 匹配6位顺增
regex.Pattern = "(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){5}d"
查看全文
herosoft
发表于:2009.11.02 20:16
::分类:
(
程序人生
)
::阅读:(260次)
::
评论
(0)
===========================================================
===========================================================
做一名威客,用你的知识赚钱
一、什么是威客
威客的英文是Witkey(wit智慧、key钥匙;关键的)。在网络时代,凭借自己的创造能力(智慧和创意)在互联网上帮助别人,而获得报酬的人就是威客。通俗地讲,威客就是在网络上出卖自己无形资产(知识商品)的人,或者说是在网络上做知识(商品)买卖的人。“威客”最早出现在2005年,指的是把智慧、知识、能力通过互联网转换成实际收入的人。英文名称为witkey,意思是智慧的钥匙。
查看全文
herosoft
发表于:2009.11.02 20:09
::分类:
(
网赚
)
::阅读:(138次)
::
评论
(0)
===========================================================
===========================================================
转:威客网赚
herosoft
发表于:2009.11.02 19:54
::分类:
(
网赚
)
::阅读:(3579次)
::
评论
(0)
===========================================================
===========================================================
转:13球称重问题Java实现 收藏
herosoft
发表于:2009.11.01 20:44
::分类:
( )
::阅读:(126次)
::
评论
(0)
===========================================================
===========================================================
原:亚洲交友联盟注册全攻略
herosoft
发表于:2009.10.30 21:04
::分类:
(
程序人生
)
::阅读:(238次)
::
评论
(0)
===========================================================
===========================================================
亚洲交友联盟赚钱全攻略
亚洲交友联盟赚钱全攻略
什么是亚洲交友中心联盟?
亚洲交友中心联盟是全球最大交友网站“亚洲交友中心”为推广其网站而设立的广告联盟。亚洲交友中心联盟提供按注册量来支付报酬的站长赚钱计划,站长或博客主注册联盟后放置他们广告,这样一旦有网民通过这个广告注册亚洲交友中心,他们就会向站长或博客主支付报酬。
目前亚洲交友联盟支付报酬的方式分为两种,一种是按注册人数,每个男会员1美元,女会员2美元。当然,前提是您的推介必须使得这些注册的人之中每30个人就有1人成为他们的收费用户。
如果没有达到这个标准,那么你的报酬标准将变为每个男会员0.15美元,每个女会员0.30美元。尽管这样,相对于其他的广告联盟来说,这还是相当地诱人的。
另外一种报酬方式是,通过您推介加入的免费会员,发展成为收费会员后,您可以获得50%的报酬,这个比例相当高了。无论哪一种方式都可以让站长和博客主们赚得腰包鼓鼓了。所以,本站在此强烈推荐大家加入。
亚洲交友中心联盟是国外老牌的广告联盟,亚洲交友中心是美国的一家网站,面向全球,广告联盟是中文的,这对于很多不懂英文的站长来说又是一个福利!另外,支付方面,绝对及时。和google 百度一样,亚洲交友中心是全球性的大站,信誉绝对有保障。只要你不通过色情网站推广,肯定能够拿到报酬。
注册地址:点击加入亚洲交友推广联盟 http://asiafriendfinder.com/go/g1169134-brk
查看全文
herosoft
发表于:2009.10.26 20:06
::分类:
(
网赚
)
::阅读:(4028次)
::
评论
(0)
===========================================================
===========================================================
靠广告联盟月入3000元的经验分享
大家好,前几次针对我的日4000ip网站来写好几篇关于如何来流量的文章,今天我来和大家谈谈我网站月收入3000元的下载网站的经验心得吧。本人的水平也有限,未能就一个主题来更深入的发表我的看法,只能泛泛而谈了!因为做站3年多,心里有一种不吐不快的感觉,希望对一些新人能起到指导的作用,更是希望高人能指点为快!亿亿空间www.129yy.com,就是我的下载站!
一、选择广告联盟要注意的要素:
1、搜索广告联盟名称,看看网民对其评价。
2、搜索广告联盟所属的公司名称,没有公司的联盟最好不要加入,当然不是绝对,看具体情况而定的,最好是一间公司操作起来的广告联盟!
3、搜索广告联盟公司所在的地址,避免同个地址的不同公司,比如10间公司都是那个地址的,那么要好好考虑了。
4、查看广告联盟的域名的信息,比如备案信息、注册时间、时间排名等等!
二、 推荐广告联盟收益: 《推荐我接触的比较好的广告联盟》
宣传易传媒:宣传易是比较好,宣传易是业界比较有名气的,弹窗广告和富媒体广告比较多,强烈推荐,每天可以拿到10元左右的广告费!宣传易也在A5做广告,当然我不是在为宣传易做广告,我只是比较喜欢这个广告联盟,付款及时,只要你有比较好的网站,加入宣传易是最好的选择,但是前提是要网站达到4000IP才能加入的,这个是硬性要求!
迅雷联盟:一个针对下载的网站来说,迅雷联盟是不可缺少的了,目前一天能拿到8到10元的广告费,当然了,对于我的下网站4000IP来说,一个10元的费用也太少了,以后相信会更好!大家可以去看看!
亚洲交友联盟:大家都知道这个联盟只要推荐有用户加入,你就有钱,当然取钱可能麻烦点,但是还是很容易赚钱的,所以大家只要努力去推荐了,还是有美元赚的,一个会员,尽管是低效率的会员也有0.2美元一个,也有1.2人民币了,算起来也不错,我网站一天也有30到50个注册的,差不多40到50元收益吧!推荐大家努力去做这个联盟!当然拉,这个推广技巧方法大家可以去研究研究!暂时不在这里谈了!
成果网:这个广告联盟,广告比较多,但汇款手续费太高了,100元就要扣掉5元,但是没有办法,成果网比较有实力!
唯一联盟:这个联盟之前是综合的广告联盟,现在主要是CPS为主,我目前在这个联盟赚到了3000元了,比较推荐这个联盟,为了说服力,顺便贴图吧!
好了,先写到这里,还有部分联盟没有和大家分享,以后将继续和大家谈谈,祝大家赚到更多的钱!文章首发A5, 大家觉得好的话,就顶一下吧!谢谢你们!
查看全文
herosoft
发表于:2009.10.25 20:30
::分类:
(
网赚
)
::阅读:(288次)
::
评论
(0)
===========================================================
===========================================================
BLOGGER和BLOGSPOT的关系
blogger 和blogspot原来是两家公司,后来blogger收购了blogspot,blogger转为后台,blogspot做托管。所以就是现在这个样子了。
查看全文
herosoft
发表于:2009.10.24 17:03
::分类:
(
程序人生
)
::阅读:(280次)
::
评论
(0)
===========================================================
===========================================================
原:求组合数问题!
我的Java实现:
package com.herosoft.algorithm;
import java.io.*;
class Combination {
private int count;
private int[] s;
public Combination(int n, int r) {
if (n < r) {
int temp;
temp = n;
n = r;
r = temp;
}
s = new int[n];
count = count(n, r);
System.out.println("there are total:count: " + count);
for (int i = 0; i < r; i++) {
s[i] = i + 1;
System.out.printf("%2d", s[i]);
}
System.out.println();
permutation(n, r);
}
void permutation(int n, int r) {
for (int i = 1; i < count; i++) {
int m = r - 1, max_value = n;
// notice: good logic
while (s[m] == max_value) {
m = m - 1;
max_value = max_value - 1;
}
// if (s[m] + 1 == s[0])
// s[m] = s[m] + 1;
s[m] = s[m] + 1;
for (int j = m + 1; j < r; j++) {
s[j] = s[j - 1] + 1;
}
for (int k = 0; k < r; k++) {
System.out.printf("%2d", s[k]);
}
System.out.println();
}
}
// compute value of c(n,r)
static int count(int n, int r) {
int sn = 1, sr = 1, s_r = 1;
for (int i = 1; i <= n; i++) {
sn *= i;
}
for (int j = 1; j <= r; j++) {
sr *= j;
}
for (int k = 1; k <= n - r; k++) {
s_r *= k;
}
sr *= s_r;
return sn / sr;
// combination logic: only return sn/s_r, not to need sr
// return sn/s_r;
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("please input n :");
int n = Integer.parseInt(in.readLine());
System.out.println("please input r :");
int r = Integer.parseInt(in.readLine());
new Combination(n, r);
}
}
以下摘自求组合数问题!http://topic.csdn.net/t/20050808/09/4194872.html
查看全文
herosoft
发表于:2009.10.24 16:49
::分类:
( )
::阅读:(255次)
::
评论
(0)
===========================================================
===========================================================
原:求n个数的所有组合及其和
递归实现对n个数求所有组合及每种组合的所有元素的和。迭代版本似乎无法实现,还请大家执教看能不能实现一个迭代版本。
以下是Java实现:
查看全文
herosoft
发表于:2009.07.23 10:53
::分类:
( )
::阅读:(304次)
::
评论
(0)
===========================================================
===========================================================
转:java Too many open files打开的文件过多
问题描述 以下两个堆栈跟踪指示同一个问题并报告相同的消息:打开的文件过多丅
异常 1 |
java.net.SocketException: Too many open files
at java.net.PlainSocketImpl.accept(Compiled Code) at java.net.ServerSocket.implAccept(Compiled Code) at java.net.ServerSocket.accept(Compiled Code) at weblogic.t3.srvr.ListenThread.run(Compiled Code) |
java.io.IOException:打开的文件过多
at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.(UNIXProcess.java:54) at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.(UNIXProcess.java:54) at java.lang.Runtime.execInternal(Native Method) at java.lang.Runtime.exec(Runtime.java:551) at java.lang.Runtime.exec(Runtime.java:477) at java.lang.Runtime.exec(Runtime.java:443) ... |
第一个异常在错误影响到基础 TCP 协议时抛出,而第二个异常则在错误影响到 I/O 操作时抛出。 这两个异常都是由阻止服务器的类似问题所产生的,该问题可通过下面的研究方法来解决。 |
故障排除 请注意,并非下面所有任务都需要完成。有些问题仅通过执行几项任务就可以解决。
快速链接: |
查看全文
herosoft
发表于:2009.07.23 10:35
::分类:
( )
::阅读:(478次)
::
评论
(0)
===========================================================
===========================================================
转:用Perl实现单词计数器
Perl的文本处理能力很强,简单的几行代码就能实现单词的计数.
查看全文
herosoft
发表于:2009.07.21 18:34
::分类:
(
程序人生
)
::阅读:(337次)
::
评论
(0)
===========================================================
===========================================================
转:一个在文本文件搜索指定字符串的程序
herosoft
发表于:2009.07.21 18:29
::分类:
(
程序人生
)
::阅读:(324次)
::
评论
(0)
===========================================================
===========================================================
转:How is Internat Bank going?
What's Internat Bank?
Internate Bank is a Bank that the customers do their transaction on the internate!
Why do i use the Internate Bank?
Because it makes our's life and work more efficient and more convenient!
How to use the Internate Bank?
You must be able to connect to the internate!
When can i use the Internat Bank?
Anytime you like!
Where can i use the Internat Bank?
Anywhere you can get on line!
Does Internat Bank secure?
If you have a digital certificate from CA,then that should be very secure,otherwise,it
will be insecure and unreliable.
Is Internat Bank popular?
Not really,althrough the Internat Bank has been working for many years and even
the expects declared that digital certificate is secure enough to work,but most of
people don't believe them.Actually,i think the Internat Bank won't be popular in a
coming decade.
Who need the Internat Bank?
The one who are so busy that he has no time to go to the bank.
Which is the bottlenect preventing the Internat Bank from working widely?
Frist,the technology goes before the application,Internat Bank must be used at home,but internat environment is poor recently.
Second,the usage of Internat Bank is relative complex,most of people have no idea
of security knowledge,don't suppose everyone is computer skiller.
Last,the Internat Bank is not so much exciting,many people think it's not necessary to
use Internat Bank.
查看全文
herosoft
发表于:2009.07.20 21:04
::分类:
(
英语
)
::阅读:(204次)
::
评论
(0)
===========================================================
===========================================================
转:ArrayList:用Set代替contains
在前面的一篇讨论中已经指出了ArrayList的contains方法也是效率比较低的,应该尽量避免使用它!这里有一个很实际的问题,就是已经有一个ArrayList,我要除去其中相同的元素,也就是希望得到一个不存在重复元素的List!
这里同样使用两种方法:
1.生成一个新的ArrayList,添加之前看是否包含。
2.直接利用HashSet(HashMap的一个视图),然后返回一个ArrayList。
查看全文
herosoft
发表于:2009.07.20 20:54
::分类:
( )
::阅读:(389次)
::
评论
(0)
===========================================================
===========================================================
转:递归算法学习系列之寻找第K大
- 概述
国人向来喜欢论资排辈的,每个人都想当老大,实在当不成,当个老二,老三,老K也不错,您一定看过这样的争论: 两个人吵架,一个人非常强势,另外一个忍受不住了便说:"你算老几呀?",下面就通过这篇文章就是要解决找出老几的问题!
2. 应用场景
在向量V[first,last)中查找出第K大元素的值
3. 分析
如果利用排序算法将向量V排好序,那么第K大元素就是索引为v.length-k的元素了,这样能解决问题,但效率不高,因为这相当于为了歼灭敌人一个小队而动用了我们全军的力量,得不偿失,回想快速排序中的分表,每次都将目标向量分为两个子表,左子表中全部小于中间元素v[mid],右边都大于中间元素v[mid],这样就可以减小了查找范围,因为我可以只查找左子表或者右子表就能找到目标元素了。如下图所示,我们可以将向量 v划分成如下
| Left(<=KLargest) | KLargest | Right(>=KLargest) |
按照这样的思路,我们仍使用快速排序中的分表策略,首先将向量V从中间位置分开,分成左和右,分好后,中间值的索引如果恰恰等于K,就找到了,否则如果中间元素索引大于K,则在左子表中继续查找,忽略右子表,如果中间值索引小于K,则在右子表中继续查找,如此循环往复。
查看全文
herosoft
发表于:2009.07.20 19:43
::分类:
( )
::阅读:(121次)
::
评论
(0)
===========================================================
===========================================================
网站运营之流量转换
流量是衡量一个网站综合能力的最重要指标,而流量转换率则是衡量一个网站价值的核心指标。尤其做电子商务网站,提升流量转换率才是硬道理。
在新浪、搜狐将巨大流量变成巨额广告收入的时候,一些同样拥有大流量的网站(比如博客类网站,分类信息站,SNS网站,
i本地),并没有能够将流量转变成广告收入。而搜索引擎网站,将其他网站的超链抓至自己名下,用关键词作为主线,通过竞价排名的方式,实现了流量至广告收入的转换。
查看全文
herosoft
发表于:2009.07.20 15:15
::分类:
(
程序人生
)
::阅读:(132次)
::
评论
(0)
===========================================================
===========================================================
转:致初入职场的兄弟姐妹(精彩连载,第七章刚刚出炉)
写在前面——怒放的生命每当听到这首歌,我都会觉得热血澎湃。我相信每个年轻的生命都有相同的期待,虽然我们甚至还不确定自己要走向何方,但我们总是莫名相信自己那怒放的生命,期盼有一天自己能飞向那片更高的天空……(此处播放汪峰的歌,灯光打在你的脸上,且有掌声、欢呼声、尖叫声)
--------------------------------------------
第一章 内心的召唤虽然题目是致初入职场的兄弟姐妹,在开始之前,让我们先把目光放的远一点——我们先从求学说起。昨天看到一条新闻,有必要与大家分享一下——“
13岁男孩高考654分考取北航”。
值得说道的不是这个孩子是个神童,而是文中关于学校
选择问题父子的争论。据说北大与北航都同意录取这个孩子,父亲觉得北大“名声大”决定让儿子报北大,但孩子坚持报北航,原因是——“北航保证他可以学习飞行器动力工程专业——可以专门研究飞机的发动机。这是孙天瑞特别喜欢的。”
读到这里我为孩子的见地与坚持颇感惊讶,一个13岁的孩子,竟然明确地知道自己喜欢什么,明确地知道自己要什么,更能为了理想义无反顾的抛弃在
别人看来光鲜诱人的东西,这是多么难能可贵。套用一句广告语“只要你知道自己去哪,全世界都会为你让路”,他做到了。
很多人在谈到未来时,说得最多的一个词就是“迷茫”。高考后我们不知道自己喜欢什么专业,毕业后我们不知道自己喜欢什么工作。而现实又逼着你向前走,你总要学点什么,总要干点什么,于是糊里糊涂地我们就上路了,走来走去,却不知道自己要去哪,蓦然回首,顿时迷茫了……
你是否有同感呢?如果你明确地知道自己要做什么,那么恭喜你!坚持下去,迟早会成功的,你的生命也终将会“怒放”;如果相反,那你该好好想想了。(It's time to think about it! 自己把握一下美国大片的那种男低音的感觉~~~~~)
也许面对这个问题时你有很多顾虑——父母的意愿、生存的压力等等。这无可厚非,但如果我们把问题简化一下,事情就变得简单了。这样想:如果你一生只能做一件事,并且只有时间做一件事,你还会为其他的细枝末节费脑筋吗?
事实上,对于大多数人来说,如果你想有点成就,那你一生也只能做一件事。当然可能你累吐奶了连一件事也做不好。这样看来,其他的事情都是在为这件事做铺垫——上不上大学,上哪个大学,是否要出国,学什么专业,干什么工作,去哪个公司……这些都不成问题,只要你知道你一生中要做什么,你就知道如何选择。就像那个13岁的孩子。
问题是老子偏偏不知道要干什么!!!那该如何是好?
那也简单,想想你喜欢什么,喜欢什么就做什么。这话听着有点玩世不恭吗?其实一点都不是。我到现在真真体会到兴趣爱好是一切创造力的源泉!郭德纲说他小时候就喜欢唱戏,一路坚持下来,火了;小沈阳说他就喜欢在舞台上的感觉,一路坚持下来,火了。能把爱好做事业,是幸福了,当然也要越做越快乐,否则越做越痛苦,那就只剩事业,连爱好都没了。
如果您连自己喜欢什么都不知道,那就有点可悲了。这时候怎么办呢?建议找一些性格
测试、职业测试之类的网站,好好测测,看看你属于哪类人,适合做什么工作。再者也可以问问父母、朋友、老师看看他们认为你是怎样的人,当然这事还得你自己拿注意,没人比你更清楚自己在想什么!!!
总之,方向很重要。这是一个严肃的问题,建议大家慎重考虑。男怕入错行,女怕嫁错郎;越早认清自己,你越能占得先机;否则以后改行的成本会很高。
我很喜欢电影《燃情岁月》中的那句台词——“有些人能够听见自己内心的声音,非常的清楚,他们依循着自己的内心来行事。这些人变得疯狂,或者成为传奇……
(Some people hear their own inner voices with great clearness and they live by what they hear. Such people become crazy, or they become legends. )
2009/7/9 16:00
-------------------------------
第二章、找工作:该NB时就NB 查看全文
herosoft
发表于:2009.07.20 11:43
::分类:
(
职场
)
::阅读:(275次)
::
评论
(0)
===========================================================
===========================================================
什么是转基因食品
西班牙语:Alimento Transgénico
转基因食品就是利用现代分子生物技术,将某些生物的基因转移到其他物种中去,改造生物的遗传物质,使其在性状、营养品质、消费品质等方面向人们所需要的目标转变。转基因生物直接食用,或者作为加工原料生产的食品,统称为“转基因食品”。
也就是说,通过基因工程手段将一种或几种外源性基因转移至某种生物体(动、植物和微生物等),并使其具有效表达出相应的产物(多肽或蛋白质),这样的生物体作为食品或以其为原料加工生产的食品。
其实,转基因的基本原理也不难了解,它与常规杂交育种有相似之处。杂交是将整条的基因链(染色体)转移,而基因转移是选取最有用的一小段基因转移。因此,转基因比杂交具有更高的选择性。
转基因食品的种类
为了提高农产品营养价值,更快、更高效地生产食品,科学家们应用转基因的方法,改变生物的遗传信息,拼组新基因,使今后的农作物具有高营养、耐贮藏、抗病虫和抗除草剂的能力,不断生产新的转基因食品。
第一类,植物性转基因食品
植物性转基因食品很多。例如,面包生产需要高蛋白质含量的小麦,而目前的小麦品种含蛋白质较低,将高效表达的蛋白基因转入小麦,将会使做成的面包具有更好的焙烤性能。
番茄是一种营养丰富、经济价值很高的果蔬,但它不耐贮藏。为了解决番茄这类果实的贮藏问题,研究者发现,控制植物衰老激素乙烯合成的酶基因,是导致植物衰老的重要基因,如果能够利用基因工程的方法抑制这个基因的表达,那么衰老激素乙烯的生物合成就会得到控制,番茄也就不会容易变软和腐烂了。美国、中国等国家的多位科学家经过努力,已培育出了这样的番茄新品种。这种番茄抗衰老,抗软化,耐贮藏,能长途运输,可减少加工生产及运输中的浪费。
第二类,动物性转基因食品
动物性转基因食品也有很多种类。比如,牛体内转入了人的基因,牛长大后产生的牛乳中含有基因药物,提取后可用于人类病症的治疗。在猪的基因组中转入人的生长素基因,猪的生长速度增加了一倍,猪肉质量大大提高,现在这样的猪肉已在澳大利亚被请上了餐桌。
第三类,转基因微生物食品
微生物是转基因最常用的转化材料,所以,转基因微生物比较容易培育,应用也最广泛。例如,生产奶酪的凝乳酶,以往只能从杀死的小牛的胃中才能取出,现在利用转基因微生物已能够使凝乳酶在体外大量产生,避免了小牛的无辜死亡,也降低了生产成本。
第四类,转基因特殊食品
科学家利用生物遗传工程,将普通的蔬菜、水果、粮食等农作物,变成能预防疾病的神奇的“疫苗食品”。科学家培育出了一种能预防霍乱的苜蓿植物。用这种苜蓿来喂小白鼠,能使小白鼠的抗病能力大大增强。而且这种霍乱抗原,能经受胃酸的腐蚀而不被破坏,并能激发人体对霍乱的免疫能力。于是,越来越多的抗病基因正在被转入植物,使人们在品尝鲜果美味的同时,达到防病的目的。
食用转基因食品的安全性
查看全文
herosoft
发表于:2009.07.12 12:35
::分类:
(
Health
)
::阅读:(112次)
::
评论
(0)
===========================================================
===========================================================
转:什么是CPL,CPC,CPM,CPS网络广告
一个网络媒体(网站)会包含有数十个甚至成千上万个页面,站点为获得生存,一般都需要在站点投放网络广告。网络广告所投放的位置和价格就牵涉到特定的页面以及浏览人数的多寡。这好比平面媒体(如报纸)的“版位”、“发行量”,或者电波媒体(如电视)的“时段”、“收视率”的概念。
查看全文
herosoft
发表于:2009.07.12 12:12
::分类:
(
程序人生
)
::阅读:(172次)
::
评论
(0)
===========================================================
===========================================================
转:C++实现的变种二分查找法(折半查找)--二叉查找树
转载请注明出处:http://hi.baidu.com/ipress/
基本思想: 当静态查找表是有序表,即表中结点是按关键字有序,并采用顺序存储结构时,可用折半查找法。
折半查找的查找的过程是:先确定待查记录所在的范围(区间),然后逐步缩小查找范围,直到找到该记录或者找不到为止。所谓"折半"的含义是指,先将给定值和所查区间中间位置的记录的关键字进行比较,若相等,则查找成功,否则,依给定值大于或小于该关键字继续在后半个区间或前半个区间中进行查找。
在这里我们要讲的则完全不同与此,采用顺序二叉树进行查找,初始化的时候已经按照二分思想插入.
查看全文
herosoft
发表于:2009.07.10 17:40
::分类:
( )
::阅读:(178次)
::
评论
(0)
===========================================================
===========================================================
转:经典String str = new String("abc")内存分配问题
简单的说:
Java把内存划分成两种:一种是栈内存,一种是堆内存。
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。
当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
堆内存用来存放由new创建的对象和数组。
在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。
引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。
查看全文
herosoft
发表于:2009.07.10 09:38
::分类:
( )
::阅读:(478次)
::
评论
(0)
===========================================================
===========================================================
垃圾回收技术的发展(转)
写作本文的初衷是想和大家分享垃圾收集( Garbage Collection )技术简单而有趣的发展史。动笔之前,我站在窗边,望了望正在小区里装运垃圾的清洁车。和生活中环卫工人们清运垃圾的工作相似,软件开发里的垃圾收集其实就是一种自动打扫和清除内存垃圾的技术,它可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽(这和生活垃圾堵塞排污管道的危险并没有什么本质的不同),以及不恰当的内存释放所造成的内存非法引用(这类似于我们在生活中买到了一瓶已经过期三年的牛奶)。
据历史学家们介绍,四千多年前的古埃及人已经在城市里建设了完善的排污和垃圾清运设施,一千多年前的中国人更是修筑了当时世界上保洁能力最强的都市——长安。今天,当我们在软件开发中体验自动垃圾收集的便捷与舒适时,我们至少应当知道,这种拒绝杂乱、追求整洁的“垃圾收集”精神其实是人类自古以来就已经具备了的。
拓荒时代
国内的程序员大多是在 Java 语言中第一次感受到垃圾收集技术的巨大魅力的,许多人也因此把 Java 和垃圾收集看成了密不可分的整体。但事实上,垃圾收集技术早在 Java 语言问世前 30 多年就已经发展和成熟起来了, Java 语言所做的不过是把这项神奇的技术带到了广大程序员身边而已。
如果一定要为垃圾收集技术找一个孪生兄弟,那么, Lisp 语言才是当之无愧的人选。 1960 年前后诞生于 MIT 的 Lisp 语言是第一种高度依赖于动态内存分配技术的语言: Lisp 中几乎所有数据都以“表”的形式出现,而“表”所占用的空间则是在堆中动态分配得到的。 Lisp 语言先天就具有的动态内存管理特性要求 Lisp 语言的设计者必须解决堆中每一个内存块的自动释放问题(否则, Lisp 程序员就必然被程序中不计其数的 free 或 delete 语句淹没),这直接导致了垃圾收集技术的诞生和发展——说句题外话,上大学时,一位老师曾告诉我们, Lisp 是对现代软件开发技术贡献最大的语言。我当时对这一说法不以为然:布满了圆括号,看上去像迷宫一样的 Lisp 语言怎么能比 C 语言或 Pascal 语言更伟大呢?不过现在,当我知道垃圾收集技术、数据结构技术、人工智能技术、并行处理技术、虚拟机技术、元数据技术以及程序员们耳熟能详的许多技术都起源于 Lisp 语言时,我特别想向那位老师当面道歉,并收回我当时的幼稚想法。
知道了 Lisp 语言与垃圾收集的密切关系,我们就不难理解,为什么垃圾收集技术的两位先驱者 J. McCarthy 和 M. L. Minsky 同时也是 Lisp 语言发展史上的重要人物了。 J. McCarthy 是 Lisp 之父,他在发明 Lisp 语言的同时也第一次完整地描述了垃圾收集的算法和实现方式; M. L. Minsky 则在发展 Lisp 语言的过程中成为了今天好几种主流垃圾收集算法的奠基人——和当时不少技术大师的经历相似, J. McCarthy 和 M. L. Minsky 在许多不同的技术领域里都取得了令人艳羡的成就。也许,在 1960 年代那个软件开发史上的拓荒时代里,思维敏捷、意志坚定的研究者更容易成为无所不能的西部硬汉吧。
在了解垃圾收集算法的起源之前,有必要先回顾一下内存分配的主要方式。我们知道,大多数主流的语言或运行环境都支持三种最基本的内存分配方式,它们分别是:
一、静态分配( Static Allocation ):静态变量和全局变量的分配形式。我们可以把静态分配的内存看成是家里的耐用家具。通常,它们无需释放和回收,因为没人会天天把大衣柜当作垃圾扔到窗外。
二、自动分配( Automatic Allocation ):在栈中为局部变量分配内存的方法。栈中的内存可以随着代码块退出时的出栈操作被自动释放。这类似于到家中串门的访客,天色一晚就要各回各家,除了个别不识时务者以外,我们一般没必要把客人捆在垃圾袋里扫地出门。
三、动态分配( Dynamic Allocation ):在堆中动态分配内存空间以存储数据的方式。堆中的内存块好像我们日常使用的餐巾纸,用过了就得扔到垃圾箱里,否则屋内就会满地狼藉。像我这样的懒人做梦都想有一台家用机器人跟在身边打扫卫生。在软件开发中,如果你懒得释放内存,那么你也需要一台类似的机器人——这其实就是一个由特定算法实现的垃圾收集器。
也就是说,下面提到的所有垃圾收集算法都是在程序运行过程中收集并清理废旧“餐巾纸”的算法,它们的操作对象既不是静态变量,也不是局部变量,而是堆中所有已分配内存块。
引用计数( Reference Counting )算法
1960 年以前,人们为胚胎中的 Lisp 语言设计垃圾收集机制时,第一个想到的算法是引用计数算法。拿餐巾纸的例子来说,这种算法的原理大致可以描述为:
午餐时,为了把脑子里突然跳出来的设计灵感记下来,我从餐巾纸袋中抽出一张餐巾纸,打算在上面画出系统架构的蓝图。按照“餐巾纸使用规约之引用计数版”的要求,画图之前,我必须先在餐巾纸的一角写上计数值 1 ,以表示我在使用这张餐巾纸。这时,如果你也想看看我画的蓝图,那你就要把餐巾纸上的计数值加 1 ,将它改为 2 ,这表明目前有 2 个人在同时使用这张餐巾纸(当然,我是不会允许你用这张餐巾纸来擦鼻涕的)。你看完后,必须把计数值减 1 ,表明你对该餐巾纸的使用已经结束。同样,当我将餐巾纸上的内容全部誊写到笔记本上之后,我也会自觉地把餐巾纸上的计数值减 1 。此时,不出意外的话,这张餐巾纸上的计数值应当是 0 ,它会被垃圾收集器——假设那是一个专门负责打扫卫生的机器人——捡起来扔到垃圾箱里,因为垃圾收集器的惟一使命就是找到所有计数值为 0 的餐巾纸并清理它们。
引用计数算法的优点和缺陷同样明显。这一算法在执行垃圾收集任务时速度较快,但算法对程序中每一次内存分配和指针操作提出了额外的要求(增加或减少内存块的引用计数)。更重要的是,引用计数算法无法正确释放循环引用的内存块,对此, D. Hillis 有一段风趣而精辟的论述:
一天,一个学生走到 Moon 面前说:“我知道如何设计一个更好的垃圾收集器了。我们必须记录指向每个结点的指针数目。” Moon 耐心地给这位学生讲了下面这个故事:“一天,一个学生走到 Moon 面前说:‘我知道如何设计一个更好的垃圾收集器了……’”
D. Hillis 的故事和我们小时候常说的“从前有座山,山上有个庙,庙里有个老和尚”的故事有异曲同工之妙。这说明,单是使用引用计数算法还不足以解决垃圾收集中的所有问题。正因为如此,引用计数算法也常常被研究者们排除在狭义的垃圾收集算法之外。当然,作为一种最简单、最直观的解决方案,引用计数算法本身具有其不可替代的优越性。 1980 年代前后, D. P. Friedman , D. S. Wise , H. G. Baker 等人对引用计数算法进行了数次改进,这些改进使得引用计数算法及其变种(如延迟计数算法等)在简单的环境下,或是在一些综合了多种算法的现代垃圾收集系统中仍然可以一展身手。
标记-清除( Mark-Sweep )算法
第一种实用和完善的垃圾收集算法是 J. McCarthy 等人在 1960 年提出并成功地应用于 Lisp 语言的标记-清除算法。仍以餐巾纸为例,标记-清除算法的执行过程是这样的:
午餐过程中,餐厅里的所有人都根据自己的需要取用餐巾纸。当垃圾收集机器人想收集废旧餐巾纸的时候,它会让所有用餐的人先停下来,然后,依次询问餐厅里的每一个人:“你正在用餐巾纸吗?你用的是哪一张餐巾纸?”机器人根据每个人的回答将人们正在使用的餐巾纸画上记号。询问过程结束后,机器人在餐厅里寻找所有散落在餐桌上且没有记号的餐巾纸(这些显然都是用过的废旧餐巾纸),把它们统统扔到垃圾箱里。
正如其名称所暗示的那样,标记-清除算法的执行过程分为“标记”和“清除”两大阶段。这种分步执行的思路奠定了现代垃圾收集算法的思想基础。与引用计数算法不同的是,标记-清除算法不需要运行环境监测每一次内存分配和指针操作,而只要在“标记”阶段中跟踪每一个指针变量的指向——用类似思路实现的垃圾收集器也常被后人统称为跟踪收集器( Tracing Collector )
伴随着 Lisp 语言的成功,标记-清除算法也在大多数早期的 Lisp 运行环境中大放异彩。尽管最初版本的标记-清除算法在今天看来还存在效率不高(标记和清除是两个相当耗时的过程)等诸多缺陷,但在后面的讨论中,我们可以看到,几乎所有现代垃圾收集算法都是标记-清除思想的延续,仅此一点, J. McCarthy 等人在垃圾收集技术方面的贡献就丝毫不亚于他们在 Lisp 语言上的成就了。
复制( Copying )算法
为了解决标记-清除算法在垃圾收集效率方面的缺陷, M. L. Minsky 于 1963 年发表了著名的论文“一种使用双存储区的 Lisp 语言垃圾收集器( A LISP Garbage Collector Algorithm Using Serial Secondary Storage )”。 M. L. Minsky 在该论文中描述的算法被人们称为复制算法,它也被 M. L. Minsky 本人成功地引入到了 Lisp 语言的一个实现版本中。
复制算法别出心裁地将堆空间一分为二,并使用简单的复制操作来完成垃圾收集工作,这个思路相当有趣。借用餐巾纸的比喻,我们可以这样理解 M. L. Minsky 的复制算法:
餐厅被垃圾收集机器人分成南区和北区两个大小完全相同的部分。午餐时,所有人都先在南区用餐(因为空间有限,用餐人数自然也将减少一半),用餐时可以随意使用餐巾纸。当垃圾收集机器人认为有必要回收废旧餐巾纸时,它会要求所有用餐者以最快的速度从南区转移到北区,同时随身携带自己正在使用的餐巾纸。等所有人都转移到北区之后,垃圾收集机器人只要简单地把南区中所有散落的餐巾纸扔进垃圾箱就算完成任务了。下一次垃圾收集的工作过程也大致类似,惟一的不同只是人们的转移方向变成了从北区到南区。如此循环往复,每次垃圾收集都只需简单地转移(也就是复制)一次,垃圾收集速度无与伦比——当然,对于用餐者往返奔波于南北两区之间的辛劳,垃圾收集机器人是决不会流露出丝毫怜悯的。
M. L. Minsky 的发明绝对算得上一种奇思妙想。分区、复制的思路不仅大幅提高了垃圾收集的效率,而且也将原本繁纷复杂的内存分配算法变得前所未有地简明和扼要(既然每次内存回收都是对整个半区的回收,内存分配时也就不用考虑内存碎片等复杂情况,只要移动堆顶指针,按顺序分配内存就可以了),这简直是个奇迹!不过,任何奇迹的出现都有一定的代价,在垃圾收集技术中,复制算法提高效率的代价是人为地将可用内存缩小了一半。实话实说,这个代价未免也太高了一些。
无论优缺点如何,复制算法在实践中都获得了可以与标记-清除算法相比拟的成功。除了 M. L. Minsky 本人在 Lisp 语言中的工作以外,从 1960 年代末到 1970 年代初, R. R. Fenichel 和 J. C. Yochelson 等人也相继在 Lisp 语言的不同实现中对复制算法进行了改进, S. Arnborg 更是成功地将复制算法应用到了 Simula 语言中。
至此,垃圾收集技术的三大传统算法——引用计数算法、标记-清除算法和复制算法——都已在 1960 年前后相继问世,三种算法各有所长,也都存在致命的缺陷。从 1960 年代后期开始,研究者的主要精力逐渐转向对这三种传统算法进行改进或整合,以扬长避短,适应程序设计语言和运行环境对垃圾收集的效率和实时性所提出的更高要求。
走向成熟
从 1970 年代开始,随着科学研究和应用实践的不断深入,人们逐渐意识到,一个理想的垃圾收集器不应在运行时导致应用程序的暂停,不应额外占用大量的内存空间和 CPU 资源,而三种传统的垃圾收集算法都无法满足这些要求。人们必须提出更新的算法或思路,以解决实践中碰到的诸多难题。当时,研究者的努力目标包括:
第一,提高垃圾收集的效率。使用标记-清除算法的垃圾收集器在工作时要消耗相当多的 CPU 资源。早期的 Lisp 运行环境收集内存垃圾的时间竟占到了系统总运行时间的 40% !——垃圾收集效率的低下直接造就了 Lisp 语言在执行速度方面的坏名声;直到今天,许多人还条件反射似地误以为所有 Lisp 程序都奇慢无比。
第二,减少垃圾收集时的内存占用。这一问题主要出现在复制算法中。尽管复制算法在效率上获得了质的突破,但牺牲一半内存空间的代价仍然是巨大的。在计算机发展的早期,在内存价格以 KB 计算的日子里,浪费客户的一半内存空间简直就是在变相敲诈或拦路打劫。
第三,寻找实时的垃圾收集算法。无论执行效率如何,三种传统的垃圾收集算法在执行垃圾收集任务时都必须打断程序的当前工作。这种因垃圾收集而造成的延时是许多程序,特别是执行关键任务的程序没有办法容忍的。如何对传统算法进行改进,以便实现一种在后台悄悄执行,不影响——或至少看上去不影响——当前进程的实时垃圾收集器,这显然是一件更具挑战性的工作。
研究者们探寻未知领域的决心和研究工作的进展速度同样令人惊奇:在 1970 年代到 1980 年代的短短十几年中,一大批在实用系统中表现优异的新算法和新思路脱颖而出。正是因为有了这些日趋成熟的垃圾收集算法,今天的我们才能在 Java 或 .NET 提供的运行环境中随心所欲地分配内存块,而不必担心空间释放时的风险。
标记-整理( Mark-Compact )算法
标记-整理算法是标记-清除算法和复制算法的有机结合。把标记-清除算法在内存占用上的优点和复制算法在执行效率上的特长综合起来,这是所有人都希望看到的结果。不过,两种垃圾收集算法的整合并不像 1 加 1 等于 2 那样简单,我们必须引入一些全新的思路。 1970 年前后, G. L. Steele , C. J. Cheney 和 D. S. Wise 等研究者陆续找到了正确的方向,标记-整理算法的轮廓也逐渐清晰了起来:
在我们熟悉的餐厅里,这一次,垃圾收集机器人不再把餐厅分成两个南北区域了。需要执行垃圾收集任务时,机器人先执行标记-清除算法的第一个步骤,为所有使用中的餐巾纸画好标记,然后,机器人命令所有就餐者带上有标记的餐巾纸向餐厅的南面集中,同时把没有标记的废旧餐巾纸扔向餐厅北面。这样一来,机器人只消站在餐厅北面,怀抱垃圾箱,迎接扑面而来的废旧餐巾纸就行了。
实验表明,标记-整理算法的总体执行效率高于标记-清除算法,又不像复制算法那样需要牺牲一半的存储空间,这显然是一种非常理想的结果。在许多现代的垃圾收集器中,人们都使用了标记-整理算法或其改进版本。
增量收集( Incremental Collecting )算法
对实时垃圾收集算法的研究直接导致了增量收集算法的诞生。
最初,人们关于实时垃圾收集的想法是这样的:为了进行实时的垃圾收集,可以设计一个多进程的运行环境,比如用一个进程执行垃圾收集工作,另一个进程执行程序代码。这样一来,垃圾收集工作看上去就仿佛是在后台悄悄完成的,不会打断程序代码的运行。
在收集餐巾纸的例子中,这一思路可以被理解为:垃圾收集机器人在人们用餐的同时寻找废弃的餐巾纸并将它们扔到垃圾箱里。这个看似简单的思路会在设计和实现时碰上进程间冲突的难题。比如说,如果垃圾收集进程包括标记和清除两个工作阶段,那么,垃圾收集器在第一阶段中辛辛苦苦标记出的结果很可能被另一个进程中的内存操作代码修改得面目全非,以至于第二阶段的工作没有办法开展。
M. L. Minsky 和 D. E. Knuth 对实时垃圾收集过程中的技术难点进行了早期的研究, G. L. Steele 于 1975 年发表了题为“多进程整理的垃圾收集( Multiprocessing compactifying garbage collection )”的论文,描述了一种被后人称为“ Minsky-Knuth-Steele 算法”的实时垃圾收集算法。 E. W. Dijkstra , L. Lamport , R. R. Fenichel 和 J. C. Yochelson 等人也相继在此领域做出了各自的贡献。 1978 年, H. G. Baker 发表了“串行计算机上的实时表处理技术( List Processing in Real Time on a Serial Computer )”一文,系统阐述了多进程环境下用于垃圾收集的增量收集算法。
增量收集算法的基础仍是传统的标记-清除和复制算法。增量收集算法通过对进程间冲突的妥善处理,允许垃圾收集进程以分阶段的方式完成标记、清理或复制工作。详细分析各种增量收集算法的内部机理是一件相当繁琐的事情,在这里,读者们需要了解的仅仅是: H. G. Baker 等人的努力已经将实时垃圾收集的梦想变成了现实,我们再也不用为垃圾收集打断程序的运行而烦恼了。
分代收集( Generational Collecting )算法
和大多数软件开发技术一样,统计学原理总能在技术发展的过程中起到强力催化剂的作用。 1980 年前后,善于在研究中使用统计分析知识的技术人员发现,大多数内存块的生存周期都比较短,垃圾收集器应当把更多的精力放在检查和清理新分配的内存块上。这个发现对于垃圾收集技术的价值可以用餐巾纸的例子概括如下:
如果垃圾收集机器人足够聪明,事先摸清了餐厅里每个人在用餐时使用餐巾纸的习惯——比如有些人喜欢在用餐前后各用掉一张餐巾纸,有的人喜欢自始至终攥着一张餐巾纸不放,有的人则每打一个喷嚏就用去一张餐巾纸——机器人就可以制定出更完善的餐巾纸回收计划,并总是在人们刚扔掉餐巾纸没多久就把垃圾捡走。这种基于统计学原理的做法当然可以让餐厅的整洁度成倍提高。
D. E. Knuth , T. Knight , G. Sussman 和 R. Stallman 等人对内存垃圾的分类处理做了最早的研究。 1983 年, H. Lieberman 和 C. Hewitt 发表了题为“基于对象寿命的一种实时垃圾收集器( A real-time garbage collector based on the lifetimes of objects )”的论文。这篇著名的论文标志着分代收集算法的正式诞生。此后,在 H. G. Baker , R. L. Hudson , J. E. B. Moss 等人的共同努力下,分代收集算法逐渐成为了垃圾收集领域里的主流技术。
分代收集算法通常将堆中的内存块按寿命分为两类,年老的和年轻的。垃圾收集器使用不同的收集算法或收集策略,分别处理这两类内存块,并特别地把主要工作时间花在处理年轻的内存块上。分代收集算法使垃圾收集器在有限的资源条件下,可以更为有效地工作——这种效率上的提高在今天的 Java 虚拟机中得到了最好的证明。
应用浪潮
Lisp 是垃圾收集技术的第一个受益者,但显然不是最后一个。在 Lisp 语言之后,许许多多传统的、现代的、后现代的语言已经把垃圾收集技术拉入了自己的怀抱。随便举几个例子吧:诞生于 1964 年的 Simula 语言, 1969 年的 Smalltalk 语言, 1970 年的 Prolog 语言, 1973 年的 ML 语言, 1975 年的 Scheme 语言, 1983 年的 Modula-3 语言, 1986 年的 Eiffel 语言, 1987 年的 Haskell 语言……它们都先后使用了自动垃圾收集技术。当然,每一种语言使用的垃圾收集算法可能不尽相同,大多数语言和运行环境甚至同时使用了多种垃圾收集算法。但无论怎样,这些实例都说明,垃圾收集技术从诞生的那一天起就不是一种曲高和寡的“学院派”技术。
对于我们熟悉的 C 和 C++ 语言,垃圾收集技术一样可以发挥巨大的功效。正如我们在学校中就已经知道的那样, C 和 C++ 语言本身并没有提供垃圾收集机制,但这并不妨碍我们在程序中使用具有垃圾收集功能的函数库或类库。例如,早在 1988 年, H. J. Boehm 和 A. J. Demers 就成功地实现了一种使用保守垃圾收集算法( Conservative GC Algorithmic )的函数库(参见 http://www.hpl.hp.com/personal/Hans_Boehm/gc )。我们可以在 C 语言或 C++ 语言中使用该函数库完成自动垃圾收集功能,必要时,甚至还可以让传统的 C/C++ 代码与使用自动垃圾收集功能的 C/C++ 代码在一个程序里协同工作。
1995 年诞生的 Java 语言在一夜之间将垃圾收集技术变成了软件开发领域里最为流行的技术之一。从某种角度说,我们很难分清究竟是 Java 从垃圾收集中受益,还是垃圾收集技术本身借 Java 的普及而扬名。值得注意的是,不同版本的 Java 虚拟机使用的垃圾收集机制并不完全相同, Java 虚拟机其实也经过了一个从简单到复杂的发展过程。在 Java 虚拟机的 1.4.1 版中,人们可以体验到的垃圾收集算法就包括分代收集、复制收集、增量收集、标记-整理、并行复制( Parallel Copying )、并行清除( Parallel Scavenging )、并发( Concurrent )收集等许多种, Java 程序运行速度的不断提升在很大程度上应该归功于垃圾收集技术的发展与完善。
尽管历史上已经有许多包含垃圾收集技术的应用平台和操作系统出现,但 Microsoft .NET 却是第一种真正实用化的、包含了垃圾收集机制的通用语言运行环境。事实上, .NET 平台上的所有语言,包括 C# 、 Visual Basic .NET 、 Visual C++ .NET 、 J# 等等,都可以通过几乎完全相同的方式使用 .NET 平台提供的垃圾收集机制。我们似乎可以断言, .NET 是垃圾收集技术在应用领域里的一次重大变革,它使垃圾收集技术从一种单纯的技术变成了应用环境乃至操作系统中的一种内在文化。这种变革对未来软件开发技术的影响力也许要远远超过 .NET 平台本身的商业价值。
查看全文
herosoft
发表于:2009.07.09 17:40
::分类:
(
程序人生
)
::阅读:(7059次)
::
评论
(0)
===========================================================
===========================================================
转:浮点数在计算机中存储方式
C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。
无论是单精度还是双精度在存储中都分为三个部分:
- 符号位(Sign) : 0代表正,1代表为负
- 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
- 尾数部分(Mantissa):尾数部分
其中float的存储方式如下图所示:
而双精度的存储方式为:
R32.24和R64.53的存储方式都是用科学计数法来存储数据的,比如8.25用十进制的科学计数法表示就为:8.25*
,而120.5可以表示为:1.205*
,这些小学的知识就不用多说了吧。而我们傻蛋计算机根本不认识十进制的数据,他只认识0,1,所以在计算机存储中,首先要将上面的数更改为二进制的科学计数法表示,8.25用二进制表示可表示为1000.01,我靠,不会连这都不会转换吧?那我估计要没辙了。120.5用二进制表示为:1110110.1用二进制的科学计数法表示1000.01可以表示为1.0001*
,1110110.1可以表示为1.1101101*
,任何一个数都的科学计数法表示都为1.xxx*
,尾数部分就可以表示为xxxx,第一位都是1嘛,干嘛还要表示呀?可以将小数点前面的1省略,所以23bit的尾数部分,可以表示的精度却变成了24bit,道理就是在这里,那24bit能精确到小数点后几位呢,我们知道9的二进制表示为1001,所以4bit能精确十进制中的1位小数点,24bit就能使float能精确到小数点后6位,而对于指数部分,因为指数可正可负,8位的指数位能表示的指数范围就应该为:-127-128了,所以指数部分的存储采用移位存储,存储的数据为元数据+127,下面就看看8.25和120.5在内存中真正的存储方式。
首先看下8.25,用二进制的科学计数法表示为:1.0001*![clip_image002[2]](http://images.cnblogs.com/cnblogs_com/jillzhang/WindowsLiveWriter/float_A919/clip_image002%5B2%5D_thumb_1.gif)
按照上面的存储方式,符号位为:0,表示为正,指数位为:3+127=130 ,位数部分为,故8.25的存储方式如下图所示:
而单精度浮点数120.5的存储方式如下图所示:
那么如果给出内存中一段数据,并且告诉你是单精度存储的话,你如何知道该数据的十进制数值呢?其实就是对上面的反推过程,比如给出如下内存数据:0100001011101101000000000000,首先我们现将该数据分段,0 10000 0101 110 1101 0000 0000 0000 0000,在内存中的存储就为下图所示:
根据我们的计算方式,可以计算出,这样一组数据表示为:1.1101101*
=120.5
而双精度浮点数的存储和单精度的存储大同小异,不同的是指数部分和尾数部分的位数。所以这里不再详细的介绍双精度的存储方式了,只将120.5的最后存储方式图给出,大家可以仔细想想为何是这样子的
下面我就这个基础知识点来解决一个我们的一个疑惑,请看下面一段程序,注意观察输出结果
float f = 2.2f;
double d = (double)f;
Console.WriteLine(d.ToString("0.0000000000000"));
f = 2.25f;
d = (double)f;
Console.WriteLine(d.ToString("0.0000000000000"));
可能输出的结果让大家疑惑不解,单精度的2.2转换为双精度后,精确到小数点后13位后变为了2.2000000476837,而单精度的2.25转换为双精度后,变为了2.2500000000000,为何2.2在转换后的数值更改了而2.25却没有更改呢?很奇怪吧?其实通过上面关于两种存储结果的介绍,我们已经大概能找到答案。首先我们看看2.25的单精度存储方式,很简单 0 1000 0001 001 0000 0000 0000 0000 0000,而2.25的双精度表示为:0 100 0000 0001 0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000,这样2.25在进行强制转换的时候,数值是不会变的,而我们再看看2.2呢,2.2用科学计数法表示应该为:将十进制的小数转换为二进制的小数的方法为将小数*2,取整数部分,所以0.282=0.4,所以二进制小数第一位为0.4的整数部分0,0.4×2=0.8,第二位为0,0.8*2=1.6,第三位为1,0.6×2 = 1.2,第四位为1,0.2*2=0.4,第五位为0,这样永远也不可能乘到=1.0,得到的二进制是一个无限循环的排列 00110011001100110011... ,对于单精度数据来说,尾数只能表示24bit的精度,所以2.2的float存储为:
但是这样存储方式,换算成十进制的值,却不会是2.2的,应为十进制在转换为二进制的时候可能会不准确,如2.2,而double类型的数据也存在同样的问题,所以在浮点数表示中会产生些许的误差,在单精度转换为双精度的时候,也会存在误差的问题,对于能够用二进制表示的十进制数据,如2.25,这个误差就会不存在,所以会出现上面比较奇怪的输出结果。
本文属作者原创,只发布在博客园,希望大家在转载的时候,注明出处和作者,谢谢。
注:本文在写作过程中,参照了如下资料:
http://www.msdn.net/library/chs/default.asp?url=/library/CHS/vccore/html/_core_why_floating_point_numbers_may_lose_precision.asp
http://blog.csdn.net/ganxingming/archive/2006/12/19/1449526.aspx
查看全文
herosoft
发表于:2009.07.09 17:36
::分类:
( )
::阅读:(277次)
::
评论
(0)
===========================================================
===========================================================
转:malloc VS new, free VS delete
内存操作一直以来都让程序员吃足苦头,我们也来简单看看.
在C语言中,我们申请内存时先包含malloc.h头文件,使用函数malloc申请,C++中依然保留了该方式,新增加了种方式new ,该操作符不仅能为基本类型变量申请空间,能给对象申请空间,对应的释放操作则为delete,我们来看个简单的
查看全文
herosoft
发表于:2009.07.09 17:13
::分类:
(
C/C++
)
::阅读:(297次)
::
评论
(0)
===========================================================
===========================================================
转:八皇后问题 java实现,算法两则
八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。[英国某著名计算机图形图像公司面试题]
算法1:典型的回朔算法。打印出8皇后的最终排列。
解析:递归实现n皇后问题。
算法分析:
数组a、b、c分别用来标记冲突,a数组代表列冲突,从a[0]~a[7]代表第0列到第7列。如果某列上已经有皇后,则为1,否则为0。
数组b代表主对角线冲突,为b[i-j+7],即从b[0]~b[14]。如果某条主对角线上已经有皇后,则为1,否则为0。
数组c代表从对角线冲突,为c[i+j],即从c[0]~c[14]。如果某条从对角线上已经有皇后,则为1,否则为0。
查看全文
herosoft
发表于:2009.07.09 15:28
::分类:
( )
::阅读:(230次)
::
评论
(0)
===========================================================
===========================================================
维生素
外源性:人体自身不可合成(维生素D人体可以少量合成,但是由于较重要,仍被作为必需维生素),需要通过食物补充;
微量性:人体所需量很少,但是可以发挥巨大作用;
调节性:维生素必需能够调节人体新陈代谢或能量转变;
维生素特异性:缺乏了某种维生素后,人将呈现特有的病态。
查看全文
herosoft
发表于:2009.07.09 15:06
::分类:
(
Health
)
::阅读:(187次)
::
评论
(0)
===========================================================
===========================================================
转:Java同步技术 (一)
本文版权归作者Ian Gao所有,如有转载请与作者联系并注明出处http://blog.csdn.net/Iangao/archive/2008/10/09/3041265.aspx。
一、基本同步原理
1.1 同步机制(synchronize mechanism)
1.1.1 同步
多线程开发过程中,我们经常会提到同步这个词,那么什么是同步呢?为什么会存在同步问题呢?我们知道一个多线程应用系统在操作系统的进程(线程)机制下可以同时有多个进程(线程)并发运行,这此进程(线程)要完成的任务可能是互不相关的,但也可能是有联系的。那么当一个进程(线程)要和另一个进程(线程)交流信息时同步就有可能发生了。为什么呢?如果您不清,看了下面这个例子也许就会明白了。
查看全文
herosoft
发表于:2009.07.09 11:00
::分类:
( )
::阅读:(229次)
::
评论
(0)
===========================================================
===========================================================
转:Java同步技术
Java同步技术
文/ Iangao 2008.10.9
一基本同步原理
1. .基本同步原理
2. 信号量(Semphore)
二. 高级同步技术
1. 事件(Event)
2. 管程(Monitor)与条件变量(Condition)
3. 信号量、事件以及条件变量之间异同
三. 经典同步问题
1. 有限缓冲区(生产者-消费者)问题
2. 经典同步问题 - 读写问题(Reader-Writer)
四. 常用线程解决方案
1.定时器
2 对已有方法的同步或异步调用 - BlockingCall
附录:
1.一个简单的多线程测试类
查看全文
herosoft
发表于:2009.07.09 10:53
::分类:
( )
::阅读:(369次)
::
评论
(0)
===========================================================
===========================================================
Google操作系统基于Chrome?!
Google操作系统基于Chrome?!
Google OS的传闻早已不是一年两年那么长,而在当地时间周二晚上,Google官方博客撰文表示,一个基于Chrome浏览器的操作系统正在出现.
查看全文
herosoft
发表于:2009.07.09 09:57
::分类:
(
程序人生
)
::阅读:(179次)
::
评论
(0)
===========================================================
===========================================================
转:Java String中的HashCode和Equal
Java String中的HashCode和Equal
文/Iangao 2008.11.21 16:53
1. hashSet中比较是否重复的依据是a.hasCode()=b.hasCode() && a.equals(b)
2. String的hashCode依据: 以依赖于char[i]的int值以和char[i]的排列序的算法计算出的.不依赖String的ref.
3. String的equals依据: a==b || ( a.length=b.length && { a[i]=b[i] } )
4. 只有用a==b时比校的才是比校的ref,也就是说这时才是比校是a与b是不是同一个对象
查看全文
herosoft
发表于:2009.07.07 18:38
::分类:
( )
::阅读:(293次)
::
评论
(0)
===========================================================
===========================================================
转:Java中的HashSet, TreeSet, HashMap, TreeMap
Java中的HashSet和TreeSet
文/ Iangao
一. 问题
1. HashSet,TreeSet是如何使用hashCode()和equal()方法的
2. TreeMap,TreeSet中的对象何时以及为何要实现Comparable接口?
二. 回答:
1. HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key
2. Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个有序性.
3. hashCode和equal()是HashMap用的, 因为无需排序所以只需要关注定位和唯一性即可.
a. hashCode是用来计算hash值的,hash值是用来确定hash表索引的.
b. hash表中的一个索引处存放的是一张链表, 所以还要通过equal方法循环比较链上的每一个对象
才可以真正定位到键值对应的Entry.
c. put时,如果hash表中没定位到,就在链表前加一个Entry,如果定位到了,则更换Entry中的value,并返回旧value
查看全文
herosoft
发表于:2009.07.07 18:35
::分类:
( )
::阅读:(498次)
::
评论
(0)
===========================================================
===========================================================
原:八皇后问题的递归和非递归Java实现
原:八皇后问题的递归和非递归实现
八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名
的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即
任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后
来有人用图论的方法解出92种结果。事实上就是有92种解法。
以下是code:
查看全文
herosoft
发表于:2009.07.06 19:41
::分类:
( )
::阅读:(158次)
::
评论
(0)
===========================================================
===========================================================
转:JDK1.4非阻塞套接字API概述
J2SE 1.4版引入了非阻隔套接字(Nonblocking sockets),它允许在网络通信应用程序和没有阻隔的进程中使用套接字。本文将详细介绍什么是非阻隔套接字(Nonblocking sockets)及其工作原理和用途。
从Java 1.4起,程序员便能用一组新的API来进行I/O操作。这是JSR 51项目的结果,自2000年1月的Java 1.4 beta版,程序员便可以使用JSR 51了。在Java 1.4中增加了一些非常重要的新技术来处理诸如在文件和套接字上进行高性能的读/写操作,正规表达式,译码/编码字符集,内存映射和文件锁定。在这篇文章中,我们将讨论一个特殊的新API――New I/O API: Nonblocking sockets。
查看全文
herosoft
发表于:2009.07.01 21:54
::分类:
( )
::阅读:(300次)
::
评论
(0)
===========================================================
===========================================================
转:目前国内的广告联盟不计其数,但大多是鱼目混珠,下面介绍几个国内最好的也是最值得站长信任的十五个广告联盟:
目前国内的广告联盟不计其数,但大多是鱼目混珠,下面介绍几个国内最好的也是最值得站长信任的十五个广告联盟:
查看全文
herosoft
发表于:2009.06.28 08:47
::分类:
(
程序人生
)
::阅读:(190次)
::
评论
(0)
===========================================================
===========================================================
转:java应用 tomcat中实现https安全连接的方法
SSL, 或者Secure Socket Layer,是一种允许web浏览器和web服务器通过一个安全的连接进行交流的技术。这意味着将被发送的数据在一端被翻译成密码,传送出去,然后在另一端解开密码,再进行处理。这是一个双向的过程,也就是浏览器和服务器都需要在发送数据之前对它们进行加密。
查看全文
herosoft
发表于:2009.06.25 15:39
::分类:
( )
::阅读:(208次)
::
评论
(0)
===========================================================
===========================================================
转载自月光博客 [ http://www.williamlong.info/ ] - 中文分词和TF-IDF
中文分词(Chinese Word Segmentation)指的是将一个汉字序列切分成一个一个单独的词。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。
TF-IDF(term frequency–inverse document frequency)是一种用于信息搜索和信息挖掘的常用加权技术。在搜索、文献分类和其他相关领域有广泛的应用。
TF-IDF的主要思想是,如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TF词频(Term Frequency)指的是某一个给定的词语在该文件中出现的次数。IDF反文档频率(Inverse Document Frequency)的主要思想是:如果包含词条的文档越少,IDF越大,则说明词条具有很好的类别区分能力。
使用TF*IDF可以计算某个关键字在某篇文章里面的重要性,因而识别这篇文章的主要含义,实现计算机读懂文章的功能。
常见中文分词开源项目:
SCWS:
Hightman开发的一套基于词频词典的机械中文分词引擎,它能将一整段的汉字基本正确的切分成词。采用的是采集的词频词典,并辅以一定的专有名称,人名,地名,数字年代等规则识别来达到基本分词,经小范围测试大概准确率在 90% ~ 95% 之间,已能基本满足一些小型搜索引擎、关键字提取等场合运用。45Kb左右的文本切词时间是0.026秒,大概是1.5MB文本/秒,支持PHP4和PHP 5。
ICTCLAS:
这可是最早的中文开源分词项目之一,ICTCLAS在国内973专家组组织的评测中活动获得了第一名,在第一届国际中文处理研究机构SigHan组织的评测中都获得了多项第一名。ICTCLAS3.0分词速度单机996KB/s,分词精度98.45%,API不超过200KB,各种词典数据压缩后不到3M.ICTCLAS全部采用C/C++编写,支持Linux、FreeBSD及Windows系列操作系统,支持C/C++、C#、Delphi、Java等主流的开发语言。
庖丁解牛分词:
Java 提供lucence 接口,仅支持Java语言。
CC-CEDICT:
一个中文词典开源项目,提供一份以汉语拼音为中文辅助的汉英辞典,截至2009年2月8日,已收录82712个单词。其词典可以用于中文分词使用,而且不存在版权问题。Chrome中文版就是使用的这个词典进行中文分词的。
基于VB/ASP的中文分词
上面的开源项目没有给予VB和ASP的,这里提供一个简单的VB/ASP类,加上词典之后就可以进行分词了,注意这个类只供演示,其分词速度极慢不适合实际应用。
类名为:WordSplit
Private rootTable As String
Private Function GetCount(ByVal s As String) As Long
GetCount = InStr(1, rootTable, s)
End Function
Public Function WordCount(ByVal strString As String, ByVal strGetWord As String) As Long
Dim k
k = Split(strString, strGetWord)
WordCount = UBound(k)
End Function
' 分析输入的字符串,将其切割成一个个的词语。
' <param name="s">待切割的字符串</param>
' <returns>所切割得到的中文词语数组</returns>
Public Function ParseChinese(ByVal s As String, ByVal separator As String) As String
Dim lngLength As Long
Dim strTemp As String
Dim ArrayList As String
Dim i, j
ArrayList = ""
lngLength = Len(s)
i = 1
While i < lngLength
strTemp = Mid(s, i, 1)
If GetCount(strTemp) > 1 Then
j = 2
While i + j < lngLength + 1 And GetCount(Mid(s, i, j)) > 0
j = j + 1
Wend
strTemp = Mid(s, i, j - 1)
i = i + j - 2
End If
i = i + 1
'WordAdd (temp)
ArrayList = ArrayList + strTemp + separator
Wend
ParseChinese = ArrayList
End Function
Private Sub Class_Initialize()
Dim fso, templetfile, txtfile
templetfile = App.Path + "ChineseDictionary.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set txtfile = fso.OpenTextFile(templetfile, 1)
rootTable = txtfile.ReadAll
txtfile.Close
End Sub
调用示例:
strInput = "中文分词指的是将一个汉字序列切分成一个一个单独的词。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。"
Dim strWordSplit As New WordSplit
strSubject = strWordSplit.ParseChinese(strInput, "|")
arrSubject = Split(strSubject, "|")
查看全文
herosoft
发表于:2009.06.25 11:58
::分类:
( )
::阅读:(184次)
::
评论
(0)
===========================================================
===========================================================
转:“神医”李培刚没治好李宁 日前接受微创手术
李培刚(左)在《面对面》节目中的“表演”。 资料片 查看全文
herosoft
发表于:2009.06.25 11:51
::分类:
(
Health
)
::阅读:(163次)
::
评论
(0)
===========================================================
===========================================================
转:桑兰:我对“神医”李培刚的七个质疑
2009-06-19 17:23:26 来源:搜狐博客 本文已影响
1341人
创投圈核心提示:此话有误导观众的成分,并且明显暴露出节目出发点并不是从医学专业角度出发,而只是就人论事。诸如腰椎、颈椎而导致的截瘫目前治疗方法是有限的,中医治疗截瘫的方法就是打通脉络,使神经压迫症状减轻,比如针灸、药剂等。
查看全文
herosoft
发表于:2009.06.25 11:48
::分类:
(
Health
)
::阅读:(113次)
::
评论
(0)
===========================================================
===========================================================
转:『天涯杂谈』现实让李培刚走下“神坛”,真正治好李宁的不是李培刚
北京时间6月24日, “体操王子”李宁在北京大学人民医院成功实施了腰部微创手术后,康复出院,将回家继续修养康复。
在去年的北京奥运会开幕式上,李宁高擎火炬、环绕鸟巢奔跑、最终点燃主火炬的场景至今令国人记忆犹新。谁也不会想到步伐矫健的他当时已经备受反复性腰骶部疼痛折磨30多年。在下肢疼痛、麻木4个月后,李宁于今年6月8日坐着轮椅入住北京大学人民医院进行手术治疗。
手术进行得非常成功,术后李宁对手术效果十分满意,自述右下肢疼痛、麻木感明显消退,并以“仁心医德”盛赞主刀医师刘海鹰教授技术精湛,用最小的创伤让他最快的康复,并摆脱了痛苦。
那我们就有疑问了,当时李宁不是被我们的“神医”李培刚靠他“神奇的双手”治好了吗?怎么又去动手术了?6月8日到北京大学人民医院住院治疗竟然还是坐着轮椅,难道不但没有好,还更加严重了?我们的“神医”到底是怎么治疗的啊……
首先,让我们回顾一下当时李培刚在接受CCTV采访的时候,在谈及李宁这一段,他是怎么说的:
旁白:2009年3月,昔日奥运会体操冠军李宁来到了李培刚的诊室,
李培刚:你看,如果是它引起的麻,(手指指向MRI腰椎间盘突出部位),你不是一个腿麻(椎间盘突出大多数情况,髓核都是偏向一侧的,真正的中央型突出其实相比较起来不多,因此,单侧下肢麻木是常见的症状,从专业人士的角度,这是医学常识,我们的李培刚大师难道……)。主要是你的软组织交错紊乱了、关系紊乱了,增生肥厚了,把神经基膜和肌肉鞘膜粘连在一起,你这个就是坐的时间太长了,运动少,甚至突然运动一次就是损伤了
李宁:所以跨腰之间有东西
李培刚:腰肌是不正常的,腰肌是有问题的,腰肌劳损了,但是腰肌劳损不会导致麻,他们认为现在的麻就是椎管狭窄压迫的,或者椎间盘突出导致椎管狭窄。李宁,我一会儿给你找出这个麻是什么原因引起的,我治病不治你椎管。
然后画面就让李宁蹲下
李培刚要李宁躺到床上,开始治疗。
旁白:李宁曾在多家医院进行核磁共振检查,诊断结果是腰椎骨质增生,腰椎间盘突出和椎管狭窄。经过数周治疗无效(具体什么治疗?怎么治疗的?央视完全忽略……),医生建议他手术治疗。
李培刚:李宁,你看你这个胯,和腰没有界限了,你知道为什么吗?这是肌肉拽的(我是真想把李培刚拽过来暴扁)。没有办法,明白吗。所以说,这不是胯,这是胯外的一层肥厚组织,你看,滚动了,感觉到了吗?就是这些东西,附着在你的髂肌上,感觉到了吗?在动。因为炎症,导致了你的肌肉不收缩,因为它导致疲劳过度,疲劳过度之后,又带伤,就和、就和,最后麻。
治疗之后,感觉麻木有所好转。
旁白:2个月的时间里,李宁先后在李培刚这里进行了3次治疗,每次一个小时。您觉得跟您治疗之前有缓解吗?(这话问的太没水平了,推拿按摩之后你问他有没有好转,当时当然是有好转啦,但是这和李培刚医学新疗法有关吗?这和推拿按摩又有不同吗?)
李宁:从肌肉和麻木这块来看,疼痛是有缓解,末端力量,协调性,踢腿都有明显的改善。(其实推拿就是这样的,我只能说,李宁在体育圈里是专家,但是对于医学是真的不懂,这也不能怪他,其实大多数的患者都不懂,而这恰恰成为了一些江湖游医忽悠的手段)
主持:为什么能在几个小时得到缓解?
李培刚:因为我知道他的问题所在,我没有瞄准这个脊髓,我也没瞄准关节和间盘,我找到异常病变,把它解除,就像咱们止血带,我们都没想到把止血带给松开,把它间隙扩大了,压迫解除了,把它交织紊乱在一起的组织关系旅顺了,各归其位各负其责,机体阻塞了、紊乱了,我就像交通警察一样,疏导交通去。
主持:难道一辈子离不开您了吗?
李培刚:要长期治疗,不过一年1—2次就OK了。(也就是说,一年1—2次,然后还是一辈子都靠您了是吧……呵呵……您还真会偷换概念)
咱们不说别的,就说如果李培刚真的那么神,把李宁的椎间盘突出治好了,当然,是按照他所谓的“粘连”去治、按照所谓的“李培刚新疗法”“李培刚新理论”治疗,李宁还会来做手术吗?
事实是很明显的。
我不想鼓吹西医手术治疗椎间盘突出是唯一手段或者最佳选择,也不想讨论中医传统理论的精华及治法的效果。一个伟大的人曾说过:实事求是。我只是想说,不分中医还是西医,无所谓现代还是古代,科学就是科学,要有他的科学性。您说您能治好截瘫,但又反过来说也不是所有的截瘫都能治;在录像里,您能让瘫痪了几年的63岁老年患者重新站起来,但是,却无法用您的理论解释和治疗李宁的椎间盘突出。当然,给患者看到的都是希望,但是似乎李培刚先生您对语言的运用能力远远强于您对于医疗知识的掌握和您的疗效。
我想,即使CCTV随便去中医院或者西医院采访哪怕是一个最低年资的脊柱骨科住院医生,问他/她:“你能治好截瘫吗?你能治好椎间盘突出吗?”我想大家的回答也不会和李培刚有太大的差别吧:“能不能治好这个要看情况,不是所有的截瘫都能治好,有些就可以;椎间盘突出,早期可以行保守治疗,推拿、针灸、拔罐、药物等等,但是到了晚期,手术可能就不可避免了”。那么,李培刚!你有什么真本事能让医生和患者相信你的能力呢?CCTV!你们采访这样一个连文凭都不知道从哪里来的“伪专家”,目的又是什么呢?
在这个“娱乐至上”的时代,有些人总是把群众当做“愚民”,以为娱乐自己、娱乐大家,受到关注,得到利益是最大的收获,但恰恰忽略了作为一个人应有的尊严。既然央视和李培刚仅仅是抱着“娱乐大众”的态度,那么大家也就把它当做是一场“周老虎”式的闹剧,看着那些自以为聪明的“愚人”,是怎么用尊严来卖笑的吧。
最后
想对患者说一句:擦亮眼睛,身体是你自己的,治病一定要把它交给值得信赖的人!
想对李培刚说一句:您连李宁都治不好,就不要再说截瘫了,免得让桑兰笑话!
herosoft
发表于:2009.06.25 11:40
::分类:
(
Health
)
::阅读:(130次)
::
评论
(0)
===========================================================
===========================================================
转:MSN名医讲堂:有没有能用按摩治好的瘫痪?
央视“面对面”节目中,播出了一个能用按摩治好瘫痪的“神医”,引起大家对央视权威性的质疑,也由此怀疑到中医按摩的效应。按摩的作用到底有多大?最适合解决哪些问题?能不能治愈瘫痪?哪种瘫痪确实可以重新站起来的?中国中医科学院骨伤研究所赵勇教授将作客直播室。
名医讲堂更多精彩视频
查看全文
herosoft
发表于:2009.06.25 11:35
::分类:
(
Health
)
::阅读:(173次)
::
评论
(0)
===========================================================
===========================================================
怎样预防猪流感
随
著有關豬流感的擔憂席捲全球﹐保護自己、避免感染豬流感或其他傳染病的最好方式就是具備一些常識﹕常洗手﹐咳嗽和打噴嚏時應掩住口鼻﹐如果覺得不舒服就在家休息﹐不要上班或去學校。着有关猪流感的担忧席卷全球﹐保护自己、避免感染猪流感或其他传染病的最好方式就是具备一些常识﹕常洗手﹐咳嗽和打喷嚏时应掩住口鼻﹐如果觉得不舒服就在家休息﹐不要上班或去学校。 查看全文
herosoft
发表于:2009.05.04 10:49
::分类:
(
Health
)
::阅读:(117次)
::
评论
(0)
===========================================================
===========================================================
Java 同步机制浅谈
Java对多线程的支持与同步机制深受大家的喜爱,似乎看起来使用了synchronized关键字就可以轻松地解决多线程共享数据同步问题。到底如何?――还得对synchronized关键字的作用进行深入了解才可定论。
总的说来,synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class literals(类名称字面常量)身上。
A.无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象,而不是把
一段代码或函数当作锁――而且同步方法很可能还会被其他线程的对象访问 。
B.每个对象只有一个锁(lock)与之相关联。
C.实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无 谓的同步控制。
接着来讨论synchronized用到不同地方对代码产生的影响:
假设P1、P2是同一个类的不同对象,这个类中定义了以下几种情况的同步块或同步方法,P1、P2就都可以调用它们。
1. 把synchronized当作函数修饰符时,示例代码如下:
Public synchronized void methodAAA()
{
//….
}
这也就是同步方法,那这时synchronized锁定的是哪个对象呢?它锁定的是调用这个同步方法对象。也就是说,当一个对象P1在不同的线程中执行这个同步方法时,它们之间会形成互斥,达到同步的效果。但是这个对象所属的Class所产生的另一对象P2却可以任意调用这个被加了synchronized关键字的方法。
上边的示例代码等同于如下代码:
public void methodAAA()
{
synchronized (this) // (1)
{
//…..
}
}
(1)处的this指的是什么呢?它指的就是调用这个方法的对象,如P1。可见同步方法实质是将synchronized作用于object reference。――那个拿到了P1对象锁的线程,才可以调用P1的同步方法,而对P2而言,P1这个锁与它毫不相干,程序也可能在这种情形下摆脱同步机制的控制,造成数据混乱:(
2.同步块,示例代码如下:
public void method3(SomeObject so)
{
synchronized(so)
{
//…..
}
}
这时,锁就是so这个对象,谁拿到这个锁谁就可以运行它所控制的那段代码。当有一个明确的对象作为锁时,就可以这样写程序,但当没有明确的对象作为锁,只是想让一段代码同步时,可以创建一个特殊的instance变量(它得是一个对象)来充当锁:
class Foo implements Runnable
{
private byte[] lock = new byte[0]; // 特殊的instance变量
Public void methodA()
{
synchronized(lock) { //… }
}
//…..
}
注:零长度的byte数组对象创建起来将比任何对象都经济――查看编译后的字节码:生成零长度的byte[]对象只需3条操作码,而Object lock = new Object()则需要7行操作码。
3.将synchronized作用于static 函数,示例代码如下:
Class Foo
{
public synchronized static void methodAAA() // 同步的static 函数
{
//….
}
public void methodBBB()
{
synchronized(Foo.class) // class literal(类名称字面常量)
}
}
代码中的methodBBB()方法是把class literal作为锁的情况,它和同步的static函数产生的效果是一样的,取得的锁很特别,是当前调用这个方法的对象所属的类(Class,而不再是由这个Class产生的某个具体对象了)。
记得在《Effective Java》一书中看到过将 Foo.class和 P1.getClass()用于作同步锁还不一样,不能用P1.getClass()来达到锁这个Class的目的。P1指的是由Foo类产生的对象。
可以推断:如果一个类中定义了一个synchronized的static函数A,也定义了一个synchronized 的instance函数B,那么这个类的同一对象Obj在多线程中分别访问A和B两个方法时,不会构成同步,因为它们的锁都不一样。B方法的锁是Obj这个对象,而A的锁是Obj所属的那个Class。
查看全文
herosoft
发表于:2009.05.03 21:29
::分类:
( )
::阅读:(227次)
::
评论
(0)
===========================================================
===========================================================
Socket编程中的同步、异步、阻塞和非阻塞(转)
http://hi.baidu.com/evenque/blog/item/1ccfc63ffc3527c17d1e7188.html
在进行网络编程时,我们常常见到同步、异步、阻塞和非阻塞四种调用方式。这些方式彼此概念并不好理解。下面是我对这些术语的理解。
同步
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是SendMessage(JAMBOL注:PostMessage是异步机制)。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的LRESULT值返回给调用者。
异步
异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。以CAsycSocket类为例(注意,CSocket从CAsyncSocket派生,但是起功能已经由异步转化为同步),当一个客户端通过调用Connect函数发出一个连接请求后,调用者线程立刻可以朝下运行。当连接真正建立起来以后,socket底层会发送一个消息通知该对象。
这里提到执行部件和调用者通过三种途径返回结果:状态、通知和回调。可以使用哪一种依赖于执行部件的实现,除非执行部件提供多种选择,否则不受调用者控制。如果执行部件用状态来通知,那么调用者就需要每隔一定时间检查一次,效率就很低(有些初学多线程编程的人,总喜欢用一个循环去检查某个变量的值,这其实是一种很严重的错误)。如果是使用通知的方式,效率则很高,因为执行部件几乎不需要做额外的操作。至于回调函数,其实和通知没太多区别。
阻塞
阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。
有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。例如,我们在CSocket中调用Receive函数,如果缓冲区中没有数据,这个函数就会一直等待,直到有数据才返回。而此时,当前线程还会继续处理各种各样的消息。如果主窗口和调用函数在同一个线程中,除非你在特殊的界面操作函数中调用,其实主界面还是应该可以刷新。
socket接收数据的另外一个函数recv则是一个阻塞调用的例子。当socket工作在阻塞模式的时候,如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。
非阻塞
非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
查看全文
herosoft
发表于:2009.05.03 16:13
::分类:
(
Unix相关
)
::阅读:(428次)
::
评论
(0)
===========================================================
===========================================================
杀软使用心得
杀软无数手中过,
金山瑞星不杀马,
江民防火没防住,
卡巴斯基卡死机,
唯有诺顿安吾心。
查看全文
herosoft
发表于:2009.05.02 11:23
::分类:
(
程序人生
)
::阅读:(188次)
::
评论
(0)
===========================================================
===========================================================
转:360安全中心:大众版网银最不安全
360安全中心:大众版网银最不安全
来源:360安全中心 发布日期:2009-03-20 共134条回复
三成用户决定减少使用网银 八成潜在用户打算推迟尝试
央视3.15晚会曝光黑客盗取网银账户钱财,由此引发了一系列连锁反应。3月19日,艾瑞发布调查结果称,近三成网银用户决定减少使用网银,而近八成潜在用户打算推迟尝试网银;同一天,国内19家商业银行联合启动“2009放心安全用网银联合宣传年”活动。那么网银到底是否安全?是相信银行,继续使用网银,还是小心为妙不再使用?3月20日,国内最大的网络安全公司奇虎360总裁齐向东表示:“目前网银的确存在很多安全隐患,其中大众版网银尤其不安全,但是风险并非不可控, 关键看你采取了什么样的安全措施。”
据齐向东介绍,通过信用卡、网银等盗取小额钱财在国外是非常主流的网络犯罪形式。根据美国某反钓鱼网站的调查, 2007年美国每个月网银被盗案件有55643次,全年受害者达360万人,直接经济损失更高达32亿美元。“中国网银用户的安全保护意识普遍较弱,由于利用木马的盗窃团伙大多采用小额盗窃方式,多数用户丢了钱自己并不知道。所以国内目前还没有网银被盗的官方数字。”齐向东告诉记者,“但中美两国互联网行业数据一般为1:5,如果按此估算,国内网银被盗金额总规模应在40亿人民币以上,而且这个数字还在逐年攀升。”
据了解,国内网银目前分为大众版和专业版两种。“根据这两种形态,网银安全问题主要包括密码安全保护和数字证书安全保护。”齐向东表示,“大众版目前的安全系数的确很低,专业版会相对好些。”一般来说,黑客主要通过盗取网银账户密码作案、在“肉鸡”用户电脑上直接转账、充分利用网银用户不良使用习惯等三种手段对偷钱。其中,第一种方式主要针对大众版,而后两种主要针对专业版。
近日,业界盛传“黑客可绕开网银U盾”,而银行方面回应称“黑客破解网银U盾须耗数百万年”。针对双方针锋相对的说辞,齐向东认为,从360安全中心与黑客木马对抗的经验来看,“目前网银所有安全措施中,U盾的安全系数的确是最高的,但这不是绝对的。”据他透露,目前确实已有木马能突破U盾来偷钱,但数量较少。“从成本的角度考虑,突破U盾来盗取网银账户上的钱财,还不是木马盗窃团伙的重点。目前网民受害者最多的,还是大众版网银用户。”
360安全专家石晓虹博士对此解释道:“使用专业版网银就像古代调兵的两半虎符,密码和数字证书缺一不可,之所以出现个别用户大笔钱财被盗的情况,还是用户自身安全意识不强,有些U盾用户没有养成使用完U盾立刻从电脑上拔下的习惯,一旦不法分子得到受害用户的网银信息,便可以远程控制“肉鸡”电脑直接操作网银。用户相当于被自己的坏习惯‘出卖’了。”
相对而言,大众版网银的安全隐患更为严重,无论是加装安全控件,还是采用动态软键盘,黑客都可以使用木马远程监控用户电脑键盘、桌面软键盘操作、用木马劫持浏览器以及利用伪造的网银操作页面(俗称“钓鱼网站”)等方式获取用户密码。“最可怕的是,很多用户根本不知道自己的网银账户已被黑客随意出入。”360安全专家石晓虹博士说,“电脑如果不打补丁、随意访问不良网站或被黑客入侵‘挂马’的网站,木马就会自动安装在电脑中窥视用户的一举一动,包括窃取网银密码,这种情况出现的可能性很高。”
那么,普通用户如何保护自己的网银账户安全呢?对此,360安全专家石晓虹博士建议:
首先,尽量使用各大银行提供的安全系数高的方式来进行网银操作。对于采用文件证书网银的用户,一定不要将数字证书文件直接存在电脑中,而是要存在一个U盘等移动介质中。而对于那些U盾网银用户,在每次完成网银操作后,要尽快拔下U盾。
其次,建议安装360安全卫士、360保险箱等安全软件,并定期打补丁和查杀,封堵住木马入侵的通道,以确保自己的电脑中没有木马。360是国内目前对网银账户保护最好的安全软件之一。360保险箱目前提供了对15家主要网银的账号保护功能,其作用在于阻止木马程序注入到浏览器进程中,并阻止木马监控用户的软、硬键盘操作,这样就能保护用户在输入密码时不会被黑客劫持,可以在一个干净安全的系统环境中使用网银账户。
第三,要及时、定期查验银行对账单,如发现问题及时举报,配合公安机关及时打击犯罪分子。
“其实国内木马从业者目前的主营业务还是网游盗号,黄金期一个木马盗窃团伙每天都能净赚2万到3万元,虽然现在国内安全软件的普及率日增导致其收入大幅缩水,但不法分子偷网银主要还是以诈骗为主、木马技术手段为辅。普通网民只要安装了360等专业杀木马软件,操作网银时保持警惕,别贪小便宜,风险就会变得很低。”一位热衷于电脑破解技术的高手如此建议普通网银用户。
查看全文
herosoft
发表于:2009.04.27 21:54
::分类:
(
程序人生
)
::阅读:(209次)
::
评论
(0)
===========================================================
===========================================================
转:寒凉与温热体质需要不同的食补养颜方(1)
http://book.sina.com.cn 2008年08月21日15:13 新浪读书
美容生活坊
琳一直给人一种小鸟依人的感觉,苗条的身材,妩媚的丹凤眼,不仅男生看了“神魂颠倒”,女生也想多看几眼。可是虽有迷人外表,她的身体却不容乐观,越来越消瘦的脸庞也略微出现了几个斑点,身体也逐渐消瘦,乳房也缩了水。她说她有些贫血,但平时最喜欢吃性凉的东西,比如苹果、橙子、鸭肉、绿豆汤等,不喜欢吃羊肉、洋葱、韭菜这些温热的东西。其实恰恰是这些东西让她的身体每况愈下,离美丽也愈来愈远。
朱丹溪认为,温热为阳,寒凉为阴,只有将食物的温热寒凉因人、因时、因地地灵活运用,才能使人体在任何时候都能气血充足、阴阳平衡,女人才能拥有红润水灵的肤色。
身体内寒气较重、气血两亏的虚弱之人不分季节,要多吃温热性质的食物,如牛肉、羊肉、洋葱、韭菜、生姜等,这样身体才会产热,使机能兴奋、增强活力、血脉畅通。现代人吃的食物普遍性凉,又大量使用空调等降温,所以99%都属于寒凉体质。
如果身体内热大,精力旺盛,就不用吃太多温热性质的食物,吃多了会燥热、上火,机体过于亢奋,所以要适当选用一些寒凉的食物来进行平衡。
寒凉和温热的体质需要注意不同食物的属性,从而有侧重地进行食补。那怎么才知道自己是寒凉体质还是温热体质呢?比较简单的检测方法是:
若感到喝热水舒服,大体属寒证。一般来说,虚寒体质的人基础代谢率低,体内产热量少,四肢即便在夏季也是冷的,他们面色较常人白,很少口渴,也不喜欢接触凉的东西,包括进空调房间。
若感到喝凉水舒服,大体属热证。实热体质的人代谢旺盛,产热多,经常脸色红赤,口渴舌燥,喜欢吃冷饮,易烦燥,常便秘。
下面将常见食物按温热寒凉性质分类列出来,供大家参考:
谷类饮食
性平:大米、玉米、青稞、米皮糠(米糠)、番薯(山芋、红薯)、芝麻、黄豆、饭豇豆(白豆)、豌豆、扁豆、蚕豆、赤小豆、黑大豆、燕麦。
性温:糯米、黑米、西谷米(西米)、高粱。
性凉:粟米(小米)、小麦、大麦、荞麦、薏苡仁、绿豆。
肉类饮食
性平:猪肉、猪心、猪肾、猪肝、鸡蛋、鹅肉、驴肉、野猪肉、刺猬肉、鸽肉、鹌鹑、乌鸦肉、蛇肉、蝗虫(蚂蚱)、阿胶(驴皮胶)、牛奶(微凉)、酸牛奶、人奶、甲鱼(微凉)、龟肉(微温)、干贝、泥鳅、鳗鱼、鲫鱼、青鱼、黄鱼、乌贼鱼、鱼翅、鲈鱼、银鱼、鲥鱼、鲤鱼、鲳鱼、鲑鱼、鲨鱼、橡皮鱼、海参(微凉)。
性温:黄牛肉、牛肚、牛髓、狗肉、猫肉、羊肉、羊肚、羊骨、羊髓、鸡肉(微温)、乌骨鸡、麻雀、野鸡肉、鹿肉、熊掌、蛤蚧(大壁虎)、獐肉(河鹿肉)、蚕蛹、羊奶、海马、海龙、虾、蚶子(毛蚶)、淡菜(水菜)、鲢鱼、带鱼、鳊鱼、鲶鱼、刀鱼、混子鱼、鲦鱼(白条鱼)、鳟鱼、鳝鱼(黄鳝)、大头鱼。
性凉:水牛肉、鸭肉、兔肉、马奶、蛙肉(田鸡)、鲍鱼。
性寒:鸭蛋(性微寒)、马肉、水獭肉、螃蟹、海螃蟹、蛤蜊(沙蛤、海蛤、文蛤)、牡蛎肉、蜗牛、蚯蚓、田螺(大寒)、螺蛳、蚌肉、蚬肉(河蚬)、乌鱼、章鱼。
果类饮食
性平:李子、花红(沙果)、菠萝、葡萄、橄榄、葵花子、香榧子、南瓜子、芡实(鸡头果)、莲子、椰子汁、柏子仁、花生、白果、榛子、山楂、板栗。
性温:桃子、杏子、大枣、荔枝、桂圆肉、佛手柑、柠檬(性微温)、金橘、杨梅、石榴、木瓜、槟榔、松子仁、核桃仁、樱桃。
性凉:苹果(性微凉)、梨、芦柑、橙子、草莓(性微凉)、芒果、枇杷、罗汉果、莲子心、百合。
性寒:柿子、柿饼、柚子、香蕉、桑葚、洋桃、无花果、猕猴桃、甘蔗、西瓜、甜瓜(香瓜)。
菜类饮食
性平:山药、萝卜(微凉)、胡萝卜、包菜、茼蒿、大头菜、青菜、母鸡头、豆豉、豇豆、土豆、芋头、洋生姜、海蜇、黑木耳(微凉)、香菇、平菇、猴头菇、葫芦。
性温:葱、大蒜、韭菜、芫荽(香菜)、雪里红、洋葱、香椿头、南瓜。
性热:辣椒。
性凉:西红柿(微凉)、旱芹、水芹菜、茄子、油菜、苤蓝、茭白、苋菜、马兰头、菊花脑、菠菜、金针菜(黄花菜)、莴苣(莴笋)、花菜、枸杞头、芦蒿、豆腐(豆腐皮、豆腐干、豆腐乳)、面筋、藕、冬瓜、地瓜、丝瓜、黄瓜、海芹菜(裙带菜)、蘑菇、金针菇。
性寒:慈姑(微寒)、马齿苋、蕹菜(空心菜)、木耳菜(西洋菜)、莼菜、发菜(龙须菜)、蕺菜、竹笋(微寒)、瓠子、菜瓜、海带、紫菜、海藻、地耳、草菇、苦瓜、荸荠。
其他饮食
性平:白糖、冰糖(微凉)、豆浆、枸杞子(微温)、灵芝、银耳(微凉)、燕窝、玉米须、黄精、天麻、党参、茯苓、干草、鸡内金、酸枣仁、菜油、麻油、花生油、豆油、饴糖(麦芽糖、糖稀)。
性温:生姜、砂仁、花椒、紫苏、小茴香、丁香、八角、茴香、酒、醋、红茶、石碱、咖啡、红糖、桂花、松花粉、冬虫夏草、紫河车(胎盘)、川芎、黄芪(性微温)、太子参(微温)、人参、当归、肉苁蓉、杜仲、白术、何首乌(微温)。
性热:胡椒、肉桂。
性凉:绿茶、蜂蜜、蜂王浆、啤酒花、槐花(槐米)、菊花、薄荷、胖大海、白芍、沙参、西洋参、决明子。
性寒:酱油、面酱、盐、金银花、苦瓜茶、苦丁茶、茅草根、芦根、白矾。
查看全文
herosoft
发表于:2009.04.20 12:46
::分类:
(
Health
)
::阅读:(191次)
::
评论
(0)
===========================================================
===========================================================
转:熟知食物的温热寒凉平是保证气血充足的关键-马悦凌
潜能开发每日一帖,主编:Larry
论坛交流:http://bbs.8801.com/forum-120-1.html
作者:马悦凌;摘自《不生病的智慧》
第一章 让我们的身体四季如春
懂得食物的五味才能保证“后天之本”安全
人们的饮食习惯是受市场控制的,市面上卖什么大家就吃什么。可现在市面上供应的食物已没了季节、区域之分。
生活在内地的人们仍然要经历一年四季的温度变化,要经历从入秋到次年的春天长达半年的寒凉天气,这时再不学点饮食保健常识,不熟悉各类食物的温热寒凉平的属性,在天冷的时候大量误吃寒凉的水果、蔬菜和饮料,不断地在给身体内的脏器降温,带来的直接后果就是血液循环越来越慢、脏器功能下降、衰老期提前,血流得越慢,沉淀越多,血管越易淤堵、梗塞,从而导致各种与血管相关的心脑血管病高发。
下面将常见食物的五味分类列出来,供大家参考:
谷类饮食
性平:大米、玉米、青稞、米皮糠(米糠)、番薯(山芋、红薯)、芝麻、黄豆、饭豇豆(白豆)、豌豆、扁豆、蚕豆、赤小豆、黑大豆、燕麦。
性温:糯米、黑米、西谷米(西米)、高粱。
性凉:粟米(小米)、小麦、大麦、荞麦、薏苡仁、绿豆。
肉类饮食
性平: 猪肉、猪心、猪肾、猪肝、鸡蛋、鹅肉、驴肉、野猪肉、刺猬肉、鸽肉、鹌鹑、乌鸦肉、蛇肉、蝗虫(蚂蚱)、阿胶(驴皮胶)、牛奶(微凉)、酸牛奶、人奶、甲鱼(微凉)、龟肉(微温)、干贝、泥鳅、鳗鱼、鲫鱼、青鱼、黄鱼、乌贼鱼、鱼翅、鲈鱼、银鱼、鲥鱼、鲤鱼、鲳鱼、鲑鱼、鲨鱼、橡皮鱼、海参(微凉)。
性温: 黄牛肉、牛肚、牛髓、狗肉、猫肉、羊肉、羊肚、羊骨、羊髓、鸡肉(微温)、乌骨鸡、麻雀、野鸡肉、鹿肉、熊掌、蛤蚧(大壁虎)、獐肉(河鹿肉)、蚕蛹、羊奶、海马、海龙、虾、蚶子(毛蚶)、淡菜(水菜)、鲢鱼、带鱼、鳊鱼、鲶鱼、刀鱼、混子鱼、鲦鱼(白条鱼)、鳟鱼、鳝鱼(黄鳝)、大头鱼。
性凉: 水牛肉、鸭肉、兔肉、马奶、蛙肉(田鸡)、鱼、鲍鱼。
性寒:鸭蛋(性微寒)、马肉、水獭肉、螃蟹、海螃蟹、蛤蜊(沙蛤、海蛤、文蛤)、牡蛎肉、蜗牛、蚯蚓、田螺(大寒)、螺蛳、蚌肉、蚬肉(河蚬)、乌鱼、章鱼。
果类饮食
性平:李子、花红(沙果)、菠萝、葡萄、橄榄、葵花子、香榧子、南瓜子、芡实(鸡头果)、莲子、椰子汁、柏字仁、花生、白果、榛子、山楂、板栗。
性温:桃子、杏子、大枣、 荔枝、桂圆肉、佛手柑、柠檬(性微温)、金橘、杨梅、石榴、木瓜、槟榔、松子仁、核桃仁、樱桃。
性凉:苹果(性微凉)、梨、芦柑、橙子、草莓(性微凉)、芒果、枇杷、罗汉果、菱、莲子芯、百合。
性寒:柿子、柿饼、柚子、香蕉、桑葚、洋桃、无花果、猕猴桃、甘蔗、西瓜、甜瓜(香瓜)。
菜类饮食
性平:山药、萝卜(微凉)、胡萝卜、包菜、茼蒿、大头菜、青菜、母鸡头、豆豉、豇豆、土豆、芋头、洋生姜、海蛰、黑木耳(微凉)、香菇、平菇、喉头菇、葫芦。
性温:葱、大蒜、韭菜、芫荽(香菜)、雪里蕻、洋葱、香椿头、南瓜。
性热:辣椒。
性凉:西红柿(微凉)、旱芹、水芹菜、茄子、油菜、苤蓝、茭白、苋菜、马兰头、菊花脑、菠菜、金针菜(黄花菜)、莴苣(莴笋)、花菜、枸杞头、芦蒿、豆腐(豆腐皮、豆腐干、豆腐乳)、面筋、藕、冬瓜、地瓜、丝瓜、黄瓜、海芹菜(裙带菜)、蘑菇、金针菇。
性寒:慈姑(微寒)、马齿苋、蕹菜(空心菜)、木耳菜(西洋菜)、莼菜、发菜(龙须菜)、蕺菜、竹笋(微寒)、瓠子、菜瓜、海带、紫菜、海藻、地耳、草菇、苦瓜、荸荠。
其他饮食
性平:白糖、冰糖(微凉)、豆浆、枸杞子(微温)、灵芝、银耳(微凉)、燕窝、玉米须、黄精、天麻、党参、茯苓、干草、鸡内金、酸枣仁、菜油、麻油、花生油、豆油、饴糖(麦芽糖、糖稀)。
性温:生姜、砂仁、花椒、紫苏、小茴香、丁香、八角、茴香、山奈、酒、醋、红茶、石碱、咖啡、红糖、桂花、松花粉、冬虫夏草、紫河车(胎盘)、川芎、黄芪(性微温)、太子参(微温)、人参、当归、肉苁蓉、杜仲、白术、何首乌(微温)。
性热:胡椒、肉桂。
性凉:绿茶、蜂蜜、蜂王浆、啤酒花、槐花(槐米)、菊花、薄荷、胖大海、白芍、沙参、西洋参、决明子。
性寒:酱油、面酱、盐、金银花、苦瓜茶、苦丁茶、茅草根、芦根、白矾。
特别注意
(转载请注明来自:success001.com潜能开发学院)
查看全文
herosoft
发表于:2009.04.20 12:39
::分类:
(
Health
)
::阅读:(209次)
::
评论
(0)
===========================================================
===========================================================
转:google搜索联盟与adsense搜索广告的区别
重新整理一下,对比google搜索联盟与adsense搜索广告的不同之处:
第一:adsense搜索广告,没有提供搜索框下面的google推荐搜索的项目。但是一旦选择有相关推荐的搜索项目就不能再添加搜索本站的功能了。
第二:搜索结果界面不一样,google搜索联盟搜索出来的界面和google.cn没有差别。而google adsense搜索广告则可以自定义各种颜色参数,还可以在顶部设置自己的logo,并且,最关键的一点,google搜索广告,提供有效点击广告的可能性要比google搜索联盟的几率要大很多.但是google搜索联盟的广告单价和分层都要比adsense搜索广告高一些,具体不得而知,但我感觉确实这个是真的。
第三:就是查看adsense收入方式的不同,adsense搜索广告直接在报表首页可以查看。而google搜索联盟需要在“报告”-“高级报告”-“选择产品”里面最后一项“google搜索联盟”里面才能看到。
—————————————————————————————————————————
“Google搜索联盟”和“adsense for search”不是一回事,Google 搜索联盟是 AdSense 的一款新产品,但是不同于普通的adsense for search。
主要区别在于:
一、搜索结果中的广告位置不同:
1.传统搜索框的广告,出现在搜索结果的上方
2.搜索联盟的广告,出现在搜索结果的右侧
二、搜索框的样式不同:
传统搜索框和搜索联盟从外观上看,最大的区别是:搜索联盟可以在搜索框附近显示相关关键词的链接。例如某个网页是介绍二手笔记本的,那么该页面中的搜索框中就会显示“二手”或“笔记本”相关的关键词,点击这些关键词,就直接进入其搜索结果页。
三、收入提成不同:
目前google正大力推广搜索联盟,搜索联盟比传统搜索框的提成要高。具体高多少尚不得而知,因为google未公布具体的标准。根据我的观察和分析,搜索联盟中每次搜索点击的收入,至少比传统搜索框的价格高2倍以上。
四、点击率的不同:
由于搜索联盟的广告显示在搜索结果页的右侧,因此,相比传统搜索框的广告点击率要低。从我的几个网站统计的情况,搜索联盟每天搜索数一万次左右,点击数不超过10次,点击率低于千分之一,远低于传统搜索框点击率
发布商可以通过在页面相应位置添加搜索框来向用户提供搜索服务,搜索结果将在 Google.cn 展示。在为期一年的推广期内,对于用户有效的广告点击,发布商可以得到更高的分成比例。
查看全文
herosoft
发表于:2009.04.20 11:08
::分类:
(
程序人生
)
::阅读:(217次)
::
评论
(0)
===========================================================
===========================================================
转:冬吃萝卜夏吃姜 看姜的43种“药疗”功效
生姜具有特殊的辣味和香味,可调味添香,是生活中不可缺少的调配菜,除用作调料外,还可以用于药疗。生姜祛病保健的方法由来已久。民间也有“冬吃萝卜夏吃姜,不劳医生开药方”,“家备小姜,小病不慌”等说法。下面就来看看生姜的“药疗”攻效吧。
1、发汗解表、温肺止咳:生姜10片,茶叶7克,煎水趁热饮服。
2、偏头痛:当偏头痛发作时,可用热姜水浸泡双手,大约浸泡 15分钟左右,痛感就会减轻,甚至消失。
3、口腔溃疡:用热姜水代茶漱口,每日 2至3次,一般6至9次溃疡面即可收敛。
4、牙周炎:先用热姜水清洗牙齿,然后用热姜水代茶饮用,每日 1至2次,一般6次左右即可消除炎症。
5、咽喉肿痛:在热姜水中加入少许的食盐,当茶饮用。或用热姜水代茶漱口,每日早、晚各 1次。如果喉咙痛痒,可用热姜水加少许食盐代茶饮用,每日2至3次,一般9次左右便可化解炎症、消除痛痒。
6、龋齿:每日早、晚坚持用热姜水漱口1次,并每日代茶饮用数次。此法对保护牙齿,预防和治疗龋齿颇为有效。
7、神经衰弱:每天早、晚空腹各饮用热姜水 1~2杯,可收到补气、提神之效。持续下来,对神经衰弱、头晕、烦躁等症具有良好疗效。
8、空调房间后呆久后引起的浑身发紧,头发胀:随时口含生姜片或每天在用2~3片生姜泡水喝,身体的不适马上消除。
9、胃病发作:生姜、桂皮各12克,加水适量煎汤服下,一日2次。
10、急性肠胃炎:生姜5片,茶叶20克,大蒜1头,捣碎,煎水调红糖适量饮下,每日3次。
11、胃、十二指肠溃疡:生姜25克切碎,放在一个猪肚中,加水用文火炖烂,分数次食用。
12、吃过食物后腹胀:可直接口含生姜片,或喝生姜水,一会儿就能缓解。
13、消化不良、食欲不振:生姜和红枣(切片)一起煮水喝,一日2次,就能开胃。
14、受凉引起腹泻:用烧开的生姜水冲鸡蛋,一日2~3次,很快就好,腹泻停止后再喝一天,以巩固疗效,暖胃肠。
15、风寒骨疼、关节疼:
①生姜、葱白各适量,捣烂炒热,用布包好熨敷患处,一日数次。
②生姜数片放患处,用艾条灸之。
关节痛:每天早上起床后吃几片生姜或者煮姜枣水喝,一日3次坚持吃能明显缓解关节的疼痛。
16、腰肩疼痛:先在热姜水里加少许盐和醋,然后用毛巾浸水拧干,敷于患处,反复数次。此法能使肌肉由张变弛、舒筋活血,可缓解疼痛。
17、高血压:血压升高时,可用热姜水浸泡双脚 15分钟左右。热姜水浸泡双脚,可反射性引起血管扩张,使血压随之下降。
18、动脉硬化:每天早、晚坚持用热姜水漱口,并在每天临睡前饮用热姜水 1杯,可促进血液循环,防止动脉硬化。
19、头皮屑:先用生姜轻轻擦洗头发,然后再用热姜水清洗头发,可有效防治头皮屑掉落。此外,经常用热姜水洗头,对秃顶亦有一定治疗效果。
20、醉酒:用热姜水代茶饮用,可加速血液流通,消化体内酒精。还可在热姜水里加适量蜜糖,可以缓解或消除酒醉。
21、酒后头痛、头晕:可用生姜煮水喝,马上缓解。
22、面部暗疮:用热姜水清洗面部,每天早、晚各 1次,持续约60天左右,暗疮就会减轻或消失。此法对雀斑及干燥性皮肤等亦有一定的治疗效果。
23、脚臭:将脚浸于热姜水中,浸泡时加点盐和醋,浸泡 15分钟左右,抹干,加点爽身粉,臭味便可消除。
24、脚汗太多:生姜15克,枯矾15克,熬水洗泡脚,每日1次。
25、手脚已生冻疮但未破溃:可用生姜煮水泡手、泡脚。
26、妇女虚寒腹疼:生姜、红糖适量煎水服用。
27、产后腹疼:生姜、当归各150克,羊肉1000克,加水适量炖汤,分次服下。
28、痛经:在生姜、红糖水里再加入2~3粒山楂,一日2~3次即好。
29、受寒引起呕吐不止:生姜汁一汤匙,蜂蜜2汤匙,加开水3汤匙调匀,煮沸后一次服下。
查看全文
herosoft
发表于:2009.04.18 23:05
::分类:
(
Health
)
::阅读:(165次)
::
评论
(0)
===========================================================
===========================================================
转:不要错过 冬吃萝卜夏吃姜
| 不要错过 冬吃萝卜夏吃姜 |
| 【 来源:中华美食 | 时间:2009-2-5 | 浏览: 317 次 | 加入收藏 | 打印本页 】 |
|
|
| 俗话说“冬吃萝卜夏吃姜”,“萝卜上市,郎中下岗。”大白萝卜是很多家庭冬季餐桌上不可缺少的菜肴,除了煲汤、炒菜,白萝卜还有很多新吃法和对症治疗的效用。 煮萝卜胜过胃肠药 萝卜中的维生素C可以帮助消除体内的废物,促进身体的新陈代谢。尤其是白萝卜或者水萝卜,其富含的酶可以起到促进消化的作用。 通常,酶能够吸收食物中的淀粉,更能化解胃中的积食,起到很好的消化效果,预防胃痛和胃溃疡。 在菜肴比较丰盛的情况下,可以做一个白菜萝卜汤,不但味道鲜美,还可以加速消化,养胃暖身。 做法非常简单,将大白菜、白萝卜、胡萝卜与豆腐洗净,切成大小相似的长条,在沸水中焯一下捞出待用。锅置火上,放入适量油烧至五成热,炒香辣椒酱后倒入清汤,把白萝卜、胡萝卜、豆腐一起放入锅中,大火煮开后加入大白菜,再次煮开,用盐、味精调味,最后撒上香菜末盛出即可。 “萝卜糖”缓解喉痛 萝卜中含有一定的芥辣素,这让萝卜含有一种天然的辣味,加上萝卜本身就有的消炎的功能,对于冬天因感冒引起的嗓子疼、鼻塞的人,可以用萝卜来解决这些恼人的问题。 可以把白萝卜切丝榨成汁,准备好一块纱布,把白萝卜汁涂抹在纱布上,或者用棉球蘸取汁液,然后塞在鼻孔中。 用这种方式反复2~3次,每次5分钟左右,鼻塞的症状会自然得到缓解。 喉咙疼痛的人可以自制点“萝卜糖”,把萝卜切成小块,加入适量的蜂蜜腌制,等萝卜在蜂蜜中浮起后捞出,每次喉咙疼痛的时候吃上一点,情况会得到一定的缓解。 喝白萝卜叶茶美容 吃萝卜美容,你或许没有听说过,或许觉得那要吃多少萝卜才能起到美容的效果啊?其实并不要吃多少萝卜,自己做一点萝卜叶茶,不但享受到了萝卜的营养,也不用吃太多的萝卜。 白萝卜叶中含有丰富的维生素A、维生素C等各种维生素,特别是维生素C的含量是根茎的4倍以上。维生素C能防止皮肤的老化,阻止黑色色斑的形成,保持皮肤的白嫩。此外维生素A和维生素C都有抗氧化的作用,可以有效抑制癌症,也可以预防老化及动脉硬化等。 除了维生素,白萝卜中的膳食纤维含量是非常可观的,尤其是叶子中含有的植物纤维更是丰富。这些植物纤维可以促进肠胃的蠕动,消除便秘,起到排毒的作用,从而改善皮肤粗糙、粉刺等情况。 制作萝卜叶茶的时候,我们可以把萝卜叶清洗干净,然后晾晒3~4天,晾晒后,将30克晒成的白萝卜叶放入1升水中煮,烧开以后改成中火,再煮几分钟,过滤后就可以喝了,如果觉得不好喝可以加一点糖,味道就会好起来。 冰糖萝卜能润肺 萝卜性清凉,有一定的润肺止咳功效,尤其是在冬天,人们常常会出现燥热痰多,肺部不适等症状,得法地吃一些萝卜,就可得到辅助治疗。 萝卜生吃是一种方法,不但清凉而且水分多,可以利尿,有益健康。同时做一些冰糖萝卜也格外有效。用新上市的白萝卜一个,要圆圆的,大肚子的那种。把萝卜洗净,擦干水,在萝卜的上部1/3处横切一刀,上部放在一边,用小刀把下部中心掏空,注意留1厘米左右的边,在空洞中放入冰糖。 再把萝卜上部盖好,周边用牙签固定好,把萝卜放入密封罐,放入冰箱保存,五六天后拿出来,打开萝卜,里面的冰糖已成浓汁,只是放萝卜时一定要放正了,歪了水就跑出来了。这种萝卜汁对肺有很好的滋养作用。 萝卜皮治风湿痛 萝卜的止痛效果很好,这主要是因为萝卜有利水功能,可以用来消肿,抗菌的芥辣素还可以活络筋骨,起到止痛作用。 冬天如果有肌肉或者是关节疼痛的话,可以直接把萝卜皮削切下来做为敷料,敷在患处上,也可以把萝卜皮统一放在一个纱布袋里做热敷。 在牙疼的时候,可以把热敷袋放在脸颊的表面皮肤上,也可以用脱脂棉球蘸上一点白萝卜汁放在坏牙的牙龈处。 萝卜做菜不上火 冬季人们往往吃肉较多,吃肉则易生痰,易上火。在吃肉的时候搭配一点萝卜,或者做一些以萝卜为配料的菜,不但不会上火,更会起到很好的营养滋补作用。 冬天最经典的菜肴就是羊排萝卜,羊排是营养价值很高的肉类,但同时也最容易上火,和萝卜的搭配则最为科学,口味也非常清爽。 可以选一些羊小排肉,洗净加黄酒、生姜片浸半小时,入油锅爆炒一下,倒入砂锅内,加水煮沸后用小火煨半小时;再将白萝卜切成转刀块,放入水中煮沸,倒掉水,加入羊肉汤内,放盐,继续用小火煨至萝卜羊排肉均酥烂即可。因羊排肉性热,入脾、肾两经,有补脾肾、壮筋骨、御风寒的作用。 |
herosoft
发表于:2009.04.18 23:02
::分类:
(
Health
)
::阅读:(109次)
::
评论
(0)
===========================================================
===========================================================
转:电脑族防辐射全攻略
电脑族防辐射全攻略 [原创 2009-01-05 16:29:11]
上网虽不致如临大敌,但对厉害的电磁
辐射还是应做足面部功夫。我们也不想因上网而导致皮肤提前衰老吧?
静电对皮肤有负面作用
皮肤科专家认为,这是由于电脑在开机时会产生静电,而静电作用对皮肤有伤害,静电会使荧光屏吸附灰尘、污粒,而电脑族与电脑的距离往往过于靠近,大量的灰尘会落在皮肤上,使毛孔堵塞,色素沉着,辐射可以影响到的是皮肤的病变,引起青春痘、黑斑、眼袋、皱纹、皮肤早衰、油脂增多等问题性肤质。且容易出现缺水、色素沉着、晦暗、过敏、干燥粗糙、老化松弛、皮肤瘙痒等等问题。
另外,电脑族大多工作压力大,有可能导致内分泌系统紊乱,出现心身功能失调,也会致皮肤干燥,失去光泽,加速皮肤老化。
因此,电脑族首先应尽量避免长时间不动地坐在电脑前,每工作两三小时就应起身休息一会,也可以到厕所洗洗脸,还要注意,每天用完电脑后要彻底清洁脸部,以防吸附在脸上的灰尘影响肌肤,或是出现小红疹或红斑。
食疗改善皮肤干燥现象
至于电脑辐射对皮肤所产生的负面影响,目前还没有效果明确的预防措施,但是,对于经常使用电脑所造成的皮肤干燥,我们也可以通过在日常生活中注意补充营养,和使用防辐射霜来改善皮肤状况。
多吃防辐射的食物 脂肪酸、维生素A、K、E及B族维生素都是防辐射的好帮手,这些元素在哪些食物中存在呢,草莓,牛奶、蛋、肝、花菜、卷心菜、茄子、扁豆、胡萝卜、黄瓜、番茄、香蕉、苹果等含有以上成分,其中未成熟的草莓含量尤甚,多吃这些食物有防辐射损伤的功能。
计算机对视力危害很大,经常用计算机的人应多喝茶水,如绿茶,枸杞、菊花、决明子。常喝菊花茶能收到清心明目的效果,枸杞清肝明目,对保护视力也有很大好处。
搽防护乳液
在长时间坐到电脑前时应该涂上纯天然植物绿色草莓萃取的莓多酚防辐射乳夜,因为这类乳液含类抗氧化活性物质及维生素E群能迅速渗透肌肤表面形成保护层,中和辐射线(αβγ) 有效隔离99.7%电磁波的危害。能够深层阻隔因电脑、手机、电视等辐射产生的皮肤色素沉着、毛孔粗大、痤疮、多油现象,充分调节肌肤PH值平衡。减轻皮肤过敏,保持皮肤清爽、洁净、滋润。促进机体新陈代谢,消灭自由基,有效地清除脑及皮肤内的脂褐素并抑制新脂褐素的合成,延缓细胞衰老。
另外,使用完电脑后应该立即洗脸。随时使用喷雾保湿护肤品,保持肌肤的润泽。
查看全文
herosoft
发表于:2009.04.11 14:18
::分类:
(
程序人生
)
::阅读:(247次)
::
评论
(0)
===========================================================
===========================================================
韧带拉伤如何最快恢复?
herosoft
发表于:2009.01.07 19:27
::分类:
(
Health
)
::阅读:(228次)
::
评论
(4)
===========================================================
===========================================================
转:让百度、Google、yahoo收录你的QQ空间
herosoft
发表于:2008.11.17 21:32
::分类:
(
程序人生
)
::阅读:(355次)
::
评论
(0)
===========================================================
===========================================================
转:了解磁盘碎片产生原理,大可抛弃碎片整理软件
了解磁盘碎片产生原理,大可抛弃碎片整理软件
查看全文
herosoft
发表于:2008.11.17 21:22
::分类:
(
程序人生
)
::阅读:(326次)
::
评论
(0)
===========================================================
===========================================================
转:磁盘碎片原理分析
一、什么是磁盘碎片?
其实磁盘碎片应该称为文件碎片,是因为文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的簇中形成的。
当应用程序所需的物理内存不足时,一般操作系统会在硬盘中产生临时交换文件,用该文件所占用的硬盘空间虚拟成内存。虚拟内存管理程序会对硬盘频繁读写,产生大量的碎片,这是产生硬盘碎片的主要原因。
其他如IE浏览器浏览信息时生成的临时文件或临时文件目录的设置也会造成系统中形成大量的碎片。文件碎片一般不会在系统中引起问题,但文件碎片过多会使系统在读文件的时候来回寻找,引起系统性能下降,严重的还要缩短硬盘寿命。另外,过多的磁盘碎片还有可能导致存储文件的丢失。
查看全文
herosoft
发表于:2008.11.17 21:20
::分类:
(
程序人生
)
::阅读:(350次)
::
评论
(0)
===========================================================
===========================================================
转:Windows XP Home 安全性设置
Windows XP Home 安全性设置
众所周知,如果你 Windows XP 的分区文件格式为 NTFS,那在文件/文件夹的属性对话框里会有“安全性”选项卡,可以非常方便地设置文件的读写权限。但如果系统是 Windows XP Home 家庭版,这个功能会被屏蔽掉,纵使依然是 NTFS。下面 以 System Volume Information 为例 说明如果实现同样的功能(此目录是系统还原专用的目录,不过就算取消了系统还原功能,该目录一样无法访问):
查看全文
herosoft
发表于:2008.11.16 19:59
::分类:
(
程序人生
)
::阅读:(1346次)
::
评论
(0)
===========================================================
===========================================================
转:内存映射文件之剖析(一)
内存映射文件之剖析(一) 作者:xrbeck 内存映射文件(Mapping File)是Windows内存管理中的重要一环,也是编程 技术中比较高级的一个话题。目前关于这方面的资料比较少,而其实内存映射 文件其实对我们的对于Windows的内存了解很重要,在这里把笔者的心得写 出来,和大家一起讨论。
查看全文
herosoft
发表于:2008.10.06 17:58
::分类:
(
C/C++
)
::阅读:(912次)
::
评论
(0)
===========================================================
===========================================================
转:内存映射文件之剖析(二)
前面已经提到:内存映射文件是拿文件直接当作系统的内存使用,那么它主要
的用途是什么呢?主要有以下两点:
1. 直接用内存映射文件来访问磁盘上的数据文件,无需再进行文件
的I/0操作.
2. 用来在多个进程之间共享数据.进程间共享数据有很多种方法,比如
发送消息WM_COPYDATA,匿名管道等等,但他们的低层都毫无例外
的使用到了Mapping File.然而因为WM_COPYDATA一定需要使用
同步函数SendMessage,所以在实时性方面表现的不是很好.
(至于同步和异步的区别可以参考笔者的另一篇文章:
http://www.csdn.net/Develop/read_article.asp?id=14204)
查看全文
herosoft
发表于:2008.10.06 17:55
::分类:
(
C/C++
)
::阅读:(1246次)
::
评论
(0)
===========================================================
===========================================================
转:内存映射文件(mmap)和它的应用——共享内存(IPC)
内存映射文件(mmap)和它的应用——共享内存(IPC)内存映射文件是利用虚拟内存把文件映射到进程的地址空间中去,在此之后进程操作文
件,就像操作进程空间里的地址一样了,比如使用memcpy等内存操作的函数。这种方法能
够很好的应用在需要频繁处理一个文件或者是一个大文件的场合,这种方式处理IO效率比
普通IO效率要高。另外,UNIX把它做为内存共享来设计的。
查看全文
herosoft
发表于:2008.10.06 17:48
::分类:
(
Unix相关
)
::阅读:(2000次)
::
评论
(0)
===========================================================
===========================================================
转:内存碎片产生原因及处理技术
内存碎片是一个很棘手的问题。如何分配内存决定着内存碎片是否会、何时会、如何会成为一个问题。
即使在系统中事实上仍然有许多空闲内存时,内存碎片还会最终导致出现内存用完的情况。一个不断产生内存碎片的系统,不管产生的内存碎片多么小,只要时间足够长,就会将内存用完。这种情况在许多嵌入式系统中,特别是在高可用性系统中是不可接受的。有些软件环境,如 OSE 实时操作系统已经备有避免内存碎片的良好工具,但个别程序员做出的选择仍然会对最终结果形成影响。
查看全文
herosoft
发表于:2008.10.06 17:40
::分类:
(
程序人生
)
::阅读:(1471次)
::
评论
(0)
===========================================================
===========================================================
常用查找算法 (转)
常用查找算法 (转)
//search.h包含了所有的常用查找算法
//使用顺序查找法的查找函数
//seqSearch(const int arr[],int first,int last,int target)
template
int seqSearch(const T arr[],int first,int last,const T& target)
{
int i=first;
//扫描下标范围first<=i //或下标超出范围
while (!(i==last)&&!(arr[i]==target))
i++;
return i; //i是匹配值的下标,或者,如果没有匹配,则i=last
}
//模板函数find_last_of()的实现
template
int find_last_of(const T arr[],int first,int last,const T& target)
{
int i=last-1;
//描扫下标范围first<=i //或下标超出范围
while(i>=first&&target!=arr[i])
i--;
if (i return i;
}
//二分查找算法函数binSearch()的实现
template
int binSearch(const T arr[],int first,int last,const T& target)
{
int mid; //中间点的下标
T midValue; //用于保存arr[mid]元素值
int origLast=last; //保存last的初始值
while(first {
mid=(first+last)/2;
midValue=arr[mid];
if (target==midValue) //有一个匹配
return mid;
//确定要查找哪个子表
else if(target last=mid;
else
first=mid+1; //查找子表的后半部分,重新设置first
}
return origLast; //没有找到目标值
}
查看全文
herosoft
发表于:2008.10.02 14:44
::分类:
( )
::阅读:(676次)
::
评论
(0)
===========================================================
===========================================================
转:在程序中实现远程访问控制
在程序中实现远程访问控制
作者:xrbeck
远程访问控制(Remote Access Service)是Windows NT,
Win2000 Server提供的一种远程服务,它允许用户从远端
通过拨号连接连接到一个本地的计算机网络,一旦建立了
连接,就相当于处在了本地的LAN中,从而可以使用各种各样
的网络函数以便进行访问,本文就是给大家介绍这种听起来
就很动心的技术。 :)
首先我们需要配置服务器端的RAS服务,在这里以2k Server
为例,第一安装modem,相信大家应该没什么问题吧.装好
modem后,选择"控制面板"中的"网络和拨号连接",新建连接,
选择"接受接入的连接",并且在最后一步添加一个允许登录
的帐号,本文设置用户名:xr 密码:xr,这样就在服务器端
建立了一个"等待接入"的连接,然后右键选择属性,在网络
中选择TCP/IP协议,因为笔者的LAN中是通过代理,静态的分配
保留IP地址172.18.所以在这个地方选择"指定TCP/IP地址"
从'172.18.1.27“到"172.18.1.28"分配两个IP地址.这是
因为VLSM是255.255.255.224,一个LAN中保留30台机器,
选择后面几台未分配的IP地址。打开控制面板中的管理工具,
选择路由和远程访问,选择本地服务器,并且"配置并启用
路由和远程访问",可以查看活动与否的端口.
这样在服务器端就配置好了RAS服务.接下来进入关键
部分:在远端用程序实现RAS连接.同样我们需要电话线和modem.
安装好后我们就能利用系统提供的rasapi实现拨号连接.
以BCB5.0为例:给出源程序如下:
1.连入头文件ras.h,raserror.h和库文件rasapi.lib
这个地方要注意有个版本冲突问题,所以需要临时的设置
WINVER这个变量.具体代码如下:
#define OLDVER WINVER
#undef WINVER
#define WINVER 0x400
#include <ras.h>
#include <raserror.h>
#undef WINVER
#define WINVER OLDVER
#undef OLDVER
静态连入rasapi.lib后,我们就能利用API函数实现拨号了
2. 拨接部分:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//
hrasconn=NULL;
RASDIALPARAMS params;
char buf[256];
memset(buf,0,256);
params.dwSize=sizeof(RASDIALPARAMS);
lstrcpy(params.szEntryName,"");
lstrcpy(params.szPhoneNumber,"208");
lstrcpy(params.szUserName,"xr");
lstrcpy(params.szPassword,"xr");
lstrcpy(params.szDomain,"");
int ret=RasDial(NULL,
NULL,
¶ms,
0,
&RasDialFunc,
&hrasconn);
if(ret!=0)
{
RasGetErrorString(ret, buf, 256);
memStatus->Lines->Add(buf);
}
}
其中RasDial为异步访问方式,208为笔者测试的公司内部
的服务器的电话号码,xr是登录的用户名和口令,因为
测试的2K Server是作为对等网中的普通一员,没有domain,
所以设置为空.
3. 回调函数部分:
类似大部分的window程序,ras也提供了回调函数来
异步的处理连接,这样的情况很多,比如Winsock也提供
了窗口消息的异步方式.
void WINAPI RasDialFunc(UINT MSG,RASCONNSTATE rasconnstate,DWORD dwError)
{
//
char szRasString[256]; // Buffer for storing the error string
memset(szRasString,0,256);
DWORD cb=sizeof(RASPPPIP);
DWORD ret;
if (dwError) // Error occurred
{
RasGetErrorString((UINT)dwError, szRasString, 256);
Form1->memStatus->Lines->Add(szRasString);
return;
}
switch (rasconnstate)
{
// Running States
case RASCS_OpenPort:
Form1->memStatus->Lines->Add("Opening port...");
break;
case RASCS_PortOpened:
Form1->memStatus->Lines->Add("Port opened.");
break;
case RASCS_Authenticated:
Form1->memStatus->Lines->Add("Authentication complete.");
break;
case RASCS_Connected:
Form1->memStatus->Lines->Add("Connection Connected.");
Form1->lpProjection=new RASPPPIP;
Form1->lpProjection->dwSize=sizeof(RASPPPIP);
if(RasGetProjectionInfo(Form1->hrasconn,RASP_PppIp,Form1->lpProjection,&cb)==ERROR_SUCCESS)
{
Form1->memStatus->Lines->Add("Server IP:"+(AnsiString)(Form1->lpProjection->szServerIpAddress));
Form1->memStatus->Lines->Add("Local IP:"+(AnsiString)(Form1->lpProjection->szIpAddress));
}
break;
case RASCS_Disconnected:
Form1->memStatus->Lines->Add("Disconnecting...");
break;
default:
Form1->memStatus->Lines->Add("Unknown Status ");
break;
}
}
处理各种消息,其中在连接部分使用RasGetProjectionInfo得到连接
分配的IP地址和服务器端的地址.由于是静态的分配的,所以和服务器
端是处于一个子网当中,也就能使用各种各样的资源了,比如说可以使用
WNET系列函数得到LAN中的情况,又或者在Connect事件后建立套接字,
实现传输.笔者测试如下:拔掉客户端的网线后,建立连接后能ping到
LAN中其他的机器,而且由于处于子网中,所以也能上网了,使用IPHelper
函数返回的子网掩码和网关是一致的.
本文为大家介绍了什么是RAS以及如何编程实现RAS服务,无疑这是一项
方便而强大的功能.希望能给大家带来帮助.也欢迎大家进一步继续
讨论.QQ.33854303
测试环境: 客户端BCB5.0+Win98. 服务器端:Win2000 Server
参考书籍: Windows网络编程
Internet与TCP/IP程序设计之C++ Builder高手
查看全文
herosoft
发表于:2008.10.02 14:38
::分类:
(
C/C++
)
::阅读:(339次)
::
评论
(0)
===========================================================
===========================================================
C++常用排序算法 (转)
===========================================================
作者: gugu99(http://gugu99.itpub.net)
发表于: 2007.08.17 11:26
分类: 一般分类
出处: http://gugu99.itpub.net/post/34143/384157
---------------------------------------------------------------
C++常用排序算法 (转)
//选择排序法selectionSort(int arr[],int n)
template <typename T>
void SelectionSort(T arr[],int n)
{
int smallIndex; //表中最小元素的下标
int pass,j; //用来扫描子表的下标
T temp; //用来交换表元素的临时变量
//pass的范围是0~n-2
for (pass=0;pass<n-1;pass++)
{
//从下标pass开始扫描子表
smallIndex=pass;
//j遍历整个子表arr[pass+1]到arr[n-1]
for(j=pass+1;j<n;j++)
//如果找到更小的元素,则将该位置赋值给smallIndex
if(arr[j]<arr[smallIndex])
smallIndex=j;
//如果smallIndex和pass不在相同的位置
//则将子表中的最小项与arr[pass]交换
if(smallIndex!=pass)
{
temp=arr[pass];
arr[pass]=arr[smallIndex];
arr[smallIndex]=temp;
}
}
}
/************************************************************************
双端选择排序算法:是上面选择排序算法的变种,可以定位每个子表中最小和最大元素
并把它们分别放在子表的开头和结尾.
************************************************************************/
//双端选择排序算法函数deSelSort()的实现
template <typename T>
void deSelSort(T arr[],int n)
{
int smallIndex,largeIndex; //表中最小及最大元素的下标
int leFTPass=0,rightPass=n-1,i,j; //用来从表左边及右边扫描子表的下标
T temp; //用于交换元素的临时变量
while (leftPass<=rightPass)
{
//从左边及右边开始扫描子表
smallIndex=leftPass;
largeIndex=rightPass;
//j和i遍历整个子表arr[LeftPass]~arr[rightPass]
for (i=leftPass+1;i<rightPass;i++)
//如果找到更小的元素,则将该位置赋值给smallIndex
if (arr[i]<arr[smallIndex])
smallIndex=i;
//如果smallIndex和leftPass不在相同的位置
//则将子表中的最小项与arr[pass]交换
if (smallIndex!=leftPass)
{
temp=arr[leftPass];
arr[leftPass]=arr[smallIndex];
arr[smallIndex]=temp;
}
for (j=rightPass-1;j>leftPass;j--)
if(arr[j]>arr[largeIndex])
largeIndex=j;
if(largeIndex!=rightPass)
{
temp=arr[rightPass];
arr[rightPass]=arr[largeIndex];
arr[largeIndex]=temp;
}
//从两头收缩子表
leftPass++;
rightPass--;
}
}
//自编冒泡法排序算法函数bubbleSort()的实现
template <typename T>
int bubbleSort(T arr[],int n)
{
bool Exchanged=false; //是否发生交换
int i,j; //用于遍历子表的下标
T temp; //用于交换元素的临时变量
//开始遍历过程,以下标j构成子表,共有n-1个子表
for (j=n-1;j>=0;j--) //j从后往前收缩n-1~0,以构成子表0~n-1,0~n-2,0~n-3..0~1
{
exchanged=false;
for (i=0;i<j;i++) //遍历子表范围0~j
{
if (arr[i]>arr[i+1])
{
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
exchanged=true;
}
}
if (!exchanged) return n-j-1;//如果在一次遍历中没有发生交换,则表示已经
//排序好,中断遍历过程
}
return n-1-j;
}
//冒泡法排序一般算法函数bubbleSortEx()的实现
template <typename T>
int bubbleSortEx(T arr[],int n)
{
int i,pass; //用于遍历子表的下标
T temp; //用于交换元素的临时变量
//开始遍历过程,以下标j构成子表,共有n-1个子表
for (pass=0;pass<n;pass++) //pass从后往后扩大0~n-1,以构成子表0~n-1,0~n-2,0~n-3..0~1
{
for (i=0;i<n-pass;i++) //遍历子表范围0~n-pass
{
if (arr[i]>arr[i+1])
{
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
return pass;
}
herosoft
发表于:2008.10.02 14:29
::分类:
( )
::阅读:(317次)
::
评论
(0)
===========================================================
===========================================================
溢出程序使用通道对抗防火墙 (转)
溢出程序使用通道对抗防火墙 (转)
现在很多
web等应用使用了
防火墙,我们自己也可能处于
代理、透明网关等后面,这对于
溢出等的通信造成了一个小小的麻烦。可能很多人会想到
shellcode主动连接,这个如果防火墙做得好的话,不准许访问外部一样不行,即使不考虑这防火墙,而我们自己可能往往处于代理或者透明网关后面,考虑这也是一道难题。
但我们仔细考虑考虑一下数据传输问题,就会发现实际上这一切都没有想象的那么困难,其实早已经有东西为我们扫清了道路,那就是数据通道。所以很多问题怕的就是我们没有去想,没有去理解一些东西。只要我们访问到了server,其实对于现在这些应用,中间已经建立了类似下面一样的一个通道,其实中间可能还更复杂,但对于我们的应用,都会有这么一个通道。
查看全文
herosoft
发表于:2008.10.02 14:22
::分类:
(
网络技术
)
::阅读:(346次)
::
评论
(0)
===========================================================
===========================================================
转: 在JAVA中实现C++代码的复用
现在的开发工具比较多,如JAVA,C++,。NET等,如何在这些不同的开发工具中实现代码的复用,成为一个比较重要的话题,也是提高生产率,降低项目成本的一个重要手段。其中C++与.Net之间比较好融合,这是因为都是基于ms的开发平台与解决方案,如com,dll,activex等,但java与c++之间就比较麻烦些。下面介绍通过jni来复用c++代码的方法。
查看全文
herosoft
发表于:2008.10.02 11:55
::分类:
( )
::阅读:(340次)
::
评论
(0)
===========================================================
===========================================================
转:什么是AV错误?我该如何调试它?
转:什么是AV错误?我该如何调试它?
当你运行程式得到了一个AV(Access Violation)错误的时候,这意味着你的程式正在试图访问一块
不再有效的内存,请注意我所提到的“不再”有效。大多数的情况下,出现这个错误要么是因为你试图访问一块已经被释放的内存,要么是想使用一个还未创建对象的指针。
幸运的是:Win32的内存体系在不同的进程(Process)间使用了独立的地址空间。所以我们可以不必担心会访问到其他的进程中的地址空间而造成破坏,(在Win 16下就有这种潜在的危险).这也就意味着我们能够正确的利用错误对话框中的信息。
查看全文
herosoft
发表于:2008.10.02 11:10
::分类:
(
程序人生
)
::阅读:(376次)
::
评论
(0)
===========================================================
===========================================================
转:探查内存不足/内存泄漏问题
探查内存不足/内存泄漏问题 |
 |
问题描述 内存不足 (OOM) - 由于 java 堆或本地内存中的内存耗尽,应用程序显示“内存不足”错误。 内存泄漏 - java 堆或本地内存的持续内存增长,最终将导致内存不足状态。调试内存泄漏状态的技术与调试内存不足状态的技术相同。 故障排除 请注意,并非下面所有任务都需要完成。有些问题仅通过执行几项任务就可以解决。 快速链接: |
|
查看全文
herosoft
发表于:2008.10.01 21:55
::分类:
( )
::阅读:(533次)
::
评论
(0)
===========================================================
===========================================================
Google AdSense申请攻略
herosoft
发表于:2008.10.01 21:53
::分类:
(
程序人生
)
::阅读:(368次)
::
评论
(0)
===========================================================
===========================================================
转:eBay中国败局:马云决胜强势公关战
土狼与大象的竞争:马云决胜强势公关战 孙琎/文
全球电子商务巨头eBay在中国市场付出了几亿美元的代价后,终于决定“止损”离场。
查看全文
herosoft
发表于:2008.10.01 21:50
::分类:
(
程序人生
)
::阅读:(309次)
::
评论
(0)
===========================================================
===========================================================
转:MSN、QQ、GTalk机器人实现原理及代码
MSN、QQ、GTalk机器人实现原理及代码
腾讯滔滔近期发布,各大IT网站争相报道
最后的结论是滔滔不会做MSN、GTalk机器人,所以饭否、唧歪类网站在腾讯入侵后仍然有生存的余地。
twitter模式,即迷你博客网站的兴起、流行主要是因为接入方法多样我们打开这些网站,可以发现迷你博客内容的发布多数不是来自网页,超过半数是来自IM.因为IM是互联网发展到现在非常成功的一个产品,其中QQ、MSN、GTalk占有绝对优势.
查看全文
herosoft
发表于:2008.10.01 21:37
::分类:
(
程序人生
)
::阅读:(757次)
::
评论
(0)
===========================================================
===========================================================
基于Visual C++6.0的DLL编程实现
基于Visual C++6.0的DLL编程实现
一、前言
自从微软推出16位的Windows操作系统起,此后每种版本的Windows操作系统都非常依赖于动态链接库(DLL)中
的函数和数据,实际上Windows操作系统中几乎所有的内容都由DLL以一种或另外一种形式代表着,例如显示的字体和图标存储在GDI
DLL中、显示Windows桌面和处理用户的输入所需要的代码被存储在一个User
DLL中、Windows编程所需要的大量的API函数也被包含在Kernel DLL中。
在Windows操作系统中使用DLL有
很多优点,最主要的一点是多个应用程序、甚至是不同语言编写的应用程序可以共享一个DLL文件,真正实现了资源"共享",大大缩小了应用程序的执行代码,
更加有效的利用了内存;使用DLL的另一个优点是DLL文件作为一个单独的程序模块,封装性、独立性好,在软件需要升级的时候,开发人员只需要修改相应的
DLL文件就可以了,而且,当DLL中的函数改变后,只要不是参数的改变,程序代码并不需要重新编译。这在编程时十分有用,大大提高了软件开发和维护的效
率。
既然DLL那么重要,所以搞清楚什么是DLL、如何在Windows操作系统中开发使用DLL是程序开发人员不得不解决的一个问
题。本文针对这些问题,通过一个简单的例子,即在一个DLL中实现比较最大、最小整数这两个简单函数,全面地解析了在Visual
C++编译环境下编程实现DLL的过程,文章中所用到的程序代码在Windows98系统、Visual C++6.0编译环境下通过。
二、DLL的概念
DLL是建立在客户/服务器通信的概念上,包含若干函数、类或资源的库文件,函数和数据被存储在一个DLL(服务器)上并由一个或多个客户导出而使用,
这些客户可以是应用程序或者是其它的DLL。DLL库不同于静态库,在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名
为*.LIB),Visual
C++的编译器在处理程序代码时将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。这个过程称为"静态链接",此
时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。
在动态库的情况下,有两个文件,
一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件
链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要
调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。从上面的说明可以看出,DLL
和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。
微软的Visual
C++支持三种DLL,它们分别是Non-MFC Dll(非MFC动态库)、Regular Dll(常规DLL)、Extension
Dll(扩展DLL)。Non-MFC
DLL指的是不用MFC的类库结构,直接用C语言写的DLL,其导出的函数是标准的C接口,能被非MFC或MFC编写的应用程序所调用。Regular
DLL:和下述的Extension
Dlls一样,是用MFC类库编写的,它的一个明显的特点是在源文件里有一个继承CWinApp的类(注意:此类DLL虽然从CWinApp派生,但没有
消息循环),被导出的函数是C函数、C++类或者C++成员函数(注意不要把术语C++类与MFC的微软基础C++类相混淆),调用常规DLL的应用程序
不必是MFC应用程序,只要是能调用类C函数的应用程序就可以,它们可以是在Visual C++、Dephi、Visual
Basic、Borland C等编译环境下利用DLL开发应用程序。
常规DLL又可细分成静态链接到MFC和动态链接到MFC上的,这两种常规DLL的区别将在下面介绍。与常规DLL相比,使用扩展DLL用于导出增强MFC基础类的函数或子类,用这种类型的动态链接库,可以用来输出一个从MFC所继承下来的类。
扩展DLL是使用MFC的动态链接版本所创建的,并且它只被用MFC类库所编写的应用程序所调用。例如你已经创建了一个从MFC的CtoolBar类的
派生类用于创建一个新的工具栏,为了导出这个类,你必须把它放到一个MFC扩展的DLL中。扩展DLL
和常规DLL不一样,它没有一个从CWinApp继承而来的类的对象,所以,开发人员必须在DLL中的DllMain函数添加初始化代码和结束代码。
查看全文
herosoft
发表于:2008.10.01 21:30
::分类:
(
C/C++
)
::阅读:(293次)
::
评论
(0)
===========================================================
===========================================================
转:解决打开文件过多的问题
解决打开文件过多的问题
--如果您遇到打开文件过多的异常,您面临的可能是操作系统资源缺乏问题。本文将讲述如何解决这个问题。
查看全文
herosoft
发表于:2008.10.01 21:27
::分类:
(
程序人生
)
::阅读:(746次)
::
评论
(0)
===========================================================
===========================================================
转:如何让百度、google搜索到你的网站和博客
herosoft
发表于:2008.10.01 20:38
::分类:
(
程序人生
)
::阅读:(273次)
::
评论
(0)
===========================================================
===========================================================
转:Google和百度、雅虎的站内搜索代码
对于一个网站来说,使用搜索引擎来进行站内搜索往往比自己编写的站内搜索更高效,并且不占用网站服务器的资源,下面是我搜集到的(主要参考月光博客)几个主要搜索引擎(Google和百度、雅虎)的站内搜索代码,使用时只需要将代码里的"http://127.0.0.1/z-blog15"替换成你的网址即可。
查看全文
herosoft
发表于:2008.10.01 20:34
::分类:
(
程序人生
)
::阅读:(248次)
::
评论
(0)
===========================================================
===========================================================
微型博客Twitter如何盈利?
===========================================================
微型博客Twitter如何盈利?
作者: alexclark(http://alexclark.itpub.net)
发表于: 2008.08.19 12:04
分类:
出处: http://alexclark.itpub.net/post/670/469005
--------------------------------------------------------------- 微型博客Twitter是继社交网站Facebook、Myspace之后兴起的新型即时通讯式Web社交网站,这是一个可以通过短消息与手机、即时通讯工具(如MSN、QQ等)互通的Web平台,极大了满足现代人所需要的简洁、快捷的通信需求,火的很!
那么下面我们来探探Twitter的盈利模式吧:
查看全文
herosoft
发表于:2008.10.01 20:32
::分类:
(
程序人生
)
::阅读:(291次)
::
评论
(0)
===========================================================
===========================================================
转:夜猫子型的朋友注意了!
夜猫子型的朋友注意了!
沉重的话题: 一个毕业后进微软的同志,上月死了,睡一觉就起不来了,医生说是猝死,推测是过劳,只不过25岁的黄金年龄。
晚上9-11点为免疫系统(淋巴)排毒时间,此段时间应安静或听音乐
晚间11-凌晨1点,肝的排毒,需在熟睡中进行。
凌晨1-3点,胆的排毒,亦同。
凌晨3-5点,肺的排毒。此即为何咳嗽的人在这段时间咳得最剧烈,
因排毒动作已走到肺;不应用止咳药,以免抑制废积物的排除。
凌晨5-7点,大肠的排毒,应上厕所排便。
凌晨7-9点,小肠大量吸收营养的时段,应吃早餐。
患病者最好早吃,在6点半前,养生者在7点半前,
不吃早餐者应改变习惯,即使拖到9、10点吃都比不吃好。
半夜至凌晨4点为脊椎造血时段,必须熟睡,不宜熬夜。
为了大家健康,以后不要熬夜了!
Trackback:
http://alexclark.itpub.net/post/670/423527
查看全文
herosoft
发表于:2008.10.01 19:51
::分类:
(
Health
)
::阅读:(173次)
::
评论
(0)
===========================================================
===========================================================
操作系统进程描述
herosoft
发表于:2008.10.01 17:24
::分类:
(
程序人生
)
::阅读:(140次)
::
评论
(0)
===========================================================
===========================================================
转:天平数学,12个球称3次
转:天平数学,12个球称3次
问题:
天平数学问题:有12个外观完全一样的球,其中有一个球和其他球的重量不一致,如何使用一个天平称3次得出不一致的球是哪个?
查看全文
herosoft
发表于:2008.09.28 12:53
::分类:
(
Clever
)
::阅读:(353次)
::
评论
(0)
===========================================================
===========================================================
转:MSN和Gtalk的本地密码存在严重漏洞
我原先以为微软和Google在用户帐号安全上应该是专家,看来我又看走眼了,因为凑巧看到一款黑客工具MessenPass,可以直接显示本地MSN和Gtalk等聊天工具的密码,由此可以直接破解用户Hotmail和Gmail的密码,这显示MSN和Gtalk的本地存放密码的方式存在严重漏洞。
查看全文
herosoft
发表于:2008.09.25 17:44
::分类:
(
程序人生
)
::阅读:(246次)
::
评论
(0)
===========================================================
===========================================================
转:Pocket PC 视觉样式自定义工具 Theme Generator v2
转:Pocket PC 视觉样式自定义工具 Theme Generator v2
Windows Mobile Professional for Pocket PC 视觉样式文件扩展名为 .TSK,定义了 Pocket PC 视觉样式主题的“今日”屏幕背景、“开始”菜单背景、导航工具栏颜色、通知工具栏颜色、信息对话框颜色等等。通过 Pocket PC 的“开始”菜单-设置-今日,直接加载已有的 .TSK 文件,我们即可直接应用 Pocket PC 视觉样式主题,省却了逐一修改的步骤。
查看全文
herosoft
发表于:2008.09.24 15:12
::分类:
(
程序人生
)
::阅读:(597次)
::
评论
(0)
===========================================================
===========================================================
转:Apache内存池中分配结点补充说明收藏
Apache内存池中分配结点补充说明收藏
在tingya的blog中Apache内存池内幕第一章节中对apr_memnode_t(内存分配结点,以下简称结点)的结构体成员做了较详细说明,在本文中对结点做进一步补充说明。
以下是结点定义:
struct apr_memnode_t {
apr_memnode_t *next; /**< next memnode */
apr_memnode_t **ref; /**< reference to self */
apr_uint32_t index; /**< size */
apr_uint32_t free_index; /**< how much free */
char *first_avail; /**< pointer to first free memory */
char *endp; /**< pointer to end of free memory */
};
查看全文
herosoft
发表于:2008.09.23 16:29
::分类:
(
C/C++
)
::阅读:(406次)
::
评论
(0)
===========================================================
===========================================================
转:利用博客赚网费 - [网赚]
herosoft
发表于:2008.09.23 14:35
::分类:
(
程序人生
)
::阅读:(346次)
::
评论
(0)
===========================================================
===========================================================
转:可以放广告的博客列表(BSP) - [资源]
herosoft
发表于:2008.09.23 14:22
::分类:
(
程序人生
)
::阅读:(527次)
::
评论
(0)
===========================================================
===========================================================
转:使用基本认证从WebServer获取数据
转:使用基本认证从WebServer获取数据
查看全文
herosoft
发表于:2008.09.22 13:37
::分类:
( )
::阅读:(521次)
::
评论
(0)
===========================================================
===========================================================
转:暴风影音第三轮融资1500万美元
兔子Jim小道消息:暴风影音已经完成了第三轮融资,数额约为1500万美元,折合人民币约1亿元左右。暴风网际CEO冯鑫考虑在2010年能够在香港完成上市。据了解,暴风影音曾在2006年3月和2007年年初分别融资300万美元和600万美元,当时是由IDG主投。此次第三轮融资的投资方目前不详,但是冯鑫上午表示,此轮融资IDG只会跟投。
查看全文
herosoft
发表于:2008.09.22 11:40
::分类:
(
程序人生
)
::阅读:(402次)
::
评论
(0)
===========================================================
===========================================================
转: Windows句柄数的限制
转: Windows句柄数的限制
最近发现以前写的部分程序存在句柄数不断增加,系统运行一段时间后就会出现问题
检查发现这是由于创建线程完成以后没有调用CloseHandle,导致句柄数量不断增加,而操作系统对句柄最大数量是有限制的,经测试,在Windows XP SP3 下大概只能开到34万个,之后开任何程序都可能被报错。
查看全文
herosoft
发表于:2008.09.22 09:39
::分类:
(
C/C++
)
::阅读:(1764次)
::
评论
(0)
===========================================================
===========================================================
转:Google网页级别PR - 他们没告诉你的
相信对搜索引擎优化感兴趣的人,都听说过Google网页级别。英文是Page Rank,缩写是PR。
所谓网页级别,是由 Google的两位创始人Larry Page 和 Sergey Brin 在斯坦福大学开发的衡量网页重要性的一个指标。简单的说,你的网页导入链接越多,你的网页级别就越高。实际上网页A链接到网页B时,Google就认为网页A投了网页B一票。网页B所得的票数越多,网页级别也就越高,也就是在Google眼里,网页B就越重要。
Google的工程师吴军在Google中文博客(他们取名叫黑板报)写了一篇关于Google PR的文章。
下面主要谈谈他们不会告诉大家的个人观察。
Google在排列搜索结果的时候,网页级别是排名算法当中很重要的一个因素。当然,随着技术的改进,网页级别的重要性在一点一点的下降。
想要提高网页级别,只有一个方法,就是获得更多的导入链接。同时要注意两点:一是链接到你的网页的网页A本身的网页级别有多高。网页A本身的网页级别越高,当然他所投的票的价值就越高,网页B所能获得的级别也才越高。
二是在网页A上一共有多少导出链接。导出链接的数目会稀释所投票的价值。也就是说如果网页A链接到你,而网页A本身网页级别很高,而且它只链接到你的网页B,那么你的网页B就会得到最高的网页级别价值。
要想查看网页级别,你可以到Google的网站上,下载Google工具栏。Google工具栏的绿色显示条,指示的就是你的网页级别。
网页级别是从0至10,0是最低级别,10是最高级别。只有最重要的几个网站达到了网页级别10,比如Google本身。
如果PR条当中完全是白色的,那么你的网页级别就是0。如果是灰色的,那么你的这个网页还没有被Google所收录,或者这个网站是被惩罚或已被删除的。一般来说,PR5应该被认为是不错的网页级别。要想达到6,7以上是很困难的。
真正Google PR的计算和更新是动态的不间断的过程。我们在工具栏看到的PR值只是”可见的PR值”,大致三个月更新一次。所以你现在看到的PR值很可能是几个月以前的数据了。真正的当前的被用来计算排名的网页级别我们是无法知道的。因此,想判断PR和排名之间的直接数量关系是没什么意义的。
网页级别是以网页为单位的,而不是整个网站,所以每一个网页本身都有它自己的网页级别。很可能你的主页是PR5,但是里面的内容页就会降为PR4,PR3,甚至PR0。
对网页级别PR一个很大的误解是网页级别的名称来源。实际上在英文当中,网页级别原译应该是佩奇级别。这个名字来源于它的创始人拉里佩奇Larry Page,是以创始人本人的名字来命名的。这一点Google内部的人已经澄清过很多次。但巧合的是,在英文中Page (佩奇)与网页是同一个词。所以在翻译成中文的时候,似乎绝大部分站长都直接翻译成网页级别。虽然意思对,但实际上不符合Google的原意。
那么网页级别在Google的搜索引擎排名当中的重要性又如何呢?应该说网页级别到目前为止还是Google排名算法的基石。当其他因素相同的时候,你的网页级别就成了一个最关键的因素。
但是我们也经常看到,PR值低的网页比PR值高很多的网页要排的更靠前。这种现象现在越来越明显,也就是说PR值在排名当中所占的比重越来越低了。或者说Google排名算法越来越复杂了。
在考虑PR值的同时,Google会考虑与链接相关的很多其他因素。比如说链接页本身的年龄,链接页内容更改的频率,链接文字前后的上下文,链接页 还连向其他哪些页等等,等等。Google所考虑的与链接有关的因素,就不下二,三十项。相应的,网页级别PR的重要性也就相对降低了。
因为PR本身是一个很硬性的数值,只要你有更多的链接,你的PR值就会增长。但是,随着作弊的人越来越多,网页级别高有时候并不能说明你的网页与关键词相关,甚至有时候并不代表你的网页有多重要。
现在越来越多的人认为PR已经不重要了。我个人觉得网页级别还是很重要的因素,某种意义上它起着门槛的作用。
Google对买卖PR深恶痛绝。并不是每个网页都能传递网页级别的,有的网页看起来PR很高,但实际上没有投票能力了。这是对买卖PR者的惩罚。
查看全文
herosoft
发表于:2008.09.11 16:25
::分类:
(
程序人生
)
::阅读:(225次)
::
评论
(0)
===========================================================
===========================================================
转:IBM ThinkPad笔记本电脑问题集
IBM ThinkPad笔记本电脑问题集 眼下买笔记本的人是越来越多,这其中也不乏第一次接触笔记本电脑的新手和连电脑就根本玩不转的菜鸟们。新机到手,新手们总是有一个又一个让老用户看起来啼笑皆非的问题要问,当然这其中也有一些用了笔记本很久的人至今还搞不清楚的问题。因此笔者撰写此文的目的旨在给那些新手们扫清初次用机的种种疑惑。
查看全文
herosoft
发表于:2008.09.11 16:17
::分类:
(
程序人生
)
::阅读:(921次)
::
评论
(0)
===========================================================
===========================================================
转:复制CSDN的BLOG代码,去掉前面行号的方法
复制CSDN的BLOG代码,去掉前面行号的方法
查看全文
herosoft
发表于:2008.09.11 16:17
::分类:
(
Clever
)
::阅读:(251次)
::
评论
(0)
===========================================================
===========================================================
一位软件工程师的6年总结
作者:成晓旭
“又是一年毕业时”,看到一批批学子离开人生的象牙塔,走上各自的工作岗位;想想自己也曾经意气风发、踌躇满志,不觉感叹万千……本文是自己工作6年的经历沉淀或者经验提炼,希望对所有的软件工程师们有所帮助,早日实现自己的人生目标。本文主要是关于软件开发人员如何提高自己的软件专业技术方面的具体建议,前面几点旨在确定大的方向,算是废话吧。 查看全文
herosoft
发表于:2008.09.11 09:27
::分类:
(
职场
)
::阅读:(184次)
::
评论
(0)
===========================================================
===========================================================
转:基础知识:检测线程是否结束的方法收藏
herosoft
发表于:2008.09.02 10:54
::分类:
( )
::阅读:(342次)
::
评论
(0)
===========================================================
===========================================================
最美的精典爱情句子
herosoft
发表于:2008.03.04 14:34
::分类:
(
悠悠岁月
)
::阅读:(272次)
::
评论
(0)
===========================================================
===========================================================
(转)使applet能够访问本地资源......
(转)使applet能够访问本地资源......
本文章介绍Applet数字签名,授予访问本地资源的方法
查看全文
herosoft
发表于:2007.10.30 17:31
::分类:
( )
::阅读:(532次)
::
评论
(0)
===========================================================
===========================================================
《上海市居住证》审核试行办法
《上海市居住证》审核试行办法
2007-08-12 20:56
查看全文
herosoft
发表于:2007.08.26 22:27
::分类:
(
政策、法规
)
::阅读:(308次)
::
评论
(0)
===========================================================
===========================================================
转载:上海户口和居住证的差别
转载:上海户口和居住证的差别
上海户口和居住证的差别
2007-08-12 21:08
因为工作和保险的事情,最近考虑要办个居住证,上网看到了这篇文章,本来是想让自己大意的思绪有所改变,看过之后却有种说不出的感觉~~~建议在上海的外地人都看一下,只有对制度有了深入的了解,才能够有效的保护自己的权益不受损失!户口和居住证有以下几个差异,希望对同去上海的兄弟姐妹们有用,大家一起补充纠正。
|
查看全文
herosoft
发表于:2007.08.26 22:24
::分类:
(
政策、法规
)
::阅读:(14298次)
::
评论
(0)
===========================================================
===========================================================
Apache tomcat 配置总结
Apache tomcat 配置总结
Apache tomcat 介绍,比较
Windows环境下的tomcat + apache配置
Linux/Unix环境下的tomcat + apache配置
查看全文
herosoft
发表于:2007.07.23 19:26
::分类:
(
WEB相关
)
::阅读:(1052次)
::
评论
(0)
===========================================================
===========================================================
GUID UUID in Java Summary
Foreground Knowledge About GUID and UUID.
Implementation in Java.
Before JDK 5.0
After JDK 5.0
Conclusion
查看全文
herosoft
发表于:2007.07.18 19:44
::分类:
( )
::阅读:(1389次)
::
评论
(0)
===========================================================
===========================================================
转:一个程序员如何月进万金的
herosoft
发表于:2006.08.01 21:08
::分类:
(
程序人生
)
::阅读:(436次)
::
评论
(0)
===========================================================
===========================================================
转:Portal面临的挑战
Portal面临的挑战
AJAX技术的出现使portal技术面临着巨大的挑战:
查看全文
herosoft
发表于:2006.08.01 21:07
::分类:
(
WEB相关
)
::阅读:(381次)
::
评论
(0)
===========================================================
===========================================================
转:程序员为什么跳槽
herosoft
发表于:2006.08.01 20:54
::分类:
(
职场
)
::阅读:(338次)
::
评论
(0)
===========================================================
===========================================================
转:绝对能够测试你的C语言功力的几个问题!--来自张孝祥专栏
另外,在实际的VC++教学中,发现很少有真正精通了C语言编程的学员,一般都有或多或少概念不是完全清楚的问题,特别是一些需要丰富的实战经验才能体会和明白的问题,如字符串,指针,类型转换,定义指向函数的指针类型,这也是导致学习VC++困难的一个原因。下面有几个简单测试将能发现你对C语言的掌握情况。
int x=35;
char str[10];
//问:strlen(str)和sizeof(str)的值分别是多少?
查看全文
herosoft
发表于:2006.07.30 19:39
::分类:
(
C/C++
)
::阅读:(592次)
::
评论
(0)
===========================================================
===========================================================
转:计算机 经典书- unix
计算机 经典书- unix
【Unix】
1。Linux内核情景分析,上,下册。浙江大学出版社
2。Linux内核源代码分析(美)[S.麦克斯韦尔]
3。Linux编程白皮书
4。Linux IP协议栈源代码分析
5。莱昂氏unix源代码分析
查看全文
herosoft
发表于:2006.07.26 14:04
::分类:
(
Unix相关
)
::阅读:(1572次)
::
评论
(0)
===========================================================
===========================================================
(转载)The 0x10 Best Questions for C Programmers
(转载)The 0x10 Best Questions for C Programmers 查看全文
herosoft
发表于:2006.07.17 13:36
::分类:
(
C/C++
)
::阅读:(275次)
::
评论
(0)
===========================================================
===========================================================
BASE64编码转换原理
herosoft
发表于:2006.07.14 20:56
::分类:
(
C/C++
)
::阅读:(671次)
::
评论
(0)
===========================================================
===========================================================
[转]谈保健-千万不要死于无知
herosoft
发表于:2006.05.22 20:46
::分类:
(
Health
)
::阅读:(323次)
::
评论
(0)
===========================================================
===========================================================
正则表达式系统教程-----------(转)
herosoft
发表于:2006.05.16 16:55
::分类:
(
Unix相关
)
::阅读:(369次)
::
评论
(0)
===========================================================
===========================================================
个性周鸿袆
herosoft
发表于:2006.05.09 19:38
::分类:
(
追梦
)
::阅读:(312次)
::
评论
(0)
===========================================================
===========================================================
人生经典80句
herosoft
发表于:2006.03.08 22:11
::分类:
(
悠悠岁月
)
::阅读:(330次)
::
评论
(0)
===========================================================
===========================================================
程序员的十种级别
herosoft
发表于:2006.03.08 20:57
::分类:
(
程序人生
)
::阅读:(405次)
::
评论
(0)
===========================================================
===========================================================
Java经典好资源,给大家分享。
herosoft
发表于:2006.03.02 10:14
::分类:
( )
::阅读:(580次)
::
评论
(0)
===========================================================
===========================================================
英文写作必背句型(转)-实用
herosoft
发表于:2006.03.01 19:55
::分类:
(
英语
)
::阅读:(359次)
::
评论
(0)
===========================================================
===========================================================
oracle-字符集3
herosoft
发表于:2006.02.27 15:57
::分类:
(
数据库技术
)
::阅读:(383次)
::
评论
(0)
===========================================================
===========================================================
oracle字符集2
herosoft
发表于:2006.02.27 15:55
::分类:
(
数据库技术
)
::阅读:(412次)
::
评论
(0)
===========================================================
===========================================================
oracle字符集问题
herosoft
发表于:2006.02.27 15:53
::分类:
(
数据库技术
)
::阅读:(340次)
::
评论
(0)
===========================================================
===========================================================
用Jdk实现AOP
JDK1.2以后提供了动态代理的支持,通过实现java.lang.reflect.InvocationHandler接口提供一个执行处理器,然后通过java.lang.reflect.Proxy得到一个代理对象,通过这个代理对象来执行商业方法,在商业方法被调用的同时,执行处理器会被自动调用,从而实现方法拦截。nanning就是这样原理的,spring也用了动态代理作为实现之一。
查看全文
herosoft
发表于:2006.02.20 11:14
::分类:
( )
::阅读:(555次)
::
评论
(0)
===========================================================
===========================================================
块和迭代器,事务处理
herosoft
发表于:2006.02.20 11:02
::分类:
(
Computer Language Study
)
::阅读:(303次)
::
评论
(0)
===========================================================
===========================================================
声明函数指针并实现回调
作者:赵湘宁 更新日期:2004-11-07
来源:vckbase.com 浏览次数: 273
本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调。注意这里针对的是普通的函数,不包括完全依赖于不同语法和语义规则的类成员函数。
查看全文
herosoft
发表于:2006.02.19 21:11
::分类:
(
C/C++
)
::阅读:(455次)
::
评论
(0)
===========================================================
===========================================================
多态(polymorphism),覆盖(Override),重载(overload)
多态(polymorphism) 覆盖(Override) 重载(overload) 查看全文
herosoft
发表于:2006.02.19 20:57
::分类:
(
Computer Language Study
)
::阅读:(598次)
::
评论
(0)
===========================================================
===========================================================
37个我爱Ruby的理由
herosoft
发表于:2006.02.19 15:40
::分类:
(
Computer Language Study
)
::阅读:(309次)
::
评论
(0)
===========================================================
===========================================================
Closure
| Closure | design | 8 September 2004 |
As there is a growing interest in dynamic languages, more people are running into a programming concept called Closures or Blocks. People from a C/C++/Java/C# language background don't have closures and as a result aren't sure what they are. Here's a brief explanation, those who done a decent amount of programming in languages that have them won't find this interesting. |
查看全文
herosoft
发表于:2006.02.19 15:14
::分类:
(
Computer Language Study
)
::阅读:(710次)
::
评论
(0)
===========================================================
===========================================================
闭包(Closures)在各种语言中的例子
herosoft
发表于:2006.02.19 14:40
::分类:
(
Computer Language Study
)
::阅读:(349次)
::
评论
(0)
===========================================================
===========================================================
块和闭包(block and Closures)
herosoft
发表于:2006.02.19 14:36
::分类:
(
Computer Language Study
)
::阅读:(364次)
::
评论
(0)
===========================================================
===========================================================
用Boost.regex库进行网页分析源代码(批量下载篇)
| 标题 | 用Boost.regex库进行网页分析源代码(批量下载篇) 选择自 feifei1018 的 Blog |
| 关键字 | 用Boost.regex库进行网页分析源代码(批量下载篇) |
| 出处 | |
查看全文
herosoft
发表于:2006.02.17 20:45
::分类:
(
C/C++
)
::阅读:(537次)
::
评论
(0)
===========================================================
===========================================================
团队协作关键做好三件事&一个项目经理的一些个人体会
| |
| 标题 | 团队协作关键做好三件事&一个项目经理的一些个人体会 选择自 feifei1018 的 Blog |
| 关键字 | 团队协作关键做好三件事&一个项目经理的一些个人体会 |
| 出处 | |
查看全文
herosoft
发表于:2006.02.17 20:42
::分类:
(
项目管理
)
::阅读:(284次)
::
评论
(0)
===========================================================
===========================================================
移动数据学习-GPRS、GSM、WAP和CDMA 区别
| 标题 | 移动数据学习-GPRS、GSM、WAP和CDMA 区别 选择自 feifei1018 的 Blog |
| 关键字 | 移动数据学习-GPRS、GSM、WAP和CDMA 区别 |
| 出处 | |
查看全文
herosoft
发表于:2006.02.17 20:39
::分类:
(
网络技术
)
::阅读:(328次)
::
评论
(0)
===========================================================
===========================================================
嫁人就嫁CS的- -
herosoft
发表于:2006.02.14 20:26
::分类:
( )
::阅读:(377次)
::
评论
(0)
===========================================================
===========================================================
关于Java的序列化以及随机文件
herosoft
发表于:2006.02.14 11:15
::分类:
( )
::阅读:(409次)
::
评论
(0)
===========================================================
===========================================================
Hibernate学习笔记!- -
herosoft
发表于:2006.02.14 11:07
::分类:
( )
::阅读:(749次)
::
评论
(0)
===========================================================
===========================================================
java对象序列化学习笔记- -
herosoft
发表于:2006.02.14 10:53
::分类:
( )
::阅读:(412次)
::
评论
(0)
===========================================================
===========================================================
Java中ThreadLocal的设计与使用- -
早在Java 1.2推出之时,Java平台中就引入了一个新的支持:java.lang.ThreadLocal,给我们在编写多线程程序时提供了一种新的选择。使用这个工具类可以很简洁地编写出优美的多线程程序,虽然ThreadLocal非常有用,但是似乎现在了解它、使用它的朋友还不多。
查看全文
herosoft
发表于:2006.02.14 10:23
::分类:
( )
::阅读:(350次)
::
评论
(0)
===========================================================
===========================================================
使用Struts的Token机制解决表单的重复提交
| |
| 标题 | 使用Struts的Token机制解决表单的重复提交 选择自 chinaewolf 的 Blog |
| 关键字 | 使用Struts的Token机制解决表单的重复提交 |
| 出处 | |
查看全文
herosoft
发表于:2006.01.21 11:18
::分类:
( )
::阅读:(1054次)
::
评论
(0)
===========================================================
===========================================================
Servlet和JSP的线程安全问题
herosoft
发表于:2006.01.20 09:57
::分类:
( )
::阅读:(646次)
::
评论
(0)
===========================================================
===========================================================
Java同步问题
herosoft
发表于:2006.01.20 09:47
::分类:
( )
::阅读:(845次)
::
评论
(0)
===========================================================
===========================================================
The "Double-Checked Locking is Broken" Declaration
Signed by: David Bacon (IBM Research) Joshua Bloch (Javasoft), Jeff Bogda, Cliff Click (Hotspot JVM project), Paul Haahr, Doug Lea, Tom May, Jan-Willem Maessen, John D. Mitchell (jGuru) Kelvin Nilsen, Bill Pugh, Emin Gun Sirer
Double-Checked Locking is widely cited and used as an efficient method for implementing lazy initialization in a multithreaded environment.
Unfortunately, it will not work reliably in a platform independent way when implemented in Java. When implemented in other languages, such as C++, it depends on the memory model of the processor, the reorderings performed by the compiler and the interaction between the compiler and the synchronization library. Since none of these are specified in a language such as C++, little can be said about the situations in which it will work. Explicit memory barriers can be used to make it work in C++, but these barriers are not available in Java.
查看全文
herosoft
发表于:2006.01.18 15:45
::分类:
( )
::阅读:(594次)
::
评论
(0)
===========================================================
===========================================================
Oracle Advanced Sql
herosoft
发表于:2006.01.17 21:56
::分类:
(
数据库技术
)
::阅读:(492次)
::
评论
(0)
===========================================================
===========================================================
Synchronization and the Java Memory Model
Synchronization and the Java Memory Model
Concurrent Programming in Java
© 1996-1999 Doug Lea
Synchronization and the Java Memory Model
This set of excerpts from section 2.2 includes the main discussions on how the Java Memory Model impacts concurrent programming. For information about ongoing work on the memory model, see Bill Pugh's Java Memory Model pages.
Consider the tiny class, defined without any synchronization:
final class SetCheck {
private int a = 0;
private long b = 0;
void set() {
a = 1;
b = -1;
}
boolean check() {
return ((b == 0) ||
(b == -1 && a == 1));
}
}
In a purely sequential language, the method check could never return false. This holds even though compilers, run-time systems, and hardware might process this code in a way that you might not intuitively expect. For example, any of the following might apply to the execution of method set: - The compiler may rearrange the order of the statements, so b may be assigned before a. If the method is inlined, the compiler may further rearrange the orders with respect to yet other statements.
- The processor may rearrange the execution order of machine instructions corresponding to the statements, or even execute them at the same time.
- The memory system (as governed by cache control units) may rearrange the order in which writes are committed to memory cells corresponding to the variables. These writes may overlap with other computations and memory actions.
- The compiler, processor, and/or memory system may interleave the machine-level effects of the two statements. For example on a 32-bit machine, the high-order word of b may be written first, followed by the write to a, followed by the write to the low-order word of b.
- The compiler, processor, and/or memory system may cause the memory cells representing the variables not to be updated until sometime after (if ever) a subsequent check is called, but instead to maintain the corresponding values (for example in CPU registers) in such a way that the code still has the intended effect.
In a sequential language, none of this can matter so long as program execution obeys as-if-serial semantics. Sequential programs cannot depend on the internal processing details of statements within simple code blocks, so they are free to be manipulated in all these ways. This provides essential flexibility for compilers and machines. Exploitation of such opportunities (via pipelined superscalar CPUs, multilevel caches, load/store balancing, interprocedural register allocation, and so on) is responsible for a significant amount of the massive improvements in execution speed seen in computing over the past decade. The as-if-serial property of these manipulations shields sequential programmers from needing to know if or how they take place. Programmers who never create their own threads are almost never impacted by these issues. Things are different in concurrent programming. Here, it is entirely possible for check to be called in one thread while set is being executed in another, in which case the check might be "spying" on the optimized execution of set. And if any of the above manipulations occur, it is possible for check to return false. For example, as detailed below, check could read a value for the long b that is neither 0 nor -1, but instead a half-written in-between value. Also, out-of-order execution of the statements in set may cause check to read b as -1 but then read a as still 0.
In other words, not only may concurrent executions be interleaved, but they may also be reordered and otherwise manipulated in an optimized form that bears little resemblance to their source code. As compiler and run-time technology matures and multiprocessors become more prevalent, such phenomena become more common. They can lead to surprising results for programmers with backgrounds in sequential programming (in other words, just about all programmers) who have never been exposed to the underlying execution properties of allegedly sequential code. This can be the source of subtle concurrent programming errors.
In almost all cases, there is an obvious, simple way to avoid contemplation of all the complexities arising in concurrent programs due to optimized execution mechanics: Use synchronization. For example, if both methods in class SetCheck are declared as synchronized, then you can be sure that no internal processing details can affect the intended outcome of this code.
But sometimes you cannot or do not want to use synchronization. Or perhaps you must reason about someone else's code that does not use it. In these cases you must rely on the minimal guarantees about resulting semantics spelled out by the Java Memory Model. This model allows the kinds of manipulations listed above, but bounds their potential effects on execution semantics and additionally points to some techniques programmers can use to control some aspects of these semantics (most of which are discussed in ?.4).
The Java Memory Model is part of The JavaTM Language Specification, described primarily in JLS chapter 17. Here, we discuss only the basic motivation, properties, and programming consequences of the model. The treatment here reflects a few clarifications and updates that are missing from the first edition of JLS.
The assumptions underlying the model can be viewed as an idealization of a standard SMP machine of the sort described in ?.2.4:
For purposes of the model, every thread can be thought of as running on a different CPU from any other thread. Even on multiprocessors, this is infrequent in practice, but the fact that this CPU-per-thread mapping is among the legal ways to implement threads accounts for some of the model's initially surprising properties. For example, because CPUs hold registers that cannot be directly accessed by other CPUs, the model must allow for cases in which one thread does not know about values being manipulated by another thread. However, the impact of the model is by no means restricted to multiprocessors. The actions of compilers and processors can lead to identical concerns even on single-CPU systems.
The model does not specifically address whether the kinds of execution tactics discussed above are performed by compilers, CPUs, cache controllers, or any other mechanism. It does not even discuss them in terms of classes, objects, and methods familiar to programmers. Instead, the model defines an abstract relation between threads and main memory. Every thread is defined to have a working memory (an abstraction of caches and registers) in which to store values. The model guarantees a few properties surrounding the interactions of instruction sequences corresponding to methods and memory cells corresponding to fields. Most rules are phrased in terms of when values must be transferred between the main memory and per-thread working memory. The rules address three intertwined issues:
- Atomicity
- Which instructions must have indivisible effects. For purposes of the model, these rules need to be stated only for simple reads and writes of memory cells representing fields - instance and static variables, also including array elements, but not including local variables inside methods.
- Visibility
- Under what conditions the effects of one thread are visible to another. The effects of interest here are writes to fields, as seen via reads of those fields.
- Ordering
- Under what conditions the effects of operations can appear out of order to any given thread. The main ordering issues surround reads and writes associated with sequences of assignment statements.
When synchronization is used consistently, each of these properties has a simple characterization: All changes made in one synchronized method or block are atomic and visible with respect to other synchronized methods and blocks employing the same lock, and processing of synchronized methods or blocks within any given thread is in program-specified order. Even though processing of statements within blocks may be out of order, this cannot matter to other threads employing synchronization. When synchronization is not used or is used inconsistently, answers become more complex. The guarantees made by the memory model are weaker than most programmers intuitively expect, and are also weaker than those typically provided on any given JVM implementation. This imposes additional obligations on programmers attempting to ensure the object consistency relations that lie at the heart of exclusion practices: Objects must maintain invariants as seen by all threads that rely on them, not just by the thread performing any given state modification.
The most important rules and properties specified by the model are discussed below.
查看全文
herosoft
发表于:2006.01.17 17:30
::分类:
( )
::阅读:(1415次)
::
评论
(0)
===========================================================
===========================================================
在Java中做到真正安全的释放数据库资源
herosoft
发表于:2006.01.17 11:24
::分类:
( )
::阅读:(383次)
::
评论
(0)
===========================================================
===========================================================
在Java中实现浮点数的精确计算
在Java中实现浮点数的精确计算
问题的提出:
如果我们编译运行下面这个程序会看到什么?
public class Test{
public static void main(String args[]){
System.out.println(0.05+0.01);
System.out.println(1.0-0.42);
System.out.println(4.015*100);
System.out.println(123.3/100);
}
};
你没有看错!结果确实是
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
Java中的简单浮点数类型float和double不能够进行运算。不光是Java,在其它很多编程语言中也有这样的问题。在大多数情况下,计算的结果是准确的,但是多试几次(可以做一个循环)就可以试出类似上面的错误。现在终于理解为什么要有BCD码了。
这个问题相当严重,如果你有9.999999999999元,你的计算机是不会认为你可以购买10元的商品的。
在有的编程语言中提供了专门的货币类型来处理这种情况,但是Java没有。现在让我们看看如何解决这个问题。
查看全文
herosoft
发表于:2006.01.17 11:16
::分类:
( )
::阅读:(378次)
::
评论
(0)
===========================================================
===========================================================
100行Java代码构建一个线程池
herosoft
发表于:2006.01.05 14:19
::分类:
( )
::阅读:(1051次)
::
评论
(1)
===========================================================
===========================================================
逐渐挖掘Enhanced for Loop
孙海涛 (sun.haitao@126.com)
2004年7月29日最初发表,2004年8月10日最后修订
J2SE 1.5提供了另一种形式的for循环。借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象。本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类,并解释和这一机制的一些常见问题。
查看全文
herosoft
发表于:2006.01.05 11:57
::分类:
( )
::阅读:(392次)
::
评论
(0)
===========================================================
===========================================================
设计模式的原则的思考
前几天在网上看到一篇讨论设计模式的文章,原文的一些言语我甚是赞同,摘录其中几段给大家看看,或许你会从中获得一些体会:
查看全文
herosoft
发表于:2005.12.28 19:15
::分类:
(
程序人生
)
::阅读:(398次)
::
评论
(0)
===========================================================
===========================================================
java中的模式与框架
herosoft
发表于:2005.12.27 14:12
::分类:
( )
::阅读:(332次)
::
评论
(0)
===========================================================
===========================================================
使用回调技术实现--求递增递减序列
使用回调实现--求递增递减序列
给定一串整数数列,求出所有的递增和递减子序列的数目。如数列7,2,6,9,8,3,5,2,1可分为(7,2),(2,6,9),(9,8,3),(3,5),(5,2,1)5个子序列,答案就是5。我们称2,9,3,5为转折元素。[数列趋势的判断方法,相邻两个数差的积是否大于0]
查看全文
herosoft
发表于:2005.12.26 22:39
::分类:
(
C/C++
)
::阅读:(764次)
::
评论
(2)
===========================================================
===========================================================
《木桶定律》前言
《木桶定律》前言
不管是企业还是个人,不管你有没有意识到,都在不同程度上存在着缺点和不足。任何一个区域都有“最短的木板”,它有可能是某个人,或是某个行业,或是某件事。
查看全文
herosoft
发表于:2005.12.25 22:50
::分类:
(
项目管理
)
::阅读:(15902次)
::
评论
(0)
===========================================================
===========================================================
c++真的低迷了吗?
最近总是有学校的学生朋友问我,嘿,blue,你说我要学习一个编程语言,我该学习哪一个呢?我一般的回答都是c/c++。然后大多数朋友都会说,外面需要的是.net和java,那我学习java或者c#可以不,我回答可以。
查看全文
herosoft
发表于:2005.12.25 22:44
::分类:
(
C/C++
)
::阅读:(794次)
::
评论
(1)
===========================================================
===========================================================
J2EE vs. .NET by Bruce Eckel
J2EE vs. .NET by Bruce Eckel
Which platform i.e. .NET or Java is going to dominate in next 3-4 years?
There are two factors here: Java has a large, passionate following of people w
ho have spent enough time with the language to know it well. It has generally
served them well -- at least for server-side programming and for some desktop
application programming. And Java is cross-platform, something which continues
to grow in importance as Linux becomes more popular and since Apple has gone
to OSX (and now, finally, supports Java -- quite well, as it turns out).
The second factor is that Microsoft still dominates the desktop. Lots of peopl
e who used to adore Microsoft now don't, but they still use it. If you were tr
ying to create a product that you wanted to sell a lot of, you'd be crazy not
to at least make it work under Windows. Yes, Java will work under Windows, but
it looks different enough that it might scare some people off.
And C# is nothing to sneeze at (precisely what I did when I first saw it, prim
arily based on Microsoft's past performance implementing the C++ standard, whi
ch was nothing short of abominable). C# is the best thing Microsoft has done i
n the language arena -- very well thought-out and architected. I'd have to say
, strictly from a business standpoint, if I were creating a product that I was
basing the company on, I would seriously consider writing it in C# (at least,
when the next MS Windows looks more imminent, since in theory it will have th
e .NET runtime built in).
There's no question that C# is the first real competition Java has seen, and a
lready Sun has started to respond to this. JDK 1.5 will have features that are
clearly inspired directly from C#. At Java One they announced some kind of ne
w desktop development system where they want to make the creation of GUI deskt
op apps easier than VB. Based on this response, I can say that C# will do noth
ing but good for Java. In addition, IBM's Eclipse development environment prov
ides a competetive alternative for Visual Studio and their SWT provides a more
native GUI look-and-feel than does Swing, so you have the option to create so
mething that won't look so unfamiliar to users.
All that I've said here just indicates that there will be no clear winner righ
t away. There's going to be a battle (or a war), but in the best sense of the
word: both companies will be fighting to do things to attract programmers, and
that means trying to make your life as easy as possible. The best possible ou
tcome will be that both languages/platforms stay in the game and that this bat
tle continues. You may wonder how Java/Sun can win against Microsoft, but keep
this in mind: IBM puts roughly 10 times the money into Java per year that Sun
does. Even if Sun can't come up with a new, insightful business plan (see Rob
ert Cringely's discussion of this) and goes under, IBM will take the helm and
continue to support and promote Java. So the battle will continue, to our bene
fit, and in the end I think you'll be able to choose the language you want dep
ending on what you need.
herosoft
发表于:2005.12.21 10:56
::分类:
( )
::阅读:(800次)
::
评论
(1)
===========================================================
===========================================================
“这可不是泛型”-Bruce Eckel眼中的Java泛型 supertoto(翻译)
herosoft
发表于:2005.12.21 10:41
::分类:
( )
::阅读:(882次)
::
评论
(1)
===========================================================
===========================================================
Singleton模式下 如何析构
这两天看了看GoF 23种设计模式解析,发现虽然singleton是颇为简单的模式,但要想有个好的设计,仍需注意些许细节!
Let me have a try!
#include <iostream.h>
#include <string.h>
class t
{
public:
static t* create()
{
if(!tinstance)
tinstance = new t();
return tinstance ;
}
static void cleanup() {
if(tinstance) {
delete tinstance;
return;
}
cout << "no instance exists!" << endl;
return;
}
int getV() {
return i;
}
private: t()
{
i = 6;
}
//public: ~t()
~t()
{
//if(tinstance)
//delete tinstance ;//无限递归, delete的时候 先调用析构函数, 然而析构函数中有使用delete, 如此循环,造成栈溢出
tinstance = 0;
cout << "kon";
}
private :
static t* tinstance ;
int i ;
};
t* t::tinstance = 0;
void main() {
/* note that: this's a singleton example, the constructor and deconstructor shoudle be private,
so you coundn't create and destory directly and explicitly!
*/
//t t1;
//cout << t1.getV() << endl;
//int i = t1.getV();
//cout << i << endl;
t* t = t::create();
cout << t->getV() << endl;
int i = t->getV();
cout << i << endl;
//delete t;
t->cleanup();
}
herosoft
发表于:2005.12.20 17:12
::分类:
(
C/C++
)
::阅读:(917次)
::
评论
(0)
===========================================================
===========================================================
Java1.5泛型指南中文版(Java1.5 Generic Tutorial)
Java1.5泛型指南中文版(Java1.5 Generic Tutorial)
英文版pdf下载链接:
http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf 译者:
chengchengji@163.com目 录
摘要和关键字... 1
1. 介绍... 1
2. 定义简单的泛型... 2
3. 泛型和子类继承... 3
4. 通配符(Wildcards). 4
4.1. 有限制的通配符(Bounded Wildcards). 5
5. 泛型方法... 6
6. 与旧代码交互... 9
6.1. 在泛型代码中使用老代码... 9
6.2. 擦除和翻译(Erasure and Translation). 10
6.3. 在老代码中使用泛型代码... 11
7. 要点(The Fine Print). 12
7.1. 一个泛型类被其所有调用共享... 12
7.2. 转型和instanceof 13
7.3. 数组Arrays. 13
8. Class Literals as Run-time Type Tokens. 14
9. More fun with *. 16
9.1. 通配符匹配(wildcard capture). 18
10. 泛型化老代码... 18
11. 致谢... 20
摘要和关键字
generics、type safe、type parameter(variable)、formal type parameter、actual
type parameter、wildcards(?)、unknown type、? extends T、? super
T、erasure、translation、cast、instanceof、arrays、Class Literals as Run-time Type
Tokens、wildcard capture、multiple bounds(T extends T1& T2 ... & Tn)、covariant
returns
查看全文
herosoft
发表于:2005.12.20 15:29
::分类:
( )
::阅读:(4990次)
::
评论
(1)
===========================================================
===========================================================
C++ 标准程序库》在 China-Pub 上的反响
herosoft
发表于:2005.12.20 11:40
::分类:
(
C/C++
)
::阅读:(749次)
::
评论
(0)
===========================================================
===========================================================
重构读书笔记之1
重构读书笔记之1
Refactoring:Improving the Design of Existing Code
之重新组织你的函数
1.Extract Method
Extract Method是最常用的重构手法之一.当我们看见一个过长的函数或者一段重要注释才能让人理解用途的代码,就应该把它放进一个独立函数中.
我们应该以简短明确的名称来命名函数,函数的粒度尽可能的小,这样函数之间彼此复用的机会就更大,可以让高层的代码读起来象注释一样.当然,如果函数都是细粒度的,它的覆写就更容易.一个函数多长才合适?在作者看来,其关键在于函数名称和函数本体之间的语义距离.如果提炼的动作可以强化代码的清晰度,那就应该去做.
Extract Method具体实施的时候,可能遇到一下三种情况:
1.无局部变量.
这种情况下,很容易,只要把该部分的代码减切出来,然后命名一个意义明确的函数,将其贴如,在原位置添加一个函数调用就可以了.
2.有局部变量
最简单的情况是:被提炼的代码只是读取而不更改这些变量的值,这种情况下我们可以简单的将它们当作参数传递给目标函数.
3.对局部变量有赋值
分为两种情况:1.这个变量只在被提炼代码中使用,这种情况我们可以按照无局部变量的方法去做.2.被提炼代码之外也使用了这个局部变量.如果局部变量在被提炼代码之后没有被使用,则直接在目标函数中修改它就可以了.如果在该代码之后还被使用了,则需要让目标函数范围该变量的值.
herosoft
发表于:2005.12.16 15:26
::分类:
( )
::阅读:(385次)
::
评论
(0)
===========================================================
===========================================================
转贴:关于hash在emule中的重要作用的文章
从emule诞生到现在也已经有了两年左右时间了,随着emule的普及,喜欢他的人也越来越多,但是由于emule对技术相应有一个门槛,不像bt那么容易上手,所以很多朋友很长时间以来一直都有这样或那样的疑问,今天是周末我也献献丑,写一篇关于hash的文章。
查看全文
herosoft
发表于:2005.12.16 15:23
::分类:
(
网络技术
)
::阅读:(766次)
::
评论
(0)
===========================================================
===========================================================
巧妙运用MAC地址重复
herosoft
发表于:2005.12.16 15:20
::分类:
(
网络技术
)
::阅读:(753次)
::
评论
(0)
===========================================================
===========================================================
When Is an “Overridden” Method Not Really Overridden?
When Is an “Overridden” Method Not Really Overridden?
什么时候被覆盖的方法真的被覆盖了?
查看全文
herosoft
发表于:2005.12.16 14:57
::分类:
( )
::阅读:(511次)
::
评论
(0)
===========================================================
===========================================================
[Java Pitfalls]Item2
String.equals()方法与"=="运算符的用法比较
请看下面的代码:
01: public class StringExample
02: {
03: public static void main (String args[])
04: {
05: String s0 = “Programming”;
06: String s1 = new String (“Programming”);
07: String s2 = “Program” + “ming”;
08:
09: System.out.println(“s0.equals(s1): ” + (s0.equals(s1)));
10: System.out.println(“s0.equals(s2): ” + (s0.equals(s2)));
11: System.out.println(“s0 == s1: ” + (s0 == s1));
12: System.out.println(“s0 == s2: ” + (s0 == s2));
13: }
14: }
输出结果如何呢?
String.equals()的功能: 对字符串中的字符一个接一个的比较,如果相等,返回true.
运算符"==": 比较String实例的引用,如果是对同一个实例的引用,则为true.
那s0与s2是否是对同一个对象的引用呢?
在
此例中"Programming", "Program" 和"ming"都是字符串常量,它在编译阶段确定.当遇到s2这种一个字符串由多个字符串连接
的情况,在编译阶段就被解析为一个字符串常量.Java为了确保每个字符串常量只有一份拷贝,当s0和s2被确定值相等时,Java会设置两个变量的引用
为同一个常量的引用.在常量池中(constant pool), java跟踪所有字符串常量.
所以,上例输出结果为:
s0.equals(s1): true
s0.equals(s2): true
s0 == s1: false
s0 == s2: true
另外的例子:
01: import java.io.*;
02:
03: public class StringExample2
04: {
05: public static void main (String args[])
06: {
07: String sFileName = “test.txt”;
08: String s0 = readStringFromFile(sFileName);
09: String s1 = readStringFromFile(sFileName);
10:
11: System.out.println(“s0 == s1: ” + (s0 == s1));
12: System.out.println(“s0.equals(s1): ” + (s0.equals(s1)));
13:
14: s0.intern();
15: s1.intern();
16:
17: System.out.println(“s0 == s1: ” + (s0 == s1));
18: System.out.println(“s0 == s1.intern(): ” +
19: (s0 == s1.intern()));
20: }
21:
22: private static String readStringFromFile (String sFileName)
23: {
24: //…read string from file…
25: }
26: }
第14
行所做是将String实例的引用s0存入常量池.当15行被处理时,对s1.intern()方法的调用会简单的返回引用s0.这样,s0和s1是两个
截然不同的两个String实例,s0 == s1,而s1.intern()返回的是常量池中的引用值,故s0==s1.intern();因为是将
s0先存入常量池,而s1.intern()只能返回对s0的引用,所以如果要将实例s1存入常量池,我们必须先设置s0=null,然后请求垃圾回收器
回收指向s0的实例.在s0被回收后,s1.intern()调用会把s1存入常量池.
总结: 在比较两个字符串时,应该使用String.equals()方法,而不是"=="运算符.
查看全文
herosoft
发表于:2005.12.16 11:28
::分类:
( )
::阅读:(477次)
::
评论
(0)
===========================================================
===========================================================
Practical Java 读书笔记
Practical Java 读书笔记
看了三章的Pratical Java,复习一下.....
查看全文
herosoft
发表于:2005.12.16 11:06
::分类:
( )
::阅读:(563次)
::
评论
(0)
===========================================================
===========================================================
Never hide an exception
herosoft
发表于:2005.12.16 11:03
::分类:
( )
::阅读:(404次)
::
评论
(0)
===========================================================
===========================================================
保证只有一个实例在运行
在写程序的时候,我们有时候需要保证程序只有一个实例在运行,如何实现呢?
看看下面的代码:
// SingleInstance.java
import java.net.ServerSocket;
import java.net.Socket;
public class SingleInstance{
static Application app=null;
static int DEFAULT_PORT=19333; // 默认端口
public static void main(String[] args){
try{
// 试图打开一个socket,如果打开成功,即程序运行,则不进行任何动作并退出
Socket socket = new Socket("127.0.0.1", DEFAULT_PORT);
socket.close();
System.exit(0);
}catch(Exception e){
e.printStackTrace();
System.out.println("socket连接不成功");
}
new SIThread().start();
app=new Application();
System.out.println("程序执行");
}
}
class SIThread extends Thread{
public void run(){
ServerSocket serverSocket=null;
try{
serverSocket=new ServerSocket(SingleInstance.DEFAULT_PORT);
serverSocket.accept();
System.out.println("显示主程序");
serverSocket.close();
new SIThread().start();
} catch(Exception e){
System.err.println("Port:"+SingleInstance.DEFAULT_PORT);
e.printStackTrace();
System.out.println("无法在本地建立一个socket,请确定没有其他软件使用这个端口并检查安全设置");
}
}
}
// Application.java
public class Application{
public Application(){
System.out.println("程序Application构造函数被调用");
}
}
IntelliJ Idea 使用的就是此中方法。
查看全文
herosoft
发表于:2005.12.16 11:01
::分类:
( )
::阅读:(393次)
::
评论
(0)
===========================================================
===========================================================
推荐:Love 爱
下载地址:
http://www.wwenglish.com/media/yssw/wwenglish.com_9.mp3
原文:
I love you not because of who you are,but because of who I am when I am with you.
我爱你,不是因为你是一个怎样的人,而是因为我喜欢与你在一起时的感觉。
No man or woman is worth your tears,and the one who is ,won't make you cry.
没有人值得你流泪,值得让你这么做的人不会让你哭泣。
The worst way to miss someone is to be sitting right beside them knowing you can't have them.
失去某人,最糟糕的莫过于,他近在身旁,却犹如远在天边。
Never frown,even when you are sad,because you never know who is falling in love with your smile.
纵然伤心,也不要悉眉不展,因为你不知是谁会爱上你的笑容。
To the world you may be one person,but to one person you may be the world.
对于世界而言,你是一个人;但是对于某人,你是他的整个世界。
Don't waste your time on a man/woman,who isn't willing to waste their time on you.
不要为那些不愿在你身上花费时间的人而浪费你的时间。
Just because someone doesn't love you the way you want them to,doesn't mean they don't love you with all they have.
爱你的人如果没有按你所希望的方式爱你,那并不代表他们没有全心全意地爱你。
Don't try to hard,the best things come when you least expect them to.
不要着急,最好的总会在最不经意的时候出现。
Maybe God wants us to meet a few wrong people before meeting the right one,so that when we finally meet the person,we will know how to be grateful.
在遇到梦中人之前,上天也许会安排我们先遇到别人;在我们终于遇见心仪的人时,便应当心存感激。
Don't cry because it is over,smile because it happened.
不要因为结束而哭泣,微笑吧,为你的曾经拥有。
Life is a pure flame,and we live by an invisible sun within us.
-------Sir Thomas Browne
“生命是束纯净的火焰,我们依靠自己内心看不见的太阳而存在。”
--------托马斯。布朗爵士
查看全文
herosoft
发表于:2005.12.16 11:00
::分类:
(
悠悠岁月
)
::阅读:(852次)
::
评论
(0)
===========================================================
===========================================================
Converting Primitives to Wrapper Types
请看下列代码
Integer k1 = 2;
Integer k2 = 2;
System.out.println( k1==k2);
输出结果如何呢?
Integer j1 = 150;
Integer j2 = 150;
System.out.println( j1==j2);
这个呢?
如果你是使用JDK1.4的话,这两段代码你是通不过的,编译器会提示如下错误:
Test.java:3: incompatible types
found : int
required: java.lang.Integer
Integer i1=2;
^
Test.java:4: incompatible types
found : int
required: java.lang.Integer
Integer i2=2;
^
2 errors
查看全文
herosoft
发表于:2005.12.16 10:39
::分类:
( )
::阅读:(388次)
::
评论
(0)
===========================================================
===========================================================
前辈的经验
转贴于 CSDN .NET非技术区,帖子名为 昨天去华为面试~~吓呆了,里面一位朋友贴出来可能是比较早的一篇文章,很深刻,送给搞技术的朋友
由C#风潮想起的—给初学编程者的忠告
我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追赶。我
时常看 见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到
非常痛心。
查看全文
herosoft
发表于:2005.12.16 10:30
::分类:
(
程序人生
)
::阅读:(294次)
::
评论
(0)
===========================================================
===========================================================
5个海盗的问题
问题:
5个海盗抢到了100颗宝石,每一颗都一样的大小和价值连城。
他们决定这么分:
1、抽签决定自己的号码(1、2、3、4、5)
2、首先,由1号提出分配方案,然后大家5人进行表决,当且仅当半数和超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。
3、如果1号死后,再由2号提出分配方案,然后大家4人进行表决,当且仅当超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。
4、以次类推。。。。。。
条件:
每个海盗都是很聪明的人,都实力相当、都能很理智的判断得失,从而做出选择。
(提示:人在实力相当的时候才最讲理守规定)
问题:
第一个海盗提出怎样的分配方案才能够使自己的收益最大化?
查看全文
herosoft
发表于:2005.12.16 10:24
::分类:
(
Clever
)
::阅读:(377次)
::
评论
(0)
===========================================================
===========================================================
Google副总裁泄玄机:Google搜索技术揭秘
Google副总裁泄玄机:Google搜索技术揭秘
Google将其成功部分地归功于公司所发明的独有运算机制,令其搜索引擎可以在极短时间内对数以百万计的网络用户的搜索请求提供答案。
上周三,Google副总裁Urs Hoelzle在Eclipse会议上的一番发言,令与会者有机会了解Google的搜索技术是如何产生以及该技术现在是如何运作的。
查看全文
herosoft
发表于:2005.12.16 10:20
::分类:
(
程序人生
)
::阅读:(1429次)
::
评论
(0)
===========================================================
===========================================================
ResultSet结果集浅析
herosoft
发表于:2005.05.12 13:52
::分类:
( )
::阅读:(995次)
::
评论
(0)
===========================================================
===========================================================
java中如何把含有单引号‘’的字段插入数据库表中
java中如何把含有单引号‘’的字段插入数据库表中 查看全文
herosoft
发表于:2005.05.12 09:01
::分类:
( )
::阅读:(1133次)
::
评论
(0)
===========================================================
===========================================================
JAVA中的指针,引用及对象的clone
JAVA中的指针,引用及对象的clone 查看全文
herosoft
发表于:2005.05.11 13:52
::分类:
( )
::阅读:(576次)
::
评论
(0)
===========================================================
===========================================================
关于B*tree索引(index)的中度理解
herosoft
发表于:2005.05.11 13:19
::分类:
(
数据库技术
)
::阅读:(429次)
::
评论
(0)
===========================================================
===========================================================
转载:Java源码分析:深入探讨Iterator模式
herosoft
发表于:2005.05.11 13:10
::分类:
( )
::阅读:(461次)
::
评论
(0)