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

行为驱动开发:一篇文章带你用 Python 玩转 BDD_第1张图片
相信大部分的人都听说过 BDD,即:行为驱动开发,但并未涉及到它的使用方和项目实战。

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

1. BDD 及优势

BDD,行为驱动开发是 敏捷软件开发 的一种技术,鼓励软件项目的所有成员之间的相互协助
传统的软件开发方式主要缺点包含:测试用例比较单一,导致覆盖率不高;业务和产品不能够全面了解产品的行为表现

BDD 的出现主要优势有下面 2 点,主要体现在:
可以很好的减少项目成员之间的沟通成本,增加协作

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

2. 软件开发流程

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

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

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

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

行为驱动开发:一篇文章带你用 Python 玩转 BDD_第2张图片

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 命令查看所有的中文关键字:

行为驱动开发:一篇文章带你用 Python 玩转 BDD_第3张图片
接着,利用这些关键字结合具体行为,编写的 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>需要注意的是,behave 最新版本转成的 cucumber 测试报告,在 Jenkins 中没法展示出来,建议降低为 1.2.5 版本</p> 
  <p>第 5 步,本地运行<br> 在 Features 文件同级目录下,执行下面的命令,将在本地生成格式化后 json 格式的测试报告</p> 
  <pre><code># 以中文语言的形式在本地运行
# 在本地产生测试报告
behave --lang=zh-CN -f json.pretty -o './test_report.json'
</code></pre> 
  <p>第 6 步,持续集成<br> 首先搭建 Jenkins 环境,然后安装 Cucumber reports 插件<br> https://plugins.jenkins.io/cucumber-reports</p> 
  <p><a href="http://img.e-com-net.com/image/info8/8a6ece565f5a4100a9ce232445f7013d.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/8a6ece565f5a4100a9ce232445f7013d.jpg" alt="行为驱动开发:一篇文章带你用 Python 玩转 BDD_第4张图片" width="650" height="343" style="border:1px solid black;"></a></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> 
  <p><a href="http://img.e-com-net.com/image/info8/6950a08fe8c4416b87843ad2c7038009.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/6950a08fe8c4416b87843ad2c7038009.jpg" alt="行为驱动开发:一篇文章带你用 Python 玩转 BDD_第5张图片" width="650" height="361" style="border:1px solid black;"></a></p> 
  <p>第 7 步,构建<br> 构建后,测试脚本会自动进行执行,然后会在结果栏生成可视化测试报告</p> 
  <h1>6.最后</h1> 
  <p>文章只是通过 Python 中的 Behave 框架来谈 BDD 在实际项目中的用法</p> 
  <p>如果你想在 Java 或者 Golang 项目中使用,可以直接 JBehave 或者 GoDog 框架来实现,除了语法外,基本操作方法类似。</p> 
  <p>文中的完全代码我已经上传到公众号后台,关注公众号【<strong>AirPython</strong>】 后回复关键字【BDD】 获取全部源码。</p> 
  <p>以上便是我今天的分享,如果对你有帮助,可以帮忙转发一下。</p> 
  <p><a href="http://img.e-com-net.com/image/info8/b714c37674bb418da0c6ae87409a34f7.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/b714c37674bb418da0c6ae87409a34f7.jpg" alt="行为驱动开发:一篇文章带你用 Python 玩转 BDD_第6张图片" width="344" height="344" style="border:1px solid black;"></a></p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1275333160036483072"></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/1899390361990656000.htm"
                           title="ffplay 使用文档介绍" target="_blank">ffplay 使用文档介绍</a>
                        <span class="text-muted">码流怪侠</span>
<a class="tag" taget="_blank" href="/search/FFmpeg/1.htm">FFmpeg</a><a class="tag" taget="_blank" href="/search/ffplay/1.htm">ffplay</a><a class="tag" taget="_blank" href="/search/%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">播放器</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E7%9B%B4%E6%92%AD/1.htm">直播</a><a class="tag" taget="_blank" href="/search/%E8%BD%AC%E7%A0%81/1.htm">转码</a>
                        <div>ffplayffplay是一个简单的媒体播放器,它是FFmpeg项目的一部分。FFmpeg是一个广泛使用的多媒体框架,能够解码、编码、转码、复用、解复用、流化、过滤和播放几乎所有类型的媒体文件。ffplay主要用于测试和调试,因为它提供了一个命令行界面,可以方便地查看媒体文件的详细信息,如视频帧、音频波形等。它支持多种视频和音频格式,并且可以实时显示解码过程中的统计信息。使用文档原文地址:http</div>
                    </li>
                    <li><a href="/article/1899388724085583872.htm"
                           title="Python从0到100(七十六):计算机视觉-直方图和自适应直方图均衡化" target="_blank">Python从0到100(七十六):计算机视觉-直方图和自适应直方图均衡化</a>
                        <span class="text-muted">是Dream呀</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/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:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!欢迎大家订阅专栏:零基础学Python:Python从0到100最新</div>
                    </li>
                    <li><a href="/article/1899386453226483712.htm"
                           title="python递推法_如何使用Python递归函数中的递推?" target="_blank">python递推法_如何使用Python递归函数中的递推?</a>
                        <span class="text-muted">热茶走</span>
<a class="tag" taget="_blank" href="/search/python%E9%80%92%E6%8E%A8%E6%B3%95/1.htm">python递推法</a>
                        <div>我们大家都知道,一个函数可能存在多种不同的用法,很少是有函数只针对一个方式,那么基于一种函数,我们肯定要了解多个方式,今日针对递归函数里的递推内容给大家介绍哦~递归是什么?是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象。下面是个人理解:递归就是在函数内部调用自己的函数被称之为递归。实例:#直接调用自己:deffunc:print('fromfunc')funcFunc#间接</div>
                    </li>
                    <li><a href="/article/1899386074359197696.htm"
                           title="python递推式_Python 递推式构造列表(List Comprehensions)" target="_blank">python递推式_Python 递推式构造列表(List Comprehensions)</a>
                        <span class="text-muted">man One</span>
