2017年12月26日星期二

苟家滩

先朝军师从此过,留下碑记作定夺。四百年前奠定我,苟家滩里命难活。彦章打马上北坡,新坟累累旧坟多。新坟埋的汉光武,旧坟又埋汉萧何。青龙背上埋韩信,五丈原上埋诸葛。人生一世莫空过,纵然一死怕什么?

2015年1月27日星期二

无题

初识破瓜余,再见三两环
来日尽相思,年年年年年
萧郎愁少情,白首恨无缘
人生何如意,难难难难难

2014年10月8日星期三

编程随想的博客: CNNIC证书的危害及各种清除方法

编程随想的博客: CNNIC证书的危害及各种清除方法: 前几天已经写了2个帖子(分别是 扫盲数字证书的基本知识 , CNNIC干过的那些破事 )作铺垫,终于开始来说正题——关于CNNIC的CA证书。 ★CNNIC到底干了啥事?   从 前面的帖子 ,大伙应该都看出来,CNNIC这个老流氓可是坏事做尽啊。最近这段时间,CNNI...



---------------------

NO ZUO NO DIE

2013年7月18日星期四

ORACLE 开始时间 & 结束时间

From Evernote:

ORACLE 开始时间 & 结束时间

Clipped from: http://blog.csdn.net/long_ge_cool/article/details/8601157
SELECT to_date(to_char(sysdate+1,'yyyy-mm-dd'),'yyyy-mm-dd') from dual 今天结束时间

SELECT to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd') from dual 今天开始时间


获取上一个小时的开始时间和结束时间 
select to_date(to_char(sysdate,'yyyy-mm-dd')||(to_char(sysdate,'hh24')-1),'yyyy-mm-dd hh24') from dual; 
select to_date(to_char(sysdate,'yyyy-mm-dd')||(to_char(sysdate,'hh24')),'yyyy-mm-dd hh24') from dual;

-- 获取上月的开始时间和结束时间 
select to_char(to_date(to_char(add_months(sysdate,-1),'yyyy-mm'),'yyyy-mm'),'yyyy-mm-dd hh24:mi:ss') from dual; 
select to_char(to_date(to_char(sysdate,'yyyy-mm'),'yyyy-mm'),'yyyy-mm-dd hh24:mi:ss') from dual; 

--本周 

select trunc(sysdate,'d')+1 from dual; 

select trunc(sysdate,'d')+7 from dual; 

--本月 

select trunc(sysdate,'mm') from dual; 

select last_day(trunc(sysdate)) from dual; 

--本季 

select trunc(sysdate,'Q') from dual; 

select add_months(trunc(sysdate,'Q'),3)-1 from dual; 

--本年 

select trunc(sysdate,'yyyy') from dual; 

select add_months(trunc(sysdate,'yyyy'),12)-1 from dual; 

2013年6月25日星期二

eclipse扩展点介绍

From Evernote:

eclipse扩展点介绍

Clipped from: http://chenqisdfx.iteye.com/blog/1154338

Platform runtime
org.eclipse.core.contenttype.contentTypes 
org.eclipse.core.runtime.adapters 
org.eclipse.core.runtime.applications 
org.eclipse.core.runtime.contentTypes 
org.eclipse.core.runtime.preferences 
org.eclipse.core.runtime.products 
org.eclipse.equinox.preferences.preferences


Workspace
org.eclipse.core.resources.builders 
org.eclipse.core.resources.fileModificationValidator 
org.eclipse.core.resources.markers 
org.eclipse.core.resources.moveDeleteHook 
org.eclipse.core.resources.natures 
org.eclipse.core.resources.refreshProviders 
org.eclipse.core.resources.teamHook 
org.eclipse.core.filesystem.filesystems


Platform text
org.eclipse.core.filebuffers.annotationModelCreation 
org.eclipse.core.filebuffers.documentCreation 
org.eclipse.core.filebuffers.documentSetup 
org.eclipse.ui.editors.annotationTypes 
org.eclipse.ui.editors.documentProviders 
org.eclipse.ui.editors.markerAnnotationSpecification 
org.eclipse.ui.editors.markerUpdaters 
org.eclipse.ui.editors.templates 
org.eclipse.ui.workbench.texteditor.quickDiffReferenceProvider 
org.eclipse.ui.workbench.texteditor.spellingEngine


