PreparedStatement

PreparedStatement jdbc(java database connectivity,java数据库连接)的api中的主要的四个类之一的java.sql.statement要求开发者付出大量的时间和精力。在使用statement获取jdbc访问时所具有的一个共通的问题是输入适当格式的日期和时间戳: 2002-02-05 20:56 或者 02/05/02 8:56 pm。 通过使用java.sql.preparedstatement,这个问题可以自动解决。一个preparedstatement是从java.sql.connection对象和所提供的sql字符串得到的,sql字符串中包含问号 (?) ,这些问号标明变量的位置,然后提供变量的值,最后执行语句,例如: stringsql = “select * from people p where p.id = ? and p.name = ?”; preparedstatement ps = connection.preparestatement(sql); ps.setint(1,id); ps.setstring(2,name); resultset rs = ps.executequery(); 使用preparedstatement的另一个优点是字符串不是动态创建的。下面是一个动态创建字符串的例子: stringsql = “select * from people p where p.i = “+id; 这允许jvm (javavirtual machine,java虚拟机) 和驱动/数据库缓存语句和字符串并提高性能。 preparedstatement也提供数据库无关性。当显示声明的sql越少,那么潜在的sql语句的数据库依赖性就越小。 由于preparedstatement具备很多优点,开发者可能通常都使用它,只有在完全是因为性能原因或者是在一行sql语句中没有变量的时候才使用通常的statement。

2013-01-16 · 1 min · 56 words · -

BLOB

BLOB BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。 BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理 (例如: 上传、下载或者存放到一个数据库) 。 根据Eric Raymond的说法,处理BLOB的主要思想就是让文件处理器 (如数据库管理器) 不去理会文件是什么,而是关心如何去处理它。 但也有专家强调,这种处理大数据对象的方法是把双刃剑,它有可能引发一些问题,如存储的二进制文件过大,会使数据库的性能下降。在数据库中存放体积较大的多媒体对象就是应用程序处理BLOB的典型例子。 大型对象 BLOB就是使用二进制保存数据。 如: 保存位图。 CLOB使用CHAR来保存数据。 如: 保存XML文档。 Oracle中的BLOB和CLOB LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列 LONG RAW: 可变长二进制数据,最长2G CLOB: 字符大对象Clob 用来存储单字节的字符数据 NCLOB: 用来存储多字节的字符数据 BLOB: 用于存储二进制数据 BFILE: 存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文件不包含在数据库内。 bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对oracle来说是只读的,也不参与事务性控制和数据恢复. CLOB,NCLOB,BLOB都是内部的LOB(Large Object)类型,最长4G,没有LONG只能有一列的限制 要保存图片、文本文件、Word文件各自最好用哪种数据类型? -BLOB最好,LONGRAW也不错,但Long是oracle将要废弃的类型,因此建议用BLOB。 Blob是指二进制大对象也就是英文Binary Large Object的所写,而Clob是指大字符对象也就是英文Character Large Object的所写。由此可见这辆个类型都是用来存储大量数据而设计的,其中BLOB是用来存储大量二进制数据的;CLOB用来存储大量文本数据。 那么有人肯定要问既然已经有VARCHAR和VARBINARY两中类型,为什么还要再使用另外的两种类型呢?其实问题很简单,VARCHAR和VARBINARY两种类型是有自己的局限性的。首先说这两种类型的长度还是有限的不可以超过一定的限额,以VARCHAR再ORA中为例长度不可以超过4000;那么有人又要问了,LONGVARCHAR类型作为数据库中的一种存储字符的类型可以满足要求,存储很长的字符,那为什么非要出现CLOB类型呢?其实如果你用过LONGVARCHAR类型就不难发现,该类型的一个重要缺陷就是不可以使用LIKE这样的条件检索。 (稍候将介绍在CLOB中如何实现类似LIKE的模糊查找) 另外除了上述的问题外,还又一个问题,就是在数据库中VARCHAR和VARBINARY的存取是将全部内容从全部读取或写入,对于100K或者说更大数据来说这样的读写方式,远不如用流进行读写来得更现实一些。 在JDBC中有两个接口对应数据库中的BLOB和CLOB类型,java.sql.Blob和java.sql.Clob。和你平常使用数据库一样你可以直接通过ResultSet.getBlob()方法来获取该接口的对象。与平时的查找唯一不同的是得到Blob或Clob的对象后,我们并没有得到任何数据,但是我们可以这两个接口中的方法得到数据 例如: Blob b=resultSet.getBlob(1); InputStream bin=b.getBinaryStryeam(); Clob c=resultSet.getClob(2); Reader cReader=c.getCharacterStream(): 关于Clob类型的读取可以使用更直接的方法,就是直接通过ResultSet.getCharacterStream();方法获得字符流,但该方法并不安全,所以建议还是使用上面例子的方法获取Reader。 另外还有一种获取方法,不使用数据流,而是使用数据块。 例如 Blob b=resultSet.getBlob(1); byte data=b.getByte(0,b.length()); Clob c=resultSet.getClob(2); String str=c.getSubString(0,c.length()): 在这里我要说明一下,这个方法其实并不安全,如果你很细心的话,那很容易就能发现getByte()和getSubString()两个方法中的第二个参数都是int类型的,而BLOB和CLOB是用来存储大量数据的。而且Bolb.length()和Clob.length()的返回值都是long类型的,所以很不安全。这里不建议使用。但为什么要在这里提到这个方法呢?稍候告诉你答案,这里你需要记住使用数据块是一种方法。 ...