<a class="tag" taget="_blank" href="/search/python%E9%80%92%E6%8E%A8%E5%BC%8F/1.htm">python递推式</a>
                        <div>你需要构造一个新的列表,列表中的元素是从一个已知列表中的元素计算而得到的.比如你要创建一个列表,里面的元素是另一个列表中的元素加23后得到的.使用递推式构造列表是最理想的方法:thenewlist=[x+23forxintheoldlist]如果你希望用一个列表中大于5的元素构造一个新的列表,使用递推式也是很方便的:thenewlist=[xforxintheoldlistifx>5]如果你希望将</div>
                    </li>
                    <li><a href="/article/1899384937878974464.htm"
                           title="Dash 简介" target="_blank">Dash 简介</a>
                        <span class="text-muted">tankusa</span>
<a class="tag" taget="_blank" href="/search/dash/1.htm">dash</a>
                        <div>Dash是一个基于Python的开源框架,专门用于构建数据分析和数据可视化的Web应用程序。Dash由Plotly团队开发,旨在帮助数据分析师、数据科学家和开发人员快速创建交互式的、基于数据的Web应用,而无需深入掌握前端技术(如HTML、CSS和JavaScript)。Dash的核心优势在于其简单易用性和强大的功能。通过Dash,用户可以使用纯Python代码来构建复杂的Web应用,而无需编写繁</div>
                    </li>
                    <li><a href="/article/1899381404484038656.htm"
                           title="【软件测试】功能自动化测试用例通常包含哪些要素" target="_blank">【软件测试】功能自动化测试用例通常包含哪些要素</a>
                        <span class="text-muted">小马哥编程</span>
<a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B/1.htm">测试用例</a>
                        <div>功能自动化测试用例是用于验证软件功能是否按预期工作的脚本或代码。与接口自动化测试用例不同,功能自动化测试用例通常关注用户界面(UI)和用户交互。以下是功能自动化测试用例的主要要素:1.用例ID唯一标识符,用于追踪和管理测试用例。2.用例名称简要描述测试的目标或功能。3.测试场景描述测试的具体场景或用户操作流程。例如:“验证用户登录功能”。4.前置条件执行测试前需要满足的条件。例如:用户已注册。浏览</div>
                    </li>
                    <li><a href="/article/1899380268913979392.htm"
                           title="【UI自动化框架设计思路】runner:如何运行框架" target="_blank">【UI自动化框架设计思路】runner:如何运行框架</a>
                        <span class="text-muted">小怪兽长大啦</span>
<a class="tag" taget="_blank" href="/search/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/1.htm">UI自动化测试技术分享</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>一、简介**功能:**自动化测试的运行器,负责整合UI识别与UI操作、读取配置文件并执行测试用例步骤。参数:config_pth:配置文件的路径(字符串类型)。说明:Runner类是整个自动化测试流程的核心入口点,通过加载配置文件并结合UI操作类,执行测试用例的步骤。它将配置管理、UI操作和测试执行整合为一个完整的自动化测试流程。二、代码解析1.init方法**功能:**初始化Runner类,加载</div>
                    </li>
                    <li><a href="/article/1899380268410662912.htm"
                           title="【UI自动化技术思路分析】【总纲】UI自动化代码完整设计思路" target="_blank">【UI自动化技术思路分析】【总纲】UI自动化代码完整设计思路</a>
                        <span class="text-muted">小怪兽长大啦</span>
<a class="tag" taget="_blank" href="/search/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/1.htm">UI自动化测试技术分享</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>一、自动化框架散装思路代码结构如下所示️UIAutomationTools:UI自动化操作工具app:业务功能代码ui_automation.py:为Android设备提供UI自动化操作的工具类case:测试用例case_template.csv:UI测试用例步骤config:配置文件login:登录相关的ICON图标路径icon_config.yaml:图片路径配置文件runner:运行器con</div>
                    </li>
                    <li><a href="/article/1899380142069837824.htm"
                           title="视频下载插件:yt-dlp" target="_blank">视频下载插件:yt-dlp</a>
                        <span class="text-muted">小怪兽长大啦</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>Yt-dlp插件使用下载方法方法一:Python插件下载使用pip工具安装即可:pipinstallyt-dlp.Python已经配置过环境变量,下载yt-dlp时不需要配置。方法二:直接下载EXE可执行文件网上下载yt-dlp应用程序:https://github.com/yt-dlp/yt-dlp/releases配置环境变量。常用使用命令(配置好环境变量后,控制台下输入命令即可)直接下载视频</div>
                    </li>
                    <li><a href="/article/1899379386608578560.htm"
                           title="Python __init__.py 模块详解" target="_blank">Python __init__.py 模块详解</a>
                        <span class="text-muted">鱼丸丶粗面</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/__init__.py/1.htm">__init__.py</a>
                        <div>文章目录1概述2导入演示2.1执行顺序:先父后子2.2导入所有模块(含子模块)1概述1.工具:Pycharm场景:在创建一个PythonPackage时,会默认在该包下生成一个'__init__.py'文件2.目的:'进行一些初始化操作'(1)当importpackage时,"自动"执行'__init__.py'文件中的内容(2)常用于导入模块2导入演示2.1执行顺序:先父后子目录结构:目录结构简</div>
                    </li>
                    <li><a href="/article/1899379260221616128.htm"
                           title="DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之功能优化,添加列宽调整功能Table12" target="_blank">DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之功能优化,添加列宽调整功能Table12</a>
                        <span class="text-muted">宝码香车</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a><a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a>
                        <div>前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦目录DeepSeek助力Vue3开发:打造丝滑的表格(Table)之功能优化,添加列宽调整功能Table12页面效果指令输入think组件代码功能增强说明:注意事项:代码测试测试代码正常跑通,附其他基本代码编写路由src\router\index</div>
                    </li>
                    <li><a href="/article/1899378250661031936.htm"
                           title="Python __init__.py" target="_blank">Python __init__.py</a>
                        <span class="text-muted">愚昧之山绝望之谷开悟之坡</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/init/1.htm">init</a>
                        <div>Python__init__.py作用详解尼古拉苏关注12018.06.1012:57:34字数745阅读45,278转载于:https://www.cnblogs.com/tp1226/p/8453854.html__init__.py该文件的作用就是相当于把自身整个文件夹当作一个包来管理,每当有外部import的时候,就会自动执行里面的函数。1.标识该目录是一个python的模块包(modul</div>
                    </li>
                    <li><a href="/article/1899377369186103296.htm"
                           title="autoMate - AI实现电脑任务自动化的本地工具" target="_blank">autoMate - AI实现电脑任务自动化的本地工具</a>
                        <span class="text-muted">小众AI</span>
