qileilove

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

Linux导航神器—autojump

  对于命令行用户来说,频繁的cd和tab应该是日常工作中最多使用的命令了。特别对于重度用户来说,如果可以省去这么多cd和tab,将更多的时间做有意义的事该多好。其实Linux学习过程本身就行这样。你会不断的不满足于现状,就像我一样,一年之前还在研究如何用cd可以更加快速,cd还有什么好点的用户可以更快的到达目录。(cd -回到之前的目录,cd或cd ~回到用户目录等)学习本身也是成长的过程,不满足于现状是我前进的动力,所以今天,突破cd和tab,让我们接受一个新的神级插件----autojump。
  首先简单的介绍下这个插件,简单用法就比如你的文件夹路径是
  ~/work/build/ninja
  你不需要cd work,cd build,cd ninja,你只需要在进入第一次之后,(注意是必须在进入之后才会有记录),直接输入autojump b n,就自动进入了这个目录。当然autojump默认将j给alias了,所以你只需要输入j b n就到了这个目录,同时,如果你想访问当前目录下的子目录,你可以直接输入jc xxx,那么这个xxx就会让autojump优先在当前目录下以及当前目录下的子目录给你寻找,十分方便。还有一种用法就是jo,意思为用相应的文件管理器来打开你提供的路径,配合jc就可以成为jco。当然如果你这个目录权重高的话,可能你只需要输入 j nin就到了这个目录。之前介绍了权重,那就简单介绍下,它会根据用户的权重来进行目录名和计数器的哈希文件存储。路径一般在
  /home/rickyk/.local/share/autojump/autojump.txt
  里面的权重一般是这样
28.3:    /etc/bash_completion.d
30.3:    /home/rickyk/bash_completion/etc/profile.d
30.6:    /home/rickyk/.autojump
31.0:    /home/rickyk/.oh-my-zsh/custom
31.6:    /usr/local/share/cmake-2.8/completions
33.2:    /usr/local/share
  这个权重代表了当你输入比如针对第一条的/etc/bash_completion.d的时候,你输入了.d,因为这条权重是28.3,所以会进入第二条的/etc/profile.d因为他的权重是30.3
  相关安装很简单,apt-get install autojump或者直接
  git clone http://joelthelion/autojump
  然后进入目录后./install.py就可以了。注意在首次install之后需要在.bashrc加入下句
  [[ -s /home/rickyk/.autojump/etc/profile.d/autojump.sh ]] && source /home/rickyk/.autojump/etc/profile.d/autojump.sh
  这样你就可以正常使用这个神级插件了,希望这个插件能够给你带来飞一般的爽快感觉 : )

posted @ 2014-12-05 12:21 顺其自然EVO 阅读(422) | 评论 (0)编辑 收藏

