博客单页化实践

半年前,因为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/1950230873060208640.htm"
                           title="你要记住,最重要的是:随时做好准备,为了你可能成为更好的自己,放弃现在的自己。" target="_blank">你要记住,最重要的是:随时做好准备,为了你可能成为更好的自己,放弃现在的自己。</a>
                        <span class="text-muted">霖霖z</span>

                        <div>打卡人:周云日期:2018年11月09日【日精进打卡第180天】【知~学习】《六项精进》0遍共214遍《通篇》1遍共106遍《大学》2遍共347遍《坚强工作,温柔生活》ok《不抱怨的世界》104-108页《经典名句》你要记住,最重要的是:随时做好准备,为了你可能成为更好的自己,放弃现在的自己。【行~实践】一、修身:(对自己个人)1、坚持打卡二、齐家:(对家庭和家人)打扫卫生,接送孩子,洗衣做饭,陪</div>
                    </li>
                    <li><a href="/article/1950228285266915328.htm"
                           title="Git 与 GitHub 的对比与使用指南" target="_blank">Git 与 GitHub 的对比与使用指南</a>
                        <span class="text-muted">一念&</span>
<a class="tag" taget="_blank" href="/search/%E5%85%B6%E5%AE%83/1.htm">其它</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/github/1.htm">github</a>
                        <div>Git与GitHub的对比与使用指南在软件开发中,Git和GitHub是两个密切相关但本质不同的工具。下面我将逐步解释它们的定义、区别、核心概念以及如何协同使用,确保内容真实可靠,基于广泛的技术实践。1.什么是Git?Git是一个分布式版本控制系统,由LinusTorvalds于2005年创建。它的核心功能是跟踪代码文件的变化,帮助开发者管理项目历史记录、协作和回滚错误。Git是开源的,可以在本地</div>
                    </li>
                    <li><a href="/article/1950226643771518976.htm"
                           title="关于流媒体播放器EasyPlayer和EasyPlayerPro的介绍以及其区别" target="_blank">关于流媒体播放器EasyPlayer和EasyPlayerPro的介绍以及其区别</a>
                        <span class="text-muted">EasyDarwin</span>
<a class="tag" taget="_blank" href="/search/EasyDarwin/1.htm">EasyDarwin</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</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%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/ar/1.htm">ar</a>
                        <div>EasyPlayer是一款流媒体播放器系列项目,它支持多种流媒体协议的播放,包括但不限于RTSP、RTMP、HTTP、HLS、UDP、RTP、File等。除此之外,EasyPlayer还支持本地文件播放和多种功能特性,包括本地抓拍、本地录像、播放旋转、多屏播放、倍数播放等。EasyPlayer核心基于ffmpeg,稳定、高效、可靠、可控。随着多年的不断发展和迭代,EasyPlayer基于成功的实践</div>
                    </li>
                    <li><a href="/article/1950218946015719424.htm"
                           title="图论算法经典题目解析:DFS、BFS与拓扑排序实战" target="_blank">图论算法经典题目解析:DFS、BFS与拓扑排序实战</a>
                        <span class="text-muted">周童學</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/1.htm">数据结构与算法</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E4%BC%98%E5%85%88/1.htm">深度优先</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E8%AE%BA/1.htm">图论</a>
                        <div>图论算法经典题目解析:DFS、BFS与拓扑排序实战图论问题是算法面试中的高频考点,本博客将通过四道LeetCode经典题目(均来自"Top100Liked"题库),深入讲解图论的核心算法思想和实现技巧。涵盖DFS、BFS、拓扑排序和前缀树等知识点,每道题配有Java实现和易错点分析。1.岛屿数量(DFS遍历)问题描述给定一个由'1'(陆地)和'0'(水)组成的二维网格,计算岛屿的数量。岛屿由水平或</div>
                    </li>
                    <li><a href="/article/1950218819616174080.htm"
                           title="基于redis的Zset实现作者的轻量级排名" target="_blank">基于redis的Zset实现作者的轻量级排名</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/redis/1.htm">redis</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/%E7%BC%93%E5%AD%98/1.htm">缓存</a>
                        <div>基于redis的Zset实现轻量级作者排名系统在今天的技术架构中,Redis是一种广泛使用的内存数据存储系统,尤其在需要高效检索和排序的场景中表现优异。在本篇博客中,我们将深入探讨如何使用Redis的有序集合(ZSet)构建一个高效的笔记排行榜系统,并提供相关代码示例和详细的解析。1.功能背景与需求假设我们有一个笔记分享平台,用户可以发布各种笔记,系统需要根据用户发布的笔记数量来生成一个实时更新的</div>
                    </li>
                    <li><a href="/article/1950218314064130048.htm"
                           title="Java并发核心:线程池使用技巧与最佳实践! | 多线程篇(五)" target="_blank">Java并发核心:线程池使用技巧与最佳实践! | 多线程篇(五)</a>
                        <span class="text-muted">bug菌¹</span>
