使用由 Python 编写的 lxml 实现高性能 XML 解析

转载自:文章

lxml 简介

Python 从来不出现 XML 库短缺的情况。从 2.0 版本开始,它就附带了 xml.dom.minidom 和相关的 pulldom 以及 Simple API for XML (SAX) 模块。从 2.4 开始,它附带了流行的 ElementTree API。此外,很多第三方库可以提供更高级别的或更具有 python 风格的接口。

尽管任何 XML 库都足够处理简单的 Document Object Model (DOM) 或小型文件的 SAX 解析,但开发人员越来越多碰到更加大型的数据集,以及在 Web 服务上下文中实时解析 XML 的需求。同时,经验丰富的 XML 开发人员可能倾向于使用原本就支持 XML 的语言,例如 XPath 或 XSLT,这样可以保持紧凑和表达力。最理想的情况是使用 XPath 的声明式语法,同时保留 Python 的通用的功能。

我执行的基准测试使用了 Pentium M 1.86GHz ThinkPad T43、2GB RAM,运行 Ubuntu,使用 IPython 的 timeit 命令。计时的目的主要是为了比较方法,因此不应该作为所述软件的代表性基准。

lxml 是第一款表现出高性能特征的 Python XML 库,它天生支持 XPath 1.0、XSLT 1.0、定制元素类,甚至 python 风格的数据绑定接口。它构建在两个 C 库之上:libxml2 和 libxslt。它们为执行解析、序列化和转换等核心任务提供了主要动力。

您要在代码中使用 lxml 的哪一部分取决于您的需求:您是否熟悉 XPath?是否希望使用类似 Python 的对象?系统中有多少内存可用来维持大型树?

本文并没有介绍 lxml 的所有部分,但是演示了一些可以有效处理大型 XML 文件、进行优化以提高处理速度并减少内存使用的技术。这里使用了两种可免费使用的示例文档:Google 将其转换为 XML 的 U.S. 版权更新数据和 Open Directory RDF 内容。

这里只将 lxml 与 cElementTree 比较,而没有与其他 Python 库进行比较。选择 cElementTree 是因为它和 lxml 一样是 Python 2.5 的一部分,并且构建在 C 库之上。

超大型的数据会引起什么问题?

XML 库通常针对非常小的示例文件进行设计和测试。事实上,很多实际项目最初并没有完整的可用数据。编程人员一连数周或数月都使用示例内容,并编写如 清单 1 所示的代码。
清单 1. 一个简单的解析操作

from lxml import etree
doc = etree.parse('content-sample.xml')

lxml parse 方法读取整个文档并在内存中构建一个树。相对于 cElementTree,lxml 树的开销要高一些,因为它保持了更多有关节点上下文的信息,包括对其父节点的引用。使用这种方法解析一个 2G 的文档时,会使一个具有 2G RAM 的机器进入交换,这会大大影响性能。假设在编写应用程序时这些数据在内存中可用,那么将要执行较大的重构。

迭代解析
如果构建内存树并不是必须的或并不实际,则可以使用一种迭代解析技术,这种技术不需要读取整个源树。lxml 提供了两种方法:

  • 提供一个目标解析器类
  • 使用 iterparse 方法

使用目标解析器方法

目标解析器方法对于熟悉 SAX 事件驱动代码的开发人员来说应该不陌生。目标解析器是可以实现以下方法的类:

start 在元素打开时触发。数据和元素的子元素仍不可用。
end 在元素关闭时触发。
所有元素的子节点,包括文本节点,现在都是可用的。
close 在解析完成后触发。

清单 2 演示了如何创建实现所需方法的目标解析器类(这里称为 TitleTarget)。这个解析器在一个内部列表(self.text)中收集 Title 元素的文本节点,并在到达 close() 方法后返回列表。

清单 2. 一个目标解析器,它返回 Title 标记的所有文本子节点的列表

class TitleTarget(object):
    def __init__(self):
        self.text = []
    def start(self, tag, attrib):
        self.is_title = True if tag == 'Title' else False
    def end(self, tag):
        pass
    def data(self, data):
        if self.is_title:
            self.text.append(data.encode('utf-8'))
    def close(self):
        return self.text

parser = etree.XMLParser(target = TitleTarget())

# This and most other samples read in the Google copyright data
infile = 'copyright.xml'

results = etree.parse(infile, parser)    

# When iterated over, 'results' will contain the output from 
# target parser's close() method

out = open('titles.txt', 'w')
out.write('\n'.join(results))
out.close()

在运行版权数据时,代码运行时间为 54 秒。目标解析可以实现合理的速度并且不会生成消耗内存的解析树,但是在数据中为所有元素触发事件。对于特别大型的文档,如果只对其中一些元素感兴趣,那么这种方法并不理想,就像在这个例子中一样。能否将处理限制到选择的标记并获得较好的性能呢?

使用 iterparse 方法

lxml 的 iterparse 方法是 ElementTree API 的扩展。iterparse 为所选的元素上下文返回一个 Python 迭代器。它接受两个有用的参数:要监视的事件元组和标记名。在本例中,我只对 的文本内容感兴趣(达到 end 事件即可获得)。清单 3 的输出与 清单 2 的目标解析器方法的输出相同,但是速度应该会提高很多,因为 lxml 可以在内部优化事件处理。同时也会减少代码量。
清单 3. 对指定的标记和事件进行简单迭代

context = etree.iterparse(infile, events=('end,'), tag='Title')

for event, elem in context:
       out.write('%s\n' % elem.text.encode('utf-8'))
    如果运行这段代码并监视它的输出,可以看到它首先会非常快速地追加标题,然后又马上减缓下来。快速检查 top 会发现计算机已经进入交换:
    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                
    170 root      15  -5     0    0    0 D  3.9  0.0   0:01.32 kswapd0

这里发生了什么?尽管 iterparse 起初并没有消耗整个文件,但它也没有释放对每一次迭代的节点的引用。当对整个文档进行重复访问时,这点必须注意。不过,在本例中,我选择在每次循环结束后回收内存。这包括对已经处理的子节点和文本节点的引用,以及对当前节点前面的兄弟节点的引用。这些引用中来自根节点的引用也被隐式地保留,如 清单 4 所示:

清单 4. 修改后的迭代去掉了不需要的节点引用:

for event, elem in context:
    out.write('%s\n' % elem.text.encode('utf-8'))        

    # It's safe to call clear() here because no descendants will be accessed
    elem.clear()

    # Also eliminate now-empty references from the root node to  </span>
    <span class="hljs-keyword">while</span> elem.getprevious() <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">None</span>:
        <span class="hljs-keyword">del</span> elem.getparent()[<span class="hljs-number">0</span>]</code></pre> 
  <p>为简单起见,我将 清单 4 重构为一个函数,它接受一个可调用的 func 对当前节点执行操作,如 清单 5 所示。我将在后面的示例中使用这个方法。</p> 
  <p>清单 5. 函数循环遍历上下文并在每次循环时调用 func,然后清除不必要的引用</p> 
  <pre class="prettyprint"><code class=" hljs python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">fast_iter</span><span class="hljs-params">(context, func)</span>:</span>
    <span class="hljs-keyword">for</span> event, elem <span class="hljs-keyword">in</span> context:
        func(elem)
        elem.clear()
        <span class="hljs-keyword">while</span> elem.getprevious() <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">None</span>:
            <span class="hljs-keyword">del</span> elem.getparent()[<span class="hljs-number">0</span>]
    <span class="hljs-keyword">del</span> context
