qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

jmeter之配置元件

     摘要: 利用Jmeter的http请求的时候,例如登陆操作,我们做普通用户名和密码作参数化,循环读取文本里的用户名和密码,可以添加CSV Data Set Config这个原件来控制。利用Jmeter的CSV Data Set Config,可以实现这个功能,具体如下:1.新建一个文本文件,里面保存要登录的用户名,密码,文件内容如下:baidu,...  阅读全文

posted @ 2014-02-28 13:49 顺其自然EVO 阅读(10996) | 评论 (0)编辑 收藏

Linux线程同步之条件变量

  条件变量是线程可用的另一种同步机制。条件变量给多个线程提供了一个会合的场所。条件本身是由互斥量保护的。线程在改变 条件状态前必须首先锁住互斥量。
  条件变量的初始化 pthread_cond_init
  去除初始化 pthread_cond_destroy
  等待 pthread_cond_wait
  满足条件给向进程发送信号 pthread_cond_signal
  下面程序展示了利用条件变量等待另外两个线程满足条件时,第三个进程继续向前执行
#include <stdio.h>
#include <pthread.h>
#include <signal.h>
pthread_mutex_t m1, m2;
pthread_cond_t c1,c2;
pthread_t t1, t2, t3;
void* r1(void *arg)
{
sleep(10); //睡眠10秒
pthread_cond_signal(&c1);
printf("t1 finish\n");
while(1);
}
void* r2(void *arg)
{
sleep(15);//睡眠15秒
pthread_cond_signal(&c2);
printf("t2 finish\n");
while(1);
}
void* r3(void *arg)
{
pthread_cond_wait(&c1, &m1);
pthread_cond_wait(&c2, &m2);
printf("finish\n");//15秒后线程打印
}
main()
{
pthread_mutex_init(&m1, 0);
pthread_mutex_init(&m2, 0);
pthread_cond_init(&c1, 0);
pthread_cond_init(&c2, 0);
pthread_create(&t1, 0, r1, 0);
pthread_create(&t2, 0, r2, 0);
pthread_create(&t3, 0, r3, 0);
while(1);
}


  执行结果
  条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生。
  下面程序中,由于在互斥量中等待条件会造成死锁
#include <pthread.h>
#include <stdio.h>
#include <signal.h>
pthread_t t1,t2;
pthread_mutex_t m1,m2;
pthread_cond_t c;
void *r1(void *d)
{
while(1)
{
pthread_mutex_lock(&m1);
printf("wait\n");
pthread_cond_wait(&c,&m2);
pthread_mutex_unlock(&m1);
}
}
void *r2(void *d)
{
while(1)
{
pthread_mutex_lock(&m1);
printf("signal\n");
pthread_cond_signal(&c);
pthread_mutex_unlock(&m1);
}
}
main()
{
pthread_cond_init(&c,0);
pthread_mutex_init(&m1,0);
pthread_mutex_init(&m2,0);
pthread_create(&t1,0,r1,0);
pthread_create(&t2,0,r2,0);
while(1);
/*
pthread_join(t1,0);
pthread_join(t2,0);
pthread_mutex_destroy(&m2);
pthread_mutex_destroy(&m1);
pthread_cond_destroy(&c);*/
}
  执行结果,程序执行到某一时刻发生死锁,不再向下执行
  改进后的程序,允许线程以无竞争的方式等待,不会发生死锁
#include <pthread.h>
#include <stdio.h>
#include <signal.h>
pthread_t t1,t2;
pthread_mutex_t m1,m2;
pthread_cond_t c;
void *r1(void *d)
{
while(1)
{
pthread_mutex_lock(&m1);
printf("wait\n");
pthread_cond_wait(&c,&m1);
pthread_mutex_unlock(&m1);
}
}
void *r2(void *d)
{
while(1)
{
pthread_mutex_lock(&m1);
printf("signal\n");
pthread_cond_signal(&c);
pthread_mutex_unlock(&m1);
}
}
main()
{
pthread_cond_init(&c,0);
pthread_mutex_init(&m1,0);
pthread_mutex_init(&m2,0);
pthread_create(&t1,0,r1,0);
pthread_create(&t2,0,r2,0);
while(1);
/*
pthread_join(t1,0);
pthread_join(t2,0);
pthread_mutex_destroy(&m2);
pthread_mutex_destroy(&m1);
pthread_cond_destroy(&c);*/
}

