博客单页化实践

半年前,因为VPS未续费导致所有数据丢失,直至今日终于重新恢复了所有的文章数据(虽然丢失了全部的评论),并且借此机会对所有文章进行了一次重新审视,修改了部分问题,并将所有示例迁移到 jsfiddle和 jsperf上,总算造一段落。

新的博客完全独立建设,不使用任何第三方的CMS系统,后端使用ASP.NET MVC实现,数据库使用MySQL,通过Mono部署于Ubuntu Server之上,前端使用nginx作为静态服务器。

也正因为完全独立构建,不受任何系统出于安全、简便等奇怪理由而附加的限制,这个博客系统也成了自己练手的娱乐场。就比如本篇要介绍的OPOA化实践。

概念

OPOA,全称 One Page One Application,中文可以称之为 单页应用

顾名思义,在OPOA下,一个页面组成一个应用,不再以传统的超链接跳转导航的方式,而是通过javascript以 XMLHttpRequest加载数据,通过 DOM操作展现数据。

作为一个单页应用,其优势主要有:

  • 多个页面拥有相同的结构时,一些相同的内容(如侧边栏、LOGO等)不需要重复加载,节省流量(及一定的数据库查询)。
  • 没有浏览器跳转地址导致的短暂空白页面状态,提升用户体验。
  • 可以增加过渡效果(如渐隐、渐显等),进一步提升体验。

纵观我的博客的结构:

可以发现,博客基本上由 页首侧边栏 主内容3部分组成。而其中 页首侧边栏 的内容是始终不变的,博客中所有的页面均只是填充主内容区域。

从后端的实现上来说,大致的结构是这样的:

  

标题

副标题

@RenderBody()

其中侧边栏的内容虽然永远是固定的,但是会调用 TagCloudArchiveList两个子Action,显而易见这2个Action又会有数据库的查询。因此,如果排除不变的这部分,只更新 div[id="main"]部分的内容,每一次浏览均可减少2次的数据库查询和一定量的HTML内容传输,有着不错的收益。

设计

本次实现OPOA的目标有:

  • 尽量少地引入后端改动的前提下完成。
  • 仅针对相关API支持到位的浏览器,其它浏览器保持降级,使用标准的超链接导航方式浏览。

因此尽管业界有不少OPOA的解决方案,如 Backbone等,但是其引入的复杂性会导致后端(包括输出的HTML)的大量的变更,并不适合本次实现。还是自己实现一次来得更有优势。

再回到最初的目的,我们要把 超链接导航改为 XMLHttpRequest加载数据并渲染,而超链接是由 元素产生的。因此从基本的解决方案而言,我们需要做的是:

  1. 拦截所有 元素的点击事件。
  2. 点击发生时,取消掉默认的跳转行为,改用XMLHttpRequest加载相应页面数据。
  3. 解析相应数据,放到 div[id="main"]容器中。
  4. 模拟浏览器的行为,改变地址栏、标题等。

当然其中会有很多的细节,后文主要就讲述这些问题。

实现

元素拦截

也许在几年前, 拦截所有 元素这事看上去并不那么简单,由于动态的脚本的存在,很有可能动态地加上 元素,这些新增的元素如何绑定事件会变成一个课题。

然而在 事件冒泡这一概念已经普及的如今,在jQuery推出了 delegate函数,并进一步整合进 on函数之后,这一需求的实现之简单也已经被全民所理解。

在这一块唯一需要注意的是,并不是所有的链接都属于本站,因此需要对链接的 href属性进行一定的判断。判断的条件无非2个:

  1. 是相对地址。
  2. 是绝对地址,但和当前页面是同域的。

对于第1点太容易判断了,而第2点需要解析 href属性分出 protocoldomain port等信息,由于浏览器中的javascript并没有相应的方法,自己实现也不怎么有趣,而个人的博客在后端输出时,应当被拦截的链接地址都是相对地址,因此暂时忽略了。

综合以上,对于元素的点击事件的拦截,代码相当简单:

  $('#page').on(
    'click',
    'a',
    function() {
        var href = $(this).attr('href');

        if (href.indexOf('/') !== 0) {
            return;
        }

        loadPage(href, true);

        return false;
    }
);

解析文档结构

对于 加载远程页面这一需求,自然不再赘述,随便用个 $.get函数就搞定问题了。比较麻烦的是,获取到后端给定的HTML之后,如何有效地更新当前页面。这一动作需要满足以下需求:

  • 相关的资源都正确加载,包含但不限于css和js文件。
  • 只更新需要更新的部分,即 div[id="main"]部分。

而后端为了 尽可能少地改造,返回回来的必然是一个HTML片段,而不会像一些成熟的OPOA应用一样,返回一个JSON结构,其中包含了依赖资源、HTML片段等一系列数据的描述。因此javascript需要做的是,从HTML片段中分析出 相关资源 以及具体内容并插入到当前页面中。

好在我们有jQuery的帮助,将整个HTML片段传给jQuery,看是否可以得到需要的内容:

  console.log($(html));