</code></pre> 
  <p><strong>性能特点</strong></p> 
  <p>清单 4 中的 iterparse 方法经过优化后生成的输出与 清单 2 中目标解析器生成的输出相同,但只用了一半的时间。当处理特定事件或标记名(比如本例)时,处理速度甚至比 cElementTree 还快。(但是,大多数情况下,如果解析是主要活动的话,cElementTree 的表现要比 lxml 优秀)。 <br> 表 1 展示了各种解析器技术在 基准测试侧边栏 中描述的计算机上测试版权数据使用的时间。</p> 
  <hr> 
  <pre><code>    XML 库                       方法                  平均时间,单位(秒)
    cElementTree         |    Iterparse       |      32
    lxml                 |    目标解析器        |      54
    lxml                 |优化后的 iterparse    |     25
</code></pre> 
  <hr> 
  <p><strong>它的伸缩性如何?</strong> <br> 对 Open Directory 数据使用 清单 4 中的 iterparse 方法,每次运行耗时 122 秒,约是解析版权数据所用时间的 5 倍。由于 Open Directory 数据的数量也约是版权数据的 5 倍(1.9 GB),这种方法应该表现出非常好性能,对特别大的文件尤其如此。</p> 
  <p><strong>序列化</strong></p> 
  <p>如果对 XML 文件所做的全部操作只是从单个节点获取一些文本,可以使用一个简单的正则表达式,其处理速度可能会比任何 XML 解析器都快。但是在实践中,如果数据非常复杂,则几乎不可能完成任务,因此不推荐使用这种方法。在需要真正的数据操作时,XML 库的价值是不可估量的。</p> 
  <p>将 XML 序列化为一个字符串或文件是 lxml 的长项,因为它依赖于 libxml2 C 代码库。如果要执行要求序列化的任务,lxml 无疑是最佳选择,但是需要使用一些技巧来获得最佳性能。</p> 
  <p>在序列化子树时使用 deepcopy</p> 
  <p>lxml 保持子节点及其父节点之间的引用。该特性的一个特点就是 lxml 中的节点有且仅有一个父节点(cElementTree 没有父节点)。 <br> 清单 6 包含版权文件中的所有 ,并写入了一条只包含标题和版权信息的简化记录。</p> 
  <pre class="prettyprint"><code class=" hljs python"><span class="hljs-keyword">from</span> lxml <span class="hljs-keyword">import</span> etree
<span class="hljs-keyword">import</span> deepcopy 

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">serialize</span><span class="hljs-params">(elem)</span>:</span>
    <span class="hljs-comment"># Output a new tree like:</span>
    <span class="hljs-comment"># <SimplerRecord></span>
    <span class="hljs-comment">#   <Title>This title
    #   dateid
    # 

    # Create a new root node
    r = etree.Element('SimplerRecord')

    # Create a new child
    t = etree.SubElement(r, 'Title')

    # Set this child's text attribute to the original text contents of </span>
    t.text = elem.iterchildren(tag=<span class="hljs-string">'Title'</span>).next().text

    <span class="hljs-comment"># Deep copy a descendant tree</span>
    <span class="hljs-keyword">for</span> c <span class="hljs-keyword">in</span> elem.iterchildren(tag=<span class="hljs-string">'Copyright'</span>):
        r.append( deepcopy(c) )
    <span class="hljs-keyword">return</span> r

out = open(<span class="hljs-string">'titles.xml'</span>, <span class="hljs-string">'w'</span>)
context = etree.iterparse(<span class="hljs-string">'copyright.xml'</span>, events=(<span class="hljs-string">'end'</span>,), tag=<span class="hljs-string">'Record'</span>)

<span class="hljs-comment"># Iterate through each of the <Record> nodes using our fast iteration method</span>
fast_iter(context, 
          <span class="hljs-comment"># For each <Record>, serialize a simplified version and write it</span>
          <span class="hljs-comment"># to the output file</span>
          <span class="hljs-keyword">lambda</span> elem: 
              out.write(
                 etree.tostring(serialize(elem), encoding=<span class="hljs-string">'utf-8'</span>)))</code></pre> 
  <p>不要使用 deepcopy 复制单个节点的文本。手动创建新节点、填充文本属性并进行序列化,这样做的速度更快。在我的测试中,对 和 调用 deepcopy 要比 清单 6 中的代码慢 15%。在序列化大型后代树(descendant trees)时,会看到 deepcopy 将使性能得到巨大的提升。</p> 
  <p>在使用 清单 7 中的代码对 cElementTree 进行基准测试时,lxml 的序列化程序的速度几乎提高了两倍(50% 和 95%): <br> 清单 7. 使用 cElementTree 序列化</p> 
  <pre class="prettyprint"><code class=" hljs vhdl">def serialize_cet(elem):
    r = cet.Element(<span class="hljs-attribute">'Record</span>')

    # Create a <span class="hljs-keyword">new</span> element <span class="hljs-keyword">with</span> the same text child
    t = cet.SubElement(r, <span class="hljs-attribute">'Title</span>')
    t.text = elem.find(<span class="hljs-attribute">'Title</span>').text

    # ElementTree does <span class="hljs-keyword">not</span> store parent references <span class="hljs-comment">-- an element can</span>
    # exist <span class="hljs-keyword">in</span> multiple trees. It<span class="hljs-attribute">'s</span> <span class="hljs-keyword">not</span> necessary <span class="hljs-keyword">to</span> <span class="hljs-keyword">use</span> deepcopy here.
    <span class="hljs-keyword">for</span> c <span class="hljs-keyword">in</span> elem.findall(<span class="hljs-attribute">'Copyright</span>'):
       r.append(h)
    <span class="hljs-keyword">return</span> r

<span class="hljs-keyword">context</span> = cet.iterparse(<span class="hljs-attribute">'copyright</span>.xml', events=(<span class="hljs-attribute">'end</span>',<span class="hljs-attribute">'start</span>'))
<span class="hljs-keyword">context</span> = iter(<span class="hljs-keyword">context</span>)
event, root = <span class="hljs-keyword">context</span>.<span class="hljs-keyword">next</span>()