posted @ 2014-02-28 11:01 顺其自然EVO 阅读(381) | 评论 (0)编辑 收藏

Python解决插入数据库乱码问题

从网站上获取的信息要保存在本地数据库中,但是保存的过程中数据库的信息都变成了乱码,怎么解决呢?客官听我娓娓道来。
  首先,保证以下四项的编码都是utf-8:
  1. 代码
  2. 数据库连接
  3. 表的字符集格式
  4. 插入的数据格式
  每步的操作如下:
  1. 保证代码的格式是utf-8,在代码最前面加上这句话
  # -*- coding:utf8 -*-
  #首先用于确定编码,加上这句
  2. 保证数据库连接格式是utf-8,这么写
  conn=MySQLdb.connect(host='localhost',user='root',passwd='****',db='kfxx',port=3306,charset='utf8')
  cur=conn.cursor()
  3. 保证表的字符集格式是utf-8,在建表的时候就能设置
  4. 保证插入的数据格式是utf-8,分为保证读取的页面格式是utf-8和字符串格式也是utf-8
  #解决乱码问题
html_1 = urllib2.urlopen(cityURL,timeout=120).read()
mychar = chardet.detect(html_1)
bianma = mychar['encoding']
if bianma == 'utf-8' or bianma == 'UTF-8':
html = html_1
else :
html = html_1.decode('gb2312','ignore').encode('utf-8')
chapter_soup = BeautifulSoup(html)
city = chapter_soup.find('div',class_ = 'row-fluid').find('h1').get_text()
province = chapter_soup.find('a',class_ = 'province').get_text()
pmNum = chapter_soup.find('div',class_ = 'row-fluid').find('span').get_text()
suggest = chapter_soup.find('div',class_ = 'row-fluid').find('h2').get_text()
rand = chapter_soup.find('div',class_ = 'row-fluid').find('h2').find_next_sibling('h2').get_text()
face = chapter_soup.find('div',class_ = 'span4 pmemoji').find('h1').get_text()
conclusion = chapter_soup.find('h1',class_ = 'review').get_text()
print city.encode('utf-8')
cur.execute('insert into t_pm values(\''+city.encode('utf-8')
+'\',\''+province.encode('utf-8')
+'\',\''+pmNum.encode('utf-8')
+'\',\''+suggest.encode('utf-8')
+'\',\''+rand.encode('utf-8')
+'\',\''+conclusion.encode('utf-8')+'\')')
  完成,插入的数据都是中文了,看效果图:

posted @ 2014-02-28 10:59 顺其自然EVO 阅读(2957) | 评论 (1)编辑 收藏

JAVA程序员应该知道的linux命令