Workbench
org.eclipse.ui.acceleratorConfigurations 
org.eclipse.ui.acceleratorScopes 
org.eclipse.ui.acceleratorSets 
org.eclipse.ui.actionDefinitions 
org.eclipse.ui.actionSetPartAssociations 
org.eclipse.ui.actionSets 
org.eclipse.ui.activities 
org.eclipse.ui.activitySupport 
org.eclipse.ui.bindings 
org.eclipse.ui.browser.browsers 
org.eclipse.ui.browserSupport 
org.eclipse.ui.commands 
org.eclipse.ui.commandImages 
org.eclipse.ui.contexts 
org.eclipse.ui.decorators 
org.eclipse.ui.dropActions 
org.eclipse.ui.editorActions 
org.eclipse.ui.editors 
org.eclipse.ui.elementFactories 
org.eclipse.ui.encodings 
org.eclipse.ui.exportWizards 
org.eclipse.ui.fontDefinitions 
org.eclipse.ui.handlers 
org.eclipse.ui.helpSupport 
org.eclipse.ui.ide.filesystemSupport 
org.eclipse.ui.ide.markerHelp 
org.eclipse.ui.ide.markerImageProviders 
org.eclipse.ui.ide.markerResolution 
org.eclipse.ui.ide.markerSupport 
org.eclipse.ui.navigator.linkHelper 
org.eclipse.ui.navigator.navigatorContent 
org.eclipse.ui.navigator.viewer 
org.eclipse.ui.ide.projectNatureImages 
org.eclipse.ui.ide.resourceFilters 
org.eclipse.ui.importWizards 
org.eclipse.ui.intro 
org.eclipse.ui.keywords 
org.eclipse.ui.menus 
org.eclipse.ui.newWizards 
org.eclipse.ui.perspectiveExtensions 
org.eclipse.ui.perspectives 
org.eclipse.ui.popupMenus 
org.eclipse.ui.preferencePages 
org.eclipse.ui.preferenceTransfer 
org.eclipse.ui.presentationFactories 
org.eclipse.ui.propertyPages 
org.eclipse.ui.startup 
org.eclipse.ui.systemSummarySections 
org.eclipse.ui.themes 
org.eclipse.ui.viewActions 
org.eclipse.ui.views 
org.eclipse.ui.views.properties.tabbed.propertyContributor.html 
org.eclipse.ui.views.properties.tabbed.propertySections.html 
org.eclipse.ui.views.properties.tabbed.propertyTabs.html 
org.eclipse.ui.workingSets

Team
org.eclipse.team.core.fileTypes 
org.eclipse.team.core.ignore 
org.eclipse.team.core.projectSets 
org.eclipse.team.core.repository 
org.eclipse.team.ui.configurationWizards 
org.eclipse.team.ui.synchronizeParticipants 
org.eclipse.team.ui.synchronizeWizards


Debug
org.eclipse.debug.core.breakpoints 
org.eclipse.debug.core.launchConfigurationComparators 
org.eclipse.debug.core.launchConfigurationTypes 
org.eclipse.debug.core.launchDelegates 
org.eclipse.debug.core.launchers 
org.eclipse.debug.core.launchModes 
org.eclipse.debug.core.logicalStructureTypes 
org.eclipse.debug.core.processFactories 
org.eclipse.debug.core.sourceContainerTypes 
org.eclipse.debug.core.sourceLocators 
org.eclipse.debug.core.sourcePathComputers 
org.eclipse.debug.core.statusHandlers 
org.eclipse.debug.core.watchExpressionDelegates 
org.eclipse.debug.ui.breakpointOrganizers 
org.eclipse.debug.ui.consoleColorProviders 
org.eclipse.debug.ui.consoleLineTrackers 
org.eclipse.debug.ui.contextViewBindings 
org.eclipse.debug.ui.debugModelContextBindings 
org.eclipse.debug.ui.debugModelPresentations 
org.eclipse.debug.ui.launchConfigurationTabGroups 
org.eclipse.debug.ui.launchConfigurationTypeImages 
org.eclipse.debug.ui.launchGroups 
org.eclipse.debug.ui.launchShortcuts 
org.eclipse.debug.ui.memoryRenderings 
org.eclipse.debug.ui.sourceContainerPresentations 
org.eclipse.debug.ui.stringVariablePresentations 
org.eclipse.debug.ui.variableValueEditors


Console
org.eclipse.ui.console.consoleFactories 
org.eclipse.ui.console.consolePageParticipants 
org.eclipse.ui.console.consolePatternMatchListeners


User Assistance
org.eclipse.help.contentExtension 
org.eclipse.help.contentProducer 
org.eclipse.help.contexts 
org.eclipse.help.index 
org.eclipse.help.toc 
org.eclipse.help.base.activitySupport 
org.eclipse.help.base.browser 
org.eclipse.help.base.luceneAnalyzer 
org.eclipse.help.base.luceneSearchParticipants 
org.eclipse.help.ui.searchEngine 
org.eclipse.ui.cheatsheets.cheatSheetContent 
org.eclipse.ui.cheatsheets.cheatSheetItemExtension 
org.eclipse.ui.intro.config 
org.eclipse.ui.intro.configExtension


Language Toolkit
org.eclipse.ltk.core.refactoring.refactoringContributions 
org.eclipse.ltk.core.refactoring.copyParticipants 
org.eclipse.ltk.core.refactoring.createParticipants 
org.eclipse.ltk.core.refactoring.deleteParticipants 
org.eclipse.ltk.core.refactoring.moveParticipants 
org.eclipse.ltk.core.refactoring.renameParticipants 
org.eclipse.ltk.ui.refactoring.changePreviewViewers 
org.eclipse.ltk.ui.refactoring.statusContextViewers