<span class="hljs-keyword">for</span> event, elem <span class="hljs-keyword">in</span> <span class="hljs-keyword">context</span>:
    <span class="hljs-keyword">if</span> elem.tag == <span class="hljs-attribute">'Record</span>' <span class="hljs-keyword">and</span> event ==<span class="hljs-attribute">'end</span>':
        result = serialize_cet(elem)
        <span class="hljs-keyword">out</span>.write(cet.tostring(result, encoding=<span class="hljs-attribute">'utf</span>-<span class="hljs-number">8</span>'))
        root.clear()</code></pre> 
  <p>有关迭代模式的更多信息,请参阅 ElementTree 文档 “Incremental Parsing”(参见 参考资料 获得链接)。</p> 
  <hr> 
  <p><strong>快速查找元素</strong></p> 
  <p>完成解析后,最常见的 XML 任务是在解析后的树中查找特定的数据。lxml 提供了简化的搜索语法和完整的 XPath 1.0 等各种方法。作为用户,您应当了解每种方法的性能特征和优化技巧。</p> 
  <p><strong>避免使用 find 和 findall</strong></p> 
  <p>find 和 findall 方法继承自 ElementTree API,可使用简化的类似 XPath 的表达式语言(称为 ElementPath)查找一个或多个后代节点。从 ElementTree 迁移过来的用户可以继续使用 find/ElementPath 语法。</p> 
  <p>lxml 提供了另外两种查找子节点的选项:iterchildren/iterdescendants 方法和真正的 XPath。如果表达式需要匹配一个节点名,那么使用 iterchildren 或 iterdescendants 方法以及其可选的标记参数,这要比使用 ElementPath 表达式快很多(有时速度会快上两倍)。</p> 
  <p>对于更复杂的模式,可以使用 XPath 类预编译搜索模式。使用标记参数(例如 etree.XPath(“child::Title”))模拟 iterchildren 行为的简单模式的执行时间与 iterchildren 是相同的。但是,预编译仍然非常重要。在每次执行循环时编译模式或对元素使用 xpath() 方法(参见 参考资料 中 lxml 文档的描述),几乎比与只编译一次然后反复使用模式慢 2 倍。</p> 
  <p>lxml 中的 XPath 计算非常快。如果只需要对一部分节点进行序列化,那么在检查所有节点之前使用精确的 XPath 表达式限制条件,这样效果会好很多。例如,限制示例序列化使其只包括含有 night 单词的标题,如 清单 8 所示,这只需序列化完整数据所用的时间的 60%。</p> 
  <p>清单 8. 使用 XPath 类进行有条件的序列化</p> 
  <pre class="prettyprint"><code class=" hljs python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">write_if_node</span><span class="hljs-params">(out, node)</span>:</span>
    <span class="hljs-keyword">if</span> node <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">None</span>:
        out.write(etree.tostring(node, encoding=<span class="hljs-string">'utf-8'</span>))

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">serialize_with_xpath</span><span class="hljs-params">(elem, xp1, xp2)</span>:</span>
    <span class="hljs-string">'''Take our source <Record> element and apply two pre-compiled XPath classes.
    Return a node only if the first expression matches.
    '''</span>
    r = etree.Element(<span class="hljs-string">'Record'</span>)

    t = etree.SubElement(r, <span class="hljs-string">'Title'</span>)
    x = xp1(elem)
    <span class="hljs-keyword">if</span> x:
        t.text = x[<span class="hljs-number">0</span>].text
        <span class="hljs-keyword">for</span> c <span class="hljs-keyword">in</span> xp2(elem):
            r.append(deepcopy(c))
        <span class="hljs-keyword">return</span> r

xp1 = etree.XPath(<span class="hljs-string">"child::Title[contains(text(), 'night')]"</span>)
xp2 = etree.XPath(<span class="hljs-string">"child::Copyright"</span>)
out = open(<span class="hljs-string">'out.xml'</span>, <span class="hljs-string">'w'</span>)
context = etree.iterparse(<span class="hljs-string">'copyright.xml'</span>, events=(<span class="hljs-string">'end'</span>,), tag=<span class="hljs-string">'Record'</span>)
fast_iter(context, 
   <span class="hljs-keyword">lambda</span> elem: write_if_node(out, serialize_with_xpath(elem, xp1, xp2)))</code></pre> 
  <p><strong>在文档的其他部分查找节点</strong> <br> 注意,即使使用了 iterparse,仍然可以根据当前的节点 使用 XPath 谓词。要查找后面紧跟一个记录(记录的标题包含单词 night)的所有 节点,则执行以下操作:</p> 
  <pre class="prettyprint"><code class=" hljs avrasm">etree<span class="hljs-preprocessor">.XPath</span>(<span class="hljs-string">"Title[contains(../Record/following::Record[1]/Title/text(), 'night')]"</span>)</code></pre> 
  <p>然而,如果使用 清单 4 描述的节省内存的迭代策略,该命令将不会返回任何内容,因为解析完整个文档时将删除前面的节点:</p> 
  <pre class="prettyprint"><code class=" hljs avrasm">etree<span class="hljs-preprocessor">.XPath</span>(<span class="hljs-string">"Title[contains(../Record/preceding::Record[1]/Title/text(), 'night')]"</span>)</code></pre> 
  <p>虽然可以编写有效的算法来解决这一问题,但是对于那些需要跨节点进行分析的任务(特别是那些随机分布在文档中的节点),使用使用 XQuery(比如 eXist)的 XML 数据库更加适合。</p> 
  <hr> 
  <p><strong>提高性能的其他方法</strong> <br> 除了使用 lxml 内部 的特定方法外,还可以通过库以外的方法提高执行速度。其中一些方法只需要修改一下代码;而另一些方法则需要重新考虑如何处理大型数据。</p> 
  <p><strong>Psyco</strong></p> 
  <p>Psyco 模块常常被忽略,但是它可以通过较少的工作提高 Python 应用程序的速度。一个纯 Python 程序的典型性能收益是普通程序的 2 至 4 倍,但是 lxml 使用 C 语言完成了大部分工作,因此它们之间的差别非常小。当我在启用 Psyco 的情况下运行 清单 4 时,运行时间仅仅减少了 3 秒(43.9 秒对 47.3 秒)。Psyco 需要很大的内存开销,如果机器进入交换,它甚至会抵销 Python 获得的任何性能。</p> 
  <p>如果由 lxml 驱动的应用程序包含频繁执行的核心纯 Python 代码(可能是对文本节点执行的大量字符串操作),那么仅对这些方法启用 Psyco 可能会有好处。有关 Psyco 的更多信息,参见 参考资料。</p> 
  <p><strong>线程化</strong></p> 
  <p>相反,如果应用程序主要依赖内部的、C 驱动的 lxml 特性,那么可能适合将它作为多处理环境下的线程化应用程序运行。关于如何启动线程有很多限制 — 对 XSLT 而言尤其如此。要了解更多内容,可参考 lxml 文档中有关线程的 FAQ 部分。</p> 
  <p><strong>拆分解决</strong></p> 
  <p>如果可以将特别大的文档分解为单个的、可分析的子树,那么就可以在子树级别上分解文档(使用 lxml 的快速序列化),并将工作分布到位于多台计算机中的这些文件。对于执行 CPU 密集型的脱机任务,使用随需应变的虚拟服务器正成为一种日益流行的解决方案。可以获得 Python 程序员用于设置和管理 Amazon 虚拟 Elastic Compute Cloud (EC2) 集群的详细指南。参见 参考资料 了解更多信息。</p> 
  <hr> 
  <p><strong>适合大型 XML 任务的一般策略</strong> <br> 本文给出的具体代码示例可能并不适合您的项目,但是对于 GB 级或以上的 XML 数据,请考虑以下的原则(已通过测试和 lxml 文档的验证):</p> 
  <ul> 
   <li>使用迭代解析策略,渐进式地处理大型文档。</li> 
   <li>如果需要随机地搜索整个文档,那么使用索引式 XML 数据库。</li> 
   <li>只选择需要的数据。如果只对特定的节点感兴趣,使用按名字选择的方法。如果需要谓词语法,那么尝试可用的 XPath 类和方法。</li> 
   <li>考虑手头的任务和开发人员的舒适程度。如果不需要考虑速度的话,lxml 的对象化或 Amara 等对象模型对于 Python <br> 开发人员来说可能更自然。cElementTree 在只需要进行解析时才会体现出速度优势。</li> 
   <li>花些时间做些非常简单的基准测试。在处理数百万条记录时,细微的差别就会累积起来,但是并不能总是很明显地看出哪种方法最有效。</li> 
  </ul> 
  <p><strong>结束语</strong> <br> 很多软件产品都附带了 pick-two 警告,表示在速度、灵活性或可读性之间只能选择其中两种。然而,如果得到合理使用,lxml 可以满足全部三个要求。那些希望提高 DOM 性能或使用 SAX 事件驱动模型的 XML 开发人员现在有机会获得更高级的 Python 库。拥有 Python 背景的开发人员在刚开始接触 XML 时也可以轻松地利用 XPath 和 XSLT 的表达能力。这两种编程风格可以在一个基于 lxml 的应用程序中和谐共存。</p> 
  <p>本文只介绍了 lxml 的一小部分功能。请查看 lxml.objectify 模块,它主要针对那些较小的数据集或对 XML 的依赖不是强的应用程序。对于不具备良好格式的 HTML 内容,lxml 提供了两个有用的包:lxml.html 模块和 BeautifulSoup 解析器。如果要编写能够从 XSLT 调用的 Python 模块,或创建定制的 Python 或 C 扩展,还可以扩展 lxml。可以从 参考资料 中的 lxml 文档中找到有关所有这些内容的信息。</p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1835420248896008192"></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,笔记,python,xml)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1899426299345170432.htm"
                           title="入坑 Python 全能实战小白训练营,470 集干货 12.9G 大揭秘!" target="_blank">入坑 Python 全能实战小白训练营,470 集干货 12.9G 大揭秘!</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/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><a class="tag" taget="_blank" href="/search/pandas/1.htm">pandas</a><a class="tag" taget="_blank" href="/search/numpy/1.htm">numpy</a><a class="tag" taget="_blank" href="/search/matplotlib/1.htm">matplotlib</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a>
                        <div>家人们,我最近挖到了一个Python学习的宝藏——Python全能实战小白训练营。整整470集,内容超丰富,资源包有12.9G,完全就是为咱们这些想系统学习Python的小白量身定制的。接下来就给大家好好唠唠。随着课程深入,会涉及到Python的各种高级特性,比如面向对象编程、模块与包的使用。在讲面向对象编程时,老师通过打造一个小型游戏角色系统,把类、对象、继承、多态这些抽象概念诠释得生动形象,让</div>
                    </li>
                    <li><a href="/article/1899423148730806272.htm"
                           title="PyCharm 对接 DeepSeek 大模型的详细操作流程" target="_blank">PyCharm 对接 DeepSeek 大模型的详细操作流程</a>
                        <span class="text-muted">程之编</span>