<a class="tag" taget="_blank" href="/search/AI%E5%BC%80%E6%BA%90/1.htm">AI开源</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><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>GitHub:https://github.com/yuruotong1/autoMate更多AI开源软件:发现分享好用的AI工具、AI开源软件、AI模型、AI变现-小众AIautoMate是一款由开源开发的本地自动化工具,以AI+RPA(人工智能+机器人流程自动化)为核心特色。它将大型语言模型的智能理解与RPA的流程执行能力结合,用户只需用自然语言描述任务,如“整理桌面文件”或“生成周报”,即可</div>
                    </li>
                    <li><a href="/article/1899376988011950080.htm"
                           title="电脑装机之后耳机有杂音,原因及解决方案" target="_blank">电脑装机之后耳机有杂音,原因及解决方案</a>
                        <span class="text-muted">niuTaylor</span>
<a class="tag" taget="_blank" href="/search/%E7%A1%AC%E4%BB%B6%E5%8C%BA/1.htm">硬件区</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E9%A2%91%E5%B9%B2%E6%89%B0/1.htm">音频干扰</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E6%BA%90%E7%BA%BF/1.htm">电源线</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E5%8F%B7%E5%B9%B2%E6%89%B0/1.htm">信号干扰</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E9%A2%91%E7%BA%BF%E8%B7%AF%E5%BE%84/1.htm">音频线路径</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E9%83%A8%E5%B9%B2%E6%89%B0/1.htm">内部干扰</a>
                        <div>**解决过程:**有杂声的原因无外乎是音频线质量有问题另外是有其他因素干扰。首先客服寄了一根新的音频线,不装机箱内,只单纯插入接口,没有杂音。装机后开机测试,杂音小了但还是有。这肯定是有干扰,周围没有外部设备,干扰来自内部**原因:**电源的主板供电线压在音频线上,大电流产生信号干扰。**解决方案:**音频线更改路径,远离电源线。</div>
                    </li>
                    <li><a href="/article/1899375098620604416.htm"
                           title="从零手撕 LLaMa3 项目爆火(图解+代码)" target="_blank">从零手撕 LLaMa3 项目爆火(图解+代码)</a>
                        <span class="text-muted">机器学习社区</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大模型</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%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大模型</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/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/RAG/1.htm">RAG</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E6%A8%A1%E6%80%81%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">多模态大模型</a><a class="tag" taget="_blank" href="/search/Llama/1.htm">Llama</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">面试题</a>
                        <div>节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。汇总合集《大模型面试宝典》(2024版)发布!一个月前,Meta发布了开源大模型llama3系列,在多个关键基准测试中优于业界SOTA模型,并在代码生成任务上全面领先。此后,开发</div>
                    </li>
                    <li><a href="/article/1899374334745571328.htm"
                           title="深度学习:偏差和方差" target="_blank">深度学习:偏差和方差</a>
                        <span class="text-muted">壹十壹</span>
<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/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/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/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a>
                        <div>偏差(Bias)偏差衡量了模型预测值的平均值与真实值之间的差距。换句话说,偏差描述了模型预测的准确度。一个高偏差的模型容易出现欠拟合,即模型无法捕捉数据中的真实关系,因为它对数据的特征做出了错误的假设。特征:高偏差的模型通常是过于简单的模型,无法对数据中的复杂关系进行准确建模。高偏差模型的训练误差和测试误差可能都较高。解决方法:增加模型复杂度:例如增加多项式的阶数、增加神经网络的层数等。使用更多的</div>
                    </li>
                    <li><a href="/article/1899373704400400384.htm"
                           title="SOPHON SDK解码视频流的常见调试方法" target="_blank">SOPHON SDK解码视频流的常见调试方法</a>
                        <span class="text-muted">算能开发者社区</span>
<a class="tag" taget="_blank" href="/search/SOPHON/1.htm">SOPHON</a><a class="tag" taget="_blank" href="/search/SDK%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/1.htm">SDK常见问题</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>SOPHONSDK解码视频流的常见调试方法1.rtsp连接测试2.判断rtsp是否正常工作3.确认解码器是否能正常工作:(url为文件名或者rtsp连接地址)4.确认解码器和vpp的OpenCV接口是否正常工作5.解码不正确或者无法解码的最终调试手段1.rtsp连接测试ffmpeg-rtsp_transporttcp-iurl-frawvideo-y/dev/null或者ffmpeg-rtsp_t</div>
                    </li>
                    <li><a href="/article/1899369078150197248.htm"
                           title="centos7使用yum网络安装" target="_blank">centos7使用yum网络安装</a>
                        <span class="text-muted"></span>

                        <div>CentOS7Yum网络安装完全指南核心原理分析Yum(YellowdogUpdater,Modified)作为RPM系统的智能化软件包管理工具,通过以下机制实现自动化安装:依赖解析:自动识别软件包的前置依赖关系仓库同步:连接配置的软件仓库(repo)获取元数据事务处理:采用原子化操作保证安装/更新的完整性️全流程安装步骤详解步骤1:连接CentOS7服务器sshusername@server-i</div>
                    </li>
                    <li><a href="/article/1899365007498473472.htm"
                           title="【软件测试】接口自动化测试用例通常包含哪些要素" target="_blank">【软件测试】接口自动化测试用例通常包含哪些要素</a>
                        <span class="text-muted">小马哥编程</span>