<a class="tag" taget="_blank" href="/search/Java%E5%AE%9E%E6%88%98%28%E8%BF%9B%E9%98%B6%E7%89%88%29/1.htm">Java实战(进阶版)</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Java%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8/1.htm">Java零基础入门</a><a class="tag" taget="_blank" href="/search/Java%E5%B9%B6%E5%8F%91/1.htm">Java并发</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B%E6%B1%A0/1.htm">线程池</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%AF%87/1.htm">多线程篇</a>
                        <div>本文收录于「Java进阶实战」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!环境说明:Windows10+IntelliJIDEA2021.3.2+Jdk1.8本文目录前言摘要正文何为线程池?为什么需要线程池?线程池的好处线程池使用场景如何创建线程池?线程池的常见配置源码解析案例分享案例代码演示案例运行</div>
                    </li>
                    <li><a href="/article/1950209621381672960.htm"
                           title="Android 应用权限管理详解" target="_blank">Android 应用权限管理详解</a>
                        <span class="text-muted"></span>

                        <div>文章目录1.权限类型2.权限请求机制3.权限组和分级4.权限管理的演进5.权限监控和SELinux强制访问控制6.应用权限审核和GooglePlayProtect7.开发者最佳实践8.用户权限管理9.Android应用沙箱模型10.ScopedStorage(分区存储)11.背景位置权限(BackgroundLocationAccess)12.权限回收和自动清理13.权限请求的用户体验设计14.G</div>
                    </li>
                    <li><a href="/article/1950208989954371584.htm"
                           title="Selenium 特殊控件操作与 ActionChains 实践详解" target="_blank">Selenium 特殊控件操作与 ActionChains 实践详解</a>
                        <span class="text-muted">小馋喵知识杂货铺</span>