<a class="tag" taget="_blank" href="/search/pycharm/1.htm">pycharm</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>以下是使用PyCharm对接DeepSeek大模型的详细操作流程,基于Python开发环境。假设你已具备DeepSeekAPI的访问权限(需提前申请APIKey):步骤1:PyCharm环境准备创建新项目打开PyCharm→NewProject→选择纯Python项目→指定项目路径→创建虚拟环境(建议选Virtualenv)。安装依赖库打开终端(Terminal)执行以下命令:pipinstall</div>
                    </li>
                    <li><a href="/article/1899416972173570048.htm"
                           title="Golang后端学习笔记 — 6. Golang操作数据库事务的方法" target="_blank">Golang后端学习笔记 — 6. Golang操作数据库事务的方法</a>
                        <span class="text-muted">宝码</span>
<a class="tag" taget="_blank" href="/search/Golang%E5%90%8E%E7%AB%AF%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">Golang后端学习笔记</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BA%8B%E5%8A%A1/1.htm">数据库事务</a><a class="tag" taget="_blank" href="/search/postgresql/1.htm">postgresql</a>
                        <div>之前,学习了对数据库的每个表执行CRUD操作。真实的场景中,我们经常需要执行一个事务,它组合了多个表的相关操作。本节学习如何在Golang中实现它。在开始之前,先聊一下事务。什么是数据库事务?它是一个单一的工作单元,通常由多个表操作组成。比如:在我们的小银行项目中,我们要从张三的账户中向李四的账户中转账10元。该交易就包括5个操作,涉及到accounts表、entries表和transfers表:</div>
                    </li>
                    <li><a href="/article/1899411298630823936.htm"
                           title="Android SDK 环境配置与离线安装问题(校园网)" target="_blank">Android SDK 环境配置与离线安装问题(校园网)</a>
                        <span class="text-muted">xdjkyb</span>
<a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/google/1.htm">google</a><a class="tag" taget="_blank" href="/search/microsoft/1.htm">microsoft</a><a class="tag" taget="_blank" href="/search/dataset/1.htm">dataset</a><a class="tag" taget="_blank" href="/search/%E7%9F%AD%E7%BD%91%E5%9D%80%E6%9C%8D%E5%8A%A1/1.htm">短网址服务</a>
                        <div>一、SDK环境配置过程出现的问题:FailedtofetchURLhttp://dl-ssl.google.com/android/repository/addons_list.xml,reason:Filenotfound.这是国内网络和谐掉了google服务器,解决办法:找到c:\windows\system32\drivers\etc下的HOST文件,将:74.125.237.1dl-ssl</div>
                    </li>
                    <li><a href="/article/1899409406920028160.htm"
                           title="量子计算如何颠覆能源优化领域:从理论到实践" target="_blank">量子计算如何颠覆能源优化领域:从理论到实践</a>
                        <span class="text-muted">Echo_Wish</span>
<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%89%8D%E6%B2%BF%E6%8A%80%E6%9C%AF/1.htm">前沿技术</a><a class="tag" taget="_blank" href="/search/%E9%87%8F%E5%AD%90%E8%AE%A1%E7%AE%97/1.htm">量子计算</a><a class="tag" taget="_blank" href="/search/%E8%83%BD%E6%BA%90/1.htm">能源</a>
                        <div>量子计算如何颠覆能源优化领域:从理论到实践大家好,我是Echo_Wish,一个热爱探索前沿技术的人工智能与Python领域的技术分享者。今天,我们将深入探讨一个激动人心的话题——量子计算在能源优化中的应用。这不仅是科技领域的全新趋势,也可能为全人类的能源利用效率带来革命性突破。从理论模型到实际应用,量子计算已经在一些能源相关领域崭露头角,例如电网优化、可再生能源分配和物流节能规划。以下,让我们一步</div>
                    </li>
                    <li><a href="/article/1899405245457428480.htm"
                           title="Kibana 单机与集群部署教程" target="_blank">Kibana 单机与集群部署教程</a>
                        <span class="text-muted">闲人编程</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2%E6%95%99%E7%A8%8B/1.htm">大数据集群部署教程</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E9%9B%86%E7%BE%A4/1.htm">集群</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E6%9C%BA/1.htm">单机</a><a class="tag" taget="_blank" href="/search/%E9%83%A8%E7%BD%B2/1.htm">部署</a><a class="tag" taget="_blank" href="/search/Kibana/1.htm">Kibana</a><a class="tag" taget="_blank" href="/search/%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90/1.htm">日志分析</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96/1.htm">数据可视化</a>
                        <div>目录Kibana单机与集群部署教程第一部分:Kibana概述第二部分:Kibana单机部署教程1.安装Kibana1.1安装依赖项1.2下载和安装Kibana1.3启动Kibana2.单机案例代码实现(Python)3.常见问题及解决方法3.1无法启动Kibana服务3.2Kibana无法连接到Elasticsearch第三部分:Kibana集群部署教程1.配置集群节点1.1配置Elasticse</div>
                    </li>
                    <li><a href="/article/1899405119406010368.htm"
                           title="JavaScript面试宝典" target="_blank">JavaScript面试宝典</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/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>1.JS由哪三部分组成?JavaScript由以下三部分组成:ECMAScript(ES):JavaScript的核心语法,如变量、作用域、数据类型、函数、对象等。DOM(文档对象模型):用于操作HTML和XML文档的API,可以动态修改网页内容、结构和样式。BOM(浏览器对象模型):用于操作浏览器窗口和页面,例如window、navigator、location、history、screen等对</div>
                    </li>
                    <li><a href="/article/1899403480188121088.htm"
                           title="卷积神经网络(笔记01)" target="_blank">卷积神经网络(笔记01)</a>
                        <span class="text-muted">天行者@</span>
