探索WebKit内核(五)------ 智能指针解析:RefCounted, RefPtr, PassRefPtr, OwnPtr和PassOwnPtr

本文将从WebKit源码中解析WebKit智能指针的用法。进入正题之前,先还是要仔细看看官方文档:http://www.webkit.org/coding/RefPtr.html。不管能否看明白还是要先看看这篇文章,毕竟这是本文最主要的参考文档。

文档里已提到2005之前,WebKit基于RefCounted来管理对象的销毁。

RefCounted

RefCounted原理很简单,就是最经典的引用计数的方式。它的源码也很简单,看看它最重要的两个方法,ref和deref:

    void ref()
    {
#if CHECK_REF_COUNTED_LIFECYCLE
        ASSERT(m_verifier.isSafeToUse());
        ASSERT(!m_deletionHasBegun);
        ASSERT(!m_adoptionIsRequired);
#endif
        ++m_refCount;
    }
    void deref()
    {
        if (derefBase())
            delete static_cast(this);
    }
    // Returns whether the pointer should be freed or not.
    bool derefBase()
    {
#if CHECK_REF_COUNTED_LIFECYCLE
        ASSERT(m_verifier.isSafeToUse());
        ASSERT(!m_deletionHasBegun);
        ASSERT(!m_adoptionIsRequired);
#endif

        ASSERT(m_refCount > 0);
        if (m_refCount == 1) {
#if CHECK_REF_COUNTED_LIFECYCLE
            m_deletionHasBegun = true;
#endif
            return true;
        }

        --m_refCount;
#if CHECK_REF_COUNTED_LIFECYCLE
        // Stop thread verification when the ref goes to 1 because it
        // is safe to be passed to another thread at this point.
        if (m_refCount == 1)
            m_verifier.setShared(false);
#endif
        return false;
    }
抛开一些状态的维护不看,它其实就是在调用ref时,内部计数器加1,调用deref时计数器减1,当减到1时,就自动delete。所以一句话,它就是通过内部计数器来判断外部的引用从而实现自动销毁对象。这种方法虽然实现简单,但造成了调用者的麻烦,比如文档里提到的例子:

class Document {
    ...
    Title* m_title;
}

Document::Document()
    : m_title(0)
{
}

Document::~Document()
{
    if (m_title)
        m_title->deref();
}

void Document::setTitle(Title* title)
{
    if (title)
        title->ref();
    if (m_title)
        m_title->deref();
    m_title = title;
}

简单的一个set方法,就需要来回调用ref和deref,在更复杂的场景下难免导致ref和deref的不对称,从而造成本该销毁却没销毁,或是错销毁的情况。后来,WebKit就引入了RefPtr, PassRefPtr, OwnPtr和PassOwnPtr来解决这个问题。

RefPtr和PassRefPtr

RefPtr的思路很简单,就是要把上面例子自动化,自动地在各项操作中加上deref和ref,先来看看它最关键几个方法的源码:

    template inline RefPtr& RefPtr::operator=(T* optr)
    {
        refIfNotNull(optr);
        T* ptr = m_ptr;
        m_ptr = optr;
        derefIfNotNull(ptr);
        return *this;
    }

    ALWAYS_INLINE RefPtr(T* ptr) : m_ptr(ptr) { refIfNotNull(ptr); }
看字面意思就能很清楚的知道,当把一个对象赋值给RefPtr包装过的对象后,它会先被赋值的对象ref,然后再给自己原来的对象deref,这实际上就是上例中setTitle的过程,所以改写后就极大简洁了代码:

class Document {
    ...
    RefPtr m_title;
}

void Document::setTitle(Title* title)
{
    m_title = title;
}</code></pre>但这虽然简洁了代码,但没有简洁代码实际的执行过程,所以文档里就提到了频繁ref和deref的问题,比如以下代码: 
  <p></p> 
  <pre><code class="language-cpp">RefPtr<Node> createSpecialNode()
{
    RefPtr<Node> a = new Node;
    a->setSpecial(true);
    return a;
}

RefPtr<Node> b = createSpecialNode();</code></pre>这段代码最终的结果是Node对象的引用为1,但结合RefPtr的源码,我们可知,其中会有多次来回的ref和deref,文档里也解释了这个过程。所以就需要一种机制来做到参数传递时可以附带传递引用值,而不是通过正负抵消的方式来保证引用的不变,这就是PassRefPtr存在的价值。现在看看PassRefPtr几个关键方法的源码: 
  <p></p> 
  <pre><code class="language-cpp">template<typename T> inline PassRefPtr<T> adoptRef(T* p)
    {
        adopted(p);
        return PassRefPtr<T>(p, true);
    }

PassRefPtr(T* ptr, bool) : m_ptr(ptr) { }

PassRefPtr& operator=(const PassRefPtr&) { COMPILE_ASSERT(!sizeof(T*), PassRefPtr_should_never_be_assigned_to); return *this; }</code></pre> 
  <pre><code class="language-cpp">template<typename T> inline T* PassRefPtr<T>::leakRef() const
    {
        T* ptr = m_ptr;
        m_ptr = 0;
        return ptr;
    }
</code></pre> 
  <p>从中可以知道,PassRefPtr主要用于参数传递中,当传递完成后,被PassRefPtr包装的对象就会被销毁,并且整个过程中不改变对象引用。那么基于PassRefPtr重构上例的代码:</p> 
  <p></p> 
  <pre><code class="language-cpp">PassRefPtr<Node> Node::create()
{
    return adoptRef(new Node);
}

