Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt+↑ 当前行和上面一行交互位置(同上)Alt+← 前一个编辑的页面Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)Shift+Ctrl+Enter 在当前行插入空行(原理同上条)Ctrl+Q 定位到最后编辑的地方Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)Ctrl+M 最大化当前的Edit或View  ...
HTTP协议状态码表示的意思主要分为五类 ,大体是 :
1×× 保留
2×× 表示请求成功地接收
3×× 为完成请求客户需进一步细化请求
4×× 客户错误
5×× 服务器错误
**100 Continue
**指示客户端应该继续请求。回送用于通知客户端此次请求已经收到,并且没有被服务器拒绝。
客户端应该继续发送剩下的请求数据或者请求已经完成,或者忽略回送数据。服务器必须发送
最后的回送在请求之后。
**101 Switching Protocols **
服务器依照客服端请求,通过Upgrade头信息,改变当前连接的应用协议。服务器将根据Upgrade头立刻改变协议
在101回送以空行结束的时候。
**Successful **
=================================
**200 OK**
指示客服端的请求已经成功收到,解析,接受。
**201 Created **
请求已经完成并一个新的返回资源被创建。被创建的资源可能是一个URI资源,通 ...
1 解析自动化测试的困惑在软件工程领域,如果说有一种工作让人在痛苦中感受它的价值、在无休止的加班中体会它的苦涩、在技术的进步中体验它的快乐的话,那它一定是软件测试。计算机技术发展到今天,自动化测试工具的广泛应用使人们重新认识到测试的源动力:最优的质量成本,软件开发过程中的测试及各种质量保证活动,无疑是在追求软件质量成本和收益间的最佳平衡点。
谈到自动化测试,首先我们要明确什么情况下需要自动化。自动化测试的目的是通过自动执行测试脚本,使测试人员在更短的时间内能够更快地完成更多的软件测试,并提供以更高的频率执行测试的能力,从而有效降低测试成本、提高测试效率。从软件测试的成本来看,使用测试工具进行软件自动化测试的成本可以以下公式表示:
自动化测试的成本=测试工具成本+测试脚本的创建成本+测试脚本的维护成本
既然自动化测试的目的在于降低测试成本、提高测试效率,因此,测试团队在选择自动化测试工具时,必须在提高测试效率的同时,尽量做到自动化测试的总体成本小于手工测试成本。因此,自动化测试工具的脚本自动化创建能力和可维护性,就成了衡量自动化测试工具的重要因素。
在实际的测试工作中,一般说来,我们选择 ...
如果你使用Java语言进行开发,对于定时执行任务这样的需求,自然而然会想到使用Timer和TimerTask完成任务,我最近就使用 Timer和TimerTask完成了一个定时执行的任务,实现得没有问题,但当在TimerTaks的run()方法中使用 Thread.sleep()方式时,可能会出现奇怪的现象,好像Timer失效了,网上查了一下,倒是有人遇到了相同的问题,但是并没有找到一篇解释为什么会出现这种情况,期待有某位达人能够分析清楚这个问题。
遇到了这样的问题,始终让我不爽,于是看了一下Timer的源码,先将了解到的内容整理如下,接下来再看看Thread.sleep()的源码,看能否找到问题所在。
在Java中,与定时任务执行相关的类很少,只有Timer、TimerTask、TimerThread、TaskQueue几个,其中每个类的职责大致如下:
Timer:一个Task的调度类,和TimerTask一样,暴露给最终用户使用的类,通过schedule方法安排Task的执行计划。该类通过TaskQueue和TimerThread类完成Task的调度。
TimerTask:实现Ru ...
javagc
未读学C/C++出身的我,对Java有一点非常困惑,那就是缺乏计算对象占用内存大小的机制。而在C++中就可以通过sizeof运算符来获得基本类型以及类实例的大小。C和C++中的这个操作符对于指针运算、内存拷贝和IO操作都非常有用。
Java中并没有一个类似的运算符。事实上,Java也不需要这种运算符。Java中基本类型的大小在语言规范中已经定义了,而C/C++中基本类型大小则跟平台相关。Java有自己的通过序列化构建的IO框架。再者,由于Java中没有指针,因此指针运算和内存块拷贝之类的操作也不存在。
但是,Java程序员有时还是希望能知道一个Java对象到底用了多少内存的。不过这个问题的答案并不简单。
首先要区分清楚的是shallow size和deep size。Shallow size是指对象自身占用的内存大小,其引用对象的大小不算在内。而deep size,则是自身所占内存大小和其递归引用的所有对象所占内存大小的总和。大多数情况下,你会希望获得一个对象的deep size,但是为了知道这个值,首先要知道怎么算shallow size,下面我来介绍一下。
有人抱怨 ...
系统架构
未读美国程序员Jon Scott Stevens,公布了他的创业公司所使用的开发工具清单。
他的语言平台是Java,开发项目是一个网站(还未上线)。所用到的工具都是开源的,可以免费得到。
在目前的创业者之中,用Java作为网站开发语言的人似乎很少。这当然不是没有原因的,Java看上去确实不像是最便捷的网站开发工具,给人的感觉是用起来麻烦又费事。
但是不可否认的是,Java的平台很成熟,各种工具包、工具库非常多,而且JVM虚拟机更是先进的技术。另外,Google App Engine平台提供免费的Java主机,所以使用Java建站也不失为一种合理的选择。
我把他的工具清单抄在下面。如果有一天,我也用Java建站,就可以参考了。
=============================& ...
前言:
在J2EE中,注解使得开发更加便利,省去了生成XML文件的过程,在Hibernate实体声明中,可以简简单单的用几个注解就可以免去生成一个XML的文件操作。这里就主要论述一下annotation的用法和自定义注解处理器。当在创建描述符性质的类或接口时,有大量重复性的工作时候,就可以利用注解来实现。
基本语法:
Java目前包括三种标准注解和四种元注解。元注解主要负责注解其他注解的。
三种标准注解:
@Override,表示当前的方法定义覆盖了父类中的方法。必须要有相同的方法签名即(方法名,参数类型,参数顺序,参数个数)都一样。否则在编译过程中发出错误提示。
@Deprecated,对不应该再使用的方法添加注解,当使用这个方法的时候,会在编译时候显示提示信息。
@SuppressWarnings,关闭不当的编译器报警信息
四种元注解:
@Target,表示该注解可以用什么地方。
如CONSTRUCTOR,构造器声明;FIELD,域声明;METHOD,方法声明;TYPE,类,接口或enum声明
@Retention,表示需要在什么级别保存该注解信息。
如SOURCE,注 ...
可以看一下LinkedIn网站的基本情况:
1. 2千2百万用户2. 每个月4百万独立用户访问3. 每天4千万Page View4. 每天2百万搜索流量5. 每天25万邀请发送6. 每天1百万的回答提交7. 每天2百万的Email消息发送
这是一个世界顶尖级别流量的网站了,看看LinkedIn的系统架构:
操作系统:Solaris (running on Sun x86 platform and Sparc)
应用服务器:Tomcat and Jetty as application servers
数据库:Oracle and MySQL as DBs
没有ORM,直接用JDBC No ORM (such as Hibernate); th** use straight JDBC
用ActiveMQ在发送JMS. (It”s partitioned by type of messages. Backed by MySQL.)
用lucene做搜索Lucene as a foundation for search
Spring做逻辑架构Spring as glue
下面 ...
ORM框架最重要功能是将面向对象方法中的对象和关系型数据库中的表关联了起来,在关联过程中就必然涉及到对象中的数据类型和数据库中的表字段类型的转换,Mybatis中的org.apache.ibatis.type包主要就是实现这个功能。
一、org.apache.ibatis.type的基础类在mybatis的官网中(http://mybatis.github.io/mybatis-3/configuration.html#typeHandlers)关于类型转换有如下的描述
Whenever MyBatis sets a parameter on a PreparedStatement or retrieves a value from a ResultSet, a TypeHandler is used to retrieve the value in a means appropriate to the Java type.
当MyBatis为PreparedStatement 设置参数时或者从ResultSet中获取数据时,会根据Java类型使用TypeHandler 去获取相应的值 ...
原文 http://www.aptusource.org/2014/06/searching-is-what-its-all-about/
Solr 的主要功能就是强大的查询处理。在本文中,你将会看到 Solr 的查询处理,这将会帮助你了解为什么说 Solr 是强大的搜索技术。
在本文中,请注意每个查询和 Solr 返回的文档之间的链接,以及返回的结果文档中的排序。这将有助于你像搜索引擎那样去思考问题,以后我们会逐渐覆盖核心的搜索概念。
探索 Solr 的查询表单你可能已经使用过 Solr 的查询表单来执行查找所有文档的查询。现在,我们来快速看看这个表单的其它特性,这样可以让你对 Solr 支持的查询类型有个直观的了解。下图对这个表单的重点部分进行了注释。请花点时间来逐个了解这些注释:
在上图中,我们编写了一个查询,并且如果使用《[Solr] 快速入门》中添加的文档的话,那么结果中将会返回两个示例文档。像上图中的表单那样填写,并在你自己的环境中执行一次,看看是否真的返回了两个示例文档?
所有和 Solr 核心服务的交互过程都是使用 HTTP 请求。当你填写了查询表单并点击查询后,将 ...