<a class="tag" taget="_blank" href="/search/cnn/1.htm">cnn</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/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a>
                        <div>视觉处理三大任务:分类、目标检测、图像分割CNN网络主要有三部分构成:卷积层(ConvolutionalLayer)、池化层(PoolingLayer)和激活函数一、解释卷积层中的偏置项是什么,并讨论在神经网络中引入偏置项的好处。在卷积神经网络(CNN)的卷积层里,卷积操作本质上是输入数据与卷积核(滤波器)进行逐元素相乘再求和的过程。偏置项(Bias)是一个额外的可学习参数,对于每个卷积核而言,都</div>
                    </li>
                    <li><a href="/article/1899402974443139072.htm"
                           title="INCA二次开发GUI实例化" target="_blank">INCA二次开发GUI实例化</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/%E4%B8%AA%E4%BA%BA%E5%BC%80%E5%8F%91/1.htm">个人开发</a>
                        <div>【摘要】本文基于ETASINCA二次开发实践,深入探讨如何构建完整的自动化测试GUI系统。通过Python语言结合COM接口技术,实现从软件架构设计到功能模块开发的完整闭环,为汽车电子领域工程师提供可复用的开发范式。一、INCA二次开发技术背景1.1行业应用需求在汽车电子开发领域,ETASINCA作为行业标准标定工具,其自动化测试需求日益增长。传统的手动操作模式存在以下痛点:重复性操作耗时严重(单</div>
                    </li>
                    <li><a href="/article/1899402216096198656.htm"
                           title="如何通过API用Python获取北向资金流向数据?" target="_blank">如何通过API用Python获取北向资金流向数据?</a>
                        <span class="text-muted">量化问财</span>
<a class="tag" taget="_blank" href="/search/%E9%87%8F%E5%8C%96%E8%BD%AF%E4%BB%B6/1.htm">量化软件</a><a class="tag" taget="_blank" href="/search/QMT/1.htm">QMT</a><a class="tag" taget="_blank" href="/search/%E9%87%8F%E5%8C%96%E4%BA%A4%E6%98%93/1.htm">量化交易</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E9%87%8F%E5%8C%96%E7%82%92%E8%82%A1/1.htm">量化炒股</a><a class="tag" taget="_blank" href="/search/PTrade/1.htm">PTrade</a><a class="tag" taget="_blank" href="/search/QMT/1.htm">QMT</a><a class="tag" taget="_blank" href="/search/%E9%87%8F%E5%8C%96%E4%BA%A4%E6%98%93/1.htm">量化交易</a><a class="tag" taget="_blank" href="/search/%E9%87%8F%E5%8C%96%E8%BD%AF%E4%BB%B6/1.htm">量化软件</a><a class="tag" taget="_blank" href="/search/deepseek/1.htm">deepseek</a>
                        <div>推荐阅读:《【最全攻略】免费的量化软件有哪些?券商的交易接口怎么获取?》如何通过API用Python获取北向资金流向数据?北向资金指的是通过沪港通和深港通渠道,从香港市场流入A股市场的资金。对于投资者来说,了解北向资金流向对于把握市场趋势和投资决策具有重要意义。本文将介绍如何通过API用Python获取北向资金流向数据。理解北向资金流向数据北向资金流向数据主要包括以下几个方面:资金流入量:指通过沪</div>
                    </li>
                    <li><a href="/article/1899396287590100992.htm"
                           title="go执行java -jar 完成DSA私钥解析并签名" target="_blank">go执行java -jar 完成DSA私钥解析并签名</a>
                        <span class="text-muted">DavidSoCool</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jar/1.htm">jar</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a>
                        <div>起因,最近使用go对接百度联盟api需要使用到DSA私钥完成签名过程,在百度提供的代码示例里面没有go代码的支持,示例中仅有php、python2和3、java的代码,网上找了半天发现go中对DSA私钥解析支持不友好,然后决定使用在java中完成签名计算过程,生成可执行jar后由外部传入参数获取签名数据。百度联盟api文档说明:1)权限开通后,登录百度联盟媒体平台(union.baidu.com)</div>
                    </li>
                    <li><a href="/article/1899392881412599808.htm"
                           title="【30天玩转python】项目实战:从零开始开发一个Python项目" target="_blank">【30天玩转python】项目实战:从零开始开发一个Python项目</a>
                        <span class="text-muted">爱技术的小伙子</span>
<a class="tag" taget="_blank" href="/search/30%E5%A4%A9%E7%8E%A9%E8%BD%ACpython/1.htm">30天玩转python</a><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>
                        <div>项目实战:从零开始开发一个Python项目在学习Python的过程中,开发一个完整的项目是非常重要的实战练习。它不仅能够帮助你巩固所学的知识,还能提高实际编程能力。本文将带领你从零开始开发一个Python项目,介绍从项目规划、环境搭建、代码实现到项目发布的完整过程。我们将以一个简单的“任务管理系统”为例,逐步讲解如何构建、测试和优化这个项目。1.项目规划1.1项目简介我们将开发一个基于命令行的任务</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/1899381785339424768.htm"
                           title="Zookeeper+kafka学习笔记" target="_blank">Zookeeper+kafka学习笔记</a>
                        <span class="text-muted">CHR_YTU</span>
