探索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/1946680175760568320.htm"
                           title="阿里云 RabbitMQ 可观测性最佳实践" target="_blank">阿里云 RabbitMQ 可观测性最佳实践</a>
                        <span class="text-muted">观测云</span>
<a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E4%BA%91/1.htm">阿里云</a><a class="tag" taget="_blank" href="/search/rabbitmq/1.htm">rabbitmq</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a>
                        <div>阿里云RabbitMQ阿里云RabbitMQ是一款高性能、高可靠的消息中间件,支持多种消息协议和丰富的功能特性。它提供消息队列功能,能够实现应用间的消息解耦和异步通信,提升系统扩展性和稳定性。其支持多种消息持久化策略,确保消息不丢失;具备灵活的路由和负载均衡能力,可高效分发消息;还提供丰富的管理功能,如队列监控、消息追踪和权限管理等,帮助用户轻松管理和优化消息队列,广泛应用于分布式系统、微服务架构</div>
                    </li>
                    <li><a href="/article/1946677781928669184.htm"
                           title="2025阿里云黑洞自救指南:从分钟级恢复到长效免疫的实战方案" target="_blank">2025阿里云黑洞自救指南:从分钟级恢复到长效免疫的实战方案</a>
                        <span class="text-muted"></span>

                        <div>一次未防护的DDoS攻击,可致业务停摆72小时,损失超千万!2025年,随着AI驱动的DDoS攻击工具泛滥及僵尸网络商业化,阿里云服务器被拉入黑洞的案例激增300%。当攻击流量超过实例阈值(5Gbps-300Gbps)时,阿里云会强制屏蔽IP公网访问——这不是惩罚,而是保全云平台整体的“断臂求生”。本文将提供一套经过头部企业验证的应急方案,涵盖从5分钟快速恢复到构建免疫体系的全流程。一、2025黑</div>
                    </li>
                    <li><a href="/article/1946677655659147264.htm"
                           title="2025年华为认证之HCIE-云计算方向的报考流程" target="_blank">2025年华为认证之HCIE-云计算方向的报考流程</a>
                        <span class="text-muted"></span>

                        <div>一、先搞明白:HCIE-云计算认证到底是啥?HCIE-云计算(华为认证ICT专家-云计算)是华为体系里云计算领域的顶级认证,说白了,就是证明你有能力搞定大型企业的云平台设计、部署和运维。现在政企、金融这些行业上云需求猛增,招人的时候,这证书经常是“加分项”甚至“硬门槛”。但这证不好拿,得闯两关:笔试和实验考试。从报名到拿证,流程说复杂也复杂,说简单也简单,关键是每个环节都得踩对节奏,不然容易走弯路</div>
                    </li>
                    <li><a href="/article/1946675166234865664.htm"
                           title="导游全国基础-园林, 2021-10-30" target="_blank">导游全国基础-园林, 2021-10-30</a>
                        <span class="text-muted">Mc杰夫</span>

                        <div>2021.09.21Tues古代园林构景手法:抑景添景夹景对景框景漏景借景障景:用山石花木加以掩盖和处理,形成美景古典园林理水之法:掩、隔、破古典园林主体建筑:厅堂廊:“引”和“观”的建筑,分为直廊、曲廊、爬山廊、水廊、桥廊园林用石:黄石、太湖石(皱、瘦、漏、透)江南三大名廊:沧浪亭的复廊、拙政园的水廊、留园的曲廊江南三大奇石:豫园的玉玲珑、留园的冠云峰、竹宿园的邹云峰苏州四大园林:拙政园、留园、</div>
                    </li>
                    <li><a href="/article/1946672870813921280.htm"
                           title="C++ 左值与右值:深入解析与区别" target="_blank">C++ 左值与右值:深入解析与区别</a>
                        <span class="text-muted">北辰alk</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>
                        <div>文章目录1.基本概念1.1左值(Lvalue)1.2右值(Rvalue)2.左值与右值的详细区别2.1基本区别对比表2.2代码示例说明3.左值引用与右值引用3.1左值引用3.2右值引用3.3引用绑定规则总结4.左值/右值的高级分类4.1值类别示意图4.2各类别示例5.左值/右值的实际应用5.1函数重载中的左值/右值5.2移动语义与右值引用5.3完美转发6.常见误区与注意事项7.实际应用场景7.1优</div>
                    </li>
                    <li><a href="/article/1946656591453417472.htm"
                           title="如何选择适合的云手机配置?解决资源不足带来的性能瓶颈" target="_blank">如何选择适合的云手机配置?解决资源不足带来的性能瓶颈</a>
                        <span class="text-muted">Clownseven</span>