RefPtr<Node> e = Node::create();</code></pre>最终效果就是Node的引用为1,并且中间没有引用的变化。但是,PassRefPtr是不能替代RefPtr的,因为被赋值后,它就是的NULL了,再调用就会有空指针的错误。所以它们俩的引用场景很明确: 
  <p></p> 
  <ul> 
   <li>RefPtr:用于希望能自动管理对象回收的地方。</li> 
   <li>PassRefPtr:用于方法参数和返回值参数上。</li> 
  </ul>两者总是配合使用。 
  <p>RefPtr和PassRefPtr都是从RefCounted演变而来,并且只能用于继承自RefCounted的对象,所以有一定的局限性,也就有了OwnPtr和PassOwnPtr用武之地。</p> 
  <h1>OwnPtr和PassOwnPtr</h1> 
  <p>OwnPtr不是基于计数来管理对象销毁,它简单又暴力,先看看它几个关键方法的源码:</p> 
  <p></p> 
  <pre><code class="language-cpp">    template<typename T> template<typename U> inline OwnPtr<T>::OwnPtr(const PassOwnPtr<U>& o)
        : m_ptr(o.leakPtr())
    {
    }

    template<typename T> inline PassOwnPtr<T> OwnPtr<T>::release()
    {
        PtrType ptr = m_ptr;
        m_ptr = 0;
        return adoptPtr(ptr);
    }

    template<typename T> inline OwnPtr<T>& OwnPtr<T>::operator=(const PassOwnPtr<T>& o)
    {
        PtrType ptr = m_ptr;
        m_ptr = o.leakPtr();
        ASSERT(!ptr || m_ptr != ptr);
        deleteOwnedPtr(ptr);
        return *this;
    }</code></pre> 
  <br>它的语义就是这个对象仅仅只能由我来管理,别人都不能引用,别人赋值给我,就自动赋值为NULL,仅我拥有此对象的引用,当我的作用域完了后,会自动销毁。它比较适合不是从RefCounted继承下来的对象,并且生命周期由我控制的场景。 
  <p>好了,经过上面的分析,基本上把WebKit的智能指针的原理和使用场景搞清楚了。得到的启发是,C++内存管理固然复杂,但也有简单的方法来控制这个复杂的范围的。</p> 
  <br> 
  <br> 
  <br> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1187722727058939904"></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/1896820436621127680.htm"
                           title="Linux(Centos 7.6)命令详解:mv" target="_blank">Linux(Centos 7.6)命令详解:mv</a>
                        <span class="text-muted">豆是浪个</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>1.命令作用将源文件/目录重命名为目标文件/目录,或将源文件/目录移动到其他目录(RenameSOURCEtoDEST,ormoveSOURCE(s)toDIRECTORY.)。2.命令语法Usage:mv[OPTION]...[-T]SOURCEDESTor:mv[OPTION]...SOURCE...DIRECTORYor:mv[OPTION]...-tDIRECTORYSOURCE...3.</div>
                    </li>
                    <li><a href="/article/1896806817191751680.htm"
                           title="移动端iOS网页收起键盘底部有空白、软键盘弹起遮挡输入框等问题" target="_blank">移动端iOS网页收起键盘底部有空白、软键盘弹起遮挡输入框等问题</a>
                        <span class="text-muted">漂移的电子</span>
<a class="tag" taget="_blank" href="/search/iOS%2FAndroid/1.htm">iOS/Android</a><a class="tag" taget="_blank" href="/search/iOS/1.htm">iOS</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E9%94%AE%E7%9B%98/1.htm">软键盘</a><a class="tag" taget="_blank" href="/search/%E7%A7%BB%E5%8A%A8%E7%AB%AF/1.htm">移动端</a>
                        <div>1、移动端iOS网页收起键盘底部有空白:失焦的时候把窗口滚动位置设置到(0,0)就行了2、iOShtml5移动端软键盘弹起遮挡输入框:2.1、Element.scrollIntoViewIfNeeded()方法用来将不在浏览器窗口的可见区域内的元素滚动到浏览器窗口的可见区域。constinput=document.getElementsByTagName('input')[0];setTimeou</div>
                    </li>
                    <li><a href="/article/1896785124154994688.htm"
                           title="两轮车无钥匙启动系统‌" target="_blank">两轮车无钥匙启动系统‌</a>
                        <span class="text-muted">zsmydz888</span>
<a class="tag" taget="_blank" href="/search/%E6%91%A9%E6%89%98%E8%BD%A6%E4%B8%80%E9%94%AE%E5%90%AF%E5%8A%A8/1.htm">摩托车一键启动</a><a class="tag" taget="_blank" href="/search/%E8%BD%A6%E8%81%94%E7%BD%91%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/1.htm">车联网解决方案</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>两轮车无钥匙进入一键启动系统‌主要通过RFID无线射频技术和车辆身份编码识别系统实现,用户只需携带智能钥匙靠近车辆,系统会自动感应并解除防盗,按下启动按钮即可启动车辆,无需插钥匙‌。移动管家两轮车无钥匙启动系统与汽车的无钥匙启动系统类似,是一种便捷、先进的车辆启动方式,以下是其相关介绍:定义两轮车无钥匙启动系统是指启动两轮车(如摩托车、电动车等)时不用掏拧钥匙,把钥匙放在包内或口袋里,按下车内相应</div>
                    </li>
                    <li><a href="/article/1896752717628502016.htm"
                           title="Chrome下载视频的插件" target="_blank">Chrome下载视频的插件</a>
                        <span class="text-muted">爱编程的喵喵</span>
<a class="tag" taget="_blank" href="/search/Windows%E5%AE%9E%E7%94%A8%E6%8A%80%E5%B7%A7/1.htm">Windows实用技巧</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a><a class="tag" taget="_blank" href="/search/%E4%B8%8B%E8%BD%BD%E8%A7%86%E9%A2%91/1.htm">下载视频</a>
                        <div>  大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理解,而且能够帮助新手快速入门。  本文主要介绍了Chrome下载视频的插件,希望能对</div>
                    </li>
                    <li><a href="/article/1896746538869256192.htm"
                           title="期权帮|沪深300股指期货合约技巧有哪些?" target="_blank">期权帮|沪深300股指期货合约技巧有哪些?</a>
                        <span class="text-muted">qiquandongkh</span>
<a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E9%87%91%E8%9E%8D/1.htm">金融</a>
                        <div>锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯!沪深300股指期货合约技巧有哪些?沪深300指数,代表了中国A股市场整体表现。沪深300指数的交割制度,采用现金交割方式,交割日为每月第三个周五。沪深300指数的交易时间是上午9:30至11:30,下午13:00至15:00,无夜盘交易。一、沪深300指数的技术分析:(1)移动平均线:用于判断市场趋势,短期均线(如5日均线)上穿</div>
                    </li>
                    <li><a href="/article/1896743135275446272.htm"
                           title="响应式布局:构建适应多设备的现代网页" target="_blank">响应式布局:构建适应多设备的现代网页</a>
                        <span class="text-muted">lina_mua</span>