2013-01-15 · 1 min · 202 words · -

input file 文件上传控件隐藏后用button触发 click事件

input file 文件上传控件隐藏后用button触发 click事件 http://bbs.csdn.net/topics/320156312 <HTML> <BODY> <input type="button" value="添加附件" onmouseover="floatFile()"> <input type="button" onclick="alert($('tt').innerHTML)" value="showHTML"> </BODY> </HTML> <SCRIPT LANGUAGE="JavaScript"> function $(id) { return document.getElementById(id); } //全局变量,记录文件数; var fileNum=1; //mouseover时,把input file移到按扭上,保证点击的是file, function floatFile() { $("file"+fileNum).style.posTop=event.srcElement.offsetTop; $("file"+fileNum).style.posLeft=event.x-$("file"+fileNum).offsetWidth/2; } //选择完一个文件之后,自动创建一个新的div 和 file表单,用于下回使用,hidden刚用过的file function showText(obj) { $(obj.id+"text").innerHTML=obj.value+" 删除"; $("file"+fileNum).style.display='none'; fileNum=fileNum+1; //直接追加innerHTML(innerHTML+=)会清空原来file中的内容 $("div"+(fileNum-1)).insertAdjacentHTML('AfterEnd',''); } function del(id) { $("div"+id).innerHTML=""; $("div"+id).style.display="none"; } </SCRIPT> IE 使用 ‘filter:alpha(opacity=50);’ 通过 Filter 的 alpha 通道滤镜使元素半透明,但元素必须触发 hasLayout 特性。 ...

2013-01-14 · 1 min · 80 words · -

javascript 判断浏览器类型

javascript 判断浏览器类型 var Sys = {}; var ua = navigator.userAgent.toLowerCase(); if (window.ActiveXObject) Sys.ie = ua.match(/msie ([d.]+)/)[1] else if (document.getBoxObjectFor) Sys.firefox = ua.match(/firefox/([d.]+)/)[1] else if (window.MessageEvent && !document.getBoxObjectFor) Sys.chrome = ua.match(/chrome/([d.]+)/)[1] else if (window.opera) Sys.opera = ua.match(/opera.([d.]+)/)[1] else if (window.openDatabase) Sys.safari = ua.match(/version/([d.]+)/)[1]; //以下进行测试 if (Sys.ie) document.write('IE: ' + Sys.ie); if (Sys.firefox) document.write('Firefox: ' + Sys.firefox); if (Sys.chrome) document.write('Chrome: ' + Sys.chrome); if (Sys.opera) document.write('Opera: ' + Sys.opera); if (Sys.safari) document.write('Safari: ' + Sys.safari);

2013-01-14 · 1 min · 73 words · -