常用命令
  1.在compose Bar下可以对多个服务器同时进行操作。选择To All Sessions
  2. 查看JAVA进程:
  ps -ef | grep java
  ps auxf | grep java
  3.杀死JAVA进程:
  pkill java (在有反串改的时候可以用,杀死所有java进程)
  kill -9 进程ID
  ps -ef | grep "Dcatalina.base=/usr/oa/appserver" | grep -v "grep" | awk '{print   $2} ' | xargs kill -9
  4.目录查看和执行程序:
  cd /usr/oa/bin  (进入工程的目录中)
  cd .. (后退一个目录)
  ./startup.sh  ./stop.sh  (执行当前目录下的文件)
  5.进入某个用户
  su root (切换到root用户下)
  6.查看目录:
  ll (显示目录的详细信息)
  ls(显示目录下所有文件)
  7.在linux下修改文件内容
  1)选用vi选择需要修改的文件vi index.jsp
  2)然后会出现提示内容按一下i 进行修改
  3)修改完成后按esc键后再按 shift+冒号 最后输入wq
  8.查看硬盘是否有满
  df -h
  9.删除文件(清缓存的时候用)
  1.查看文件目录:pwd
  2.删除文件:rm -rf 文件夹目录
  10.复制文件
  cp  -r  /user/oa  /usr_back_oa
  11.查看日志
  tail -r catalina.out
  tail -n 300 catalina.out
  12.查看文件
  cat fileName.xml
  13.查看IP,开启远程连接服务
  ifconfig               --查看IP地址,注意这里是if开头而不是ip
  service sshd status    --查看sshd服务的状态
  service sshd start     --启动sshd服务的状态
  chkconfig --list
  chkconfig --list | grep sshd 查看启用服务
  14.列出各进程打开文件的数量
  lsof -n|awk '{print $2}' |sort|uniq -c |sort -nr|more
  直接统计JAVA进程连接数
  ps -ef| grep java | awk '{print $2}' | awk 'NR==1'| xargs lsof -p | wc -l
  15.先使用ps -ef|grep java查看,再查看12120的打开数量
  lsof -p 12120 |wc -l
  16.为tomcat授权,不能少sudo,username为用户名
  sudo chown -R username /Users/username/Documents/tomcat

posted @ 2014-02-28 10:55 顺其自然EVO 阅读(1786) | 评论 (0)编辑 收藏

Selenium操作联动菜单

最近在用Selenium实现自动化测试的过程中遇到了一些问题,不太好解决,或者解决了也觉得不是特别好的办法,在这里写出来一个是记录一下,也向大家需求一下帮助,看看有没有更好的办法,谢谢!
  一个问题就是二级联动菜单,比如选择省市的二级联动菜单,在第一个菜单中选择省份后会触发二级菜单的load事件去 装载市区的option label。可如果单独用selenium.select(locator,label='xxx');的操作是无法触发二级菜单的load事件的,从而执行时无法找到相应的label。大家的建议都是用fireEvent、mouseUp、mouseDown之类的API进行调试,可这些方法仍没有解决我的问题。后来是通过先focus,再click,最后select的步骤进行操作才能触发事件并选到相应的label。实例如下:
selenium.focus(provinceCode);
selenium.click(provinceCode);
selenium.select(provinceCode,label='Beijing');
selenium.focus(cityCode);
selenium.click(cityCode);
selenium.select(cityCode,label='Beijing');
  可感觉这种方式毕竟繁琐,不知道有没有更好的方法可以直接触发事件,直接通过select进行操作。其间我还看到了这篇文章http://blog.csdn.net/honglei915/archive/2009/11/16/4815513.aspx,可是没有成功,不知道是不是我用的框架没有继承SeleniumTestCase。因为我们的框架是结合TestNG,通过@Factory和@Test标注进行测试Case文件解析,文件以htm形式存在,将tr/td标签解析为selenium可执行的命令执行自动化操作。如果大家有什么好的办法请留言告诉我吧,谢谢!
  其次就是对页面上js事件的处理,现在我能想到的就是用fireEvent()这个API。一个参数是要触发这个js的控件的xpath,另一个参数就是要触发的事件, 大家给的建议一般都是blur或focus,可尝试了很多次都没有成功。不知大家有没有更好的方法?或者了解这个API的大虾能不能给具体讲讲,为啥用blur/focus,这俩有什么区别?还有没有什么其他event可以用呢?谢谢!

posted @ 2014-02-28 10:52 顺其自然EVO 阅读(2854) | 评论 (0)编辑 收藏