<a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B/1.htm">测试用例</a>
                        <div>接口自动化测试用例通常包含以下要素:用例ID:唯一标识符,便于追踪和管理。用例名称:简要描述测试目的。接口信息:URL:接口地址。请求方法:如GET、POST、PUT、DELETE等。请求参数:Headers:如Content-Type、Authorization等。QueryParameters:GET请求中的查询参数。Body:POST/PUT请求的请求体,通常为JSON或XML。预期结果:状</div>
                    </li>
                    <li><a href="/article/1899364248610467840.htm"
                           title="机器学习之线性代数" target="_blank">机器学习之线性代数</a>
                        <span class="text-muted">珠峰日记</span>
<a class="tag" taget="_blank" href="/search/AI%E7%90%86%E8%AE%BA%E4%B8%8E%E5%AE%9E%E8%B7%B5/1.htm">AI理论与实践</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/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>
                        <div>文章目录一、引言:线性代数为何是AI的基石二、向量:AI世界的基本构建块(一)向量的定义(二)向量基础操作(三)重要概念三、矩阵:AI数据的强大容器(一)矩阵的定义(二)矩阵运算(三)矩阵特性(四)矩阵分解(五)Python示例(使用NumPy库)四、线性代数在AI中的应用(一)数据表示(二)降维:PCA(三)线性回归(四)计算机视觉(五)自然语言处理一、引言:线性代数为何是AI的基石在人工智能领</div>
                    </li>
                    <li><a href="/article/1899361383024226304.htm"
                           title="2025精选VS经典:10款项目管理软件横评榜单" target="_blank">2025精选VS经典:10款项目管理软件横评榜单</a>
                        <span class="text-muted"></span>

                        <div>为什么90%的项目经理都在用错工具?深夜11点,项目经理李然盯着甘特图上交错的红色预警线,第6次推翻项目排期——这已是本季度因工具协作不畅导致的第3次交付延期。在敏捷开发成为主流的2025年,“工具选型偏差”正以每年23%的速度吞噬着企业效率(数据来源:PMI2025年行业报告)。作为操盘过金融、IT、制造业等全领域项目的战略官,我发现“工具适配度”比功能强大更重要。本文将用WBS(工作分解结构)</div>
                    </li>
                    <li><a href="/article/1899359709018779648.htm"
                           title="有趣的学习Python-第十篇:Python的“魔法宝库”:标准库之旅" target="_blank">有趣的学习Python-第十篇:Python的“魔法宝库”:标准库之旅</a>
                        <span class="text-muted">王盼达</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%89%E8%B6%A3%E7%9A%84%E5%AD%A6%E4%B9%A0Python/1.htm">有趣的学习Python</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</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>Python不仅是一门强大的编程语言,更像是一座充满宝藏的“魔法宝库”,里面装满了各种各样的“魔法工具”(标准库)。这些“魔法工具”可以帮助你轻松地完成各种任务,从文件操作到网络编程,从数据处理到性能优化。接下来,让我们一起探索Python的“魔法宝库”,看看这些“魔法工具”到底有多神奇!10.1操作系统接口:与“魔法世界”互动os模块就像是一个“魔法接口”,可以帮助你与操作系统进行互动。你可以用</div>
                    </li>
                    <li><a href="/article/1899359582615040000.htm"
                           title="有趣的学习Python-第八篇:Python的“魔法盾牌”:错误与异常处理" target="_blank">有趣的学习Python-第八篇:Python的“魔法盾牌”:错误与异常处理</a>
                        <span class="text-muted">王盼达</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%89%E8%B6%A3%E7%9A%84%E5%AD%A6%E4%B9%A0Python/1.htm">有趣的学习Python</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</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>在Python的魔法世界里,即使是经验丰富的魔法师也可能遇到一些“魔法失误”。这些失误分为两种:语法错误和异常。别担心,Python为你准备了一面强大的“魔法盾牌”,帮助你应对这些挑战。8.1语法错误:魔法咒语写错了语法错误就像是你在念魔法咒语时,不小心说错了单词。这是学习Python过程中最常见的问题。比如,你可能忘记在while循环后面加上冒号:whileTrueprint('Hellowor</div>
                    </li>
                    <li><a href="/article/1899358951691055104.htm"
                           title="Python字符串操作" target="_blank">Python字符串操作</a>
                        <span class="text-muted">weixin_30871905</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>转自http://blog.chinaunix.net/u/19742/showart_382176.html#Python字符串操作'''1.复制字符串'''#strcpy(sStr1,sStr2)sStr1='strcpy'sStr2=sStr1sStr1='strcpy2'printsStr2'''2.连接字符串'''#strcat(sStr1,sStr2)sStr1='strcat'sSt</div>
                    </li>
                    <li><a href="/article/1899353533963104256.htm"
                           title="【UDS诊断(ClearDiagnosticInformation_0x84服务)测试用例CAPL代码全解析⑦】" target="_blank">【UDS诊断(ClearDiagnosticInformation_0x84服务)测试用例CAPL代码全解析⑦】</a>
                        <span class="text-muted">车端域控测试工程师</span>