obsidian

obsidian # archlinux pacman -S obsidian https://forum-zh.obsidian.md/ flatpak install flathub md.obsidian.Obsidian flatpak run md.obsidian.Obsidian https://decoge.medium.com/how-to-install-obsidian-on-a-chromebook-53e379217adf install plugin: remotely save Obsidian> settings> community plugins> turn on community plugins> browse search remotely save and install and enable config s3 storage: setting> community plugins> remotely save Choose A Remote Service: S3 or compatible endpoint: s3.ap-southeast-1.amazonaws.com region: ap-southeast-1 ak: sk: bucket name: obsidian-w10n 调整页边距 解决编辑区域过窄的问题 ...

2013-01-12 · 1 min · 68 words · -

linux 摄像头

linux 摄像头 http://www.linuxeden.com/html/news/20101108/105418.html Webcam是一种视频捕捉设备,能通过USB端口直接连接计算机或计算机网络。新的上网本和笔记本多有内置的网络摄像头。Webcam可用于实时视频聊天和网络广播,丰富在线交流。这个小小的摄像机让用户能与朋友和家人实时聊天,发送视频电子邮件,与同事和客户举行视频会议,甚至是在互联网上建立一个类似电视的广播频道。还有人会把网络摄像头作为安全系统的一部分,安装在住宅或建筑物内,使用运动检测接收图像和发送视频入侵警报。Linuxlinks的这篇文章编辑了五款优秀的Linux摄像头工具的清单,既能让摄像头捕捉图像和视频,也能把它变成视频监控设备。这些工具包括: GNOME桌面摄像头工具Cheese,一体化安全监控解决方案ZoneMinder,支持动作检测的视频捕捉工具Motion,GNOME桌面下的开源VoIP和视频会议应用程序Ekiga等。 Webcam Tools Cheese Take pictures and videos from your webcam ZoneMinder All-in-one security camera solution Motion V4L capture program supporting motion detection Ekiga VoIP and video conferencing application HasciiCam ASCII cam streaming

2013-01-12 · 1 min · 37 words · -

debian 安装svn客户端

debian 安装svn客户端 apt-get install subversion cd /usr/local/src/ svn checkout http://droidwall.googlecode.com/svn/trunk/ droidwall-read-only

2013-01-08 · 1 min · 11 words · -

git svn

git svn install ubuntu sudo apt-get install -y git-svn # init mkdir -p /path/to/project-foo/ git svn init https://url.to.svn.repo git svn fetch -r 1342:HEAD 从中心服务器的 svn repository 获取最新更新 这个操作可以通过"git-svn rebase"完成。注意这里用的是rebase,而不是update。update命令对于通过git-svn检出的svn repostory的git版本库是不可用的。 git svn rebase git commit -a -m "" git svn dcommit Password for ‘user0’: Can’t locate Term/ReadKey.pm git requires perl-term-readkey when it asks for user input Found when trying to enter a password for a git svn dcommit Password for ‘user0’: Can’t locate Term/ReadKey.pm in @INC (you may need to install the Term::ReadKey module) (@INC contains: /usr/share/perl5/site_perl /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/core_perl /usr/share/perl5/core_perl .) at /usr/share/perl5/vendor_perl/Git.pm line 565. ...

2013-01-07 · 3 min · 488 words · -

top command

