博客单页化实践

半年前,因为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/1892362228376596480.htm"
                           title="用 TensorFlow 搭建简单的手写数字识别模型" target="_blank">用 TensorFlow 搭建简单的手写数字识别模型</a>
                        <span class="text-muted">lozhyf</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/tensorflow/1.htm">tensorflow</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>一、引言手写数字识别是机器学习领域中一个经典且基础的问题,它在很多实际场景中都有广泛的应用,比如邮政系统中的邮件分拣、银行支票金额识别等。TensorFlow是一个强大的开源机器学习框架,由Google开发并维护,它提供了丰富的工具和接口,能帮助我们快速搭建和训练深度学习模型。在这篇博客中,我们将使用TensorFlow构建一个简单的神经网络模型,用于识别手写数字。二、环境准备在开始之前,你需要安</div>
                    </li>
                    <li><a href="/article/1892361849689665536.htm"
                           title="【FastAPI 】FastAPI 模板:提供静态文件" target="_blank">【FastAPI 】FastAPI 模板:提供静态文件</a>
                        <span class="text-muted">iFakeCoder</span>
<a class="tag" taget="_blank" href="/search/Flask/1.htm">Flask</a><a class="tag" taget="_blank" href="/search/fastapi/1.htm">fastapi</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>FastAPI是一个现代、快速(高性能)的Web框架,用于基于标准Python类型提示使用Python3.7+构建API。虽然它的主要用例是构建API,但FastAPI还可以轻松提供静态文件和HTML模板,从而让您可以构建全栈Web应用程序。在此博客中,我们将探讨如何使用FastAPI提供静态文件。我们将介绍基础知识并提供演示以帮助您入门。为什么要提供静态文件?静态文件是不经常更改的资产,并按原样</div>
                    </li>
                    <li><a href="/article/1892360715197542400.htm"
                           title="无人机避障——配置新NX" target="_blank">无人机避障——配置新NX</a>
                        <span class="text-muted">Perishell</span>
<a class="tag" taget="_blank" href="/search/%E6%97%A0%E4%BA%BA%E6%9C%BA/1.htm">无人机</a>
                        <div>TerminalUbuntu安装Terminator及设置为默认终端_ubuntu安装terminator-CSDN博客谷歌拼音基于ubuntu20.4安装谷歌拼音中文输入法_ubuntu安装google输入法-CSDN博客JetsonOrin和Xaviernx的风扇调节Orinnx的默认风扇速度太慢,nx发烫的厉害,需要调节风速https://zhuanlan.zhihu.com/p/66558</div>
                    </li>
                    <li><a href="/article/1892338529019686912.htm"
                           title="使用DocusaurusLoader加载Docusaurus文档" target="_blank">使用DocusaurusLoader加载Docusaurus文档</a>
                        <span class="text-muted">scaFHIO</span>