<a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E6%89%8B%E6%9C%BA/1.htm">智能手机</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>云手机的出现,极大地方便了人们的移动工作、娱乐、管理等任务。云手机能够帮助我们突破物理设备的限制,随时随地访问和使用应用程序,极大地提高了工作效率和灵活性。然而,随着使用的深入,很多用户会遇到性能瓶颈,这往往与所选择的云手机配置密切相关。如果配置选择不当,性能不足会导致卡顿、延迟甚至应用崩溃的现象,影响使用体验。那么,如何选择适合的云手机配置,以解决资源不足带来的性能瓶颈呢?本文将深入解析如何挑选</div>
                    </li>
                    <li><a href="/article/1946652625348915200.htm"
                           title="原创作品 花非花" target="_blank">原创作品 花非花</a>
                        <span class="text-muted">冯素萍</span>

                        <div>花非花文/冯素萍窗前人,院间路。共寂寥,蟾宫顾。人间天上病相同,有异伤心着意处。【词谱简介】:《花非花》,词牌名之一,单调二十六字,六句三仄韵。【词谱格律对照】:作者:[唐]白居易花非花,雾非雾。夜半来,天明去。⊙。⊙。。。来如春梦不多时,去似朝云无觅处。⊙⊙⊙。⊙⊙⊙。【示意符号】:⊙可平可仄;平声;仄声;平韵;仄韵;A叶平韵;B叶仄韵。图片发自App</div>
                    </li>
                    <li><a href="/article/1946650827909296128.htm"
                           title="《一夜盛欢厉少的替嫁宠妻》江瑾言厉慎行&全文免费阅读【完结小说】" target="_blank">《一夜盛欢厉少的替嫁宠妻》江瑾言厉慎行&全文免费阅读【完结小说】</a>
                        <span class="text-muted">云轩书阁</span>

                        <div>《一夜盛欢厉少的替嫁宠妻》江瑾言厉慎行&全文免费阅读【完结小说】主角:江瑾言厉慎行简介:为了救奶奶,江瑾言被迫替孪生妹妹,嫁给传闻中虐死了三任新娘的厉慎行。关注微信公众号【云精灵】去回个书號【1040】,即可阅读【一夜盛欢厉少的替嫁宠妻】小说全文!“呵。”终究不该有一丝丝期待啊。江瑾言嗤笑一声,看向落地窗外。明明初秋的风景不错,却显得死寂苍凉。此刻,江家客厅里却笑声连绵。“妈,她真的答应了!”“没</div>
                    </li>
                    <li><a href="/article/1946648775170781184.htm"
                           title="交换机配置VLAN及Access接口" target="_blank">交换机配置VLAN及Access接口</a>
                        <span class="text-muted">蒋慧慧</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E4%BA%A4%E6%8D%A2%E6%9C%BAVLAN/1.htm">交换机VLAN</a>
                        <div>交换机VLAN配置VLAN原理VLAN配置实验内容实验拓扑实验步骤VLAN原理VLAN(VirtualLocalAreaNetwork,虚拟局域网),VLAN是一种比较新的技术,工作在OSI参考模型的第2层和第3层,一个VLAN就是一个广播域,VLAN之间的通信是通过第3层的路由器来完成的。与传统的局域网技术相比较,VLAN技术更加灵活,它具有以下优点:网络设备的移动、添加和修改的管理开销减少;可</div>
                    </li>
                    <li><a href="/article/1946633508097159168.htm"
                           title="破解 VMware 迁移难题:跨平台迁移常见问题及自动化解决方案" target="_blank">破解 VMware 迁移难题:跨平台迁移常见问题及自动化解决方案</a>
                        <span class="text-muted">七夜zippoe</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/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/VMware/1.htm">VMware</a>
                        <div>在企业IT架构向混合云、多云演进的进程中,VMware虚拟化环境的跨平台迁移成为关键任务。无论是迁移至KVM、Hyper-V等开源虚拟化平台,还是AWS、Azure等公有云,迁移过程往往面临兼容性障碍、数据损耗、业务中断等难题。本文深入剖析跨平台迁移的核心痛点,结合自动化技术提出系统性解决方案,助力企业实现平滑迁移。一、跨平台迁移的常见痛点及根源分析VMware迁移的复杂性源于虚拟化层、硬件架构、</div>
                    </li>
                    <li><a href="/article/1946629981476024320.htm"
                           title="武大樱花如约盛放,我们相见的日子不远了" target="_blank">武大樱花如约盛放,我们相见的日子不远了</a>
                        <span class="text-muted">摄影小蓝莓</span>

                        <div>那天,阳光依旧,随着太阳的渐渐高升,武大樱花庚子珞樱如约盛放。一缕缕的阳光,穿过云层,直射在地球上,庚子珞樱如约盛放。细细想来,受疫情的原因,我们只能来一场云赏樱。去过或者是在武大的朋友都知道,武大的最佳赏樱地点,莫过于“樱园”和珞珈山。在樱园一带主要以小日樱花为主,一共收集了有早樱、晚樱和垂枝樱等6种10余个佳品的樱花,花色丰富,绚丽多彩。而珞珈山的樱花柔美中更透出坚韧,樱花树在凛冽的冬天之后,</div>
                    </li>
                    <li><a href="/article/1946629598565429248.htm"
                           title="如何选择旅游科技行业云ERP?Oracle NetSuite助力汇智国际数智化升级" target="_blank">如何选择旅游科技行业云ERP?Oracle NetSuite助力汇智国际数智化升级</a>
                        <span class="text-muted"></span>

                        <div>2025年4月21日,汇智国际旅游发展有限公司(以下简称汇智国际)携手OracleNetSuite与HitpointCloud,共同参与了汇智国际OracleNetSuite云ERP项目启动会。本次会议标志着汇智国际在数字化转型道路上迈出了坚实而关键的一步,旨在通过OracleNetSuite的领先云ERP解决方案,助力汇智实现全球集团化、业财一体化以及未来应用延伸的宏伟目标。会议伊始,汇智国际的</div>
                    </li>
                    <li><a href="/article/1946625416634626048.htm"
                           title="零投资一天赚1000(先从一天赚100开始)" target="_blank">零投资一天赚1000(先从一天赚100开始)</a>
                        <span class="text-muted">赏帮赚帮人忙</span>

                        <div>在今天这个时代,一天赚1000元不能说有钱,也算是小康水平,那么在网络上有什么不需要投资就能一天赚1000的项目呢?我觉得赚钱还是从小做起,就算零投资一天赚1000,也要从一天赚几十块钱开始做起,当然,一天赚到这么高的收入是很难的,但是移动互联网为我们提供了这么多赚钱的机会。有很多方法可以达到你的目标。感兴趣请下载:零投资手机赚钱app如点击打不开请浏览器输入网址:www.yykk555.com只</div>
                    </li>
                    <li><a href="/article/1946610050550263808.htm"
                           title="【深入C++】std::move 空基类优化智能指针 vector<bool>" target="_blank">【深入C++】std::move 空基类优化智能指针 vector<bool></a>
                        <span class="text-muted">阿猿收手吧!</span>