<a class="tag" taget="_blank" href="/search/Zookeeper/1.htm">Zookeeper</a>
                        <div>Zookeeper是Apache的一个java项目,属于Hadoop系统,扮演管理员的角色。配置管理分布式系统都有好多机器,比如我在搭建hadoop的HDFS的时候,需要在一个主机器上(Master节点)配置好HDFS需要的各种配置文件,然后通过scp命令把这些配置文件拷贝到其他节点上,这样各个机器拿到的配置信息是一致的,才能成功运行起来HDFS服务。Zookeeper提供了这样的一种服务:一种集</div>
                    </li>
                    <li><a href="/article/1899380396282408960.htm"
                           title="SpringBoot中的导入导出(SpringBoot导出word文档、Hutool导入excel、easypoi之easy导入数据库、导出excel文件、POI设置单元格式)" target="_blank">SpringBoot中的导入导出(SpringBoot导出word文档、Hutool导入excel、easypoi之easy导入数据库、导出excel文件、POI设置单元格式)</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/boot/1.htm">boot</a><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>SpringBoot中的导入导出java导出word文档1先准备好一个导出Word文档的模板。例如:2.打开doc文件后,文件中的另存为,然后选择保存类型为2003版本的(*.xml)3、刚生成的xml文件里面比较乱,要整理一下,方法如下:使用Eclipse/idea,新建一个jsp,把xml里面的东西覆盖更新刚才的jsp,ctrl+Shift+F/ctrl+alt+L把文件整理一下,在拷贝出来,</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/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/1899373703607676928.htm"
                           title="麒麟arm架构系统_安装nginx-1.27.0_访问500 internal server error nginx解决_13: Permission denied---Linux工作笔记072" target="_blank">麒麟arm架构系统_安装nginx-1.27.0_访问500 internal server error nginx解决_13: Permission denied---Linux工作笔记072</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/nginx-1.27.0/1.htm">nginx-1.27.0</a><a class="tag" taget="_blank" href="/search/nginx%E6%9C%80%E6%96%B0%E7%89%88%E5%AE%89%E8%A3%85/1.htm">nginx最新版安装</a><a class="tag" taget="_blank" href="/search/%E9%BA%92%E9%BA%9Fv10/1.htm">麒麟v10</a><a class="tag" taget="_blank" href="/search/arm%E6%9E%B6%E6%9E%84/1.htm">arm架构</a><a class="tag" taget="_blank" href="/search/%E9%BA%92%E9%BA%9Fv10/1.htm">麒麟v10</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E8%A3%85nginx/1.htm">安装nginx</a>
                        <div>[root@hadoop173nginx1.27.0]#wget-chttp://nginx.org/download/nginx-1.27.0.tar.gz--2024-07-0509:47:00--http://nginx.org/download/nginx-1.27.0.tar.gzResolvingnginx.org(nginx.org)...3.125.197.172,52.58.19</div>
                    </li>
                    <li><a href="/article/1899368663480332288.htm"
                           title="Android入门(七) | 常用控件" target="_blank">Android入门(七) | 常用控件</a>
                        <span class="text-muted">·Jormungand</span>
<a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/studio/1.htm">studio</a>
                        <div>文章目录TextView控件:文本信息Button控件:按钮EditText控件:输入框ImageView控件:图片ProgressBar控件:进度条AlertDialog控件:提示框ProgressDialog控件:带有进度条的提示框TextView控件:文本信息TextView是Android中较常用的一个控件。主要用于在界面上显示一段文本信息,配置在每个活动的xml文件中。除了之前用到的an</div>
                    </li>
                    <li><a href="/article/1899365637621346304.htm"
                           title="Zookeeper与Kafka学习笔记" target="_blank">Zookeeper与Kafka学习笔记</a>
                        <span class="text-muted">上海研博数据</span>
<a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a><a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>一、Zookeeper核心要点1.核心特性分布式协调服务,用于维护配置/命名/同步等元数据采用层次化数据模型(Znode树结构),每个节点可存储<1MB数据典型应用场景:HadoopNameNode高可用HBase元数据管理Kafka集群选举与状态管理2.设计限制内存型存储,不适合大数据量场景数据变更通过版本号(Version)控制,实现乐观锁机制采用ZAB协议保证数据一致性二、Kafka核心架构</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/1899361855600652288.htm"
                           title="vscode 好用插件" target="_blank">vscode 好用插件</a>
                        <span class="text-muted">yqcoder</span>
<a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E8%BE%91%E5%99%A8/1.htm">编辑器</a>
                        <div>一、通用效率类1.AutoRenameTag在编写HTML或XML代码时,当你修改一个标签的名称,它会自动同步修改对应的结束标签,节省了手动修改的时间,提高了代码的准确性和编写效率。2.BracketPairColorizer为代码中的括号对(如()、{}、[])添加不同的颜色,让你可以更清晰地分辨嵌套的括号层次,尤其在处理复杂代码时,能有效减少因括号匹配错误导致的问题。3.CodeRunner支</div>
                    </li>
                    <li><a href="/article/1899361097505370112.htm"
                           title="GO语言学习笔记" target="_blank">GO语言学习笔记</a>
                        <span class="text-muted">螺旋式上升abc</span>
<a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>一、viper笔记【七米】https://liwenzhou.com/posts/Go/viper/二、优雅关机和平滑重启https://liwenzhou.com/posts/Go/graceful-shutdown/三、gin使用zaphttps://liwenzhou.com/posts/Go/zap-in-gin/四、flag用于命令行传参https://liwenzhou.com/pos</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/80.htm"
                                       title="java杨辉三角" target="_blank">java杨辉三角</a>
                                    <span class="text-muted">3213213333332132</span>
<a class="tag" taget="_blank" href="/search/java%E5%9F%BA%E7%A1%80/1.htm">java基础</a>
                                    <div>
package com.algorithm;

/**
 * @Description 杨辉三角
 * @author FuJianyong
 * 2015-1-22上午10:10:59
 */