<a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a>
                        <div>1.下拉框单选操作(a)使用SeleniumSelect类(标准HTML标签)Selenium提供了内置的Select类用于操作标准下拉框,这种方式简单且直观。fromselenium.webdriver.support.uiimportSelect#定位下拉框dropdown=Select(driver.find_element("id","dropdown_id"))#通过以下三种方式选择单个</div>
                    </li>
                    <li><a href="/article/1950208983868436480.htm"
                           title="2018-08-29精进打卡" target="_blank">2018-08-29精进打卡</a>
                        <span class="text-muted">米兰王</span>

                        <div>姓名:王兰英【日精进打卡第25天】【知~学习】《六项精进》1遍共39遍《大学》1遍共50遍【经典名句分享】一切都是最好的安排。【行~实践】一、修身:(对自己个人)1,散步1小时。2,每天坚持读书。二、齐家:(对家庭和家人)1,指导孩子开车。2,和家人一起逛超市。三、建功:(对工作)用心做好每件事。{积善}:发愿从2018年8月5日起1年内365个善事。今日1善,累计27善。【省~觉悟】正人先正己。</div>
                    </li>
                    <li><a href="/article/1950205080594608128.htm"
                           title="Deepseek技术深化:驱动大数据时代颠覆性变革的未来引擎" target="_blank">Deepseek技术深化:驱动大数据时代颠覆性变革的未来引擎</a>
                        <span class="text-muted">荣华富贵8</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/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/%E7%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a>
                        <div>在大数据时代,信息爆炸和数据驱动的决策逐渐重塑各行各业。作为一项前沿技术,Deepseek正在引领新一轮技术革新,颠覆传统数据处理与分析方式。本文将从理论原理、应用场景和前沿代码实践三个层面,深入剖析Deepseek技术如何为大数据时代提供颠覆性变革的解决方案。一、技术背景与核心思想1.1大数据挑战与机遇在数据量呈指数级增长的背景下,传统数据处理方法面临数据存储、计算效率和信息提取精度的诸多挑战。</div>
                    </li>
                    <li><a href="/article/1950201675297910784.htm"
                           title="大数据之路:阿里巴巴大数据实践——大数据领域建模综述" target="_blank">大数据之路:阿里巴巴大数据实践——大数据领域建模综述</a>
                        <span class="text-muted"></span>

                        <div>为什么需要数据建模核心痛点数据冗余:不同业务重复存储相同数据(如用户基础信息),导致存储成本激增。计算资源浪费:未经聚合的明细数据直接参与计算(如全表扫描),消耗大量CPU/内存资源。数据一致性缺失:同一指标在不同业务线的口径差异(如“活跃用户”定义不同),引发决策冲突。开发效率低下:每次分析需重新编写复杂逻辑,无法复用已有模型。数据建模核心价值性能提升:分层设计(ODS→DWD→DWS→ADS)</div>
                    </li>
                    <li><a href="/article/1950201675771867136.htm"
                           title="分布式链路追踪系统架构设计:从理论到企业级实践" target="_blank">分布式链路追踪系统架构设计:从理论到企业级实践</a>
                        <span class="text-muted">ma451152002</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</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/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/1.htm">系统架构</a>
                        <div>分布式链路追踪系统架构设计:从理论到企业级实践本文深入探讨分布式链路追踪系统的架构设计原理、关键技术实现和企业级应用实践,为P7架构师提供完整的技术方案参考。目录引言:分布式链路追踪的重要性核心概念与技术原理系统架构设计数据模型与协议标准核心组件架构设计性能优化与扩展性设计企业级实施策略技术选型与对比分析监控与运维体系未来发展趋势P7架构师面试要点引言:分布式链路追踪的重要性微服务架构下的挑战在现</div>
                    </li>
                    <li><a href="/article/1950199406426910720.htm"
                           title="百度地图 雷达/地理编码 功能使用" target="_blank">百度地图 雷达/地理编码 功能使用</a>
                        <span class="text-muted">安卓开发者</span>

                        <div>目录(?)[-]地图雷达基本使用首先你需要在你的API控制台注册你的雷达初始化并注入你的信息开始上传单次上传定时重复上传取回信息打完收工元古巨坑地理编码最近一直在优化软件的bug..然后后面可能又要大改..所以趁这两天有时间赶紧码两篇博文..=.=地图功能可以说是现在APP中最常用的功能…呃..之一..不管是电商,社交,o2o,b2c,p2p,锟斤拷,烫烫烫都需要用地图来辅助..博客里基本的地图实</div>
                    </li>
                    <li><a href="/article/1950199280132222976.htm"
                           title="Android Slices:让应用功能在系统级交互中触手可及" target="_blank">Android Slices:让应用功能在系统级交互中触手可及</a>
                        <span class="text-muted">安卓开发者</span>
<a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/Jetpack/1.htm">Jetpack</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E4%BA%A4%E4%BA%92/1.htm">交互</a><a class="tag" taget="_blank" href="/search/gitee/1.htm">gitee</a>
                        <div>引言在当今移动应用生态中,用户每天要面对数十个甚至上百个应用的选择,如何让自己的应用在关键时刻触达用户,成为开发者面临的重要挑战。Google在Android9Pie中引入的Slices技术,正是为了解决这一痛点而生。本文将全面介绍AndroidSlices的概念、实现方法、应用场景以及最佳实践,帮助开发者掌握这一提升用户参与度的强大工具。什么是AndroidSlices?AndroidSlice</div>
                    </li>
                    <li><a href="/article/1950197387460931584.htm"
                           title="基于DeepSeek的下一代大型游戏开发革命:架构、核心技术与项目管理实践" target="_blank">基于DeepSeek的下一代大型游戏开发革命:架构、核心技术与项目管理实践</a>
                        <span class="text-muted">Liudef06小白</span>