top command top 命令是常用的性能监控工具之一,用于监控系统整体性能和进程信息. top 界面分为两个部份,上面部份显示关于系统整体性能,下面部份显示各进程信息。 第一行显示的内容和 uptime 命令一样, 可以显示和折叠 cpu 使用信息. top: 这个没有什么意思,只是个名称而已 01:47:56 : 系统当前时间 up 1:26 : 系统开机到现在经过了多少时间 2 users: 当前两个用户在线 load average: 0.00,0.00,0.00: 系统 1 分钟, 5 分钟, 15 分钟的 CPU 负载信息 Tasks: 38 total: 当前有38个任务/进程 1 running: 1个进程正在运行 37 sleeping: 37个进程睡眠 0 stopped: 停止的进程数 0 zombie: 僵死的进程数 0 zombie: 僵死的进程数 zombie 进程 : 不是异常情况。 一个进程从创建到结束在最后那一段时间遍是僵尸。留在内存中等待父进程取的东西便是僵尸。任何程序都有僵尸状态,它占用一点内存资源,仅仅是表象而已不必害怕。如果程序有问题有机会遇见,解决大批量僵尸简单有效的办法是重起。kill是无任何效果的stop模式: 与sleep进程应区别,sleep会主动放弃cpu,而stop是被动放弃cpu ,例单步跟踪,stop(暂停)的进程是无法自己回到运行状态的。 Cpu(s): 表示这一行显示 CPU 总体信息 us: 用户态进程占用 CPU 时间百分比,不包含 renice 值为负的任务占用的CPU的时间。 CPU 消耗在 User space 的时间百分比 sy: 内核线程占用 CPU 时间百分比, 消耗在 Kernel space 的时间百分比。 ni: renice 值为负的任务的用户态进程的CPU时间百分比。nice 是优先级的意思, 表示被 nice 命令改变优先级的任务所占的百分比 id: 空闲CPU时间百分比 wa: IO wait 的缩写, io wait 所占的百分比, CPU 等待外部 I/O 的时间百分比,这段时间 CPU 不能干其他事,但是也没有执行运算,这个值太高就说明外部设备有问题 hi: CPU硬中断时间百分比, hardware interrupt 的缩写,CPU 响应硬件中断请求的时间百分比 si: CPU软中断时间百分比, software interrupt 的缩写,CPU 响应软件中断请求的时间百分比 st: 虚拟cpu等待实际cpu的时间的百分比, stole time 的缩写,该项指标只对虚拟机有效,表示分配给当前虚拟机的 CPU 时间之中,被同一台物理机上的其他虚拟机偷走的时间百分比 # 查看某一个用户 的进程, 查看 user0 用户进程 top -u user0 #显示线程 top -H -p PID printf "%x\n" tid 交互命令 P: 按 CPU 使用率排序 T: 按 MITE+ 排序 M: 按 %MEM 排序 f: 编辑基本视图中的显示字段 Space: 立即刷新显示 h: 显示帮助 k: 杀死某进程。你会被提示输入进程 ID 以及要发送给它的信号。 一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。 [n] 改变显示的进程数量。你会被提示输入数量。 ...

2013-01-06 · 2 min · 337 words · -

symbol

symbol ZWNBSP 是“Zero Width No-Break Space”的缩写。它是一种看不见的字符,主要用于文本处理和排版中。ZWNBSP的主要功能包括: 防止自动换行:在某些文本编辑器或排版工具中,ZWNBSP可以用于防止在不希望的地方自动换行。 排版和格式调整:在需要精确控制文本显示的场合,例如在编程、网页设计或文档处理时,ZWNBSP可以帮助实现特定的格式需求。 字符连接:有时候,ZWNBSP用于在两个字符之间插入而不影响它们的视觉连接,比如在某些语言或符号中。 ZWNBSP在Unicode中的编码是U+FEFF,但在许多现代应用中,它更多被用作字节顺序标记(BOM),而不是作为零宽度空格。

2013-01-05 · 1 min · 10 words · -

resource-ref

resource-ref resource-ref元素用于指定对外部资源的servlet引用的声明。 resource-ref子元素的描述如下: ● res-ref-name是资源工厂引用名的名称。该名称是一个与java:comp/env上下文相对应的JNDI名称,并且在整个Web应用中必须是惟一的。 ● res-auth表明: servlet代码通过编程注册到资源管理器,或者是容器将代表servlet注册到资源管理器。该元素的值必须为Application或Container。 ● res-sharing-scope表明: 是否可以共享通过给定资源管理器连接工厂引用获得的连接。该元素的值必须为Shareable(默认值)或Unshareable。

2013-01-05 · 1 min · 11 words · -

JAVA读取文件的两种方法 JAVA.IO和JAVA.LANG.CLASSLOADER

