博客单页化实践

半年前,因为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/1901166916966346752.htm"
                           title="颠覆传统开发!诚邀您加入AI Dev Engineer计划!" target="_blank">颠覆传统开发!诚邀您加入AI Dev Engineer计划!</a>
                        <span class="text-muted">北堂飘霜</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><a class="tag" taget="_blank" href="/search/JAVA/1.htm">JAVA</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>前言查看详情过去几年,AI在编程领域的应用越来越广泛。从Copilot到ChatGPT,AI正在帮助开发者加速代码编写、优化逻辑、修复bug。但如果你曾经尝试过让AI生成代码,你一定遇到过这些问题:现有AI编码的3大痛点1️⃣代码生成≠项目构建你问AI:“帮我写一个博客系统!”它给你返回了一段后端代码,或者一个Vue组件……然后呢?你还是要手动搭建整个项目,粘贴代码,配置依赖,调试环境,所有的重复</div>
                    </li>
                    <li><a href="/article/1901164516046073856.htm"
                           title="【云原生之kubernetes实战】在k8s环境中高效部署minio对象存储(详细教程)" target="_blank">【云原生之kubernetes实战】在k8s环境中高效部署minio对象存储(详细教程)</a>
                        <span class="text-muted">江湖有缘</span>
<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/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>【云原生之kubernetes实战】在k8s环境中高效部署minio对象存储(详细教程)前言一、minio介绍1.1MinIO简介1.2主要特点1.3主要使用场景二、相关知识介绍2.1本次实践存储介绍2.2k8s存储介绍三、本次实践介绍3.1本次实践简介3.2本次环境规划3.3部署前需准备工作四、检查k8s环境4.1检查工作节点状态4.2检查系统pod状态五、部署minio对象存储5.1编辑min</div>
                    </li>
                    <li><a href="/article/1901147753094901760.htm"
                           title="element-plus按需引入报错IconsResolver is not a function" target="_blank">element-plus按需引入报错IconsResolver is not a function</a>
                        <span class="text-muted">Beamon__</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>官网文档:element-plus-best-practices/vite.config.tsatdb2dfc983ccda5570033a0ac608a1bd9d9a7f658·sxzz/element-plus-best-practices·GitHubElementPlusBestPractices最佳实践.Contributetosxzz/element-plus-best-practic</div>
                    </li>
                    <li><a href="/article/1901144350113460224.htm"
                           title="机器学习的下一个前沿是因果推理吗?——探索机器学习的未来方向!" target="_blank">机器学习的下一个前沿是因果推理吗?——探索机器学习的未来方向!</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/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a>
                        <div>机器学习的进化:从预测到因果推理机器学习凭借强大的预测能力,已经彻底改变了多个行业。然而,要实现真正的突破,机器学习还需要克服实践和计算上的挑战,特别是在因果推理方面的应用。未来,因果推理或许将成为推动机器学习发展的新前沿。什么是因果推理,它如何与机器学习相关?如果你和我一样没有数学背景,你可能会好奇“因果推理”到底意味着什么?它与机器学习又有什么关系?当我刚开始学习机器学习时,第一次听到“因果推</div>
                    </li>
                    <li><a href="/article/1901141196428865536.htm"
                           title="大规模语言模型从理论到实践 开源指令数据集" target="_blank">大规模语言模型从理论到实践 开源指令数据集</a>
                        <span class="text-muted">AI天才研究院</span>