<a class="tag" taget="_blank" href="/search/easyui/1.htm">easyui</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>技术背景介绍Docusaurus是一个静态网站生成器,专注于提供开箱即用的文档功能,特别适合技术文档和博客的创建和管理。通过其强大的插件和主题系统,可以方便地构建具有优秀用户体验的网站。然而,当需要将这些文档集成到AI应用中时,如何高效地加载和处理它们就成为一个挑战。为了解决这个问题,LangChain提供了DocusaurusLoader,它能够轻松地加载和处理Docusaurus文档,使其可以</div>
                    </li>
                    <li><a href="/article/1892336133224853504.htm"
                           title="解决Mac MongoDB连接问题:无法连接到服务器127.0.0.1:27017的错误" target="_blank">解决Mac MongoDB连接问题:无法连接到服务器127.0.0.1:27017的错误</a>
                        <span class="text-muted">星际编程喵</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%A7%91%E5%AD%A6%E4%B8%8E%E5%AD%98%E5%82%A8%E9%A2%86%E5%9F%9F/1.htm">数据科学与存储领域</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</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/macos/1.htm">macos</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>
                        <div>MongoDB是一种流行的开源数据库系统,广泛用于开发和维护现代应用程序。在使用MongoDB的过程中,有时您可能会遇到连接问题,其中一个常见的问题是在Mac上无法连接到本地MongoDB服务器(127.0.0.1:27017)。这种错误可能会导致应用程序无法正常运行,因此需要尽快解决。在本文中,我们将深入探讨在Mac上遇到MongoDB连接问题的可能原因,并提供一些最佳实践和解决方案,以帮助您成</div>
                    </li>
                    <li><a href="/article/1892335880106995712.htm"
                           title="剑指Offer(第二版)面试题10:斐波那契数列" target="_blank">剑指Offer(第二版)面试题10:斐波那契数列</a>
                        <span class="text-muted">温柔狠角色</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">面试题</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AF%95%E9%A2%98/1.htm">笔试题</a><a class="tag" taget="_blank" href="/search/%E5%89%91%E6%8C%87Offer/1.htm">剑指Offer</a><a class="tag" taget="_blank" href="/search/%E5%89%91%E6%8C%87Offer/1.htm">剑指Offer</a><a class="tag" taget="_blank" href="/search/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97/1.htm">斐波那契数列</a><a class="tag" taget="_blank" href="/search/%E8%B7%B3%E5%8F%B0%E9%98%B6/1.htm">跳台阶</a>
                        <div>(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/71933891冷血之心的博客)</div>
                    </li>
                    <li><a href="/article/1892321887539752960.htm"
                           title="SEO模板网站的wordpress主题最适合google外贸SEO" target="_blank">SEO模板网站的wordpress主题最适合google外贸SEO</a>
                        <span class="text-muted">podoor</span>
<a class="tag" taget="_blank" href="/search/seo/1.htm">seo</a>
                        <div>在寻找最适合Google外贸SEO的WordPress主题时,有几个关键因素需要考虑:速度、SEO友好性、多语言支持、以及是否易于定制。以下是一些推荐的WordPress主题,它们不仅速度快,而且对SEO非常友好,非常适合外贸网站:–模板帝:MobanDi.com是一个完全可定制且免费的WordPress博客主题。它包括适用于个人博客、投资组合、商业博客甚至电子商务网站的入门网站。它反应灵敏,可与</div>
                    </li>
                    <li><a href="/article/1892310042296774656.htm"
                           title="Java零基础入门笔记:(4)方法" target="_blank">Java零基础入门笔记:(4)方法</a>
                        <span class="text-muted">Sherlock Ma</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Java%E5%85%A5%E9%97%A8/1.htm">Java入门</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</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%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%96%B9%E6%B3%95/1.htm">学习方法</a><a class="tag" taget="_blank" href="/search/%E6%94%B9%E8%A1%8C%E5%AD%A6it/1.htm">改行学it</a><a class="tag" taget="_blank" href="/search/%E8%B7%B3%E6%A7%BD/1.htm">跳槽</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E4%BA%BA%E7%94%9F/1.htm">程序人生</a>
                        <div>前言本笔记是学习狂神的java教程,建议配合视频,学习体验更佳。【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili第1-2章:Java零基础入门笔记:(1-2)入门(简介、基础知识)-CSDN博客第3章:Java零基础入门笔记:(3)程序控制-CSDN博客--方法何谓方法Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象</div>
                    </li>
                    <li><a href="/article/1892310043714449408.htm"
                           title="腿足机器人之五- 粒子滤波" target="_blank">腿足机器人之五- 粒子滤波</a>
                        <span class="text-muted">shichaog</span>
<a class="tag" taget="_blank" href="/search/%E8%85%BF%E8%B6%B3%E6%9C%BA%E5%99%A8%E4%BA%BA/1.htm">腿足机器人</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E4%BA%BA/1.htm">机器人</a>
                        <div>腿足机器人之五粒子滤波直方图滤波粒子滤波上一篇博客使用的是高斯分布结合贝叶斯准则来估计机器人状态,本篇是基于直方图和粒子滤波器这两种无参滤波器估计机器人状态。直方图方法将状态空间分解成有限多个区域,并用直方图表示后验概率。直方图为每个区域分配一个单独的累积概率;可以将其视为对连续密度函数的逐段常数近似。第二种技术通过有限多个样本来表示后验概率。由此产生的滤波器被称为粒子滤波器,在某些机器人问题中获</div>
                    </li>
                    <li><a href="/article/1892296781249703936.htm"
                           title="HCIA网络层协议与IP编址" target="_blank">HCIA网络层协议与IP编址</a>
                        <span class="text-muted">夏の橘</span>
