行为驱动开发:一篇文章带你用 Python 玩转 BDD

相信大部分的人都听说过 BDD,即:行为驱动开发,但并未涉及到它的使用方和项目实战。

所以,本篇文章将大家全面了解 BDD 及实现方式,最后使用 Python BDD 框架落地到实际项目中去。

1. BDD 及优势

BDD,行为驱动开发是 敏捷软件开发 的一种技术,鼓励软件项目的所有成员之间的相互协助

传统的软件开发方式主要缺点包含:测试用例比较单一,导致覆盖率不高;业务和产品不能够全面了解产品的行为表现

BDD 的出现主要优势有下面 2 点,主要体现在:

  • 可以很好的减少项目成员之间的沟通成本,增加协作

  • BDD 能够将上线之后的手工测试转换为自动化测试,提升测试效率

2. 软件开发流程

​BDD 一般在产品需求文档审核时就开始介入,产品或业务负责人提供产品需求文档的同时,会提供具体的业务场景行为

开发人员根据定义的行为场景,开发软件,并编写场景下面的测试代码

完成 BDD 先在本地进行自测,没问题之后会提交到代码仓库,最后通过 CI 去持续集成,测试通过之后才能上线

BDD 的软件开发流程图如下:

image

3. Gherkin 语言及 Features

Gherkin 是 BDD 框架 Cucumber 的功能性语言,能够通过自然语言,支持多国语言,描述一个具体的需求

Gherkin 语言使用的是主要英文关键词包含:Scenario、Given、when 、And、Then 等;这些关键词可以转换成中文关键词,比如:场景、加入、当、那么等。

Features 功能文件一般命名为:*.feature,此文件可以编写具体的需求行为,最后可以支持自动化测试

功能文件的编写规范如下:

  • 空格或者制表符用于缩进

  • 每一行以 BDD 框架中预设的关键字开头

  • 使用 # 符号在文件内进行注释

  • 无论是中文或英文编写,「 : 」符号只能用英文格式的冒号,否则运行的时候会报错

下面是一个简单的功能文件,描述的是两个数相加的逻辑:

# 功能文件(英文)
Feature: Adding
    Scenario: Adding two numbers
    Given the input "1+1"
    When the calculator is run
    Then output should be "2"

4. Behave

Behave 是 Python 的 BDD 框架,并且可以使用命令行工具进行测试,使用 pip 可以很方便地进行安装

# 安装 behave 框架
pip3 install behave

编写完功能文件之后,就可以使用 behave 命令直接运行了

# 直接运行,控制台查看结果
behave

# 以中文来运行测试
behave --lang=zh-CN

5. 实战一下

下面以自动化测试 Google 搜索为例,来说说具体的使用方式

第 1 步,编写 Features 文件,以中文为例

使用 behave --lang-help zh-CN 命令查看所有的中文关键字:

image

接着,利用这些关键字结合具体行为,编写的 Feature 文件如下:

功能: Google搜索模块测试
  场景大纲: Google搜索一个关键字功能
      假如 搜索框输入一个关键字 
        当 点击搜索按钮
        那么 页面标题应该为 
      例子:
          |   keyword  |   title    |
          |   Python   |   Python - Google 搜索       |
          |   AirPython |   AirPython - Google 搜索   |

</code></pre> 
 <p>需要注意的是,文件中定义了两个参数,即:keyword 和 title</p> 
 <p>实际项目中大部分的自动化测试都是基于数据驱动参数化,因此需要搭配「 场景大纲+例子」一起使用。</p> 
 <p>第 2 步,编写 step 文件</p> 
 <p>在 Features 同级目录下新建一个 steps 文件夹,接着,在此文件夹下再新建一个 step.py 文件</p> 
 <p>然后,就可以对照第 1 步编写的 Features 文件编写测试用例了</p> 
 <p>借助 @given、@when、@then 装饰器,将文本内容和参数对应上</p> 
 <p>最后,使用 Selenium 定义的 API 方法操作元素即可</p> 
 <pre><code>from time import sleep
from selenium.webdriver.common.keys import Keys
from behave import *


@given(u'搜索框输入一个关键字 {keyword}')
def step_impl(context, keyword):
    element_input = context.driver.find_element_by_name('q')
    element_input.clear()
    print("准备输入")
    element_input.send_keys(keyword)


@when(u'点击搜索按钮')
def step_impl(context):
    # 模拟Enter键
    context.driver.find_element_by_name("q").send_keys(Keys.ENTER)

    sleep(1)


@then(u'页面标题应该为 {title}')
def step_impl(context, title):
    assert context.driver.title == title
</code></pre> 
 <p>需要指出的是,方法名中的第一个参数 context 是一个全局的字典,可以在步骤方法之间传递数据</p> 
 <p>第 3 步,编写配置环境文件 environment.py</p> 
 <p>环境配置文件定义了测试脚本运行过程中,具体步骤、场景之前和之后要执行的内容</p> 
 <p>比如,我们在 before_feature 方法( 每一个 feature 场景执行之前执行 )前初始化 ChromeDriver,打开目标网站首页;然后在 after_feature 方法( feature 场景测试完成之后执行 )后关闭浏览器</p> 
 <pre><code>def before_feature(context, feature):
    context.driver = webdriver.Chrome()
    context.driver.get("https://www.google.com/")


def after_feature(context, feature):
    context.driver.quit()
</code></pre> 
 <p>第 4 步,转换 cucumber 测试报告</p> 
 <p>为了保证下一步在 Jenkins 中能正常显示测试报告,需要将 behave 生成的测试报告转换为 cucumber 兼容的 json 测试报告</p> 
 <p>首先,安装依赖 behave2cucumber</p> 
 <pre><code># json测试报告文件转换
pip3 install behave2cucumber
</code></pre> 
 <p>然后,在上一步的环境配置文件中重写 after_all 方法,将 behave 格式的测试报告转换为 cucumber 兼容的测试报告</p> 
 <pre><code>def after_all(context):
    """
    所有测试完成之后执行
    注意:behave1.2.6生成的json没法正常转换为cucumber兼容的json报告,建议降级为:1.2.5
    :param context:
    :return:
    """

    # 转换
    with open('./test_report.json',encoding='utf-8') as behave_json:
        # 格式转换
        cucumberJson = behave2cucumber.convert(json.load(behave_json))

    jsonStr = json.dumps(cucumberJson)

    # 写入
    jsonReport = open(r'./report/jsonReport.json', 'w',encoding='utf-8')
    jsonReport.write(jsonStr)
    jsonReport.close()
</code></pre> 
 <p>需要注意的是,<strong>behave 最新版本转成的 cucumber 测试报告,在 Jenkins 中没法展示出来,建议降低为 1.2.5 版本</strong></p> 
 <p>第 5 步,本地运行</p> 
 <p>在 Features 文件同级目录下,执行下面的命令,将在本地生成格式化后 json 格式的测试报告</p> 
 <pre><code># 以中文语言的形式在本地运行
