<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>面试题合集 on 重定向学院</title><link>https://itest2025.pages.dev/categories/%E9%9D%A2%E8%AF%95%E9%A2%98%E5%90%88%E9%9B%86/</link><description>Recent content in 面试题合集 on 重定向学院</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Tue, 17 Jun 2025 17:29:15 +0800</lastBuildDate><atom:link href="https://itest2025.pages.dev/categories/%E9%9D%A2%E8%AF%95%E9%A2%98%E5%90%88%E9%9B%86/index.xml" rel="self" type="application/rss+xml"/><item><title>接口测试面试题1</title><link>https://itest2025.pages.dev/tutorials/44-001-%E6%8E%A5%E5%8F%A3%E6%B5%8B%E8%AF%95%E9%9D%A2%E8%AF%95%E9%A2%981/</link><pubDate>Tue, 18 Jul 2017 09:30:25 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/44-001-%E6%8E%A5%E5%8F%A3%E6%B5%8B%E8%AF%95%E9%9D%A2%E8%AF%95%E9%A2%981/</guid><description>&lt;h3 id="原题图片">原题图片&lt;/h3>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://wx2.sinaimg.cn/mw690/726a2979gy1fho69rmzejj20eq0itdh4.jpg"
 data-srcset="http://wx2.sinaimg.cn/mw690/726a2979gy1fho69rmzejj20eq0itdh4.jpg, http://wx2.sinaimg.cn/mw690/726a2979gy1fho69rmzejj20eq0itdh4.jpg 1.5x, http://wx2.sinaimg.cn/mw690/726a2979gy1fho69rmzejj20eq0itdh4.jpg 2x"
 data-sizes="auto"
 alt="http://wx2.sinaimg.cn/mw690/726a2979gy1fho69rmzejj20eq0itdh4.jpg"
 title="http://wx2.sinaimg.cn/mw690/726a2979gy1fho69rmzejj20eq0itdh4.jpg" />&lt;/p>