<a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B/1.htm">测试用例</a><a class="tag" taget="_blank" href="/search/%E6%B1%BD%E8%BD%A6/1.htm">汽车</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a><a class="tag" taget="_blank" href="/search/CANoe/1.htm">CANoe</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>ISO14229-1:2023UDS诊断【ClearDiagnosticInformation_0x84服务】_TestCase07作者:车端域控测试工程师更新日期:2025年03月11日关键词:UDS诊断协议、清除诊断信息服务、ClearDiagnosticInformation_0x84服务、ISO14229-1:2023TC84-007测试用例用例ID测试场景验证要点参考条款预期结果TC84</div>
                    </li>
                    <li><a href="/article/1899348108433747968.htm"
                           title="零基础必看!CCF-GESP Python一级考点全解析:运算符这样学就对了" target="_blank">零基础必看!CCF-GESP Python一级考点全解析:运算符这样学就对了</a>
                        <span class="text-muted">奕澄羽邦</span>
<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>第一章编程世界的基础工具:运算符三剑客在Python编程语言中,运算符如同魔法咒语般神奇。对于CCF-GESPPython一级考生而言,正确掌握比较运算符、算术运算符和逻辑运算符这三大基础工具,就相当于打开了数字世界的大门。这三个运算符家族共同构成了程序逻辑的核心骨架,其灵活组合能实现从简单计算到复杂判断的多样功能。1.1运算符分类图谱算术运算符:负责数字间的数学运算(+-*/%)比较运算符:用于</div>
                    </li>
                    <li><a href="/article/1899347352498532352.htm"
                           title="Python 字符串操作" target="_blank">Python 字符串操作</a>
                        <span class="text-muted">iteye_13776</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/C/1.htm">C</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a>
                        <div>Python截取字符串使用变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾。#例1:字符串截取str='12345678'printstr[0:1]>>1#输出str位置0开始到位置1以前的字符printstr[1:6]>>23456#输出str位置1开始到位置6以前的字符num=18str='0000'+str(num)#合并字</div>
                    </li>
                    <li><a href="/article/1899331847842754560.htm"
                           title="【Python 第五篇章】数据类型" target="_blank">【Python 第五篇章】数据类型</a>
                        <span class="text-muted">蜗牛 | ICU</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E4%B8%93%E6%A0%8F/1.htm">专栏</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一、列表详解list.append(x)在列表末尾添加一个元素。list.extend(iterable)用可迭代对象的元素扩展列表。list.insert(i,x)在指定位置插入元素,第一个参数是插入元素的索引,第二个是值。list.remove(x)从列表中删除第一个值为x的元素。list.pop([i])移除列表中给定位置的条目,并返回该条目。如果未指定索引号,则a.pop()将移除并返回列</div>
                    </li>
                    <li><a href="/article/1899331721439014912.htm"
                           title="python catia catalog文件_Python封装的获取文件目录的函数" target="_blank">python catia catalog文件_Python封装的获取文件目录的函数</a>
                        <span class="text-muted">卢新生</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/catia/1.htm">catia</a><a class="tag" taget="_blank" href="/search/catalog%E6%96%87%E4%BB%B6/1.htm">catalog文件</a>
                        <div>获取指定文件夹中文件的函数,网上学习时东拼西凑的结果。注意,其中文件名如1.txt,文件路径如D:\文件夹\1.txt;direct为第一层子级importos#filePath输入文件夹全路径#mode#1递归获取所有文件名;#2递归获取所有文件路径;#3获取direct文件名;#4获取direct文件路径;#5获取direct文件名和direct子文件夹名;#6获取direct文件路径和dir</div>
                    </li>
                    <li><a href="/article/1899330208956215296.htm"
                           title="Python:每日一题之错误票据" target="_blank">Python:每日一题之错误票据</a>
                        <span class="text-muted">努力的敲码工</span>
<a class="tag" taget="_blank" href="/search/%E8%93%9D%E6%A1%A5%E6%9D%AF/1.htm">蓝桥杯</a><a class="tag" taget="_blank" href="/search/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/1.htm">每日一题</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%93%9D%E6%A1%A5%E6%9D%AF/1.htm">蓝桥杯</a>
                        <div>题目描述某涉密单位下发了某种票据,并要在年终全部收回。每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。你的任务是通过编程,找出断号的ID和重号的ID。假设断号不可能发生在最大和最小号。输入描述输入描述要求程序首先输入一个整数N(N<100)表示后面数据行数。接着读入N行数据</div>
                    </li>
                                <li><a href="/article/119.htm"
                                       title="Spring中@Value注解,需要注意的地方" target="_blank">Spring中@Value注解,需要注意的地方</a>
                                    <span class="text-muted">无量</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/%40Value/1.htm">@Value</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a>
                                    <div>Spring 3以后,支持@Value注解的方式获取properties文件中的配置值,简化了读取配置文件的复杂操作 
 
 
1、在applicationContext.xml文件(或引用文件中)中配置properties文件 
 
<bean id="appProperty"
    class="org.springframework.beans.fac</div>
                                </li>
                                <li><a href="/article/246.htm"
                                       title="mongoDB 分片" target="_blank">mongoDB 分片</a>
                                    <span class="text-muted">开窍的石头</span>
<a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a>
                                    <div>    mongoDB的分片。要mongos查询数据时候 先查询configsvr看数据在那台shard上,configsvr上边放的是metar信息,指的是那条数据在那个片上。由此可以看出mongo在做分片的时候咱们至少要有一个configsvr,和两个以上的shard(片)信息。 
    第一步启动两台以上的mongo服务 
&nb</div>
                                </li>
                                <li><a href="/article/373.htm"
                                       title="OVER(PARTITION BY)函数用法" target="_blank">OVER(PARTITION BY)函数用法</a>
                                    <span class="text-muted">0624chenhong</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>这篇写得很好,引自 
http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html 
 
 
OVER(PARTITION BY)函数用法 
 
 2010年10月26日 
 
OVER(PARTITION BY)函数介绍 
 
开窗函数        &nb</div>
                                </li>
                                <li><a href="/article/500.htm"
                                       title="Android开发中,ADB server didn't ACK 解决方法" target="_blank">Android开发中,ADB server didn't ACK 解决方法</a>
                                    <span class="text-muted">一炮送你回车库</span>