Other
org.eclipse.ant.core.antProperties 
org.eclipse.ant.core.antTasks 
org.eclipse.ant.core.antTypes 
org.eclipse.ant.core.extraClasspathEntries 
org.eclipse.compare.contentMergeViewers 
org.eclipse.compare.contentViewers 
org.eclipse.compare.streamMergers 
org.eclipse.compare.structureCreators 
org.eclipse.compare.structureMergeViewers 
org.eclipse.core.expressions.propertyTesters 
org.eclipse.core.variables.dynamicVariables 
org.eclipse.core.variables.valueVariables 
org.eclipse.search.searchPages 
org.eclipse.search.searchResultSorters 
org.eclipse.search.searchResultViewPages 
org.eclipse.search.textSearchEngine 
org.eclipse.search.textSearchQueryProvider 
org.eclipse.ui.externaltools.configurationDuplicationMaps 
org.eclipse.update.core.featureTypes 
org.eclipse.update.core.installHandlers 
org.eclipse.update.core.siteTypes

Eclipse平台SDK支持的扩展点

扩展点描述起始版本备注
org.eclipse.ant.core.antTasks将Ant的任务与你的插件中的类关联起来,以扩展Ant在Eclipse中运行时的能力。 3
org.eclipse.ant.core.antTypes将Ant的数据类型与你插件中的类关联起来。 3
org.eclipse.ant.core.extraClasspathEntries提供额外的类型库(JAR 文件)给Ant使用。 3
org.eclipse.compare.contentMergeViewers为一种或多种文件类型提供一个比较/合并查看器生成器。 2
org.eclipse.compare.contentViewers为一种或多种文件类型提供一个查看器生成器。 2
org.eclipse.compare.structureCreators提供一个类来为一种或多种文件类型创建树型结构。 2
org.eclipse.compare.structureMergeViewers为一种或多种结构化文件类型提供一个查看器生成器。 2
org.eclipse.core.resources.builders注册一个使用符号ID和可读名字的增量构建器。 1
org.eclipse.core.resources.fileModificationValidator为团队Provider提供一个用于处理保存验证和编辑验证操作的类。2.03
org.eclipse.core.resources.markers以可选的父类和属性来注册一个自定义标记,包含了一些已定义的父类。 1
org.eclipse.core.resources.moveDeleteHook提供一个用于资源移动和删除操作的类。只允许一个hook。2.03
org.eclipse.core.resources.natures安装一个能够在用户项目中使用的自定义nature。 1
org.eclipse.core.resources.teamHook为团队Provider注册一个用于处理和链接创建校验类似的特定事件的类。2.13
org.eclipse.core.runtime.applications定义一个可以在Eclipse命令行中用-application选项调用的顶层程序。 1
org.eclipse.core.runtime.urlHandlers在平台的搜索路径中增加URL处理器。 3
org.eclipse.debug.core.breakpoints定义自定义断点。 2
org.eclipse.debug.core.launchConfigurationComparators声明专用Java比较器以比较属性。 2
org.eclipse.debug.core.launchConfigurationTypes指定用于运行和调试各种程序的类。 2
org.eclipse.debug.core.launchers2.0版作废:改用launchConfigurationTypes扩展点。
org.eclipse.debug.core.sourceLocators指定类来帮助调试器定位源代码。 2
org.eclipse.debug.core.statusHandlers为调试器状态码注册错误处理程序。 2
org.eclipse.debug.ui.consoleColorProviders提供代码来处理控制台输出的颜色。2.12
org.eclipse.debug.ui.consoleLineTrackers提供代码来监听写入控制台的行。2.12
org.eclipse.debug.ui.debugActionGroups对几个action进行分组以使其可以同时可视或不可视。 2
org.eclipse.debug.ui.debugModelPresentations定义类来为指定的调试模型渲染和显示标签、图标及编辑器。 2
org.eclipse.debug.ui.launchConfigurationTab-Groups提供用来定义运行配置类型(运行和调试都有)的一组标签页 2
org.eclipse.debug.ui.launchConfigurationType-Images把图片和特定的运行配置类型关联起来。 2
org.eclipse.debug.ui.launchGroups定义同时显示的一组运行配置。2.12
org.eclipse.debug.ui.launchShortcuts在一种或多种透视图中增加运行和(或)调试菜单的快捷方式。 2
org.eclipse.help.appserver.server内部:为帮助和其他插件增加一个程序服务器。 1
org.eclipse.help.browser注册HTML浏览器。 2
org.eclipse.help.contexts为一个插件定义在线式(F1)帮助。 3
org.eclipse.help.luceneAnalyzer注册用来对帮助建立索引和搜索的自然语言文本分析器。 3
org.eclipse.help.support定义一个帮助系统以替换系统原配的版本。除特定程序外,不推荐使用。 3
org.eclipse.help.toc为此插件提供一个或多个帮助文档表。 3
org.eclipse.help.webapp内部:注册帮助系统的Web程序插件。2.13
org.eclipse.jdt.core.classpathContainerInitializer声明Laly方式加载的自定义Classpath容器。2.02
org.eclipse.jdt.core.classpathVariableInitializer声明Laly方式加载的自定义Classpath变量以便在Java构建路径中使用。2.03
org.eclipse.jdt.core.codeFormatter定义新的代码格式化程序。2.03
org.eclipse.jdt.debug.ui.vmInstallTypePage为自定义VM类型提供JRE运行配置页。 2
org.eclipse.jdt.junit.testRunListeners注册代码来以获得测试执行的通知。2.13
org.eclipse.jdt.launching.classpathProviders注册自定义源码和Classpath提供程序。2.12
org.eclipse.jdt.launching.runtimeClasspathEntryResolvers提供类以便按照给定的classpath和(或)容器来搜索类和源文件。 2
org.eclipse.jdt.launching.vmConnectors提供自定义方式来连接JVM以调试和运行。 2
org.eclipse.jdt.launching.vmInstallTypes提供Java虚拟机安装的新类型。 2
org.eclipse.jdt.ui.classpathContainerPage增加向导页来创建或编辑classpath容器入口。 4
org.eclipse.jdt.ui.javadocCompletionProcessor定义javadoc自动完成处理器(例如,给出xdocklet标记的建议)。 2
org.eclipse.jdt.ui.javaEditorTextHover定义在java编辑器中热操作的新类型。 2
org.eclipse.jdt.ui.javaElementFilters为显示java元素的视图增加可定制过滤器(如包浏览器)。 2
org.eclipse.pde.ui.newExtension实验性:定义向导以在PDE的插件清单编辑器中创建新扩展。 2
org.eclipse.pde.ui.projectGenerators实验性:定义向导以创建PDE插件项目的初始内容。 2
org.eclipse.pde.ui.templates实验性:定义用来为新插件生成代码的模板。 2
org.eclipse.search.searchPages为[查找]对话框增加标签页。 2
org.eclipse.search.searchResultSorters在查找视图中提供自定义排序选项。 2
org.eclipse.team.core.fileTypes声明文件基于其扩展名的类型只能为文本或二进制。 3
org.eclipse.team.core.ignore为版本控制忽略列表增加了模式。 3
org.eclipse.team.core.projectSets提供用于读写项目集的处理程序(团队共享项目的集合)。 2
org.eclipse.team.core.repository定义新的团队Provider。2.02
org.eclipse.team.ui.configurationWizards提供向导来负责关联项目和团队Provider。 2
org.eclipse.ui.acceleratorConfigurations2.1版作废:改用commands扩展。定义加速器配置以供用户在[首选项]页中选择。2.02
org.eclipse.ui.acceleratorScopes2.1版作废:改用commands扩展。定义限定加速器集活动范围的作用域。2.02
org.eclipse.ui.acceleratorSets2.1版作废:改用commands扩展。为工作区actions定义键盘快捷键的集合。2.04
org.eclipse.ui.actionDefinitions2.1版作废:改用commands扩展。定义actions。2.02
org.eclipse.ui.actionSetPartAssociations将action集与工作台部件关联,当工作台部件活动时令其可见。 4
org.eclipse.ui.actionSets定义action集(菜单或工具栏项目)在用户自定义视图中的显示。 2
org.eclipse.ui.capabilities2.1版未实现:注册新项目性能。
org.eclipse.ui.commands定义命令、命令目录以及默认快捷键。2.14
org.eclipse.ui.decorators增加根据视图状态来修改图标或项目标签的修饰程序。2.02
org.eclipse.ui.documentProviders为给定的扩展名或输入类型注册文档provider类。在打开编辑器时使用。 2
org.eclipse.ui.dropActions定义一个处理程序以使此插件的对象能够拖放到其他插件的视图中。 2
org.eclipse.ui.editorActions为其他插件注册的菜单和工具栏增加actions。 2
org.eclipse.ui.editors给工作台增加新的编辑器。 2
org.eclipse.ui.elementFactories定义元素生成器,以便在关闭Eclipse时重建存盘了的对象。 2
org.eclipse.ui.exportWizards创建显示在[导出]对话框中的向导。 2
org.eclipse.ui.fontDefinitions注册给工作台使用的新字体。2.12
org.eclipse.ui.importWizards创建显示在[导入]对话框中的向导。 2
org.eclipse.ui.markerHelp提供一种方法来获取标记的帮助信息。2.03
org.eclipse.ui.markerImageProviders为新的标记类型提供图像。2.12
org.eclipse.ui.markerResolution增加类来对以特定标记类型标记的问题给出快速修正建议。2.03
org.eclipse.ui.markerUpdaters定义标记的更新策略,以便在保存其资源时按照其位置和文字来更新其属性。1.02
org.eclipse.ui.newWizards为[新建]对话框增加向导,可以新建目录以放置程序。 2
org.eclipse.ui.perspectiveExtensions扩展其他插件定义的透视图。允许你添加菜单、工具栏项目、快捷键、视图等等。 4
org.eclipse.ui.perspectives定义新透视图。 2
org.eclipse.ui.popupMenus为其他插件定义的对象、视图或编辑器的弹出菜单增加项目。 2
org.eclipse.ui.preferencePages在[首选项]对话框中增加页面。 2
org.eclipse.ui.projectNatureImages定义依据项目性质来修饰其图像的小图标。 2
org.eclipse.ui.propertyPages为一种给定类型的工作空间对象增加属性页。 2
org.eclipse.ui.resourceFilters为显示资源的视图(如[导航]视图)增加预定义过滤器。 3
org.eclipse.ui.startup标记当Eclipse加载时要启动的插件。2.03
org.eclipse.ui.viewActions在一个视图的菜单或工具栏中增加项目。 2
org.eclipse.ui.views为工作台定义额外的视图。 2
org.eclipse.ui.workingSets定义工作集向导页。2.02
org.eclipse.update.core.featureTypes创建一种新的特性类型来切换包装和验证架构。 1
org.eclipse.update.core.installHandlers定义一个全局安装处理程序,可以被正在更新的特性引用。 1
org.eclipse.update.core.siteTypes定义一个定制的更新站点布局。 1
org.eclipse.update.ui.searchCategory内部:在[更新管理器]中增加新的搜索目录。 2