输出:
[#text, , #text, , #text, <script>, ..., <header>, ..., <div>]
</code></pre> 
 <p>很遗憾,从结果来看,完整的HTML结构是丢失了,至少找不到应该有的 <code><head></code>和 <code><body></code>元素,因而也没办法从 <code><head></code>中提取出相关的资源,包括 <code><script></code>和 <code><link></code>元素。</p> 
 <p>究其原因,在jQuery的实现中,当输入的是一个HTML片段时,其会调用 <code>parseHTML</code>方法,进一步调用 <code>buildFragment</code>方法,而 <code>buildFragment</code>方法创建一个 <strong>DocumentFragment</strong>后,调用 <code>clean</code>方法进行构建。</p> 
 <p>而其核心问题就在于, <code>clean</code>方法使用一个 <code><div></code>元素为容器,设置其 <code>innerHTML</code>属性来解析HTML片段。从HTML的内容模式上来看, <code><div></code>元素里面自然不能有 <code><head></code>和 <code><body></code>元素,因此浏览器的容错机制将这些元素给去除了,导致结构的丧失。</p> 
 <p>显然,事已至此,指望jQuery是不怎么现实的了,需要寻找其它的途径。从前面的尝试中,我们至少得到了一个有效的结论: <code>innerHTML</code>属性自带HTML解析功能(废话!)。那么,是不是我们找到一个元素,可以使用 <code>innerHTML</code>,又允许有 <code><head></code>和 <code><body></code>标签作为其子元素,是不是就解决问题了呢?</p> 
 <p>这样的元素有哪些呢?显然只有一个, <code><html></code>元素:</p> 
 <pre>  <code>var doc = document.createElement('html');
doc.innerHTML = html;
doc = $(doc);
console.log(doc);
</code></pre> 
 <p>这下给出的结果就对了,可以用 <code>getElementsByTagName</code>找到 <code><head></code>和 <code><body></code>元素,而DOCTYPE则被容错机制自动忽略,形成了一个结构良好符合要求的DOM结构。</p> 
 <h3>处理依赖资源</h3> 
 <p>后续的任务,是找出一个页面依赖的资源,并将这些资源放到现有的 <code><head></code>元素中。</p> 
 <p>从简单地角度看,这是个相当容易的事:</p> 
 <pre>  <code>doc.find('head > script').appendTo('head');
doc.find('head > link').appendTo('head');
</code></pre> 
 <p>这显然没有什么错,但是问题远不止这么简单:</p> 
 <ul> 
  <li>有些css和js是全局的,每个页面都会有,不断重复的执行没有意义甚至有副作用。</li> 
  <li>上一个页面的相关资源不清除的话,特别是css会产生干扰。</li> 
 </ul> 
 <p>因此,现在目标又被细化为:</p> 
 <ol> 
  <li>清除上一个页面的相关资源,但保留全局的部分。</li> 
  <li>找出仅仅与页面相关的,非全局的资源。</li> 
  <li>将相关资源放入 <code><head></code>中。</li> 
 </ol> 
 <p>如果没有后端相应的配合,这个问题并不好办,一个比较简单的方案是,在javascript中显式地声明 <strong>哪些资源是全局的</strong>,在移除资源时略过这部分。这种方案是正确且合理的,但在扩展性上并不是十分优秀,每一次增减全局资源,都需要在javascript中进一步做相应的标记,如有遗漏,则会导致系统的错误。</p> 
 <p>因此,个人的解决方案是,在后端输出时,对于全局的资源,添加了一个 <code>data-persist</code>属性来标识,之后只需要在选择器中将带有这一属性的忽略即可:</p> 
 <pre>  <code>// 另外需要注意的是,<link>元素还用来标识favicon等,因此根据rel提取
var styleSelector = 'head > link[rel="stylesheet"]:not([data-persist])';
var scriptSelector = 'head > script:not([data-persist])';
</code></pre> 
 <p>而资源的移除和添加的相关代码也十分简单:</p> 
 <pre>  <code>$(styleSelector).remove();
doc.find(styleSelector).appendTo('head');

$(scriptSelector).remove();
doc.find(scriptSelector).appendTo('head');
</code></pre> 
 <h3>渲染页面内容</h3> 
 <p>粗略来看,这一步简单到不值一提:</p> 
 <pre>  <code>$('#main').hide().html(doc.find('#main').html()).fadeIn();
</code></pre> 
 <p>把一边的 <code>#main</code>的数据放到另一边的 <code>#main</code>即可,通过 <code>fadeIn</code>之类的函数提供一个动态的过渡效果,也可以使用CSS Animation,这些都无所谓。</p> 
 <p>而在这一步,一个容易被忽略的问题是,在传统的超链接导航的模式下,每一个页面都部署由一个百度统计的脚本,会发送一个统计请求,以便百度统计给出正确的访客信息。但是这个脚本显然不会在 <code>#main</code>中,因此使用以上代码渲染页面后,这个统计的请求就不会发了,若干时间后大概会发现自己的博客访客少得可怜,进而对世界产生绝望,做出怒删系统之类的傻事吧……</p> 
 <p>当然知道了问题的存在,解决也很容易,无非再加载一下统计的脚本:</p> 
 <pre>  <code>var hostname = location.hostname.toLowerCase();
if (hostname !== 'localhost' && hostname.indexOf('127.0.0.') !== 0) {
    // 不用$.getScript是有多蛋疼?
    var script = document.createElement('script');
    script.async = true;
    script.src = 'http://hm.baidu.com/h.js?{code}';
    var placeholder = document.getElementsByTagName('script')[0];
    placeholder.parentNode.insertBefore(script, placeholder);
}
</code></pre> 
 <h2>体验增强</h2> 
 <p>至此,其实基本的OPOA已经完成了,代码相当少:</p> 
 <pre>  <code>var styleSelector = 'head > link[rel="stylesheet"]:not([data-persist])';
var scriptSelector = 'head > script:not([data-persist])';

function updatePage(html) {
    var doc = document.createElement('html');
    doc.innerHTML = html;
    doc = $(doc);

    $(styleSelector).remove();
    doc.find(styleSelector).appendTo('head');

    $(scriptSelector).remove();
    doc.find(scriptSelector).appendTo('head');

    $('#main').hide().html(doc.find('#main').html()).fadeIn();

    loadHolmes(); // 加载百度统计脚本

    return doc;
}

function loadPage(url) {
    $.get(url, updatePage, 'html');
}

$('#page').on(
    'click',
    'a',
    function() {
        var href = $(this).attr('href');

        if (href.indexOf('/') !== 0) {
            return;
        }

        loadPage(href);

        return false;
    }
);
</code></pre> 
 <p>当然,作为一个杰出的工程师(你滚!),虽然用这么点代码就能实现OPOA很高兴,但还远远不够。这样产生的OPOA并没有真正浏览器的体验,主要集中在:</p> 
 <ul> 
  <li>没有请求的并发控制,短时间内乱点链接会错乱。</li> 
  <li>前进后退用不了。</li> 
 </ul> 
 <p>因此,后续的工作便是进一步优化体验。</p> 
 <h3>控制并发</h3> 
 <p>这个相当简单,当浏览器在链接中导航的时候,简单来说是根本没有并发的概念的。当点击一个链接后,页面还在读取时,再点击另一个链接,前一次加载会立刻被中断,转而执行第二次跳转。</p> 
 <p>因此,将这一思路转为javascript的实现,是要保证只有一个XMLHttpRequest对象,当第二次请求发起时,把将一次请求通过 <code>abort</code>函数中止。这只需要改造 <code>loadPage</code>函数(你以为我为啥把一行代码写成一个函数)即可:</p> 
 <pre>  <code>var xhr;
function loadPage(url) {
    if (xhr) {
        xhr.abort();
    }

    $.get(
        url,
        function(html) {
            xhr = null;
            updatePage(html);
        },
        'html'
    );
}
</code></pre> 
 <h3>处理前进后退</h3> 
 <p>这个相信大部分人是明白的,使用 HTML5的History接口即可。</p> 
 <p>简单来说,History接口有以下几个函数:</p> 
 <ul> 
  <li> <code>replaceState(data, title, url)</code>用于把当前的历史记录项替换掉。</li> 
  <li> <code>pushState(data, title, url)</code>用于新加一个历史记录项。</li> 
  <li> <code>popstate</code>事件会在历史记录项发生变化时触发。</li> 
 </ul> 
 <p>需要注意的是, <code>pushState</code>虽然确实会 <strong>改变历史记录项</strong>,但却不会触发 <code>popstate</code>事件。</p> 
 <p>从接口上来看,很显然,我们只需要在一个页面加载后,调用一下 <code>pushState</code>即可加入一个历史记录,后续就能回退到前一个。</p> 
 <p> <code>pushState</code>的第一个参数 <code>data</code>是与当前历史记录项关联的数据,由于这一数据在 <code>pushState</code>函数执行过程中会被复制一份,因此只能是一个纯纯的对象,不能是DOM元素之类的东西。因此,一个比较合理的选择是,将后端返回的整串HTML作为数据存放。因此继续改造 <code>loadPage</code>函数,将其中 <code>$.get</code>的回调函数修改如下:</p> 
 <pre>  <code>function(html) {
    xhr = null;

    var doc = updatePage(html);

    // 从<title>元素中找出标题
    history.pushState(html, doc.find('title').text(), url);
}
</code></pre> 
 <p>其后,监听 <code>popstate</code>事件,把当时保留的HTML拿出来,使用 <code>updatePage</code>渲染即可:</p> 
 <pre>  <code>window.addEventListener(
    'popstate',
    function(e) {
        var html = e.state;
        if (html) {
            updatePage(html);

            e.preventDefault();
        }
    }
);
</code></pre> 
 <p>至此,基本上算是把前提和后退的功能实现了。但是其实由于History接口设计的一些不合理之处,还是会遇上一些小问题。</p> 
 <p>首先,最初进入的页面(比如首页)是没有相关的state的(因为不是通过XMLHttpRequest加载的),那么当回退到这一个页面时, <code>popstate</code>事件会被触发,但又没有 <code>e.state</code>这东西,导致函数不会采取任何行为。但是不采取任何行为,浏览器也不采取任何行为(说好的 <code>preventDefault</code>有和没有一样),结果就是,再也别想回退到最初的页面了。</p> 
 <p>对于这个问题,解决方案不难,在 <code>DOMContentLoaded</code>事件时,使用 <code>replaceState</code>函数先存一份数据与当前的历史记录项关联上即可:</p> 
 <pre>  <code>function setInitialState() {
    var html = document.documentElement.outerHTML;
    // url参数可选
    history.replaceState(html, document.title);
}
$(document).ready(setInitialState);
</code></pre> 
 <p>另一个问题则是,Webkit系浏览器,当进入最初页面时,在 <code>load</code>事件之后,会触发一次 <code>popstate</code>事件,而其它浏览器并没有这一行为。</p> 
 <p>对于这个问题,一种方案是通过检测浏览器,忽略掉这第一次的 <code>popstate</code>事件,但是考虑到未来Webkit系会不会修改这一行为,检测浏览器并不是靠谱的方案。而前面已经提到,在 <code>DOMContentLoaded</code>时已经设置了相关的状态,因此这一次 <code>popstate</code>事件可以正确取到数据,执行一次 <code>updatePage</code>函数,并不会造成什么影响,所以暂时也不作处理了。</p> 
 <h2>后端改造</h2> 
 <p>工作至此,完整的、与浏览器基本一致的一个OPOA系统也算完成了,代码量不过数十行。但是遗留了一个问题,后端没有做过任何改造,那么每一次请求依旧会加载全部的HTML,读取子Action,进行不必要的数据库查询,浪费带宽和IO。因此,为了让OPOA真正在性能上有所收益,后端的改造也是必须的。</p> 
 <p>好在前端是以 <strong>后端尽可能少改造</strong>为前提进行实现的,因此后端确实只需要非常少的改造。</p> 
 <p>这一次改造的主要目的是,当在OPOA架构之下工作时,后端只需要返回有意义的内容,其中自然包括:</p> 
 <ul> 
  <li> <code><head></code>部分,用于提供所有相关的资源的声明。</li> 
  <li> <code>div[id="main"]</code>部分,作为真正的页面的内容。</li> 
 </ul> 
 <p>而剩下的主要是页首和侧边栏,则并不需要输出。因此,后端的模板进行一些简单的发行,加一个 <code>if</code>判断,就轻松地实现了这一要求:</p> 
 <pre>  <code>@if (!Context.Request.IsAjaxRequest()) {
    <header>
        <hgroup>
            <h1>标题</h1>
            <h2>副标题</h2>
        </hgroup>
    </header>
}
<div id="page">
    <div id="main">
        @RenderBody()
    </div>
    @if (!Context.Request.IsAjaxRequest()) {
        <aside id="sidebar">
            <section id="search">
                <!-- 搜索框 -->
            </section>
            <section id="links">
                <!-- 订阅链接 -->
            </section>
            <section id="tag-cloud">
                <h1>标签</h1>
                @Html.Action("TagCloud")
            </section>
            <section id="archive">
                <h1>存档</h1>
                @Html.Action("ArchiveList")
            </section>
        </aside>
    }
</div>
<script src="http://hm.baidu.com/h.js" async="async"></script>
</code></pre> 
 <p>通过 <code>IsAjaxRequest</code>方法判断是否为AJAX请求(具体实现是通过对 <code>X-Request-With</code>头的判断),如果非Ajax请求则全页输出,反之则只输出必要的部分。当然这其中还有一些冗余(比如DOCTYPE),但并不重要,最主要影响性能的2个子Action被省略,已经有足够的收益。</p> 
 <h2>遗留问题</h2> 
 <p>最后还有一个很棘手的问题,一直无法得到解决,我将其归结与History接口设计的问题。</p> 
 <p>当你点击页面中一个改变hash的锚点,即一个 <code>href</code>属性以 <strong>#</strong>开头的 <code><a></code>元素时,会触发 <code>popstate</code>事件,并且其中的 <code>e.state</code>是 <strong>null</strong>。这显然是合理的,通过对 <code>e.state</code>的判断, <code>popstate</code>事件的处理函数不会进行任何动作,进而浏览器会对锚点进行跟踪,改变页面滚动条的位置。</p> 
 <p>问题出现在这之后,如果你点击“后退”按钮,由于hash再一次改变,又会触发一次 <code>popsate</code>事件。在这一事件中, <code>e.state</code>是之前一次 <code>pushState</code>函数调用时存放的内容。</p> 
 <p>也就是说,针对这一次 <code>popstate</code>事件,在代码层面,是无法判断 <strong>从另一个页面的跳转</strong>还是 <strong>hash</strong>的改变。然则针对这2种情况,显然应当进行不同的处理:如果是页面的跳转,需要重新渲染 <code>div[id="main"]</code>部分,而如果仅仅是hash的变化,页面不应该进行重新渲染。</p> 
 <p>可惜的是, <code>popstate</code>事件并没有提供足够的信息来判断这一点,因此现在的系统中,点击一个改变hash的锚点后,再点击“后退”按钮,页面是会出现一个动画效果的。这虽然并不影响浏览,但与真实浏览器的表现有所区别,并不是那么让人愉快的事情。</p> 
 <p>假设 <code>popstate</code>事件可以提供更多的信息,比如通过 <code>relatedURL</code>提供来源页面的URL,则可以通过对URL的分析,假定 <code>pathname</code>和 <code>search</code>相同的情况为锚点的跳转,不执行 <code>updatePage</code>函数,便可以保持与浏览器的标准行为一致。</p> 
 <h2>总结</h2> 
 <p>本文使用一个实际的案例,分步骤地讲述了一个十分简单的多页系统改变为OPOA的过程,并且解释了其中容易遇到的一些问题,以及一些细节上的处理。</p> 
 <p>同时,本文作为对History接口应用的一次尝试,发现了接口设计和实现中一些存在的问题,并提供了部分问题的解决方案。</p> 
 <p>对于History接口的进一步说明,可以参考以下资料:</p> 
 <ul> 
  <li> Manipulating the browser history</li> 
  <li> History API - Dive Into HTML5</li> 
  <li> Intelligent State Handling</li> 
 </ul> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1489593496535851008"></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">你可能感兴趣的:(博客,实践)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1940376780577763328.htm"
                           title="业界优秀零信任安全管理系统产品介绍" target="_blank">业界优秀零信任安全管理系统产品介绍</a>
                        <span class="text-muted">scuter_yu</span>
<a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>腾讯iOA零信任安全管理系统腾讯iOA零信任安全管理系统是基于腾讯自身无边界零信任企业网的最佳实践推出的终端访问管理方案。它以可信终端、可信身份、可信应用、可信链路为核心,全方位保护企业终端安全,无需VPN即可实现远程办公,且支持公有云和本地云部署模式。该系统依托腾讯安全威胁情报中心,日均拦截超10亿次攻击,其客户端轻量化设计兼容多平台,员工接受度高,助力企业安全上云和数字化转型。深信服零信任iT</div>
                    </li>
                    <li><a href="/article/1940370094110601216.htm"
                           title="Vue 响应式数据传递:ref、reactive 与 Provide/Inject 完全指南" target="_blank">Vue 响应式数据传递:ref、reactive 与 Provide/Inject 完全指南</a>
                        <span class="text-muted"></span>

                        <div>Vue响应式数据传递:ref、reactive与Provide/Inject完全指南理解如何在不同组件层级间传递响应式数据是Vue开发的关键技能。我将深入探讨ref和reactive配合provide/inject的使用场景和最佳实践。响应式数据与跨层级传递架构提供数据无法传递数据provideinject根组件App.vue中间组件Container.vueDeepChild.vue在多层组件嵌</div>
                    </li>
                    <li><a href="/article/1940367575783370752.htm"
                           title="C语言教学大变革!DeepSeek如何改变高职院校编程课堂?" target="_blank">C语言教学大变革!DeepSeek如何改变高职院校编程课堂?</a>
                        <span class="text-muted">武汉唯众智创</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/1.htm">程序设计</a><a class="tag" taget="_blank" href="/search/Deepseek/1.htm">Deepseek</a>
                        <div>一、引言在当今数字化转型的浪潮中,程序设计与分析能力已成为高职教育中不可或缺的核心竞争力。作为编程语言的基础,C语言不仅训练学生的计算思维,还培养其算法实现能力。然而,当前高职院校的C语言教学面临诸多挑战,如实践环节薄弱、学生创新能力不足等。DeepSeek等新一代智能编码支持系统的出现,为这一现状带来了转机。该系统融合了深度神经网络与语义解析技术,能够智能生成代码、优化缺陷检测、解构程序逻辑,并</div>
                    </li>
                    <li><a href="/article/1940366693930954752.htm"
                           title="Muduo 定时器" target="_blank">Muduo 定时器</a>
                        <span class="text-muted">小白书舍</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>TimeQueue定时器图片转载自:muduo网络库源码解析(4):TimerQueue定时机制_李兆龙的技术博客_51CTO博客添加新的定时器TimerIdTimerQueue::addTimer(TimerCallbackcb,//用户自定义回调Timestampwhen,//定时器的超时时刻doubleinterval)//重复触发间隔,小于0则不重复触发{Timer*timer=newTi</div>
                    </li>
                    <li><a href="/article/1940365809050251264.htm"
                           title="Redis哨兵模式(Sentinel、1主2从3哨兵6台服务器配置实战、客户端调用、日志解析、主观下线、客观下线、仲裁、脑裂问题、哨兵长与从节点投票选举过程与原理)" target="_blank">Redis哨兵模式(Sentinel、1主2从3哨兵6台服务器配置实战、客户端调用、日志解析、主观下线、客观下线、仲裁、脑裂问题、哨兵长与从节点投票选举过程与原理)</a>
                        <span class="text-muted">小松聊PHP进阶</span>
<a class="tag" taget="_blank" href="/search/Redis/1.htm">Redis</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</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/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/nosql/1.htm">nosql</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>哨兵模式官方文档:https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel关联博客:Redis主从复制(下文能用到)极简概括:自动监控Redis主节点是否故障的一种方案,若主节点故障,则Redis会根据投票数自动将从库切换为主库(这个过程,叫仲裁)。解决问题:在主从复制的架构模式下,Redis主节点挂掉后,从节点无</div>
                    </li>
                    <li><a href="/article/1940365401468760064.htm"
                           title="博睿数据出席GOPS全球运维大会,深度解析如何让大模型真正“懂”运维!" target="_blank">博睿数据出席GOPS全球运维大会,深度解析如何让大模型真正“懂”运维!</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>2025年6月27日-28日,第二十六届GOPS全球运维大会暨研运数智化技术峰会在北京盛大启幕。全球近千位行业专家齐聚一堂,围绕大模型、DevOps、SRE、可观测性等核心议题展开深度探讨。本届峰会专设可观测性、金融行业、SRE稳定性等特色专场,聚焦IT技术领域的最新发展,共探企业级最佳实践。作为国内应用性能管理及可观测性领域的领导者,博睿数据受邀出席本次大会。产品总监贺安辉亮相“可观测性专场”,</div>
                    </li>
                    <li><a href="/article/1940356612669632512.htm"
                           title="Golang领域zap日志库的最佳实践分享" target="_blank">Golang领域zap日志库的最佳实践分享</a>
                        <span class="text-muted">Golang编程笔记</span>
<a class="tag" taget="_blank" href="/search/golang/1.htm">golang</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><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a>
                        <div>Golang领域zap日志库的最佳实践分享关键词:Golang、zap日志库、最佳实践、日志记录、日志配置摘要:本文主要围绕Golang领域中的zap日志库展开,详细介绍了zap日志库的核心概念、工作原理,通过具体的代码示例展示了其使用方法和配置技巧,分享了在实际项目中的最佳实践,还探讨了其应用场景、未来发展趋势与挑战等内容,旨在帮助开发者更好地使用zap日志库进行高效的日志记录。背景介绍目的和范</div>
                    </li>
                    <li><a href="/article/1940347280611667968.htm"
                           title="脑机新手指南(十二):BciPy 脑机接口工具入门(下篇):核心功能与实践应用" target="_blank">脑机新手指南(十二):BciPy 脑机接口工具入门(下篇):核心功能与实践应用</a>
                        <span class="text-muted">Brduino脑机接口技术答疑</span>
<a class="tag" taget="_blank" href="/search/%E8%84%91%E6%9C%BA%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97/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/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a>
                        <div>一、BciPy核心模块深度解析(一)信号采集与处理模块(acquisition&signal)1.信号采集流程BciPy通过LabStreamingLayer(LSL)协议实现多设备同步采集:frombcipy.acquisitionimportLslStreamer # 初始化LSL流采集器 streamer=LslStreamer() streamer.connect()  # 连接到EEG设</div>
                    </li>
                    <li><a href="/article/1940346020235898880.htm"
                           title="Docker:快速搭建 RabbitMQ 集群的技术指南" target="_blank">Docker:快速搭建 RabbitMQ 集群的技术指南</a>
                        <span class="text-muted">拾荒的小海螺</span>
<a class="tag" taget="_blank" href="/search/DevOps/1.htm">DevOps</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/rabbitmq/1.htm">rabbitmq</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>1、简述RabbitMQ是目前最流行的开源消息中间件之一,广泛应用于解耦、异步通信、削峰填谷等场景。本篇博客将带你通过Docker快速搭建RabbitMQ集群,并展示SpringBoot集成的实践案例,助你高效入门RabbitMQ分布式消息系统。样例代码:https://gitee.com/lhdxhl/springboot-example.git2、搭建2.1准备工作首先安装Docker和Doc</div>
                    </li>
                    <li><a href="/article/1940342865582419968.htm"
                           title="深入解析FastAPI:Python高效Web API框架" target="_blank">深入解析FastAPI:Python高效Web API框架</a>
                        <span class="text-muted">永不放弃yes</span>

                        <div>本文还有配套的精品资源,点击获取简介:FastAPI是一个专为构建API设计的现代、高性能PythonWeb框架,它利用TypeHinting和Pydantic库简化了数据验证和文档生成。文章深入介绍了FastAPI的核心特性,如异步支持、类型提示、依赖注入、自动化API文档以及错误处理等。还探讨了FastAPI的部署和测试方法,提供了实践案例和代码示例。FastAPI因其简洁、高效、易于测试的特</div>
                    </li>
                    <li><a href="/article/1940339835625598976.htm"
                           title="python学智能算法(十五)|机器学习朴素贝叶斯方法进阶-CountVectorizer多文本处理" target="_blank">python学智能算法(十五)|机器学习朴素贝叶斯方法进阶-CountVectorizer多文本处理</a>
                        <span class="text-muted">西猫雷婶</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><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/python%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">python学习笔记</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</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><a class="tag" taget="_blank" href="/search/scikit-learn/1.htm">scikit-learn</a>
                        <div>【1】引言前序学习进程中,已经学习CountVectorizer文本处理的简单技巧,先相关文章链接为:python学智能算法(十四)|机器学习朴素贝叶斯方法进阶-CountVectorizer文本处理简单测试-CSDN博客此次继续深入,研究多文本的综合处理。【2】代码测试首先相对于单文本测试,直接将文本改成多行文本:#引入必要的模块fromsklearn.feature_extraction.te</div>
                    </li>
                    <li><a href="/article/1940333406760005632.htm"
                           title="构建下一代云原生大模型多租户平台:架构设计与关键挑战" target="_blank">构建下一代云原生大模型多租户平台:架构设计与关键挑战</a>
                        <span class="text-muted">慌ZHANG</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%91%E5%8E%9F%E7%94%9F%E5%90%8E%E7%AB%AF/1.htm">云原生后端</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/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>个人主页:慌ZHANG-CSDN博客期待您的关注一、引言:从单用户部署到多租户平台的转型趋势随着开源大语言模型(LLM)能力日益强大,企业部署与应用大模型已从“验证可行性”的早期阶段,逐步迈向“规模化服务”的中后期阶段。在这一背景下,“多租户”成为企业级AI平台建设的核心议题之一:SaaS平台希望一个模型服务多个客户;大企业希望多个部门共享模型资源但相互隔离;教育、医疗等敏感行业需要更精细的数据与</div>
                    </li>
                    <li><a href="/article/1940333151742128128.htm"
                           title="python学智能算法(十六)|机器学习支持向量机简单示例" target="_blank">python学智能算法(十六)|机器学习支持向量机简单示例</a>
                        <span class="text-muted">西猫雷婶</span>
<a class="tag" taget="_blank" href="/search/python%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">python学习笔记</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%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</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/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA/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/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a>
                        <div>【1】引言前序学习了逻辑回归等算法,相关文章链接包括且不限于:python学智能算法(十)|机器学习逻辑回归(Logistic回归)_逻辑回归算法python-CSDN博客python学智能算法(十一)|机器学习逻辑回归深入(Logistic回归)_np.random.logistic()-CSDN博客今天在此基础上更进一步,学习支持向量机,为实现较好地理解,先解读一个简单算例。【2】代码解读【2</div>
                    </li>
                    <li><a href="/article/1940331005898452992.htm"
                           title="实验三 Debug及指令测试" target="_blank">实验三 Debug及指令测试</a>
                        <span class="text-muted">cwn_</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86/1.htm">计算机组成原理</a><a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96/1.htm">汇编</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86/1.htm">计算机组成原理</a>
                        <div>关于为啥用的手写水印因为被查重到后是0分希望大家可以认真去操作实践以下不要直接拿原图啊啊啊啊啊啊啊啊五、实验步骤一、DOS常用命令练习:1、使用dir查看文件列表输入dir:图5-1输入dir回车后结果:图5-2输入dir回车后结果2、用命令COPYDEBUG.exeBUG复制一个文件。图5-3复制文件3、用命令RENAMEBUGBG将BUG文件改为BG。图5-4将BUG文件名改为BG4、用命令D</div>
                    </li>
                    <li><a href="/article/1940328104761290752.htm"
                           title="12.Gin集成go-quartz" target="_blank">12.Gin集成go-quartz</a>
                        <span class="text-muted">GO兔</span>
<a class="tag" taget="_blank" href="/search/gin/1.htm">gin</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>欢迎大家点赞,收藏,评论,转发,你们的支持是我最大的写作动力作者:GO兔博客:https://luckxgo.cn12.Gin集成go-quartz引言:当定时任务遇上分布式系统“为什么我的定时任务在生产环境执行了三次?”“多实例部署时,如何确保定时任务只执行一次?”如果你在分布式环境中使用过传统定时任务框架,一定遇到过这些头疼的问题。随着微服务架构的普及,单机定时任务已经无法满足需求——任务重复</div>
                    </li>
                    <li><a href="/article/1940315877991837696.htm"
                           title="Leetcode-423. Reconstruct Original Digits from English" target="_blank">Leetcode-423. Reconstruct Original Digits from English</a>
                        <span class="text-muted">K_W</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发CSDN,mcf171专栏。博客链接:mcf171的博客——————————————————————————————Givenanon-emptystringcontaininganout-of-orderE</div>
                    </li>
                    <li><a href="/article/1940312726148542464.htm"
                           title="75、云计算与安全:从基础到实践" target="_blank">75、云计算与安全:从基础到实践</a>
                        <span class="text-muted"></span>

                        <div>云计算与安全:从基础到实践1.云计算简介云计算作为一种新型的计算范式,通过互联网提供计算资源和服务。近年来,云计算因其灵活性、可扩展性和成本效益而迅速普及。无论是小型企业还是大型跨国公司,都在积极采用云计算来简化IT基础设施管理,提升业务效率。1.1云计算的历史与发展云计算并非一夜之间诞生,而是经历了多个发展阶段。以下是云计算发展的主要阶段:主机计算:早期的计算资源集中在大型主机上,用户通过终端设</div>
                    </li>
                    <li><a href="/article/1940312033627009024.htm"
                           title="流量分发新思路:PCDN的实践与应用" target="_blank">流量分发新思路:PCDN的实践与应用</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>流量分发新思路:PCDN的实践与应用在数字化时代,宽带流量的快速增长对传统内容分发网络(CDN)提出了更高的要求。为应对这一挑战,PCDN(P2PCDN)作为一种新型流量分发技术,正在被广泛探索和应用。它通过整合边缘节点的闲置带宽资源,优化流量调度,提升分发效率,为宽带流量的高效利用提供了新思路。PCDN的核心优势PCDN的核心在于利用分布式节点进行内容分发,相比传统CDN,它能够更灵活地调度宽带</div>
                    </li>
                    <li><a href="/article/1940307178753683456.htm"
                           title="贝叶斯网络与深度学习的结合:图像识别和分类" target="_blank">贝叶斯网络与深度学习的结合:图像识别和分类</a>
                        <span class="text-muted">AI天才研究院</span>
<a class="tag" taget="_blank" href="/search/AI%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E4%B8%8E%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">AI人工智能与大数据</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97/1.htm">计算</a><a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E4%BC%81%E4%B8%9A%E7%BA%A7%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98/1.htm">AI大模型企业级应用开发实战</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><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">架构设计</a>
                        <div>本文我将为您撰写一篇关于"贝叶斯网络与深度学习的结合:图像识别和分类"的技术博客文章。这篇文章将深入探讨贝叶斯网络和深度学习在图像识别和分类领域的结合应用。我会遵循您提供的要求和结构模板,确保文章内容全面、深入且易于理解。让我们开始吧。贝叶斯网络与深度学习的结合:图像识别和分类关键词:贝叶斯网络、深度学习、图像识别、图像分类、概率推理、卷积神经网络、不确定性建模文章目录贝叶斯网络与深度学习的结合:</div>
                    </li>
                    <li><a href="/article/1940300376695697408.htm"
                           title="多容器应用与编排——AI教你学Docker" target="_blank">多容器应用与编排——AI教你学Docker</a>
                        <span class="text-muted">LuckyLay</span>
<a class="tag" taget="_blank" href="/search/AI%E6%95%99%E4%BD%A0%E5%AD%A6Docker/1.htm">AI教你学Docker</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/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>2.2多容器应用与编排现代应用通常由多个服务(如Web、数据库、缓存等)组成,每个服务运行在独立的容器里。如何高效管理、协调、扩展、升级这些多容器应用,成为容器化实践的核心。容器编排工具(如DockerCompose、Swarm、Kubernetes)正是为此而生。一、Compose:本地/开发环境多容器编排1.概述DockerCompose是用于定义和运行多容器Docker应用的工具。通过doc</div>
                    </li>
                    <li><a href="/article/1940298862514204672.htm"
                           title="Nginx 运维实战与 HTML 静态网页开发全攻略" target="_blank">Nginx 运维实战与 HTML 静态网页开发全攻略</a>
                        <span class="text-muted"></span>

                        <div>一、技术背景:静态站点的黄金时代1.静态网页的复兴浪潮性能优势:对比动态站点,静态资源响应速度提升60%+,首屏加载时间平均缩短1.2秒(基于WebPageTest实测数据)技术演进:Jamstack架构普及(2024年市场占有率达37%),Hugo、Nuxt.js等静态站点生成器(SSG)推动企业级应用典型场景:企业官网(占比78%)、产品着陆页(转化率提升23%)、博客系统(WordPress</div>
                    </li>
                    <li><a href="/article/1940297600192278528.htm"
                           title="【WCF】通过AOP实现基于JWT的授权与鉴权的实践" target="_blank">【WCF】通过AOP实现基于JWT的授权与鉴权的实践</a>
                        <span class="text-muted">ArabySide</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/WCF/1.htm">WCF</a><a class="tag" taget="_blank" href="/search/jwt/1.htm">jwt</a><a class="tag" taget="_blank" href="/search/wcf/1.htm">wcf</a><a class="tag" taget="_blank" href="/search/aop/1.htm">aop</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a>
                        <div>系列文章目录链接:【WCF】基于WCF在WinForms搭建RESTful服务指南链接:【WCF】单例模式的线程安全缓存管理器实现,给你的WebApi加入缓存吧链接:【WCF】基于固定时间窗口的接口限流实现(借助IOperationInvoker的AOP方案)链接:【WCF】通过AOP实现基于JWT的授权与鉴权的实践文章目录系列文章目录写在前面一、JWT(JSONWebToken)1.1什么是JW</div>
                    </li>
                    <li><a href="/article/1940292557586100224.htm"
                           title="论文参考文献(持续更新...)" target="_blank">论文参考文献(持续更新...)</a>
                        <span class="text-muted">@一叶之秋</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>毕业论文参考文献(java)考虑到平时做课程设计和毕业论文文献不好找,还要格式正确,某文库还不能直接复制粘贴,这里列举出自己做项目时用到的一些参考文献tips:论文查重技巧参考文献(一):[1]李运莉.web数据库应用系统性能优化[M].北京:人民邮电出版社,2011.[2]库俊国.基于J2EE技术的Web应用体系研究及实践[M].北京:人民邮电出版社,2014.[3]陈楚杰.基于Struts和H</div>
                    </li>
                    <li><a href="/article/1940286633907646464.htm"
                           title="iOS 调试流程优化指南:多项目协作下的问题分析与日志追踪实践" target="_blank">iOS 调试流程优化指南:多项目协作下的问题分析与日志追踪实践</a>
                        <span class="text-muted">2501_91592143</span>
<a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/udp/1.htm">udp</a><a class="tag" taget="_blank" href="/search/https/1.htm">https</a><a class="tag" taget="_blank" href="/search/websocket/1.htm">websocket</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a>
                        <div>随着iOS应用项目复杂度的提升,一个中型团队往往需要维护多个模块或多个独立App。从早期的功能开发到后期的性能优化、日志调试、数据分析,如果没有一套清晰的流程和工具规范,调试环节很容易陷入混乱,甚至因信息不对称延误问题定位。我们团队在过去一年里迭代多个iOS业务模块,在实战中逐步构建了一套标准化的调试流程,以此为基础实现了性能可控、问题可回溯、信息可共享的目标。本文将分享我们如何从混乱中整理出调试</div>
                    </li>
                    <li><a href="/article/1940284111117676544.htm"
                           title="微信小程序|流浪动物救助小程序的设计与实现" target="_blank">微信小程序|流浪动物救助小程序的设计与实现</a>
                        <span class="text-muted">qq_469603589</span>
<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%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a>
                        <div>作者主页:编程指南针作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助收藏点赞不迷路关注作者有好处文末获取源码项目编号:L-BS-XZBS-30一,环境介绍语言环境:Java:jdk1</div>
                    </li>
                    <li><a href="/article/1940280082740342784.htm"
                           title="基于uniapp微信小程+SpringBoot+Vue的流浪动物救助领养系统设计和实现(源码+论文+部署讲解等)" target="_blank">基于uniapp微信小程+SpringBoot+Vue的流浪动物救助领养系统设计和实现(源码+论文+部署讲解等)</a>
                        <span class="text-muted"></span>

                        <div>博主介绍:✌全网粉丝50W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等</div>
                    </li>
                    <li><a href="/article/1940278940522311680.htm"
                           title="30、法律案例的关联检索:提升法律实践的信息处理能力" target="_blank">30、法律案例的关联检索:提升法律实践的信息处理能力</a>
                        <span class="text-muted">android</span>
<a class="tag" taget="_blank" href="/search/%E6%B3%95%E5%BE%8B%E6%A1%88%E4%BE%8B/1.htm">法律案例</a><a class="tag" taget="_blank" href="/search/%E5%85%B3%E8%81%94%E6%A3%80%E7%B4%A2/1.htm">关联检索</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%A4%84%E7%90%86/1.htm">信息处理</a>
                        <div>法律案例的关联检索:提升法律实践的信息处理能力1.引言在当今信息爆炸的时代,法律从业者面临着前所未有的挑战。大量的法律案例、法规和判例使得信息检索变得复杂而耗时。为了提高工作效率和决策质量,法律从业者迫切需要一种高效的工具来发现和检索相互关联的法律案例。本文将探讨如何通过先进的信息检索技术和算法来实现这一点。2.关联模型关联模型是法律案例关联检索的核心。为了确定案例之间的关联性,通常采用以下几种模</div>
                    </li>
                    <li><a href="/article/1940277555655405568.htm"
                           title="软件工程中Selenium的关键字驱动测试" target="_blank">软件工程中Selenium的关键字驱动测试</a>
                        <span class="text-muted">软件工程实践</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/1.htm">软件工程最佳实践</a><a class="tag" taget="_blank" href="/search/AI%E8%BD%AF%E4%BB%B6%E6%9E%84%E5%BB%BA/1.htm">AI软件构建</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/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/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a>
                        <div>软件工程中Selenium的关键字驱动测试关键词:Selenium、关键字驱动测试、自动化测试、测试框架、Web测试、测试脚本、测试维护摘要:本文深入探讨了在软件工程中使用Selenium实现关键字驱动测试的方法论和实践。文章从基本概念入手,详细解析了关键字驱动测试的核心原理和架构设计,通过Python代码示例展示了具体实现方式,并提供了数学模型分析测试覆盖率。此外,文章还包含了实际项目案例、工具</div>
                    </li>
                    <li><a href="/article/1940277303430934528.htm"
                           title="LangGraph 实战教程:构建自定义 AI 工作流" target="_blank">LangGraph 实战教程:构建自定义 AI 工作流</a>
                        <span class="text-muted">AI大模型-王哥</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/LangGraph/1.htm">LangGraph</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%85%A5%E9%97%A8/1.htm">大模型入门</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大模型</a><a class="tag" taget="_blank" href="/search/LLM/1.htm">LLM</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a>
                        <div>目录1什么是LangGraph2为什么选择LangGraph3环境准备与安装4基础概念图(Graph)节点(Node)边(Edge)状态(State)5构建你的第一个LangGraph流程HelloWorld示例结构化输出示例6实战案例:构建教育内容生成系统系统设计完整代码与解析7进阶技巧条件分支与循环流程可视化使用LangSmith追踪8性能优化与最佳实践什么是LangGraphLangGrap</div>
                    </li>
                    <li><a href="/article/1940276673731686400.htm"
                           title="MCP架构全解析:从核心原理到企业级实践" target="_blank">MCP架构全解析:从核心原理到企业级实践</a>
                        <span class="text-muted">stormsha</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/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:「stormsha的主页」,「stormsha的知识库」持续学习,不断总结,共同进步,为了踏实,做好当下事儿~非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。✨✨欢迎订阅本专栏✨✨TheStart点点关注,收藏不迷路文章目录1.M</div>
                    </li>
                                <li><a href="/article/78.htm"
                                       title="桌面上有多个球在同时运动,怎么实现球之间不交叉,即碰撞?" target="_blank">桌面上有多个球在同时运动,怎么实现球之间不交叉,即碰撞?</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/%E5%B0%8F%E7%90%83%E7%A2%B0%E6%92%9E/1.htm">小球碰撞</a>
                                    <div>稍微想了一下,然后解决了很多bug,最后终于把它实现了。其实原理很简单。在每改变一个小球的x y坐标后,遍历整个在dom树中的其他小球,看一下它们与当前小球的距离是否小于球半径的两倍?若小于说明下一次绘制该小球(设为a)前要把他的方向变为原来相反方向(与a要碰撞的小球设为b),即假如当前小球的距离小于球半径的两倍的话,马上改变当前小球方向。那么下一次绘制也是先绘制b,再绘制a,由于a的方向已经改变</div>
                                </li>
                                <li><a href="/article/205.htm"
                                       title="《高性能HTML5》读后整理的Web性能优化内容" target="_blank">《高性能HTML5》读后整理的Web性能优化内容</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a>
                                    <div> 
 读后感 
 
        先说说《高性能HTML5》这本书的读后感吧,个人觉得这本书前两章跟书的标题完全搭不上关系,或者说只能算是讲解了“高性能”这三个字,HTML5完全不见踪影。个人觉得作者应该首先把HTML5的大菜拿出来讲一讲,再去分析性能优化的内容,这样才会有吸引力。因为只是在线试读,没有机会看后面的内容,所以不胡乱评价了。 
  </div>
                                </li>
                                <li><a href="/article/332.htm"
                                       title="[JShop]Spring MVC的RequestContextHolder使用误区" target="_blank">[JShop]Spring MVC的RequestContextHolder使用误区</a>
                                    <span class="text-muted">dinguangx</span>
<a class="tag" taget="_blank" href="/search/jeeshop/1.htm">jeeshop</a><a class="tag" taget="_blank" href="/search/%E5%95%86%E5%9F%8E%E7%B3%BB%E7%BB%9F/1.htm">商城系统</a><a class="tag" taget="_blank" href="/search/jshop/1.htm">jshop</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%95%86%E7%B3%BB%E7%BB%9F/1.htm">电商系统</a>
                                    <div>    在spring mvc中,为了随时都能取到当前请求的request对象,可以通过RequestContextHolder的静态方法getRequestAttributes()获取Request相关的变量,如request, response等。         在jshop中,对RequestContextHolder的</div>
                                </li>
                                <li><a href="/article/459.htm"
                                       title="算法之时间复杂度" target="_blank">算法之时间复杂度</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%97%B6%E9%97%B4%E5%A4%8D%E6%9D%82%E5%BA%A6/1.htm">时间复杂度</a><a class="tag" taget="_blank" href="/search/%E6%95%88%E7%8E%87/1.htm">效率</a>
                                    <div>      在 
计算机科学 中, 
算法 的时间复杂度是一个 
函数 ,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的 
字符串 的长度的函数。时间复杂度常用 
大O符号 表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是 
渐近 的,它考察当输入值大小趋近无穷时的情况。 
这样用大写O()来体现算法时间复杂度的记法,</div>
                                </li>
                                <li><a href="/article/586.htm"
                                       title="Java事务处理" target="_blank">Java事务处理</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>一、什么是Java事务 通常的观念认为,事务仅与数据库相关。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状</div>
                                </li>
                                <li><a href="/article/713.htm"
                                       title="Linux awk命令详解" target="_blank">Linux awk命令详解</a>
                                    <span class="text-muted">510888780</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>一.  AWK 说明 
  awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。 
 
   awk的处理文本和数据的方式:它逐行扫描文件,从第一行到</div>
                                </li>
                                <li><a href="/article/840.htm"
                                       title="android permission" target="_blank">android permission</a>
                                    <span class="text-muted">布衣凌宇</span>
<a class="tag" taget="_blank" href="/search/Permission/1.htm">Permission</a>
                                    <div><uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES" ></uses-permission>允许读写访问"properties"表在checkin数据库中,改值可以修改上传 
<uses-permission android:na</div>
                                </li>
                                <li><a href="/article/967.htm"
                                       title="Oracle和谷歌Java Android官司将推迟" target="_blank">Oracle和谷歌Java Android官司将推迟</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>北京时间 10 月 7 日,据国外媒体报道,Oracle 和谷歌之间一场等待已久的官司可能会推迟至 10 月 17 日以后进行,这场官司的内容是 Android 操作系统所谓的 Java 专利权之争。本案法官 William Alsup 称根据专利权专家 Florian Mueller 的预测,谷歌 Oracle 案很可能会被推迟。  该案中的第二波辩护被安排在 10 月 17 日出庭,从目前看来</div>
                                </li>
                                <li><a href="/article/1094.htm"
                                       title="linux shell 常用命令" target="_blank">linux shell 常用命令</a>
                                    <span class="text-muted">antlove</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/command/1.htm">command</a>
                                    <div>grep [options] [regex] [files] 
/var/root # grep -n "o" *                                                       
hello.c:1:/* This C source can be compiled with:                            </div>
                                </li>
                                <li><a href="/article/1221.htm"
                                       title="Java解析XML配置数据库连接(DOM技术连接 SAX技术连接)" target="_blank">Java解析XML配置数据库连接(DOM技术连接 SAX技术连接)</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/sax%E6%8A%80%E6%9C%AF/1.htm">sax技术</a><a class="tag" taget="_blank" href="/search/Java%E8%A7%A3%E6%9E%90xml%E6%96%87%E6%A1%A3/1.htm">Java解析xml文档</a><a class="tag" taget="_blank" href="/search/dom%E6%8A%80%E6%9C%AF/1.htm">dom技术</a><a class="tag" taget="_blank" href="/search/XML%E9%85%8D%E7%BD%AE%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5/1.htm">XML配置数据库连接</a>
                                    <div>    XML配置数据库文件的连接其实是个很简单的问题,为什么到现在才写出来主要是昨天在网上看了别人写的,然后一直陷入其中,最后发现不能自拔 所以今天决定自己完成 ,,,,现将代码与思路贴出来供大家一起学习 
  
XML配置数据库的连接主要技术点的博客; 
JDBC编程 : JDBC连接数据库 
DOM解析XML:  DOM解析XML文件 
SA</div>
                                </li>
                                <li><a href="/article/1348.htm"
                                       title="underscore.js 学习(二)" target="_blank">underscore.js 学习(二)</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/underscore/1.htm">underscore</a>
                                    <div>        Array Functions 所有数组函数对参数对象一样适用。1.first   _.first(array, [n])   别名: head, take       返回array的第一个元素,设置了参数n,就</div>
                                </li>
                                <li><a href="/article/1475.htm"
                                       title="plSql介绍" target="_blank">plSql介绍</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>/*
 * PL/SQL 程序设计学习笔记
 * 学习plSql介绍.pdf
 * 时间:2010-10-05
*/

--创建DEPT表
create table DEPT
(
  DEPTNO NUMBER(10),
  DNAME  NVARCHAR2(255),
  LOC    NVARCHAR2(255)
)

delete dept;

select </div>
                                </li>
                                <li><a href="/article/1602.htm"
                                       title="【Nginx一】Nginx安装与总体介绍" target="_blank">【Nginx一】Nginx安装与总体介绍</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a>
                                    <div>启动、停止、重新加载Nginx 
nginx            启动Nginx服务器,不需要任何参数u
nginx -s stop    快速(强制)关系Nginx服务器
nginx -s quit    优雅的关闭Nginx服务器
nginx -s reload  重新加载Nginx服务器的配置文件
nginx -s reopen  重新打开Nginx日志文件 
  
 
</div>
                                </li>
                                <li><a href="/article/1729.htm"
                                       title="spring mvc开发中浏览器兼容的奇怪问题" target="_blank">spring mvc开发中浏览器兼容的奇怪问题</a>
                                    <span class="text-muted">bitray</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">浏览器</a><a class="tag" taget="_blank" href="/search/%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6/1.htm">上传文件</a>
                                    <div>    最近个人开发一个小的OA项目,属于复习阶段.使用的技术主要是spring mvc作为前端框架,mybatis作为数据库持久化技术.前台使用jquery和一些jquery的插件. 
    在开发到中间阶段时候发现自己好像忽略了一个小问题,整个项目一直在firefox下测试,没有在IE下测试,不确定是否会出现兼容问题.由于jquer</div>
                                </li>
                                <li><a href="/article/1856.htm"
                                       title="Lua的io库函数列表" target="_blank">Lua的io库函数列表</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/lua+io/1.htm">lua io</a>
                                    <div>1、io表调用方式:使用io表,io.open将返回指定文件的描述,并且所有的操作将围绕这个文件描述 
  io表同样提供三种预定义的文件描述io.stdin,io.stdout,io.stderr 
  2、文件句柄直接调用方式,即使用file:XXX()函数方式进行操作,其中file为io.open()返回的文件句柄 
  多数I/O函数调用失败时返回nil加错误信息,有些函数成功时返回nil</div>
                                </li>
                                <li><a href="/article/1983.htm"
                                       title="java-26-左旋转字符串" target="_blank">java-26-左旋转字符串</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>
public class LeftRotateString {

	/**
	 * Q 26 左旋转字符串
	 * 题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
	 * 如把字符串abcdef左旋转2位得到字符串cdefab。
	 * 请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
	 */
	pu</div>
                                </li>
                                <li><a href="/article/2110.htm"
                                       title="《vi中的替换艺术》-linux命令五分钟系列之十一" target="_blank">《vi中的替换艺术》-linux命令五分钟系列之十一</a>
                                    <span class="text-muted">cfyme</span>
<a class="tag" taget="_blank" href="/search/linux%E5%91%BD%E4%BB%A4/1.htm">linux命令</a>
                                    <div>vi方面的内容不知道分类到哪里好,就放到《Linux命令五分钟系列》里吧! 
今天编程,关于栈的一个小例子,其间我需要把”S.”替换为”S->”(替换不包括双引号)。 
其实这个不难,不过我觉得应该总结一下vi里的替换技术了,以备以后查阅。 
  
1 
所有替换方案都要在冒号“:”状态下书写。 
2 
如果想将abc替换为xyz,那么就这样 
:s/abc/xyz/ 
不过要特别</div>
                                </li>
                                <li><a href="/article/2237.htm"
                                       title="[轨道与计算]新的并行计算架构" target="_blank">[轨道与计算]新的并行计算架构</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%B9%B6%E8%A1%8C%E8%AE%A1%E7%AE%97/1.htm">并行计算</a>
                                    <div> 
 
     我在进行流程引擎循环反馈试验的过程中,发现一个有趣的事情。。。如果我们在流程图的每个节点中嵌入一个双向循环代码段,而整个流程中又充满着很多并行路由,每个并行路由中又包含着一些并行节点,那么当整个流程图开始循环反馈过程的时候,这个流程图的运行过程是否变成一个并行计算的架构呢? 
 
     </div>
                                </li>
                                <li><a href="/article/2364.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>用handler就可以了 
 

private Handler handler = new Handler();

private Runnable runnable = new Runnable() {
	public void run() {
		update();
		handler.postDelayed(this, 5000);
	}
};
 
开始计时 
 

h</div>
                                </li>
                                <li><a href="/article/2491.htm"
                                       title="Java实现堆栈(list实现)" target="_blank">Java实现堆栈(list实现)</a>
                                    <span class="text-muted">datageek</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E2%80%94%E2%80%94%E5%A0%86%E6%A0%88/1.htm">数据结构——堆栈</a>
                                    <div>public interface IStack<T> {
    //元素出栈,并返回出栈元素
    public T pop();
    //元素入栈
    public void push(T element);
    //获取栈顶元素
    public T peek();
    //判断栈是否为空
    public boolean isEmpty</div>
                                </li>
                                <li><a href="/article/2618.htm"
                                       title="四大备份MySql数据库方法及可能遇到的问题" target="_blank">四大备份MySql数据库方法及可能遇到的问题</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/DB/1.htm">DB</a><a class="tag" taget="_blank" href="/search/backup/1.htm">backup</a>
                                    <div>一:通过备份王等软件进行备份前台进不去? 
用备份王等软件进行备份是大多老站长的选择,这种方法方便快捷,只要上传备份软件到空间一步步操作就可以,但是许多刚接触备份王软件的客用户来说还原后会出现一个问题:因为新老空间数据库用户名和密码不统一,网站文件打包过来后因没有修改连接文件,还原数据库是好了,可是前台会提示数据库连接错误,网站从而出现打不开的情况。 
解决方法:学会修改网站配置文件,大多是由co</div>
                                </li>
                                <li><a href="/article/2745.htm"
                                       title="github做webhooks:[1]钩子触发是否成功测试" target="_blank">github做webhooks:[1]钩子触发是否成功测试</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/github/1.htm">github</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/webhook/1.htm">webhook</a>
                                    <div>转自: http://jingyan.baidu.com/article/5d6edee228c88899ebdeec47.html 
github和svn一样有钩子的功能,而且更加强大。例如我做的是最常见的push操作触发的钩子操作,则每次更新之后的钩子操作记录都会在github的控制板可以看到!       
工具/原料  
 
   github   
     
方法/步骤  
 
   </div>
                                </li>
                                <li><a href="/article/2872.htm"
                                       title="JSP中<base href="<%=basePath%>">的作用" target="_blank">JSP中<base href="<%=basePath%>">的作用</a>
                                    <span class="text-muted">蕃薯耀</span>

                                    <div>JSP中<base href="<%=basePath%>">的作用 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
</div>
                                </li>
                                <li><a href="/article/2999.htm"
                                       title="linux下SAMBA服务安装与配置" target="_blank">linux下SAMBA服务安装与配置</a>
                                    <span class="text-muted">hanqunfeng</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>局域网使用的文件共享服务。 
一.安装包: 
rpm -qa | grep samba 
samba-3.6.9-151.el6.x86_64 
samba-common-3.6.9-151.el6.x86_64 
samba-winbind-3.6.9-151.el6.x86_64 
samba-client-3.6.9-151.el6.x86_64 
samba-winbind-clients</div>
                                </li>
                                <li><a href="/article/3126.htm"
                                       title="guava cache" target="_blank">guava cache</a>
                                    <span class="text-muted">IXHONG</span>
<a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a>
                                    <div>缓存,在我们日常开发中是必不可少的一种解决性能问题的方法。简单的说,cache 就是为了提升系统性能而开辟的一块内存空间。 
  缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。在日常开发的很多场合,由于受限于硬盘IO的性能或者我们自身业务系统的数据处理和获取可能非常费时,当我们发现我们的系统这个数据请求量很大的时候,频繁的IO和频繁的逻辑处理会导致硬盘和CPU资源的</div>
                                </li>
                                <li><a href="/article/3253.htm"
                                       title="Query的开始--全局变量,noconflict和兼容各种js的初始化方法" target="_blank">Query的开始--全局变量,noconflict和兼容各种js的初始化方法</a>
                                    <span class="text-muted">kvhur</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a>
                                    <div>这个是整个jQuery代码的开始,里面包含了对不同环境的js进行的处理,例如普通环境,Nodejs,和requiredJs的处理方法。   还有jQuery生成$, jQuery全局变量的代码和noConflict代码详解    完整资源: 
http://www.gbtags.com/gb/share/5640.htm   jQuery 源码:          
 
  (</div>
                                </li>
                                <li><a href="/article/3380.htm"
                                       title="美国人的福利和中国人的储蓄" target="_blank">美国人的福利和中国人的储蓄</a>
                                    <span class="text-muted">nannan408</span>

                                    <div>   今天看了篇文章,震动很大,说的是美国的福利。 
   美国医院的无偿入院真的是个好措施。小小的改善,对于社会是大大的信心。小孩,税费等,政府不收反补,真的体现了人文主义。 
   美国这么高的社会保障会不会使人变懒?答案是否定的。正因为政府解决了后顾之忧,人们才得以倾尽精力去做一些有创造力,更造福社会的事情,这竟成了美国社会思想、人</div>
                                </li>
                                <li><a href="/article/3507.htm"
                                       title="N阶行列式计算(JAVA)" target="_blank">N阶行列式计算(JAVA)</a>
                                    <span class="text-muted">qiuwanchi</span>
<a class="tag" taget="_blank" href="/search/N%E9%98%B6%E8%A1%8C%E5%88%97%E5%BC%8F%E8%AE%A1%E7%AE%97/1.htm">N阶行列式计算</a>
                                    <div>package gaodai;

import java.util.List;

/**
 * N阶行列式计算
 * @author 邱万迟
 *
 */
public class DeterminantCalculation {
	
	public DeterminantCalculation(List<List<Double>> determina</div>
                                </li>
                                <li><a href="/article/3634.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>如果一个渔夫从2011年1月1日开始每三天打一次渔,两天晒一次网,编程实现当输入2011年1月1日以后任意一天,输出该渔夫是在打渔还是在晒网。 
代码如下: 
  
#include <stdio.h>
int leap(int a)  /*自定义函数leap()用来指定输入的年份是否为闰年*/
{
	if((a%4 == 0 && a%100 != 0</div>
                                </li>
                                <li><a href="/article/3761.htm"
                                       title="XML中DOCTYPE字段的解析" target="_blank">XML中DOCTYPE字段的解析</a>
                                    <span class="text-muted">wyzuomumu</span>
<a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a>
                                    <div>DTD声明始终以!DOCTYPE开头,空一格后跟着文档根元素的名称,如果是内部DTD,则再空一格出现[],在中括号中是文档类型定义的内容. 而对于外部DTD,则又分为私有DTD与公共DTD,私有DTD使用SYSTEM表示,接着是外部DTD的URL. 而公共DTD则使用PUBLIC,接着是DTD公共名称,接着是DTD的URL. 
  
私有DTD 
<!DOCTYPErootSYST</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>