<a class="tag" taget="_blank" href="/search/Android%E5%BC%80%E5%8F%91/1.htm">Android开发</a>
                                    <div>首先通知:凡是安装360、豌豆荚、腾讯管家的全部卸载,然后再尝试。 
  
一直没搞明白这个问题咋出现的,但今天看到一个方法,搞定了!原来是豌豆荚占用了 5037 端口导致。 
参见原文章:一个豌豆荚引发的血案——关于ADB server didn't ACK的问题 
简单来讲,首先将Windows任务进程中的豌豆荚干掉,如果还是不行,再继续按下列步骤排查。 
&nb</div>
                                </li>
                                <li><a href="/article/627.htm"
                                       title="canvas中的像素绘制问题" target="_blank">canvas中的像素绘制问题</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/canvas/1.htm">canvas</a>
                                    <div>pixl的绘制,1.如果绘制点正处于相邻像素交叉线,绘制x像素的线宽,则从交叉线分别向前向后绘制x/2个像素,如果x/2是整数,则刚好填满x个像素,如果是小数,则先把整数格填满,再去绘制剩下的小数部分,绘制时,是将小数部分的颜色用来除以一个像素的宽度,颜色会变淡。所以要用整数坐标来画的话(即绘制点正处于相邻像素交叉线时),线宽必须是2的整数倍。否则会出现不饱满的像素。 
2.如果绘制点为一个像素的</div>
                                </li>
                                <li><a href="/article/754.htm"
                                       title="编码乱码问题" target="_blank">编码乱码问题</a>
                                    <span class="text-muted">灵静志远</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A0%81/1.htm">编码</a>
                                    <div>1、JVM中单个字符占用的字节长度跟编码方式有关,而默认编码方式又跟平台是一一对应的或说平台决定了默认字符编码方式;2、对于单个字符:ISO-8859-1单字节编码,GBK双字节编码,UTF-8三字节编码;因此中文平台(中文平台默认字符集编码GBK)下一个中文字符占2个字节,而英文平台(英文平台默认字符集编码Cp1252(类似于ISO-8859-1))。 
3、getBytes()、getByte</div>
                                </li>
                                <li><a href="/article/881.htm"
                                       title="java 求几个月后的日期" target="_blank">java 求几个月后的日期</a>
                                    <span class="text-muted">darkranger</span>
<a class="tag" taget="_blank" href="/search/calendar/1.htm">calendar</a><a class="tag" taget="_blank" href="/search/getinstance/1.htm">getinstance</a>
                                    <div>Date plandate = planDate.toDate();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(plandate);