<a class="tag" taget="_blank" href="/search/HCIA%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/1.htm">HCIA学习之路</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>摘要:网络层是OSI模型中的核心层级,负责实现跨网络的数据传输。本文深入解析HCIA认证要求的网络层协议(IP/ICMP/ARP)及IP编址技术,涵盖子网划分、NAT原理及数据转发流程,帮助读者掌握网络层关键技术。目录一、网络层协议核心功能二、核心协议解析1.IP协议(InternetProtocol)2.ICMP协议3.ARP协议三、IPv4编址技术详解1.地址结构与分类关键细节2.子网划分实践</div>
                    </li>
                    <li><a href="/article/1892270808445808640.htm"
                           title="【Java】逻辑运算符详解:&&、|| 与&、 | 的区别及应用" target="_blank">【Java】逻辑运算符详解:&&、|| 与&、 | 的区别及应用</a>
                        <span class="text-muted">小ᶻ☡꙳ᵃⁱᵍᶜ꙳</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a>
                        <div>博客主页:[小ᶻ☡꙳ᵃⁱᵍᶜ꙳]本文专栏:Java文章目录前言一、基本概念与运算符介绍二、短路与与非短路与:&&与&的区别1.`&&`:短路与(AND)2.`&`:非短路与(AND)三、短路或与非短路或:||与|的区别1.`||`:短路或(OR)2.`|`:非短路或(OR)四、总结:什么时候使用短路与非短路运算符五、拓展:短路与非短路运算符的副作用六、结论前言在Java编程中,逻辑运算符是非常常见</div>
                    </li>
                    <li><a href="/article/1892270051516542976.htm"
                           title="Docker 安全基础:权限、用户、隔离机制" target="_blank">Docker 安全基础:权限、用户、隔离机制</a>
                        <span class="text-muted">drebander</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>Docker是一个强大的容器化平台,广泛用于开发、部署和运行应用。由于Docker提供了强大的隔离性和便捷的容器管理功能,它成为了现代DevOps和微服务架构的重要组成部分。然而,随着Docker在生产环境中的广泛应用,容器的安全性也变得至关重要。在本文中,我们将探讨Docker的权限管理、用户管理以及隔离机制,帮助开发者更好地理解和实施Docker安全最佳实践。1.Docker安全基础概述Doc</div>
                    </li>
                    <li><a href="/article/1892269925167329280.htm"
                           title="【核心算法篇七】《DeepSeek异常检测:孤立森林与AutoEncoder对比》" target="_blank">【核心算法篇七】《DeepSeek异常检测:孤立森林与AutoEncoder对比》</a>
                        <span class="text-muted">再见孙悟空_</span>
<a class="tag" taget="_blank" href="/search/%E3%80%8C2025/1.htm">「2025</a><a class="tag" taget="_blank" href="/search/DeepSeek%E6%8A%80%E6%9C%AF%E5%85%A8%E6%99%AF%E5%AE%9E%E6%88%98%E3%80%8D/1.htm">DeepSeek技术全景实战」</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/1.htm">计算机视觉</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%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/DeepSeek/1.htm">DeepSeek</a>
                        <div>大家好,今天我们来深入探讨一下《DeepSeek异常检测:孤立森林与AutoEncoder对比》这篇技术博客。我们将从核心内容、原理、应用场景等多个方面进行详细解析,力求让大家对这两种异常检测方法有一个全面而深入的理解。一、引言在数据科学和机器学习领域,异常检测(AnomalyDetection)是一个非常重要的任务。它的目标是从数据集中识别出那些与大多数数据显著不同的异常点。这些异常点可能是由于</div>
                    </li>
                    <li><a href="/article/1892268160229371904.htm"
                           title="STM32启动文件.s解析" target="_blank">STM32启动文件.s解析</a>
                        <span class="text-muted">贾saisai</span>