java 文件 Files.exists():检测文件路径是否存在。 Files.createFile():创建文件。 Files.createDirectory():创建文件夹。 Files.delete():删除一个文件或目录。 Files.copy():复制文件。 Files.move():移动文件。 Files.size():查看文件个数。 Files.read():读取文件。 Files.write():写入文件。 JAVA读取文件的两种方法 JAVA.IO和JAVA.LANG.CLASSLOADER http://www.blogjava.net/flysky19/articles/93280.html java读取文件的两种方法: java.io和java.lang.ClassLoader什么时候使用java.io,什么时候使用java.lang.ClassLoader呢? (注: 要是之前读xml文件时清晰知道java读取文件有这两种方法就好了!可以少走很多去理解相对路径的弯路!) 自己的总结: *java.io:相对于当前用户目录的相对路径读取;注重与磁盘文件打交道或者纯java project中使用。 (虽然ClassLoader方式更通用,但是如果不是javaEE环境,要定位到classpath路径下去读文件是不合理的。) *java.lang.ClassLoader:相对于classpath的相对路径读取;建议在javaEE环境中都使用这种方式。 整理资料一: http://www.code168.com/bbs/html/2005-12-9/23554625833.html 问: java打成jar包的后续问题!!!!如何在读取jar包里面的配置文件? 答1: 如果用java.util.ResourceBundle就不用担心什么,它本来就是从class loader folder/jar文件里找 properties文件。 如果你已经注意到了,java取文件有两种方法,java.util.io和java.lang.ClassLoader两种。 java.io: File file = new File("…"); FileInputStream fis = new FileInputStream("…"); FileReader fr = new FileReader("…"); ClassLoader: ClassLoader loader = XXXClass.class.getClassLoader(); ClassLoader loader = Thread.currentThread().getContextClassLoader(); URL url = loader.getResource("…"); File file = new File(url.getFile()); InputStream input = loader.getResourceAsStream("…"); ...

2013-01-03 · 1 min · 137 words · -

OpenSK

OpenSK Google 完全开源了其安全密钥项目 OpenSK,该实现支持 FIDO U2F 和 FIDO2 规范,支持 W3C 的 WebAuthn 标准,并采用安全可靠的 Rust 语言编写。 利用 OpenSK 开源项目,研究人员、安全密钥制造商以及发烧友可以快速制作出支持 FIDO 规范的安全密钥设备,体验更加安全的用户身份验证服务。 为了让用户能够低成本、快速上手体验 OpenSK,我们在 nRF52840 MDK USB Dongle 上做了移植,使其能够简单快速升级 OpenSK 固件而无需使用昂贵的下载工具。 硬件要求 nRF52840 MDK USB Dongle(裸板或外壳版都行,可自行在淘宝选购) 最新版 Google Chome 浏览器(38+)或 Firefox 浏览器 https://zhuanlan.zhihu.com/p/109631580

2012-12-29 · 1 min · 41 words · -

使用 Maven 执行 java main class

使用 Maven 执行 java main class mvn exec:java -Dexec.mainClass=“org.ts.main.App” http://www.cnblogs.com/foxswl/archive/2010/05/10/maven-execute-java-main.html http://www.vineetmanohar.com/2009/11/3-ways-to-run-java-main-from-maven/

2012-12-25 · 1 min · 11 words · -

slf4j

slf4j <properties> <slf4j.version>1.7.36</slf4j.version> </properties> <dependencies> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>${slf4j.version}</version> </dependency> </dependencies> ... http://baike.baidu.com/view/1895694.htm http://ugibb510.iteye.com/blog/458482 SLF4J, (Simple Logging Facade for Java) ,不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。 实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。从某种程度上,SLF4J有点类似JDBC,不过比JDBC更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。 1、什么情况可以使用 如果你开发的是类库或者嵌入式组件,那么就应该考虑采用SLF4J,因为不可能影响最终用户选择哪种日志系统。在另一方面,如果是一个简单或者独立的应用,确定只有一种日志系统,那么就没有使用SLF4J的必要。假设你打算将你使用log4j的产品卖给要求使用JDK 1.4 Logging的用户时,面对成千上万的log4j调用的修改,相信这绝对不是一件轻松的事情。但是如果开始便使用SLF4J,那么这种转换将是非常轻松的事情。 2、举例 (1) 代码 ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Wombat { final Logger logger = LoggerFactory.getLogger(Wombat.class); Integer t; Integer oldT; public void setTemperature(Integer temperature) { oldT = t; t = temperature; Object[] objs = {new java.util.Date(), oldT, t}; logger.info("Today is {}, Temperature set to {}. Old temperature was {}.", objs); if (temperature.intValue() > 50) { logger.warn("Temperature({}) has risen above 50 degrees.", t); } } public static void main(String[] args) { Wombat wombat = new Wombat(); wombat.setTemperature(10); wombat.setTemperature(60); } } (2) 使用SLF4J提供的simple log ...