<a class="tag" taget="_blank" href="/search/%E9%81%A3%E8%BF%94%E5%9B%9E%E5%AE%B6%E7%9A%84C%E5%AE%B6%E5%AE%B6/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>
                        <div>文章目录std::move是啥?干了啥?一、底层原理:转换而非移动二、核心应用场景:高效转移资源所有权三、关键注意事项与陷阱四、总结空基类优化一、空类的内存占用二、空基类优化的原理三、优化生效的条件四、应用场景五、注意事项move和智能指针的有趣结合实现`std::unique_ptr`移动语义的核心要素`unique_ptr`简化版实现代码移动操作关键解析移动构造函数实现移动赋值运算符实现使用示</div>
                    </li>
                    <li><a href="/article/1946609922691100672.htm"
                           title="DDD核心知识解析" target="_blank">DDD核心知识解析</a>
                        <span class="text-muted">我是廖志伟</span>
<a class="tag" taget="_blank" href="/search/Java%E5%9C%BA%E6%99%AF%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/1.htm">Java场景面试宝典</a><a class="tag" taget="_blank" href="/search/DDD/1.htm">DDD</a><a class="tag" taget="_blank" href="/search/Domain-Driven/1.htm">Domain-Driven</a><a class="tag" taget="_blank" href="/search/Design/1.htm">Design</a><a class="tag" taget="_blank" href="/search/Software/1.htm">Software</a><a class="tag" taget="_blank" href="/search/Architecture/1.htm">Architecture</a>
                        <div>我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri</div>
                    </li>
                    <li><a href="/article/1946609796308332544.htm"
                           title="ShardingSphere详解" target="_blank">ShardingSphere详解</a>
                        <span class="text-muted">我是廖志伟</span>