垂直化开发模式在支付宝无线测试平台建设中的实践

 摘要:支付宝无线统一测试平台承载着整个支付宝无线应用研发的质量控制体系,提供字节码测试、monkey测试、遍历测试、UI自动化测试、适配测试、设备管理、真机访问、性能监测、安全扫描等。
  一、引言
  无线应用的浪潮已经掀起,无线测试质量保障体系的建立步伐步步紧逼,在这样的背景下,支付宝无线统一测试平台应运而生,结合支付宝无线应用的特性,定制开发一套统一无线测试平台迫在眉睫,本平台主要涵盖monkey测试、遍历测试、UI自动化测试、适配测试、设备管理、真机访问、性能监测、安全扫描等,研发团队采取垂直化研发协作模式,坚守OneSolution&OneApp&OneProject&OneDB&OneOwner的责任到人的开发模式,秉承高内聚、低耦合的开发理念,极大的提升了整个平台的开发效率。开发过程中,强化进度层层把关与同行评审机制,坚守产品第一、质量第一,为统一无线测试平台的构建打下坚实的基础。在开发效率提升的同时,这种垂直化研发协作模式也有效的提升了整个平台的可扩展性、可维护性等。
  二、案例解读
  (1).核心模块划分
  鉴于本平台的自身特点,在模块化设计方面,我们对本平台进行模块解耦设计,主要分为基础组件(如用户管理、权限管理、任务调度等)、统一控制中心(与移动设备交互层)、应用提测、设备管控、应用评价中心、自动化测试等模块;同时鉴于集团共建,本平台建设主要采用开源的技术体系springmvc&mybatis&velocity&mysql。核心模块结构图如下:
  (2).核心功能剖析
  字节码测试:我们通过对findbugs进行拓展开发,提供一体化的字节码测试解决方案,填补了支付宝在字节码扫描领域的空白,这里的扩展开发主要包括findbugs的缺陷的关键字过滤、缺陷的规则扩展、缺陷的翻译等,业务流程见下图:
  安装、启动、卸载、升级测试:主要是对应用在不同型号的手机上进行安装、启动、卸载测试的相关数据指标的获取以及分析;同时,鉴于支付宝应用发布的高频率情况,整个无线平台提供了应用升级测试方案,支持从低版本到高版本的升级测试相关数据指标的获取与分析,业务流程见下图:
  性能监测:切合支付宝无线自动化解决方案,收集在特定的场景(也即测试计划)运行与底层框架函数埋点的情况下,透明化该特定场景下的移动设备的流量、耗电量、CPU、内存等数据指标,并提供基于特定性能基线的移动应用性能评测中心,相关模块以及性能指标见下图:
  设备管控:主要是提供一体化的移动设备管理模块,支持设备管理、借用管理、真机访问等,承载着支付宝所有移动设备的管控与借用业务,相关功能模块见下图:
  真机访问:本模块我们主要着手解决了实时获取到手机当前屏幕截图以及可以将浏览器上的鼠标或键盘事件回传到手机上并得以执行。工作流程见下图:
  关于实时获取当前手机屏幕截图,有两种使用较多的方案:1.使用adb本身提供的截图命令screencap;2.使用开源的C程序gsnap生成截图。方案1简单,但效率低,大概每秒只能截图一张,不能满足实时性要求,方案2需要将此C程序编译并放到手机上,同时,手机需要被root,因为此程序读取/dev/graphics/fb0设备生成图片时需要root权限。
  关于鼠标或键盘事件回传到手机并得以执行,首先需要开发一个Android手机上运行的控制台程序(此程序要能构造Android平台的MouseEvent对象并且发送给系统执行),打成jar包,将预先放置在手机的某个目录中,当浏览器中捕获到某个事件时,传送回服务器,服务器使用adb向手机发送一个命令及参数,执行之前准备好的命令行程序,之后命令被换成Android平台的事件并分发执行。
  自动化测试:提供用例的同步与管理、测试工程的管理、测试计划管理、测试数据管理等模块,将自动化测试纳入到整个支付宝无线研发的流程体系中去,相关模块和用例特点见下图:
  应用评价中心:可以将不同的应用发布渠道的热点评价同步到本无线平台,进一步分门别类的去进行分析。
  其他:本无线测试平台还支持monkey测试、遍历测试、基于代码级的安全扫描、应用自动打包、一体化的质量报告体系等。


 (3).开发实践要素
  本项目采取了垂直化的协作研发模式,专人、专职、专职的OneRule的项目控制模式,相关核心要素见图2和图3,后面会就各个要素做深入的剖析:
  统一化:在开发模式、url组织、静态资源、编码规范、数据库设计规范、工程结构等方面都高度统一,确保团队成员对其他模块的快速掌控能力,有效的降低了人才流失的风险,此外,也提升了整个团队的技术体系的培养和专业技能的沉淀。
  OneRule:采取专人、专职、专责、专事的垂直化的研发模式,也即OneSolution&OneApp&OneProject&OneDB&OneOwner原则,同时强化PeerReview(同行评审)机制,协助不同方案的Owner业务与技术的不断成长。
  快速原型验证:进行快速的POC(proofofconcept)原型验证和方案确认,加快特定方案的可行性研究步伐,有效的降低了资源的浪费和风险。
  螺旋式迭代:采取了螺旋式的迭代研发模式,确保项目的快速迭代交付周期。
  线上与线下部署:采取统一的发布与部署流程,进行每日构建,分为线上和线下两套环境,线上提供给用户进行使用或试用,线下提供给研发人员进行验收测试。
  源码控制:采取了主干与分支管理,强化模块级别的同行评审,在部分编码技能稍弱的同事中,我们会采取结对编程的方式,协助同事编码能力的提升。
  架构和数据库设计:由技术架构师统一负责模块解耦设计以及数据库设计,并强化组员评审与方案解读,以确保整个方案的正确性。
  研发资源共享:系统开发方面,采取统一的三层架构研发模式与标准的模板工程,强化基础组件(如grid控件、user组件等)的研发,提升整个系统研发层面的组件复用力度,从而有效的节省资源。
  三、案例启示
  无线应用异军突起,无线测试平台建设迫在眉睫,目前业界也有尚有一些较好的案例,如testin等,但存在一些现实问题,如费用较高、针对性不强且难以满足不同公司的无线测试的特定需求,在支付宝无线测试平台建设中,我们借鉴了同行产品(如一淘网的摩天轮和淘宝网的athrun)的一些经验,提出了垂直化团队协作研发新模块式,开辟了适合支付宝测试工具研发团队的全新的系统或应用研发新的篇章,有效的提升了支付宝无线统一测试平台建设步伐,提升了测试工具团队组员的独挡一面的能力以及整体把控一个方案(从需求、设计、实现、测试、交付等)的能力,同时提升整个测试工具研发团队的技术沉淀与研发能力,为统一化平台建设奠定了基石。
  作者简介:
  王超,花名于龙,2007年计算机软件与理论专业硕士毕业,先后在微软全球技术支持中心、SAP中国研究院、淘宝网从事自动化测试用例开发、自动化框架研发、测试平台建设、信息系统研发、测试工具研发团队管理等工作,主导研发淘宝网PC自动化测试框架AutomanX、支付宝统一测试平台AQC、支付宝无线测试平台、支付宝缺陷管理移动端QOne等产品,目前负责支付宝质量部测试工具研发团队。
  李国栋,花名富曲,2002年计算机应用专业本科毕业,先后在中国建设银行、金蝶软件、淘宝网从事java开发工作,相关领域包括金融行业软件、ERP软件、电子商务网站,性能测试平台、自动化测试、字节码测试等。擅长java企业级应用平台架构,测试平台技术架构,目前是支付宝质量部测试工具研发团队测试开发专家。
