再长的路,一步步也能走完。 再短的路,不迈开双脚也无法到达。 成功是坚持!

发布新日志

  • 面试

    2007-07-10 11:20:13

    1、请谈谈你自己。

    我在高科技行业的公司工作了四年,在过去的两年中,我一直在做网络开发方面的工作。我非常熟悉服务器端的软件开发如Javascrīpt,ASP,VB,HTML and SQL Server,我希望自己能在一个有竞争力的公司工作,把自己的经验好好的运用,与团队一起发展。

    这是最好的答案,通过列举能充分说明知识技能和个人品质方面的实例,你会给一个面试官关于你的整体印象,而且还有效的运用了行业内的术语。

    2、你认为自己有什么缺点?

    我最大的弱点是,对那些没有秩序感的人,可能缺乏足够的耐心。我相信我的组织才能可以帮助企业更快地实现目标,而且有时候,我处理复杂问题的能力也能影响我的同事。

    这样回答很好。首先,这个回答跟工作上可能遇到的问题结合起来了。其次,它所表达的弱点实际上很容易被理解为长处。最后,它指出了这个求职者的长处和弱点对企业和其他员工的好处。

    3、你的老板怎么评价你和你的工作风格?

    她说我工作很主动。看问题全面,做事有计划,而且总是能按时完成工作。此外,我能集中精力做事情,不容易受其它的干扰。

    这是最好的答案。在这个答案中,给出了三个非常积极的方面,而且也给出了答案的理由。通过给出细节,让面试官更好的了解你是如何看待别人的看法及你认为你的哪些工作风格好。

    4、讲述一次你学习某种系统和程序的经历。

    当我读学士学位的时候,我的工作是每周30小时,完成19门课,当时这家公司正在由C语言过渡到C++语言,我没有时间参加培训课程,我完全是通过在线课程学习的这部分内容,每天工作到很晚。通过努力,我通过了测试并且继续了我的学习目标么。

    这是最好的答案,它证明你的主动性、决心和灵活性,这对于许多工作都是很重要的。能同时处理五件以上的事情是在这个领域工作的前提条件。

    5、举一个例子:你从始至终负责的一个项目。

    我曾开发一个收集客户资料的数据库。在资料收集齐之后,我用EXCEL 表格进行分析,并写出概要和评估报告。我和客户的市场部门一起工作,这部分信息可以用来监测客户行为,为未来的计划做铺垫。

    这是最好的答案,它给出了一个详细的案例表明你如何从始至终处理一个项目。展示出你的沟通能力、分析能力、分析技巧、组织和协调能力。

    6、你什么时候最有积极性?

    我的第一份工作是在一家刚成立的公司。我接受了严格的培训,以了解产品和客户。事实上我们是与客户一起工作。这需许多的自我激励和主动性。我对整个过程都很有兴趣,即使压力很大,但我们都走过来了。

    这是最好的答案。它提出了精力和热情。公司都需要那种精力旺盛的员工。这样的回答表明你很有主动性,精力充沛、能承受压力。而且它还给出了你最有积极性的例子。

    7、你的什么经历让你能胜任这份工作?

    在过去的四年中,我一直在电子商务行业工作。我精通Java ,而且HTML的工作能力也很强。我有很好的沟通能力,我认为在一个团队中我可以做很多工作。

    这是最好的答案。这个答案告诉面试官你的经验和技能可能为这个职位带来的价值。除了技术知识以外,交流的能力和团队合作精神对于大多数工作也是很重要的。

    8、你如何看待事业和家庭?

    作为职业妇女,在角色分配上我会有清醒的意识。

    这样说,一来表明你知道择业后面临的压力,二来也可以让对方确认你作为职业妇女的素质。常言道:对症下药--只有不回避问题,才能找到解决问题的出路。你能清醒认识精明强干的职业生涯与相夫教子的贤妻良母之间的冲突和矛盾,就说明你对此有足够的工作及生活准备,从而不会因不预见困难而在问题来临时出现顾此失彼的现象。自己能预计后果,那他们还有什么可担心的?。

    9、能否说一下你离职的原因?

    这份新工作在我事业发展中,能提供更佳的学习机会。

    这样说即表现了你在这个行业发展的诚意,也表达了你对事业的看重,而非"骑驴找马"之辈。

    10、你怎样影响其他人接受你的看法?

    这是多年来我一直非常努力探索的一个领域。对于好的想法,甚至是伟大的想法,人们有时并不接受。我现在认识到这样一个事实,那就是你表达想法的方式同想法本身一样重要。当我试图影响别人时,我一般会假设自己处在他们的位置上,让自己从他们的角度来看待问题。然后我就能够以一种更可能成功的方式向他们陈述我的想法。

    这个回答很好。它表明你理解人际沟通的复杂性,知道使别人改变看法具有一定的难度,而且你知道影响别人时运用策略很重要,而且也能够采用合理的方式说服别人。同时,这个回答还表明,你知道在沟通困难的情况下,沟通方式和沟通内容一样重要。

    11、你的期望薪金是多少?

    你们有否为这个职位设定一个薪金范围呢?

    让对方先说一个数字,这既可避免因自己开出没有把握的高价而错失良机,又可避免你开价过低造成遗憾。在对方谈到一个确定的数字后,你再根据自身的资历及人才市场上的薪金行情进行客观分析,在此基础上进行合理报价。这样价位出入不会太大,合作的概率也会增加。

    12、你还有什么问题要问吗?(这通常是在面试快结束时面试官要问的问题)

    是的。你能告诉我在这样的公司工作感觉是什么样子的?技术人员怎么看这家公司?在这个职位工作典型的一周是怎么样的?

    这是最理想的答案。问问题是很重要的。事实上,在许多情况下,他们在仔细的听你说什么和不说什么,这给你提供了一个更多了解公司的机会。你也是在面试他们,就像他们面试你一样。这是最适合你的位置吗?听他们问你的问题,根据他们问的问题,明确的问你想知道的。

  • 测试用例模板(Test Case Template)

    2007-06-18 16:24:17

    测试用例模板(Test Case Template)

    ┏━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
    ┃用例编号  │                           ┃
    ┠──────┼───────────────────────────┨
    ┃测试优先级 │                           ┃
    ┠──────┼───────────────────────────┨
    ┃用例摘要  │                           ┃
    ┠──────┼───────────────────────────┨
    ┃测试类型  │                           ┃
    ┠──────┼───────────────────────────┨
    ┃用例类型  │                           ┃
    ┠──────┼───────────────────────────┨
    ┃用例设计者 │                           ┃
    ┠──────┼───────────────────────────┨
    ┃设计日期  │                           ┃
    ┠──────┼───────────────────────────┨
    ┃对应需求编号│                           ┃
    ┠──────┼───────────────────────────┨
    ┃对应UI   │                           ┃
    ┠──────┼───────────────────────────┨
    ┃对应UC   │                           ┃
    ┠──────┼───────────────────────────┨
    ┃版本号   │                           ┃
    ┠──────┼───────────────────────────┨
    ┃对应开发人员│                           ┃
    ┠──────┼───────────────────────────┨
    ┃前置条件  │                           ┃
    ┠──────┼───────────────────────────┨
    ┃测试方法  │                           ┃
    ┠──────┼───────────────────────────┨
    ┃输入数据  │                           ┃
    ┠──────┼───────────────────────────┨
    ┃执行步骤  │                           ┃
    ┃      │                           ┃
    ┃      │                           ┃
    ┃      │                           ┃
    ┃      │                           ┃
    ┃      │                           ┃
    ┃      │                           ┃
    ┃      │                           ┃
    ┃      │                           ┃
    ┃      │                           ┃
    ┃      │                           ┃
    ┠──────┼───────────────────────────┨
    ┃预期输出  │                           ┃
    ┠──────┼───────────────────────────┨
    ┃实际结果  │                           ┃
    ┠──────┼───────────────────────────┨
    ┃测试日期  │                           ┃
    ┠──────┼───────────────────────────┨
    ┃结论    │                           ┃
    ┗━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

    例子:

    ┏━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
    ┃用例编号  │BOSS_ FS_ MARKETING_NEW_01P            ┃
    ┠──────┼───────────────────────────┨
    ┃测试优先级 │高(还有“较高、中、较低、低”几个等级)       ┃
    ┠──────┼───────────────────────────┨
    ┃用例摘要  │新增营销记录                     ┃
    ┠──────┼───────────────────────────┨
    ┃测试类型  │功能性测试(对应还有“安全性测试”等)        ┃
    ┠──────┼───────────────────────────┨
    ┃用例类型  │基本事件(对应还有“备选事件”、“异常事件”)    ┃
    ┠──────┼───────────────────────────┨
    ┃用例设计者 │songfun                       ┃
    ┠──────┼───────────────────────────┨
    ┃设计日期  │2005-04-25                     ┃
    ┠──────┼───────────────────────────┨
    ┃对应需求编号│REQ_ MARKETING_NEW_01               ┃
    ┠──────┼───────────────────────────┨
    ┃对应UI   │Marketing.htm                   ┃
    ┠──────┼───────────────────────────┨
    ┃对应UC   │UC_ MARKETING_NEW_01               ┃
    ┠──────┼───────────────────────────┨
    ┃版本号   │Build v0.1                     ┃
    ┠──────┼───────────────────────────┨
    ┃对应开发人员│Frank                        ┃
    ┠──────┼───────────────────────────┨
    ┃前置条件  │操作员登录营销管理系统                ┃
    ┠──────┼───────────────────────────┨
    ┃测试方法  │等价类划分(对应还有“错误猜测法”、“边界值分析”等)┃
    ┠──────┼───────────────────────────┨
    ┃输入数据  │用户名:51testing 性别:男 金额:10元 描述:aaaaaaa┃
    ┠──────┼───────────────────────────┨
    ┃执行步骤  │①.进入【营销下发】页面;               ┃
    ┃      │②.点击『增加』按钮;                 ┃
    ┃      │③.输入相应数据;                   ┃
    ┃      │④.点击『确定』按钮;                 ┃
    ┃      │⑤.在后台数据库(test/test@testDB)输入查询语句验证:┃
    ┃      │  select * from MarketingTab where ID='1001' ┃
    ┃      │                           ┃
    ┠──────┼───────────────────────────┨
    ┃预期输出  │㈠.执行步骤④后,页面弹出添加成功提示信息框;     ┃
    ┃      │㈡.执行步骤⑤后查询数据库,记录确实添加成功且数据无误 ┃
    ┃      │                           ┃
    ┠──────┼───────────────────────────┨
    ┃实际结果  │符合预期                       ┃
    ┠──────┼───────────────────────────┨
    ┃测试日期  │2005-05-01                     ┃
    ┠──────┼───────────────────────────┨
    ┃结论    │                           ┃
    ┗━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  • 在所有浏览器下一次性测试您的网站

    2007-06-14 17:35:28

    网站的界面布局在各种浏览器下的显示一直是测试工程师需要面对的一个难题。目前世面上Linux浏览器30多种,Windows浏览器4种(不包括调用MSIE核心自主开发界面的),Macintosh浏览器几种。如此多的浏览器,测试工程师需要验证网站界面在各种浏览器下的布局和脚本支持,工作量之大,可想而知。
    为了降低测试工程师的工作量,现在你只需要在
    Browsershots的网站上输入网址,然后选择需要测试的浏览器。
    Browsershots背后有一系列电脑在运行着各种操作系统和各种浏览器,打开输入网址,进行截图,再返回给工程师。

  • 代码显示样式

    2007-06-12 17:53:53

    具体的代码:

    BORDER-RIGHT: #f3f3f3 1px solid; PADDING-RIGHT: 5px;
    BORDER-TOP: #f3f3f3 1px solid; PADDING-LEFT: 10px;
    PADDING-BOTTOM: 5px; MARGIN: 15px; BORDER-LEFT: #32cd32 3px solid;
    COLOR: #333; PADDING-TOP: 5px; BORDER-BOTTOM: #f3f3f3 1px solid;
    BACKGROUND-COLOR: #fff; COLOR: #222;
    FONT-FAMILY: courier new;BACKGROUND-COLOR: #fafafa

    #include "stdafx.h"
    #include

    int _tmain(int argc, _TCHAR* argv[])
    {
    JavaVM *jvm; /* 表示一个Java虚拟机 */
    JNIEnv *env; /* 指向本地方法调用接口 */
    JavaVMInitArgs vm_args; /* JDK或JRE 6的虚拟机初始化参数 */

    JavaVMOption options[4]; int n = 0;
    options[n++].optionString = "-Djava.class.path=.";

    vm_args.version = JNI_VERSION_1_6;
    vm_args.nOptions = n;
    vm_args.options = options;
    vm_args.ignoreUnrecognized = false;

    /* 加载或初始化Java虚拟机,返回Java本地调用接口
    * 指向变量 env */

    JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); // 传入C++所需的参数

    /* 使用Java本地接口调用 Main.test 方法 */
    jclass cls = env->FindClass("Main");
    jmethodID mid = env->GetStaticMethodID(cls, "test", "(I)V");
    env->CallStaticVoidMethod(cls, mid, 100);

    /* 完成工作 */
    jvm->DestroyJavaVM();

    return 0;
    }

    BORDER-RIGHT: #efefef 2px solid; PADDING-RIGHT: 0px; 
    BORDER-TOP: #efefef 2px solid; PADDING-LEFT: 0px;
    BACKGROUND: #fafafa; PADDING-BOTTOM: 5px; MARGIN: 0px;
    FONT: 90%/130% Courier New, Courier; OVERFLOW: auto;
    BORDER-LEFT: #efefef 2px solid; WIDTH: 99%; COLOR: #222;
    PADDING-TOP: 0px; BORDER-BOTTOM: #efefef 2px solid

    #include "stdafx.h"
    #include

    int _tmain(int argc, _TCHAR* argv[])
    {
    JavaVM *jvm; /* 表示一个Java虚拟机 */
    JNIEnv *env; /* 指向本地方法调用接口 */
    JavaVMInitArgs vm_args; /* JDK或JRE 6的虚拟机初始化参数 */

    JavaVMOption options[4]; int n = 0;
    options[n++].optionString = "-Djava.class.path=.";

    vm_args.version = JNI_VERSION_1_6;
    vm_args.nOptions = n;
    vm_args.options = options;
    vm_args.ignoreUnrecognized = false;

    /* 加载或初始化Java虚拟机,返回Java本地调用接口
    * 指向变量 env */

    JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); // 传入C++所需的参数

    /* 使用Java本地接口调用 Main.test 方法 */
    jclass cls = env->FindClass("Main");
    jmethodID mid = env->GetStaticMethodID(cls, "test", "(I)V");
    env->CallStaticVoidMethod(cls, mid, 100);

    /* 完成工作 */
    jvm->DestroyJavaVM();

    return 0;
    }
  • 『学习笔记』Tcl/Tk 组合教程(第二版)系列之一

    2007-06-12 17:23:18

    Tcl是Tool Command Language的缩写。Tcl包含两个部分:脚本语言和解释器。Tk是Tcl的图形用户界面工具包,用于定义Tcl命令、创建和操作用户界面部件。

    Tcl书籍:
    1、《Tcl and the Tk Toolkit》,针对Tcl扩展的C编程方面有详细的探讨;
    2、《Exploring Expect》,主要介绍Expect的使用;
    3、《Graphical Appaliction with Tcl & Tk》,探讨Tcl/Tk在Windows平台下的GUI应用;
    4、《Tcl/Tk Tools》,阐述Tcl的扩展,包括数据库接口、面向对象语言以及Tk部件;
    5、《CGI Developers Resource,Web Programming with Tcl and Perl》,介绍网站编程的Tcl解决方案;
    6、《Effective Tcl/Tk Programming》,以范例和程序设计的图表说明Tcl/Tk。


    Tcl命令的基本语法为:

    Command arg1 arg2 arg3 ...
    (Command代表内置命令的名称或Tcl进程。空白区域(空格和跳格)用来分开命令名称与命令参数,换行和分号用来结束一条命令,命令的参数都是字符串。)

    Tcl具有组合和替代语法:

    1、组合(由花括号“{}”分隔)
    例程: puts stdout {"Hello,World!"}
    puts类似JAVA的print,C++语言的Cout;stdout用来标识标准输出流,stderr用来标识标准出错输出,stdin表示标准输入。
    set命令给变量赋值。语法:set variable_name value(变量名区分大小写)

    2、替代:
    (1)、变量替代(由美元符“$”分隔)例程: set var 5 set b $ var
    (2)、命令替代(由方括号“[]”分隔)例程: set len[string length foobar]
    (3)、反斜杠替代(由反斜杠“\”分隔)例程: set dollar \$ foo set x $ dollar
    多行之间延续长命令例程: set totalLength [expr[string length $ one] + \ [string length $ two]]

    花括号和双引号的组合:双引号和花括号的差别在于双引号允许组内替代,花括号不允许。
    例程: set s Hello puts stdout “The length of $ s is[string length $ s].”
    puts stdout {The length of $ s is[string length $ s].}

    3、expr处理数学表达式(支持整数、浮点数、布尔值等数据类型。)

  • Python资料收集

    2007-06-01 14:54:33

  • MySQL查询分析器

    2007-06-01 13:48:04

  • 中文手册集锦

    2007-05-30 16:45:36

  • 对话 UNIX(转)

    2007-05-30 13:54:02

  • 在 IBM Systems 上安装 Linux 服务器(转)

    2007-05-30 10:19:42

  • 使用IBM Rational ClearCase Explorer获取基线版本

    2007-05-29 17:47:51

    IBM Rational ClearCase软件版本:7.0.0.0

    1、  打开“IBM Rational ClearCase Explorer”工具,选择Toolbox标签页中的Base ClearCase选项;

    2、点击Creat View按钮,创建新的View,弹出如下窗口;

    3、点击上图中的“下一步”按钮,出现下图的对话框;

    4、点击上图中的“Snapshot - version of VOB elements will be copied into a directory of your choosing and will be updated only when you request.”按钮,弹出如下对话框;

    5、通过“Browse”按钮选择本地保存目录,例如上图中的“D:\CCView\BaseLine\WAP_CMS_view”为当前保存目录

    6、在CCView目录下新建一个共享目录,例如:CCShare目录;

    7、点击“Advanced Options...”按钮,弹出如下的对话框;

    8、选择“Use explicit path”,并通过“Browse”按钮选择view文件的存取目录和文件名,点击“OK”按钮,返回到<图4>

    9、点击“Finish”按钮,出现如下的对话框;

    10、选择【Confirm】对话框中的“Inspect Config Spec”按钮,此时弹出设置基线版本的对话框;

    11、点击<图>中的“Edit”按钮,将需要取出的基线版本号填写在红色框内,并保存,关闭<图>对话框;

    12、在如下对话框中选取需要导出的内容,点击“OK”按钮;

    13、系统自动取基线版本,直到如下对话框产生;

    14、点击上图中的“Close”按钮,弹出如下页面;

    15、关闭以上的页面,弹出的提示栏选择“No”;

    16、基线版本获取成功,选择“Views”标签页,你应该看到你获取成功的基线版本View了,在你的本地目录下,已经有了你的基线版本文件和目录了。

  • Vi 指令大全

    2007-05-28 16:02:21

    进入vi的命令


    vi filename: 打开或新建文件,并将光标置于第一行首

    vi +n filename: 打开文件,并将光标置于第n行首

    vi + filename: 打开文件,并将光标置于最后一行首

    vi +/pattern filename: 打开文件,并将光标置于第一个与pattern匹配的串处

    vi -r filename: 在上次正用vi编辑时发生系统崩溃,恢复filename

    vi filename....filename: 打开多个文件,依次进行编辑

    移动光标类命令


    h: 光标左移一个字符

    l: 光标右移一个字符

    space: 光标右移一个字符

    Backspace: 光标左移一个字符

    k或Ctrl+p: 光标上移一行

    j或Ctrl+n: 光标下移一行

    Enter: 光标下移一行

    w或W : 光标右移一个字至字首

    b或B : 光标左移一个字至字首

    e或E : 光标右移一个字至字尾

    ): 光标移至句尾

    (: 光标移至句首

    }: 光标移至段落开头

    {: 光标移至段落结尾

    nG: 光标移至第n行首

    n+: 光标下移n行

    n-: 光标上移n行

    n$: 光标移至第n行尾

    H: 光标移至屏幕顶行

    M: 光标移至屏幕中间行

    L: 光标移至屏幕最后行

    0: 光标移至当前行首

    $: 光标移至当前行尾

    屏幕翻滚类命令


    Ctrl+u: 向文件首翻半屏

    Ctrl+d: 向文件尾翻半屏

    Ctrl+f: 向文件尾翻一屏

    Ctrl+b: 向文件首翻一屏

    nz: 将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

    插入文本类命令


    i: 在光标前

    I: 在当前行首

    a: 光标后

    A: 在当前行尾

    o: 在当前行之下新开一行

    O: 在当前行之上新开一行

    r: 替换当前字符

    R: 替换当前字符及其后的字符,直至按ESC键

    s: 从当前光标位置处开始,以输入的文本替代指定数目的字符

    S: 删除指定数目的行,并以所输入文本代替之

    ncw或nCW: 修改指定数目的字

    nCC: 修改指定数目的行

    删除命令


    ndw或ndW: 删除光标处开始及其后的n-1个字

    do: 删至行首

    d$: 删至行尾

    ndd: 删除当前行及其后n-1行

    x或X: 删除一个字符,x删除光标后的,而X删除光标前的

    Ctrl+u: 删除输入方式下所输入的文本

    搜索及替换命令


    /pattern: 从光标开始处向文件尾搜索
    pattern ?pattern: 从光标开始处向文件首搜索
    pattern n: 在同一方向重复上一次搜索命令 
    N: 在反方向上重复上一次搜索命令 
    :s/p1/p2/g: 将当前行中所有p1均用p2替代 
    :n1,n2s/p1/p2/g: 将第n1至n2行中所有p1均用p2替代 
    :g/p1/s//p2/g: 将文件中所有p1均用p2替换

    选项设置


    all: 列出所有选项设置情况

    term: 设置终端类型

    ignorance: 在搜索中忽略大小写

    list: 显示制表位(Ctrl+I)和行尾标志($)

    number: 显示行号

    report: 显示由面向行的命令修改过的数目

    terse: 显示简短的警告信息

    warn: 在转到别的文件时若没保存当前文件则显示NO write信息

    nomagic: 允许在搜索模式中,使用前面不带“\”的特殊字符

    nowrapscan: 禁止vi在搜索到达文件两端时,又从另一端开始

    mesg: 允许vi显示其他用户用write写到自己终端上的信息

    最后行方式命令


    :n1,n2 co n3: 将n1行到n2行之间的内容拷贝到第n3行下
    :n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
    :n1,n2 d: 将 n1行到n2行之间的内容删除
    :w: 保存当前文件
    :e filename: 打开文件filename进行编辑
    :x: 保存当前文件并退出
    :q: 退出vi
    :q!: 不保存文件并退出vi
    :!command: 执行shell命令command
    :n1,n2 w!command: 将文件中n1行至n2行的内容作为command的输入并执行之,
    若不指定n1,n2,则表示将整个文件内容作为command的输入 :r!command: 将命令command的输出结果放到当前行

    寄存器操作


    "?nyy: 将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字

    "?nyw: 将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字

    "?nyl: 将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字

    "?p: 取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字

    ndd: 将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中

  • 软件测试工具下载地收集

    2007-05-24 17:25:13

    1、Mercury Interactive

    Mercury LoadRunner 8.0 试用版下载

    Mercury Quality Center 8.2 下载

    Mercury QuickTest Professional 9.0 试用版下载

     

    2、IBM Rational

     

    3、Compuware

     

    4、Segue

     

    5、OpenSource

    EclEmma(Java 覆盖测试) 单元测试 白盒测试

数据统计

  • 访问量: 17506
  • 日志数: 13
  • 建立时间: 2007-05-24
  • 更新时间: 2007-07-10

RSS订阅

Open Toolbar