# 在本地产生测试报告
behave --lang=zh-CN -f json.pretty -o './test_report.json'
</code></pre> 
 <p>第 6 步,持续集成</p> 
 <p>首先搭建 Jenkins 环境,然后安装 Cucumber reports 插件</p> 
 <p>https://plugins.jenkins.io/cucumber-reports</p> 
 <p>接着,新建一个 Freestyle project 的任务,添加构建步骤 - Execute Shell,写入要执行的 Python 脚本</p> 
 <pre><code># 打开目标项目位置
cd /Users/xingag/Desktop/xag/git/marks/Python/测试/Demo/feature_chrome

# 执行测试,并生成测试报告
behave --lang=zh-CN -f json.pretty -o './test_report.json'
</code></pre> 
 <p>最后,添加构建后的操作 - Cucumber reports,指向第 4 步转换后的 json 格式的测试报告</p> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 700px; max-height: 370px;"> 
   <div class="image-view">  
   </div> 
  </div> 
  <div class="image-caption">
    image 
  </div> 
 </div> 
 <p>第 7 步,构建<br> 构建后,测试脚本会自动进行执行,然后会在结果栏生成可视化测试报告</p> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 700px; max-height: 389px;"> 
   <div class="image-view">  
   </div> 
  </div> 
  <div class="image-caption">
    image 
  </div> 
 </div> 
 <h2>6. 最后</h2> 
 <p>文章只是通过 Python 中的 Behave 框架来谈 BDD 在实际项目中的用法</p> 
 <p>如果你想在 Java 或者 Golang 项目中使用,可以直接 JBehave 或者 GoDog 框架来实现,除了语法外,基本操作方法类似。</p> 
 <p>文中的完全代码我已经上传到公众号后台,关注公众号「 <strong>AirPython</strong> 」后回复关键「 <strong>BDD</strong> 」获取全部的源码文件。</p> 
 <p>以上便是我今天的分享,如果对你有帮助,可以帮忙转发一下。</p> 
 <p><strong>推荐阅读</strong><br> 你真的会用 Postman 吗?</p> 
 <p>推荐几款优质 Chrome 摸鱼插件,带你畅快划水</p> 
 <p>这款黑科技,不会代码也能玩自动化,高效摸鱼</p> 