&lt;h3 id="参考答案">参考答案&lt;/h3>
&lt;h4 id="1">1&lt;/h4>
&lt;p>tps就是吞吐量，transaction per second。&lt;/p>
&lt;p>吞吐量下降是可能因为频繁访问redis，而频繁访问redis的原因是参数过多，解决的思路很容易想到: &lt;strong>减少参数&lt;/strong>。&lt;/p>
&lt;p>我们可以把多组参数变成json字符串之类的一个参数，从而达到信息量不减少而参数个数变少的效果。&lt;/p>
&lt;h4 id="2">2&lt;/h4>
&lt;p>对称加密: 信息交换的双方使用同一个密钥加密解密，就像是用同一把钥匙开一把锁&lt;/p>
&lt;p>非对称加密&lt;/p>
&lt;p>公开密钥加密（英语：Public-key cryptography），也称为非对称加密（英语：asymmetric cryptography），是密码学的一种算法，它需要两个密钥，一个是公开密钥，另一个是私有密钥；一个用作加密的时候，另一个则用作解密。使用其中一个密钥把明文加密后所得的密文，只能用相对应的另一个密钥才能解密得到原本的明文；甚至连最初用来加密的密钥也不能用作解密。由于加密和解密需要两个不同的密钥，故被称为非对称加密；不同于加密和解密都使用同一个密钥的对称加密。虽然两个密钥在数学上相关，但如果知道了其中一个，并不能凭此计算出另外一个；因此其中一个可以公开，称为公钥，任意向外发布；不公开的密钥为私钥，必须由用户自行严格秘密保管，绝不通过任何途径向任何人提供，也不会透露给要通信的另一方，即使他被信任。&lt;/p>
&lt;p>基于公开密钥加密的特性，它还提供数字签名的功能，使电子文件可以得到如同在纸本文件上亲笔签署的效果。&lt;/p>
&lt;p>如何测试：略&lt;/p>
&lt;h4 id="3">3&lt;/h4>
&lt;p>UI与接口测试的协同可以从下面的方向考虑&lt;/p>
&lt;ul>
&lt;li>UI的操作实际上就是用另一种方式调用接口，那么接口有多少种参数组合就要求UI用例要构造多少种操作进行调用&lt;/li>
&lt;li>UI操作所需要的数据可以用接口来生成&lt;/li>
&lt;li>接口测试可以保证数据和逻辑的准确性，UI测试需要考虑交互和界面展示的逻辑正确性&lt;/li>
&lt;li>UI测试需要重视接口调用不成功或者接口异常情况下UI的呈现方式和用户体验&lt;/li>
&lt;li>UI中可能会有一些状态的缓存信息（这样就不需要每次频繁调用接口去获取了），比如鉴权信息等，需要重点关注这些缓存的更新策略&lt;/li>
&lt;/ul>
&lt;h4 id="4">4&lt;/h4>
&lt;p>上下游接口的数据依赖无非就是准备测试数据。&lt;/p>
&lt;p>假如一个事务需要顺序调用3个接口，A B C， C依赖于AB， 而AB有数据依赖，这时候就需要准备好A和B的数据。&lt;/p>
&lt;p>数据一般有两种方式生成&lt;/p>
&lt;ul>
&lt;li>
&lt;p>动态方式：假如B依赖A创造的数据，那么每次执行B之前必须执行A去做数据创建&lt;/p>
&lt;/li>
&lt;li>
&lt;p>静态方式：独立统一的测试数据库, ABC需要的数据都可以从库里拿到&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h4 id="5">5&lt;/h4>
&lt;p>依赖第三方就mock掉，可以自己写mock server&lt;/p>
&lt;h4 id="6">6&lt;/h4>
&lt;p>依赖登录态，那么每次测试该接口之前都需要调用登录的接口&lt;/p>
&lt;p>如果是jwt之类的token based auth的话，每次在调用接口时提供token就可以了&lt;/p>
&lt;h4 id="7">7&lt;/h4>
&lt;p>不知道，感觉出题者的理解可能有点偏差。&lt;/p>
&lt;h4 id="8">8&lt;/h4>
&lt;p>修改的接口，也就是update的接口一般只需要传：&lt;strong>被更新了的字段&lt;/strong> 以及 被更新实体的 &lt;strong>主键&lt;/strong> 比如id。&lt;/p>
&lt;p>这是开发常识，如果大家研究过jsonapi规格的话，可以直接套用jsonapi的设计进行阐述。&lt;/p>
&lt;h4 id="9">9&lt;/h4>
&lt;p>swagger文档可以解决这个问题。&lt;/p>
&lt;h4 id="10">10&lt;/h4>
&lt;p>看不清。&lt;/p>
&lt;h3 id="总结">总结&lt;/h3>
&lt;p>题目涉及到一些开发的知识点，很正常，现在测试面试时一般也会考察一下开发基础。&lt;/p>
&lt;p>总的来说题目出的一般，也不算太难，希望这些解答对大家有所帮助。&lt;/p>
&lt;p>原始封面&lt;/p></description></item><item><title>database测试笔试题1</title><link>https://itest2025.pages.dev/tutorials/44-002-database%E6%B5%8B%E8%AF%95%E7%AC%94%E8%AF%95%E9%A2%981/</link><pubDate>Tue, 18 Jul 2017 09:30:25 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/44-002-database%E6%B5%8B%E8%AF%95%E7%AC%94%E8%AF%95%E9%A2%981/</guid><description>&lt;h3 id="主键的值可以为空么">主键的值可以为空么？&lt;/h3>
&lt;p>can the value of primary key be NULL? no&lt;/p>
&lt;p>答案 ： 不行&lt;/p>
&lt;h3 id="创建索引是为了提高性能么">创建索引是为了提高性能么？&lt;/h3>
&lt;p>Is the index used to improve the peformance? 答案：yes&lt;/p>
&lt;p>答案： 是&lt;/p>
&lt;h3 id="关键字-select-distinct-是用来分组的么">关键字 select distinct 是用来分组的么？&lt;/h3>
&lt;p>is the keyword &amp;ldquo;select distinct&amp;rdquo; used to group result-set by one or more columns? no&lt;/p>
&lt;p>答案： 不是&lt;/p>
&lt;h3 id="哪个关键字是用来对结果排序">哪个关键字是用来对结果排序？&lt;/h3>
&lt;p>which keyword is used to sort the result-set? order by&lt;/p>
&lt;p>答案 ： Order by&lt;/p>
&lt;h3 id="哪个关键字是用来修改已经存在的数据">哪个关键字是用来修改已经存在的数据？&lt;/h3>
&lt;p>which keyword is used to modify the existing records in table? update&lt;/p></description></item><item><title>seleniuim面试题1</title><link>https://itest2025.pages.dev/tutorials/44-003-seleniuim%E9%9D%A2%E8%AF%95%E9%A2%981/</link><pubDate>Tue, 18 Jul 2017 09:44:38 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/44-003-seleniuim%E9%9D%A2%E8%AF%95%E9%A2%981/</guid><description>&lt;h3 id="selenium中如何判断元素是否存在">selenium中如何判断元素是否存在？&lt;/h3>
&lt;p>selenium中没有提供原生的方法判断元素是否存在，一般我们可以通过定位元素+异常捕获的方式判断。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 判断元素是否存在&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	&lt;span class="n">dr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">find_element_by_id&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;none&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">except&lt;/span> &lt;span class="n">NoSuchElementException&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">	&lt;span class="nb">print&lt;/span> &lt;span class="s1">&amp;#39;element does not exist&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="selenium中hidden或者是display--none的元素是否可以定位到">selenium中hidden或者是display ＝ none的元素是否可以定位到？&lt;/h3>
&lt;p>不可以，selenium不能定位不可见的元素。&lt;code>display=none&lt;/code>的元素实际上是不可见元素。&lt;/p>
&lt;h3 id="selenium中如何保证操作元素的成功率也就是说如何保证我点击的元素一定是可以点击的">selenium中如何保证操作元素的成功率？也就是说如何保证我点击的元素一定是可以点击的？&lt;/h3>
&lt;ul>
&lt;li>被点击的元素一定要占一定的空间，因为selenium默认会去点这个元素的中心点，不占空间的元素算不出来中心点;&lt;/li>
&lt;li>被点击的元素不能被其他元素遮挡;&lt;/li>
&lt;li>被点击的元素不能在viewport之外，也就是说如果元素必须是可见的或者通过滚动条操作使得元素可见;&lt;/li>
&lt;li>使用&lt;code>element.is_enabled()&lt;/code>(python代码)判断元素是否是可以被点击的，如果返回false证明元素可能灰化了，这时候就不能点;&lt;/li>
&lt;/ul>
&lt;h3 id="如何提高selenium脚本的执行速度">如何提高selenium脚本的执行速度？&lt;/h3>
&lt;ul>
&lt;li>使用效率更高的语言，比如java执行速度就快过python&lt;/li>
&lt;li>不要盲目的加&lt;code>sleep&lt;/code>，尽量使用&lt;a href="https://itest2025.pages.dev/selenium_python/element-wait/" rel="">显式等待&lt;/a>&lt;/li>
&lt;li>对于firefox，考虑使用测试专用的profile，因为每次启动浏览器的时候firefox会创建1个新的profile，对于这个新的profile，所有的静态资源都是从服务器直接下载，而不是从缓存里加载，这就导致网络不好的时候用例运行速度特别慢的问题&lt;/li>
&lt;li>chrome浏览器和safari浏览器的执行速度看上去是最快的&lt;/li>
&lt;li>可以考虑分布式执行或者使用selenium grid&lt;/li>
&lt;/ul>
&lt;h3 id="用例在运行过程中经常会出现不稳定的情况也就是说这次可以通过下次就没办法通过了如何去提升用例的稳定性">用例在运行过程中经常会出现不稳定的情况，也就是说这次可以通过，下次就没办法通过了，如何去提升用例的稳定性？&lt;/h3>
&lt;ul>
&lt;li>测试专属profile，尽量让静态资源缓存&lt;/li>
&lt;li>尽量使用&lt;a href="https://itest2025.pages.dev/selenium_python/element-wait/" rel="">显式等待&lt;/a>&lt;/li>
&lt;li>尽量使用测试专用环境，避免其他类型的测试同时进行，对数据造成干扰&lt;/li>
&lt;/ul>
&lt;h3 id="你的自动化用例的执行策略是什么">你的自动化用例的执行策略是什么？&lt;/h3>
&lt;ul>
&lt;li>每日执行：比如每天晚上在主干执行一次&lt;/li>
&lt;li>周期执行：每隔2小时在开发分之执行一次&lt;/li>
&lt;li>动态执行：每次代码有提交就执行&lt;/li>
&lt;/ul>
&lt;h3 id="自动化测试的时候是不是需要连接数据库做数据校验">自动化测试的时候是不是需要连接数据库做数据校验？&lt;/h3>
&lt;p>一般不需要，因为这是单元测试层做的事情，在自动化测试层尽量不要为单元测试层没做的工作还债。&lt;/p>
&lt;h3 id="idnameclasxpath-css-selector这些属性你最偏爱哪一种为什么">id,name,clas,xpath, css selector这些属性，你最偏爱哪一种，为什么？&lt;/h3>
&lt;p>xpath和css最为灵活，所以其他的答案都不够完美。&lt;/p>
&lt;h3 id="如何去定位页面上动态加载的元素">如何去定位页面上动态加载的元素？&lt;/h3>
&lt;p>&lt;a href="https://itest2025.pages.dev/selenium_python/element-wait/" rel="">显式等待&lt;/a>&lt;/p>
&lt;h3 id="如何去定位属性动态变化的元素">如何去定位属性动态变化的元素？&lt;/h3>
&lt;p>找出属性动态变化的规律，然后根据上下文生成动态属性。&lt;/p>
&lt;h3 id="点击链接以后selenium是否会自动等待该页面加载完毕">点击链接以后，selenium是否会自动等待该页面加载完毕？&lt;/h3>
&lt;p>java binding在点击链接后会自动等待页面加载完毕。&lt;/p>
&lt;h3 id="selenium的原理是什么">selenium的原理是什么？&lt;/h3>
&lt;p>selenium的原理涉及到3个部分，分别是&lt;/p>
&lt;ul>
&lt;li>浏览器&lt;/li>
&lt;li>driver: 一般我们都会下载driver&lt;/li>
&lt;li>client: 也就是我们写的代码&lt;/li>
&lt;/ul>
&lt;p>client其实并不知道浏览器是怎么工作的，但是driver知道，在selenium启动以后，driver其实充当了服务器的角色，跟client和浏览器通信，client根据webdriver协议发送请求给driver，driver解析请求，并在浏览器上执行相应的操作，并把执行结果返回给client。这就是selenium工作的大致原理。&lt;/p>
&lt;h3 id="webdriver的协议是什么">webdriver的协议是什么？&lt;/h3>
&lt;p>client与driver之间的约定，无论client是使用java实现还是c#实现，只要通过这个约定，client就可以准确的告诉drier它要做什么以及怎么做。&lt;/p>
&lt;p>webdriver协议本身是http协议，数据传输使用json。&lt;/p>
&lt;p>&lt;a href="https://www.w3.org/TR/webdriver/#list-of-endpoints" target="_blank" rel="noopener noreffer ">这里&lt;/a>有webdriver协议的所有endpoint，稍微看一眼就知道这些endpoints涵盖了selenium的所有功能。&lt;/p>
&lt;h3 id="启动浏览器的时候用到的是哪个webdriver协议">启动浏览器的时候用到的是哪个webdriver协议？&lt;/h3>
&lt;p>&lt;a href="https://www.w3.org/TR/webdriver/#new-session" target="_blank" rel="noopener noreffer ">New Session&lt;/a>，如果创建成功，返回sessionId和&lt;a href="https://www.w3.org/TR/webdriver/#capabilities" target="_blank" rel="noopener noreffer ">capabilities&lt;/a>。&lt;/p>
&lt;h3 id="什么是page-object设计模式">什么是page object设计模式？&lt;/h3>
&lt;p>&lt;a href="https://github.com/SeleniumHQ/selenium/wiki/PageObjects" target="_blank" rel="noopener noreffer ">官方介绍&lt;/a>，简单来说就是用class去表示被测页面。在class中定义页面上的元素和一些该页面上专属的方法。&lt;/p></description></item><item><title>python测试笔试题1</title><link>https://itest2025.pages.dev/tutorials/44-004-python%E6%B5%8B%E8%AF%95%E7%AC%94%E8%AF%95%E9%A2%981/</link><pubDate>Wed, 26 Jul 2017 09:30:25 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/44-004-python%E6%B5%8B%E8%AF%95%E7%AC%94%E8%AF%95%E9%A2%981/</guid><description>&lt;h3 id="哪一个方法用来返回变量类型">哪一个方法用来返回变量类型？&lt;/h3>
&lt;p>which function is usd to get type of a variable&lt;/p>
&lt;p>答案 type&lt;/p>
&lt;h3 id="哪一个方法用来列出一个类下的所有属性方法以及变量">哪一个方法用来列出一个类下的所有属性，方法，以及变量？&lt;/h3>
&lt;p>which function is used to list all names of a class&amp;rsquo;s attributes?&lt;/p>
&lt;p>答案 dir&lt;/p>
&lt;h3 id="字符串方法format是用来去掉字符串的左右空格的么">字符串方法format是用来去掉字符串的左右空格的么？&lt;/h3>
&lt;p>is the methods format used to get rid of blank space around a string?&lt;/p>
&lt;p>答案 不是&lt;/p>
&lt;h3 id="python-的类可以有多个父类么">python 的类可以有多个父类么？&lt;/h3>
&lt;p>can a class inheritance from multiple classes?&lt;/p>
&lt;p>答案 是&lt;/p>
&lt;h3 id="哪一个函数是用来获得字符串长度">哪一个函数是用来获得字符串长度？&lt;/h3>
&lt;p>which function is used to get the length of a string? len&lt;/p>
&lt;p>答案 ：len&lt;/p></description></item><item><title>java测试笔试题1</title><link>https://itest2025.pages.dev/tutorials/44-005-java%E6%B5%8B%E8%AF%95%E7%AC%94%E8%AF%95%E9%A2%981/</link><pubDate>Wed, 26 Jul 2017 09:30:25 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/44-005-java%E6%B5%8B%E8%AF%95%E7%AC%94%E8%AF%95%E9%A2%981/</guid><description>&lt;h3 id="final关键字可以修饰类吗">final关键字可以修饰类吗？&lt;/h3>
&lt;p>can keyword final be assigned to a class? yes&lt;/p>
&lt;p>可以&lt;/p>
&lt;h3 id="java可以继承多父类么可以实现多接口么">Java可以继承多父类么？可以实现多接口么？&lt;/h3>
&lt;p>Can a java class inheritance from multiple classes? how about a java class implement multiple interfaces?&lt;/p>
&lt;p>不可以多继承，但是可以多实现&lt;/p>
&lt;h3 id="构造方法是否可以重写和重载">构造方法是否可以重写和重载？&lt;/h3>
&lt;p>Can a constructor be overrided? how about oveload?&lt;/p>
&lt;p>不可以重写，可以重载&lt;/p>
&lt;h3 id="exception类的父类是">Exception类的父类是？&lt;/h3>
&lt;p>what is the Exception class inhertanced from?&lt;/p>
&lt;p>Throwable&lt;/p>
&lt;h3 id="同一个类中静态方法如何直接调用非静态方法">同一个类中，静态方法如何直接调用非静态方法？&lt;/h3>
&lt;p>Could a static method call a non-static method in the same class?&lt;/p>
&lt;p>静态方法不可以调用非静态方法&lt;/p>
&lt;p>原始封面&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="https://images.unsplash.com/photo-1531497865144-0464ef8fb9a9?w=300"
 data-srcset="https://images.unsplash.com/photo-1531497865144-0464ef8fb9a9?w=300, https://images.unsplash.com/photo-1531497865144-0464ef8fb9a9?w=300 1.5x, https://images.unsplash.com/photo-1531497865144-0464ef8fb9a9?w=300 2x"
 data-sizes="auto"
 alt="https://images.unsplash.com/photo-1531497865144-0464ef8fb9a9?w=300"
 title="课程图片" />&lt;/p></description></item><item><title>软件测试综合笔试题（1）</title><link>https://itest2025.pages.dev/tutorials/44-006-%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%BB%BC%E5%90%88%E7%AC%94%E8%AF%95%E9%A2%981/</link><pubDate>Wed, 26 Jul 2017 09:44:38 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/44-006-%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%BB%BC%E5%90%88%E7%AC%94%E8%AF%95%E9%A2%981/</guid><description>&lt;br>