2013年6月9日星期日

无我的四相

From Evernote:

无我的四相

Clipped from: http://magazine.fjnet.com/hykw/fxwz/wz4/WZ4_30.htm

无我的四相

圣严法师

 

    在《金刚经》中有提及四种相,即是无我相、无人相、无众生相以及无寿者相,实际上这四相都是讨论同样的事物,就是"我"。这里所提到的我,就是指那些属于我或虽不属于我,而却期望得到和不要得到的东西。除了那些我们已经拥有而不希望失去,以及拥有却想除去的,还有那些我们没有却想得到或害怕得到的东西之外,没有什么是可以被称为"我"的。然而大多数的时间,我们并没有觉察到我们希望除去或得到一些什么东西,我们只意识到自我的存在。首先我们知道自己的身体以及它的需要,由于我们的身体需要某些物品,才感觉到"我"对这些物品的需要。身体使我们注意到我的存在。其次,心念的活动给我们存在的感觉。除了身体和心念以外,就没有"我"的感觉了。事实上,是我们的心使我们经验到我的存在,身体如果离开了心,便不知道那是我。那么,什么是心呢?那是不断或连续流动的念头。 
    人可以通过宗教的行持,达到某种程度的经验,他会了解到那个平常经验的"我",实际上只是一个虚幻的东西,主观或永恒的我原本是不存在的;它的存在只是因为身体的感觉、身体的需要,以及那不断流动的念头。这即是《金刚经》中所提到的"无我相"。 
    再说"无人相"。人的存在只是通过"我"的感觉反映到其他人及物的存在。基于自己的感觉,使我们经验到自己与他人的相对待。因此站在《金刚经》的立场:假如进入无我,自然也就无人了;如果我自己本身并不在那儿,同样的,他人也不存在了。这只是因为我们与他人及事物之间发生了种种的关系,我们才感觉到自己的存在。 
    我们知道目前这个世界上一共有五十亿的人口,但是,与我们每一个人自己相识的,是非常少的。我们所能深刻经验到确实存在的他人,仅是那些在利害得失之上与我们发生关系的人。其他数十亿生活在这个行星上的人口,我们几乎不知道他们的存在;不论他们是否存在,至少并没有真正影响到我们什么。所以,他人只存在于他们与我们之间的关系上。当我不存在时,其他的人也就不存在了。 
    第三种的"无众生相"。包括所有那些或许没有必要与我们有关系,却仍然和我们共同生活在地球上的一切众生。那些修行已到达很高境界,而且已经能够解除他们本身的问题和困境的人,自然会对所有的众生产生很大的悲愍心。他们从已经解脱自己的问题,而去负担起众生的问题,于是众生的问题就成了他们自己的问题。这仍是有我的层次。 
    若从《金刚经》的立场说,如果主观的"我"不存在,客观的"众生"自然也不存在。佛陀说度尽众生,而实际上并无众生可度;众生已经被度了,度众生者并没有感觉到他已度了众生。所以,无众生相也是无我相的异名。 
    第四种是"无寿者相"。这是从时间来看"我"的存在。它牵连到前面所提及的我相、人相和众生相。假如没有我相,则一个人寿命之长短将不重要了;但所有的众生都执著于寿命,他们希望活得长久,并避免夭折。因此他们寻求自己生命的安全感,他们期望现在和将来都有安全感,于是尝试用各种可能的方法来保护自己的生命;纵然已知生命有生必有死,却仍执著不放。然而那些已经无我相的人,不管他们明天死或一万年以后才死,对于他们都是没有差别的。当一个人已经体验到无我的境界,这些问题就已经解决了。 
    总而言之,有关无我相的"我",归之于个人的不存在;无人相的"人",则指那些与我们相对待或有关联的不存在;无众生相则不止牵涉到"我"及你的不存在,而是包括了宇宙所有众生的不存在;最后,第四种无寿者相说明时间的过程,从期望长寿而至不担心寿命之长短。以上四相的前三者是空间的无我,第四是时间的无我。