SQL Server 2008 (R2) 单机版安装的先决条件

  在为客户提供技术支持时,发现安装SQL Server 2008 (R2) 单机版出现的问题很多源于以下几个典型情况,而客户们有所不知,这正是SQL Server 安装所必须的先决条件:
  1.       .NET Framework 3.5 SP1
  2.       Windows Installer 4.5
  3.       Visual Studio 2008 SP1
  4.       在控制面板中设置区域和语言
  5.       小型企业安装SQL Server 2008 (R2) 标准版需要设置域
  6.       在Windows Server 2008 R2或Windows 7中安装SQL Server 2008采用SP1整合安装模式
  1.     .NET Framework 3.5 SP1
  在 Windows Server 2008 R2中,你应该以添加windows功能的方法来安装.NET  Framework 3.5 SP1,而不是以一个独立的组件来进行安装。
  在其他版本的微软系统中,你只需点击安装文件setup.exe,其将自动安装.NET Framework 3.5 SP1 和 Windows Installer 4.5。
  运行SQL Server 2008 需要有 .Net Framework 3.5 SP1 (特别是 Express 和 IA64版本) 和Windows Installer 4.5。在.Net Framework 和 Windows Installer 升级后,你需要重新启动使其生效。如果没有重启系统而再次尝试安装数据库,则会跳出警告要求重启,您将选择使.Net Framework 和 Windows Installer生效或退出安装。
  如果你选择了取消,安装程序会报一个缺少安装Windows Installer 4.5 的错误。安装向导将 .Net Framework 和Windows Installer 的安装捆绑在一起,因此这两个组件会同时安装。一旦必备组件安装完成(并已经重启系统),安装导向会运行SQL Server安装中心。
  当然,你也可以将这些必备组件单独安装。但是,建议使用安装向导进行安装,避免多次重启系统。因为将这两个组件进行捆绑安装,只需一次重启即可。
  自动运行setup.exe (或手动双击 setup.exe) ,会弹出如下窗口:
  当您同意许可条款后,.Net 3.5 SP1安装会继续。闪屏会显示正在下载组件,事实上只是从DVD中拷贝。这个过程需要花费一些时间(大约10-20分钟,取决于硬件条件)。
 如果SQL Server安装向导出现无法安装.NET Framework 3.5 SP1的情况, 并弹出上述错误, 你可以手动的安装。安装媒体包含在 DVD中, 你不需要从网络下载。
  2.     Windows Installer 4.5
  同意许可条约。
  其他先决条件列于联机丛书“硬件和软件条件”主题下。
  在 2003中, 会弹出如下窗口:
  在 Vista 和 Windows Server 2008中, 则是这样的:
  安装更新并只需一次重启使更新生效。
  使用安装向导进行安装只需一次重启,而分别安装两个组件会需要两次重启。 更多信息,请参考上一章节中Bob Ward’s的博客。
  3.     Visual Studio 2008 SP1
  当你已经安装了visual Studio 2008,这步更新是重要的。因为这一步还没有集成到安装向导中,所以需要从网络上下载安装包。但是这个更新并不是必需的,仅当在你需要安装SSIS, BIDS 或 Management Tools时是需要的。因此,这一步作为组件检测的一部分出现而不是作为全局系统配置检查的一部分出现。
  Setup.exe /PCUSource=C:\SP1
  6.   为小型企业安装SQL Server 2008 (R2) 标准版的一些限制
  如果您为小型企业安装 SQL Server 2008 (R2) 标准版,而您的机器并不在域内,你会遇到这样的报错 ” Operating system supported for edition ”. To solve this issue, you should add your computer into one of  your company’s domain or create a new domain by “DCPROMO”. It has limitation for the domain to install SQL Server.
  Windows Small Business Server 2011 高级版包括 SQL Server 2008 R2http://www.microsoft.com/sbs/en/us/editions-overview.aspx.这个版本和标准版的特性相同。区别是SQL 2008 SBS 标准版是一个特殊的标准版,该标准版是针对Small Business Server的版本,属于中小型企业套装的一部分,只能和对应的中小型企业套装版的Windows Small Business Server 2008一起安装和使用。
  SQL Server SBS版本需满足以下几个条件:
  1.这个版本的SQL Server只能安装在:
  Windows Server 2008 Standard
  Windows Server 2008 Standard without Hyper-V
  Windows Small Business Server 2008
  Windows Server 2008 for Windows Essential Server Solutions
  Windows Server 2008 without Hyper-V for Windows Essential Server Solutions
  请注意: SQL Server 2008 R2 Standard for small business是可以安装在Windows Server 2008 Enterprise上,但是SQL Server 2008 Standard for small business则不可以。
  2.Windows Server必须加入一个域,并且是Active Directory forest的根
  3.该域和其他域不存在信任关系
  4.该域不能有任何子域
  5.该域中的用户和设备总和不超过75
  6.客户不能同时在该域的其他操作系统中运行相同序列号的SQL Server软件
  如果检查失败,你可能看到如下信息: "Operating system supported for edition” topic.
  Clicking in the Failed status shows the following message:
  ---------------------------
  Rule Check Result
  ---------------------------
  Rule "Operating system supported for edition" failed.
  This SQL Server edition is not supported on this operating system. See SQL Server
  Books Online for information about supported operating systems for SQL Small
  Business Server edition.
  ---------------------------
  如果你发现你的服务器并没有在任何一个域中,解决这个问题的最直接的办法是利用“开始->运行->DCPROMO”为他创建一个新域。其他需要连接SQL Server的机器则不需要在这个域中。

posted @ 2014-12-05 12:19 顺其自然EVO 阅读(2939) | 评论 (0)编辑 收藏

Java不为人知的10个真相

你是不是一开始就用Java来编程的呢?还记得当年它还被称为"Oak",OO还是热门的话题,C++的用户觉得Java没有前景,applets还只是个小玩意,菊花也还是一种花的时候吗?
  我敢打赌下面至少有一半是你不清楚的。这周我们来看一下跟Java的内部实现相关的一些神奇的事情。
  1. 其实根本没有受检查异常这回事
  没错!JVM压根儿就不知道有这个东西,它只存在于Java语言里。
  如今大家都承认受检查异常就是个错误。正如Bruce Eckel最近在布拉格的的GeeCON会议上所说的,除了Java外没有别的语言会使用受检查异常这种东西,即使是Java 8的新的Streams API中也不再使用这一异常了(不然当你的lambda表达式中用到IO或者JDBC的话就得痛苦死了)。
  如何能证实JVM确实不知道这个异常?看下下面这段代码:
public class Test {
// No throws clause here
public static void main(String[] args) {
doThrow(new SQLException());
}
static void doThrow(Exception e) {
Test.<RuntimeException> doThrow0(e);
}
@SuppressWarnings("unchecked")
static <E extends Exception>
void doThrow0(Exception e) throws E {
throw (E) e;
}
}
  这不仅能通过编译,而且也的确会抛出SQLException异常,并且完全不需要用到Lombok的@SneakyThrows注解。
  更进一步的分析可以看下这篇文章,或者Stack Overflow上的这个问题。
  2. 不同的返回类型也可以进行方法重载
  这个应该是编译不了的吧?
  class Test {
  Object x() { return "abc"; }
  String x() { return "123"; }
  }
  是的。Java语言并不允许同一个类中出现两个重写等价("override-equivalent")的方法,不管它们的throws子句和返回类型是不是不同的。
  不过等等。看下Java文档中的 Class.getMethod(String, Class...)是怎么说的。里面写道:
  尽管Java语言不允许一个类中的多个相同签名的方法返回不同的类型,但是JVM并不禁止,所以一个类中可能会存在多个相同签名的方法。这添加了虚拟机的灵活性,可以用来实现许多语言特性。比如说,可以通过bridge方法来实现协变返回(covariant return,即虚方法可以返回子类而不一定得是基类),bridge方法和被重写的方法拥有相同的签名,但却返回不同的类型。
  哇,这倒有点意思。事实上,下面这段代码就会触发这种情况:
  abstract class Parent<T> {
  abstract T x();
  }
  class Child extends Parent<String> {
  @Override
  String x() { return "abc"; }
  }
  看一下Child类所生成的字节码:
// Method descriptor #15 ()Ljava/lang/String;
// Stack: 1, Locals: 1
java.lang.String x();
0  ldc <String "abc"> [16]
2  areturn
Line numbers:
[pc: 0, line: 7]
Local variable table:
[pc: 0, pc: 3] local: this index: 0 type: Child
// Method descriptor #18 ()Ljava/lang/Object;
// Stack: 1, Locals: 1
bridge synthetic java.lang.Object x();
0  aload_0 [this]
1  invokevirtual Child.x() : java.lang.String [19]
4  areturn
Line numbers:
[pc: 0, line: 1
  在字节码里T其实就是Object而已。这理解起来就容易多了。
  synthetic bridge方法是由编译器生成的,因为在特定的调用点Parent.x()签名的返回类型应当是Object类型。如果使用了泛型却没有这个bridge方法的话,代码的二进制形式就无法兼容了。因此,修改JVM以支持这个特性貌似更容易一些(这顺便还实现了协变返回),看起来还挺不错 的吧?
  你有深入了解过Java语言的规范和内部实现吗?这里有许多很有意思的东西。

posted @ 2014-12-05 12:16 顺其自然EVO 阅读(201) | 评论 (0)编辑 收藏

做好项目沟通计划

 回想一下你所经历的项目,有没有出现过以下这样的情况:客户在检查项目阶段成果时,指出曾经要求的某个产品特性没有包含在其中,并且抱怨说早就以口头的方式反映给了项目组的成员,糟糕的是作为项目经理的你却一无所知,而那位成员解释说把这点忘记了;或者,你手下的程序员在设计评审时描述了他所负责的模块架构,然而软件开发出来后,你发现这和你所理解的结构大相径庭……
  可能你遇到的情况比上面谈到的还要复杂。问题到底出在哪儿呢?其实很简单,就两个字——沟通。以上这些问题都是由于沟通引起的,沟通途径不对导致信息没有到达目的地。“心有灵犀一点通”可能只是一种文学描绘出的美妙境界。在实际生活中,文化背景、工作背景、技术背景可以造成人们对同一事件理解方式偏差很大。
  在项目中,沟通更是不可忽视。项目经理最重要的工作之一就是沟通,通常花在这方面的时间应该占到全部工作的75%~90%.良好的交流才能获取足够的信息、发现潜在的问题、控制好项目的各个方面。
  沟通管理的体系
  一般而言,在一个比较完整的沟通管理体系中,应该包含以下几方面的内容:沟通计划编制、信息分发、绩效报告和管理收尾。沟通计划决定项目干系人的信息沟通需求:谁需要什么信息,什么时候需要,怎样获得。信息发布使需要的信息及时发送给项目干系人。绩效报告收集和传播执行信息,包括状况报告、进度报告和预测。项目或项目阶段在达到目标或因故终止后,需要进行收尾,管理收尾包含项目结果文档的形成,包括项目记录收集、对符合最终规范的保证、对项目的效果(成功或教训)进行的分析以及这些信息的存档(以备将来利用)。
  项目沟通计划是项目整体计划中的一部分,它的作用非常重要,也常常容易被忽视。很多项目中没有完整的沟通计划,导致沟通非常混乱。有的项目沟通也还有效,但完全依靠客户关系或以前的项目经验,或者说完全靠项目经理个人能力的高低。然而,严格说来,一种高效的体系不应该只在大脑中存在,也不应该仅仅依靠口头传授,落实到规范的计划编制中很有必要。因而,在项目初始阶段也应该包含沟通计划。
  设想一下,当你被任命接替一个项目经理的职位时,最先做的应该是什么呢?召开项目组会议、约见客户、检查项目进度……都不是,你要做的第一件事就是检查整个项目的沟通计划,因为在沟通计划中描述了项目信息的收集和归档结构、信息的发布方式、信息的内容、每类沟通产生的进度计划、约定的沟通方式等等。只有把这些理解透彻,才能把握好沟通,在此基础之上熟悉项目的其它情况。
  在编制项目沟通计划时,最重要的是理解组织结构和做好项目干系人分析。项目经理所在的组织结构通常对沟通需求有较大影响,比如组织要求项目经理定期向项目管理部门做进展分析报告,那么沟通计划中就必须包含这条。项目干系人的利益要受到项目成败的影响,因此他们的需求必须予以考虑。最典型也最重要的项目干系人是客户,而项目组成员、项目经理以及他的上司也是较重要的项目干系人。所有这些人员各自需要什么信息、在每个阶段要求的信息是否不同、信息传递的方式上有什么偏好,都是需要细致分析的。比如有的客户希望每周提交进度报告,有的客户除周报外还希望有电话交流,也有的客户希望定期检查项目成果,种种情形都要考虑到,分析后的结果要在沟通计划中体现并能满足不同人员的信息需求,这样建立起来的沟通体系才会全面、有效。
  语言、文字还是“形象”
  项目中的沟通形式是多种多样的,通常分为书面和口头两种形式。书面沟通一般在以下情况使用:项目团队中使用的内部备忘录,或者对客户和非公司成员使用报告的方式,如正式的项目报告、年报、非正式的个人记录、报事帖。书面沟通大多用来进行通知、确认和要求等活动,一般在描述清楚事情的前提下尽可能简洁,以免增加负担而流于形式。口头沟通包括会议、评审、私人接触、自由讨论等。这一方式简单有效,更容易被大多数人接受,但是不象书面形式那样“白纸黑字”留下记录,因此不适用于类似确认这样的沟通。口头沟通过程中应该坦白、明确,避免由于文化背景、民族差异、用词表达等因素造成理解上的差异,这是特别需要注意的。沟通的双方一定不能带有想当然或含糊的心态,不理解的内容一定要表示出来,以求对方的进一步解释,直到达成共识。除了这两种方式,还有一种作为补充的方式。回忆一下体育老师授课,除了语言描述某个动作外,他还会用标准的姿势来教你怎么做练习,这是典型的形体语言表达。像手势、图形演示、视频会议都可以用来作为补充方式。它的优点是摆脱了口头表达的枯燥,在视觉上把信息传递给接受者,更容易理解。
  两条关键原则
  在项目中,很多人也知道去沟通,可效果却不明显,似乎总是不到位,由此引起的问题也层出不穷。其实要达到有效的沟通有很多要点和原则需要掌握,尽早沟通、主动沟通就是其中的两个原则,实践证明它们非常关键。
  曾经碰到一个项目经理,检查团队成员的工作时松时紧,工期快到了和大家一沟通才发现进度比想象慢得多,以后的工作自然很被动。尽早沟通要求项目经理要有前瞻性,定期和项目成员建立沟通,不仅容易发现当前存在的问题,很多潜在问题也能暴露出来。在项目中出现问题并不可怕,可怕的是问题没被发现。沟通得越晚,暴露得越迟,带来的损失越大。
  沟通是人与人之间交流的方式。主动沟通说到底是对沟通的一种态度。在项目中,我们极力提倡主动沟通,尤其是当已经明确了必须要去沟通的时候。当沟通是项目经理面对用户或上级、团队成员面对项目经理时,主动沟通不仅能建立紧密的联系,更能表明你对项目的重视和参与,会使沟通的另一方满意度大大提高,对整个项目非常有利。
 保持畅通的沟通渠道
  沟通看似简单,实际很复杂。这种复杂性表现在很多方面,比如说,当沟通的人数增加时,沟通渠道急剧增加,给相互沟通带来困难。典型的问题是“过滤”,也就是信息丢失。产生过滤的原因很多,比如语言、文化、语义、知识、信息内容、道德规范、名誉、权利、组织状态等等,经常碰到由于工作背景不同而在沟通过程中对某一问题的理解产生差异。
  如果深层次剖析沟通,其实可以用一个模型来表示:
  从沟通模型中可以看出,如果要想最大程度保障沟通顺畅,当信息在媒介中传播时要尽力避免各种各样的干扰,使得信息在传递中保持原始状态。信息发送出去并接收到之后,双方必须对理解情况做检查和反馈,确保沟通的正确性。
  如果结合项目,那么项目经理在沟通管理计划中应该根据项目的实际明确双方认可的沟通渠道,比如与用户之间通过正式的报告沟通,与项目成员之间通过电子邮件沟通;建立沟通反馈机制,任何沟通都要保证到位,没有偏差,并且定期检查项目沟通情况,不断加以调整。这样顺畅、有效的沟通就不再是一个难题。

posted @ 2014-12-05 12:15 顺其自然EVO 阅读(211) | 评论 (0)编辑 收藏

SQL Server配置管理WMI问题

今天在打开数据库的时候,连接不上。一看错误就知道肯定是SQL Server的服务没开启,所以自然而然的去SQL Server配置管理中去打开,但是打开配置管理器的时候出现了下面的错误:
  每次连接数据库的时候总是会出各种各样的问题,都见怪不怪了。但是这个问题还是第一次遇到呢,起初还有新鲜劲,但是这个问题捣鼓了一个下午+晚上1小时。就开始变得纠结了。为了纪念一下这个难的的问题,还是写篇博客吧。
  问题初期:新鲜劲来了, 好奇的是WMI是什么东西啊?
  WMI,Windows管理规范(Windows Management Instrumentation) 是一项核心的Windows管理技术;用户可以使用WMI管理本地和远程计算机。
  既然提示无法连接到WMI提供程序,那就是服务没开启呗。先查看WMI服务: 计算机—>管理—>双击服务—>找到WMI
  第二,去网上找了相关的问题,大部分都是给出这三种解决方案:
  1.权限问题:管理员(administrator)没有 network service的权限,所以 WMI无法打开。
  右击“我的电脑”-->“管理”
  在“本地用户和组”内的Administrators组上双击,出现添加属性对话框。
  单击“添加”按钮,出现添加用户对话框
  单击“高级”按钮,再单击“搜索”(或是“立即查找”)按钮。注:此'NT AUTHORITY\NETWORK SERVICE'用户为系统内置帐户,无法直接添加。
  在“搜索结果”内选择“Network Service”用户后,单击“确定”
  经测试,此方法无效!问题依然存在!
  2.检查一下 windows下的system32 中是否有framedyn.dll这个系统文件,如果没有到system32 下的wbem文件中拷贝framedyn.dll到system32 目录下。 我进到system32目录找framedyn.dll文件,果然没有找到,再进入system32\wbem目录,找framedyn.dll,拷贝到system32目下。
  经查找,有该文件!
  3.在doc命令中输入:mofcomp.exe "C:\Program Files\Microsoft SQL Server\90\Shared\sqlmgmproviderxpsp2up.mof"
  但是运行之后,出现了下面的错误:
  提示找不到文件,在网上查找问题,都是这三种解决方案。捣鼓了一下午之后,感觉自己快要放弃的时候,这时候看到八期的师哥过来了,拉着他一起帮忙解决。同样是查找相关的问题。
  捣鼓了一段时间还是不行。此时已经能明确的确定引起这个问题的主要原因是sqlmgmproviderxpsp2up.mof 这个文件。该文件的作用主要是由于上一次SQL安装失败之后,将存储在该文件之中,所以需要进行更新该文件。
 后来又发现有个小小的问题,就是有的解决方案给出的路径是不一样的。有的是:mofcomp.exe "C:\Program Files(x86)\Microsoft SQL Server\90\Shared\sqlmgmproviderxpsp2up.mof" 或者是 mofcomp.exe "C:\Program Files\Microsoft SQL Server\100\Shared\sqlmgmproviderxpsp2up.mof" 。
  注意观察他们的区别,这时候就知道肯定是路径上的问题。但是这个文件该去哪找呢?想查一下sqlmgmproviderxpsp2up.mof  这个文件,但是网上都没有介绍。 正当再次要放弃的时候,观察SQL Server的目录组织结构。
  既然有人在90和100中找到了,那为什么不到110 下面去找呢。最后在该文件下找到了sqlmgmproviderxpsp2up.mof  这个文件。
  运行结果:
  主要原因是路径上的错误,sqlmgmproviderxpsp2up.mof 这个文件的路径,在每个系统上存放的路径是不一样的。
  注意Program Files(x86)和Program Files的区别。
  在64位系统的系统盘中会存在program files和program files(x86)两个文件夹。前者用来存放64位文件,后者用来存放32位文件。这两个文件夹的存在使得目前64为操作系统可兼容32为程序,也可以说是为了兼容32位程序,program files(x86)这个文件夹才会存在。
  所以,在遇到解决路径上问题的时候一定要事先了解这些基本知识。同时在遇到问题的寻求解决方案的时候,一定不要一味的相信别人的,要慎思根据自己的实际情况来解决。

posted @ 2014-12-05 12:14 顺其自然EVO 阅读(269) | 评论 (0)编辑 收藏

那些年wooyun忽略的漏洞们

  新手学python系列之那些年wooyun忽略的漏洞们……
  程序执行完会整理出wooyun漏洞列表中所有被忽略的漏洞url,无奈正则太菜,没整理出漏洞标题,只列出了url。
  程序还有点bug,会打印2次url,不知道原因所在,也懒得解决了。其中bestcoding模块是在某群找到的万能编码的小程序,能省很多力气,本小程序中可以忽略不用。先贴上程序代码:
#coding:utf-8
import urllib
import urllib2
import re,sys
import bestcoding
import time
def wooyun():
for i in range(1,800):
page=str(i)
vullist='http://www.wooyun.org/bugs/page/'+page
vulpage=urllib2.urlopen(vullist).read()
p=re.compile(r'bugs/.*\d{6}')
for bugpath in p.findall(vulpage):
try:
time.sleep(1)
bugurl="http://www.wooyun.org/"+bugpath
bugpage=urllib2.urlopen(bugurl).read()
bugzt=bugpage.find("厂商忽略漏洞")
if bugzt>0:
print bugurl
else:
pass
except:
print "Url error"
if __name__=='__main__':
wooyun()
  万能编码程序代码也贴上:
def getCodeStr(result):
#gb2312
try:
myResult=result.decode('gb2312').encode('gbk','ignore')
return myResult
except:
pass
#utf-8
try:
myResult=result.decode('utf-8').encode('gbk','ignore')
return myResult
except:
pass
#unicode
try:
myResult=result.encode('gbk','ignore')
return myResult
except:
pass
#gbk
try:
myResult=result.decode('gbk').encode('gbk','ignore')
return myResult
except:
pass
#big5
try:
myResult=result.decode('big5').encode('gbk','ignore')
return myResult
except:
pass

posted @ 2014-12-05 12:12 顺其自然EVO 阅读(178) | 评论 (0)编辑 收藏

Selenium WebDriver处理Table

 首先,html table是由 table 元素以及一个或多个 tr、th 或 td 元素组成。
  for example:
  这是一个简单的html table:
  源码如下:
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>for selenium test </title>
</script>
</head>
<body>
<div align="center">
<h4 align="left">               table head:</h4>
<table border="2" width="90%" id="table138" bordercolorlight="#CCCCCC" cellspacing="0" cellpadding="0" bordercolordark="#CCCCCC" style="border-collapse: collapse">
<tr align="center">
<td height="26" width="10%" align="center" bgcolor="#CCEEAA" ><Strong>Test Case ID</Strong></td>
<td  height="26" width="35%" align="center" bgcolor="#EEEEAA" ><Strong>Steps</Strong></td>
<td  height="26" width="30%" align="center" bgcolor="#00EEEE" ><Strong>Expect</Strong></td>
<td  height="26" align="center" bgcolor="#EE00EE" ><Strong>Actual</Strong></td>
<td  height="26" align="center" bgcolor="#00EE00" ><Strong>PASS/FAIL</Strong></td>
</tr>
<tr align="center">
<td height="26" align="center" bgcolor="#CCEEAA">ENT#-12345</td>
<td  height="26" align="left" bgcolor="#EEEEAA" >1.open baidu.com ,wait for the page load</br>2.enter "selenium" in the input box" </br>3.click search button  </td>
<td  height="26" align="left" bgcolor="#00EEEE" >"Selenium - Web Browser Automation" link be the first of the search result</td>
<td  height="26" align="left" bgcolor="#EE00EE" >Selenium - Web Browser Automation is appear the page,but is not the first link</td>
<td  height="26" align="center" bgcolor="#00EE00" >FAIL</td>
</tr>
</tr>
<tr align="center">
<td height="26" align="center" bgcolor="#CCEEAA">ENT#-12346</td>
<td  height="26" align="left" bgcolor="#EEEEAA" >1.click the "Selenium - Web Browser Automation" link</br>2.wait for page load</td>
<td  height="26" align="left" bgcolor="#00EEEE" >open the official home page of selenium</td>
<td  height="26" align="left" bgcolor="#EE00EE" >selenium home page is load </td>
<td  height="26" align="center" bgcolor="#00EE00" >FAIl</td>
</tr>
</tr>
<tr align="center">
<td height="26" align="center" bgcolor="#CCEEAA">ENT#-12347</td>
<td  height="26" align="left" bgcolor="#EEEEAA" >1.click baidu snapshot of selenium web page </br>2. wait for the page load</td>
<td  height="26" align="left" bgcolor="#00EEEE" >the snapshot web page can be show up</td>
<td  height="26" align="left" bgcolor="#EE00EE" >the snapshot web page is show up</td>
<td  height="26" align="center" bgcolor="#00EE00" >PASS</td>
</tr>
</table>
</div>
</body>
</html>
那么问题就来了,我想通过xpath获取这个table的每一个cell的值(比如获取expect的值),该怎么做。
  如果这个表格被改变了,增加或删除一些行列该如何处理?
  我的solution是获取table的base xpath,这个所谓的base xpath是指这个table的第n行第m列相同的部分,然后通过传入n,m获取返回值
public static String tableCell(WebDriver driver,int row, int column)
{
String text = null;
//avoid get the head line of the table
row=row+1;
String xpath="//*[@id='table138']/tbody/tr["+row+"]/td["+column+"]";
WebElement table=driver.findElement(By.xpath(xpath)); //*[@id="table138"]/tbody/tr[1]/td[1]/strong
text=table.getText();
return text;
}
  所以,tableCell(driver,1,2)就能返回

posted @ 2014-12-05 12:11 顺其自然EVO 阅读(345) | 评论 (0)编辑 收藏

2014阿里巴巴测试开发工程师面试经验(内推-电话面试)

 本文是一份2014阿里巴巴测试开发工程师面试经验(内推-电话面试),感兴趣的同学参考下。
  这次跟淘宝的不一样,电面的是一个很温柔的姐姐。之前给我打了两次电话确定电面时间。当第二次我说在路上可能信号不好的时候。姐姐很爽快地答应过会再给我打。
  刚才是让我做下自我介绍。我就说了下自己的项目经历还有得过的一些奖和证书。感觉这块说的不好。没有突出自己技术上的特长,也没有说自己对阿里巴巴的热爱。下次切忌。
  后来姐姐根据我的项目经历问了我一些项目里的知识。问我的特长,我就提到数据库方面。她问我数据库最擅长那块,回答是做视图。然后就说了下视图的优点:
  视图的作用
  * 简单性。看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
  * 安全性。通过视图用户只能查询和修改他们所能见到的数据。数据库中的其它数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:
  使用权限可被限制在基表的行的子集上。 使用权限可被限制在基表的列的子集上。 使用权限可被限制在基表的行和列的子集上。 使用权限可被限制在多个基表的连接所限定的行上。 使用权限可被限制在基表中的数据的统计汇总上。 使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。
  * 逻辑数据独立性。视图可帮助用户屏蔽真实表结构变化带来的影响。(附上视图的作用,进攻参考)
  其实都是学过的知识点,自己总结的很少。还是要经常温习的。虽然说用的时候用不到,但是面试总结的时候很有帮助。
  数据库对象包括:表、索引、视图、存储过程、触发器
  存储过程是数据库中一个重要的对象。是一组为了完成特定功能的SQL语句集。作用是
  1.存储过程是在创造时进行编译的。以后每次执行存储过程不需要重新编译,而一般SQL语句需要每执行一次就编译一次。
  2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
  3.存储过程可以重复使用,可减少数据库开发人员的工作
  4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权主要有可重复利用,安全性
  存储过程和函数的区别:
  1.存储过程中定义的参数和输出参数可以是任何类型,函数定义的参数又限制且没有输出参数。
  2.函数可以用于表达式、check约束、default约束中,存储过程不可以。
  3.存储过程中可以有T-SQL语句,函数中不可以,也不能创建任何表。
  技术方面问完之后,面试官姐姐让我带个笔做些题:
  第一个是关于四棵树,怎么栽种这四棵树可以使任意两棵之间的举例都相等。是关于三棱柱的问题。
  接下来就问我有没有测试经验,知不知道有什么测试方法:
  回答了静态测试和动态测试
  然后根据测试,提出了一个小的测试问题。
  给你一个圆珠笔,这个圆珠笔你可以按,可以换芯。让你做一下功能测试。这个可以根据题目详细写。
  最后让自己提问问题。总体来说面试官姐姐还是很好的,只问我擅长了,有时候还给予我提醒。不错的。写下经历,也算是对自己的总结。现在都在紧锣密鼓的找工作,自己最想找的信息就是往期别人的笔试面试经历啦~希望对大家有帮助

posted @ 2014-12-05 12:10 顺其自然EVO 阅读(332) | 评论 (0)编辑 收藏

AlwaysOn可用性组功能测试(2)-SQL Server群集故障转移

 三、 SQL Server群集故障转移对AlwaysOn可用性组的影响
  1. 主副本在SQL Server群集CLUSTEST03/CLUSTEST03上
  1.1将节点转移Server02.以下是故障转移界面。
  1.2 服务脱机,alwaysOn自然脱机,但侦听IP并没有脱机。
  1.3 SQL服务联机后,侦听IP【10.0.0.224】会脱机重启,alwaysOn资源组联机
 1.4 转移后恢复正常,连接正常,语句执行正常。
  2. 主副本在SERVER03的服务上
  2.1 当前主副本在SERVER03上,SQL Server故障转移对可用性组没有影响。以下转移脱机界面。
  测试总结
  A、 若主副本在SQL 群集上,当服务脱机时候,侦听IP并不会脱机,AlwaysOn会脱机;可用组不可用。
  B、 当服务重新联机,侦听IP会脱机重新联机,侦听IP会发生顺断。
  C、 重新联机到AlwaysOn连接过程使用20秒左右。
  D、 当主副本不在SQL群集上,群集的故障转移对可用性组没有影响。
相关文章
AlwaysOn可用性组功能测试(1)-故障转移测试

posted @ 2014-12-05 11:41 顺其自然EVO 阅读(746) | 评论 (0)编辑 收藏

所谓的成就感,想想我们测过的那些功能

 晚上电话和同事讨论一个工作上的事情,结束的时候聊起这样的一个话题,完全是有感而发,也觉得心有戚戚焉。
  不是什么很特别的事情,就是我们每天在做的工作,测功能,测版本,然后发布,每个月在做,每周也在做。正是因为这样的平常,很多时候我们就只看到这个工作本身。
  想想这样的两种状态吧:
  1. 我们很理解为什么要做这样的功能,有什么意义(实际意义,战略意义也好),认可或者部分认可它的价值。
  做完了,上线了,有人告诉我们这个功能有多少人在用,带来了什么效益(新用户,PV/UV,订单,交易额)?
  作为实际的参与者,我们被尊重和感谢。
  有哪些成功的地方,哪些值得优化的地方,下一步的计划是什么?对发布时间有什么要求?
  2. 被告知要做这样的一个功能,然后要求在什么时间点发布,尽量压缩开发和测试的时间,请大家尽力支持。实在不行就安排加班吧。
  上线后,继续做下一期,或者下一个功能。
  其实不只是测试,对于开发也是一样。
  以上两种状态会不断的重复。对比下这两种状态吧,第一个更像是一个参与者,一个创造者。而第二种,即便不是外包,其实也很像是外包。我对做外包的人没有偏见,但是始终觉得外包这种模式做不出优秀的东西,基于体制和人性。
  最近有一个观念,所有依赖于人的服务行业,比如餐饮,中介,软件研发,其实都是重度的依赖于人来创造价值的服务行业。要想做好,一定是要想办法激发人的投入度。
  刀塔传奇的公司莉莉丝的创始人王信文有篇blog(那些和钱有关的事  http://www.verypig.com/?p=576)读起来很有感受,比如这一段,“我仔细想了想,发现了一条规律:如果是标准化商品,能省则省;如果是购买服务,那么想省钱常常不会取得好效果。”  确实如此,看看美国,很多标准化的商品价格确实够便宜,和收入比,但是雇一个人就很贵。我觉得中国也是这个趋势。
  这样的例子还有很多,比如海底捞,服务员被照顾好了,客人就被照顾好了,而且不程式化和冷冰冰。
  再举一个中介的例子,可以拿北京的链家和上海的德佑比较下其他比较杂的一些。
  激发人的也不只是钱,至少大部分公司一年最多也就调两次薪,光这个激励能持续多久?又有多少人投入的去做一件事情之前会算一下我的薪资水平值不值得这么做?
  很多人都说自己只是个打工的,其实大家内心里都很在意,我们做出来的这个东西有人用吗,cool吗,牛x吗?这本身就是工作的一种回报。
  很多人也许想说,我们一样可以制定各种各样的KPI,更细化的指标来考核,来衡量和要求服务和产出的质量。
  这确实是一条应该走的路,但是是一条适可而止的路。任何一个经历过实际的项目或者带过一个稍大一点团队的人都会理解,如果那样真的可行,成功的项目和失败的项目就不会差别那么明显。
  如果设定一个指标是要求内容装载到杯壁,那么就有可能得到一个丰满或者干瘪的结果,而这,取决于人。

posted @ 2014-12-03 13:50 顺其自然EVO 阅读(221) | 评论 (0)编辑 收藏

仅列出标题
共394页: First 上一页 4 5 6 7 8 9 10 11 12 下一页 Last 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