<a class="tag" taget="_blank" href="/search/css3/1.htm">css3</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a>
                        <div>1.引言1.1响应式布局的重要性随着移动设备的普及,用户访问网页的方式变得多样化。响应式布局(ResponsiveDesign)能够确保网站在不同设备(如桌面、平板、手机)上都能提供良好的用户体验。它不仅是现代前端开发的标配,也是提升用户满意度和SEO排名的重要手段。1.2本文的目标本文旨在深入探讨响应式布局的核心概念、实现技术、实用技巧以及最佳实践,帮助开发者构建适应多设备的现代网页。2.响应式</div>
                    </li>
                    <li><a href="/article/1896741999340482560.htm"
                           title="c++之移动构造函数或者移动赋值运算符的作用" target="_blank">c++之移动构造函数或者移动赋值运算符的作用</a>
                        <span class="text-muted">_DCG_</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%A7%BB%E5%8A%A8%E6%9E%84%E9%80%A0/1.htm">移动构造</a>
                        <div>原理介绍前面的文章中有的涉及到了移动构造函数或者移动赋值运算符,对于它们的形式有了一定的了解,但是对他们的核心作用以及为什么要引入这两个东东,很多朋友还是一知半解。本文就是来解决这个问题的。要理解这个问题绕不开右值引用,c++11之前的版本中只有拷贝构造函数,而拷贝构造函数是一般会深拷贝,即会创建两个完全一样的对象,包括指针指向的区域都会进行重新申请内存和拷贝。这种情况下如果对象是一个大数组或占用</div>
                    </li>
                    <li><a href="/article/1896690185106681856.htm"
                           title="Qt5编译qmqtt库使用MQTT协议连接华为云IOT完成数据上传与交互" target="_blank">Qt5编译qmqtt库使用MQTT协议连接华为云IOT完成数据上传与交互</a>
                        <span class="text-muted">DS小龙哥</span>
<a class="tag" taget="_blank" href="/search/QT%28C%2B%2B%29%E5%BA%94%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91/1.htm">QT(C++)应用软件开发</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA%E4%BA%91/1.htm">华为云</a><a class="tag" taget="_blank" href="/search/%E7%89%A9%E8%81%94%E7%BD%91/1.htm">物联网</a><a class="tag" taget="_blank" href="/search/qmqtt/1.htm">qmqtt</a>
                        <div>一、前言随着物联网技术的发展,越来越多的设备通过网络互相连接,形成了庞大的智能系统。这些系统能够收集、分析并响应各种数据,从而实现自动化控制和智能化管理。在这个背景下,MQTT成为了一个广泛使用的轻量级消息传输协议,特别适用于资源受限的环境,如移动应用或远程传感器网络。MQTT的设计原则是低带宽、低延迟以及最小化网络流量,这使得它成为物联网场景中的理想选择。Qt是一个跨平台的应用程序开发框架,被广</div>
                    </li>
                    <li><a href="/article/1896689051050766336.htm"
                           title="嵌入式Qt5编译qmqtt库使用MQTT协议连接华为云IOT" target="_blank">嵌入式Qt5编译qmqtt库使用MQTT协议连接华为云IOT</a>
                        <span class="text-muted">嵌入式开发星球</span>
<a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA%E4%BA%91/1.htm">华为云</a><a class="tag" taget="_blank" href="/search/%E7%89%A9%E8%81%94%E7%BD%91/1.htm">物联网</a>
                        <div>一、前言随着物联网技术的发展,越来越多的设备通过网络互相连接,形成了庞大的智能系统。这些系统能够收集、分析并响应各种数据,从而实现自动化控制和智能化管理。在这个背景下,MQTT成为了一个广泛使用的轻量级消息传输协议,特别适用于资源受限的环境,如移动应用或远程传感器网络。MQTT的设计原则是低带宽、低延迟以及最小化网络流量,这使得它成为物联网场景中的理想选择。Qt是一个跨平台的应用程序开发框架,被广</div>
                    </li>
                    <li><a href="/article/1896682115915902976.htm"
                           title="【弹性计算】弹性裸金属服务器和神龙虚拟化(一):功能特点" target="_blank">【弹性计算】弹性裸金属服务器和神龙虚拟化(一):功能特点</a>
                        <span class="text-muted">G皮T</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/%E5%BC%B9%E6%80%A7%E8%AE%A1%E7%AE%97/1.htm">弹性计算</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">云服务器</a><a class="tag" taget="_blank" href="/search/%E8%A3%B8%E9%87%91%E5%B1%9E%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">裸金属服务器</a><a class="tag" taget="_blank" href="/search/%E5%BC%B9%E6%80%A7%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">弹性服务器</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E4%BA%91/1.htm">阿里云</a>
                        <div>《弹性裸金属服务器》系列,共包含以下文章:弹性裸金属服务器和神龙虚拟化(一):功能特点弹性裸金属服务器和神龙虚拟化(二):适用场景弹性裸金属服务器和神龙虚拟化(三):弹性裸金属技术如果您觉得这篇文章有用✔️的话,请给博主一个一键三连吧(点赞、关注、收藏)!!!您的支持将激励博主输出更多优质内容!!!弹性裸金属服务器和神龙虚拟化(一):功能特点特征一:分钟级交付特征二:兼容VPC、SLB、RDS等云</div>
                    </li>
                    <li><a href="/article/1896631680572125184.htm"
                           title="flutter实战!2021年Android网络编程总结篇,移动架构师成长路线" target="_blank">flutter实战!2021年Android网络编程总结篇,移动架构师成长路线</a>
                        <span class="text-muted">椰果学Android</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                        <div>什么是中年危机根据权威数据显示,国内IT程序员鼎盛时期是在25-27岁左右,30岁对于程序员而言完全是一个38线,接着就是转业转岗的事情,这一点在业界也算是一个共识了。大学毕业步入IT行业普遍年龄也是在22岁左右,然而22-30岁之间也就是8年左右的时间,那么27岁也就是职业生涯“中年”的开始,那么作为程序员的你有准备好如何度过“中年危机”吗?当程序猿到了28岁左右的“中年危机”就不一样了,这个年</div>
                    </li>
                    <li><a href="/article/1896621465495728128.htm"
                           title="蓝易云 - 浅谈Spring与字节码生成技术" target="_blank">蓝易云 - 浅谈Spring与字节码生成技术</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/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>Spring是一个开源的Java应用框架,用于构建企业级应用程序。它提供了许多功能,包括依赖注入、面向切面编程、事务管理等,以简化开发过程。字节码生成技术是Spring框架中的一个重要组成部分,用于在运行时创建和修改Java类的字节码。Spring利用字节码生成技术来实现以下功能:1.依赖注入(DependencyInjection):Spring使用字节码生成技术创建代理类,将依赖注入到目标对象</div>
                    </li>
                    <li><a href="/article/1896615411340865536.htm"
                           title="汇编移位指令SHR,SAR,SAL/SHL,ROR,ROL,RCR,RCL" target="_blank">汇编移位指令SHR,SAR,SAL/SHL,ROR,ROL,RCR,RCL</a>
                        <span class="text-muted">小萌新上大分</span>