2013年6月1日星期六

下载verycd资源的方法。

From Evernote:

下载verycd资源的方法。

Clipped from: http://www.jb51.net/softjc/63826.html
下面介绍一个下载verycd资源的方法。 

例如,我要下载:http://www.verycd.com/topics/2913058/ 套图, 

会提示"未提供版权证明,无法下载" 

那么我们只需要在verycd后加上.gdajie 

http://www.verycd.gdajie.com/topics/2913058/ 

那么就可以下载了。 

2013年5月23日星期四

找回删除的文件

From Evernote:

找回删除的文件

Clipped from: http://weibo.com/mamashuowodezuichang?leftnav=1&wvr=5
【只需简单三步,找回误删并清除回收站的文档!】不小心删除了电脑重要文件,怎么办?别着急,只要你的电脑还没有运行磁盘整理,且系统完好,任何时候的文件都可以找回来~!好东西,果断分享!!


2013年5月10日星期五

java泛型通配符-协变与逆变

From Evernote:

java泛型通配符-协变与逆变

Clipped from: http://arron-li.iteye.com/blog/673783

周末研究了下java泛型,关于泛型通配符的协变与逆变问题,题目如下:

  •  题目要求:创建一个泛型类Generic1<T>,它只有一个方法,将接受一个T类型的参数。创建第二个泛型类Generic2<T>,它也只有一个方法,将返回类型T的参数。编写一个泛型方法,它具有一个调用第一个泛型类的方法的逆变参数。编写第二个泛型方法,它具有一个调用第二个泛型类的方法的协变参数。
  • 实例代码如下:

 