1、__HTTP协议有什么特点？有哪几类状态码，分别表示什么意思？__
&lt;p>&lt;strong>特点:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>无连接：限制每次连接只处理一个请求。服务器处理完客户的请求，并收到客户的应答后，即断开连接。&lt;/li>
&lt;li>媒体独立：只要客户端和服务器知道如何处理的数据内容，任何类型的数据都可以通过HTTP发送。&lt;/li>
&lt;li>无状态：无状态是指协议对于事务处理没有记忆能力。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>状态码分类和含义:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>1xx： 指示信息：表示请求已接收， 继续处理。&lt;/li>
&lt;li>2xx： 成功：表示请求已被成功接收、 理解、 接受。&lt;/li>
&lt;li>3xx： 重定向：要完成请求必须进行更进一步的操作。&lt;/li>
&lt;li>4xx： 客户端错误：请求有语法错误或请求无法实现。&lt;/li>
&lt;li>5xx： 服务器端错误：服务器未能实现合法的请求。&lt;/li>
&lt;/ul>
&lt;br>
2、__列举出10个你常用的shell命令，并说明其作用。__
&lt;p>这个只要你平时多用Linux系统，写10个命令问题不大。
参考我的&lt;a href="http://www.cnblogs.com/fnng/archive/2012/03/19/2407162.html" target="_blank" rel="noopener noreffer ">Linux那些事儿&lt;/a>&lt;/p>
&lt;br>
3、__你认为测试工程师应该掌握哪些技术，其中有哪些是你已经掌握的？__
&lt;p>根据自己所掌握的测试技术自由发挥，参考：
&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/test_skill.png"
 data-srcset="http://img.testclass.net/test_skill.png, http://img.testclass.net/test_skill.png 1.5x, http://img.testclass.net/test_skill.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/test_skill.png"
 title="http://img.testclass.net/test_skill.png" />&lt;/p>