版权声明:本文来源于TOP100全球软件案例研究峰会  王超(花名于龙) 、李国栋(花名富曲),51Testing软件测试网原创出品,未经明确的书面许可,任何人或单位不得对本文进行复制、转载或镜像,否则将追究法律责任。

posted @ 2014-02-28 10:50 顺其自然EVO 阅读(497) | 评论 (0)编辑 收藏

iOS基础—单元测试

 单元测试(unit testing):对软件中最小可测试单元进行检查和验证。一般面向过程的语言中,基本单元为函数,面向对象的语言中,基本单元通常是类,其实对于一个手机上的app来说基本单元也可以是一个UI页面。平时我们写了一个函数,执行以下看是否正常工作,也属于单元测试。
  测试用例test case):对测试任务的描述,体现测试方案、方法、技术和策略。内容包括测试目标、测试环境、输入数据、输出数据、测试步骤、预期结果、测试脚本等。
  它是一种检验行为,便于我们写出高质量代码。
  它是一种设计行为,有利于我们编程能力的提高。
  它是一种文档编写行为,让我们的程序有据可依。
  Xcode内置了OCUnit单元测试框架。在Xcode5之前,建立项目的时候有一个选项,让我们选择是否建立一个含有单元测试target的项目,而在Xcode5中只要建立一个项目就默认带有一个单元测试的target。
  在Xcode5之前,建立一个工程的时候如果没有勾选单元测试的话也不要紧,可以自己添加一个单元测试的target。
  在弹出选择框中 IOS-->Other---> Cocoa Touch Unit Testing Bundle
  这里看似OK,但还是差一步,在点击RUN,长按后产生TEST,点击TEST进行开启测试时,将产生一个提示:The scheme "工程名" is not configured for testing. edit the scheme to enable testing,or cancel the action.即我们还没有给工程配置测试工程行,点击修改来添加,或点击取消进行结束。点击Edit Scheme (或菜单中Product->edit Scheme)
  弹出scheme窗体。选中Test,然后点击+号来没加一个scheme
  选中之前创建的CoredataDemoTest后点击ADD
  说明:
  在Xcode5中测试类必须继承自XCTestCase。在Xcode5之前测试类必须继承自SenTestCase。
  测试函数的形式必须是无返回值且以‘test’为前缀,如:- (void)testLogin;
  每个测试用例都是从- (void)setUp;开始,进行初始化,以- (void)tearDown结束,释放资源。
  运行测试用例:
  command + u。
  长按运行按钮选择列表中的test;