Java代码  
  1. package generics.exercises;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import typeinfo.pets.Dog;  
  7.   
  8. public class ContraVarianceAndCovariant {  
  9.     static class Generic1Sup<T> {  
  10.     }  
  11.   
  12.     static class Generic1<T> extends Generic1Sup<T> {  
  13.         void setT(T t) {  
  14.         }  
  15.     }  
  16.   
  17.     static class Generic1Sub<T> extends Generic1<T> {  
  18.     }  
  19.   
  20.     static class Generic2Sup<T> {  
  21.     }  
  22.   
  23.     static class Generic2<T> extends Generic2Sup<T> {  
  24.         T getT(T t) {  
  25.             return t;  
  26.         }  
  27.     }  
  28.   
  29.     static class Generic2Sub<T> extends Generic2<T> {  
  30.     }  
  31.   
  32.     static <T> void writeWithWildcard(List<? super T> list, T item) {  
  33.         list.add(item);  
  34.     }  
  35.   
  36.     static <T> T readCovariant(List<? extends T> list) {  
  37.         return list.get(0);  
  38.     }  
  39.   
  40.     static List<Generic1<Dog>> dogs = new ArrayList<Generic1<Dog>>();  
  41.     static List<Generic1Sup<Dog>> dogsSup = new ArrayList<Generic1Sup<Dog>>();  
  42.     static List<Generic1Sub<Dog>> dogsSub = new ArrayList<Generic1Sub<Dog>>();  
  43.   
  44.     static List<Generic2<Dog>> dogs2 = new ArrayList<Generic2<Dog>>();  
  45.     static List<Generic2Sup<Dog>> dogs2Sup = new ArrayList<Generic2Sup<Dog>>();  
  46.     static List<Generic2Sub<Dog>> dogs2Sub = new ArrayList<Generic2Sub<Dog>>();  
  47.   
  48.     static void f1() {  
  49.         writeWithWildcard(dogs, new Generic1<Dog>());  
  50.         writeWithWildcard(dogsSup, new Generic1<Dog>());  
  51.         // ! writeWithWildcard(dogsSub, new Generic1<Dog>());  
  52.         Generic1<Dog> generic1 = dogs.get(0);  
  53.         generic1.setT(new Dog("dog1"));  
  54.         System.out.println(generic1);  
  55.     }  
  56.   
  57.     static void f2() {  
  58.         Generic2<Dog> generic2 = readCovariant(dogs2);  
  59.         generic2 = (Generic2<Dog>) readCovariant(dogs2Sup);  
  60.         generic2 = readCovariant(dogs2Sub);  
  61.         generic2.getT(new Dog("dog2"));  
  62.         System.out.println(generic2);  
  63.     }  
  64.   
  65.     static class CovariantReader<T> {  
  66.         T readCovariant(List<? extends T> list) {  
  67.             return list.get(0);  
  68.         }  
  69.     }  
  70.   
  71.     static void f3() {  
  72.         CovariantReader<Generic2<Dog>> fruitReader = new CovariantReader<Generic2<Dog>>();  
  73.         Generic2<Dog> generic2 = fruitReader.readCovariant(dogs2);  
  74.         // ! generic2 = fruitReader.readCovariant(dogs2Sup);  
  75.         generic2 = fruitReader.readCovariant(dogs2Sub);  
  76.         generic2.getT(new Dog("dog2"));  
  77.     }  
  78. }  

 感兴趣的读者可以研究下,为题目提供更好的解决方案。