<a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96%E7%A7%BB%E4%BD%8D%E6%8C%87%E4%BB%A4/1.htm">汇编移位指令</a><a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96%E5%BE%AA%E7%8E%AF%E7%A7%BB%E4%BD%8D%E6%8C%87%E4%BB%A4/1.htm">汇编循环移位指令</a><a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96shl%E6%8C%87%E4%BB%A4%E7%94%A8%E6%B3%95/1.htm">汇编shl指令用法</a><a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96sal%E6%8C%87%E4%BB%A4/1.htm">汇编sal指令</a><a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96%E7%A7%BB%E4%BD%8D%E8%BF%90%E7%AE%97/1.htm">汇编移位运算</a>
                        <div>目录逻辑右移SHR算数右移SAR(重点)算数/逻辑左移SAL/SHL(完成的操作都一样)循环右移ROR循环左移ROL带进位循环右移RCR带进位循环左移RCL总结例题一二移位指令为双操作数指令,用于将目的的操作数中的二进制数移位。目的操作数只能是寄存器或内存源操作数为移位的次数,只能是CL寄存器或者立即数1移动完,CL的值不变逻辑右移SHRshiftright无符号数除以2MOVAL,10SHRAL</div>
                    </li>
                    <li><a href="/article/1896612005075283968.htm"
                           title="【ESP 保姆级教程】玩转巴法云篇② ——MQTT设备云,MQTT协议下的数据通信(ESP32版本)" target="_blank">【ESP 保姆级教程】玩转巴法云篇② ——MQTT设备云,MQTT协议下的数据通信(ESP32版本)</a>
                        <span class="text-muted">单片机菜鸟哥</span>
<a class="tag" taget="_blank" href="/search/ESP8266%2FESP32/1.htm">ESP8266/ESP32</a><a class="tag" taget="_blank" href="/search/%E4%BF%9D%E5%A7%86%E7%BA%A7%E6%95%99%E7%A8%8B300%E7%AF%87/1.htm">保姆级教程300篇</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a>
                        <div>忘记过去,超越自己❤️博客主页单片机菜鸟哥,一个野生非专业硬件IOT爱好者❤️❤️本篇创建记录2023-03-30❤️❤️本篇更新记录2023-03-30❤️欢迎关注点赞收藏⭐️留言此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!ArduinoESP8266教程累计帮助过超过1W+同学入门学习硬件网络编程,入选过选修课程,刊登过无线电杂志菜鸟项目合集快</div>
                    </li>
                    <li><a href="/article/1896607845227491328.htm"
                           title="Rust和Springboot 开发开发一款家庭菜谱日日新App" target="_blank">Rust和Springboot 开发开发一款家庭菜谱日日新App</a>
                        <span class="text-muted">Geeker-2025</span>
<a class="tag" taget="_blank" href="/search/rust/1.htm">rust</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a>
                        <div>开发一款家庭菜谱日日新App,结合Rust和SpringBoot的优势,可以构建一个高性能、可扩展且功能丰富的应用。以下是一个高层次的设计概述,涵盖主要的技术栈和功能模块,并提供使用Rust和SpringBoot联合开发的示例。##技术栈概述###前端-**语言**:JavaScript(ReactNative或Flutter,用于跨平台移动应用开发)-**功能**:用户界面、交互逻辑、菜谱展示、</div>
                    </li>
                    <li><a href="/article/1896603681042788352.htm"
                           title="java容器 LIst、set、Map" target="_blank">java容器 LIst、set、Map</a>
                        <span class="text-muted">大丈夫在世当日食一鲲</span>
<a class="tag" taget="_blank" href="/search/%E4%B8%AA%E4%BA%BAjava%E5%AD%A6%E4%B9%A0%E5%B0%8F%E7%BB%93/1.htm">个人java学习小结</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/list/1.htm">list</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>Java容器中的List、Set、Map是核心数据结构,各自适用于不同的场景一、List(有序、可重复)List接口代表有序集合,允许元素重复和通过索引访问,主要实现类包括:ArrayList底层结构:动态数组实现。特点:支持快速随机访问(时间复杂度O(1)),但插入/删除元素时需要移动数组,效率较低(时间复杂度O(n))。适用场景:读多写少,需频繁按索引查询的场景,如数据缓存。LinkedLis</div>
                    </li>
                    <li><a href="/article/1896597626481078272.htm"
                           title="面向云原生的SRE —— 云原生架构概览、Kubernates" target="_blank">面向云原生的SRE —— 云原生架构概览、Kubernates</a>
                        <span class="text-muted">AI天才研究院</span>