2012-12-25 · 3 min · 563 words · -

archlinux k8s

archlinux k8s disable swap # check swap usage, if no output, swap is disabled swapon --show # check swap status systemctl list-units --type=swap # disable swap sudo swapoff -a # disable zram swap sudo systemctl mask dev-zram0.swap sudo pacman -Syu reboot sudo pacman -S containerd kubeadm kubelet kubectl curl jq open-iscsi reboot # 如果提示 : iptables-nft-1:1.8.11-2 and iptables-1:1.8.11-2 are in conflict. Remove iptables? [y/N] # 删除 iptables, Kubernetes,推荐使用 iptables-nft,因为 Kubernetes 自 v1.13 起支持 iptables 的 nftables 后端(iptables-nft),而且 nftables 是 Linux 内核中更现代的防火墙实现,逐渐取代传统 iptables。此外,Arch Linux 的默认配置倾向于 nftables。 # 查看 containerd 版本 ctr version lsmod|grep br_netfilter lsmod|grep overlay # 在安装 kubelet 的时候 br_netfilter 已经设置 好了, k8s.conf 里不需要再加 br_netfilter cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay EOF sudo modprobe overlay # 安装 kubeadm 的时候这三个变量会自动设置, 输出应该都是 1 sysctl net.bridge.bridge-nf-call-iptables sysctl net.bridge.bridge-nf-call-ip6tables sysctl net.ipv4.ip_forward # containerd config sudo mkdir /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml vim /etc/containerd/config.toml # 打开文件,找到 `[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc.options]` # 在下面加 一行 SystemdCgroup = true # 配置 containerd 使用 systemd 作为 cgroup 驱动 # 检查 containerd 的 状态 sudo systemctl status containerd # 重启 containerd sudo systemctl restart containerd sudo systemctl enable --now containerd sudo systemctl status kubelet systemctl enable kubelet.service systemctl enable --now iscsid kube-vip kube-vip 相关的命令要在每个 control plane 节点上执行 ...

2012-12-23 · 4 min · 663 words · -

SSD - Smart Response

SSD - Smart Response Smart Response 固态硬盘缓存技术属于英特尔Rapid Storage Technology 10.5的新功能,其允许用户将一块固态硬盘 (部分或全部容量) 用作于机械硬盘 (单块或RAID阵列) 高速缓存,让整机系统获得接近于固态硬盘的读取/写入性能,同时还能保留机械硬盘容量大的优势。 Smart Response固态硬盘缓存技术具有三种工作模式,分别为关闭 (Off) ,增强 (Enhanced) 和极限 (Maximized) 。其中增强模式是默认状态,使用该模式时,由于数据同时写入高速缓存和机械硬盘,因此写入速度并无提升,但系统启动和数据读取的速度将得到较大提升,同时无需担心数据意外丢失;而极限模式下,数据将首先写入高速缓存中,然后再从缓存转移至机械硬. Intel’s Rapid Storage Technology (RST) driver that is only available for Windows to access the drive.

2012-12-22 · 1 min · 38 words · -

Spring annoation