2013年5月7日星期二

java并发编程中CountDownLatch和CyclicBarrier的使用 - [java]

From Evernote:

java并发编程中CountDownLatch和CyclicBarrier的使用 - [java]

Clipped from: http://blackgu.blogbus.com/logs/69596661.html

java并发编程中CountDownLatch和CyclicBarrier的使用 - [java]

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://blackgu.blogbus.com/logs/69596661.html

在多线程程序设计中,经常会遇到一个线程等待一个或多个线程的场景,遇到这样的场景应该如何解决?

如果是一个线程等待一个线程,则可以通过await()和notify()来实现;

如果是一个线程等待多个线程,则就可以使用CountDownLatch和CyclicBarrier来实现比较好的控制。

下面来详细描述下CountDownLatch的应用场景:

例如:百米赛跑:8名运动员同时起跑,由于速度的快慢,肯定有会出现先到终点和晚到终点的情况,而终点有个统计成绩的仪器,当所有选手到达终点时,它会统计所有人的成绩并进行排序,然后把结果发送到汇报成绩的系统。

其实这就是一个CountDownLatch的应用场景:一个线程或多个线程等待其他线程运行达到某一目标后进行自己的下一步工作,而被等待的"其他线程"达到这个目标后继续自己下面的任务。

这个场景中:

1. 被等待的"其他线程"------>8名运动员

2. 等待"其他线程"的这个线程------>终点统计成绩的仪器

那么,如何来通过CountDownLatch来实现上述场景的线程控制和调度呢?

jdk中CountDownLatch类有一个常用的构造方法:CountDownLatch(int count);

                       两个常用的方法:await()和countdown() 

其中count是一个计数器中的初始化数字,比如初始化的数字是2,当一个线程里调用了countdown(),则这个计数器就减一,当线程调用了await(),则这个线程就等待这个计数器变为0,当这个计数器变为0时,这个线程继续自己下面的工作。下面是上述CountDownLatch场景的实现:

Work类(运动员):

import java.util.concurrent.CountDownLatch;

public class Work implements Runnable {
 private int id;
 private CountDownLatch beginSignal;
 private CountDownLatch endSignal;
 
 public Work(int id, CountDownLatch begin, CountDownLatch end) {
  this.id = id;
  this.beginSignal = begin;
  this.endSignal = end;
 }