<a class="tag" taget="_blank" href="/search/Python%E5%AE%9E%E6%88%98/1.htm">Python实战</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E5%AE%9E%E8%B7%B5/1.htm">编程实践</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">架构设计</a>
                        <div>作者:禅与计算机程序设计艺术1.简介1.1什么是云原生计算基建?云原生计算基建(CloudNativeComputingFoundation)是一个由Linux基金会管理的开源项目,致力于构建和维护一个厂商中立、应用程序友好的平台,提供跨公共或私有云环境的应用程序部署、管理和运行服务,通过自动化手段使企业节省更多时间、降低运营成本并提升客户满意度。该项目的目的是通过定义云原生应用(Cloudnat</div>
                    </li>
                    <li><a href="/article/1896585777106710528.htm"
                           title="C语言入门第十四天指针运算,指针和数组" target="_blank">C语言入门第十四天指针运算,指针和数组</a>
                        <span class="text-muted">Do vis824</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一:指针运算1:指针运算是以指针变量所存放的地址量作为运算量而进行的运算2:指针运算的实质就是地址的计算3:指针运算的种类是有限的,它只能进行赋值运算、算数运算和关系运算。4:指针的运算表达+px+n指针向地址大的方向移动n个数据、-px-n指针向地址小的方向移动n个数据++px++或++px指针向地址大的方向移动1个数据--px--或--px指针向地址小的方向移动1个数据·px·py两个指针之间</div>
                    </li>
                    <li><a href="/article/1896568503201230848.htm"
                           title="感觉2012年跟现在2025年生活差别不大,该有的那时都有了,形态也没有发生巨大变化" target="_blank">感觉2012年跟现在2025年生活差别不大,该有的那时都有了,形态也没有发生巨大变化</a>
                        <span class="text-muted">ZhuBin365</span>
<a class="tag" taget="_blank" href="/search/%E5%85%B6%E5%AE%83/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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>2012年的主流科技产品与衣食住行一、主流科技产品2012年是智能设备与移动互联网发展的关键年份,科技产品在硬件性能、软件生态和跨领域融合上均有显著突破。以下是分类整理的代表性产品与系统:1.智能手机与操作系统iPhone5:苹果推出的首款支持4G网络的手机,搭载iOS6系统,屏幕升级为4英寸,采用Lightning接口,成为全球畅销机型。三星GalaxySIII:安卓阵营的旗舰机型,配备4.8英</div>
                    </li>
                    <li><a href="/article/1896567998957809664.htm"
                           title="Kotlin快速入门指南:运算符重载与移动端开发" target="_blank">Kotlin快速入门指南:运算符重载与移动端开发</a>
                        <span class="text-muted">UqndTf__</span>
<a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</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/android/1.htm">android</a>
                        <div>Kotlin是一门现代化的跨平台编程语言,广泛应用于移动端开发。本文将为您提供一份详细的Kotlin快速入门指南,重点介绍运算符重载的使用和移动端开发的相关内容。我们将通过实例代码来帮助您更好地理解这些概念。运算符重载在Kotlin中,运算符可以被重载,使得它们可以用于不同的数据类型或自定义的类。这种特性可以提高代码的可读性和简洁性。下面我们将通过几个例子来演示如何重载运算符。1.加法运算符重载我</div>
                    </li>
                    <li><a href="/article/1896557279973535744.htm"
                           title="我用trae写了个贪吃蛇" target="_blank">我用trae写了个贪吃蛇</a>
                        <span class="text-muted">东方佑</span>
<a class="tag" taget="_blank" href="/search/%E9%87%8F%E5%AD%90%E5%8F%98%E6%B3%95/1.htm">量子变法</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                        <div>代码贪吃蛇游戏按空格开始游戏操作说明:方向键控制移动空格开始/重新开始得分:0游戏结束!按空格重新开始//游戏初始化配置letisPlaying=false;constcanvas=document.getElementById('gameCanvas');constctx=canvas.getContext('2d');constGRID_SIZE=20;letsnake=[{x:10,y:10</div>
                    </li>
                    <li><a href="/article/1896549840750440448.htm"
                           title="Golang应用开发-云原生应用开发" target="_blank">Golang应用开发-云原生应用开发</a>
                        <span class="text-muted">caihuayuan4</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98%E6%B1%87%E6%80%BB%E4%B8%8E%E8%A7%A3%E6%9E%90/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/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>1什么是云原生云原生是一种面向云环境的应用程序开发和部署方法论,旨在提高应用程序的可伸缩性、弹性和可维护性,使应用程序更好地适应云环境中的变化和需求。云原生应用程序通常是以微服务为基础,通过容器化和自动化部署来实现快速部署和可扩展性。云原生应用程序的设计和开发必须考虑以下关键特性:容器化:使用容器技术将应用程序和其依赖项打包在一起,以实现可移植性和跨平台性。自动化部署:使用自动化工具和流程来简化部</div>
                    </li>
                    <li><a href="/article/1896549462554243072.htm"
                           title="物联网P7第六单元 初识Flutter" target="_blank">物联网P7第六单元 初识Flutter</a>
                        <span class="text-muted">安卓飞</span>
<a class="tag" taget="_blank" href="/search/Android%E6%9E%B6%E6%9E%84/1.htm">Android架构</a><a class="tag" taget="_blank" href="/search/%E6%B7%B7%E5%90%88%E5%BC%80%E5%8F%91/1.htm">混合开发</a>
                        <div>文章目录一、Flutter的特点与核心概念二、开发环境搭建三、第一个Flutter程序四、Flutter主题五、无状态组件和有状态组件一、Flutter的特点与核心概念什么是Flutter(1)官方解释Flutter是Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过Dart语言开发App,一套代码同时运行在iOS和Android平台。Flutter提供了丰富的组</div>
                    </li>
                    <li><a href="/article/1896548452423233536.htm"
                           title="初识flutter" target="_blank">初识flutter</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/flutter/1.htm">flutter</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                        <div>文章目录初识flutter什么是flutter?为什么选择了解flutter配置环境配置android开发环境初识flutter什么是flutter?Flutter是由Google开发和提供支持的开源框架。前端和全栈开发人员使用Flutter为具备单一代码库的多个平台构建应用程序的用户界面(UI)。在2018年推出时,Flutter主要支持移动应用程序开发。Flutter目前支持在六个平台上进行应</div>
                    </li>
                    <li><a href="/article/1896546685128077312.htm"
                           title="Flutter学习(1)初识Flutter,微信小程序的事件处理" target="_blank">Flutter学习(1)初识Flutter,微信小程序的事件处理</a>
                        <span class="text-muted">2401_84149765</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/flutter/1.htm">flutter</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a>
                        <div>Flutter是Google发布的一个用于创建跨平台、高性能移动应用的框架。现在移动平台下的App,分为原生开发和混生开发,他们是这样定义的:1.原生开发一个平台,有其支持的一整套框架。比如Android平台,它有自己的语言Java、Kotlin,有自己的一整API—AndroidSDK。通过这一套框架,就能够实现一个应用开发。比如IOS平台,它有OC、Swift,通过IOSSDK来实现一个应用。</div>
                    </li>
                    <li><a href="/article/1896540879309565952.htm"
                           title="手把手教你三步快速上手Spring AI + 阿里大模型" target="_blank">手把手教你三步快速上手Spring AI + 阿里大模型</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/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/JAVA/1.htm">JAVA</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大模型</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/AI%E7%BC%96%E7%A8%8B/1.htm">AI编程</a>
                        <div>1、环境准备1.1、获取APIKey如果没有阿里云账号,可以登录阿里云注册账号,可以使用手机号或者支付宝、淘宝或者邮箱等注册账号。注册好账号后登录阿里云,进入我的APIKey界面,创建APIKey,通过查看可以获取创建的APIKey。1.2、APIKey配置官方建议把APIKey配置到环境变量,从而避免在代码里显式地配置APIKey,降低泄漏风险。在Windows系统桌面中按Win+Q键,在搜索框</div>
                    </li>
                    <li><a href="/article/1896532426608406528.htm"
                           title="DeepSeek架构革命:动态异构计算" target="_blank">DeepSeek架构革命:动态异构计算</a>
                        <span class="text-muted">伏羲栈</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分</div>
                    </li>
                    <li><a href="/article/1896519815368077312.htm"
                           title="前端开发全攻略:从兼容性到安全性,全方位解决常见问题!" target="_blank">前端开发全攻略:从兼容性到安全性,全方位解决常见问题!</a>
                        <span class="text-muted">奶凶的小熊崽</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a>
                        <div>1.兼容性问题问题表现:不同浏览器解析HTML、CSS、JavaScript可能存在差异。IE、Safari等浏览器对某些新特性支持不足。移动端与PC端的适配问题。解决方案:✅CSS兼容性处理:使用CSSReset或Normalize.css统一默认样式。使用flexbox、grid代替float,减少布局兼容问题。使用前缀自动补全(如PostCSS的autoprefixer)。✅JavaScri</div>
                    </li>
                    <li><a href="/article/1896507081209475072.htm"
                           title="数据库管理-第295期 IT架构与爆炸半径(20250221)" target="_blank">数据库管理-第295期 IT架构与爆炸半径(20250221)</a>
                        <span class="text-muted">胖头鱼的鱼缸(尹海文)</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>数据库管理295期2025-02-21数据库管理-第295期架构与爆炸半径(20250221)1术语新解2硬件:存储VS本地盘3数据库3.1多模VS专用3.2集中式VS分布式4公有云VS非公有云总结数据库管理-第295期架构与爆炸半径(20250221)作者:胖头鱼的鱼缸(尹海文)OracleACEPro:DatabasePostgreSQLACEPartner10年数据库行业经验拥有OCM11g</div>
                    </li>
                    <li><a href="/article/1896506828011925504.htm"
                           title="如何将 Excel 数据转换为 SQL 脚本:从入门到实战" target="_blank">如何将 Excel 数据转换为 SQL 脚本:从入门到实战</a>
                        <span class="text-muted">web15085096641</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/1.htm">学习路线</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4/1.htm">阿里巴巴</a><a class="tag" taget="_blank" href="/search/excel/1.htm">excel</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>全文目录:开篇语?前言??目录??什么是SQL脚本???为什么要将Excel转换为SQL脚本????如何将Excel转换为SQL脚本??方法一:使用在线转换工具??方法二:通过ExcelVBA编写脚本??方法三:利用Python脚本实现转换??实战演示案例??拓展阅读??总结文末开篇语哈喽,各位小伙伴们,你们好呀,我是。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛今天</div>
                    </li>
                                <li><a href="/article/15.htm"
                                       title="Spring4.1新特性——Spring MVC增强" target="_blank">Spring4.1新特性——Spring MVC增强</a>
                                    <span class="text-muted">jinnianshilongnian</span>
<a class="tag" taget="_blank" href="/search/spring+4.1/1.htm">spring 4.1</a>
                                    <div>目录 
Spring4.1新特性——综述 
Spring4.1新特性——Spring核心部分及其他 
Spring4.1新特性——Spring缓存框架增强 
Spring4.1新特性——异步调用和事件机制的异常处理 
Spring4.1新特性——数据库集成测试脚本初始化 
Spring4.1新特性——Spring MVC增强 
Spring4.1新特性——页面自动化测试框架Spring MVC T</div>
                                </li>
                                <li><a href="/article/142.htm"
                                       title="mysql 性能查询优化" target="_blank">mysql 性能查询优化</a>
                                    <span class="text-muted">annan211</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E4%BC%98%E5%8C%96/1.htm">优化</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a>
                                    <div>

1 时间到底花在哪了?
  mysql在执行查询的时候需要执行一系列的子任务,这些子任务包含了整个查询周期最重要的阶段,这其中包含了大量为了
  检索数据列到存储引擎的调用以及调用后的数据处理,包括排序、分组等。在完成这些任务的时候,查询需要在不同的地方
  花费时间,包括网络、cpu计算、生成统计信息和执行计划、锁等待等。尤其是向底层存储引擎检索数据的调用操作。这些调用需要在内存操</div>
                                </li>
                                <li><a href="/article/269.htm"
                                       title="windows系统配置" target="_blank">windows系统配置</a>
                                    <span class="text-muted">cherishLC</span>
<a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a>
                                    <div>删除Hiberfil.sys :使用命令powercfg -h off 关闭休眠功能即可: 
http://jingyan.baidu.com/article/f3ad7d0fc0992e09c2345b51.html 
类似的还有pagefile.sys 
 
msconfig 配置启动项 
shutdown 定时关机 
 
ipconfig 查看网络配置 
ipconfig /flushdns</div>
                                </li>
                                <li><a href="/article/396.htm"
                                       title="人体的排毒时间" target="_blank">人体的排毒时间</a>
                                    <span class="text-muted">Array_06</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a>
                                    <div>======================== 
||  人体的排毒时间是什么时候?|| 
========================  
 
转载于: 
http://zhidao.baidu.com/link?url=ibaGlicVslAQhVdWWVevU4TMjhiKaNBWCpZ1NS6igCQ78EkNJZFsEjCjl3T5EdXU9SaPg04bh8MbY1bR</div>
                                </li>
                                <li><a href="/article/523.htm"
                                       title="ZooKeeper" target="_blank">ZooKeeper</a>
                                    <span class="text-muted">cugfy</span>
<a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a>
                                    <div>Zookeeper是一个高性能,分布式的,开源分布式应用协调服务。它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如同步, 配置管理,集群管理,名空间。它被设计为易于编程,使用文件系统目录树作为数据模型。服务端跑在java上,提供java和C的客户端API。 Zookeeper是Google的Chubby一个开源的实现,是高有效和可靠的协同工作系统,Zookeeper能够用来lea</div>
                                </li>
                                <li><a href="/article/650.htm"
                                       title="网络爬虫的乱码处理" target="_blank">网络爬虫的乱码处理</a>
                                    <span class="text-muted">随意而生</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                                    <div>下边简单总结下关于网络爬虫的乱码处理。注意,这里不仅是中文乱码,还包括一些如日文、韩文 、俄文、藏文之类的乱码处理,因为他们的解决方式 是一致的,故在此统一说明。     网络爬虫,有两种选择,一是选择nutch、hetriex,二是自写爬虫,两者在处理乱码时,原理是一致的,但前者处理乱码时,要看懂源码后进行修改才可以,所以要废劲一些;而后者更自由方便,可以在编码处理</div>
                                </li>
                                <li><a href="/article/777.htm"
                                       title="Xcode常用快捷键" target="_blank">Xcode常用快捷键</a>
                                    <span class="text-muted">张亚雄</span>
<a class="tag" taget="_blank" href="/search/xcode/1.htm">xcode</a>
                                    <div>一、总结的常用命令: 
 
    隐藏xcode command+h 
 
    退出xcode command+q 
 
    关闭窗口 command+w 
 
    关闭所有窗口 command+option+w 
 
    关闭当前</div>
                                </li>
                                <li><a href="/article/904.htm"
                                       title="mongoDB索引操作" target="_blank">mongoDB索引操作</a>
                                    <span class="text-muted">adminjun</span>
<a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/%E7%B4%A2%E5%BC%95/1.htm">索引</a>
                                    <div>一、索引基础:    MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧。下面是创建索引的命令:    > db.test.ensureIndex({"username":1})    可以通过下面的名称查看索引是否已经成功建立: &nbs</div>
                                </li>
                                <li><a href="/article/1031.htm"
                                       title="成都软件园实习那些话" target="_blank">成都软件园实习那些话</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/%E6%88%90%E9%83%BD+%E8%BD%AF%E4%BB%B6%E5%9B%AD+%E5%AE%9E%E4%B9%A0/1.htm">成都 软件园 实习</a>
                                    <div>无聊之中,翻了一下日志,发现上一篇经历是很久以前的事了,悔过~~ 
  断断续续离开了学校快一年了,习惯了那里一天天的幼稚、成长的环境,到这里有点与世隔绝的感觉。不过还好,那是刚到这里时的想法,现在感觉在这挺好,不管怎么样,最要感谢的还是老师能给这么好的一次催化成长的机会,在这里确实看到了好多好多能想到或想不到的东西。 
  都说在外面和学校相比最明显的差距就是与人相处比较困难,因为在外面每个人都</div>
                                </li>
                                <li><a href="/article/1158.htm"
                                       title="Linux下FTP服务器安装及配置" target="_blank">Linux下FTP服务器安装及配置</a>
                                    <span class="text-muted">ayaoxinchao</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/FTP%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">FTP服务器</a><a class="tag" taget="_blank" href="/search/vsftp/1.htm">vsftp</a>
                                    <div>检测是否安装了FTP 
[root@localhost ~]# rpm -q vsftpd 
如果未安装:package vsftpd is not installed  安装了则显示:vsftpd-2.0.5-28.el5累死的版本信息 
  
安装FTP 
运行yum install vsftpd命令,如[root@localhost ~]# yum install vsf</div>
                                </li>
                                <li><a href="/article/1285.htm"
                                       title="使用mongo-java-driver获取文档id和查找文档" target="_blank">使用mongo-java-driver获取文档id和查找文档</a>
                                    <span class="text-muted">BigBird2012</span>
<a class="tag" taget="_blank" href="/search/driver/1.htm">driver</a>
                                    <div>注:本文所有代码都使用的mongo-java-driver实现。 
  
在MongoDB中,一个集合(collection)在概念上就类似我们SQL数据库中的表(Table),这个集合包含了一系列文档(document)。一个DBObject对象表示我们想添加到集合(collection)中的一个文档(document),MongoDB会自动为我们创建的每个文档添加一个id,这个id在</div>
                                </li>
                                <li><a href="/article/1412.htm"
                                       title="JSONObject以及json串" target="_blank">JSONObject以及json串</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/JSONObject/1.htm">JSONObject</a>
                                    <div>一.JAR包简介 
    要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: 
    1.commons-lang-2.0.jar 
    2.commons-beanutils-1.7.0.jar 
    3.commons-collections-3.1.jar 
&n</div>
                                </li>
                                <li><a href="/article/1539.htm"
                                       title="[Zookeeper学习笔记之三]Zookeeper实例创建和会话建立的异步特性" target="_blank">[Zookeeper学习笔记之三]Zookeeper实例创建和会话建立的异步特性</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a>
                                    <div>为了说明问题,看个简单的代码, 
  
    import org.apache.zookeeper.*;  
      
    import java.io.IOException;  
    import java.util.concurrent.CountDownLatch;  
    import java.util.concurrent.ThreadLocal</div>
                                </li>
                                <li><a href="/article/1666.htm"
                                       title="【Scala十二】Scala核心六:Trait" target="_blank">【Scala十二】Scala核心六:Trait</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a>
                                    <div>Traits are a fundamental unit of code reuse in Scala. A trait encapsulates method and field definitions, which can then be reused by mixing them into classes. Unlike class inheritance, in which each c</div>
                                </li>
                                <li><a href="/article/1793.htm"
                                       title="weblogic version 10.3破解" target="_blank">weblogic version 10.3破解</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/weblogic/1.htm">weblogic</a>
                                    <div>版本:WebLogic Server 10.3 
 
说明:%DOMAIN_HOME%:指WebLogic Server 域(Domain)目录 
例如我的做测试的域的根目录 DOMAIN_HOME=D:/Weblogic/Middleware/user_projects/domains/base_domain 
 
1.为了保证操作安全,备份%DOMAIN_HOME%/security/Defa</div>
                                </li>
                                <li><a href="/article/1920.htm"
                                       title="求第n个斐波那契数" target="_blank">求第n个斐波那契数</a>
                                    <span class="text-muted">BrokenDreams</span>

                                    <div>        今天看到群友发的一个问题:写一个小程序打印第n个斐波那契数。 
        自己试了下,搞了好久。。。基础要加强了。 
        
  &nbs</div>
                                </li>
                                <li><a href="/article/2047.htm"
                                       title="读《研磨设计模式》-代码笔记-访问者模式-Visitor" target="_blank">读《研磨设计模式》-代码笔记-访问者模式-Visitor</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ 
 
 


import java.util.ArrayList;
import java.util.List;

interface IVisitor {
	
	//第二次分派,Visitor调用Element
	void visitConcret</div>
                                </li>
                                <li><a href="/article/2174.htm"
                                       title="MatConvNet的excise 3改为网络配置文件形式" target="_blank">MatConvNet的excise 3改为网络配置文件形式</a>
                                    <span class="text-muted">cherishLC</span>
<a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a>
                                    <div>MatConvNet为vlFeat作者写的matlab下的卷积神经网络工具包,可以使用GPU。 
主页:
http://www.vlfeat.org/matconvnet/ 
教程:
http://www.robots.ox.ac.uk/~vgg/practicals/cnn/index.html 
 
注意:需要下载新版的MatConvNet替换掉教程中工具包中的matconvnet:
http</div>
                                </li>
                                <li><a href="/article/2301.htm"
                                       title="ZK Timeout再讨论" target="_blank">ZK Timeout再讨论</a>
                                    <span class="text-muted">chenchao051</span>
<a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a><a class="tag" taget="_blank" href="/search/timeout/1.htm">timeout</a><a class="tag" taget="_blank" href="/search/hbase/1.htm">hbase</a>
                                    <div>http://crazyjvm.iteye.com/blog/1693757 文中提到相关超时问题,但是又出现了一个问题,我把min和max都设置成了180000,但是仍然出现了以下的异常信息: 
Client session timed out, have not heard from server in 154339ms for sessionid 0x13a3f7732340003</div>
                                </li>
                                <li><a href="/article/2428.htm"
                                       title="CASE WHEN 用法介绍" target="_blank">CASE WHEN 用法介绍</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/group+by/1.htm">group by</a><a class="tag" taget="_blank" href="/search/case+when/1.htm">case when</a>
                                    <div>CASE WHEN 用法介绍 
 
1. CASE WHEN 表达式有两种形式 
 
 
--简单Case函数  
 
CASE sex  
WHEN '1' THEN '男'  
WHEN '2' THEN '女'  
ELSE '其他' END  
 
--Case搜索函数  
 
CASE 
WHEN sex = '1' THEN </div>
                                </li>
                                <li><a href="/article/2555.htm"
                                       title="PHP技巧汇总:提高PHP性能的53个技巧" target="_blank">PHP技巧汇总:提高PHP性能的53个技巧</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a>
                                    <div>PHP技巧汇总:提高PHP性能的53个技巧  用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,  单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的函数译注:  PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。  1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍</div>
                                </li>
                                <li><a href="/article/2682.htm"
                                       title="Yii框架中CGridView的使用方法以及详细示例" target="_blank">Yii框架中CGridView的使用方法以及详细示例</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a>
                                    <div>CGridView显示一个数据项的列表中的一个表。 
表中的每一行代表一个数据项的数据,和一个列通常代表一个属性的物品(一些列可能对应于复杂的表达式的属性或静态文本)。  CGridView既支持排序和分页的数据项。排序和分页可以在AJAX模式或正常的页面请求。使用CGridView的一个好处是,当用户浏览器禁用JavaScript,排序和分页自动退化普通页面请求和仍然正常运行。 
实例代码如下:</div>
                                </li>
                                <li><a href="/article/2809.htm"
                                       title="Maven项目打包成可执行Jar文件" target="_blank">Maven项目打包成可执行Jar文件</a>
                                    <span class="text-muted">dyy_gusi</span>
<a class="tag" taget="_blank" href="/search/assembly/1.htm">assembly</a>
                                    <div>Maven项目打包成可执行Jar文件 
在使用Maven完成项目以后,如果是需要打包成可执行的Jar文件,我们通过eclipse的导出很麻烦,还得指定入口文件的位置,还得说明依赖的jar包,既然都使用Maven了,很重要的一个目的就是让这些繁琐的操作简单。我们可以通过插件完成这项工作,使用assembly插件。具体使用方式如下: 
1、在项目中加入插件的依赖: 
<plugin>
	</div>
                                </li>
                                <li><a href="/article/2936.htm"
                                       title="php常见错误" target="_blank">php常见错误</a>
                                    <span class="text-muted">geeksun</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a>
                                    <div>1.  kevent() reported that connect() failed (61: Connection refused) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastc</div>
                                </li>
                                <li><a href="/article/3063.htm"
                                       title="修改linux的用户名" target="_blank">修改linux的用户名</a>
                                    <span class="text-muted">hongtoushizi</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/change+password/1.htm">change password</a>
                                    <div>Change Linux Username 
更改Linux用户名,需要修改4个系统的文件: 
/etc/passwd 
/etc/shadow 
/etc/group 
/etc/gshadow 
古老/传统的方法是使用vi去直接修改,但是这有安全隐患(具体可自己搜一下),所以后来改成使用这些命令去代替: 
vipw 
vipw -s 
vigr 
vigr -s 
  
具体的操作顺</div>
                                </li>
                                <li><a href="/article/3190.htm"
                                       title="第五章 常用Lua开发库1-redis、mysql、http客户端" target="_blank">第五章 常用Lua开发库1-redis、mysql、http客户端</a>
                                    <span class="text-muted">jinnianshilongnian</span>
<a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/lua/1.htm">lua</a>
                                    <div>对于开发来说需要有好的生态开发库来辅助我们快速开发,而Lua中也有大多数我们需要的第三方开发库如Redis、Memcached、Mysql、Http客户端、JSON、模板引擎等。 
一些常见的Lua库可以在github上搜索,https://github.com/search?utf8=%E2%9C%93&q=lua+resty。 
  Redis客户端 
lua-resty-r</div>
                                </li>
                                <li><a href="/article/3317.htm"
                                       title="zkClient 监控机制实现" target="_blank">zkClient 监控机制实现</a>
                                    <span class="text-muted">liyonghui160com</span>
<a class="tag" taget="_blank" href="/search/zkClient+%E7%9B%91%E6%8E%A7%E6%9C%BA%E5%88%B6%E5%AE%9E%E7%8E%B0/1.htm">zkClient 监控机制实现</a>
                                    <div>  
       直接使用zk的api实现业务功能比较繁琐。因为要处理session loss,session expire等异常,在发生这些异常后进行重连。又因为ZK的watcher是一次性的,如果要基于wather实现发布/订阅模式,还要自己包装一下,将一次性订阅包装成持久订阅。另外如果要使用抽象级别更高的功能,比如分布式锁,leader选举</div>
                                </li>
                                <li><a href="/article/3444.htm"
                                       title="在Mysql 众多表中查找一个表名或者字段名的 SQL 语句" target="_blank">在Mysql 众多表中查找一个表名或者字段名的 SQL 语句</a>
                                    <span class="text-muted">pda158</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>在Mysql 众多表中查找一个表名或者字段名的 SQL 语句:   
  方法一:SELECT table_name, column_name from information_schema.columns WHERE column_name LIKE 'Name';
  方法二:SELECT column_name from information_schema.colum</div>
                                </li>
                                <li><a href="/article/3571.htm"
                                       title="程序员对英语的依赖" target="_blank">程序员对英语的依赖</a>
                                    <span class="text-muted">Smile.zeng</span>
<a class="tag" taget="_blank" href="/search/%E8%8B%B1%E8%AF%AD/1.htm">英语</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E7%8C%BF/1.htm">程序猿</a>
                                    <div>1、程序员最基本的技能,至少要能写得出代码,当我们还在为建立类的时候思考用什么单词发牢骚的时候,英语与别人的差距就直接表现出来咯。 
2、程序员最起码能认识开发工具里的英语单词,不然怎么知道使用这些开发工具。 
3、进阶一点,就是能读懂别人的代码,有利于我们学习人家的思路和技术。 
4、写的程序至少能有一定的可读性,至少要人别人能懂吧... 
 
以上一些问题,充分说明了英语对程序猿的重要性。骚年</div>
                                </li>
                                <li><a href="/article/3698.htm"
                                       title="Oracle学习笔记(8) 使用PLSQL编写触发器" target="_blank">Oracle学习笔记(8) 使用PLSQL编写触发器</a>
                                    <span class="text-muted">vipbooks</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/%E6%B4%BB%E5%8A%A8/1.htm">活动</a><a class="tag" taget="_blank" href="/search/Access/1.htm">Access</a>
                                    <div>    时间过得真快啊,转眼就到了Oracle学习笔记的最后个章节了,通过前面七章的学习大家应该对Oracle编程有了一定了了解了吧,这东东如果一段时间不用很快就会忘记了,所以我会把自己学习过的东西做好详细的笔记,用到的时候可以随时查找,马上上手!希望这些笔记能对大家有些帮助! 
    这是第八章的学习笔记,学习完第七章的子程序和包之后</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>