<a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8FSTM32%E5%8F%8A%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.htm">嵌入式STM32及操作系统</a><a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a>
                        <div>文章目录基本介绍实践详解栈空间开辟堆空间的开辟中断向量表定义复位程序对于_main函数的分析中断服务程序用户堆栈初始化系统启动流程基本介绍启动文件由汇编编写,是系统上电复位后第一个执行的程序。启动文件主要做了以下工作:1、初始化堆栈指针SP=_initial_sp2、初始化程序计数器指针PC=Reset_Handler3、设置堆和栈的大小4、初始化中断向量表5、配置外部SRAM作为数据存储器(可选</div>
                    </li>
                    <li><a href="/article/1892268033989210112.htm"
                           title="跟我一起学Python数据处理(七十四):数据处理工具与网页抓取入门" target="_blank">跟我一起学Python数据处理(七十四):数据处理工具与网页抓取入门</a>
                        <span class="text-muted">lilye66</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/jupyter/1.htm">jupyter</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%88%AC%E8%99%AB/1.htm">爬虫</a>
                        <div>跟我一起学Python数据处理(七十四):数据处理工具与网页抓取入门大家好!一直以来,我都坚信在学习的道路上,相互交流和共同进步是非常重要的。在Python数据处理这片充满挑战与机遇的领域,我也在持续学习和探索,希望借由这一系列的博客,能和大家一起深入钻研,共同成长。在上一篇博客中,我们学习了Jupyternotebook的相关知识,今天咱们接着来了解Python数据处理中的其他关键内容,包括一些</div>
                    </li>
                    <li><a href="/article/1892259454183862272.htm"
                           title="百度智能云千帆 ModelBuilder 技术实践系列:通过 SDK 快速构建并发布垂域模型" target="_blank">百度智能云千帆 ModelBuilder 技术实践系列:通过 SDK 快速构建并发布垂域模型</a>
                        <span class="text-muted">百度智能云技术站</span>
<a class="tag" taget="_blank" href="/search/%E7%99%BE%E5%BA%A6%E6%99%BA%E8%83%BD%E4%BA%91%E5%8D%83%E5%B8%86%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%B9%B3%E5%8F%B0/1.htm">百度智能云千帆大模型平台</a><a class="tag" taget="_blank" href="/search/ModelBuilder/1.htm">ModelBuilder</a><a class="tag" taget="_blank" href="/search/%E7%99%BE%E5%BA%A6/1.htm">百度</a><a class="tag" taget="_blank" href="/search/LLMops/1.htm">LLMops</a><a class="tag" taget="_blank" href="/search/LMops/1.htm">LMops</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E8%AE%AD%E7%BB%83/1.htm">大模型训练</a>
                        <div>百度智能云千帆大模型平台(百度智能云千帆大模型平台ModelBuilder)作为面向企业开发者的一站式大模型开发平台,自上线以来受到了广大开发者、企业的关注。至今已经上线收纳了超过70种预置模型服务,用户可以快速的调用,并部署不同的模型以寻求最适合自身业务的方案。平台提供了全流程大模型开发工具链,为成千上万的应用提供了稳定的大模型平台服务。1千帆SDK简介在平台的基础能力之上,我们围绕大模型工具链</div>
                    </li>
                    <li><a href="/article/1892256428417150976.htm"
                           title="Python从0到100(四):Python中的运算符介绍(补充)" target="_blank">Python从0到100(四):Python中的运算符介绍(补充)</a>
                        <span class="text-muted">是Dream呀</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!欢迎大家订阅专栏:零基础学Python:Python从0到100最新</div>
                    </li>
                    <li><a href="/article/1892256429172125696.htm"
                           title="Python从0到100(三十五):beautifulsoup的学习" target="_blank">Python从0到100(三十五):beautifulsoup的学习</a>
                        <span class="text-muted">是Dream呀</span>
<a class="tag" taget="_blank" href="/search/Dream%E7%9A%84%E8%8C%B6%E8%AF%9D%E4%BC%9A/1.htm">Dream的茶话会</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/beautifulsoup/1.htm">beautifulsoup</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!欢迎大家订阅专栏:零基础学Python:Python从0到100最新</div>
                    </li>
                    <li><a href="/article/1892253651301363712.htm"
                           title="《深入浅出AI》前言知识:深度学习基础总结" target="_blank">《深入浅出AI》前言知识:深度学习基础总结</a>
                        <span class="text-muted">GoAI</span>
<a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BAAI/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/%E6%B7%B1%E5%BA%A6%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/cnn/1.htm">cnn</a><a class="tag" taget="_blank" href="/search/rnn/1.htm">rnn</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%88%90%E5%AF%B9%E6%8A%97%E7%BD%91%E7%BB%9C/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>
                        <div>个人主页:GoAI|公众号:GoAI的学习小屋|交流群:704932595|个人简介:掘金签约作者、百度飞桨PPDE、领航团团长、开源特训营导师、CSDN、阿里云社区人工智能领域博客专家、新星计划计算机视觉方向导师等,专注大数据与人工智能知识分享。AI学习星球推荐:GoAI的学习社区知识星球是一个致力于提供《机器学习|深度学习|CV|NLP|大模型|多模态|AIGC》各个最新AI方向综述、论文等成</div>
                    </li>
                    <li><a href="/article/1892253146307162112.htm"
                           title="Git系列:常用操作一指禅" target="_blank">Git系列:常用操作一指禅</a>
                        <span class="text-muted">来知晓</span>
<a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E6%80%BB%E7%BB%93/1.htm">经验总结</a><a class="tag" taget="_blank" href="/search/Git/1.htm">Git</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81%E6%8F%90%E4%BA%A4/1.htm">代码提交</a><a class="tag" taget="_blank" href="/search/%E7%89%88%E6%9C%AC%E5%9B%9E%E9%80%80/1.htm">版本回退</a><a class="tag" taget="_blank" href="/search/%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93/1.htm">远程仓库</a><a class="tag" taget="_blank" href="/search/%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97/1.htm">操作指南</a>
                        <div>Git操作一指禅远程建仓,本地拉取代码代码提交版本回退其他操作扩展参考Git系列博客:Git系列:GitHub建仓及远端同步步骤总结,linkGit系列:入门必备指令详解,linkGit系列:常用操作一指禅,linkGit系列:常见指令辨析,linkGit系列:常见报错处理,link远程建仓,本地拉取代码gitclonehttps地址或ssh地址gitcheckoutbranch_name##将远</div>
                    </li>
                    <li><a href="/article/1892243824516853760.htm"
                           title="解密Python协程:提升并发编程效率的秘籍" target="_blank">解密Python协程:提升并发编程效率的秘籍</a>
                        <span class="text-muted">爪哇抓挖_Java</span>
<a class="tag" taget="_blank" href="/search/%E6%97%A5%E5%B8%B8/1.htm">日常</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>在现代软件开发中,提升程序的执行效率和响应速度是每个开发者的追求。Python的协程是并发编程领域中的一个强大工具,能显著优化I/O密集型任务和高延迟操作的处理。本篇博客将详细介绍Python协程的工作原理和应用方法,通过具体的代码示例帮助开发者掌握这一技术。###Python协程简介协程,或称微线程,是一种用户态的轻量级线程,Python的协程通过`asyncio`库实现。与传统线程相比,协程在</div>
                    </li>
                    <li><a href="/article/1892243559952740352.htm"
                           title="【鸿蒙系统APP开发实践案例】--第1课时:新闻阅读类行业实践" target="_blank">【鸿蒙系统APP开发实践案例】--第1课时:新闻阅读类行业实践</a>
                        <span class="text-muted">青少年编程作品集</span>
<a class="tag" taget="_blank" href="/search/HarmonyOS/1.htm">HarmonyOS</a><a class="tag" taget="_blank" href="/search/Next%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E6%A1%88%E4%BE%8B/1.htm">Next应用开发案例</a><a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a>
                        <div>简介本设计为新闻日报类应用APP的鸿蒙化架构设计实践,应用设备形态只有手机端,提供新闻日报类应用常见的新闻资讯展示,新闻视频播放,用户评论互动等应用功能。Stage开发模型+声明式UI开发方式。按照应用设备形态,规划一个手机设备Entry类型HAP包。本实践性能优先,应用程序包大小可控,且无单独加载模块场景,业务模块包类型采用HAR包。应用布局说明实践应用框架代码运行图,开发者可以基于框架代码替换</div>
                    </li>
                    <li><a href="/article/1892243181387444224.htm"
                           title="鸿蒙HarmonyOS NEXT实战(5.0)ArkUI开发>共享元素转场动效" target="_blank">鸿蒙HarmonyOS NEXT实战(5.0)ArkUI开发>共享元素转场动效</a>
                        <span class="text-muted">蜡笔小新、没有笔</span>
<a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99%E5%BC%80%E5%8F%91/1.htm">鸿蒙开发</a><a class="tag" taget="_blank" href="/search/OpenHarmony/1.htm">OpenHarmony</a><a class="tag" taget="_blank" href="/search/HarmonyOS/1.htm">HarmonyOS</a><a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a><a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99/1.htm">鸿蒙</a><a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99%E7%B3%BB%E7%BB%9F/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%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a>
                        <div>鸿蒙HarmonyOSNEXT开发实战往期文章必看(持续更新......)HarmonyOSNEXT应用开发性能实践总结HarmonyOSNEXT应用开发案例实践总结合集最新版!“非常详细的”鸿蒙HarmonyOSNext应用开发学习路线!(从零基础入门到精通)非常详细的”鸿蒙HarmonyOSNext应用开发学习路线!共享元素转场是一种界面切换时对相同或者相似的两个元素做的一种位置和大小匹配的过</div>
                    </li>
                    <li><a href="/article/1892235976995041280.htm"
                           title="深入解析 Flutter 性能优化:从原理到实践" target="_blank">深入解析 Flutter 性能优化:从原理到实践</a>
                        <span class="text-muted">陈皮话梅糖@</span>
<a class="tag" taget="_blank" href="/search/flutter/1.htm">flutter</a>
                        <div>深入解析Flutter性能优化:从原理到实践的全面指南Flutter是一个高性能的跨平台框架,但在开发复杂应用时,性能问题仍然可能出现。性能优化是开发高质量Flutter应用的关键。本篇博客将从Flutter的渲染原理出发,结合实际场景,详细分析如何优化Flutter应用的性能,涵盖布局优化、绘制优化、内存优化、网络优化等多个方面。1.Flutter性能优化的核心原理在优化性能之前,我们需要理解F</div>
                    </li>
                    <li><a href="/article/1892235976021962752.htm"
                           title="深入解析 Flutter 高级路由管理:使用 go_router 和 auto_route 实现复杂路由与拦截" target="_blank">深入解析 Flutter 高级路由管理:使用 go_router 和 auto_route 实现复杂路由与拦截</a>
                        <span class="text-muted">陈皮话梅糖@</span>
<a class="tag" taget="_blank" href="/search/flutter/1.htm">flutter</a><a class="tag" taget="_blank" href="/search/%E8%B7%AF%E7%94%B1/1.htm">路由</a><a class="tag" taget="_blank" href="/search/%E8%B7%AF%E7%94%B1%E6%8B%A6%E6%88%AA/1.htm">路由拦截</a>
                        <div>深入解析Flutter高级路由管理:使用go_router和auto_route实现复杂路由与拦截在Flutter中,随着应用规模的增长,路由管理变得越来越复杂。简单的Navigator和命名路由可能难以满足需求,比如嵌套路由、动态路由参数、路由守卫(如登录验证)等。为了解决这些问题,Flutter社区提供了强大的第三方路由库,如go_router和auto_route。本篇博客将深入探讨如何使用</div>
                    </li>
                    <li><a href="/article/1892234713209303040.htm"
                           title="深度学习torch之19种优化算法(optimizer)解析" target="_blank">深度学习torch之19种优化算法(optimizer)解析</a>
                        <span class="text-muted">@Mr_LiuYang</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%BA%E6%96%87%E9%98%85%E8%AF%BB/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/optimizer/1.htm">optimizer</a><a class="tag" taget="_blank" href="/search/Adam/1.htm">Adam</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E7%8E%87%E8%B0%83%E6%95%B4/1.htm">学习率调整</a><a class="tag" taget="_blank" href="/search/%E4%BC%98%E5%8C%96%E7%AE%97%E6%B3%95/1.htm">优化算法</a>
                        <div>提示:有谬误请指正摘要本博客详细介绍了多种常见的深度学习优化算法,包括经典的LBFGS、Rprop、Adagrad、RMSprop、Adadelta、ASGD、Adamax、Adam、AdamW、NAdam、RAdam以及SparseAdam等,通过对这些算法的公式和参数说明进行详细解析,博客旨在为机器学习工程师和研究人员提供清晰的理论指导,帮助读者选择合适的优化算法提升模型训练效率。父类定义Op</div>
                    </li>
                    <li><a href="/article/1892227527162785792.htm"
                           title="HarmonyOS NEXT开发实战(5.0版)List和Scroller从简单到复杂列表布局场景" target="_blank">HarmonyOS NEXT开发实战(5.0版)List和Scroller从简单到复杂列表布局场景</a>
                        <span class="text-muted">代码老出BUG</span>
<a class="tag" taget="_blank" href="/search/OpenHarmony/1.htm">OpenHarmony</a><a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99%E5%BC%80%E5%8F%91/1.htm">鸿蒙开发</a><a class="tag" taget="_blank" href="/search/HarmonyOS/1.htm">HarmonyOS</a><a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a><a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99%E7%B3%BB%E7%BB%9F/1.htm">鸿蒙系统</a><a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99/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><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>鸿蒙NEXT开发实战往期必看文章:HarmonyOSNEXT应用开发案例实践总结合(持续更新......)HarmonyOSNEXT应用开发性能优化实践总结(持续更新......)一分钟了解”纯血版!鸿蒙HarmonyOSNext应用开发!“非常详细的”鸿蒙HarmonyOSNext应用开发学习路线!(从零基础入门到精通)场景描述在多列表页面开发中,数据展示往往有联动关系,场景一:单列表布局多长列</div>
                    </li>
                    <li><a href="/article/1892204459266732032.htm"
                           title="Django 5实用指南(二)项目结构与管理" target="_blank">Django 5实用指南(二)项目结构与管理</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/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>2.1Django5项目结构概述当你创建一个新的Django项目时,Django会自动生成一个默认的项目结构。这个结构是根据Django的最佳实践来设计的,以便开发者能够清晰地管理和维护项目中的各种组件。理解并管理好这些文件和目录结构是Django开发的基础。假设你使用django-adminstartprojectmyproject命令创建了一个新项目,下面是一个典型的Django5项目的文件结</div>
                    </li>
                    <li><a href="/article/1892201434582151168.htm"
                           title="xml:schema详解" target="_blank">xml:schema详解</a>
                        <span class="text-muted">yippeelyl</span>
<a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>XMLSchema详解博客分类:XMLXML数据结构正则表达式Struts什么是Schema?在计算机软件中,Schema这个词在不同的应用中有不同的含义,可以翻译为:架构、结构、规则、模式等。在XML中,Schema指的是定义和描述XML文档的规则,翻译为模式。XMLSchema与DTD的比较我们看例4-3所示的XML文档。例4-3employee.xml张三26zhangsan@sunxin.</div>
                    </li>
                    <li><a href="/article/1892200927050395648.htm"
                           title="Python代码规范:编写优雅且高效的Python代码" target="_blank">Python代码规范:编写优雅且高效的Python代码</a>
                        <span class="text-muted">xl.liu</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83/1.htm">代码规范</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>Python代码规范:编写优雅且高效的Python代码引言Python以其简洁和易读性而闻名,但即使是最简洁的语言也需要遵循一定的编码规范来确保代码的可读性和可维护性。良好的编码习惯不仅有助于个人项目的开发,更是在团队协作中不可或缺的一部分。本文将深入探讨Python代码规范,包括但不限于PEP8标准、GooglePython风格指南以及其他最佳实践。我们将从代码格式、命名规则、文档字符串、注释等</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>