<a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a><a class="tag" taget="_blank" href="/search/R1/1.htm">R1</a><a class="tag" taget="_blank" href="/search/%26amp%3B/1.htm">&</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AEAI%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大数据AI人工智能大模型</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/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%BA%94%E7%94%A8%E5%85%A5%E9%97%A8%E5%AE%9E%E6%88%98%E4%B8%8E%E8%BF%9B%E9%98%B6/1.htm">AI大模型应用入门实战与进阶</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E7%A7%91%E5%AD%A6/1.htm">计算科学</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E8%AE%A1%E7%AE%97/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/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E5%9E%8B%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">大型语言模型</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/AGI/1.htm">AGI</a><a class="tag" taget="_blank" href="/search/LLM/1.htm">LLM</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">架构设计</a><a class="tag" taget="_blank" href="/search/Agent/1.htm">Agent</a><a class="tag" taget="_blank" href="/search/RPA/1.htm">RPA</a>
                        <div>大规模语言模型从理论到实践开源指令数据集1.背景介绍大规模语言模型(LargeLanguageModels,LLMs)近年来在自然语言处理(NLP)领域取得了显著的进展。诸如GPT-3、BERT等模型在各种任务中表现出色,从文本生成到翻译,再到问答系统,几乎无所不能。这些模型的成功离不开庞大的训练数据集和复杂的算法架构。然而,如何有效地构建和利用开源指令数据集,仍然是一个值得深入探讨的话题。2.核</div>
                    </li>
                    <li><a href="/article/1901136591896768512.htm"
                           title="第四章:高级特性与最佳实践 - 第五节 - Tailwind CSS 代码组织和维护技巧" target="_blank">第四章:高级特性与最佳实践 - 第五节 - Tailwind CSS 代码组织和维护技巧</a>
                        <span class="text-muted"></span>

                        <div>在大型项目中,良好的代码组织和维护策略对于项目的可持续发展至关重要。本节将介绍如何在使用TailwindCSS的项目中组织和维护代码,以提高开发效率和代码质量。目录结构规范推荐的项目结构src/├──styles/│├──base/││├──typography.css││├──colors.css││└──reset.css│├──components/││├──button.css││├──c</div>
                    </li>
                    <li><a href="/article/1901136590533619712.htm"
                           title="78. Harmonyos NEXT 懒加载数据源实现解析" target="_blank">78. Harmonyos NEXT 懒加载数据源实现解析</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/harmonyos-next/1.htm">harmonyos-next</a>
                        <div>温馨提示:本篇博客的详细代码已发布到git:https://gitcode.com/nutpi/HarmonyosNext可以下载运行哦!HarmonyosNEXT懒加载数据源实现解析:BasicDataSource与CommonLazyDataSourceModel详解一、核心类关系图解二、基础数据源实现(BasicDataSource)1.监听器管理机制privatelisteners:Dat</div>
                    </li>
                    <li><a href="/article/1901135452681859072.htm"
                           title="第四章:高级特性与最佳实践 - 第三节 - Tailwind CSS 性能优化策略" target="_blank">第四章:高级特性与最佳实践 - 第三节 - Tailwind CSS 性能优化策略</a>
                        <span class="text-muted"></span>

                        <div>在使用TailwindCSS开发大型项目时,性能优化是一个不可忽视的话题。本节将从构建性能、运行时性能、文件体积等多个维度,详细介绍TailwindCSS的性能优化策略。构建优化优化扫描范围//tailwind.config.jsmodule.exports={content:[//只扫描实际使用的文件'./src/pages/**/*.{js,jsx,ts,tsx}','./src/compon</div>
                    </li>
                    <li><a href="/article/1901130921092902912.htm"
                           title="第四章:高级特性与最佳实践 - 第五节 - Tailwind CSS 代码组织和维护技巧" target="_blank">第四章:高级特性与最佳实践 - 第五节 - Tailwind CSS 代码组织和维护技巧</a>
                        <span class="text-muted"></span>

                        <div>在大型项目中,良好的代码组织和维护策略对于项目的可持续发展至关重要。本节将介绍如何在使用TailwindCSS的项目中组织和维护代码,以提高开发效率和代码质量。目录结构规范推荐的项目结构src/├──styles/│├──base/││├──typography.css││├──colors.css││└──reset.css│├──components/││├──button.css││├──c</div>
                    </li>
                    <li><a href="/article/1901130919868166144.htm"
                           title="第四章:高级特性与最佳实践 - 第四节 - Tailwind CSS CSS 提取和打包优化" target="_blank">第四章:高级特性与最佳实践 - 第四节 - Tailwind CSS CSS 提取和打包优化</a>
                        <span class="text-muted"></span>

                        <div>在现代前端工程中,CSS的提取和打包优化对于项目性能至关重要。本节将详细介绍如何在使用TailwindCSS的项目中实现CSS的高效提取和打包优化。CSS提取策略MiniCssExtractPlugin配置//webpack.config.jsconstMiniCssExtractPlugin=require('mini-css-extract-plugin')module.exports={mo</div>
                    </li>
                    <li><a href="/article/1901129349109706752.htm"
                           title="订单管理系统 大学生数据库大作业/数据库实践MYSQL" target="_blank">订单管理系统 大学生数据库大作业/数据库实践MYSQL</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><a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1/1.htm">课程设计</a>
                        <div>订单管理系统从入门到入土下载Maven,Nodejs创建一个数据库sql_end,创建四个数据库表,并确保用户名为root用户密码为123456再IDEA中加载Springboot依赖(可以直接新建一个任意名称的文件夹,项目导入spring的框架),启动spring项目打开index.html输入用户名和密码,点击注册,再点击登录点击个人中心,点击修改用户信息,修改自己的余额点击逛店铺,选择一个商</div>
                    </li>
                    <li><a href="/article/1901129221724499968.htm"
                           title="订单管理系统,大学生数据结构期末作业/C语言实践作业" target="_blank">订单管理系统,大学生数据结构期末作业/C语言实践作业</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/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>任务:订单管理系统的设计与实现设计并实现一个订单管理系统界面分成两部分,分别是管理员和用户的界面主要功能:用户:(1)用户的登录及注册(2)用户信息修改(3)购买物品(4)充值(5)升序排序(按金额)物品管理员:(1)显示所有订单(2)插入订单信息(3)删除订单信息(4)排序订单(快排按编号)(5)统计订单信息(6)添加物品注意事项:一共需要建立4个文件(key.txt、物品清单.txt、用户信息</div>
                    </li>
                    <li><a href="/article/1901128838415446016.htm"
                           title="Python3 【项目实战】深度解析:赛跑成绩统计分析工具" target="_blank">Python3 【项目实战】深度解析:赛跑成绩统计分析工具</a>
                        <span class="text-muted">李智 - 重庆</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E7%B2%BE%E8%AE%B2%E7%B2%BE%E7%BB%83/1.htm">精讲精练</a><a class="tag" taget="_blank" href="/search/-/1.htm">-</a><a class="tag" taget="_blank" href="/search/%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E5%AE%9E%E6%88%98/1.htm">从入门到实战</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%A1%88%E4%BE%8B%E5%AD%A6%E4%B9%A0/1.htm">案例学习</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E6%8A%80%E5%B7%A7/1.htm">编程技巧</a><a class="tag" taget="_blank" href="/search/%E6%97%B6%E9%97%B4%E5%A4%84%E7%90%86/1.htm">时间处理</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/1.htm">项目实战</a>
                        <div>Python3【项目实战】深度解析:赛跑成绩统计分析工具一、项目概述1.开发背景:田径比赛的成绩统计需要快速准确的计算选手成绩,传统人工计时和统计效率低且易出错。本工具通过程序化处理赛跑数据,自动计算各选手成绩及整体统计指标,主要应用于:学校运动会成绩实时统计田径锦标赛的自动化成绩公示运动员训练数据分析2.技术定位:时间数据处理与统计计算的典型案例字典数据结构的实践应用面向过程编程的教学范例二、项</div>
                    </li>
                    <li><a href="/article/1901126820233801728.htm"
                           title="ARM嵌入式实时系统(RTOS) 中通过页表关闭DCACHE的方法" target="_blank">ARM嵌入式实时系统(RTOS) 中通过页表关闭DCACHE的方法</a>
                        <span class="text-muted">papaofdoudou</span>
<a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%BB%9F/1.htm">嵌入式系统</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/1.htm">内存管理</a><a class="tag" taget="_blank" href="/search/arm/1.htm">arm</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>现在的嵌入式实时系统规模越来越大,很多在linux中使用的特性,例如虚拟内存管理,动态加载等功能也加入进来,进一步增加了RTOS开发的难度.在应用开发中,和cache相关的同步问题有两个,一个是flush操作,另一个是invalidate操作,有时候为了确认问题是否和cache同步有关,需要关闭dcache来验证.这里介绍一种经过验证过的通过页表项关闭DCACHE的实践。Cortex-A7中启用c</div>
                    </li>
                    <li><a href="/article/1901123417302691840.htm"
                           title="SpringCloudAlibaba:从0搭建一套快速开发框架-05 公共模块(common)编写与优化:提升开发效率实践" target="_blank">SpringCloudAlibaba:从0搭建一套快速开发框架-05 公共模块(common)编写与优化:提升开发效率实践</a>
                        <span class="text-muted">辉辉.</span>
<a class="tag" taget="_blank" href="/search/SpringCloud/1.htm">SpringCloud</a><a class="tag" taget="_blank" href="/search/2022/1.htm">2022</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/cloud/1.htm">cloud</a><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/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a>
                        <div>序言:上篇主要介绍了OpenFeign的集成使用,本篇主要优化完善公共模块。公共模块介绍本片主要针对于我个人创建的公共模块(shine-common)展开。shine-common模块的总体功能可以概括为提供系统中的基础通用功能和工具,旨在为其他模块和服务提供一些重复使用的逻辑、工具方法以及规范化的处理方式。具体功能如下:基础常量与配置支持提供项目中需要的常量定义和全局配置项。这样可以避免硬编码常</div>
                    </li>
                    <li><a href="/article/1901120640425979904.htm"
                           title="【JCR一区级】被囊群算法TSA-Transformer-GRU负荷数据回归预测【含Matlab源码 6309期】" target="_blank">【JCR一区级】被囊群算法TSA-Transformer-GRU负荷数据回归预测【含Matlab源码 6309期】</a>
                        <span class="text-muted">Matlab武动乾坤</span>
<a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a>
                        <div>Matlab武动乾坤博客之家</div>
                    </li>
                    <li><a href="/article/1901115978180259840.htm"
                           title="TRAE与Cursor最佳实践指南(截至2025年3月)" target="_blank">TRAE与Cursor最佳实践指南(截至2025年3月)</a>
                        <span class="text-muted">xinxiyinhe</span>
<a class="tag" taget="_blank" href="/search/AI%E7%BC%96%E7%A8%8B/1.htm">AI编程</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/AI%E7%BC%96%E7%A8%8B/1.htm">AI编程</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>一、核心能力适配策略TRAE的Builder模式开发流程需求拆解:将复杂需求分解为可执行子任务(如先搭建项目框架,再分模块实现功能),通过多轮对话逐步生成代码。多模态输入:上传设计草图或错误截图,结合自然语言描述需求,提升代码生成精准度(例如电商页面开发可直接上传原型图)。版本控制:利用“历史会话回溯”功能快速回退到指定版本,避免代码修改失控。Cursor的高效协作模式插件生态整合:复用VSCod</div>
                    </li>
                    <li><a href="/article/1901115221611704320.htm"
                           title="用 Verilog 实现 0 到 18 计数器:从原理到实践的全解析" target="_blank">用 Verilog 实现 0 到 18 计数器:从原理到实践的全解析</a>
                        <span class="text-muted">君临天下.鑫</span>
<a class="tag" taget="_blank" href="/search/modelsim/1.htm">modelsim</a><a class="tag" taget="_blank" href="/search/%E6%B3%A2%E5%BD%A2%E4%BB%BF%E7%9C%9F/1.htm">波形仿真</a><a class="tag" taget="_blank" href="/search/verilog/1.htm">verilog</a><a class="tag" taget="_blank" href="/search/fpga%E5%BC%80%E5%8F%91/1.htm">fpga开发</a><a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1/1.htm">课程设计</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E8%BE%91%E5%99%A8/1.htm">编辑器</a>
                        <div>在数字电路设计中,计数器是极为重要的基础部件,广泛应用于各类数字系统。本次实验聚焦于设计一个从0到18计数的计数器,通过深入探索计数器的工作原理、利用组合逻辑控制计数范围,进一步加深对数字电路和Verilog语言的理解与应用。一、实验目的理解计数器通用原理:全面掌握计数器的基本工作原理,包括计数的方式、状态的转换以及与外部信号的交互等,为设计特定功能的计数器奠定理论基础。运用组合逻辑控制计数范围:</div>
                    </li>
                    <li><a href="/article/1901115220986753024.htm"
                           title="7.探索XSS跨站脚本攻击" target="_blank">7.探索XSS跨站脚本攻击</a>
                        <span class="text-muted">早安TnT</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%AD%A6%E4%B9%A0%E8%AE%A1%E5%88%92%EF%BC%88%E6%AF%8F%E6%97%A5%E8%AE%A1%E5%88%92%EF%BC%89/1.htm">网络安全学习计划(每日计划)</a><a class="tag" taget="_blank" href="/search/xss/1.htm">xss</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>探索XSS跨站脚本攻击第一部分:XSS基础(理论)第二部分:XSS的手工测试(理论)第三部分:DVWA靶场实践XSS(实践)总结目标:•理解XSS的基本原理与类型•掌握XSS的手工测试方法•通过DVWA靶场实践XSS攻击详细内容与教学第一部分:XSS基础(理论)学习内容:•什么是XSS?•XSS的类型•XSS的危害详细讲解:1什么是XSS?XSS(Cross-SiteScripting,跨站脚本攻</div>
                    </li>
                    <li><a href="/article/1901111185533628416.htm"
                           title="基于 Golang 的微服务开发实践:使用 Gin 和 GORM 构建 RESTful API" target="_blank">基于 Golang 的微服务开发实践:使用 Gin 和 GORM 构建 RESTful API</a>
                        <span class="text-muted">全栈探索者chen</span>
<a class="tag" taget="_blank" href="/search/%E7%9F%A5%E8%AF%86%E5%88%86%E4%BA%AB/1.htm">知识分享</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a><a class="tag" taget="_blank" href="/search/gin/1.htm">gin</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/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/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a>
                        <div>基于Golang的微服务开发实践:使用Gin和GORM构建RESTfulAPI前言在微服务架构时代,高性能、易扩展和维护的API服务成为构建企业级系统的关键。Golang(Go)以其高效的执行速度、内置并发模型和优秀的性能表现,正逐渐成为后端微服务开发的热门选择。本文将详细介绍如何使用Gin框架与GORMORM构建一个RESTfulAPI微服务。我们将从项目初始化、数据模型设计、路由与控制器开发,</div>
                    </li>
                    <li><a href="/article/1901105262106832896.htm"
                           title="JAVA从万级QPS到亿级吞吐,如何用非阻塞模型突破传统架构的性能瓶颈" target="_blank">JAVA从万级QPS到亿级吞吐,如何用非阻塞模型突破传统架构的性能瓶颈</a>
                        <span class="text-muted">王大师王文峰</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/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>本人详解作者:王文峰,参加过CSDN2020年度博客之星,《Java王大师王天师》公众号:JAVA开发王大师,专注于天道酬勤的Java开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯山峯转载说明:务必注明来源(注明:作者:王文峰哦)JAVA从万级QPS到亿级吞吐,如何用非阻塞模型突破传统架构的性能瓶颈学习教程(传送门)引言:当线程池成为瓶颈——某视频平台春节</div>
                    </li>
                    <li><a href="/article/1901097197185855488.htm"
                           title="结构体6~10(2356. 成绩排序、1740. 统计每个数出现的次数、1940. 混合牛奶、1314. 仰卧起坐成绩统计、1953. 新生舞会、1346. 等比例缩放照片)" target="_blank">结构体6~10(2356. 成绩排序、1740. 统计每个数出现的次数、1940. 混合牛奶、1314. 仰卧起坐成绩统计、1953. 新生舞会、1346. 等比例缩放照片)</a>
                        <span class="text-muted">是帅帅的少年</span>
<a class="tag" taget="_blank" href="/search/%E4%B8%9C%E6%96%B9%E5%8D%9A%E5%AE%9COJ%E9%A2%98%E5%BA%93%E8%A7%A3%E6%9E%90/1.htm">东方博宜OJ题库解析</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>题单地址:题单中心-东方博宜OJ1372.活动选择在贪心专题有详细讲解:贪心1~7-CSDN博客2356.成绩排序问题描述(补充一道我觉得有代表性的题目)【具体要求】虽然现在学校已经不允许将学生每次的考试成绩公布,但是尽职尽责的班主任小青老师还是会私下将学生们的成绩排序,看看哪些学生进步了,哪些学生有所退步,针对退步的学生想一些提升方案。现在请你通过编程来帮助小青老师实现全班n位同学成绩的排名。排</div>
                    </li>
                    <li><a href="/article/1901093541350797312.htm"
                           title="如何使用PHP进行单元测试:工具与方法" target="_blank">如何使用PHP进行单元测试:工具与方法</a>
                        <span class="text-muted">挚***沾</span>
<a class="tag" taget="_blank" href="/search/php%E7%BB%8F%E9%AA%8C/1.htm">php经验</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a>
                        <div>如何使用PHP进行单元测试:工具与方法单元测试是软件开发中不可或缺的一部分,它能够确保代码的每个独立单元(如函数、类或方法)在隔离环境中按预期工作。对于PHP开发者来说,掌握单元测试的工具和方法是提高代码质量和开发效率的关键。本文将详细介绍如何使用PHP进行单元测试,涵盖常用的工具、编写测试用例的方法以及最佳实践。1.单元测试的重要性在深入讨论工具和方法之前,首先需要明确单元测试的重要性。单元测试</div>
                    </li>
                    <li><a href="/article/1901093540675514368.htm"
                           title="PHP安全最佳实践:防御XSS与CSRF攻击" target="_blank">PHP安全最佳实践:防御XSS与CSRF攻击</a>
                        <span class="text-muted">挚***沾</span>
<a class="tag" taget="_blank" href="/search/php%E7%BB%8F%E9%AA%8C/1.htm">php经验</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/xss/1.htm">xss</a>
                        <div>PHP安全最佳实践:防御XSS与CSRF攻击在Web开发中,安全性是一个至关重要的方面。PHP作为一种广泛使用的服务器端脚本语言,常常成为攻击者的目标。本文将重点讨论如何通过最佳实践来防御两种常见的Web攻击:跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。1.跨站脚本攻击(XSS)防御1.1什么是XSS攻击?跨站脚本攻击(XSS)是一种注入攻击,攻击者通过在网页中插入恶意脚本,使得这些脚本在用</div>
                    </li>
                    <li><a href="/article/1901091270806269952.htm"
                           title="《Hello YOLOv8从入门到精通》4, 模型架构和骨干网络Backbone调优实践" target="_blank">《Hello YOLOv8从入门到精通》4, 模型架构和骨干网络Backbone调优实践</a>
                        <span class="text-muted">Jagua</span>
<a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a>
                        <div>YOLOv8是由Ultralytics开发的最先进的目标检测模型,其模型架构细节包括骨干网络(Backbone)、颈部网络(Neck)和头部网络(Head)三大部分。一、骨干网络(Backbone)Backbone部分负责特征提取,采用了一系列卷积和反卷积层,同时使用了残差连接和瓶颈结构来减小网络的大小并提高性能。YOLOv8的Backbone参考了CSPDarkNet结构,的增强版本,并结合了其</div>
                    </li>
                    <li><a href="/article/1901083836612145152.htm"
                           title="KNN算法性能优化技巧与实战案例" target="_blank">KNN算法性能优化技巧与实战案例</a>
                        <span class="text-muted">可问 可问春风</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a>
                        <div>KNN算法性能优化技巧与实战案例K最近邻(KNN)在分类和回归任务中表现稳健,但其计算复杂度高、内存消耗大成为IT项目中的主要瓶颈。以下从算法优化、数据结构、工程实践三方面深入解析性能提升策略,并附典型应用案例。一、核心性能瓶颈维度挑战描述计算复杂度单次预测需计算全部训练样本距离,时间复杂度为(n=样本数,d=特征维度)内存占用需全量存储训练数据,大规模数据集难以加载高维灾难高维数据中距离计算失去</div>
                    </li>
                    <li><a href="/article/1901073741278932992.htm"
                           title="Node.js--exports 对象详解:用法、示例与最佳实践" target="_blank">Node.js--exports 对象详解:用法、示例与最佳实践</a>
                        <span class="text-muted">还是鼠鼠</span>
<a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/web/1.htm">web</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a>
                        <div>目录1.exports对象介绍2.基础示例:使用exports导出对象文件名:math.js(JavaScript)3.在另一个文件中使用require进行导入文件名:app.js(JavaScript)4.运行程序5.exports的限制6.其他exports使用方式示例1:导出单个函数示例2:导出类7.结论1.exports对象介绍在Node.js中,exports是module.export</div>
                    </li>
                    <li><a href="/article/1901050177406431232.htm"
                           title="【STM32】USART串口收发HEX数据包&收发文本数据包" target="_blank">【STM32】USART串口收发HEX数据包&收发文本数据包</a>
                        <span class="text-muted">傍晚冰川</span>
<a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</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%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>有关串口知识参考:【STM32】USART串口协议&串口外设-学习笔记-CSDN博客HEX模式/十六进制模式/二进制模式:以原始数据的形式显示文本模式/字符模式:以原始数据编码后的形式显示参考上面文章查看ASCII编码表HEX数据包包头包尾和载荷数据重复问题的解决方法:解决思路方法文本数据包文本模式有大量的字符可以作为包头包尾,可以有效避免载荷数据和包头包尾重复的问题HEX数据包和文本数据包两者的</div>
                    </li>
                    <li><a href="/article/1901047027979055104.htm"
                           title="Python 实现海康机器人工业相机 MV-CS050-10GC 的实时显示视频流及拍照功能(实时显示视频流同时可以进行拍照)" target="_blank">Python 实现海康机器人工业相机 MV-CS050-10GC 的实时显示视频流及拍照功能(实时显示视频流同时可以进行拍照)</a>
                        <span class="text-muted">恋上钢琴的虫</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%A0%81%E7%9B%B8%E6%9C%BA/1.htm">数码相机</a>
                        <div>参考链接:https://www.cnblogs.com/HanYork/p/17388506.htmlhttps://www.cnblogs.com/miracle-luna/p/16960556.html#5138211Flask搭建流媒体服务器:使用Flask搭建一个流媒体服务器_multipart/x-mixed-replace;boundary=frame-CSDN博客</div>
                    </li>
                    <li><a href="/article/1901039965454790656.htm"
                           title="Elasticsearch大文件检索性能提升20倍实践(干货)_elasticsearch 查询优化" target="_blank">Elasticsearch大文件检索性能提升20倍实践(干货)_elasticsearch 查询优化</a>
                        <span class="text-muted">2401_84247505</span>
<a class="tag" taget="_blank" href="/search/2024%E5%B9%B4%E7%A8%8B%E5%BA%8F%E5%91%98%E5%AD%A6%E4%B9%A0/1.htm">2024年程序员学习</a><a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/jenkins/1.htm">jenkins</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                        <div>3、问题排查与定位步骤1:限定返回记录条数。不提供直接访问末页的入口。baidu,360,搜狗等搜索引擎都不提供访问末页的请求方式。都是基于如下的请求方式:通过点击上一下、下一页逐页访问。这个从用户的角度也很好理解,搜索引擎返回的前面都是相关度最高的,也是用户最关心的信息。Elasticsearch的默认支持的数据条数是10000条,可以通过post请求修改。最终,本步骤将支持ES最大返回值100</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>