&lt;br>
4、__简述cookies和session是怎么工作的？__
&lt;p>&lt;strong>Cookie机制：&lt;/strong> 正统的Cookie分发是通过扩展HTTP协议来实现的，服务器通过在 HTTP 的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的Cookie。然而纯粹的客户端脚本如JavaScript 或者 VBScript也可以生成 Cookie。而Cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的Cookie，如果某个Cookie所声明的作用范围大于等于将要请求的资源所在的位置， 则把该cookie附在请求资源的HTTP请求头上发送给服务器。&lt;/p>
&lt;p>&lt;strong>Session 机制：&lt;/strong> Session 机制是一种服务器端的机制，服务器使用一种类似于散列表的结构（也可能就是使用散列表）来保存信息。&lt;/p>
&lt;br>
5、__你认为WEB测试和APP测试有什么不同？__
&lt;ul>
&lt;li>工作平台不同：Web主要运行在浏览器上面，APP的运行基于移动操作系统。&lt;/li>
&lt;li>界面开发技术不同：Web主要通过前端技术（HTML/JS/CSS）来设计页面，APP(Android)主要通过布局文件来设计界面。&lt;/li>
&lt;li>其它：你自行补充。。。&lt;/li>
&lt;/ul>
&lt;br>
6、__用你熟悉的一种编程语言，写出计算以下结果的代码。1+2+3+…+100=？__
&lt;p>以下通过Python语言实现：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">j&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">101&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">j&lt;/span> &lt;span class="o">=&lt;/span>&lt;span class="n">j&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">i&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;计算结果为：&lt;/span>&lt;span class="si">%d&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">%&lt;/span>&lt;span class="n">j&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;br>
7、__表：UC__
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>字段&lt;/th>
 &lt;th>字段名称&lt;/th>
 &lt;th>类型&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>FID&lt;/td>
 &lt;td>用户ID&lt;/td>
 &lt;td>int&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>NAME&lt;/td>
 &lt;td>用户名称&lt;/td>
 &lt;td>Varchar&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>EMAIL&lt;/td>
 &lt;td>用户邮箱&lt;/td>
 &lt;td>Varchar&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>FBAL&lt;/td>
 &lt;td>用户金额&lt;/td>
 &lt;td>decimal(20,2)&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>写出以下功能的sql语句：&lt;/p></description></item><item><title>Google测试工师的一道面试题目</title><link>https://itest2025.pages.dev/tutorials/44-007-google%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%B8%88%E7%9A%84%E4%B8%80%E9%81%93%E9%9D%A2%E8%AF%95%E9%A2%98%E7%9B%AE/</link><pubDate>Thu, 24 Aug 2017 09:44:38 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/44-007-google%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%B8%88%E7%9A%84%E4%B8%80%E9%81%93%E9%9D%A2%E8%AF%95%E9%A2%98%E7%9B%AE/</guid><description>&lt;p>最近重读《Google软件测试之道》，其中有一道面向软件测试工程师的面试题非常考验测试人员的思维。拿来与你们分享，看看这样一道题，你能想到多少个测试点。&lt;/p>