// 取得三个月后时间
cal.add(Calendar.M</div>
                                </li>
                                <li><a href="/article/1008.htm"
                                       title="数据库设计的三大范式(通俗易懂)" target="_blank">数据库设计的三大范式(通俗易懂)</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%A4%8D%E4%B9%A0/1.htm">数据库复习</a>
                                    <div>关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。数据库的设计范式是数据库设计所需要满足的规范。只有理解数据库的设计范式,才能设计出高效率、优雅的数据库,否则可能会设计出错误的数据库. 
目前,主要有六种范式:第一范式、第二范式、第三范式、BC范式、第四范式和第五范式。满足最低要求的叫第一范式,简称1NF。在第一范式基础上进一步满足一些要求的为第二范式,简称2NF。其余依此类推。</div>
                                </li>
                                <li><a href="/article/1135.htm"
                                       title="想学工作流怎么入手" target="_blank">想学工作流怎么入手</a>
                                    <span class="text-muted">atongyeye</span>
<a class="tag" taget="_blank" href="/search/jbpm/1.htm">jbpm</a>
                                    <div>工作流在工作中变得越来越重要,很多朋友想学工作流却不知如何入手。 很多朋友习惯性的这看一点,那了解一点,既不系统,也容易半途而废。好比学武功,最好的办法是有一本武功秘籍。研究明白,则犹如打通任督二脉。 
 
 
系统学习工作流,很重要的一本书《JBPM工作流开发指南》。 
 
本人苦苦学习两个月,基本上可以解决大部分流程问题。整理一下学习思路,有兴趣的朋友可以参考下。 
 
1  首先要</div>
                                </li>
                                <li><a href="/article/1262.htm"
                                       title="Context和SQLiteOpenHelper创建数据库" target="_blank">Context和SQLiteOpenHelper创建数据库</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/Context%E5%88%9B%E5%BB%BA%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">Context创建数据库</a>
                                    <div>       一直以为安卓数据库的创建就是使用SQLiteOpenHelper创建,但是最近在android的一本书上看到了Context也可以创建数据库,下面我们一起分析这两种方式创建数据库的方式和区别,重点在SQLiteOpenHelper 
  
  
一:SQLiteOpenHelper创建数据库: 
  
1,SQLi</div>
                                </li>
                                <li><a href="/article/1389.htm"
                                       title="浅谈group by和distinct" target="_blank">浅谈group by和distinct</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/group+by/1.htm">group by</a><a class="tag" taget="_blank" href="/search/distinct/1.htm">distinct</a>
                                    <div>        group by和distinct只了去重意义一样,但是group by应用范围更广泛些,如分组汇总或者从聚合函数里筛选数据等。 
        譬如:统计每id数并且只显示数大于3 
select id ,count(id) from ta</div>
                                </li>
                                <li><a href="/article/1516.htm"
                                       title="vi opertion" target="_blank">vi opertion</a>
                                    <span class="text-muted">征客丶</span>
<a class="tag" taget="_blank" href="/search/mac/1.htm">mac</a><a class="tag" taget="_blank" href="/search/opration/1.htm">opration</a><a class="tag" taget="_blank" href="/search/vi/1.htm">vi</a>
                                    <div>进入 command mode (命令行模式) 
按 esc 键 
再按 shift + 冒号 
 
注:以下命令中 带 $ 【在命令行模式下进行】,不带 $ 【在非命令行模式下进行】 
 
一、文件操作 
1.1、强制退出不保存 
$ q! 
1.2、保存 
$ w 
1.3、保存并退出 
$ wq 
1.4、刷新或重新加载已打开的文件 
$ e 
 
二、光标移动 
2.1、跳到指定行 
数字</div>
                                </li>
                                <li><a href="/article/1643.htm"
                                       title="【Spark十四】深入Spark RDD第三部分RDD基本API" target="_blank">【Spark十四】深入Spark RDD第三部分RDD基本API</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a>
                                    <div>  
对于K/V类型的RDD,如下操作是什么含义? 
  
val rdd = sc.parallelize(List(("A",3),("C",6),("A",1),("B",5))
rdd.reduceByKey(_+_).collect 
 reduceByKey在这里的操作,是把</div>
                                </li>
                                <li><a href="/article/1770.htm"
                                       title="java类加载机制" target="_blank">java类加载机制</a>
                                    <span class="text-muted">BlueSkator</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">虚拟机</a>
                                    <div>java类加载机制 
1.java类加载器的树状结构 
引导类加载器 
^ 
| 
扩展类加载器 
^ 
| 
系统类加载器 
java使用代理模式来完成类加载,java的类加载器也有类似于继承的关系,引导类是最顶层的加载器,它是所有类的根加载器,它负责加载java核心库。当一个类加载器接到装载类到虚拟机的请求时,通常会代理给父类加载器,若已经是根加载器了,就自己完成加载。 
虚拟机区分一个Cla</div>
                                </li>
                                <li><a href="/article/1897.htm"
                                       title="动态添加文本框" target="_blank">动态添加文本框</a>
                                    <span class="text-muted">BreakingBad</span>
<a class="tag" taget="_blank" href="/search/%E6%96%87%E6%9C%AC%E6%A1%86/1.htm">文本框</a>
                                    <div>  <script>     var num=1; function AddInput() {      var str="";     str+="<input </div>
                                </li>
                                <li><a href="/article/2024.htm"
                                       title="读《研磨设计模式》-代码笔记-单例模式" target="_blank">读《研磨设计模式》-代码笔记-单例模式</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ 
 
 



public class Singleton {
}

/*
 * 懒汉模式。注意,getInstance如果在多线程环境中调用,需要加上synchronized,否则存在线程不安全问题
 */
class LazySingleton</div>
                                </li>
                                <li><a href="/article/2151.htm"
                                       title="iOS应用打包发布常见问题" target="_blank">iOS应用打包发布常见问题</a>
                                    <span class="text-muted">chenhbc</span>
<a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/iOS%E5%8F%91%E5%B8%83/1.htm">iOS发布</a><a class="tag" taget="_blank" href="/search/iOS%E4%B8%8A%E4%BC%A0/1.htm">iOS上传</a><a class="tag" taget="_blank" href="/search/iOS%E6%89%93%E5%8C%85/1.htm">iOS打包</a>
                                    <div>这个月公司安排我一个人做iOS客户端开发,由于急着用,我先发布一个版本,由于第一次发布iOS应用,期间出了不少问题,记录于此。 
  
1、使用Application Loader 发布时报错:Communication error.please use diagnostic mode to check connectivity.you need to have outbound acc</div>
                                </li>
                                <li><a href="/article/2278.htm"
                                       title="工作流复杂拓扑结构处理新思路" target="_blank">工作流复杂拓扑结构处理新思路</a>
                                    <span class="text-muted">comsci</span>
<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%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E4%BC%81%E4%B8%9A%E5%BA%94%E7%94%A8/1.htm">企业应用</a><a class="tag" taget="_blank" href="/search/OO/1.htm">OO</a>
                                    <div> 我们走的设计路线和国外的产品不太一样,不一样在哪里呢?  国外的流程的设计思路是通过事先定义一整套规则(类似XPDL)来约束和控制流程图的复杂度(我对国外的产品了解不够多,仅仅是在有限的了解程度上面提出这样的看法),从而避免在流程引擎中处理这些复杂的图的问题,而我们却没有通过事先定义这样的复杂的规则来约束和降低用户自定义流程图的灵活性,这样一来,在引擎和流程流转控制这一个层面就会遇到很</div>
                                </li>
                                <li><a href="/article/2405.htm"
                                       title="oracle 11g新特性Flashback data archive" target="_blank">oracle 11g新特性Flashback data archive</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>1. 什么是flashback data archive 
 
Flashback data archive是oracle 11g中引入的一个新特性。Flashback archive是一个新的数据库对象,用于存储一个或多表的历史数据。Flashback archive是一个逻辑对象,概念上类似于表空间。实际上flashback archive可以看作是存储一个或多个表的所有事务变化的逻辑空间。 </div>
                                </li>
                                <li><a href="/article/2532.htm"
                                       title="多叉树:2-3-4树" target="_blank">多叉树:2-3-4树</a>
                                    <span class="text-muted">dieslrae</span>
<a class="tag" taget="_blank" href="/search/%E6%A0%91/1.htm">树</a>
                                    <div>    平衡树多叉树,每个节点最多有4个子节点和3个数据项,2,3,4的含义是指一个节点可能含有的子节点的个数,效率比红黑树稍差.一般不允许出现重复关键字值.2-3-4树有以下特征: 
    1、有一个数据项的节点总是有2个子节点(称为2-节点) 
    2、有两个数据项的节点总是有3个子节点(称为3-节</div>
                                </li>
                                <li><a href="/article/2659.htm"
                                       title="C语言学习七动态分配 malloc的使用" target="_blank">C语言学习七动态分配 malloc的使用</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/language/1.htm">language</a><a class="tag" taget="_blank" href="/search/malloc/1.htm">malloc</a>
                                    <div>/*
	2013年3月15日15:16:24
	malloc 就memory(内存) allocate(分配)的缩写
	本程序没有实际含义,只是理解使用	
 */
# include <stdio.h>
# include <malloc.h>

int main(void)
{
	int i = 5;	//分配了4个字节 静态分配
	int * p </div>
                                </li>
                                <li><a href="/article/2786.htm"
                                       title="Objective-C编码规范[译]" target="_blank">Objective-C编码规范[译]</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83/1.htm">代码规范</a>
                                    <div>     
 
  
  原文链接 : The official raywenderlich.com Objective-C style guide  
  原文作者 : raywenderlich.com Team  
  译文出自 : raywenderlich.com Objective-C编码规范  
  译者 : Sam Lau  
  </div>
                                </li>
                                <li><a href="/article/2913.htm"
                                       title="0.性能优化-目录" target="_blank">0.性能优化-目录</a>
                                    <span class="text-muted">frank1234</span>
<a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a>
                                    <div>从今天开始笔者陆续发表一些性能测试相关的文章,主要是对自己前段时间学习的总结,由于水平有限,性能测试领域很深,本人理解的也比较浅,欢迎各位大咖批评指正。 
主要内容包括: 
一、性能测试指标 
吞吐量、TPS、响应时间、负载、可扩展性、PV、思考时间 
http://frank1234.iteye.com/blog/2180305 
 
二、性能测试策略 
生产环境相同 基准测试 预热等 
htt</div>
                                </li>
                                <li><a href="/article/3040.htm"
                                       title="Java父类取得子类传递的泛型参数Class类型" target="_blank">Java父类取得子类传递的泛型参数Class类型</a>
                                    <span class="text-muted">happyqing</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%B3%9B%E5%9E%8B/1.htm">泛型</a><a class="tag" taget="_blank" href="/search/%E7%88%B6%E7%B1%BB/1.htm">父类</a><a class="tag" taget="_blank" href="/search/%E5%AD%90%E7%B1%BB/1.htm">子类</a><a class="tag" taget="_blank" href="/search/Class/1.htm">Class</a>
                                    <div>  
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

import org.junit.Test;

abstract class BaseDao<T> {
	public void getType() {
		//Class<E> clazz =</div>
                                </li>
                                <li><a href="/article/3167.htm"
                                       title="跟我学SpringMVC目录汇总贴、PDF下载、源码下载" target="_blank">跟我学SpringMVC目录汇总贴、PDF下载、源码下载</a>
                                    <span class="text-muted">jinnianshilongnian</span>
<a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a>
                                    <div>  
----广告-------------------------------------------------------------- 
网站核心商详页开发 
掌握Java技术,掌握并发/异步工具使用,熟悉spring、ibatis框架; 
掌握数据库技术,表设计和索引优化,分库分表/读写分离; 
了解缓存技术,熟练使用如Redis/Memcached等主流技术; 
了解Ngin</div>
                                </li>
                                <li><a href="/article/3294.htm"
                                       title="the HTTP rewrite module requires the PCRE library" target="_blank">the HTTP rewrite module requires the PCRE library</a>
                                    <span class="text-muted">流浪鱼</span>
<a class="tag" taget="_blank" href="/search/rewrite/1.htm">rewrite</a>
                                    <div>./configure: error: the HTTP rewrite module requires the PCRE library. 
模块依赖性Nginx需要依赖下面3个包 
1. gzip 模块需要 zlib 库 ( 下载: http://www.zlib.net/ ) 
2. rewrite 模块需要 pcre 库 ( 下载: http://www.pcre.org/ ) 
3. s</div>
                                </li>
                                <li><a href="/article/3421.htm"
                                       title="第12章 Ajax(中)" target="_blank">第12章 Ajax(中)</a>
                                    <span class="text-muted">onestopweb</span>
<a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a>
                                    <div>index.html 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/</div>
                                </li>
                                <li><a href="/article/3548.htm"
                                       title="Optimize query with Query Stripping in Web Intelligence" target="_blank">Optimize query with Query Stripping in Web Intelligence</a>
                                    <span class="text-muted">blueoxygen</span>
<a class="tag" taget="_blank" href="/search/BO/1.htm">BO</a>
                                    <div>http://wiki.sdn.sap.com/wiki/display/BOBJ/Optimize+query+with+Query+Stripping+in+Web+Intelligence 
and a very straightfoward video 
http://www.sdn.sap.com/irj/scn/events?rid=/library/uuid/40ec3a0c-936</div>
                                </li>
                                <li><a href="/article/3675.htm"
                                       title="Java开发者写SQL时常犯的10个错误" target="_blank">Java开发者写SQL时常犯的10个错误</a>
                                    <span class="text-muted">tomcat_oracle</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a>
                                    <div>1、不用PreparedStatements     有意思的是,在JDBC出现了许多年后的今天,这个错误依然出现在博客、论坛和邮件列表中,即便要记住和理解它是一件很简单的事。开发者不使用PreparedStatements的原因可能有如下几个:     他们对PreparedStatements不了解     他们认为使用PreparedStatements太慢了     他们认为写Prepar</div>
                                </li>
                                <li><a href="/article/3802.htm"
                                       title="世纪互联与结盟有感" target="_blank">世纪互联与结盟有感</a>
                                    <span class="text-muted">阿尔萨斯</span>

                                    <div> 10月10日,世纪互联与(Foxcon)签约成立合资公司,有感。 
 全球电子制造业巨头(全球500强企业)与世纪互联共同看好IDC、云计算等业务在中国的增长空间,双方迅速果断出手,在资本层面上达成合作,此举体现了全球电子制造业巨头对世纪互联IDC业务的欣赏与信任,另一方面反映出世纪互联目前良好的运营状况与广阔的发展前景。 
 众所周知,精于电子产品制造(世界第一),对于世纪互联而言,能够与结盟</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>