posted @ 2014-02-28 10:46 顺其自然EVO 阅读(856) | 评论 (0)编辑 收藏

常见性能瓶颈调优总结之JVM1小时1次CMS FGC调优

2年前写的一篇总结文章,在过去做性能测试过程中经常看到1小时1次FGC问题,该问题在高并发情况下对性能产生很大的波动不可小看,也许一个小小的调优可以给性能带来很大的改善。
  应用出现1小时1次FGC,所引发的原因是由于使用了RMI,会自动1小时调用1次system.gc()。
  大多数的应用虽然配置了CMS gc方式,但是如果没有使用-XX:+ExplicitGCInvokesConcurrent,则会出现显示调用system.gc(),且不会进行 CMS的FGC,带来的影响是造成tps的波动(fgc停机时间越长,则波动会越大)。
  收集各方的意见后,总结针对此类问题的解决方法如下:
  1、增加参数 -XX:+DisableExplicitGC
  该方法System.gc()的调用就会变成一个空调用。但是该方法不适用在大量使用NIO的direct memory,经常、反复的申请DirectByteBuffer的应用中使用,会造成“java.lang.OutOfMemoryError: Direct buffer memory ”。该方法需根据应用具体情况而定。
  2、增加参数 -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000
  其中3600000即为定时触发的时间间隔设置,单位是毫秒,可适当延长触发FGC的定时时间间隔。
  -Dsun.rmi.dgc.client.gcInterval=Long.MAX_VALUE     -Dsun.rmi.dgc.server.gcInterval=Long.MAX_VALUE 则将fc时间间隔设为long型的最大值
  3、增加参数 -XX:+ExplicitGCInvokesConcurrent 或者-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
  该方法可以指定System.gc()采用 CMS 算法,FGC时停机时间会变短,但是CMS GC次数不会变,仍然是1小时1次。
版权声明:本文出自 希君 的51Testing软件测试博客:http://www.51testing.com/?367410
原创作品,转载时请务必以超链接形式标明本文原始出处、作者信息和本声明,否则将追究法律责任。

posted @ 2014-02-28 10:43 顺其自然EVO 阅读(1480) | 评论 (0)编辑 收藏

如何解决mysql数据库8小时无连接自动关闭

 windows下打开my.ini,增加:
interactive_timeout=28800000
wait_timeout=28800000
  专家解答:MySQL是一个小型关系型数据库管理系统,由于MySQL体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
  关于mysql自动关闭服务的现象,可以通过mysql服务器端程序mysql Administrator调整连接参数。将max_connections max_updates max_questions三项数据调整到很大的数字,那么你有限的操作将不会导致数据库服务的终止了在MySQL数据库中,如果一个连接8小时没有请求和操作,就会自动断开,从而导致一些基于数据库连接的应用程序,特别是 WEB 应用程序出错。解决mysql数据库自动关闭服务三个方法:
  方法一:这个参数的名称是 wait_timeout,其默认值为 28800秒(8小时)。其意义为关闭一个连接之前在这个连接上等到行动的秒数,也就是说,如果一个连接闲置超过这个选项所设置的秒数,MySQL 会主动断开这个连接。
  修改操作:
  linux下打开/etc/my.cnf,在属性组mysqld下面添加参数如下:
interactive_timeout=28800000
wait_timeout=28800000
  windows下打开my.ini,增加:
interactive_timeout=28800000
wait_timeout=28800000
  有实践表明,没有办法把这个值设置成无限大,即永久。因此如果你无法保证你的应用程序必定在设定的秒数内至少有一次操作,那么最好用第二个方法解决这个问题。
  方法二:修改如下JDBC连接的 URL:
  jdbc:mysql://hostaddress:3306/schemaname?autoReconnect=true
  添加 autoReconnect=true 这个参数,即能解决这个问题。
  方法三:配置文件(proxool.xml):
  mysql
jdbc:mysql://localhost/yourDatebase?useUnicode=true&characterEncoding=UTF-8
com.mysql.jdbc.Driver
90000
20
3
20
3
true
true
SELECT CURRENT_USER
  专家建议关于mysql自动关闭服务的三个方法,用户最好采取第一个办法最为彻底解决。

posted @ 2014-02-27 10:18 顺其自然EVO 阅读(1017) | 评论 (0)编辑 收藏

JAVA之抽象类与接口的区别

抽象类:用abstract修饰的类称为抽象类。
  它可以有构造器,但是不能构造对象,抽象类中的构造器,在构造具体子类对象时调用,抽象方法决定抽象类,抽象类中可以没有抽象方法,具体父类型可以作为引用类型的声明;抽象父类型也可以作为引用类型的声明;如果一个具体子类继承抽象类,那么就要实现抽象父类中的所有抽象方法;在子类中重写父类方法时,访问级别要大于等于原有访问级别;
  接口:是一种统一的标准,是一个特殊的“模版”
  接口中只能有:1、常量2、抽象方法;在定义方法时,具体类可以做形参,抽象类可以作形参,接口可以做形参;无论谁做形参,实参一定是具体类对象!(具体父类的具体子类;抽象类的具体子类;接口的具体实现类;)类可以在继承一个父类的基础上,实现多个接口;
  抽象类与接口的异同:
  相同处:1、不能构造对象2、都可以定义抽象方法3、设计的目的是为了被继承或被实现4、与子类或实现类的关系都属于is-a,可以用抽象类或接口的引用来作类型声明,进而统一调用具体子类或具体实现类;
  不同处:1、抽象类中可以有构造器,但接口中没有2、无论继承链的长短,继承链上所有的类都是同一类事物;同一个接口中实现类,可以没有任何关系。3、抽象类中可以有抽象方法,也可以有具体方法,但接口中的方法都是抽象方法;4、顶层抽象类是Object类的子类,它继承了父类的所有成员;而接口中则除了自定义的的成员外,没有额外数据;接口是“轻量级”的抽象类,或者说是100%的抽象类;5、抽象类编程时,内聚性低,耦合度高;接口编程,内聚性高,耦合度低(好)6、接口可以实现多继承,一个接口可以继承多个接口。但是抽象类却不能,只能单继承。一个接口不能实现另外一个接口。

posted @ 2014-02-27 10:17 顺其自然EVO 阅读(217) | 评论 (0)编辑 收藏

仅列出标题
共394页: First 上一页 143 144 145 146 147 148 149 150 151 下一页 Last 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