 @Override
 public void run() {
  try {
   beginSignal.await();
   System.out.println("起跑...");
   System.out.println("work" + id + "到达终点");
   endSignal.countDown();
   System.out.println("work" + id + "继续干其他事情");
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

Main类(终点统计仪器):

import java.util.concurrent.CountDownLatch;

public class Main {
 
 public static void main(String[] args) {
  CountDownLatch begSignal = new CountDownLatch(1);
  CountDownLatch endSignal = new CountDownLatch(8);
  
  for (int i = 0; i < 8; i++) {
   new Thread(new Work(i, begSignal, endSignal)).start();
  }
  
  try {
   begSignal.countDown();  //统一起跑
   endSignal.await();      //等待运动员到达终点
   System.out.println("结果发送到汇报成绩的系统");
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
 }
}

下面详细描述下CyclicBarrier的应用场景:

有四个游戏玩家玩游戏,游戏有三个关卡,每个关卡必须要所有玩家都到达后才能允许通关。

其实这个场景里的玩家中如果有玩家A先到了关卡1,他必须等待其他所有玩家都到达关卡1时才能通过,也就是说线程之间需要互相等待,这和CountDownLatch的应用场景有区别,CountDownLatch里的线程是到了运行的目标后继续干自己的其他事情,而这里的线程需要等待其他线程后才能继续完成下面的工作。

jdk中CyclicBarrier类有两个常用的构造方法:

1. CyclicBarrier(int parties)

这里的parties也是一个计数器,例如,初始化时parties里的计数是3,于是拥有该CyclicBarrier对象的线程当parties的计数为3时就唤醒,注:这里parties里的计数在运行时当调用CyclicBarrier:await()时,计数就加1,一直加到初始的值

2. CyclicBarrier(int parties, Runnable barrierAction)

这里的parties与上一个构造方法的解释是一样的,这里需要解释的是第二个入参(Runnable barrierAction),这个参数是一个实现Runnable接口的类的对象,也就是说当parties加到初始值时就出发barrierAction的内容。

下面来实现上述的应用场景:

 Player类(玩家类)

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

public class Player implements Runnable {
 
 private CyclicBarrier cyclicBarrier;
 private int id;
 
 public Player(int id, CyclicBarrier cyclicBarrier) {
  this.cyclicBarrier = cyclicBarrier;
  this.id = id;
 }

 @Override
 public void run() {
  try {
   System.out.println("玩家" + id + "正在玩第一关...");
   cyclicBarrier.await();
   System.out.println("玩家" + id + "进入第二关...");
  } catch (InterruptedException e) {
   e.printStackTrace();
  } catch (BrokenBarrierException e) {
   e.printStackTrace();
  }
 }
}

GameBarrier类(关卡类,这里控制玩家必须全部到达第一关结束的关口才能进入第二关)

import java.util.concurrent.CyclicBarrier;

public class GameBarrier {
 
 public static void main(String[] args) {
  CyclicBarrier cyclicBarrier = new CyclicBarrier(4, new Runnable() {
   
   @Override
   public void run() {
    System.out.println("所有玩家进入第二关!");
   }
  });
  
  for (int i = 0; i < 4; i++) {
   new Thread(new Player(i, cyclicBarrier)).start();
  }
 }
}

Java CountDownLatch应用

From Evernote:

Java CountDownLatch应用

Clipped from: http://zapldy.iteye.com/blog/746458

      Java的concurrent包里面的CountDownLatch其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是同时只能有一个线程去减这个计数器里面的值。

      你可以向CountDownLatch对象设置一个初始的数字作为计数值,任何调用这个对象上的await()方法都会阻塞,直到这个计数器的计数值被其他的线程减为0为止。

      CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。假如我们这个想要继续往下执行的任务调用一个CountDownLatch对象的await()方法,其他的任务执行完自己的任务后调用同一个CountDownLatch对象上的countDown()方法,这个调用await()方法的任务将一直阻塞等待,直到这个CountDownLatch对象的计数值减到0为止。

      举个例子,有三个工人在为老板干活,这个老板有一个习惯,就是当三个工人把一天的活都干完了的时候,他就来检查所有工人所干的活。记住这个条件:三个工人先全部干完活,老板才检查。所以在这里用Java代码设计两个类,Worker代表工人,Boss代表老板,具体的代码实现如下:

Java代码  
  1. package org.zapldy.concurrent;  
  2.   
  3. import java.util.Random;  
  4. import java.util.concurrent.CountDownLatch;  
  5. import java.util.concurrent.TimeUnit;  
  6.   
  7. public class Worker implements Runnable{  
  8.       
  9.     private CountDownLatch downLatch;  
  10.     private String name;  
  11.       
  12.     public Worker(CountDownLatch downLatch, String name){  
  13.         this.downLatch = downLatch;  
  14.         this.name = name;  
  15.     }  
  16.       
  17.     public void run() {  
  18.         this.doWork();  
  19.         try{  
  20.             TimeUnit.SECONDS.sleep(new Random().nextInt(10));  
  21.         }catch(InterruptedException ie){  
  22.         }  
  23.         System.out.println(this.name + "活干完了!");  
  24.         this.downLatch.countDown();  
  25.           
  26.     }  
  27.       
  28.     private void doWork(){  
  29.         System.out.println(this.name + "正在干活!");  
  30.     }  
  31.       
  32. }  

 

Java代码  
  1. package org.zapldy.concurrent;  
  2.   
  3. import java.util.concurrent.CountDownLatch;  
  4.   
  5. public class Boss implements Runnable {  
  6.   
  7.     private CountDownLatch downLatch;  
  8.       
  9.     public Boss(CountDownLatch downLatch){  
  10.         this.downLatch = downLatch;  
  11.     }  
  12.       
  13.     public void run() {  
  14.         System.out.println("老板正在等所有的工人干完活......");  
  15.         try {  
  16.             this.downLatch.await();  
  17.         } catch (InterruptedException e) {  
  18.         }  
  19.         System.out.println("工人活都干完了,老板开始检查了!");  
  20.     }  
  21.   
  22. }  

 

Java代码  
  1. package org.zapldy.concurrent;  
  2.   
  3. import java.util.concurrent.CountDownLatch;  
  4. import java.util.concurrent.ExecutorService;  
  5. import java.util.concurrent.Executors;  
  6.   
  7. public class CountDownLatchDemo {  
  8.   
  9.     public static void main(String[] args) {  
  10.         ExecutorService executor = Executors.newCachedThreadPool();  
  11.           
  12.         CountDownLatch latch = new CountDownLatch(3);  
  13.           
  14.         Worker w1 = new Worker(latch,"张三");  
  15.         Worker w2 = new Worker(latch,"李四");  
  16.         Worker w3 = new Worker(latch,"王二");  
  17.           
  18.         Boss boss = new Boss(latch);  
  19.           
  20.         executor.execute(w3);  
  21.         executor.execute(w2);  
  22.         executor.execute(w1);  
  23.         executor.execute(boss);  
  24.           
  25.         executor.shutdown();  
  26.     }  
  27.   
  28. }  

       当你运行CountDownLatchDemo这个对象的时候,你会发现是等所有的工人都干完了活,老板才来检查,下面是我本地机器上运行的一次结果,可以肯定的每次运行的结果可能与下面不一样,但老板检查永远是在后面的。

Java代码  
  1. 王二正在干活!  
  2. 李四正在干活!  
  3. 老板正在等所有的工人干完活......  
  4. 张三正在干活!  
  5. 张三活干完了!  
  6. 王二活干完了!  
  7. 李四活干完了!  
  8. 工人活都干完了,老板开始检查了!  

 

    好了,就写到这里,睡觉去了!