public class YangHui {
	public static void main(String[] args) {
		//初始化二维数组长度
		int[][] y</div>
                                </li>
                                <li><a href="/article/207.htm"
                                       title="《大话重构》之大布局的辛酸历史" target="_blank">《大话重构》之大布局的辛酸历史</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/%E9%87%8D%E6%9E%84/1.htm">重构</a>
                                    <div>《大话重构》中提到“大布局你伤不起”,如果企图重构一个陈旧的大型系统是有非常大的风险,重构不是想象中那么简单。我目前所在公司正好对产品做了一次“大布局重构”,下面我就分享这个“大布局”项目经验给大家。 
  
 
 背景 
 
        公司专注于企业级管理产品软件,企业有大中小之分,在2000年初公司用JSP/Servlet开发了一套针对中</div>
                                </li>
                                <li><a href="/article/334.htm"
                                       title="电驴链接在线视频播放源码" target="_blank">电驴链接在线视频播放源码</a>
                                    <span class="text-muted">dubinwei</span>
<a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81/1.htm">源码</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E9%A9%B4/1.htm">电驴</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/%E8%A7%86%E9%A2%91/1.htm">视频</a><a class="tag" taget="_blank" href="/search/ed2k/1.htm">ed2k</a>
                                    <div>本项目是个搜索电驴(ed2k)链接的应用,借助于磁力视频播放器(官网: 
http://loveandroid.duapp.com/ 开放平台),可以实现在线播放视频,也可以用迅雷或者其他下载工具下载。 
项目源码: 
http://git.oschina.net/svo/Emule,动态更新。也可从附件中下载。 
项目源码依赖于两个库项目,库项目一链接: 
http://git.oschina.</div>
                                </li>
                                <li><a href="/article/461.htm"
                                       title="Javascript中函数的toString()方法" target="_blank">Javascript中函数的toString()方法</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/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/toString/1.htm">toString</a><a class="tag" taget="_blank" href="/search/function/1.htm">function</a><a class="tag" taget="_blank" href="/search/object/1.htm">object</a>
                                    <div>简述 
    The toString() method returns a string representing the source code of the function. 
    简译之,Javascript的toString()方法返回一个代表函数源代码的字符串。 
句法 
    function.</div>
                                </li>
                                <li><a href="/article/588.htm"
                                       title="struts处理自定义异常" target="_blank">struts处理自定义异常</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a>
                                    <div>很多时候我们会用到自定义异常来表示特定的错误情况,自定义异常比较简单,只要分清是运行时异常还是非运行时异常即可,运行时异常不需要捕获,继承自RuntimeException,是由容器自己抛出,例如空指针异常。 
非运行时异常继承自Exception,在抛出后需要捕获,例如文件未找到异常。 
此处我们用的是非运行时异常,首先定义一个异常LoginException: 
/**
 * 类描述:登录相</div>
                                </li>
                                <li><a href="/article/715.htm"
                                       title="Linux中find常见用法示例" target="_blank">Linux中find常见用法示例</a>
                                    <span class="text-muted">510888780</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>Linux中find常见用法示例 
 
·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; 
 
 
 
 
find命令的参数;</div>
                                </li>
                                <li><a href="/article/842.htm"
                                       title="SpringMVC的各种参数绑定方式" target="_blank">SpringMVC的各种参数绑定方式</a>
                                    <span class="text-muted">Harry642</span>
<a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a><a class="tag" taget="_blank" href="/search/%E7%BB%91%E5%AE%9A/1.htm">绑定</a><a class="tag" taget="_blank" href="/search/%E8%A1%A8%E5%8D%95/1.htm">表单</a>
                                    <div>1. 基本数据类型(以int为例,其他类似): 
Controller代码: 
 

    @RequestMapping("saysth.do")
    public void test(int count) {
    }
 
表单代码: 
 

<form action="saysth.do" method="post&q</div>
                                </li>
                                <li><a href="/article/969.htm"
                                       title="Java 获取Oracle ROWID" target="_blank">Java 获取Oracle ROWID</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>  
A ROWID is an identification tag unique for each row of an Oracle Database table. The ROWID can be thought of as a virtual column, containing the ID for each row. 
The oracle.sql.ROWID class i</div>
                                </li>
                                <li><a href="/article/1096.htm"
                                       title="java获取方法的参数名" target="_blank">java获取方法的参数名</a>
                                    <span class="text-muted">antlove</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/parameter/1.htm">parameter</a><a class="tag" taget="_blank" href="/search/method/1.htm">method</a><a class="tag" taget="_blank" href="/search/reflect/1.htm">reflect</a>
                                    <div>reflect.ClassInformationUtil.java 
package reflect;

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.Modifier;
import javassist.bytecode.CodeAtt</div>
                                </li>
                                <li><a href="/article/1223.htm"
                                       title="JAVA正则表达式匹配 查找 替换 提取操作" target="_blank">JAVA正则表达式匹配 查找 替换 提取操作</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/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/%E6%9B%BF%E6%8D%A2/1.htm">替换</a><a class="tag" taget="_blank" href="/search/%E6%8F%90%E5%8F%96/1.htm">提取</a><a class="tag" taget="_blank" href="/search/%E6%9F%A5%E6%89%BE/1.htm">查找</a>
                                    <div>正则表达式的查找;主要是用到String类中的split(); 
      String str; 
     str.split();方法中传入按照什么规则截取,返回一个String数组 
  
常见的截取规则: 
str.split("\\.")按照.来截取

str.</div>
                                </li>
                                <li><a href="/article/1350.htm"
                                       title="Java中equals()与hashCode()方法详解" target="_blank">Java中equals()与hashCode()方法详解</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/set/1.htm">set</a><a class="tag" taget="_blank" href="/search/equals%28%29/1.htm">equals()</a><a class="tag" taget="_blank" href="/search/hashCode%28%29/1.htm">hashCode()</a>
                                    <div>一.equals()方法详解 
    equals()方法在object类中定义如下:  
public boolean equals(Object obj) {
    return (this == obj);
}
 
   很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、I</div>
                                </li>
                                <li><a href="/article/1477.htm"
                                       title="精通Oracle10编程SQL(4)使用SQL语句" target="_blank">精通Oracle10编程SQL(4)使用SQL语句</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/plsql/1.htm">plsql</a>
                                    <div>--工资级别表
create table SALGRADE
(
  GRADE    NUMBER(10),
  LOSAL    NUMBER(10,2),
  HISAL    NUMBER(10,2)
)

insert into SALGRADE values(1,0,100);
insert into SALGRADE values(2,100,200);
inser</div>
                                </li>
                                <li><a href="/article/1604.htm"
                                       title="【Nginx二】Nginx作为静态文件HTTP服务器" target="_blank">【Nginx二】Nginx作为静态文件HTTP服务器</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/HTTP%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">HTTP服务器</a>
                                    <div> Nginx作为静态文件HTTP服务器 
 
  在本地系统中创建/data/www目录,存放html文件(包括index.html) 
 创建/data/images目录,存放imags图片 
 在主配置文件中添加http指令 
 
  
http {
    server {
        listen       80;
        server_name  </div>
                                </li>
                                <li><a href="/article/1731.htm"
                                       title="kafka获得最新partition offset" target="_blank">kafka获得最新partition offset</a>
                                    <span class="text-muted">blackproof</span>
<a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/partition/1.htm">partition</a><a class="tag" taget="_blank" href="/search/offset/1.htm">offset</a><a class="tag" taget="_blank" href="/search/%E6%9C%80%E6%96%B0/1.htm">最新</a>
                                    <div>kafka获得partition下标,需要用到kafka的simpleconsumer 
  
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.</div>
                                </li>
                                <li><a href="/article/1858.htm"
                                       title="centos 7安装docker两种方式" target="_blank">centos 7安装docker两种方式</a>
                                    <span class="text-muted">ronin47</span>

                                    <div>      第一种是采用yum 方式 
             yum install -y docker 
          </div>
                                </li>
                                <li><a href="/article/1985.htm"
                                       title="java-60-在O(1)时间删除链表结点" target="_blank">java-60-在O(1)时间删除链表结点</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>

public class DeleteNode_O1_Time {

	/**
	 * Q 60 在O(1)时间删除链表结点
	 * 给定链表的头指针和一个结点指针(!!),在O(1)时间删除该结点
	 * 
	 * Assume the list is:
	 * head->...->nodeToDelete->mNode->nNode->..</div>
                                </li>
                                <li><a href="/article/2112.htm"
                                       title="nginx利用proxy_cache来缓存文件" target="_blank">nginx利用proxy_cache来缓存文件</a>
                                    <span class="text-muted">cfyme</span>
<a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a>
                                    <div>user  zhangy users;
worker_processes 10;
error_log  /var/vlogs/nginx_error.log  crit;
pid        /var/vlogs/nginx.pid;
#Specifies the value for ma</div>
                                </li>
                                <li><a href="/article/2239.htm"
                                       title="[JWFD开源工作流]JWFD嵌入式语法分析器负号的使用问题" target="_blank">[JWFD开源工作流]JWFD嵌入式语法分析器负号的使用问题</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a>
                                    <div> 
    假如我们需要用JWFD的语法分析模块定义一个带负号的方程式,直接在方程式之前添加负号是不正确的,而必须这样做: 
 
    string str01 = "a=3.14;b=2.71;c=0;c-((a*a)+(b*b))" 
 
    定义一个0整数c,然后用这个整数c去</div>
                                </li>
                                <li><a href="/article/2366.htm"
                                       title="如何集成支付宝官方文档" target="_blank">如何集成支付宝官方文档</a>
                                    <span class="text-muted">dai_lm</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>官方文档下载地址 
 
https://b.alipay.com/order/productDetail.htm?productId=2012120700377310&tabId=4#ps-tabinfo-hash 
 
集成的必要条件 
1. 需要有自己的Server接收支付宝的消息 
2. 需要先制作app,然后提交支付宝审核,通过后才能集成 
 
调试的时候估计会真的扣款,请注意 
</div>
                                </li>
                                <li><a href="/article/2493.htm"
                                       title="应该在什么时候使用Hadoop" target="_blank">应该在什么时候使用Hadoop</a>
                                    <span class="text-muted">datamachine</span>
<a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a>
                                    <div>原帖地址:http://blog.chinaunix.net/uid-301743-id-3925358.html 
 
存档,某些观点与我不谋而合,过度技术化不可取,且hadoop并非万能。 
 
--------------------------------------------万能的分割线-------------------------------- 
有人问我,“你在大数据和Hado</div>
                                </li>
                                <li><a href="/article/2620.htm"
                                       title="在GridView中对于有外键的字段使用关联模型进行搜索和排序" target="_blank">在GridView中对于有外键的字段使用关联模型进行搜索和排序</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a>
                                    <div>在GridView中使用关联模型进行搜索和排序 
首先我们有两个模型它们直接有关联:   
class Author extends CActiveRecord {
...
}
 
class Post extends CActiveRecord {
...
    function relations() {
        return array(
            '</div>
                                </li>
                                <li><a href="/article/2747.htm"
                                       title="使用NSString 的格式化大全" target="_blank">使用NSString 的格式化大全</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/Objective-C/1.htm">Objective-C</a>
                                    <div>格式定义The format specifiers supported by the NSString formatting methods and CFString formatting functions follow the IEEE printf specification; the specifiers are summarized in Table 1. Note that you c</div>
                                </li>
                                <li><a href="/article/2874.htm"
                                       title="使用activeX插件对象object滚动有重影" target="_blank">使用activeX插件对象object滚动有重影</a>
                                    <span class="text-muted">蕃薯耀</span>
<a class="tag" taget="_blank" href="/search/activeX%E6%8F%92%E4%BB%B6/1.htm">activeX插件</a><a class="tag" taget="_blank" href="/search/%E6%BB%9A%E5%8A%A8%E6%9C%89%E9%87%8D%E5%BD%B1/1.htm">滚动有重影</a>
                                    <div>    
使用activeX插件对象object滚动有重影       <object style="width:0;" id="abc" classid="CLSID:D3E3970F-2927-9680-BBB4-5D0889909DF6" codebase="activex/OAX339.CAB#</div>
                                </li>
                                <li><a href="/article/3001.htm"
                                       title="SpringMVC4零配置" target="_blank">SpringMVC4零配置</a>
                                    <span class="text-muted">hanqunfeng</span>
<a class="tag" taget="_blank" href="/search/springmvc4/1.htm">springmvc4</a>
                                    <div>基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论。 
  
  
项目说明如下: 
1.db.sql是项目中用到的表,数据库使用的是oracle11g 
2.该项目使用mvn进行管理,私服为自搭建nexus,项目只用到一个第三方 jar,就是oracle的驱动; 
3.默认项目为零配置启动,如果需要更改启动方式,请</div>
                                </li>
                                <li><a href="/article/3128.htm"
                                       title="《开源框架那点事儿16》:缓存相关代码的演变" target="_blank">《开源框架那点事儿16》:缓存相关代码的演变</a>
                                    <span class="text-muted">j2eetop</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90%E6%A1%86%E6%9E%B6/1.htm">开源框架</a>
                                    <div>问题引入 
上次我参与某个大型项目的优化工作,由于系统要求有比较高的TPS,因此就免不了要使用缓冲。 
该项目中用的缓冲比较多,有MemCache,有Redis,有的还需要提供二级缓冲,也就是说应用服务器这层也可以设置一些缓冲。 
当然去看相关实现代代码的时候,大致是下面的样子。    
[java] 
view plain 
copy 
print 
?   
 
 public vo</div>
                                </li>
                                <li><a href="/article/3255.htm"
                                       title="AngularJS浅析" target="_blank">AngularJS浅析</a>
                                    <span class="text-muted">kvhur</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a>
                                    <div>概念 
 
 AngularJS is a structural framework for dynamic web apps. 
 了解更多详情请见原文链接:http://www.gbtags.com/gb/share/5726.htm 
 Directive 
扩展html,给html添加声明语句,以便实现自己的需求。对于页面中html元素以ng为前缀的属性名称,ng是angular的命名空间</div>
                                </li>
                                <li><a href="/article/3382.htm"
                                       title="架构师之jdk的bug排查(一)---------------split的点号陷阱" target="_blank">架构师之jdk的bug排查(一)---------------split的点号陷阱</a>
                                    <span class="text-muted">nannan408</span>
<a class="tag" taget="_blank" href="/search/split/1.htm">split</a>
                                    <div>1.前言. 
   jdk1.6的lang包的split方法是有bug的,它不能有效识别A.b.c这种类型,导致截取长度始终是0.而对于其他字符,则无此问题.不知道官方有没有修复这个bug. 
2.代码 
 

String[] paths = "object.object2.prop11".split("'");
System.ou</div>
                                </li>
                                <li><a href="/article/3509.htm"
                                       title="如何对10亿数据量级的mongoDB作高效的全表扫描" target="_blank">如何对10亿数据量级的mongoDB作高效的全表扫描</a>
                                    <span class="text-muted">quentinXXZ</span>
<a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a>
                                    <div>  本文链接: 
http://quentinXXZ.iteye.com/blog/2149440  
一、正常情况下,不应该有这种需求 
首先,大家应该有个概念,标题中的这个问题,在大多情况下是一个伪命题,不应该被提出来。要知道,对于一般较大数据量的数据库,全表查询,这种操作一般情况下是不应该出现的,在做正常查询的时候,如果是范围查询,你至少应该要加上limit。 
说一下,</div>
                                </li>
                                <li><a href="/article/3636.htm"
                                       title="C语言算法之水仙花数" target="_blank">C语言算法之水仙花数</a>
                                    <span class="text-muted">qiufeihu</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                                    <div>/**
* 水仙花数
*/
#include <stdio.h>
#define N 10
int main()
{
    int x,y,z;
    for(x=1;x<=N;x++)
    	for(y=0;y<=N;y++)
    		for(z=0;z<=N;z++)
    			if(x*100+y*10+z == x*x*x</div>
                                </li>
                                <li><a href="/article/3763.htm"
                                       title="JSP指令" target="_blank">JSP指令</a>
                                    <span class="text-muted">wyzuomumu</span>
<a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a>
                                    <div> 
 jsp指令的一般语法格式: <%@ 指令名 属性 =”值 ” %> 
  常用的三种指令: page,include,taglib 
 page指令语法形式: <%@ page 属性 1=”值 1” 属性 2=”值 2”%> 
 include指令语法形式: <%@include file=”relative url”%> (jsp可以通过 include</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>