Spring annoation @PostConstruct 和 @PreDestroy Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,您既可以通过实现 InitializingBean/DisposableBean 接口来定制初始化之后 / 销毁之前的操作方法,也可以通过 <bean> 元素的 init-method/destroy-method 属性指定初始化之后 / 销毁之前调用的操作方法。关于 Spring 的生命周期,笔者在《精通 Spring 2.x—企业应用开发精解》第 3 章进行了详细的描述,有兴趣的读者可以查阅。 JSR-250 为初始化之后/销毁之前方法的指定定义了两个注释类,分别是 @PostConstruct 和 @PreDestroy,这两个注释只能应用于方法上。标注了 @PostConstruct 注释的方法将在类实例化后调用,而标注了 @PreDestroy 的方法将在类销毁之前调用。

2012-12-18 · 1 min · 39 words · -

spring @ModelAttribute

spring @ModelAttribute 通过 SpringMVC 的 SessionAttributes Annotation 关联 User 属性 SpringMVC 文档提到了 @SessionAttributes annotation,和 @ModelAttribute 配合使用可以往 Session 中存或者从 Session 中取指定属性名的具体对象。 ,@SessionAttributes 是用来在 controller 内部共享 model 属性的。从文档自带的例子来看,标注成 @SessionAttributes 属性的对象,会一直保留在 Session 或者其他会话存储中,直到 SessionStatus 被显式 setComplete()。那这个 annotation 对我们有什么帮助呢? 答案就是我们可以在需要访问 Session 属性的 controller 上加上 @SessionAttributes,然后在 action 需要的 User 参数上加上 @ModelAttribute,并保证两者的属性名称一致。SpringMVC 就会自动将 @SessionAttributes 定义的属性注入到 ModelMap 对象,在 setup action 的参数列表时,去 ModelMap 中取到这样的对象,再添加到参数列表。只要我们不去调用 SessionStatus 的 setComplete() 方法,这个对象就会一直保留在 Session 中,从而实现 Session 信息的共享。 controller的代码如下: @Controller @SessionAttributes(“currentUser”) public class GreetingController{ ...

2012-12-17 · 1 min · 92 words · -

jetty tomcat

jetty tomcat jetty vs tomcat http://www.ibm.com/developerworks/cn/java/j-lo-jetty/ jetty与 Tomcat 的比较 Tomcat 和 Jetty 都是作为一个 Servlet 引擎应用的比较广泛,可以将它们比作为中国与美国的关系,虽然 Jetty 正常成长为一个优秀的 Servlet 引擎,但是目前的 Tomcat 的地位仍然难以撼动。相比较来看,它们都有各自的优点与缺点。 Tomcat 经过长时间的发展,它已经广泛的被市场接受和认可,相对 Jetty 来说 Tomcat 还是比较稳定和成熟,尤其在企业级应用方面,Tomcat 仍然是第一选择。但是随着 Jetty 的发展,Jetty 的市场份额也在不断提高,至于原因就要归功与 Jetty 的很多优点了,而这些优点也是因为 Jetty 在技术上的优势体现出来的。 架构比较 从架构上来说,显然 Jetty 比 Tomcat 更加简单,如果你对 Tomcat 的架构还不是很了解的话,建议你先看一下 《Tomcat系统架构与设计模式》这篇文章。 Jetty 的架构从前面的分析可知,它的所有组件都是基于 Handler 来实现,当然它也支持 JMX。但是主要的功能扩展都可以用 Handler 来实现。可以说 Jetty 是面向 Handler 的架构,就像 Spring 是面向 Bean 的架构,iBATIS 是面向 statement 一样,而 Tomcat 是以多级容器构建起来的,它们的架构设计必然都有一个"元神",所有以这个"元神"构建的其它组件都是肉身。 从设计模板角度来看 Handler 的设计实际上就是一个责任链模式,接口类 HandlerCollection 可以帮助开发者构建一个链,而另一个接口类 ScopeHandler 可以帮助你控制这个链的访问顺序。另外一个用到的设计模板就是观察者模式,用这个设计模式控制了整个 Jetty 的生命周期,只要继承了 LifeCycle 接口,你的对象就可以交给 Jetty 来统一管理了。所以扩展 Jetty 非常简单,也很容易让人理解,整体架构上的简单也带来了无比的好处,Jetty 可以很容易被扩展和裁剪。 ...

2012-12-16 · 1 min · 189 words · -