<a class="tag" taget="_blank" href="/search/Java%E5%9C%BA%E6%99%AF%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/1.htm">Java场景面试宝典</a><a class="tag" taget="_blank" href="/search/ShardingSphere/1.htm">ShardingSphere</a><a class="tag" taget="_blank" href="/search/Distributed/1.htm">Distributed</a><a class="tag" taget="_blank" href="/search/Database/1.htm">Database</a><a class="tag" taget="_blank" href="/search/Middleware/1.htm">Middleware</a>
                        <div>我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri</div>
                    </li>
                    <li><a href="/article/1946609418334433280.htm"
                           title="微服务架构核心技术" target="_blank">微服务架构核心技术</a>
                        <span class="text-muted">我是廖志伟</span>
<a class="tag" taget="_blank" href="/search/Java%E5%9C%BA%E6%99%AF%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/1.htm">Java场景面试宝典</a><a class="tag" taget="_blank" href="/search/Service/1.htm">Service</a><a class="tag" taget="_blank" href="/search/Governance/1.htm">Governance</a><a class="tag" taget="_blank" href="/search/Microservices/1.htm">Microservices</a><a class="tag" taget="_blank" href="/search/Distributed/1.htm">Distributed</a><a class="tag" taget="_blank" href="/search/Systems/1.htm">Systems</a>
                        <div>我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri</div>
                    </li>
                    <li><a href="/article/1946609166210625536.htm"
                           title="Spring MVC 技术解析" target="_blank">Spring MVC 技术解析</a>
                        <span class="text-muted">我是廖志伟</span>
<a class="tag" taget="_blank" href="/search/Java%E5%9C%BA%E6%99%AF%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/1.htm">Java场景面试宝典</a><a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/MVC/1.htm">MVC</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/MVC/1.htm">MVC</a><a class="tag" taget="_blank" href="/search/Design/1.htm">Design</a><a class="tag" taget="_blank" href="/search/Pattern/1.htm">Pattern</a>
                        <div>我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri</div>
                    </li>
                    <li><a href="/article/1946608913587695616.htm"
                           title="领域驱动设计核心解析" target="_blank">领域驱动设计核心解析</a>
                        <span class="text-muted"></span>

                        <div>我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri</div>
                    </li>
                    <li><a href="/article/1946608914082623488.htm"
                           title="Spring技术全解析" target="_blank">Spring技术全解析</a>
                        <span class="text-muted">我是廖志伟</span>
<a class="tag" taget="_blank" href="/search/Java%E5%9C%BA%E6%99%AF%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/1.htm">Java场景面试宝典</a><a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/Framework/1.htm">Framework</a><a class="tag" taget="_blank" href="/search/IoC/1.htm">IoC</a><a class="tag" taget="_blank" href="/search/Container/1.htm">Container</a><a class="tag" taget="_blank" href="/search/AOP/1.htm">AOP</a>
                        <div>我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri</div>
                    </li>
                    <li><a href="/article/1946608534724603904.htm"
                           title="并发编程核心技术" target="_blank">并发编程核心技术</a>
                        <span class="text-muted">我是廖志伟</span>
<a class="tag" taget="_blank" href="/search/Java%E5%9C%BA%E6%99%AF%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/1.htm">Java场景面试宝典</a><a class="tag" taget="_blank" href="/search/Concurrency/1.htm">Concurrency</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Multithreading/1.htm">Multithreading</a>
                        <div>我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri</div>
                    </li>
                    <li><a href="/article/1946608535601213440.htm"
                           title="ShardingSphere技术解析" target="_blank">ShardingSphere技术解析</a>
                        <span class="text-muted"></span>

                        <div>我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri</div>
                    </li>
                    <li><a href="/article/1946608533730553856.htm"
                           title="并发编程与MyBatis核心解析" target="_blank">并发编程与MyBatis核心解析</a>
                        <span class="text-muted">我是廖志伟</span>