<a class="tag" taget="_blank" href="/search/%E7%89%B9%E6%AE%8A%E4%B8%93%E6%A0%8F/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/AIGC/1.htm">AIGC</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/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/deepseek/1.htm">deepseek</a>
                        <div>基于DeepSeek的下一代大型游戏开发革命:架构、核心技术与项目管理实践DeepSeek大模型正重塑游戏开发范式,本文将深入解析如何利用这一革命性技术构建下一代大型游戏,涵盖从架构设计到项目管理的全流程实践。目录DeepSeek游戏引擎核心架构1.1神经符号系统融合架构1.2动态世界生成引擎智能NPC与剧情系统2.1角色人格建模技术2.2动态叙事生成算法大型项目管理体系3.1敏捷-AI混合开发流</div>
                    </li>
                    <li><a href="/article/1950194868756213760.htm"
                           title="程序员必备:10 个提升代码质量的工具" target="_blank">程序员必备:10 个提升代码质量的工具</a>
                        <span class="text-muted">大力出奇迹985</span>
<a class="tag" taget="_blank" href="/search/%E5%AE%A0%E7%89%A9/1.htm">宠物</a>
                        <div>在软件开发过程中,代码质量对项目的成功起着决定性作用。高质量的代码不仅易于维护和扩展,还能有效降低成本并提升可靠性。本文精心挑选了10个程序员必备工具,助力提升代码质量。这些工具涵盖代码格式化、静态分析、代码审查、测试、性能优化、安全扫描、版本控制、依赖管理、代码生成以及文档生成等多个关键领域。通过使用它们,开发者能够高效地发现并解决代码中的潜在问题,遵循最佳实践,提升代码的可读性、可维护性与安全</div>
                    </li>
                    <li><a href="/article/1950192217708621824.htm"
                           title="lesson20:Python函数的标注" target="_blank">lesson20:Python函数的标注</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录引言:为什么函数标注是现代Python开发的必备技能一、函数标注的基础语法1.1参数与返回值标注1.2支持的标注类型1.3Python3.9+的重大改进:标准集合泛型二、高级标注技巧与最佳实践2.1复杂参数结构标注2.2函数类型与回调标注2.3变量注解与类型别名三、静态类型检查工具应用3.1mypy:最流行的类型检查器3.2Pyright与IDE集成3.3运行时类型验证四、函数标注的工程价值与</div>
                    </li>
                    <li><a href="/article/1950191587556388864.htm"
                           title="C#中的设计模式:构建更加优雅的代码" target="_blank">C#中的设计模式:构建更加优雅的代码</a>
                        <span class="text-muted">Envyᥫᩣᩚ</span>
