lxml解析 python_使用lxml在Python中进行高性能XML解析

lxml解析 python

介绍lxml

Python从未遭受过XML库不足的困扰。 从2.0版开始,它包含了熟悉的xml.dom.minidom以及相关的pulldom和XML的简单API(SAX)模型。 从2.4开始,它包含了流行的ElementTree API。 另外,总是有第三方库提供更高级别或更多的pythonic接口。

尽管任何XML库都足以用于简单的文档对象模型(DOM)或小型文件的SAX解析,但是开发人员越来越面临更大的数据集,并且需要在Web服务上下文中实时解析XML。 同时,经验丰富的XML开发人员可能会更喜欢XML本机语言,例如XPath或XSLT,因为它们具有紧凑性和表达能力。 可以访问XPath的声明性语法,同时保留Python中可用的通用功能,这是理想的选择。

lxml是第一个展示高性能特性的Python XML库,它包括对XPath 1.0,XSLT 1.0,自定义元素类甚至Pythonic数据绑定接口的原生支持。 它基于两个C库建立: libxml2libxslt 。 它们提供了解析,序列化和转换这些核心任务背后的大部分功能。

您在代码中使用lxml的哪些部分取决于您的需求:您对XPath满意吗? 您喜欢使用类似Python的对象吗? 您在系统上有多少内存可用于保留大树?

本文不介绍lxml的全部内容,而是演示了有效处理超大型XML文件,针对高速和低内存使用进行优化的技术。 使用了两个免费的示例文档:Google转换为XML的美国版权续订数据和Open Directory RDF内容。

在这里,仅将lxml与cElementTree进行比较,而不与其他数十个可用的Python库进行比较。 我选择cElementTree是因为它是Python 2.5的本机部分,并且像lxml一样是基于C库构建的。

大数据有什么难处?

XML库通常是为小样本文件设计的,并在其中进行了测试。 实际上,许多现实世界的项目是在没有完整数据可用的情况下开始的。 程序员使用示例内容并编写如清单1所示的代码,努力工作数周或数月。

清单1.一个简单的解析操作
from lxml import etree
doc = etree.parse('content-sample.xml')

lxml parse方法读取整个文档并构建一个内存树。 与cElementTree相比,lxml树要昂贵得多,因为它保留了有关节点上下文的更多信息,包括对父节点的引用。 以这种方式解析2G文档会立即将具有2G RAM的计算机进行交换,从而带来灾难性的性能影响。 如果在假定该数据将在内存中可用的情况下编写整个应用程序,则将进行主要重构。

迭代解析

当不希望或不希望构建内存树时,请使用不依赖于读取整个源文件的迭代解析技术。 lxml提供了两种方法:

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

使用目标解析器方法