&lt;p>题目：&lt;/p>
&lt;p>在一个Web测试页面上，有一个输入框，一个计数器（count）按钮，用于计算一个文本字符串中字母a出现的个数。这里的问题是，请设计一系列字符串用以测试这个Web页面。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/google_test_subject.png"
 data-srcset="http://img.testclass.net/google_test_subject.png, http://img.testclass.net/google_test_subject.png 1.5x, http://img.testclass.net/google_test_subject.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/google_test_subject.png"
 title="http://img.testclass.net/google_test_subject.png" />&lt;/p>
&lt;p>题目非常简单，看到这个题目不要上来就开始设计用例，最好能有一些思考，这样看起来更加“专业”。&lt;/p>
&lt;p>（题外话，我在参加产品需求评审的时候也会问许多问题，尤其是产品需求并没完全确定下来的时候，站在用户的角度，我也是用户啊，我是否喜欢这个功能？）&lt;/p>
&lt;p>所以，我第一个想到的是设计这个功能的背景，因为同样一个功能，在不同的背景下，测试需要考虑的点可能是不一样的。例如，同样是一个搜索功能，百度的搜索和淘宝的搜索就有很大不同，因为用户的使用场景完全不同，输入搜索的关键字和预期结果也不一样。&lt;/p>
&lt;p>当然，这只是一道题，你根据题目回答就好了。&lt;/p>
&lt;p>不过，我们仍然可以就题目本身来提一些问题：大写还是小写？只是英文么？计算完成后文本会被清除码？多次按下按钮会发生什么事情？…..&lt;/p>
&lt;p>接下来你假装有条不紊的设计用例（思考一会儿，然后再输入一串字符，然后再思考…），而不是看起来像monkey试图破坏软件（拼命的敲击键盘…）。&lt;/p>
&lt;ul>
&lt;li>“banana”：3（一个合法的英文字）。&lt;/li>
&lt;li>“A” 和“a”：1（一个简单有正常结果的合法输入）。&lt;/li>
&lt;li>“”：0（一个简单的结果为0的合法输入）。&lt;/li>
&lt;li>Null：0（简单的错误输入）。&lt;/li>
&lt;li>“AA” 和“aa”：2（个数大于1并且所有字符都为a/A的输入）。&lt;/li>
&lt;li>“b”：0（一个简单的非空合法输入，结果为0）。&lt;/li>
&lt;li>“aba”：2（目标字符出现在开头和结尾，以寻找循环边界错误）。&lt;/li>
&lt;li>“bab”：1（目标字符出现在中间）。&lt;/li>
&lt;li>space/tabs：N（空白字符与N个a的混合）。&lt;/li>
&lt;li>不包含a的长字符串：N（N大于0）。&lt;/li>
&lt;li>包含a的长字符串：N（N是a的倍数）。&lt;/li>
&lt;li>{java/C/HTML/JavaScript}：N是a出现的个数（可执行字符，或错误，或代码解释）。&lt;/li>
&lt;li>&amp;hellip;&lt;/li>
&lt;/ul>
&lt;p>更优秀的测试工程师，应该跳出输入本身，设计以下用例。&lt;/p>
&lt;ul>
&lt;li>质疑界面的外观、调色板和对比度（这与相关应用风格一致么？）&lt;/li>
&lt;li>文本框太小了，建议加长以便显示更长的输入字符串&lt;/li>
&lt;li>这个应用能否在同一台服务器上运行多个实例，多个用户同时使用是否会有问题。&lt;/li>
&lt;li>是否会根据用户的输入自动匹配内容？&lt;/li>
&lt;li>建议使用真实的数据，如从词典或书中选择输入内容。&lt;/li>
&lt;li>提出疑问：“输入的数据是否会被保存”，输入字符串可能包含地址或其他身份信息。&lt;/li>
&lt;li>输入HTML和JavaScrip，看是否会破坏页面渲染。&lt;/li>
&lt;li>尝试复制/粘贴字符串。&lt;/li>
&lt;li>提出疑问：“计算足够快么？在大并发下使用”。&lt;/li>
&lt;li>提出提问：“用户怎么找到该页面？”&lt;/li>
&lt;/ul>
&lt;p>还有一些测试点，只有经验丰富的测试工程师才会想到。&lt;/p>
&lt;ul>
&lt;li>意识到计算会通过URL-encodedHTTP GET请求传递到服务器，字符串可能会在网络传输时被截断，因此，无法保证支持多长的URL。&lt;/li>
&lt;li>建议将此功能参数化，为什么只对字母a计算呢？&lt;/li>
&lt;li>考虑计算其它语言中的a（α，Alpha）。&lt;/li>
&lt;li>考虑到该应用是否应该国际化。&lt;/li>
&lt;li>考虑编写脚本或者手工采样来探知字符串长度的上限，然后确保在此区间内功能正常。&lt;/li>
&lt;li>考虑背后的实现和代码。也许已经有一个计数器遍历该字符串。&lt;/li>
&lt;li>提出疑问：“HTTP POST方法和参数会被黑掉码？也许有安全漏洞？”&lt;/li>
&lt;li>用脚本创建各种有趣的排列组合和字符串特性，如长度、a的个数等，自动生成测试输入和验证。&lt;/li>
&lt;/ul>
&lt;p>原始封面&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="https://images.unsplash.com/photo-1552664730-d307ca884978?w=300"
 data-srcset="https://images.unsplash.com/photo-1552664730-d307ca884978?w=300, https://images.unsplash.com/photo-1552664730-d307ca884978?w=300 1.5x, https://images.unsplash.com/photo-1552664730-d307ca884978?w=300 2x"
 data-sizes="auto"
 alt="https://images.unsplash.com/photo-1552664730-d307ca884978?w=300"
 title="课程图片" />&lt;/p></description></item><item><title>面试官问：说一个你工作中有价值的bug</title><link>https://itest2025.pages.dev/tutorials/44-008-%E9%9D%A2%E8%AF%95%E5%AE%98%E9%97%AE%E8%AF%B4%E4%B8%80%E4%B8%AA%E4%BD%A0%E5%B7%A5%E4%BD%9C%E4%B8%AD%E6%9C%89%E4%BB%B7%E5%80%BC%E7%9A%84bug/</link><pubDate>Thu, 24 Aug 2017 09:44:38 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/44-008-%E9%9D%A2%E8%AF%95%E5%AE%98%E9%97%AE%E8%AF%B4%E4%B8%80%E4%B8%AA%E4%BD%A0%E5%B7%A5%E4%BD%9C%E4%B8%AD%E6%9C%89%E4%BB%B7%E5%80%BC%E7%9A%84bug/</guid><description>&lt;br>
