CINXE.COM
MrBird
<!doctype html><html class="theme-next mist" lang="zh-Hans"><head><meta name="generator" content="Hexo 3.8.0"><meta name="google-site-verification" content="7Tau9WyVgxnsEY9oYedu9g0U6_8akOX3wiKbaYcrg9A"><meta name="baidu-site-verification" content="EVwLiaxdxX"><link href="/css/xps13.css" rel="stylesheet" type="text/css"><link href="/css/message.css" rel="stylesheet" type="text/css"><link href="//fonts.googleapis.com/css?family=Baloo+Bhaijaan|Inconsolata|Josefin+Sans|Montserrat" rel="stylesheet"><script type="text/javascript" src="/js/jquery-1.11.3.min.js"></script><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"><meta http-equiv="Cache-Control" content="no-transform"><meta http-equiv="Cache-Control" content="no-siteapp"><link href="/lib/font-awesome/css/font-awesome.min.css?v=4.6.2" rel="stylesheet" type="text/css"><link href="/css/main.css?v=5.1.1" rel="stylesheet" type="text/css"><meta name="keywords" content="Hexo, Mrbird"><link rel="alternate" href="/atom.xml" title="MrBird" type="application/atom+xml"><link rel="shortcut icon" type="image/x-icon" href="/bird.png?v=5.1.1"><meta property="og:type" content="website"><meta property="og:title" content="MrBird"><meta property="og:url" content="http://mrbird.cc/index.html"><meta property="og:site_name" content="MrBird"><meta property="og:locale" content="zh-Hans"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="MrBird"><script type="text/javascript" id="hexo.configurations">var NexT = window.NexT || {}, CONFIG = { root: "/", scheme: "Mist", sidebar: { position: "left", display: "always", offset: 12, offset_float: 0, b2t: !1, scrollpercent: !0 }, fancybox: !1, motion: !1 }</script><title>MrBird</title></head><body ondragstart="return!1" class="animsition" lang="zh-Hans" style="overflow-x:hidden;padding-left:280px"><script type="text/javascript" src="/js/mo.min.js"></script><style>body{text-rendering:geometricPrecision!important;font-family:'Josefin Sans','PingFang SC'!important;-webkit-font-smoothing:antialiased!important;-webkit-text-size-adjust:100%!important;background-color:#f4f6f7}@media (min-width:768px) and (max-width:991px){body .header-innerr{width:700px!important}}.header-innerr{margin:0 auto;padding:100px 0 70px;width:880px}@media (min-width:1600px){.container .header-innerr{width:996px}}.header-innerr{position:relative}.header-innerr{padding:0}.header-innerr:after,.header-innerr:before{content:" ";display:table}.header-innerr:after{clear:both}@media (max-width:767px){.header-innerr{width:auto;padding:10px;margin-bottom:-20px}}</style><div class="container sidebar-position-left page-home"><div class="headband"></div><header id="header" class="header"><div class="header-inner"><div class="site-brand-wrapper"><div class="site-meta"><link href="https://fonts.font.im/css?family=Merienda" rel="stylesheet"><div class="custom-logo-site-title"></div><h1 class="site-subtitle" itemprop="description"></h1></div><div class="site-nav-toggle"><button><span class="btn-bar"></span><span class="btn-bar"></span><span class="btn-bar"></span></button></div></div><nav class="site-nav"><div class="site-search"><div class="popup search-popup local-search-popup"><div class="local-search-header clearfix"><span class="search-icon"><i class="fa fa-search"></i></span><span class="popup-btn-close"><i class="fa fa-times-circle"></i></span><div class="local-search-input-wrapper"><input autocomplete="off" placeholder="Search" spellcheck="false" type="text" id="local-search-input"></div></div><div id="local-search-result"></div></div></div></nav></div><div class="header-innerr"></div></header><main id="main" class="main"><div class="main-inner"><div class="content-wrap"><div id="content" class="content"><section id="posts" class="posts-expand"><article class="post post-type-normal" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="http://mrbird.cc/LinkedHashSet源码解析.html"><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="name" content="MrBird"><meta itemprop="description" content=""><meta itemprop="image" content="/images/blogImage.jpg"></span><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="MrBird"></span><header class="post-header"><h2 class="post-title" itemprop="name headline"><a class="post-title-link" href="/LinkedHashSet源码解析.html" itemprop="url">LinkedHashSet源码解析</a></h2><div class="post-meta"><span class="post-time"><span class="post-meta-item-icon"><i class="fa fa-calendar-o"></i></span><span class="post-meta-item-text"></span><time title="创建于" itemprop="dateCreated datePublished" datetime="2020-09-03T11:25:12+08:00">2020-09-03</time></span><span></span></div></header><div class="post-body" itemprop="articleBody"><p>我们知道,HashSet内部使用HashMap存储元素,所以HashSet遍历数据时是无序的,要保证插入的元素有序,我们可以使用LinkedHashSet。本节记录LinkedHashSet源码解析,基于JDK1.8。</p><div class="post-button text-center"><a class="btn" href="/LinkedHashSet源码解析.html#more" rel="contents">Read More »</a></div><script>$(".post-body a").not(".thispage").addClass("ignore-href").attr("target", "_blank")</script></div><div></div><div></div><div></div><footer class="post-footer"><div class="post-eof"></div></footer></article><hr><article class="post post-type-normal" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="http://mrbird.cc/LinkedHashMap源码解析.html"><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="name" content="MrBird"><meta itemprop="description" content=""><meta itemprop="image" content="/images/blogImage.jpg"></span><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="MrBird"></span><header class="post-header"><h2 class="post-title" itemprop="name headline"><a class="post-title-link" href="/LinkedHashMap源码解析.html" itemprop="url">LinkedHashMap源码解析</a></h2><div class="post-meta"><span class="post-time"><span class="post-meta-item-icon"><i class="fa fa-calendar-o"></i></span><span class="post-meta-item-text"></span><time title="创建于" itemprop="dateCreated datePublished" datetime="2020-09-02T11:24:36+08:00">2020-09-02</time></span><span></span></div></header><div class="post-body" itemprop="articleBody"><p>HashMap元素插入是无序的,为了让遍历顺序和插入顺序一致,我们可以使用LinkedHashMap,其内部维护了一个双向链表来存储元素顺序,并且可以通过accessOrder属性控制遍顺序为插入顺序或者为访问顺序。本节将记录LinkedHashMap的内部实现原理,基于JDK1.8,并且用LinkedHashMap实现一个简单的LRU。</p><div class="post-button text-center"><a class="btn" href="/LinkedHashMap源码解析.html#more" rel="contents">Read More »</a></div><script>$(".post-body a").not(".thispage").addClass("ignore-href").attr("target", "_blank")</script></div><div></div><div></div><div></div><footer class="post-footer"><div class="post-eof"></div></footer></article><hr><article class="post post-type-normal" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="http://mrbird.cc/HashTable源码解析.html"><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="name" content="MrBird"><meta itemprop="description" content=""><meta itemprop="image" content="/images/blogImage.jpg"></span><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="MrBird"></span><header class="post-header"><h2 class="post-title" itemprop="name headline"><a class="post-title-link" href="/HashTable源码解析.html" itemprop="url">HashTable源码解析</a></h2><div class="post-meta"><span class="post-time"><span class="post-meta-item-icon"><i class="fa fa-calendar-o"></i></span><span class="post-meta-item-text"></span><time title="创建于" itemprop="dateCreated datePublished" datetime="2020-08-27T11:25:38+08:00">2020-08-27</time></span><span></span></div></header><div class="post-body" itemprop="articleBody"><p>HashTable是Map接口线程安全实现版本,数据结构和方法实现与HashMap类似,本文记录HashTable源码解析,基于JDK1.8。</p><div class="post-button text-center"><a class="btn" href="/HashTable源码解析.html#more" rel="contents">Read More »</a></div><script>$(".post-body a").not(".thispage").addClass("ignore-href").attr("target", "_blank")</script><p></p></div><div></div><div></div><div></div><footer class="post-footer"><div class="post-eof"></div></footer></article><hr><article class="post post-type-normal" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="http://mrbird.cc/CopyOnWriteArraySet源码解析.html"><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="name" content="MrBird"><meta itemprop="description" content=""><meta itemprop="image" content="/images/blogImage.jpg"></span><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="MrBird"></span><header class="post-header"><h2 class="post-title" itemprop="name headline"><a class="post-title-link" href="/CopyOnWriteArraySet源码解析.html" itemprop="url">CopyOnWriteArraySet源码解析</a></h2><div class="post-meta"><span class="post-time"><span class="post-meta-item-icon"><i class="fa fa-calendar-o"></i></span><span class="post-meta-item-text"></span><time title="创建于" itemprop="dateCreated datePublished" datetime="2020-08-26T09:23:21+08:00">2020-08-26</time></span><span></span></div></header><div class="post-body" itemprop="articleBody"><p>CopyOnWriteArraySet为线程安全的Set实现,本文记录CopyOnWriteArraySet源码解析,基于JDK1.8。</p><div class="post-button text-center"><a class="btn" href="/CopyOnWriteArraySet源码解析.html#more" rel="contents">Read More »</a></div><script>$(".post-body a").not(".thispage").addClass("ignore-href").attr("target", "_blank")</script><p></p></div><div></div><div></div><div></div><footer class="post-footer"><div class="post-eof"></div></footer></article><hr><article class="post post-type-normal" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="http://mrbird.cc/HashSet源码解析.html"><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="name" content="MrBird"><meta itemprop="description" content=""><meta itemprop="image" content="/images/blogImage.jpg"></span><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="MrBird"></span><header class="post-header"><h2 class="post-title" itemprop="name headline"><a class="post-title-link" href="/HashSet源码解析.html" itemprop="url">HashSet源码解析</a></h2><div class="post-meta"><span class="post-time"><span class="post-meta-item-icon"><i class="fa fa-calendar-o"></i></span><span class="post-meta-item-text"></span><time title="创建于" itemprop="dateCreated datePublished" datetime="2020-08-25T11:20:47+08:00">2020-08-25</time></span><span></span></div></header><div class="post-body" itemprop="articleBody"><p>本文记录HashSet源码解析,基于JDK1.8。</p><div class="post-button text-center"><a class="btn" href="/HashSet源码解析.html#more" rel="contents">Read More »</a></div><script>$(".post-body a").not(".thispage").addClass("ignore-href").attr("target", "_blank")</script><p></p></div><div></div><div></div><div></div><footer class="post-footer"><div class="post-eof"></div></footer></article><hr><article class="post post-type-normal" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="http://mrbird.cc/CopyOnWriteArrayList源码解析.html"><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="name" content="MrBird"><meta itemprop="description" content=""><meta itemprop="image" content="/images/blogImage.jpg"></span><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="MrBird"></span><header class="post-header"><h2 class="post-title" itemprop="name headline"><a class="post-title-link" href="/CopyOnWriteArrayList源码解析.html" itemprop="url">CopyOnWriteArrayList源码解析</a></h2><div class="post-meta"><span class="post-time"><span class="post-meta-item-icon"><i class="fa fa-calendar-o"></i></span><span class="post-meta-item-text"></span><time title="创建于" itemprop="dateCreated datePublished" datetime="2020-08-18T11:23:44+08:00">2020-08-18</time></span><span></span></div></header><div class="post-body" itemprop="articleBody"><p>CopyOnWriteArrayList为线程安全的ArrayList,这节分析下CopyOnWriteArrayList的源码,基于JDK1.8。</p><div class="post-button text-center"><a class="btn" href="/CopyOnWriteArrayList源码解析.html#more" rel="contents">Read More »</a></div><script>$(".post-body a").not(".thispage").addClass("ignore-href").attr("target", "_blank")</script><p></p></div><div></div><div></div><div></div><footer class="post-footer"><div class="post-eof"></div></footer></article><hr><article class="post post-type-normal" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="http://mrbird.cc/Vector源码解析.html"><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="name" content="MrBird"><meta itemprop="description" content=""><meta itemprop="image" content="/images/blogImage.jpg"></span><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="MrBird"></span><header class="post-header"><h2 class="post-title" itemprop="name headline"><a class="post-title-link" href="/Vector源码解析.html" itemprop="url">Vector源码解析</a></h2><div class="post-meta"><span class="post-time"><span class="post-meta-item-icon"><i class="fa fa-calendar-o"></i></span><span class="post-meta-item-text"></span><time title="创建于" itemprop="dateCreated datePublished" datetime="2020-08-10T11:19:59+08:00">2020-08-10</time></span><span></span></div></header><div class="post-body" itemprop="articleBody"><p>Vector和ArrayList非常相似,它们都实现了相同的接口,继承相同的类,就连方法的实现也非常类似。和ArrayList不同的是,Vector是线程安全的,关键方法上都加了synchronized同步锁, <strong>由于Vector效率不高,所以使用的较少,要使用线程安全的ArrayList,推荐CopyOnWriteArrayList</strong>,后续再做分析,这里仅记录下Vector源码,基于JDK1.8。</p><div class="post-button text-center"><a class="btn" href="/Vector源码解析.html#more" rel="contents">Read More »</a></div><script>$(".post-body a").not(".thispage").addClass("ignore-href").attr("target", "_blank")</script></div><div></div><div></div><div></div><footer class="post-footer"><div class="post-eof"></div></footer></article><hr></section><nav class="pagination"><span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><span class="space">…</span><a class="page-number" href="/page/45/">45</a><a class="extend next" rel="next" href="/page/2/"><i class="fa fa-angle-right"></i></a></nav><span style="display:none">Hosted by <a href="https://pages.coding.me" style="color:#f9f9f9;cursor:default" target="_blank" class="ignore-href">Coding Pages</a></span></div></div><aside id="sidebar" class="sidebar" onselectstart="return!1"><div class="sidebar-inner"><section class="site-overview sidebar-panel sidebar-panel-active"><div class="sidebar-sticky sticky"><div itemscope itemtype="https://mrbird.cc"><div class="author__header"><div class="author__avatar"><img src="/images/blogImage.jpg" class="author__avatar" alt="MrBird" itemprop="image"></div><div class="author__content"><div class="author__name" itemprop="name">MrBird</div><p class="author__bio" itemprop="description">A simple blog, code repository, just keep blogging</p></div><div class="author__count"><a href="/archives" class="ignore-href"><span class="count">14</span><span>Archives</span></a><a href="/tags" class="ignore-href"><span class="count">2</span><span>Labels</span></a></div></div><div class="author__urls-wrapper"><ul class="author__urls social-icons"><li><a href="/" itemprop="url" class="ignore-href">🏠 Home</a></li><li><a href="/archives" itemprop="url" class="ignore-href">📦 Archives</a></li><li><a href="/tags" itemprop="url" class="ignore-href">🔖 Labels</a></li><li><a href="/friends" itemprop="url" class="ignore-href">👬 Friends</a></li><li><a href="javascript:;" class="popup-trigger animsition-link">🔍 Search</a></li></ul></div></div></div></section></div><div id="asider-footer"><div id="links"><li><a href="https://love.mrbird.cc" target="_blank" itemprop="url" class="ignore-href"><i class="fa fa-fw fa-diamond" aria-hidden="true"></i></a></li><li><a href="https://cloud.mrbird.cn" target="_blank" itemprop="url" class="ignore-href"><i class="fa fa-fw fa-skyatlas" aria-hidden="true"></i></a></li><li><a href="https://gitee.com/mrbirdd" target="_blank" itemprop="sameAs" class="ignore-href"><i class="fa fa-fw fa-codepen" aria-hidden="true"></i></a></li><li><a href="https://github.com/wuyouzhuguli" target="_blank" itemprop="sameAs" class="ignore-href"><i class="fa fa-fw fa-github-alt" aria-hidden="true"></i></a></li></div><div id="author"></div><script type="text/javascript">var $smsheoschzd100dn = "@ 2016 - " + (new Date).getFullYear() + " MrBird"; document.getElementById("author").innerHTML = $smsheoschzd100dn</script><div><script type="text/javascript" src="/js/busuanzi.js"></script> UV <span class="busuanzi-value" id="busuanzi_value_site_uv" style="cursor:pointer" title="统计开始时间:2019年7月5日"></span> PV <span class="busuanzi-value" id="busuanzi_value_site_pv" style="cursor:pointer" title="统计开始时间:2019年7月5日"></span></div></div><script>function c__() { var o = sidebar_nav_toc.attr("class"); o.indexOf("active") != -1 ? footer.hide(300) : footer.show(300) } var sidebar_nav_toc = $(".sidebar-nav-toc"), footer = $("#asider-footer"); c__(), $(".sidebar-nav").on("click", function() { c__() })</script></aside></div></main><div class="back-to-top"><span id="scrollpercent"><span>0</span></span></div></div><script type="text/javascript">"[object Function]" !== Object.prototype.toString.call(window.Promise) && (window.Promise = null)</script><script type="text/javascript" src="/lib/jquery/index.js?v=2.1.3"></script><script type="text/javascript" src="/lib/fastclick/lib/fastclick.min.js?v=1.0.6"></script><script type="text/javascript" src="/lib/jquery_lazyload/jquery.lazyload.js?v=1.9.7"></script><script type="text/javascript" src="/lib/velocity/velocity.min.js?v=1.2.1"></script><script type="text/javascript" src="/lib/velocity/velocity.ui.min.js?v=1.2.1"></script><script type="text/javascript" src="/js/src/utils.js?v=5.1.1"></script><script type="text/javascript" src="/js/src/motion.js?v=5.1.1"></script><script type="text/javascript" src="/js/src/scrollspy.js?v=5.1.1"></script><script type="text/javascript" src="/js/src/post-details.js?v=5.1.1"></script><script type="text/javascript" src="/js/src/bootstrap.js?v=5.1.1"></script><script type="text/javascript">function proceedsearch() { $("body").append('<div class="search-popup-overlay local-search-pop-overlay"></div>').css("overflow", "hidden"), $(".search-popup-overlay").click(onPopupClose), $(".popup").toggle(); var t = $("#local-search-input"); t.attr("autocapitalize", "none"), t.attr("autocorrect", "off"), t.focus() } var isfetched = !1, isXml = !0, search_path = "search.xml"; 0 === search_path.length ? search_path = "search.xml": search_path.endsWith("json") && (isXml = !1); var path = "/" + search_path, onPopupClose = function(t) { $(".popup").hide(), $("#local-search-input").val(""), $(".search-result-list").remove(), $("#no-result").remove(), $(".local-search-pop-overlay").remove(), $("body").css("overflow", "") }, searchFunc = function(t, e, o) { "use strict"; $("body").append('<div class="search-popup-overlay local-search-pop-overlay"><div id="search-loading-icon"><i class="fa fa-spinner fa-pulse fa-2x fa-fw"></i></div></div>').css("overflow", "hidden"), $("#search-loading-icon").css("margin", "20% auto 0 auto").css("text-align", "center"), $.ajax({ url: t, dataType: isXml ? "xml": "json", async: !0, success: function(t) { isfetched = !0, $(".popup").detach().appendTo(".header-inner"); var n = isXml ? $("entry", t).map(function() { return { title: $("title", this).text(), content: $("content", this).text(), url: $("url", this).text() } }).get() : t, r = document.getElementById(e), s = document.getElementById(o), a = function() { var t = r.value.trim().toLowerCase(), e = t.split(/[\s\-]+/); e.length > 1 && e.push(t); var o = []; if (t.length > 0 && n.forEach(function(n) { function r(e, o, n, r) { for (var s = r[r.length - 1], a = s.position, i = s.word, l = [], h = 0; a + i.length <= n && 0 != r.length;) { i === t && h++, l.push({ position: a, length: i.length }); var p = a + i.length; for (r.pop(); 0 != r.length && (s = r[r.length - 1], a = s.position, i = s.word, p > a);) r.pop() } return c += h, { hits: l, start: o, end: n, searchTextCount: h } } function s(t, e) { var o = "", n = e.start; return e.hits.forEach(function(e) { o += t.substring(n, e.position); var r = e.position + e.length; o += '<b class="search-keyword">' + t.substring(e.position, r) + "</b>", n = r }), o += t.substring(n, e.end) } var a = !1, i = 0, c = 0, l = n.title.trim(), h = l.toLowerCase(), p = n.content.trim().replace(/<[^>]+>/g, ""), u = p.toLowerCase(), f = decodeURIComponent(n.url), d = [], g = []; if ("" != l && (e.forEach(function(t) { function e(t, e, o) { var n = t.length; if (0 === n) return []; var r = 0, s = [], a = []; for (o || (e = e.toLowerCase(), t = t.toLowerCase()); (s = e.indexOf(t, r)) > -1;) a.push({ position: s, word: t }), r = s + n; return a } d = d.concat(e(t, h, !1)), g = g.concat(e(t, u, !1)) }), (d.length > 0 || g.length > 0) && (a = !0, i = d.length + g.length)), a) { [d, g].forEach(function(t) { t.sort(function(t, e) { return e.position !== t.position ? e.position - t.position: t.word.length - e.word.length }) }); var v = []; 0 != d.length && v.push(r(l, 0, l.length, d)); for (var C = []; 0 != g.length;) { var $ = g[g.length - 1], m = $.position, x = $.word, w = m - 20, y = m + 80; w < 0 && (w = 0), y < m + x.length && (y = m + x.length), y > p.length && (y = p.length), C.push(r(p, w, y, g)) } C.sort(function(t, e) { return t.searchTextCount !== e.searchTextCount ? e.searchTextCount - t.searchTextCount: t.hits.length !== e.hits.length ? e.hits.length - t.hits.length: t.start - e.start }); var T = parseInt("1"); T >= 0 && (C = C.slice(0, T)); var b = ""; b += 0 != v.length ? "<li><a href='" + f + "' class='search-result-title'>" + s(l, v[0]) + "</a>": "<li><a href='" + f + "' class='search-result-title'>" + l + "</a>", C.forEach(function(t) { b += "<a href='" + f + '\'><p class="search-result">' + s(p, t) + "...</p></a>" }), b += "</li>", o.push({ item: b, searchTextCount: c, hitCount: i, id: o.length }) } }), 1 === e.length && "" === e[0]) s.innerHTML = '<div id="no-result"><i class="fa fa-search fa-5x" /></div>'; else if (0 === o.length) s.innerHTML = '<div id="no-result"><i class="fa fa-frown-o fa-5x" /></div>'; else { o.sort(function(t, e) { return t.searchTextCount !== e.searchTextCount ? e.searchTextCount - t.searchTextCount: t.hitCount !== e.hitCount ? e.hitCount - t.hitCount: e.id - t.id }); var a = '<ul class="search-result-list">'; o.forEach(function(t) { a += t.item }), a += "</ul>", s.innerHTML = a } }; r.addEventListener("input", a), $(".local-search-pop-overlay").remove(), $("body").css("overflow", ""), proceedsearch() } }) }; $(".popup-trigger").click(function(t) { t.stopPropagation(), isfetched === !1 ? searchFunc(path, "local-search-input", "local-search-result") : proceedsearch() }), $(".popup-btn-close").click(onPopupClose), $(".popup").click(function(t) { t.stopPropagation() }), $(document).on("keyup", function(t) { var e = 27 === t.which && $(".search-popup").is(":visible"); e && onPopupClose() })</script></body><script>$(function() { $("a").not(".nav-link,.cloud-tie-join-count,.ignore-href,.jstree-anchor").addClass("animsition-link") }); var burst1 = new mojs.Burst({ left: 0, top: 0, radius: { 5 : 40 }, children: { shape: "circle", fill: ["red", "cyan", "orange"], fillOpacity: .8, radiusX: 3.5, radiusY: 3.5 } }); document.addEventListener("click", function(a) { null == a.target.href && "footer" != a.target.className && "copyright" != a.target.className && "author__urls social-icons" != a.target.className && "author__avatar" != a.target.className && "sidebar sidebar-active" != a.target.className && burst1.tune({ x: a.pageX, y: a.pageY }).generate().replay() })</script><script type="text/javascript" src="/js/message.js"></script></html>