<a class="tag" taget="_blank" href="/search/Java%E5%9C%BA%E6%99%AF%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/1.htm">Java场景面试宝典</a><a class="tag" taget="_blank" href="/search/Concurrent/1.htm">Concurrent</a><a class="tag" taget="_blank" href="/search/Programming/1.htm">Programming</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/MyBatis/1.htm">MyBatis</a>
                        <div>我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri</div>
                    </li>
                    <li><a href="/article/1946608407419088896.htm"
                           title="互联网大厂java求职者面试" target="_blank">互联网大厂java求职者面试</a>
                        <span class="text-muted">我是廖志伟</span>
<a class="tag" taget="_blank" href="/search/Java%E5%9C%BA%E6%99%AF%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/1.htm">Java场景面试宝典</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%85%AB%E8%82%A1%E6%96%87/1.htm">八股文</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E6%B1%82%E8%81%8C/1.htm">求职</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a>
                        <div>我是廖志伟,一名Java开发工程师,清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Z</div>
                    </li>
                    <li><a href="/article/1946607870736920576.htm"
                           title="亲子日记787" target="_blank">亲子日记787</a>
                        <span class="text-muted">云哲云灿妈妈</span>

                        <div>2019.05.27星期一阴转晴这两天一直在帮妈妈套袋,没太顾上俩宝,二宝前两天发烧,今天看来已经痊愈,想今天再吃一天药就停,貌似今晚忘给吃了。今天有同学家长咨询关于初中网上报名的事情,因为看时间还算宽裕,这两天没顾得上,明天第一时间先研究研究这事。李云哲这两天自主学习还算不错,唯一不足还是效率不高,爱拖拉,每天放学后光作业写到很晚,什么也顾不上。继续这样下去,不知道升入初中后会怎么样?</div>
                    </li>
                    <li><a href="/article/1946607612724310016.htm"
                           title="留什么发型可以让头发看起来不那么油?" target="_blank">留什么发型可以让头发看起来不那么油?</a>
                        <span class="text-muted">域发护理指南</span>

                        <div>不知道大家有没有发现,同样是3天没洗头发,男生的头发看起来会比女生油,有人说男生比女生爱出油,所以才会这样,但事实真的是这样吗?那么留什么发型可以让头发看起来不那么油呢?男生几天没洗头发为什么会油得那么明显呢?主要是因为男生一般头发留得比较短,油脂由毛孔排出,所以发根会最先油,慢慢向发尾移动,男生头发比较短,所有的油脂量都堆积在头皮和那么短的发丝上,当然会看起来更油一些,女生一般留长发居多,同样是</div>
                    </li>
                    <li><a href="/article/1946604374142808064.htm"
                           title="ShardingSphere 架构解析" target="_blank">ShardingSphere 架构解析</a>
                        <span class="text-muted">我是廖志伟</span>
<a class="tag" taget="_blank" href="/search/Java%E5%9C%BA%E6%99%AF%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/1.htm">Java场景面试宝典</a><a class="tag" taget="_blank" href="/search/Database/1.htm">Database</a><a class="tag" taget="_blank" href="/search/Distributed/1.htm">Distributed</a><a class="tag" taget="_blank" href="/search/Systems/1.htm">Systems</a><a class="tag" taget="_blank" href="/search/ShardingSphere/1.htm">ShardingSphere</a>
                        <div>我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri</div>
                    </li>
                    <li><a href="/article/1946601348048941056.htm"
                           title="Java零基础-三维数组详解!" target="_blank">Java零基础-三维数组详解!</a>
                        <span class="text-muted">喵手</span>
<a class="tag" taget="_blank" href="/search/%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%AD%A6Java/1.htm">零基础学Java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</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站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式</div>
                    </li>
                    <li><a href="/article/1946601095899967488.htm"
                           title="Java零基础-数组" target="_blank">Java零基础-数组</a>
                        <span class="text-muted"></span>

                        <div>全文目录:开篇语前言摘要简介源代码解析应用场景案例优缺点分析类代码方法介绍Java代码测试用例全文小结总结文末开篇语哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作</div>
                    </li>
                    <li><a href="/article/1946600968674144256.htm"
                           title="Java零基础-数组:数组的遍历和操作" target="_blank">Java零基础-数组:数组的遍历和操作</a>
                        <span class="text-muted">喵手</span>
<a class="tag" taget="_blank" href="/search/%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%AD%A6Java/1.htm">零基础学Java</a><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>
                        <div>全文目录:开篇语前言摘要简介源代码解析应用场景案例优缺点分析类代码方法介绍Java代码测试用例全文小结总结文末开篇语哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区: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>