&lt;p>这其实是前两天测试论坛上一个同学的问题，也是我以前面试时被问到一个问题，看到这个问题后，我的大脑开始搜索过去遇到的印象深刻或有价值的bug。&lt;/p>
&lt;p>表面看这是一个非常简单的一个问题，做测试辣么久，发现的bug无数，随便从中挑选一个比较“特别”的一个bug说说就可以了啊！&lt;/p>
&lt;p>但其实，越是从习以为常的事情中找“特别”越困难，比如，我每天中午都是楼下随便找一家快餐店吃饭，如果有人问我：说说你印象深刻的一次吃快餐的经历。除非我哪天吃出了苍蝇，否则怎么会对每天吃的快餐印象深刻。&lt;/p>
&lt;p>同类的还有小学作文：《记最难忘的一件事》就很难写，别说对于小学生，对于成年人来说也一样，这其实跟你的文笔没太大关系。&lt;/p>
&lt;p>但如果换一个问题： 说说你如何测试面前的这把椅子？ 这个问题就简单太多了。&lt;/p>
&lt;p>为什么前面让你描述一个bug就那么难，对一把椅子写测试用例就很简单呢？ 明明两个都是工作最常用的“知识”。&lt;/p>
&lt;p>因为第一个问题太发散了嘛！我还要把以往有印象的bug在大脑中搜索一遍&amp;hellip; 前几天测试的时候发现页面上有一个错别字，然后让开发改了，不行不行，这个太简单了，我要说这个bug，面试官会不会直接把我赶出来！？&lt;/p>
&lt;p>继续想&amp;hellip;.&lt;/p>
&lt;p>我们换位思考一下，面试官问这个问题的目的是什么？&lt;/p>
&lt;p>其实，它并不关心你描述的这个bug是否真的有价值，或有多曲折离奇？他只是：&lt;/p>
&lt;ul>
&lt;li>了解你平时工作中的测试能力&lt;/li>
&lt;/ul>
&lt;p>所以，这就要求的你平时工作中遇到bug时试着自己去定位，定位bug的过程远比你的单纯的执行测试用例有“价值”（自我技能提高的价值），在定位bug的过程中你需要掌握和运用更多知识。&lt;/p>
&lt;p>另外，建议你平时养成总结的好习惯，发现的bug，开发解决了，最好问问他原因以及解决的方法，这样再遇到类似问题时，自己也可以试着定位解决。遇到难解决的bug，也可以把最终的解决过程记录下来。（这不是就有素材了）&lt;/p>
&lt;ul>
&lt;li>考察你的表达能力&lt;/li>
&lt;/ul>
&lt;p>我们搞技术的有许多属于闷骚性格（我也是！），让我们和技术打交道游刃有余。在QQ群里聊天，也风趣、幽默、机智、博学&amp;hellip;. 因为网络段子看多了嘛，再加上有百度加持。但面对公司会议或者和陌生人交流时，语言表达能力比较欠缺。&lt;/p>
&lt;p>所以，建议你平时可以主动要求去分享一些自己工作中用到或学习的技术。或者多去参加集体活动，加强自己的表达能力。&lt;/p>
&lt;ul>
&lt;li>也许就是想抛一个问题给你，自己好有时间继续看你的简历。&lt;/li>
&lt;/ul>
&lt;p>好了，大概了解的面试官的目的，那么可以在面试前事先思考一下这个问题，从工作中总结一些记忆深刻和有价值的bug。&lt;/p>
&lt;p>如果，一时想不起来，可以这么切入，找一个自己工作中很熟悉的项目，然后，谈谈你是如何对这个项目进行测试的，然后，在某一个版本测试中，发现xxx，开发也xxxx，前端也xxxx，运维也xxxx，最后终于发现原来是xxx引起的xxxx 。&lt;/p>
&lt;p>把你工作过程中的测试方法和步骤描述清楚了，那么这个bug有没有价值或是否印象深刻就不那么重要了。&lt;/p>
&lt;p>如果你刚好去面试，加油！祝你好运！&lt;/p>
&lt;p>原始封面&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="https://images.unsplash.com/photo-1554902843-260acd0993f8?w=300"
 data-srcset="https://images.unsplash.com/photo-1554902843-260acd0993f8?w=300, https://images.unsplash.com/photo-1554902843-260acd0993f8?w=300 1.5x, https://images.unsplash.com/photo-1554902843-260acd0993f8?w=300 2x"
 data-sizes="auto"
 alt="https://images.unsplash.com/photo-1554902843-260acd0993f8?w=300"
 title="课程图片" />&lt;/p></description></item></channel></rss>