</article>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1642471530459881472"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(行为驱动开发:一篇文章带你用 Python 玩转 BDD)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1903178184237576192.htm"
                           title="代码随想录算法训练营第八天| 344 反转字符串、541 反转字符串II" target="_blank">代码随想录算法训练营第八天| 344 反转字符串、541 反转字符串II</a>
                        <span class="text-muted">Anjoubecoding</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a>
                        <div>这两天开的是字符串专题,我准备在做题的时候用C++做一遍,再用C做一遍,因为一直刷leetcode用的都是C++,导致C的基础太薄弱了,之后工作中有可能用到C,相当于再复习复习一、Leetcode344反转字符串题目链接:Leetcode344反转字符串这道题很简单,这才是真正的简单题voidreverseString(char*s,intsSize){intleft=0,right=sSize-</div>
                    </li>
                    <li><a href="/article/1903177931962773504.htm"
                           title="大神之路" target="_blank">大神之路</a>
                        <span class="text-muted">安卓工匠</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84%E8%87%AA%E6%88%91%E4%BF%AE%E5%85%BB/1.htm">程序员的自我修养</a>
                        <div>首先申明,文章是我在码农网摘过来的,那里没有分享,我感觉程序员也需要鸡汤,或者说这篇文章更应该是一篇一个过来人的经验,以及对我们这些想学计算机或者其他各行各业的人的一个简单的阐述。读完文章后,感觉收获很多,作者说的对,坚持,一鸣惊人需要坚持不断地做一件事。我是前端小学生,每天晚上都会练习代码,并浏览微博,前端路上,有你有我。有的人想成为大牛,却不曾为此努力。有的人辛苦耕耘,却收获寥寥。很多时候,你</div>
                    </li>
                    <li><a href="/article/1903176039379562496.htm"
                           title="【从漏洞到防护:浅谈Docker不容忽视的安全问题】" target="_blank">【从漏洞到防护:浅谈Docker不容忽视的安全问题】</a>
                        <span class="text-muted">OpsEye</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>从漏洞到防护:浅谈Docker不容忽视的安全问题文章目录前言一、Docker存在的漏洞二、场景案例三、安全基线标准总结前言在网络时代,几乎所有编写的软件和应用都存在潜在的漏洞,想要完全没有漏洞的应用是几乎不可能实现的,当然Docker也不例外。Docker容器技术在提供高效、可移植的软件部署环境的同时,也带来了一些安全挑战。针对Docker自身的漏洞,黑客的攻击手段层出不穷,给企业带来了多方面的挑</div>
                    </li>
                    <li><a href="/article/1903171250159677440.htm"
                           title="Python笔记——DeprecationWarning" target="_blank">Python笔记——DeprecationWarning</a>
                        <span class="text-muted">小橘猫cate</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>定义如下阶跃函数时出现警告,defstep_function(x):returnnp.array(x>0,dtype=np.int)DeprecationWarning:`np.int`isadeprecatedaliasforthebuiltin`int`.Tosilencethiswarning,use`int`byitself.Doingthiswillnotmodifyanybehavio</div>
                    </li>
                    <li><a href="/article/1903170368412119040.htm"
                           title="使用 ArcGIS 和 Python 进行地理信息系统(GIS)分析" target="_blank">使用 ArcGIS 和 Python 进行地理信息系统(GIS)分析</a>
                        <span class="text-muted">scaFHIO</span>
<a class="tag" taget="_blank" href="/search/arcgis/1.htm">arcgis</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>在本篇文章中,我们将探讨如何利用ArcGIS和Python进行地理信息系统(GIS)分析。ArcGIS是由Esri开发和维护的一系列GIS软件,包括客户端、服务器和在线解决方案。本文主要聚焦于如何使用Python和arcgis库来实现GIS功能。技术背景介绍ArcGIS提供了功能强大的工具来进行矢量和栅格分析、地理编码、地图制作以及路线和路径规划。通过arcgisPython库,我们可以访问Esr</div>
                    </li>
                    <li><a href="/article/1903170116040847360.htm"
                           title="LDAP从入门到实战:环境部署与配置指南(下)" target="_blank">LDAP从入门到实战:环境部署与配置指南(下)</a>
                        <span class="text-muted">磐基Stack专业服务团队</span>
<a class="tag" taget="_blank" href="/search/LDAP/1.htm">LDAP</a><a class="tag" taget="_blank" href="/search/LDAP/1.htm">LDAP</a>
                        <div>#作者:朱雷接上篇:《LDAP从入门到实战:环境部署与配置指南(上)》链接:link文章目录2.5.添加账号2.6.停止服务2.7.使用TLS证书2.7.1.TLS证书2.7.2.TLS配置2.7.3.服务器配置2.8.使用安全连接的反向代理2.5.添加账号添加管理员账号配置文件[root@localhostopenldap]#catadmin.ldifdn:dc=zltest,dc=comobj</div>
                    </li>
                    <li><a href="/article/1903170112995782656.htm"
                           title="Calico与eBPF知多少:高性能网络与可观测性实践指南" target="_blank">Calico与eBPF知多少:高性能网络与可观测性实践指南</a>
                        <span class="text-muted">磐基Stack专业服务团队</span>
<a class="tag" taget="_blank" href="/search/Calico/1.htm">Calico</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>#作者:邓伟文章目录摘要1.引言1.1背景1.2目的2.Calico简介2.1功能概述2.2架构概览3.理解eBPF3.1定义3.2应用场景系统监控:内核级可观测性革命网络过滤:高性能流量治理性能分析:函数级瓶颈定位4.Calico与eBPF的融合4.1集成方式4.2优势分析5.实践指南5.1部署步骤5.1.1准备环境5.1.2安装Calico并启用eBPF模式5.1.3配置要点5.2配置示例6.</div>
                    </li>
                    <li><a href="/article/1903170115445256192.htm"
                           title="ZooKeeper集群高可用性测试与实践:从规划到故障模拟" target="_blank">ZooKeeper集群高可用性测试与实践:从规划到故障模拟</a>
                        <span class="text-muted">磐基Stack专业服务团队</span>
<a class="tag" taget="_blank" href="/search/Zookeeper/1.htm">Zookeeper</a><a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a><a class="tag" taget="_blank" href="/search/%E5%8F%AF%E7%94%A8%E6%80%A7%E6%B5%8B%E8%AF%95/1.htm">可用性测试</a>
                        <div>#作者:任少近文章目录ZooKeeper集群环境规划1.集群数据一致性测试2.集群节点故障测试ZooKeeper集群高可用性测试的主要目的是确保在分布式环境中,ZooKeeper服务能够持续提供一致性和高可用性的协调服务。ZooKeeper集群环境规划节点ipZooKeeper版本java版本对外端口集群通信端口集群选举端口192.168.x.xZooKeeper-3.6.11.8.0_33221</div>
                    </li>
                    <li><a href="/article/1903169986684317696.htm"
                           title="一篇文带你了解Go 1.24最新版本有趣的变化" target="_blank">一篇文带你了解Go 1.24最新版本有趣的变化</a>
                        <span class="text-muted">磐基Stack专业服务团队</span>
<a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>#作者:曹付江文章目录前言1.语言特性更新1.1泛型类型别名:你的代码终于不再「绕口」了!2.工具链更新2.1引入tool指令,goget终于知道哪些是工具了2.2构建缓存优化,gorun变聪明了,不再瞎忙活2.3JSON输出改进,gobuild-json:构建日志终于能「看懂」了3.性能优化3.1运行时性能提升3.2cgo优化,cgo更快了,调用C代码更流畅3.3WebAssembly(Wasm</div>
                    </li>
                    <li><a href="/article/1903168727696863232.htm"
                           title="使用原生table合并单元格" target="_blank">使用原生table合并单元格</a>
                        <span class="text-muted">会说法语的猪</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E8%A1%A8%E6%A0%BC/1.htm">表格</a>
                        <div>先上个我要实现的页面例子1:就是最近要开发这么一个页面(这是个原型图,没有美化,大概是这个样子也都懂),刚看到的时候说实话有点儿懵的,第一次见到这样的表格,可以看到里面有很多字段,将来后台会一个个的返回给我们,其中右侧的原因是可编辑的!下面的调度主任和填写人也都是可编辑的,其他的都是后台会返回给我们的字段了,并且可以导出这咋整呢,看着就烦,里面乱糟糟的,闹心。然后开始的时候我是用element-u</div>
                    </li>
                    <li><a href="/article/1903168475283648512.htm"
                           title="VS Code 在Linux下IDE开发C++的HelloWorld" target="_blank">VS Code 在Linux下IDE开发C++的HelloWorld</a>
                        <span class="text-muted">leon_zeng0</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/VScode/1.htm">VScode</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a><a class="tag" taget="_blank" href="/search/c%2Fc%2B%2B/1.htm">c/c++</a><a class="tag" taget="_blank" href="/search/helloworld/1.htm">helloworld</a>
                        <div>用VisualStudioCode在Linux(Ubuntu)下构造c++的集成开发环境,编辑,编译和调试运行一个简单程序HelloWorld。想达到上面目标,搜索到以下文章,学习验证而成本文日记。链接是:https://code.visualstudio.com/docs/cpp/config-linux前期准备运行环境是ubuntu16.0,先安装好VisualStudioCode(VSCod</div>
                    </li>
                    <li><a href="/article/1903166831007428608.htm"
                           title="SATA(Serial Advanced Technology Attachment)详解" target="_blank">SATA(Serial Advanced Technology Attachment)详解</a>
                        <span class="text-muted">美好的事情总会发生</span>
<a class="tag" taget="_blank" href="/search/%E9%AB%98%E9%80%9F%E6%8E%A5%E5%8F%A3/1.htm">高速接口</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a><a class="tag" taget="_blank" href="/search/%E7%A1%AC%E4%BB%B6%E5%B7%A5%E7%A8%8B/1.htm">硬件工程</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E7%A1%AC%E4%BB%B6/1.htm">智能硬件</a>
                        <div>一、SATA的定义与核心特性SATA(串行高级技术附件)是一种用于连接存储设备(如硬盘、固态硬盘、光驱)的高速串行接口标准,取代了早期的PATA(并行ATA)。其核心特性包括:高速传输:支持最高6Gbps(SATAIII)的带宽。点对点连接:每个设备独立连接,避免总线争用。热插拔支持(需AHCI模式):允许在系统运行时插拔设备。低电压差分信号(LVDS):减少电磁干扰(EMI),提升信号完整性。二</div>
                    </li>
                    <li><a href="/article/1903166194488242176.htm"
                           title="GEO:在AI时代抢占DeepSeekC位?" target="_blank">GEO:在AI时代抢占DeepSeekC位?</a>
                        <span class="text-muted">白雪讲堂</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>前言:当SEO遇见AGI——一场静默的流量革命在生成式AI日均处理53亿次查询的今天,传统SEO的「关键词-排名-点击」逻辑正在崩塌。DeepSeek、ChatGPT、豆包等大模型用动态生成的答案,悄然截流了68%的搜索需求。更残酷的是:当用户问"某个产品推荐"时,AI可能同时调用37个信源,却不会留下任何可追踪的搜索痕迹。这场革命迫使企业必须从「关键词优化」转向「场景占领」,从「流量争夺」进化到</div>
                    </li>
                    <li><a href="/article/1903166194966392832.htm"
                           title="DeprecationWarning: 无效的转义序列‘\/‘解决方案" target="_blank">DeprecationWarning: 无效的转义序列‘\/‘解决方案</a>
                        <span class="text-muted">数据科学智慧</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a>
                        <div>DeprecationWarning:无效的转义序列’/'解决方案在Python编程中,您可能会遇到"DeprecationWarning:无效的转义序列’/'"的警告消息。这个警告通常在您尝试使用无效的转义序列时出现,例如在正则表达式或字符串中。本文将为您提供解决方案,以解决这个问题。首先,让我们了解一下转义序列的概念。在Python中,某些字符前面带有反斜杠(\),以表示特殊含义,例如换行符(</div>
                    </li>
                    <li><a href="/article/1903164676007587840.htm"
                           title="《颠覆传统,用Web3.0技术手撸一个去中心化微博(含完整代码)》" target="_blank">《颠覆传统,用Web3.0技术手撸一个去中心化微博(含完整代码)》</a>
                        <span class="text-muted">煜bart</span>
<a class="tag" taget="_blank" href="/search/web3/1.htm">web3</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a>
                        <div>一、为什么你的下一个项目必须拥抱Web3.0?传统互联网正面临三大致命伤:-用户数据被巨头垄断(某浪删帖事件频发)-单点故障导致服务瘫痪(某云宕机损失过亿)-创作者收益被平台榨取(某音抽成高达70%)**Web3.0的破局方案:**-✅数据永久存储在IPFS/Arweave-✅智能合约自动分配收益-✅抗审查的链上内容存证---###二、核心技术栈揭秘(附对比图表)|技术|传统方案|Web3.0方案</div>
                    </li>
                    <li><a href="/article/1903164549696122880.htm"
                           title="Kafka跨集群数据备份与同步:MirrorMaker运用" target="_blank">Kafka跨集群数据备份与同步:MirrorMaker运用</a>
                        <span class="text-muted">磐基Stack专业服务团队</span>
<a class="tag" taget="_blank" href="/search/Kafka/1.htm">Kafka</a><a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                        <div>#作者:张桐瑞文章目录前言MirrorMaker是什么运行MirrorMaker各个参数的含义前言在大多数情况下,我们会部署一套Kafka集群来支撑业务需求。但在某些特定场景下,可能需要同时运行多个Kafka集群。比如,为了实现灾难恢复,你可以在不同机房分别部署独立的Kafka集群。如果一个机房发生故障,你可以快速切换流量到另一个正常运行的机房。另外,如果你希望为地理上较近的客户提供低延迟的消息服</div>
                    </li>
                    <li><a href="/article/1903163163579314176.htm"
                           title="实现物流行业数字化、智能化管理的新型模式的智慧物流开源了" target="_blank">实现物流行业数字化、智能化管理的新型模式的智慧物流开源了</a>
                        <span class="text-muted">AI服务老曹</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a><a class="tag" taget="_blank" href="/search/%E8%83%BD%E6%BA%90/1.htm">能源</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a>
                        <div>智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。构建基于Ai技术的安全监管平台,可逐步实现智能化巡检,针对安全事故隐患进行有效监控预警,降低安全违规行为发生率,节省人工监管成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及</div>
                    </li>
                    <li><a href="/article/1903163164250402816.htm"
                           title="全流程数字化管理的智慧物流开源了" target="_blank">全流程数字化管理的智慧物流开源了</a>
                        <span class="text-muted">AI服务老曹</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a><a class="tag" taget="_blank" href="/search/%E7%A7%91%E6%8A%80/1.htm">科技</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB/1.htm">生活</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a>
                        <div>智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。构建基于Ai技术的安全监管平台,可逐步实现智能化巡检,针对安全事故隐患进行有效监控预警,降低安全违规行为发生率,节省人工监管成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及</div>
                    </li>
                    <li><a href="/article/1903161775776395264.htm"
                           title="Linux内核srio驱动,Zynq—Linux移植学习笔记(十四):RapidIO驱动开发" target="_blank">Linux内核srio驱动,Zynq—Linux移植学习笔记(十四):RapidIO驱动开发</a>
                        <span class="text-muted">weixin_39942572</span>
<a class="tag" taget="_blank" href="/search/Linux%E5%86%85%E6%A0%B8srio%E9%A9%B1%E5%8A%A8/1.htm">Linux内核srio驱动</a>
                        <div>#defineDRIVER_NAME"xiic-rio"#defineSRIO_ZYNQ_BASEADDR0x40000000#defineSRIO_ZYNQ_NODE_BASEADDR0x10100#defineSRIO_ZYNQ_MAX_HOPCOUNT13structxiic_rio{structmutexlock;u8*data;};/*Weneedglobalvarriableforma</div>
                    </li>
                    <li><a href="/article/1903158625128476672.htm"
                           title="《Linux设备驱动开发详解(第3版)》 第12章 Linux块设备驱动" target="_blank">《Linux设备驱动开发详解(第3版)》 第12章 Linux块设备驱动</a>
                        <span class="text-muted">请向我看齐</span>
<a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91/1.htm">驱动开发</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>12.1块设备驱动概述块设备以块为单位进行数据传输,通常支持随机访问,如硬盘、U盘等。块设备驱动负责管理这些设备的I/O操作,为内核和用户空间提供统一的接口。这部分通常以理论讲解为主,代码示例较少。12.2块设备的I/O栈块设备的I/O栈涉及多个层次,从用户空间的系统调用开始,经过VFS(虚拟文件系统)、通用块层,最终到达块设备驱动层。这部分也是理论性较强,直接的代码示例较少。12.3通用块层通用</div>
                    </li>
                    <li><a href="/article/1903158369250766848.htm"
                           title="Linux驱动开发实战之SRIO驱动(二)基于Tsi721驱动" target="_blank">Linux驱动开发实战之SRIO驱动(二)基于Tsi721驱动</a>
                        <span class="text-muted">niuTaylor</span>
<a class="tag" taget="_blank" href="/search/SRIO%E9%A9%B1%E5%8A%A8%E5%AE%9E%E6%88%98/1.htm">SRIO驱动实战</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91/1.htm">驱动开发</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/SRIO/1.htm">SRIO</a>
                        <div>常用驱动介绍在RapidIO系统中,TSI721是一款常用的RapidIO交换芯片,其驱动程序和相关模块负责管理和优化数据传输,包括DMA(直接内存访问)操作。以下是您提到的各个模块的作用概述:rapidio.ko:这是RapidIO核心模块,为RapidIO子系统提供基础支持。它负责管理RapidIO设备、维护RapidIO网络拓扑结构,以及处理RapidIO协议的底层细节。rio_cm.ko:</div>
                    </li>
                    <li><a href="/article/1903156854444322816.htm"
                           title="pcie bar空间region [disable]无法访问" target="_blank">pcie bar空间region [disable]无法访问</a>
                        <span class="text-muted">格局视界</span>
<a class="tag" taget="_blank" href="/search/PCIE/1.htm">PCIE</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a>
                        <div>现象没有截图,下图[virtual]时需要重启host,为[disable]时可以用解决方案的命令解决方案setpcie-s01:00.0COMMAND=0x02解释thiswillenablememorymappedtransfersforyourpciedevice.In4.8kernelsomethingischanges,sodriversdoesnotenablemmtransfersb</div>
                    </li>
                    <li><a href="/article/1903154332568711168.htm"
                           title="C++/C语言判断重复数组(zznu)⭐" target="_blank">C++/C语言判断重复数组(zznu)⭐</a>
                        <span class="text-muted">*TQK*</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/1.htm">算法练习</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a>
                        <div>问题描述如果一个数组中不包含重复的元素,那么我们称这个数组是独ONE无TWO的数组。给定一个数组,请你判断这个数组是否是独ONE无TWO的。输入首先输入一个正整数n表示数组的长度(0//包含常用的头文件usingi68=longlong;//定义别名,但在此代码中未使用usingnamespacestd;//定义宏,用于获取容器的大小#definesz(x)(int)x.size()//定义宏,用</div>
                    </li>
                    <li><a href="/article/1903153576075653120.htm"
                           title="Linux驱动开发实战之SRIO驱动(一)" target="_blank">Linux驱动开发实战之SRIO驱动(一)</a>
                        <span class="text-muted">niuTaylor</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91/1.htm">驱动开发</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>活动发起人@小虚竹想对你说:这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你参加为期14天的创作挑战赛!提醒:在发布作品前,请将不需要的内容删除。LinuxSRIO驱动开发终极指南:从基础到实战一、SRIO协议基础SRI</div>
                    </li>
                    <li><a href="/article/1903149042179829760.htm"
                           title="python做飞机大战让敌机打子弹_python(pygame)滑稽大战(类似飞机大战) 教程" target="_blank">python做飞机大战让敌机打子弹_python(pygame)滑稽大战(类似飞机大战) 教程</a>
                        <span class="text-muted">青云若水</span>

                        <div>初始准备工作本项目使用的python3版本(如果你用python2,我不知会怎么样)Ide推荐大家选择pycharm(不同ide应该没影响)需要安装第三方库pygame,pygame安装方法(windows电脑,mac系统本人实测与pygame不兼容,强行运行本项目卡成ppt)电脑打开cmd命令窗口,输入pip3installpygame补充说明:由于众所周知的原因,安装过程中下载可能十分缓慢,甚</div>
                    </li>
                    <li><a href="/article/1903148033500049408.htm"
                           title="利用Python和深度学习方法实现手写数字识别的高精度解决方案——从数据预处理到模型优化的全流程解析" target="_blank">利用Python和深度学习方法实现手写数字识别的高精度解决方案——从数据预处理到模型优化的全流程解析</a>
                        <span class="text-muted">快撑死的鱼</span>
<a class="tag" taget="_blank" href="/search/Python%E7%AE%97%E6%B3%95%E7%B2%BE%E8%A7%A3/1.htm">Python算法精解</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>利用Python和深度学习方法实现手写数字识别的高精度解决方案——从数据预处理到模型优化的全流程解析在人工智能的众多应用领域中,手写数字识别是一项经典且具有重要实际应用价值的任务。随着深度学习技术的飞速发展,通过构建和训练神经网络模型,手写数字识别的精度已经可以达到99%以上。本文将以Python为主要编程语言,结合深度学习的核心技术,详细解析手写数字识别的实现过程,并探讨如何进一步优化模型以提高</div>
                    </li>
                    <li><a href="/article/1903148032019460096.htm"
                           title="python之连连看游戏" target="_blank">python之连连看游戏</a>
                        <span class="text-muted">CrMylive.</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F/1.htm">游戏</a><a class="tag" taget="_blank" href="/search/pygame/1.htm">pygame</a>
                        <div>实现一个简单的连连看游戏需要用到pygame库和一些基本的数据结构和算法。导入pygame库在程序开始之前,首先需要导入pygame库。在Python中,可以使用以下代码导入pygame库:importpygame初始化Pygame在导入pygame库之后,需要使用以下代码初始化pygame:pygame.init()设置游戏窗口设置游戏窗口的大小、标题等属性。可以使用以下代码设置游戏窗口大小为6</div>
                    </li>
                    <li><a href="/article/1903144120109559808.htm"
                           title="Python, Java, C ++开发全球热能动态监测APP" target="_blank">Python, Java, C ++开发全球热能动态监测APP</a>
                        <span class="text-muted">Geeker-2025</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>开发一个“全球热能动态监测APP”是一个非常有意义的想法,尤其是在能源管理和环境保护领域。以下是开发该APP的详细思路和技术实现方案,分别针对Python、Java和C++。---###**功能需求分析**1.**全球热能数据展示**:-各国或地区的热能生产、消费和进出口数据。-实时监测热能动态(如发电厂的热能输出、温度变化等)。2.**地图可视化**:-在地图上标注热能发电厂的位置。-使用颜色或</div>
                    </li>
                    <li><a href="/article/1903143993194115072.htm"
                           title="什么是设计模式以及常见的例子(如单例、工厂、观察者等)" target="_blank">什么是设计模式以及常见的例子(如单例、工厂、观察者等)</a>
                        <span class="text-muted">python资深爱好者</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/1.htm">单例模式</a>
                        <div>设计模式(DesignPattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式的主要目的是为了可重用代码、让代码更容易被他人理解、提高代码的可靠性。设计模式一般包含模式名称、问题、目的、解决方案、效果等基本要素。设计模式根据目的(即模式是用来做什么的)可以分为三大类:创建型模式、结构型模式和行为型模式。下面分别给出几个常见的设计模式例子,包括单例模式、工厂模</div>
                    </li>
                    <li><a href="/article/1903137944076611584.htm"
                           title="动物识别系统代码python_动物识别系统__代码" target="_blank">动物识别系统代码python_动物识别系统__代码</a>
                        <span class="text-muted">weixin_39812065</span>
<a class="tag" taget="_blank" href="/search/%E5%8A%A8%E7%89%A9%E8%AF%86%E5%88%AB%E7%B3%BB%E7%BB%9F%E4%BB%A3%E7%A0%81python/1.htm">动物识别系统代码python</a>
                        <div>1动物识别专家系统动物识别专家系统是流行的专家系统实验模型,它用产生式规则来表示知识,共15条规则、可以识别七种动物,这些规则既少又简单,可以改造他们,也可以加进新的规则,还可以用来识别其他东西的新规则来取代这些规则。动物识别15条规则的中文表示是:规则1:如果:动物有毛发则:该动物是哺乳动物规则2:如果:动物有奶则:该单位是哺乳动物规则3:如果:该动物有羽毛则:该动物是鸟规则4:如果:动物会飞,</div>
                    </li>
                                <li><a href="/article/99.htm"
                                       title="ios内付费" target="_blank">ios内付费</a>
                                    <span class="text-muted">374016526</span>
<a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E4%BB%98%E8%B4%B9/1.htm">内付费</a>
                                    <div>近年来写了很多IOS的程序,内付费也用到不少,使用IOS的内付费实现起来比较麻烦,这里我写了一个简单的内付费包,希望对大家有帮助。 
  
具体使用如下: 
这里的sender其实就是调用者,这里主要是为了回调使用。 
[KuroStoreApi kuroStoreProductId:@"产品ID" storeSender:self storeFinishCallBa</div>
                                </li>
                                <li><a href="/article/226.htm"
                                       title="20 款优秀的 Linux 终端仿真器" target="_blank">20 款优秀的 Linux 终端仿真器</a>
                                    <span class="text-muted">brotherlamp</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/linux%E8%A7%86%E9%A2%91/1.htm">linux视频</a><a class="tag" taget="_blank" href="/search/linux%E8%B5%84%E6%96%99/1.htm">linux资料</a><a class="tag" taget="_blank" href="/search/linux%E8%87%AA%E5%AD%A6/1.htm">linux自学</a><a class="tag" taget="_blank" href="/search/linux%E6%95%99%E7%A8%8B/1.htm">linux教程</a>
                                    <div>  
终端仿真器是一款用其它显示架构重现可视终端的计算机程序。换句话说就是终端仿真器能使哑终端看似像一台连接上了服务器的客户机。终端仿真器允许最终用户用文本用户界面和命令行来访问控制台和应用程序。(LCTT 译注:终端仿真器原意指对大型机-哑终端方式的模拟,不过在当今的 Linux 环境中,常指通过远程或本地方式连接的伪终端,俗称“终端”。) 
你能从开源世界中找到大量的终端仿真器,它们</div>
                                </li>
                                <li><a href="/article/353.htm"
                                       title="Solr Deep Paging(solr 深分页)" target="_blank">Solr Deep Paging(solr 深分页)</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/solr%E6%B7%B1%E5%88%86%E9%A1%B5/1.htm">solr深分页</a><a class="tag" taget="_blank" href="/search/solr%E5%88%86%E9%A1%B5%E6%80%A7%E8%83%BD%E9%97%AE%E9%A2%98/1.htm">solr分页性能问题</a>
                                    <div>转载请出自出处:http://eksliang.iteye.com/blog/2148370 
作者:eksliang(ickes) blg:http://eksliang.iteye.com/ 概述 
长期以来,我们一直有一个深分页问题。如果直接跳到很靠后的页数,查询速度会比较慢。这是因为Solr的需要为查询从开始遍历所有数据。直到Solr的4.7这个问题一直没有一个很好的解决方案。直到solr</div>
                                </li>
                                <li><a href="/article/480.htm"
                                       title="数据库面试题" target="_blank">数据库面试题</a>
                                    <span class="text-muted">18289753290</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98+%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">面试题 数据库</a>
                                    <div>1.union ,union all 
网络搜索出的最佳答案: 
union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。 
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序; 
Union All:对两个结果集进行并集操作,包括重复行,不进行排序; 
2.索引有哪些分类?作用是</div>
                                </li>
                                <li><a href="/article/607.htm"
                                       title="Android TV屏幕适配" target="_blank">Android TV屏幕适配</a>
                                    <span class="text-muted">酷的飞上天空</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>先说下现在市面上TV分辨率的大概情况 
两种分辨率为主 
1.720标清,分辨率为1280x720. 
屏幕尺寸以32寸为主,部分电视为42寸 
2.1080p全高清,分辨率为1920x1080 
屏幕尺寸以42寸为主,此分辨率电视屏幕从32寸到50寸都有 
  
适配遇到问题,已1080p尺寸为例: 
分辨率固定不变,屏幕尺寸变化较大。 
如:效果图尺寸为1920x1080,如果使用d</div>
                                </li>
                                <li><a href="/article/734.htm"
                                       title="Timer定时器与ActionListener联合应用" target="_blank">Timer定时器与ActionListener联合应用</a>
                                    <span class="text-muted">永夜-极光</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>功能:在控制台每秒输出一次 
  
代码: 
package Main;
import javax.swing.Timer;
 import java.awt.event.*;

 public class T {
    private static int count = 0; 

    public static void main(String[] args){
</div>
                                </li>
                                <li><a href="/article/861.htm"
                                       title="Ubuntu14.04系统Tab键不能自动补全问题解决" target="_blank">Ubuntu14.04系统Tab键不能自动补全问题解决</a>
                                    <span class="text-muted">随便小屋</span>
<a class="tag" taget="_blank" href="/search/Ubuntu+14.04/1.htm">Ubuntu 14.04</a>
                                    <div>Unbuntu 14.4安装之后就在终端中使用Tab键不能自动补全,解决办法如下: 
  
1、利用vi编辑器打开/etc/bash.bashrc文件(需要root权限) 
sudo vi /etc/bash.bashrc 
 接下来会提示输入密码 
2、找到文件中的下列代码 
#enable bash completion in interactive shells
#if</div>
                                </li>
                                <li><a href="/article/988.htm"
                                       title="学会人际关系三招 轻松走职场" target="_blank">学会人际关系三招 轻松走职场</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA/1.htm">职场</a>
                                    <div>要想成功,仅有专业能力是不够的,处理好与老板、同事及下属的人际关系也是门大学问。如何才能在职场如鱼得水、游刃有余呢?在此,教您简单实用的三个窍门。 
  第一,多汇报 
 最近,管理学又提出了一个新名词“追随力”。它告诉我们,做下属最关键的就是要多请示汇报,让上司随时了解你的工作进度,有了新想法也要及时建议。不知不觉,你就有了“追随力”,上司会越来越了解和信任你。 
  第二,勤沟通 
 团队的力</div>
                                </li>
                                <li><a href="/article/1115.htm"
                                       title="《O2O:移动互联网时代的商业革命》读书笔记" target="_blank">《O2O:移动互联网时代的商业革命》读书笔记</a>
                                    <span class="text-muted">aoyouzi</span>
<a class="tag" taget="_blank" href="/search/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/1.htm">读书笔记</a>
                                    <div>移动互联网的未来:碎片化内容+碎片化渠道=各式精准、互动的新型社会化营销。 
  
O2O:Online to OffLine 线上线下活动 
O2O就是在移动互联网时代,生活消费领域通过线上和线下互动的一种新型商业模式。 
  
手机二维码本质:O2O商务行为从线下现实世界到线上虚拟世界的入口。 
  
线上虚拟世界创造的本意是打破信息鸿沟,让不同地域、不同需求的人</div>
                                </li>
                                <li><a href="/article/1242.htm"
                                       title="js实现图片随鼠标滚动的效果" target="_blank">js实现图片随鼠标滚动的效果</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E6%BB%9A%E5%8A%A8%E5%B1%9E%E6%80%A7%E7%9A%84%E8%8E%B7%E5%8F%96/1.htm">滚动属性的获取</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E7%89%87%E6%BB%9A%E5%8A%A8/1.htm">图片滚动</a><a class="tag" taget="_blank" href="/search/%E5%B1%9E%E6%80%A7%E8%8E%B7%E5%8F%96/1.htm">属性获取</a><a class="tag" taget="_blank" href="/search/%E9%A1%B5%E9%9D%A2%E5%8A%A0%E8%BD%BD/1.htm">页面加载</a>
                                    <div>1,获取样式属性值 
top  与顶部的距离
left  与左边的距离
right 与右边的距离
bottom 与下边的距离
zIndex 层叠层次 
  
  例子:获取左边的宽度,当css写在body标签中时 
<div id="adver" style="position:absolute;top:50px;left:1000p</div>
                                </li>
                                <li><a href="/article/1369.htm"
                                       title="ajax同步异步参数async" target="_blank">ajax同步异步参数async</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/async/1.htm">async</a>
                                    <div>        开发项目开发过程中,需要将ajax的返回值赋到全局变量中,然后在该页面其他地方引用,因为ajax异步的原因一直无法成功,需将async:false,使其变成同步的。 
        格式: 
$.ajax({ type: 'POST', ur</div>
                                </li>
                                <li><a href="/article/1496.htm"
                                       title="Webx3框架(1)" target="_blank">Webx3框架(1)</a>
                                    <span class="text-muted">Bill_chen</span>
<a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a>
                                    <div>Webx是淘宝开发的一套Web开发框架,Webx3是其第三个升级版本;采用Eclipse的开发环境,现在支持java开发; 
采用turbine原型的MVC框架,扩展了Spring容器,利用Maven进行项目的构建管理,灵活的ibatis持久层支持,总的来说,还是一套很不错的Web框架。 
Webx3遵循turbine风格,velocity的模板被分为layout/screen/control三部</div>
                                </li>
                                <li><a href="/article/1623.htm"
                                       title="【MongoDB学习笔记五】MongoDB概述" target="_blank">【MongoDB学习笔记五】MongoDB概述</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a>
                                    <div>MongoDB是面向文档的NoSQL数据库,尽量业界还对MongoDB存在一些质疑的声音,比如性能尤其是查询性能、数据一致性的支持没有想象的那么好,但是MongoDB用户群确实已经够多。MongoDB的亮点不在于它的性能,而是它处理非结构化数据的能力以及内置对分布式的支持(复制、分片达到的高可用、高可伸缩),同时它提供的近似于SQL的查询能力,也是在做NoSQL技术选型时,考虑的一个重要因素。Mo</div>
                                </li>
                                <li><a href="/article/1750.htm"
                                       title="spring/hibernate/struts2常见异常总结" target="_blank">spring/hibernate/struts2常见异常总结</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a>
                                    <div> 
 Spring 
 
①ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException 
缺少aspectjweaver.jar,该jar包常用于spring aop中 
  
②java.lang.ClassNotFoundException: org.sprin</div>
                                </li>
                                <li><a href="/article/1877.htm"
                                       title="jquery easyui表单重置(reset)扩展思路" target="_blank">jquery easyui表单重置(reset)扩展思路</a>
                                    <span class="text-muted">bozch</span>
<a class="tag" taget="_blank" href="/search/form/1.htm">form</a><a class="tag" taget="_blank" href="/search/jquery+easyui/1.htm">jquery easyui</a><a class="tag" taget="_blank" href="/search/reset/1.htm">reset</a>
                                    <div>在jquery easyui表单中 尚未提供表单重置的功能,这就需要自己对其进行扩展。 
扩展的时候要考虑的控件有: 
 combo,combobox,combogrid,combotree,datebox,datetimebox 
需要对其添加reset方法,reset方法就是把初始化的值赋值给当前的组件,这就需要在组件的初始化时将值保存下来。 
在所有的reset方法添加完毕之后,就需要对fo</div>
                                </li>
                                <li><a href="/article/2004.htm"
                                       title="编程之美-烙饼排序" target="_blank">编程之美-烙饼排序</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a>
                                    <div>
package beautyOfCoding;

import java.util.Arrays;

/*
 *《编程之美》的思路是:搜索+剪枝。有点像是写下棋程序:当前情况下,把所有可能的下一步都做一遍;在这每一遍操作里面,计算出如果按这一步走的话,能不能赢(得出最优结果)。
 *《编程之美》上代码有很多错误,且每个变量的含义令人费解。因此我按我的理解写了以下代码:
 */
</div>
                                </li>
                                <li><a href="/article/2131.htm"
                                       title="Struts1.X 源码分析之ActionForm赋值原理" target="_blank">Struts1.X 源码分析之ActionForm赋值原理</a>
                                    <span class="text-muted">chenbowen00</span>
<a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a>
                                    <div>struts1在处理请求参数之前,首先会根据配置文件action节点的name属性创建对应的ActionForm。如果配置了name属性,却找不到对应的ActionForm类也不会报错,只是不会处理本次请求的请求参数。 
 
如果找到了对应的ActionForm类,则先判断是否已经存在ActionForm的实例,如果不存在则创建实例,并将其存放在对应的作用域中。作用域由配置文件action节点的s</div>
                                </li>
                                <li><a href="/article/2258.htm"
                                       title="[空天防御与经济]在获得充足的外部资源之前,太空投资需有限度" target="_blank">[空天防御与经济]在获得充足的外部资源之前,太空投资需有限度</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E8%B5%84%E6%BA%90/1.htm">资源</a>
                                    <div> 
      这里有一个常识性的问题: 
 
      地球的资源,人类的资金是有限的,而太空是无限的..... 
 
      就算全人类联合起来,要在太空中修建大型空间站,也不一定能够成功,因为资源和资金,技术有客观的限制.... 
 
&</div>
                                </li>
                                <li><a href="/article/2385.htm"
                                       title="ORACLE临时表—ON COMMIT PRESERVE ROWS" target="_blank">ORACLE临时表—ON COMMIT PRESERVE ROWS</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E4%B8%B4%E6%97%B6%E8%A1%A8/1.htm">临时表</a>
                                    <div>ORACLE临时表 转 
临时表:像普通表一样,有结构,但是对数据的管理上不一样,临时表存储事务或会话的中间结果集,临时表中保存的数据只对当前 
会话可见,所有会话都看不到其他会话的数据,即使其他会话提交了,也看不到。临时表不存在并发行为,因为他们对于当前会话都是独立的。 
创建临时表时,ORACLE只创建了表的结构(在数据字典中定义),并没有初始化内存空间,当某一会话使用临时表时,ORALCE会</div>
                                </li>
                                <li><a href="/article/2512.htm"
                                       title="基于Nginx XSendfile+SpringMVC进行文件下载" target="_blank">基于Nginx XSendfile+SpringMVC进行文件下载</a>
                                    <span class="text-muted">denger</span>
<a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%BA%94%E7%94%A8/1.htm">网络应用</a><a class="tag" taget="_blank" href="/search/lighttpd/1.htm">lighttpd</a>
                                    <div>    在平常我们实现文件下载通常是通过普通 read-write方式,如下代码所示。 
 
   @RequestMapping("/courseware/{id}") 
   public void download(@PathVariable("id") String courseID, HttpServletResp</div>
                                </li>
                                <li><a href="/article/2639.htm"
                                       title="scanf接受char类型的字符" target="_blank">scanf接受char类型的字符</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a>
                                    <div>/*
	2013年3月11日22:35:54
	目的:学习char只接受一个字符
*/
# include <stdio.h>

int main(void)
{
	int i;
	char ch;

	scanf("%d", &i);
	printf("i = %d\n", i);
	scanf("%</div>
                                </li>
                                <li><a href="/article/2766.htm"
                                       title="学编程的价值" target="_blank">学编程的价值</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a>
                                    <div>发一个人会编程, 想想以后可以教儿女, 是多么美好的事啊, 不管儿女将来从事什么样的职业, 教一教, 对他思维的开拓大有帮助 
  
像这位朋友学习:   
http://blog.sina.com.cn/s/articlelist_2584320772_0_1.html 
  
 
  VirtualGS教程 (By @林泰前): 几十年的老程序员,资深的</div>
                                </li>
                                <li><a href="/article/2893.htm"
                                       title="二维数组(矩阵)对角线输出" target="_blank">二维数组(矩阵)对角线输出</a>
                                    <span class="text-muted">飞天奔月</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">二维数组</a>
                                    <div>今天在BBS里面看到这样的面试题目, 
  
1,二维数组(N*N),沿对角线方向,从右上角打印到左下角如N=4: 4*4二维数组  
{ 1 2 3 4 }
{ 5 6 7 8 }
{ 9 10 11 12 }
{13 14 15 16 } 
打印顺序  
4
3 8
2 7 12
1 6 11 16
5 10 15
9 14
13 
要</div>
                                </li>
                                <li><a href="/article/3020.htm"
                                       title="Ehcache(08)——可阻塞的Cache——BlockingCache" target="_blank">Ehcache(08)——可阻塞的Cache——BlockingCache</a>
                                    <span class="text-muted">234390216</span>
<a class="tag" taget="_blank" href="/search/%E5%B9%B6%E5%8F%91/1.htm">并发</a><a class="tag" taget="_blank" href="/search/ehcache/1.htm">ehcache</a><a class="tag" taget="_blank" href="/search/BlockingCache/1.htm">BlockingCache</a><a class="tag" taget="_blank" href="/search/%E9%98%BB%E5%A1%9E/1.htm">阻塞</a>
                                    <div>可阻塞的Cache—BlockingCache 
  
       在上一节我们提到了显示使用Ehcache锁的问题,其实我们还可以隐式的来使用Ehcache的锁,那就是通过BlockingCache。BlockingCache是Ehcache的一个封装类,可以让我们对Ehcache进行并发操作。其内部的锁机制是使用的net.</div>
                                </li>
                                <li><a href="/article/3147.htm"
                                       title="mysqldiff对数据库间进行差异比较" target="_blank">mysqldiff对数据库间进行差异比较</a>
                                    <span class="text-muted">jackyrong</span>
<a class="tag" taget="_blank" href="/search/mysqld/1.htm">mysqld</a>
                                    <div>  mysqldiff该工具是官方mysql-utilities工具集的一个脚本,可以用来对比不同数据库之间的表结构,或者同个数据库间的表结构 
   如果在windows下,直接下载mysql-utilities安装就可以了,然后运行后,会跑到命令行下: 
 
1) 基本用法 
   mysqldiff --server1=admin:12345</div>
                                </li>
                                <li><a href="/article/3274.htm"
                                       title="spring data jpa 方法中可用的关键字" target="_blank">spring data jpa 方法中可用的关键字</a>
                                    <span class="text-muted">lawrence.li</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>spring data jpa 支持以方法名进行查询/删除/统计。 
查询的关键字为find 
删除的关键字为delete/remove (>=1.7.x) 
统计的关键字为count (>=1.7.x) 
  
修改需要使用@Modifying注解 
@Modifying
@Query("update User u set u.firstna</div>
                                </li>
                                <li><a href="/article/3401.htm"
                                       title="Spring的ModelAndView类" target="_blank">Spring的ModelAndView类</a>
                                    <span class="text-muted">nicegege</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>项目中controller的方法跳转的到ModelAndView类,一直很好奇spring怎么实现的? 
/*
 * Copyright 2002-2010 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * yo</div>
                                </li>
                                <li><a href="/article/3528.htm"
                                       title="搭建 CentOS 6 服务器(13) - rsync、Amanda" target="_blank">搭建 CentOS 6 服务器(13) - rsync、Amanda</a>
                                    <span class="text-muted">rensanning</span>
<a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a>
                                    <div>(一)rsync 
 
Server端 
 
# yum install rsync
# vi /etc/xinetd.d/rsync
    service rsync
    {
        disable = no
        flags           = IPv6
        socket_type     = stream
        wait    </div>
                                </li>
                                <li><a href="/article/3655.htm"
                                       title="Learn Nodejs 02" target="_blank">Learn Nodejs 02</a>
                                    <span class="text-muted">toknowme</span>
<a class="tag" taget="_blank" href="/search/nodejs/1.htm">nodejs</a>
                                    <div>(1)npm是什么   
npm is the package manager for node 
官方网站:https://www.npmjs.com/ 
npm上有很多优秀的nodejs包,来解决常见的一些问题,比如用node-mysql,就可以方便通过nodejs链接到mysql,进行数据库的操作 
在开发过程往往会需要用到其他的包,使用npm就可以下载这些包来供程序调用 
&nb</div>
                                </li>
                                <li><a href="/article/3782.htm"
                                       title="Spring MVC 拦截器" target="_blank">Spring MVC 拦截器</a>
                                    <span class="text-muted">xp9802</span>
<a class="tag" taget="_blank" href="/search/spring+mvc/1.htm">spring mvc</a>
                                    <div>Controller层的拦截器继承于HandlerInterceptorAdapter 
 
 HandlerInterceptorAdapter.java   1  public   abstract   class  HandlerInterceptorAdapter  implements  HandlerIntercep</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>