<a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>C#在面向对象编程(OOP)方面的强大支持,我们可以探讨“C#中的设计模式”。这不仅有助于理解如何更好地组织代码,还能提高代码的可维护性和可扩展性。引言设计模式是软件工程中经过实践验证的解决方案模板,它们提供了一种标准化的方法来解决常见的开发问题。对于使用C#进行开发的程序员来说,理解和应用这些模式可以帮助创建结构良好、易于维护和扩展的应用程序。本文将介绍几种常用的设计模式,并展示如何用C#实现它</div>
                    </li>
                    <li><a href="/article/1950187223672483840.htm"
                           title="GDP经济社会人文民生栅格数据下载网站汇总" target="_blank">GDP经济社会人文民生栅格数据下载网站汇总</a>
                        <span class="text-muted">疯狂学习GIS</span>

                        <div>  本文为“GIS数据获取整理”专栏(https://blog.csdn.net/zhebushibiaoshifu/category_10857546.html)中第八篇独立博客,因此本文全部标题均由“8”开头。本文对目前主要的GDP、社会与经济数据获取网站加以整理与介绍,若需其它GIS领域数据(如遥感影像数据、气象数据、土地土壤数据、农业数据等),大家可以点击上方专栏查看,也可以看这一篇汇总文</div>
                    </li>
                    <li><a href="/article/1950181992104521728.htm"
                           title="《蛤蟆先生去看心理医生》:承担责任2个好处,即促进学习和行动" target="_blank">《蛤蟆先生去看心理医生》:承担责任2个好处,即促进学习和行动</a>
                        <span class="text-muted">王明鹏</span>

                        <div>蛤蟆认识到自我进入成人状态的重大意义,这也是一条没有止境的探索和实践之路,自我成长之路。咨询师苍鹭给出了成人自我状态的解释,那就是承担责任,而且进一步说明担责的2个好处。成年人没有容易的生活,不动声色的冷静之下也在忍受压力,谈笑风生的背后也一样有焦虑,但是人家处理情绪的方式与一般人不同,这个最大不同就是面对、接受,即承担责任。担责带来好处,这个好处反过来又强化了担责的行动,这就是行为学习的解释和应</div>
                    </li>
                    <li><a href="/article/1950179712852619264.htm"
                           title="守住绿色,“妙”手回春" target="_blank">守住绿色,“妙”手回春</a>
                        <span class="text-muted">不知火鸾</span>

                        <div>守住绿色,“妙”手回春为了提高实地考察的效率,尽快了解妙山村的共富特色。2022年7月7日“寻根乡行,青春助力”暑期实践团开展探访妙山村的前期准备工作。参加此次准备工作的主要有两名团队负责人以及路玉呈、俞可欣、陈慧钰这三位团队成员。早上9点,团队负责人通知三位成员参加前期准备会议。此次会议主要围绕“是什么?为什么?做什么?”这几个方面来进行讨论。首先了解妙山村的地理位置以及它的民风民俗,致富特色。</div>
                    </li>
                    <li><a href="/article/1950175199089455104.htm"
                           title="PDF转Markdown - Python 实现方案与代码" target="_blank">PDF转Markdown - Python 实现方案与代码</a>
                        <span class="text-muted">Eiceblue</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/PDF/1.htm">PDF</a><a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a>
                        <div>PDF作为广泛使用的文档格式,转换为轻量级标记语言Markdown后,可无缝集成到技术文档、博客平台和版本控制系统中,提高内容的可编辑性和可访问性。本文将详细介绍如何使用国产Spire.PDFforPython库将PDF文档转换为Markdown格式。技术优势:精准保留原始文档结构(段落/列表/表格)完整提取文本和图像内容无需Adobe依赖的纯Python实现支持Linux/Windows/mac</div>
                    </li>
                    <li><a href="/article/1950169525244719104.htm"
                           title="从零到一:基于差分隐私决策树的客户购买预测系统实战开发" target="_blank">从零到一:基于差分隐私决策树的客户购买预测系统实战开发</a>
                        <span class="text-muted">笙囧同学</span>
<a class="tag" taget="_blank" href="/search/%E5%86%B3%E7%AD%96%E6%A0%91/1.htm">决策树</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a>
                        <div>作者简介:笙囧同学,中科院计算机大模型方向硕士,全栈开发爱好者联系方式:3251736703@qq.com各大平台账号:笙囧同学座右铭:偷懒是人生进步的阶梯文章导航快速导航前言-项目背景与价值项目概览-系统架构与功能技术深度解析-核心算法原理️系统实现详解-工程实践细节性能评估与分析-实验结果分析Web系统开发-前后端开发部署与运维-DevOps实践完整复现指南-手把手教程️实践案例与故障排除-问</div>
                    </li>
                    <li><a href="/article/1950169527287345152.htm"
                           title="基于随机森林的白酒风味智能分类系统:从数据到洞察的完整实践" target="_blank">基于随机森林的白酒风味智能分类系统:从数据到洞察的完整实践</a>
                        <span class="text-muted">笙囧同学</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>作者:笙囧同学|中科院计算机大模型方向硕士|全栈开发爱好者座右铭:偷懒是人生进步的阶梯联系方式:3251736703@qq.com各大平台账号/公众号:笙囧同学前言大家好,我是笙囧同学!今天给大家分享一个超级有趣且技术含量爆表的项目——白酒风味智能分类系统。作为一个既爱技术又爱美酒的程序员,我花了大量时间研究如何用机器学习的方法来"品酒",让AI帮我们识别白酒的风味特征。这个项目融合了机器学习、数</div>
                    </li>
                    <li><a href="/article/1950165856528953344.htm"
                           title="2021.7.1" target="_blank">2021.7.1</a>
                        <span class="text-muted">赵赞成</span>

                        <div>《六项精进》打卡第847天姓名:赵赞成公司:宁波镇海承迪文具有限公司组别:乐观二组【知-学习】背《大学》0遍,共98遍读《六项精进》通篇0遍,共72遍背《六项精进》大纲0遍,共98遍【实践-行】一,修身早睡早起,坚持运动多喝开水二,齐家给老妈打电话,陪叔叔吃饭三:建工做好本职工作【省~觉悟】保持情绪稳定,是一种大智慧。遇到工作难题,既然开心与否都要做,倒不如开开心心地去想解决办法。不要传播负面情绪</div>
                    </li>
                    <li><a href="/article/1950164079310073856.htm"
                           title="把为群众办事落在实处" target="_blank">把为群众办事落在实处</a>
                        <span class="text-muted">胡慧民</span>

                        <div>近日,党史学习教育领导小组印发《关于充分发挥基层党组织战斗堡垒作用和党员先锋模范作用进一步深化党史学习教育“我为群众办实事”实践活动的通知》,指出要充分发挥好基层党组织战斗堡垒作用和党员先锋模范作用,用心用情用力解决基层困难事、群众烦心事,密切党同人民群众的血肉联系,切实在办实事、开新局上取得明显成效。为人民谋幸福是我们党一直以来的初心使命。百年来,中国共产党带领人民推翻三座大山,中国进入人民当家</div>
                    </li>
                    <li><a href="/article/1950162966410227712.htm"
                           title="2025最新系统 Git 教程(七)(完结)" target="_blank">2025最新系统 Git 教程(七)(完结)</a>
                        <span class="text-muted">嘿rasa</span>
<a class="tag" taget="_blank" href="/search/2025%E6%9C%80%E6%96%B0%E6%95%99%E7%A8%8B%E7%B3%BB%E5%88%97/1.htm">2025最新教程系列</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a>
                        <div>第4章分布式Git4.1分布式Git-分布式工作流程你现在拥有了一个远程Git版本库,能为所有开发者共享代码提供服务,在一个本地工作流程下,你也已经熟悉了基本Git命令。你现在可以学习如何利用Git提供的一些分布式工作流程了。这一章中,你将会学习如何作为贡献者或整合者,在一个分布式协作的环境中使用Git。你会学习为一个项目成功地贡献代码,并接触一些最佳实践方式,让你和项目的维护者能轻松地完成这个过</div>
                    </li>
                    <li><a href="/article/1950160572926455808.htm"
                           title="基于STM32设计的LCD指针式电子钟与日历项目" target="_blank">基于STM32设计的LCD指针式电子钟与日历项目</a>
                        <span class="text-muted">鱼弦</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA%E7%B3%BB%E7%BB%9F%E5%90%88%E9%9B%86/1.htm">单片机系统合集</a><a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</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>
                        <div>鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)基于STM32设计的LCD指针式电子钟与日历项目1.介绍基于STM32设计的LCD指针式电子钟与日历项目是一款利用STM32微控制器、LCD显示屏和指针机构实</div>
                    </li>
                    <li><a href="/article/1950153877403791360.htm"
                           title="晴空万里Wendy日更(第47天2021-03-02)" target="_blank">晴空万里Wendy日更(第47天2021-03-02)</a>
                        <span class="text-muted">Wendy如意芳霏</span>

                        <div>今日是生日,到这个年龄过生日变成有点觉得自己又老了一岁。生命如花,如果想要自己的未来在掌控中,最好的办法就是不要担心太多,胆大心细去实践。读了埃隆马斯克母亲的自传,发现他们的人生其实遇到了更多的苦难,但是你一旦克服了,就是生命中的一笔不可磨灭的成就,苦难它让你成长,让你的生命有了更深的底蕴,未来遇到各种困难都不再害怕。其实害怕本来就是负作用。如果认准了,没有选择就放手去一搏。今天继续坚持跑步5公里</div>
                    </li>
                    <li><a href="/article/1950153492207300608.htm"
                           title="2023年3月总结" target="_blank">2023年3月总结</a>
                        <span class="text-muted">卡卡悠悠</span>

                        <div>春风先发苑中梅,樱杏桃李次第开。荠花榆荚深村里,亦道春风为我来。万物在生长,希望也在生长,看看我的3月总结吧。01春“锋”送暖,与爱同行-女儿学校开展爱心义卖活动3月5日学雷锋日前夕,女儿所在的学校号召全体师生学习雷锋精神,并组织了以春"锋“送暖与爱同行为主题的爱心义卖活动,全校师生都积极参加了这次活动。这次爱心义卖活动是学校社会实践部自寒假起即着手筹办的一次活动,听女儿介绍说为了这次活动,同学们</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>