目标解析器方法是熟悉SAX事件驱动代码的开发人员所熟悉的。 目标解析器是实现以下方法的类:

  1. 在元素打开时start射击。 元素的数据和子元素尚不可用。
  2. 在元素关闭时end射击。 元素的所有子节点(包括文本节点)现在都可用。
  3. data在子文本上触发,并有权访问该文本。
  4. 解析完成后,将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迭代器。 它接受两个有用的参数:要监视的事件的元组和标记名。 在这种情况下,我只对</code>的文本内容感兴趣(在到达<code>end</code>事件时可用)。 从输出清单3将是相同的,在目标解析器方法的清单2但应该是更快,因为LXML可以优化事件处理内部。 它也减少了很多代码行。 </p> <h6 id="listing3" class="ibm-h6"> 清单3.对命名标签和事件的简单迭代 </h6> <pre class="has"><code class="notranslate brush: js; html-script: true; gutter: true;">context = etree.iterparse(infile, events=('end',), tag='Title') for event, elem in context: out.write('%s\n' % elem.text.encode('utf-8'))</code></pre> <p> 如果运行此代码并监视输出,您会看到它首先非常快速地添加标题,但很快就会缓慢地进行爬网。 快速检查<code>top</code>发现计算机已更换: </p> <pre class="has"><code class="notranslate brush: js; html-script: true; gutter: true;">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</code></pre> <p> 这是怎么回事? 尽管<code>iterparse</code>并不会消耗整个文件,但它不会从每次迭代中释放对节点的引用。 当将重复访问整个文档时,这是一项功能。 但是,在这种情况下,我宁愿在每个循环结束时回收该内存。 这既包括对已经处理的子节点或文本节点的引用,也包括当前节点的先前同级,它们对根节点的引用也被隐式保留,如清单4所示 : </p> <h6 id="listing4" class="ibm-h6"> 清单4.修改后的迭代清除了不需要的节点引用 </h6> <pre class="has"><code class="notranslate brush: js; html-script: true; gutter: true;">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 <Title> while elem.getprevious() is not None: del elem.getparent()[0]</code></pre> <p> 为了方便起见,我将清单4重构为一个函数,该函数采用可调用<code>func</code>对当前节点执行操作,如清单5所示 。 我将在后续示例中使用此方法。 </p> <h6 id="listing5" class="ibm-h6"> 清单5.遍历上下文,每次调用<code>func</code>然后清理不需要的引用的<code>func</code> </h6> <pre class="has"><code class="notranslate brush: js; html-script: true; gutter: true;">def fast_iter(context, func): for event, elem in context: func(elem) elem.clear() while elem.getprevious() is not None: del elem.getparent()[0] del context</code></pre> <h4 id="N1014F" class="ibm-h4"> <span style="font-weight: bold;">性能特点</span> </h4> <p> 清单4中的这种优化的<code>iterparse</code>方法产生的输出与清单2中的目标解析器产生的输出相同,但时间却减少了一半。 当任务仅限于特定事件和标记名时,它甚至比cElementTree还要快,如此处所示。 (不过,在大多数情况下,当解析是主要活动时,cElementTree的性能将优于lxml。) </p> <p> 表1显示了针对基准侧边栏中描述的计算机上的版权数据衡量的各种解析器技术的时间。 </p> <h6 id="table1" class="ibm-h6"> 表1.迭代解析方法的比较:从<code><Title></code>提取<code>text()</code> </h6> <table border="0" class="ibm-data-table" width="100%"> <thead> <tr> <th class="ibm-background-neutral-white-30"> XML库 </th> <th class="ibm-background-neutral-white-30"> 方法 </th> <th class="ibm-background-neutral-white-30"> 平均时间,以秒为单位 </th> </tr> </thead> <tbody> <tr> <th class="tb-row"> cElementTree </th> <td> Iterparse </td> <td> 32 </td> </tr> <tr> <th class="tb-row"> xml文件 </th> <td> 目标解析器 </td> <td> 54 </td> </tr> <tr> <th class="tb-row"> xml文件 </th> <td> 优化的iterparse </td> <td> 25 </td> </tr> </tbody> </table> <h4 id="N101A3" class="ibm-h4"> <span style="font-weight: bold;">可以缩放吗?</span> </h4> <p> 在Open Directory数据上运行清单4中相同的<code>iterparse</code>方法,每次运行花费122秒,比解析版权数据花费的时间长五倍。 由于Open Directory数据的大小也略微超过其五倍(为1.9 GB),因此即使在非常大的文件上,您也应该从这种方法获得大致线性的时间性能。 </p> <h3 id="N101B0" class="ibm-h3"> <span style="font-weight: bold;">序列化</span> </h3> <p> 如果您对XML文件所做的全部工作是从单个节点中获取一些文本,则可以使用简单的正则表达式,该正则表达式的运行速度可能比任何XML解析器都要快。 但是,实际上,当数据非常复杂时,这几乎是不可能实现的,我不建议这样做。 当需要真正的数据操作时,XML库是无价的。 </p> <p> lxml擅长将XML序列化为字符串或文件,因为它直接依赖于<code>libxml2</code> C代码。 如果您的任务根本不需要任何序列化,则lxml是一个明确的选择,但是有一些技巧可以使库发挥最佳性能。 </p> <h4 id="N101BB" class="ibm-h4"> <span style="font-weight: bold;">序列化子树时使用<code>deepcopy</code></span> </h4> <p> lxml保留子节点与其父节点之间的引用。 这样的效果是lxml中的一个节点可以只有一个父节点。 (cElementTree没有父节点的概念。) </p> <p> 清单6取得了版权文件中的每个<code><Record></code> ,并编写了一个仅包含标题和版权信息的简化记录。 </p> <h6 id="listing6" class="ibm-h6"> 清单6.序列化元素的子元素 </h6> <pre class="has"><code class="notranslate brush: js; html-script: true; gutter: true;">from lxml import etree import deepcopy def serialize(elem): # Output a new tree like: # <SimplerRecord> # <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 t.text = elem.iterchildren(tag='Title').next().text # Deep copy a descendant tree for c in elem.iterchildren(tag='Copyright'): r.append( deepcopy(c) ) return r out = open('titles.xml', 'w') context = etree.iterparse('copyright.xml', events=('end',), tag='Record') # Iterate through each of the <Record> nodes using our fast iteration method fast_iter(context, # For each <Record>, serialize a simplified version and write it # to the output file lambda elem: out.write( etree.tostring(serialize(elem), encoding='utf-8')))</code></pre> <p> 不要使用<code>deepcopy</code>来简单地复制单个节点的文本。 创建一个新节点,手动填充其text属性,然后对其进行序列化,速度更快。 在我的测试中,为<code><Title></code>和<code><Copyright></code>调用<code>deepcopy</code>速度比清单6中的代码慢15%。 序列化大型后代树时,您将看到<code>deepcopy</code>的最大性能提升。 </p> <p> 使用清单7中的代码对cElementTree进行基准测试时,lxml的序列化器几乎快了一倍(50秒对95秒): </p> <h6 id="listing7" class="ibm-h6"> 清单7.使用cElementTree进行序列化 </h6> <pre class="has"><code class="notranslate brush: js; html-script: true; gutter: true;">def serialize_cet(elem): r = cet.Element('Record') # Create a new element with the same text child t = cet.SubElement(r, 'Title') t.text = elem.find('Title').text # ElementTree does not store parent references -- an element can # exist in multiple trees. It's not necessary to use deepcopy here. for c in elem.findall('Copyright'): r.append(h) return r context = cet.iterparse('copyright.xml', events=('end','start')) context = iter(context) event, root = context.next() for event, elem in context: if elem.tag == 'Record' and event =='end': result = serialize_cet(elem) out.write(cet.tostring(result, encoding='utf-8')) root.clear()</code></pre> <p> 有关此迭代模式的更多信息,请参见ElementTree文档的“增量解析”。 (请参阅相关主题中的链接。) </p> <h3 id="N101FB" class="ibm-h3"> <span style="font-weight: bold;">快速查找元素</span> </h3> <p> 解析之后,最常见的XML任务是在解析的树中定位感兴趣的特定数据。 lxml提供了几种方法,从简化的搜索语法到完整的XPath 1.0。 作为用户,您应该了解每种方法的性能特征和优化技术。 </p> <h4 id="N10201" class="ibm-h4"> <span style="font-weight: bold;">避免使用<code>find</code>和<code>findall</code></span> </h4> <p> 从ElementTree API继承的<code>find</code>和<code>findall</code>方法使用一种称为ElementPath的简化的类似于XPath的表达式语言来查找一个或多个后代节点。 从ElementTree迁移到lxml的用户自然可以继续使用find / ElementPath语法。 </p> <p> lxml提供了两个用于发现子节点的选项: <code>iterchildren</code> / <code>iterdescendants</code>方法和真实的XPath。 在表达式应该与节点名称匹配的情况下,与等效的ElementPath表达式相比,使用<code>iterchildren</code>或<code>iterdescendants</code>方法及其可选的tag参数要快得多(在某些情况下是两倍)。 </p> <p> 对于更复杂的模式,请使用<code>XPath</code>类预编译搜索模式。 简单的模式,模仿的行为<code>iterchildren</code>与标签的参数(例如, <code>etree.XPath("child::Title")</code>执行的有效,同时作为他们<code>iterchildren</code>等价物。 不过,进行预编译很重要。 在循环的每次执行中或在元素上使用<code>xpath()</code>方法(在lxml文档中描述,请参阅参考资料 )编译模式的速度几乎是一次编译然后重复使用该模式的速度的两倍。 </p> <p> lxml中的XPath评估速度很快 。 如果只需要序列化节点的一个子集,则最好是预先限制精确的XPath表达式,而不是以后检查所有节点。 例如,将示例序列化限制为仅包含包含单词<code>night</code>标题,如清单8所示 ,需要60%的时间来序列化整个集合。 </p> <h6 id="listing8" class="ibm-h6"> 清单8.使用XPath类的条件序列化 </h6> <pre class="has"><code class="notranslate brush: js; html-script: true; gutter: true;">def write_if_node(out, node): if node is not None: out.write(etree.tostring(node, encoding='utf-8')) def serialize_with_xpath(elem, xp1, xp2): '''Take our source <Record> element and apply two pre-compiled XPath classes. Return a node only if the first expression matches. ''' r = etree.Element('Record') t = etree.SubElement(r, 'Title') x = xp1(elem) if x: t.text = x[0].text for c in xp2(elem): r.append(deepcopy(c)) return r xp1 = etree.XPath("child::Title[contains(text(), 'night')]") xp2 = etree.XPath("child::Copyright") out = open('out.xml', 'w') context = etree.iterparse('copyright.xml', events=('end',), tag='Record') fast_iter(context, lambda elem: write_if_node(out, serialize_with_xpath(elem, xp1, xp2)))</code></pre> <h4 id="N10248" class="ibm-h4"> <span style="font-weight: bold;">在文档其他部分中查找节点</span> </h4> <p> 请注意,即使在使用<code>iterparse</code> ,也可以基于向前看当前节点来使用XPath谓词。 要查找紧跟其标题包含单词<code>night</code>的记录的所有<code><Record></code>节点,请执行以下操作: </p> <pre class="has"><code class="notranslate brush: js; html-script: true; gutter: true;">etree.XPath("Title[contains(../Record/following::Record[1]/Title/text(), 'night')]")</code></pre> <p> 但是,当使用清单4中描述的内存有效的迭代策略时,此命令将不返回任何内容,因为在进行文档解析时会清除前面的节点: </p> <pre class="has"><code class="notranslate brush: js; html-script: true; gutter: true;">etree.XPath("Title[contains(../Record/preceding::Record[1]/Title/text(), 'night')]")</code></pre> <p> 尽管可以编写一种有效的算法来解决此特定问题,但涉及跨节点分析的任务(尤其是那些可能随机分布在文档中的任务)通常更适合使用XQuery的XML数据库,例如eXist。 </p> <h3 id="N1026E" class="ibm-h3"> <span style="font-weight: bold;">其他提高绩效的方法</span> </h3> <p> 除了在 lxml中使用特定方法外,您还可以使用库外的方法来影响执行速度。 其中一些是简单的代码更改。 其他人则需要有关如何处理大数据问题的新思路。 </p> <h4 id="N10277" class="ibm-h4"> <span style="font-weight: bold;">普斯科</span> </h4> <p> Psyco模块是通过最少的工作来提高Python应用程序速度的常用方法。 一个纯Python程序的典型收益是两倍到四倍,但是lxml在C语言中完成了大部分工作,因此差异很小。 在启用Psyco的情况下运行清单4时,我仅将运行时间减少了三秒钟(43.9秒对47.3秒)。 Psyco的内存开销很大,如果计算机必须进行交换,它甚至可能抵消任何收益。 </p> <p> 如果您的lxml驱动的应用程序具有经常执行的核心纯Python代码(也许在文本节点上进行了广泛的字符串操作),则仅对这些方法启用Psyco可能会有所帮助。 有关Psyco的更多信息,请参阅相关主题 。 </p> <h4 id="N10287" class="ibm-h4"> <span style="font-weight: bold;">穿线</span> </h4> <p> 相反,如果您的应用程序主要依赖于内部C驱动的lxml功能,那么在多处理器环境中将其作为线程应用程序运行可能对您有利。 在如何启动线程方面存在一些限制,尤其是使用XSLT时。 有关更多信息,请查阅lxml文档中有关线程的FAQ部分。 </p> <h4 id="N1028F" class="ibm-h4"> <span style="font-weight: bold;">分而治之</span> </h4> <p> 如果可以将非常大的文档划分为可单独分析的子树,则可以在子树级别拆分文档(使用lxml的快速序列化),然后将这些文件上的工作分配到多台计算机上,这是可行的。 使用按需虚拟服务器是一种越来越流行的解决方案,用于执行中央处理器(CPU)绑定的脱机任务。 </p> <h3 id="N10296" class="ibm-h3"> <span style="font-weight: bold;">任何大批量XML任务的通用策略</span> </h3> <p> 此处呈现的特定代码示例可能不适用于您的项目,但是当面对以GB或更大为单位的XML数据时,请考虑一些原则(由测试和lxml文档证明): </p> <ul class="ibm-bullet-list"> <li> 使用迭代分析策略来逐步处理大型文档。 </li> <li> 如果需要以随机顺序搜索整个文档,请移至建立索引的XML数据库。 </li> <li> 对您选择的数据要非常保守。 如果仅对特定节点感兴趣,请使用通过这些名称选择的方法。 如果需要谓词语法,请尝试使用XPath类和方法之一。 </li> <li> 考虑手头的任务和开发人员的舒适程度。 当不考虑速度时,诸如lxml的objectify或Amara之类的对象模型对于Python开发人员可能更自然。 仅需要解析时,cElementTree更快。 </li> <li> 花时间进行甚至简单的基准测试。 处理数百万条记录时,会产生很小的差异,而且并不总是很明显哪种方法最有效。 </li> </ul> <h3 id="N102AB" class="ibm-h3"> <span style="font-weight: bold;">结论</span> </h3> <p> 许多软件产品附带两个选择警告,这意味着您只能选择两个:速度,灵活性或可读性。 如果仔细使用,lxml可以提供全部三个。 那些在DOM性能或事件驱动的SAX模型上苦苦挣扎的XML开发人员现在有机会使用更高级别的pythonic库。 来自XML的Python背景的程序员可以轻松地探索XPath和XSLT的表现力。 两种编码样式都可以在基于lxml的应用程序中愉快地共存。 </p> <p> lxml提供的功能比这里探讨的更多。 确保研究<code>lxml.objectify</code>模块,尤其是对于较小的数据集或主要不是基于XML的应用程序。 对于可能格式不正确HTML内容,lxml提供了两个有用的程序包: <code>lxml.html</code>模块和BeautifulSoup解析器。 如果编写可从XSLT调用的Python模块或创建自定义Python或C扩展,也可以扩展lxml本身。 查找中提到的LXML文件中有关所有这些信息相关主题 。 </p> <div class="ibm-alternate-rule"> <hr> </div> <blockquote> <p>翻译自: https://www.ibm.com/developerworks/opensource/library/x-hiperfparse/index.html</p> </blockquote> <p>lxml解析 python</p> </div> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1712258345068474368"></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,linux,人工智能)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1892572005543243776.htm" title="兄弟们,我的deepseek终于可以控制浏览器了:Part 1/n,含代码" target="_blank">兄弟们,我的deepseek终于可以控制浏览器了:Part 1/n,含代码</a> <span class="text-muted">几道之旅</span> <a class="tag" taget="_blank" href="/search/Dify%EF%BC%9A%E6%99%BA%E8%83%BD%E4%BD%93%EF%BC%88Agent%EF%BC%89/1.htm">Dify:智能体(Agent)</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C%E6%B5%81/1.htm">工作流</a><a class="tag" taget="_blank" href="/search/%E7%9F%A5%E8%AF%86%E5%BA%93/1.htm">知识库</a><a class="tag" taget="_blank" href="/search/%E5%85%A8%E6%90%9E%E5%AE%9A/1.htm">全搞定</a><a class="tag" taget="_blank" href="/search/%E5%87%A0%E9%81%93%E4%B9%8B%E6%97%85AI%E4%B8%93%E6%A0%8FVVVIP/1.htm">几道之旅AI专栏VVVIP</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>文章目录前言helloworld前言其实,deepseek控制浏览器咱之前就发过,只不过当时没有想到这么好的标题,哈哈。所依赖的,依然是BrowserUse这个项目BrowserUse项目官网helloworld按照官网配置好环境后,只需新建一个python文件(例如,叫main.py?)然后运行即可。fromlangchain_openaiimportChatOpenAIfrombrowser_</div> </li> <li><a href="/article/1892571879219195904.htm" title="Linux操作系统:个人云存储服务搭建开发" target="_blank">Linux操作系统:个人云存储服务搭建开发</a> <span class="text-muted">暮雨哀尘</span> <a class="tag" taget="_blank" href="/search/Linux%E7%9A%84%E9%82%A3%E7%82%B9%E4%BA%8B/1.htm">Linux的那点事</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><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%E6%8A%80%E6%9C%AF/1.htm">集群技术</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>个人云存储服务搭建开发文档一、项目目标搭建一个类似Dropbox的个人云存储服务,实现文件的同步和备份功能,确保数据的安全性和便捷性。二、技术栈操作系统:Linux(推荐使用UbuntuServer或CentOS)云存储软件:Nextcloud或SeafileWeb服务器:Apache或Nginx数据库:MySQL或MariaDBSSL证书:自签名证书或Let'sEncrypt免费证书三、搭建步骤</div> </li> <li><a href="/article/1892570997295476736.htm" title="Linux 系统中的 .7z 压缩与解压详解" target="_blank">Linux 系统中的 .7z 压缩与解压详解</a> <span class="text-muted">Crazy learner</span> <a class="tag" taget="_blank" href="/search/Linux%E5%9F%BA%E6%9C%AC%E5%91%BD%E4%BB%A4/1.htm">Linux基本命令</a><a class="tag" taget="_blank" href="/search/C%2B%2B%E4%B8%8Epython%E7%BC%96%E7%A8%8B/1.htm">C++与python编程</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/7z/1.htm">7z</a> <div>目录一、安装p7zip工具二、压缩文件到.7z格式三、解压.7z文件五、常见操作实例六、总结在Linux系统中,.7z是一种高效的压缩文件格式,通常使用p7zip工具来进行操作。7z格式以其高压缩率和支持多种压缩算法(如LZMA、LZMA2等)而闻名。本文将深入讲解如何在Linux环境下使用.7z文件格式进行压缩和解压操作,并通过多个实例帮助你掌握这些技能。一、安装p7zip工具在大多数Linux</div> </li> <li><a href="/article/1892569127797714944.htm" title="CSE 231 Computer Python program" target="_blank">CSE 231 Computer Python program</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>CSE231Spring2025ComputerProject#4LearningobjectivesThisassignmentfocusesonthedesign,implementationandtestingofaPythonprogramthatusescharacterstringsforlookingattheDNAsequencesforkeyproteinsandseeingho</div> </li> <li><a href="/article/1892565454380134400.htm" title="【部署】Ktransformer是什么、如何利用单卡24GB显存部署Deepseek-R1 和 Deepseek-V3" target="_blank">【部署】Ktransformer是什么、如何利用单卡24GB显存部署Deepseek-R1 和 Deepseek-V3</a> <span class="text-muted">仙人掌_lz</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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/%E9%83%A8%E7%BD%B2/1.htm">部署</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a> <div>简介KTransformers是一个灵活的、以Python为中心的框架,旨在通过先进的内核优化和放置/并行策略提升HuggingFaceTransformers的使用体验。它具有高度的可扩展性,用户可通过单行代码注入优化模块,获得兼容Transformers的接口、符合OpenAI和Ollama的RESTfulAPI,甚至简化的ChatGPT风格的WebUI。KTransformers的性能优化基</div> </li> <li><a href="/article/1892564445058625536.htm" title="C语言-回调函数的应用" target="_blank">C语言-回调函数的应用</a> <span class="text-muted">woainizhongguo.</span> <a class="tag" taget="_blank" href="/search/C%2FC%2B%2B/1.htm">C/C++</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a> <div>什么是回调函数回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++、Python、ECMAScript等更现代的编程语言中还可以使用仿函数或匿名函数。工作机制⑴定义一个回调函数;⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。应用案例(1)应用层:通过调用hal层</div> </li> <li><a href="/article/1892562929576898560.htm" title="Tomcat 8 安装包下载" target="_blank">Tomcat 8 安装包下载</a> <span class="text-muted">m0_74824517</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/1.htm">学习路线</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4/1.htm">阿里巴巴</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>Tomcat8安装包下载【下载地址】Tomcat8安装包下载本仓库提供了一个包含Windows和Linux版本的Tomcat8安装包,方便用户快速下载并部署Tomcat8服务器[这里是图片001]项目地址:https://gitcode.com/open-source-toolkit/fda7c简介本仓库提供了一个包含Windows和Linux版本的Tomcat8安装包,方便用户快速下载并部署To</div> </li> <li><a href="/article/1892562173436162048.htm" title="Python Union 联合类型注解详解" target="_blank">Python Union 联合类型注解详解</a> <span class="text-muted">人才程序员</span> <a class="tag" taget="_blank" href="/search/%E6%9D%82%E8%B0%88/1.htm">杂谈</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B/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>文章目录PythonUnion联合类型注解详解1.什么是Union联合类型?**语法(Python3.9及之前版本)**:**语法(Python3.10及之后版本)**:2.Union联合类型注解示例**(1)使用Union来表示多个类型的参数****(2)使用`|`来表示联合类型(Python3.10及之后版本)**3.使用Union进行复杂类型注解**(1)使用Union与列表结合****(2</div> </li> <li><a href="/article/1892559904984592384.htm" title="OpenAI揭示o3的推理过程,以弥合与DeepSeek-R1的差距" target="_blank">OpenAI揭示o3的推理过程,以弥合与DeepSeek-R1的差距</a> <span class="text-muted">c++服务器开发</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/deepseek/1.htm">deepseek</a> <div>生成式人工智能开发商OpenAI公司首席执行官SamAltman最近在RedditAMA问答活动中承认,该公司在开源软件研究方面站在了“历史错误的一边”。尽管OpenAI公司尚未发布其开源模型,但已经迈出了提高透明度的第一步。正如该公司在其X帐号上所宣布的那样,其最新的推理模型o3-mini现在展示了其思维链(CoT)跟踪的更详细版本。此前,OpenAI公司的推理模型仅展示了CoT的高级概述,这使</div> </li> <li><a href="/article/1892559400569204736.htm" title="释放 DeepSeek 的力量:像专家一样本地安装与探索!" target="_blank">释放 DeepSeek 的力量:像专家一样本地安装与探索!</a> <span class="text-muted">guzhoumingyue</span> <a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>要在本地运行DeepSeek,您需要遵循以下步骤。请确保您的计算机上已安装Python和Git,并且满足DeepSeek的依赖项。步骤1:安装依赖项安装Python和pip确保您已安装Python(建议使用Python3.6及以上版本)。您可以通过在终端/命令提示符中输入以下命令来检查Python是否已安装:bash复制代码python--version或者bash复制代码python3--ver</div> </li> <li><a href="/article/1892558265674428416.htm" title="Linux:从入门到精通的全面指南" target="_blank">Linux:从入门到精通的全面指南</a> <span class="text-muted">dbsnc1111</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>一、引言Linux作为一种开源操作系统,犹如一座技术宝库,在当今的科技领域中占据着至关重要的地位。它以其卓越的稳定性、高度的安全性和无与伦比的灵活性,在服务器、嵌入式系统、个人计算机、超级计算机等众多领域广泛应用。无论是渴望提升技术水平的个人,还是寻求拓展职业道路的专业人士,学习Linux都无疑是开启新机遇之门的钥匙。以下是关于Linux的详细知识以及学习Linux的经验总结,希望能为正在学习或准</div> </li> <li><a href="/article/1892557130465079296.htm" title="【Tools/macOS系列】macOS终端配置:zsh+iTerm2+OhMyZsh" target="_blank">【Tools/macOS系列】macOS终端配置:zsh+iTerm2+OhMyZsh</a> <span class="text-muted">飞翔的鲲</span> <a class="tag" taget="_blank" href="/search/%E3%80%90%E5%AE%9E%E7%94%A8%E5%B7%A5%E5%85%B7%E4%B8%93%E6%A0%8F%E3%80%91/1.htm">【实用工具专栏】</a><a class="tag" taget="_blank" href="/search/macOS/1.htm">macOS</a><a class="tag" taget="_blank" href="/search/zsh/1.htm">zsh</a><a class="tag" taget="_blank" href="/search/iTerm2/1.htm">iTerm2</a><a class="tag" taget="_blank" href="/search/%E7%BB%88%E7%AB%AF/1.htm">终端</a><a class="tag" taget="_blank" href="/search/ohmyzsh/1.htm">ohmyzsh</a> <div>DATE:2021.7.17文章目录1、前言2、参考3、终端和vim配置效果图4、终端配置步骤4.1、安装iTerm24.2、安装oh-my-zsh4.3、主题和颜色4.4、插件4.5、特殊字体Hackherdfont4.6、vim配置4.7、随时唤起4.8、自定义界面壁纸1、前言macOS的终端Terminal界面非常简单,没有Linux下面的颜色设置和自动补齐等功能,用起来非常不方便。本文讲解</div> </li> <li><a href="/article/1892556372785033216.htm" title="Linux-ISCSI" target="_blank">Linux-ISCSI</a> <span class="text-muted">DC_BLOG</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>文章目录iSCSIiSCSI配置作者主页:点击!Linux专栏:点击!⏰️创作时间:2025年02月17日19点50分iSCSI协议是没有同步机制的,要想解决同步机制,需要配置集群文件系统或者是分布式文件系统,防止数据不同步的问题iSCSI基于IP协议的技术标准,该技术允许用户通过TCP/IP网络来构建SANiSCCI的基本组成使用3260端口进行传输iSCCI会话的建立是通过启动器(Initat</div> </li> <li><a href="/article/1892556373409984512.htm" title="Linux-GlusterFS操作子卷" target="_blank">Linux-GlusterFS操作子卷</a> <span class="text-muted">DC_BLOG</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/wpf/1.htm">wpf</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a> <div>文章目录分布式卷添加卷分布式卷删除子卷删除总卷作者主页:点击!Linux专栏:点击!⏰️创作时间:2025年02月20日19点30分分布式卷添加卷Node1上进行操作扩容#服务器端glustervolumeadd-brickgv-disNode3:/exp/vdb1/brick#在分布式卷中添加卷glustervolumeinfogv-dis#之后查看分布式卷的详细信息之后就会发现新增了Node3</div> </li> <li><a href="/article/1892555994295234560.htm" title="ffmpeg-python安装" target="_blank">ffmpeg-python安装</a> <span class="text-muted">neverayever</span> <a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA/1.htm">计算机</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>centos-ffmpeg-python安装安装ffmpeg一:下载并解压wgethttp://www.ffmpeg.org/releases/ffmpeg-4.2.tar.gztar-zxvfffmpeg-4.2.tar.gz若linux服务器没网,可以在windows上直接访问http://www.ffmpeg.org/releases/ffmpeg-4.2.tar.gz就可下载,然后上传至服</div> </li> <li><a href="/article/1892549561214365696.htm" title="PHP 网络编程介绍" target="_blank">PHP 网络编程介绍</a> <span class="text-muted">来恩1003</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/1.htm">从入门到精通</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/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>PHP学习资料PHP学习资料PHP学习资料在当今数字化时代,网络编程是开发各类应用必不可少的技能。PHP作为一门广泛应用于Web开发的编程语言,同样具备强大的网络编程能力。接下来,我们将深入探讨PHP中网络连接的建立、Socket编程、HTTP请求与响应等网络相关的操作。一、网络连接的建立在PHP中建立网络连接,主要是通过使用内置的函数来实现与远程服务器的通信。最常见的是使用fsockopen函数</div> </li> <li><a href="/article/1892547290837610496.htm" title="Python的那些事第二十七篇:Python中的“数据魔法师”NumPy" target="_blank">Python的那些事第二十七篇:Python中的“数据魔法师”NumPy</a> <span class="text-muted">暮雨哀尘</span> <a class="tag" taget="_blank" href="/search/Python%E7%9A%84%E9%82%A3%E4%BA%9B%E4%BA%8B/1.htm">Python的那些事</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/numpy/1.htm">numpy</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/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/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/%E6%95%B0%E7%BB%84/1.htm">数组</a><a class="tag" taget="_blank" href="/search/%E7%B4%A2%E5%BC%95/1.htm">索引</a> <div>摘要在这篇幽默风趣的论文中,我们将深入探讨NumPy——Python中最强大的数值计算库之一。它不仅提供了高性能的多维数组对象,还让复杂的数学运算变得像吃冰淇淋一样简单。本文将通过生动的代码示例和幽默的比喻,带你领略NumPy的魔法世界,让你在欢笑中掌握这个强大的工具。一、引言:为什么NumPy是程序员的“超级英雄”?1.1NumPy的起源:从“数据苦力”到“数据魔法师”想象一下,你被困在一个全是</div> </li> <li><a href="/article/1892541989010862080.htm" title="基于Linux平台的多实例RTSP|RTMP直播播放器深度解析与技术实现" target="_blank">基于Linux平台的多实例RTSP|RTMP直播播放器深度解析与技术实现</a> <span class="text-muted">音视频牛哥</span> <a class="tag" taget="_blank" href="/search/RTSP%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">RTSP播放器</a><a class="tag" taget="_blank" href="/search/RTMP%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">RTMP播放器</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E7%89%9B%E7%9B%B4%E6%92%ADSDK/1.htm">大牛直播SDK</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/%E5%AE%9E%E6%97%B6%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">实时音视频</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E9%A2%91%E7%BC%96%E8%A7%A3%E7%A0%81/1.htm">视频编解码</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/rtsp%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">rtsp播放器</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/rtmp%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">rtmp播放器</a><a class="tag" taget="_blank" href="/search/linux%E5%9B%BD%E4%BA%A7rtmp%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">linux国产rtmp播放器</a><a class="tag" taget="_blank" href="/search/linux%E5%9B%BD%E4%BA%A7rtsp%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">linux国产rtsp播放器</a> <div>一、引言在Linux平台上实现一个高性能、高并发的多实例播放器,是许多流媒体应用的核心需求。本文将结合大牛直播SDK的Linux平台RTSP/RTMP播放器功能,深入解析其实现原理、关键技术点以及优化策略。通过对代码的详细分析和实际应用的结合,帮助开发者更好地理解和应用该技术。二、项目概述本文基于以下代码实现了一个多实例播放器:multi_player_demo.cpp:主程序,负责初始化SDK、</div> </li> <li><a href="/article/1892537949245992960.htm" title="Python爬虫TLS" target="_blank">Python爬虫TLS</a> <span class="text-muted">dme.</span> <a class="tag" taget="_blank" href="/search/Python%E7%88%AC%E8%99%AB%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8/1.htm">Python爬虫零基础入门</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>TLS指纹校验原理和绕过浏览器可以正常访问,但是用requests发送请求失败。后端是如何监测得呢?为什么浏览器可以返回结果,而requests模块不行呢?https://cn.investing.com/equities/amazon-com-inc-historical-data1.指纹校验案例1.1案例:ascii2dhttps://ascii2d.net/importrequestsres</div> </li> <li><a href="/article/1892537066504384512.htm" title="python爬虫Selenium库详细教程_python爬虫之selenium库的使用详解" target="_blank">python爬虫Selenium库详细教程_python爬虫之selenium库的使用详解</a> <span class="text-muted">嘻嘻哈哈学编程</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a> <div>网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!2.2访问页面2.3查找元素2.3.1单个元素下面</div> </li> <li><a href="/article/1892537067355828224.htm" title="排序算法:冒泡排序(Python)" target="_blank">排序算法:冒泡排序(Python)</a> <span class="text-muted">娱乐不打烊丶</span> <a class="tag" taget="_blank" href="/search/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/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/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a> <div>思路:大家一定都喝过汽水吧,汽水中常常有许多小小的气泡,往上飘,这是因为组成小气泡的二氧化碳比水要轻,所以小气泡才会一点一点的向上浮。而冒泡排序之所以叫冒泡排序,正是因为这种排序算法的每一个元素都可以向小气泡一样,根据自身大小,一点一点向着数组的一侧移动。一图解百惑,上图!那么,话不多说,上代码!defbubble_sort(input_list):#冒泡排序:每次循环,锁定一个最值,并朝着最大或</div> </li> <li><a href="/article/1892536309688365056.htm" title="supervisord 命令介绍和使用案例" target="_blank">supervisord 命令介绍和使用案例</a> <span class="text-muted">lisanmengmeng</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%91%BD%E4%BB%A4%E5%B7%A5%E5%85%B7/1.htm">命令工具</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E8%BF%90%E7%BB%B4/1.htm">系统运维</a><a class="tag" taget="_blank" href="/search/shell%E7%BC%96%E7%A8%8B/1.htm">shell编程</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>supervisord命令介绍和使用案例supervisord是一个用Python编写的进程管理工具,用于监控和管理Linux系统中的进程。它可以将普通的命令行进程转变为后台守护进程(daemon),并监控进程状态,在进程异常退出时自动重启。它通过fork/exec的方式把被管理的进程当作自己的子进程来启动。主要功能:进程管理:能够启动、停止、重启和关闭进程.自动重启:监控进程状态,并在进程崩溃时</div> </li> <li><a href="/article/1892536183204933632.htm" title="ptython setup.py install 设置python包编译时的并行数" target="_blank">ptython setup.py install 设置python包编译时的并行数</a> <span class="text-muted">leo0308</span> <a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/1.htm">基础知识</a><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/pytorch3d/1.htm">pytorch3d</a> <div>通过源码编译安装pytorch3d的时候,直接执行pythonsetup.pyinstall时,默认开的并行数很多,有10几个,直接导致机器卡死。通过设置下面的环境变量,可以设置较小的并行数,避免占用过多的资源。exportMAX_JOBS=4设置后,同时只有4个编译的进程。</div> </li> <li><a href="/article/1892531391170670592.htm" title="同城拼车打车约车系统:Java源码全开源构建与优化" target="_blank">同城拼车打车约车系统:Java源码全开源构建与优化</a> <span class="text-muted">狂团商城小师妹</span> <a class="tag" taget="_blank" href="/search/%E5%8D%9A%E7%BA%B3miui52086/1.htm">博纳miui52086</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%B9%B3%E5%8F%B0/1.htm">微信公众平台</a> <div>同城拼车系统是一个复杂且功能全面的软件系统,它巧妙地运用互联网技术,将具有相同出行需求的乘客与车主进行精准匹配,旨在实现资源的最大化共享、显著降低出行成本、有效缓解交通拥堵问题,并大幅提升出行效率。Java,作为一种功能强大、应用广泛的编程语言,凭借其出色的跨平台性、丰富的API库以及强大的性能,成为开发此类系统的理想选择。一、Java源码构建系统架构MVC架构:同城拼车系统采用MVC(Model</div> </li> <li><a href="/article/1892527096467615744.htm" title="探索AI音乐创作的未来:八款顶尖AI音乐生成工具(本期介绍国外-国内另外专题介绍)" target="_blank">探索AI音乐创作的未来:八款顶尖AI音乐生成工具(本期介绍国外-国内另外专题介绍)</a> <span class="text-muted">带娃的IT创业者</span> <a class="tag" taget="_blank" href="/search/AIGC/1.htm">AIGC</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98%E5%88%9B%E5%AF%8C/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/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a> <div>探索AI音乐创作的未来:八款顶尖AI音乐生成工具(本期介绍国外-国内另外专题介绍)在科技飞速发展的今天,人工智能(AI)已经渗透到我们生活的方方面面,其中音乐创作也不例外。AI音乐生成工具不仅为专业音乐人提供了新的创作方式,也让普通人能够轻松创作出高质量的音乐作品。本文将介绍八款知名的AI音乐生成工具,帮助你了解它们的特点和优势。1.SunoSuno是一款AI驱动的音乐生成器,能够快速创建高质量的</div> </li> <li><a href="/article/1892524450474160128.htm" title="深入理解DAG任务调度系统:核心原理与实现" target="_blank">深入理解DAG任务调度系统:核心原理与实现</a> <span class="text-muted">AI天才研究院</span> <a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97/1.htm">计算</a><a class="tag" taget="_blank" href="/search/Python%E5%AE%9E%E6%88%98/1.htm">Python实战</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E5%AE%9E%E8%B7%B5/1.htm">编程实践</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/dag/1.htm">dag</a> <div>1.背景介绍随着大数据、人工智能等领域的发展,任务调度系统的重要性日益凸显。DirectedAcyclicGraph(DAG)任务调度系统是一种常见的任务调度系统,它可以有效地解决多个依赖关系复杂的任务调度问题。本文将深入探讨DAG任务调度系统的核心原理和实现,为读者提供一个深入的理解。1.1背景介绍1.1.1任务调度系统简介任务调度系统是计算机科学中一个重要的研究领域,它主要关注于在并行计算系统</div> </li> <li><a href="/article/1892521045080993792.htm" title="python 自动化数据提取之正则表达式_python 正则提取(2)" target="_blank">python 自动化数据提取之正则表达式_python 正则提取(2)</a> <span class="text-muted">m0_60607245</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/python/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/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div>一、Python所有方向的学习路线Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。二、Python必备开发工具工具都帮大家整理好了,安装就可直接上手!三、最新Python学习笔记当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理</div> </li> <li><a href="/article/1892520036933890048.htm" title="如何解决分布式应用数量庞大而导致数据库连接数满的问题?" target="_blank">如何解决分布式应用数量庞大而导致数据库连接数满的问题?</a> <span class="text-muted">纵然间</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>修改数据库服务器的配置文件或参数来增加最大连接数限制。例如,在MySQL中,可以通过修改my.cnf(Linux)或my.ini(Windows)文件中的max_connections参数来增加最大连接数。具体的操作方法可以参考数据库服务器的官方文档或相关技术支持。检查应用程序代码,确保在使用完数据库连接后及时释放连接资源,避免长时间占用连接而导致连接数不足。可以使用连接池技术来管理数据库连接,提</div> </li> <li><a href="/article/1892519279048323072.htm" title="GUI编程(window系统→Linux系统)" target="_blank">GUI编程(window系统→Linux系统)</a> <span class="text-muted">诚信爱国敬业友善</span> <a class="tag" taget="_blank" href="/search/%E5%BF%83%E5%BE%97/1.htm">心得</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/gui/1.htm">gui</a> <div>最近有个项目需要将windows系统的程序往Linux系统上面移植,由于之前程序没有考虑过多平台兼容的问题,导致部分功能不可用以下是对近期遇到的问题的总结,以及相应的解决方案和经验分享。1.Python模块安装与管理在Linux系统中,安装和管理Python模块时可能会遇到权限问题或依赖冲突。安装模块:使用pip安装模块时,建议使用--user选项,避免需要管理员权限:bash复制pipinsta</div> </li> <li><a href="/article/1892516757122379776.htm" title="spring boot基于知识图谱的阿克苏市旅游管理系统python-计算机毕业设计" target="_blank">spring boot基于知识图谱的阿克苏市旅游管理系统python-计算机毕业设计</a> <span class="text-muted">QQ1963288475</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/%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1/1.htm">知识图谱</a><a class="tag" taget="_blank" href="/search/%E6%97%85%E6%B8%B8/1.htm">旅游</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/flask/1.htm">flask</a> <div>目录功能和技术介绍具体实现截图开发核心技术:开发环境开发步骤编译运行核心代码部分展示系统设计详细视频演示可行性论证软件测试源码获取功能和技术介绍该系统基于浏览器的方式进行访问,采用springboot集成快速开发框架,前端使用vue方式,基于es5的语法,开发工具IntelliJIDEAx64,因为该开发工具,内嵌了Tomcat服务运行机制,可不用单独下载Tomcatserver服务器。由于考虑到</div> </li> <li><a href="/article/90.htm" title="java观察者模式" target="_blank">java观察者模式</a> <span class="text-muted">3213213333332132</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><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F/1.htm">游戏</a><a class="tag" taget="_blank" href="/search/%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F/1.htm">观察者模式</a> <div>观察者模式——顾名思义,就是一个对象观察另一个对象,当被观察的对象发生变化时,观察者也会跟着变化。 在日常中,我们配java环境变量时,设置一个JAVAHOME变量,这就是被观察者,使用了JAVAHOME变量的对象都是观察者,一旦JAVAHOME的路径改动,其他的也会跟着改动。 这样的例子很多,我想用小时候玩的老鹰捉小鸡游戏来简单的描绘观察者模式。 老鹰会变成观察者,母鸡和小鸡是</div> </li> <li><a href="/article/217.htm" title="TFS RESTful API 模拟上传测试" target="_blank">TFS RESTful API 模拟上传测试</a> <span class="text-muted">ronin47</span> <div>       TFS RESTful API 模拟上传测试。    细节参看这里:https://github.com/alibaba/nginx-tfs/blob/master/TFS_RESTful_API.markdown 模拟POST上传一个图片: curl --data-binary @/opt/tfs.png http</div> </li> <li><a href="/article/344.htm" title="PHP常用设计模式单例, 工厂, 观察者, 责任链, 装饰, 策略,适配,桥接模式" target="_blank">PHP常用设计模式单例, 工厂, 观察者, 责任链, 装饰, 策略,适配,桥接模式</a> <span class="text-muted">dcj3sjt126com</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/PHP/1.htm">PHP</a> <div>// 多态, 在JAVA中是这样用的, 其实在PHP当中可以自然消除, 因为参数是动态的, 你传什么过来都可以, 不限制类型, 直接调用类的方法 abstract class Tiger { public abstract function climb(); } class XTiger extends Tiger { public function climb()</div> </li> <li><a href="/article/471.htm" title="hibernate" target="_blank">hibernate</a> <span class="text-muted">171815164</span> <a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a> <div>main,save Configuration conf =new Configuration().configure(); SessionFactory sf=conf.buildSessionFactory(); Session sess=sf.openSession(); Transaction tx=sess.beginTransaction(); News a=new </div> </li> <li><a href="/article/598.htm" title="Ant实例分析" target="_blank">Ant实例分析</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/ant/1.htm">ant</a> <div>        下面是一个Ant构建文件的实例,通过这个实例我们可以很清楚的理顺构建一个项目的顺序及依赖关系,从而编写出更加合理的构建文件。           下面是build.xml的代码: <?xml version="1</div> </li> <li><a href="/article/725.htm" title="[简单]工作记录_接口返回405原因" target="_blank">[简单]工作记录_接口返回405原因</a> <span class="text-muted">53873039oycg</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a> <div>         最近调接口时候一直报错,错误信息是:       responseCode:405 responseMsg:Method Not Allowed        接口请求方式Post. </div> </li> <li><a href="/article/852.htm" title="关于java.lang.ClassNotFoundException 和 java.lang.NoClassDefFoundError 的区别" target="_blank">关于java.lang.ClassNotFoundException 和 java.lang.NoClassDefFoundError 的区别</a> <span class="text-muted">程序员是怎么炼成的</span> <div>   真正完成类的加载工作是通过调用 defineClass来实现的;  而启动类的加载过程是通过调用 loadClass来实现的;  就是类加载器分为加载和定义   protected Class<?> findClass(String name) throws ClassNotFoundExcept</div> </li> <li><a href="/article/979.htm" title="JDBC学习笔记-JDBC详细的操作流程" target="_blank">JDBC学习笔记-JDBC详细的操作流程</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/jdbc/1.htm">jdbc</a> <div>所有的JDBC应用程序都具有下面的基本流程:  1、加载数据库驱动并建立到数据库的连接。  2、执行SQL语句。  3、处理结果。  4、从数据库断开连接释放资源。 下面我们就来仔细看一看每一个步骤: 其实按照上面所说每个阶段都可得单独拿出来写成一个独立的类方法文件。共别的应用来调用。 1、加载数据库驱动并建立到数据库的连接:   Html代码  St</div> </li> <li><a href="/article/1106.htm" title="rome创建rss" target="_blank">rome创建rss</a> <span class="text-muted">antonyup_2006</span> <a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/cms/1.htm">cms</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a><a class="tag" taget="_blank" href="/search/Opera/1.htm">Opera</a> <div>引用 1.RSS标准 RSS标准比较混乱,主要有以下3个系列 RSS 0.9x / 2.0 : RSS技术诞生于1999年的网景公司(Netscape),其发布了一个0.9版本的规范。2001年,RSS技术标准的发展工作被Userland Software公司的戴夫 温那(Dave Winer)所接手。陆续发布了0.9x的系列版本。当W3C小组发布RSS 1.0后,Dave W</div> </li> <li><a href="/article/1233.htm" title="html表格和表单基础" target="_blank">html表格和表单基础</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E8%A1%A8%E6%A0%BC/1.htm">表格</a><a class="tag" taget="_blank" href="/search/%E8%A1%A8%E5%8D%95/1.htm">表单</a><a class="tag" taget="_blank" href="/search/meta/1.htm">meta</a><a class="tag" taget="_blank" href="/search/%E9%94%9A%E7%82%B9/1.htm">锚点</a> <div>第一次用html来写东西,感觉压力山大,每次看见别人发的都是比较牛逼的 再看看自己什么都还不会,   html是一种标记语言,其实很简单都是固定的格式   _----------------------------------------表格和表单 表格是html的重要组成部分,表格用在body里面的 主要用法如下; <table> &</div> </li> <li><a href="/article/1360.htm" title="ibatis如何传入完整的sql语句" target="_blank">ibatis如何传入完整的sql语句</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/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a> <div>        ibatis如何传入完整的sql语句?进一步说,String str ="select * from test_table",我想把str传入ibatis中执行,是传递整条sql语句。         解决办法: <</div> </li> <li><a href="/article/1487.htm" title="精通Oracle10编程SQL(14)开发动态SQL" target="_blank">精通Oracle10编程SQL(14)开发动态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>/* *开发动态SQL */ --使用EXECUTE IMMEDIATE处理DDL操作 CREATE OR REPLACE PROCEDURE drop_table(table_name varchar2) is sql_statement varchar2(100); begin sql_statement:='DROP TABLE '||table_name; </div> </li> <li><a href="/article/1614.htm" title="【Linux命令】Linux工作中常用命令" target="_blank">【Linux命令】Linux工作中常用命令</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/linux%E5%91%BD%E4%BB%A4/1.htm">linux命令</a> <div>不断的总结工作中常用的Linux命令   1.查看端口被哪个进程占用   通过这个命令可以得到占用8085端口的进程号,然后通过ps -ef|grep 进程号得到进程的详细信息   netstat -anp | grep 8085   察看进程ID对应的进程占用的端口号   netstat -anp | grep 进程ID &</div> </li> <li><a href="/article/1741.htm" title="优秀网站和文档收集" target="_blank">优秀网站和文档收集</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%AB%99/1.htm">网站</a> <div>集成 Flex, Spring, Hibernate 构建应用程序   性能测试工具-JMeter   Hmtl5-IOCN网站   Oracle精简版教程网站   鸟哥的linux私房菜   Jetty中文文档   50个jquery必备代码片段   swfobject.js检测flash版本号工具</div> </li> <li><a href="/article/1868.htm" title="angular.extend" target="_blank">angular.extend</a> <span class="text-muted">boyitech</span> <a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/angular.extend/1.htm">angular.extend</a><a class="tag" taget="_blank" href="/search/AngularJS+API/1.htm">AngularJS API</a> <div>angular.extend 复制src对象中的属性去dst对象中. 支持多个src对象. 如果你不想改变一个对象,你可以把dst设为空对象{}: var object = angular.extend({}, object1, object2). 注意: angular.extend不支持递归复制. 使用方法: angular.extend(dst, src); 参数: </div> </li> <li><a href="/article/1995.htm" title="java-谷歌面试题-设计方便提取中数的数据结构" target="_blank">java-谷歌面试题-设计方便提取中数的数据结构</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>网上找了一下这道题的解答,但都是提供思路,没有提供具体实现。其中使用大小堆这个思路看似简单,但实现起来要考虑很多。 以下分别用排序数组和大小堆来实现。 使用大小堆: import java.util.Arrays; public class MedianInHeap { /** * 题目:设计方便提取中数的数据结构 * 设计一个数据结构,其中包含两个函数,1.插</div> </li> <li><a href="/article/2122.htm" title="ajaxFileUpload 针对 ie jquery 1.7+不能使用问题修复版本" target="_blank">ajaxFileUpload 针对 ie jquery 1.7+不能使用问题修复版本</a> <span class="text-muted">Chen.H</span> <a class="tag" taget="_blank" href="/search/ajaxFileUpload/1.htm">ajaxFileUpload</a><a class="tag" taget="_blank" href="/search/ie6/1.htm">ie6</a><a class="tag" taget="_blank" href="/search/ie7/1.htm">ie7</a><a class="tag" taget="_blank" href="/search/ie8/1.htm">ie8</a><a class="tag" taget="_blank" href="/search/ie9/1.htm">ie9</a> <div>jQuery.extend({ handleError: function( s, xhr, status, e ) { // If a local callback was specified, fire it if ( s.error ) { s.error.call( s.context || s, xhr, status, e ); } </div> </li> <li><a href="/article/2249.htm" title="[机器人制造原则]机器人的电池和存储器必须可以替换" target="_blank">[机器人制造原则]机器人的电池和存储器必须可以替换</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E5%88%B6%E9%80%A0/1.htm">制造</a> <div>        机器人的身体随时随地可能被外来力量所破坏,但是如果机器人的存储器和电池可以更换,那么这个机器人的思维和记忆力就可以保存下来,即使身体受到伤害,在把存储器取下来安装到一个新的身体上之后,原有的性格和能力都可以继续维持.....        另外,如果一</div> </li> <li><a href="/article/2376.htm" title="Oracle Multitable INSERT 的用法" target="_blank">Oracle Multitable INSERT 的用法</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>转载Oracle笔记-Multitable INSERT 的用法 http://blog.chinaunix.net/uid-8504518-id-3310531.html 一、Insert基础用法 语法:     Insert Into 表名 (字段1,字段2,字段3...)     Values (值1,</div> </li> <li><a href="/article/2503.htm" title="专访黑客历史学家George Dyson" target="_blank">专访黑客历史学家George Dyson</a> <span class="text-muted">datamachine</span> <a class="tag" taget="_blank" href="/search/on/1.htm">on</a> <div>20世纪最具威力的两项发明——核弹和计算机出自同一时代、同一群年青人。可是,与大名鼎鼎的曼哈顿计划(第二次世界大战中美国原子弹研究计划)相 比,计算机的起源显得默默无闻。出身计算机世家的历史学家George Dyson在其新书《图灵大教堂》(Turing’s Cathedral)中讲述了阿兰·图灵、约翰·冯·诺依曼等一帮子天才小子创造计算机及预见计算机未来</div> </li> <li><a href="/article/2630.htm" title="小学6年级英语单词背诵第一课" target="_blank">小学6年级英语单词背诵第一课</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/english/1.htm">english</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a> <div>always 总是 rice 水稻,米饭 before 在...之前 live 生活,居住   usual 通常的 early 早的 begin 开始 month 月份   year 年 last 最后的 east 东方的 high 高的   far 远的 window 窗户 world 世界 than 比...更   </div> </li> <li><a href="/article/2757.htm" title="在线IT教育和在线IT高端教育" target="_blank">在线IT教育和在线IT高端教育</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/%E6%95%99%E8%82%B2/1.htm">教育</a> <div>codecademy  http://www.codecademy.com codeschool  https://www.codeschool.com teamtreehouse  http://teamtreehouse.com lynda http://www.lynda.com/ Coursera https://www.coursera.</div> </li> <li><a href="/article/2884.htm" title="Struts2 xml校验框架所定义的校验文件" target="_blank">Struts2 xml校验框架所定义的校验文件</a> <span class="text-muted">蕃薯耀</span> <a class="tag" taget="_blank" href="/search/Struts2+xml%E6%A0%A1%E9%AA%8C/1.htm">Struts2 xml校验</a><a class="tag" taget="_blank" href="/search/Struts2+xml%E6%A0%A1%E9%AA%8C%E6%A1%86%E6%9E%B6/1.htm">Struts2 xml校验框架</a><a class="tag" taget="_blank" href="/search/Struts2%E6%A0%A1%E9%AA%8C/1.htm">Struts2校验</a> <div>  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 蕃薯耀 2015年7月11日 15:54:59 星期六 http://fa</div> </li> <li><a href="/article/3011.htm" title="mac下安装rar和unrar命令" target="_blank">mac下安装rar和unrar命令</a> <span class="text-muted">hanqunfeng</span> <a class="tag" taget="_blank" href="/search/mac/1.htm">mac</a> <div>1.下载:http://www.rarlab.com/download.htm 选择 RAR 5.21 for Mac OS X 2.解压下载后的文件 tar -zxvf rarosx-5.2.1.tar 3.cd rar sudo install -c -o $USER unrar /bin #输入当前用户登录密码 sudo install -c -o $USER rar</div> </li> <li><a href="/article/3138.htm" title="三种将list转换为map的方法" target="_blank">三种将list转换为map的方法</a> <span class="text-muted">jackyrong</span> <a class="tag" taget="_blank" href="/search/list/1.htm">list</a> <div>  在本文中,介绍三种将list转换为map的方法: 1) 传统方法 假设有某个类如下    class Movie { private Integer rank; private String description; public Movie(Integer rank, String des</div> </li> <li><a href="/article/3265.htm" title="年轻程序员需要学习的5大经验" target="_blank">年轻程序员需要学习的5大经验</a> <span class="text-muted">lampcy</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a> <div>在过去的7年半时间里,我带过的软件实习生超过一打,也看到过数以百计的学生和毕业生的档案。我发现很多事情他们都需要学习。或许你会说,我说的不就是某种特定的技术、算法、数学,或者其他特定形式的知识吗?没错,这的确是需要学习的,但却并不是最重要的事情。他们需要学习的最重要的东西是“自我规范”。这些规范就是:尽可能地写出最简洁的代码;如果代码后期会因为改动而变得凌乱不堪就得重构;尽量删除没用的代码,并添加</div> </li> <li><a href="/article/3392.htm" title="评“女孩遭野蛮引产致终身不育 60万赔偿款1分未得”医腐深入骨髓" target="_blank">评“女孩遭野蛮引产致终身不育 60万赔偿款1分未得”医腐深入骨髓</a> <span class="text-muted">nannan408</span> <div>先来看南方网的一则报道: 再正常不过的结婚、生子,对于29岁的郑畅来说,却是一个永远也无法实现的梦想。从2010年到2015年,从24岁到29岁,一张张新旧不一的诊断书记录了她病情的同时,也清晰地记下了她人生的悲哀。   粗暴手术让人发寒   2010年7月,在酒店做服务员的郑畅发现自己怀孕了,可男朋友却联系不上。在没有和家人商量的情况下,她决定堕胎。   12月5日,</div> </li> <li><a href="/article/3519.htm" title="使用jQuery为input输入框绑定回车键事件 VS 为a标签绑定click事件" target="_blank">使用jQuery为input输入框绑定回车键事件 VS 为a标签绑定click事件</a> <span class="text-muted">Everyday都不同</span> <a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a><a class="tag" taget="_blank" href="/search/input/1.htm">input</a><a class="tag" taget="_blank" href="/search/%E5%9B%9E%E8%BD%A6%E9%94%AE%E7%BB%91%E5%AE%9A/1.htm">回车键绑定</a><a class="tag" taget="_blank" href="/search/click/1.htm">click</a><a class="tag" taget="_blank" href="/search/enter/1.htm">enter</a> <div>假设如题所示的事件为同一个,必须先把该js函数抽离出来,该函数定义了监听的处理:   function search() { //监听函数略...... }   为input框绑定回车事件,当用户在文本框中输入搜索关键字时,按回车键,即可触发search():   //回车绑定 $(".search").keydown(fun</div> </li> <li><a href="/article/3646.htm" title="EXT学习记录" target="_blank">EXT学习记录</a> <span class="text-muted">tntxia</span> <a class="tag" taget="_blank" href="/search/ext/1.htm">ext</a> <div>  1. 准备   (1) 官网:http://www.sencha.com/   里面有源代码和API文档下载。   EXT的域名已经从www.extjs.com改成了www.sencha.com ,但extjs这个域名会自动转到sencha上。   (2)帮助文档:   想要查看EXT的官方文档的话,可以去这里h</div> </li> <li><a href="/article/3773.htm" title="mybatis3的mapper文件报Referenced file contains errors" target="_blank">mybatis3的mapper文件报Referenced file contains errors</a> <span class="text-muted">xingguangsixian</span> <a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a> <div>最近使用mybatis.3.1.0时无意中碰到一个问题: The errors below were detected when validating the file "mybatis-3-mapper.dtd" via the file "account-mapper.xml". In most cases these errors can be d</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>