-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy path404.html
1 lines (1 loc) · 50.4 KB
/
404.html
1
<!doctype html><html lang=zh class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="An Android Developer."><meta name=author content="Yorek Liu"><link rel=icon href=/assets/images/favicon.webp><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.3"><title>Yorek's Blog</title><link rel=stylesheet href=/assets/stylesheets/main.50c56a3b.min.css><link rel=stylesheet href=/assets/stylesheets/palette.06af60db.min.css><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Noto+Sans+SC:300,300i,400,400i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Noto Sans SC";--md-code-font:"JetBrains Mono"}</style><link rel=stylesheet href=/css/timeago.css><link rel=stylesheet href=/stylesheets/extra.css><script>__md_scope=new URL("/",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><script id=__analytics>function __md_analytics(){function n(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],n("js",new Date),n("config","UA-155096376-1"),document.addEventListener("DOMContentLoaded",function(){document.forms.search&&document.forms.search.query.addEventListener("blur",function(){this.value&&n("event","search",{search_term:this.value})}),document$.subscribe(function(){var a=document.forms.feedback;if(void 0!==a)for(var e of a.querySelectorAll("[type=submit]"))e.addEventListener("click",function(e){e.preventDefault();var t=document.location.pathname,e=this.getAttribute("data-md-value");n("event","feedback",{page:t,data:e}),a.firstElementChild.disabled=!0;e=a.querySelector(".md-feedback__note [data-md-value='"+e+"']");e&&(e.hidden=!1)}),a.hidden=!1}),location$.subscribe(function(e){n("config","UA-155096376-1",{page_path:e.pathname})})});var e=document.createElement("script");e.async=!0,e.src="https://www.googletagmanager.com/gtag/js?id=UA-155096376-1",document.getElementById("__analytics").insertAdjacentElement("afterEnd",e)}</script><script>"undefined"!=typeof __md_analytics&&__md_analytics()</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=white data-md-color-accent=blue> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> </div> <div data-md-component=announce> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=页眉> <a href=/. title="Yorek's Blog" class="md-header__button md-logo" aria-label="Yorek's Blog" data-md-component=logo> <img src=/assets/images/favicon.webp alt=logo> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> Yorek's Blog </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=white data-md-color-accent=blue aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=deep-orange data-md-color-accent=deep-orange aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=搜索 placeholder=搜索 autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=查找> <a href=javascript:void(0) class="md-search__icon md-icon" title=分享 aria-label=分享 data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=清空当前内容 aria-label=清空当前内容 tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> 正在初始化搜索引擎 </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=标签 data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=/. class=md-tabs__link> Home </a> </li> <li class=md-tabs__item> <a href=/android/3rd-library/3rd-library-source-code/ class=md-tabs__link> Android </a> </li> <li class=md-tabs__item> <a href=/design-pattern/design-pattern/ class=md-tabs__link> Books </a> </li> <li class=md-tabs__item> <a href=/leetcode/ class=md-tabs__link> LeetCode </a> </li> <li class=md-tabs__item> <a href=/flutter/flutter_first_project_1/ class=md-tabs__link> Flutter </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=导航栏 data-md-level=0> <label class=md-nav__title for=__drawer> <a href=/. title="Yorek's Blog" class="md-nav__button md-logo" aria-label="Yorek's Blog" data-md-component=logo> <img src=/assets/images/favicon.webp alt=logo> </a> Yorek's Blog </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/. class=md-nav__link> <span class=md-ellipsis> Home </span> </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2> <label class=md-nav__link for=__nav_2 id=__nav_2_label tabindex> <span class=md-ellipsis> Android </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> Android </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2_1> <label class=md-nav__link for=__nav_2_1 id=__nav_2_1_label tabindex=0> <span class=md-ellipsis> 三方库系列 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_2_1_label aria-expanded=false> <label class=md-nav__title for=__nav_2_1> <span class="md-nav__icon md-icon"></span> 三方库系列 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/android/3rd-library/3rd-library-source-code/ class=md-nav__link> <span class=md-ellipsis> Android三方库源码分析 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/matrix/ class=md-nav__link> <span class=md-ellipsis> 微信APM Matrix解析 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/matrix-trace/ class=md-nav__link> <span class=md-ellipsis> Matrix-TraceCanary解析 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/matrix-trace-plugin/ class=md-nav__link> <span class=md-ellipsis> Matrix-ASM插桩插件解析 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/matrix-io/ class=md-nav__link> <span class=md-ellipsis> Matrix-IOCanary解析 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/matrix-resource/ class=md-nav__link> <span class=md-ellipsis> Matrix-ResourceCanary解析 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/matrix-apk-checker/ class=md-nav__link> <span class=md-ellipsis> Matrix-ApkChecker:安装包分析检测工具 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/matrix-sqlitelint/ class=md-nav__link> <span class=md-ellipsis> Matrix-SQLiteLint解析 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/xhook/ class=md-nav__link> <span class=md-ellipsis> 最常用的PLT Hook框架:xHook </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/andresguard/ class=md-nav__link> <span class=md-ellipsis> AndResGuard资源混淆原理浅析 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/hprof-shrink/ class=md-nav__link> <span class=md-ellipsis> 剖析hprof文件的两种主要裁剪流派 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/okhttp/ class=md-nav__link> <span class=md-ellipsis> OkHttp3源码解析 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/retrofit/ class=md-nav__link> <span class=md-ellipsis> Retrofit2源码解析 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/rxjava%26rxandroid/ class=md-nav__link> <span class=md-ellipsis> RxJava源码解析及使用实例 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/RxJava/ class=md-nav__link> <span class=md-ellipsis> RxJava操作符大全 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/glide1/ class=md-nav__link> <span class=md-ellipsis> Glide v4 源码解析(一) </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/glide2/ class=md-nav__link> <span class=md-ellipsis> Glide v4 源码解析(二) </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/glide3/ class=md-nav__link> <span class=md-ellipsis> Glide v4 源码解析(三) </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/glide4/ class=md-nav__link> <span class=md-ellipsis> Glide v4 源码解析(四) </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/glide5/ class=md-nav__link> <span class=md-ellipsis> Glide v4 源码解析(五) </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/glide6/ class=md-nav__link> <span class=md-ellipsis> Glide v4 源码解析(六) </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/glide7/ class=md-nav__link> <span class=md-ellipsis> Glide v4 源码解析(七) </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/migrate-to-glide/ class=md-nav__link> <span class=md-ellipsis> 杂记:从Picasso迁移至Glide </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/eventbus/ class=md-nav__link> <span class=md-ellipsis> EventBus源码解析 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/leakcanary/ class=md-nav__link> <span class=md-ellipsis> LeakCanary2源码解析 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/permissiondispatcher/ class=md-nav__link> <span class=md-ellipsis> PermissionDispatcher源码解析 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/constraintlayout/ class=md-nav__link> <span class=md-ellipsis> ConstraintLayout使用大全 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/dagger2/ class=md-nav__link> <span class=md-ellipsis> 初学者的Dagger2教程 </span> </a> </li> <li class=md-nav__item> <a href=/android/3rd-library/hotfix/ class=md-nav__link> <span class=md-ellipsis> Hotfix方案初探 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2_2> <label class=md-nav__link for=__nav_2_2 id=__nav_2_2_label tabindex=0> <span class=md-ellipsis> 自研 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_2_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2_2> <span class="md-nav__icon md-icon"></span> 自研 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/android/library/apm-sample/ class=md-nav__link> <span class=md-ellipsis> APM示例 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2_3> <label class=md-nav__link for=__nav_2_3 id=__nav_2_3_label tabindex=0> <span class=md-ellipsis> framework系列 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_2_3_label aria-expanded=false> <label class=md-nav__title for=__nav_2_3> <span class="md-nav__icon md-icon"></span> framework系列 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/android/framework/Android%E5%9B%9B%E5%A4%A7%E7%BB%84%E4%BB%B6%281%29/ class=md-nav__link> <span class=md-ellipsis> Activity </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/Android%E5%9B%9B%E5%A4%A7%E7%BB%84%E4%BB%B6%282%29/ class=md-nav__link> <span class=md-ellipsis> Service </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/Android%E5%9B%9B%E5%A4%A7%E7%BB%84%E4%BB%B6%283%29/ class=md-nav__link> <span class=md-ellipsis> Broadcasts </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/Android%E5%9B%9B%E5%A4%A7%E7%BB%84%E4%BB%B6%284%29/ class=md-nav__link> <span class=md-ellipsis> Content Providers与Fragment </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/IPC%E6%9C%BA%E5%88%B6/ class=md-nav__link> <span class=md-ellipsis> IPC机制 </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/View%E7%9A%84%E4%BA%8B%E4%BB%B6%E4%BD%93%E7%B3%BB/ class=md-nav__link> <span class=md-ellipsis> View的事件体系 </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/View%E7%9A%84%E7%BB%98%E5%88%B6%E5%8E%9F%E7%90%86/ class=md-nav__link> <span class=md-ellipsis> View的绘制原理以及自定义View </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/RemoteViews/ class=md-nav__link> <span class=md-ellipsis> RemoteViews </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/Drawable/ class=md-nav__link> <span class=md-ellipsis> Android中的Drawable资源 </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/Android%E5%8A%A8%E7%94%BB/ class=md-nav__link> <span class=md-ellipsis> Android动画 </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/Window%E4%B8%8EWindowManager/ class=md-nav__link> <span class=md-ellipsis> Window与WindowManager </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/%E5%9B%9B%E5%A4%A7%E7%BB%84%E4%BB%B6%E5%90%AF%E5%8A%A8%E8%BF%87%E7%A8%8B/ class=md-nav__link> <span class=md-ellipsis> 四大组件启动过程 </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/Android%E6%B6%88%E6%81%AF%E6%9C%BA%E5%88%B6/ class=md-nav__link> <span class=md-ellipsis> Android消息机制 </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/Android%E7%BA%BF%E7%A8%8B%E4%B8%8E%E7%BA%BF%E7%A8%8B%E6%B1%A0/ class=md-nav__link> <span class=md-ellipsis> Android线程与线程池 </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/Bitmap%E7%9A%84%E7%BC%93%E5%AD%98%E4%B8%8E%E5%8A%A0%E8%BD%BD/ class=md-nav__link> <span class=md-ellipsis> Bitmap的缓存与加载 </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/JNI%E4%B8%8ENDK/ class=md-nav__link> <span class=md-ellipsis> JNI与NDK编程简介 </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/ class=md-nav__link> <span class=md-ellipsis> Android性能优化 </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/binder1-mediaservice/ class=md-nav__link> <span class=md-ellipsis> Binder深入理解——以MediaService为例 </span> </a> </li> <li class=md-nav__item> <a href=/android/framework/binder2/ class=md-nav__link> <span class=md-ellipsis> Binder深入理解——罗老师系列 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2_4> <label class=md-nav__link for=__nav_2_4 id=__nav_2_4_label tabindex=0> <span class=md-ellipsis> 杂记 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_2_4_label aria-expanded=false> <label class=md-nav__title for=__nav_2_4> <span class="md-nav__icon md-icon"></span> 杂记 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/android/other/commands/ class=md-nav__link> <span class=md-ellipsis> Android开发常见命令 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/android-tv/ class=md-nav__link> <span class=md-ellipsis> Android TV 专项 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/annotation/ class=md-nav__link> <span class=md-ellipsis> 注解的定义及解析 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/best_throttle_in_mvvm/ class=md-nav__link> <span class=md-ellipsis> 这可能是MVVM中最优雅的按键防抖方案 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/android-jenkins/ class=md-nav__link> <span class=md-ellipsis> Jenkins for android </span> </a> </li> <li class=md-nav__item> <a href=/android/other/SystemProrities/ class=md-nav__link> <span class=md-ellipsis> 普通Android程序使用SystemProrities </span> </a> </li> <li class=md-nav__item> <a href=/android/other/recyclerview-cache/ class=md-nav__link> <span class=md-ellipsis> ListView、RecyclerView缓存策略解析 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/recyclerview-item-docoration/ class=md-nav__link> <span class=md-ellipsis> RecyclerView高级特性——ItemDecoration </span> </a> </li> <li class=md-nav__item> <a href=/android/other/recyclerview-others/ class=md-nav__link> <span class=md-ellipsis> RecyclerView的一些使用细节 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/RecyclerView-Sort%26Delete/ class=md-nav__link> <span class=md-ellipsis> RecyclerView高级特性——拖拽排序以及滑动删除 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/FAB-Behavior/ class=md-nav__link> <span class=md-ellipsis> FloatingActionButton上滑隐藏下滑显示 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/nestedscrolling/ class=md-nav__link> <span class=md-ellipsis> NestedScrolling机制 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/porterduff/ class=md-nav__link> <span class=md-ellipsis> 使用Porter-Duff合成数字图像 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/runtime/ class=md-nav__link> <span class=md-ellipsis> Android Runtime </span> </a> </li> <li class=md-nav__item> <a href=/android/other/android_alias/ class=md-nav__link> <span class=md-ellipsis> Android马甲包的那些事儿 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/Android-Development-Tool/ class=md-nav__link> <span class=md-ellipsis> Android神兵利器 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/FileProvider/ class=md-nav__link> <span class=md-ellipsis> FileProvider </span> </a> </li> <li class=md-nav__item> <a href=/android/other/Android%E5%88%A4%E6%96%AD%E5%AF%BC%E8%88%AA%E6%A0%8F%E9%AB%98%E5%BA%A6/ class=md-nav__link> <span class=md-ellipsis> Android判断虚拟按键(导航栏)显示与否、高度以及获取屏幕实际高度 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/Android%E5%9B%BE%E7%89%87%E9%80%89%E6%8B%A9%E5%99%A8/ class=md-nav__link> <span class=md-ellipsis> Android图片选择器 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/Android%E5%BA%95%E9%83%A8%E5%AF%BC%E8%88%AA%E6%A0%8F%E6%A1%86%E6%9E%B6/ class=md-nav__link> <span class=md-ellipsis> Android原生底部导航栏 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/Android%E6%90%9C%E7%B4%A2%E6%A0%8F%E7%9A%84%E5%AE%9E%E7%8E%B0/ class=md-nav__link> <span class=md-ellipsis> Android搜索栏的实现 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/Android%E6%9A%82%E5%81%9C%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE%E5%99%A8%E7%9A%84%E6%92%AD%E6%94%BE/ class=md-nav__link> <span class=md-ellipsis> Android暂停酷狗、网易云音乐等音乐播放器的播放 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/Android%E6%BB%91%E5%8A%A8%E8%BF%94%E5%9B%9E%E5%AE%9E%E8%B7%B5/ class=md-nav__link> <span class=md-ellipsis> Android滑动返回实践 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/Android%E7%A8%8B%E5%BA%8F%E5%8F%8D%E7%BC%96%E8%AF%91/ class=md-nav__link> <span class=md-ellipsis> MacOS下Android程序反编译 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/Android%E9%80%9A%E8%AE%AF%E5%BD%95%E5%BF%AB%E9%80%9F%E8%AF%BB%E5%8F%96/ class=md-nav__link> <span class=md-ellipsis> Android通讯录快速读取 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/soft-keyboard-in-app/ class=md-nav__link> <span class=md-ellipsis> App内自定义软键盘 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/%E8%85%BE%E8%AE%AFX5%E5%86%85%E6%A0%B8%E5%85%A5%E5%9D%91%E6%8C%87%E5%8D%97/ class=md-nav__link> <span class=md-ellipsis> 腾讯TBS X5浏览器内核入坑指南 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/%E7%90%90%E7%A2%8E%E7%9F%A5%E8%AF%86%E7%82%B9/ class=md-nav__link> <span class=md-ellipsis> 琐碎知识点 </span> </a> </li> <li class=md-nav__item> <a href=/android/other/%E7%90%90%E7%A2%8E%E7%9F%A5%E8%AF%86%E7%82%B92/ class=md-nav__link> <span class=md-ellipsis> 琐碎知识点2 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2_5> <label class=md-nav__link for=__nav_2_5 id=__nav_2_5_label tabindex=0> <span class=md-ellipsis> 基础知识 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_2_5_label aria-expanded=false> <label class=md-nav__title for=__nav_2_5> <span class="md-nav__icon md-icon"></span> 基础知识 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/android/paid/zsxq/week1-synchronized/ class=md-nav__link> <span class=md-ellipsis> 理解Java中synchronized关键词 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week2-service/ class=md-nav__link> <span class=md-ellipsis> 理解Service </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week3-activity/ class=md-nav__link> <span class=md-ellipsis> 理解Activity的启动模式 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week4-startActivityForResult/ class=md-nav__link> <span class=md-ellipsis> 关于startActivityForResult </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week5-view/ class=md-nav__link> <span class=md-ellipsis> 关于View的知识 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week6-gradle/ class=md-nav__link> <span class=md-ellipsis> 关于Gradle的知识 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week7-serialization/ class=md-nav__link> <span class=md-ellipsis> 关于序列化的知识 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week10-classloader/ class=md-nav__link> <span class=md-ellipsis> Android中的ClassLoader </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week11-binder/ class=md-nav__link> <span class=md-ellipsis> Binder简介 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week12-retrofit-okhttp/ class=md-nav__link> <span class=md-ellipsis> OkHttp和Retrofit的作用以及两者之间的联系 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week14-jvm-gc/ class=md-nav__link> <span class=md-ellipsis> JVM中垃圾回收策略 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week16-keep-app-alive/ class=md-nav__link> <span class=md-ellipsis> 进程保活 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week17-android-components/ class=md-nav__link> <span class=md-ellipsis> 四大组件的作用以及多进程 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week20-network-protocol/ class=md-nav__link> <span class=md-ellipsis> 网络协议 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week21-mvc%26mvp%26mvvm/ class=md-nav__link> <span class=md-ellipsis> MVC、MVP和MVVM </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week22-android-studio-build/ class=md-nav__link> <span class=md-ellipsis> Android Studio build过程 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/zsxq/week23-load-large-bitmap/ class=md-nav__link> <span class=md-ellipsis> 大尺寸图片加载问题 </span> </a> </li> <li class=md-nav__item> <a href=/java/generics-java-kotlin/ class=md-nav__link> <span class=md-ellipsis> Java&Kotlin在泛型方面的区别 </span> </a> </li> <li class=md-nav__item> <a href=/java/java-collections/ class=md-nav__link> <span class=md-ellipsis> Java集合总结 </span> </a> </li> <li class=md-nav__item> <a href=/java/java-foundation/ class=md-nav__link> <span class=md-ellipsis> Java常见概念 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2_6> <label class=md-nav__link for=__nav_2_6 id=__nav_2_6_label tabindex=0> <span class=md-ellipsis> Android开发高手课 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_2_6_label aria-expanded=false> <label class=md-nav__title for=__nav_2_6> <span class="md-nav__icon md-icon"></span> Android开发高手课 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/android/paid/master/ class=md-nav__link> <span class=md-ellipsis> Android开发高手课 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/crash_1/ class=md-nav__link> <span class=md-ellipsis> 01 | 崩溃优化(上):关于“崩溃”那些事儿 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/crash_2/ class=md-nav__link> <span class=md-ellipsis> 02 | 崩溃优化(下):应用崩溃了,你应该如何去分析? </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/memory_1/ class=md-nav__link> <span class=md-ellipsis> 03 | 内存优化(上):4GB内存时代,再谈内存优化 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/memory_2/ class=md-nav__link> <span class=md-ellipsis> 04 | 内存优化(下):内存优化这件事,应该从哪里着手? </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/stuck_1/ class=md-nav__link> <span class=md-ellipsis> 05 | 卡顿优化(上):你要掌握的卡顿分析方法 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/stuck_2/ class=md-nav__link> <span class=md-ellipsis> 06 | 卡顿优化(下):如何监控应用卡顿? </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/stuck_3/ class=md-nav__link> <span class=md-ellipsis> 06补充篇 | 卡顿优化:卡顿现场与卡顿分析 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/start_1/ class=md-nav__link> <span class=md-ellipsis> 07 | 启动优化(上):从启动过程看启动速度优化 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/start_2/ class=md-nav__link> <span class=md-ellipsis> 08 | 启动优化(下):优化启动速度的进阶方法 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/io_1/ class=md-nav__link> <span class=md-ellipsis> 09 | I/O优化(上):开发工程师必备的I/O优化知识 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/io_2/ class=md-nav__link> <span class=md-ellipsis> 10 | I/O优化(中):不同I/O方式的使用场景是什么? </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/io_3/ class=md-nav__link> <span class=md-ellipsis> 11 | I/O优化(下):如何监控线上I/O操作? </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/storage_1/ class=md-nav__link> <span class=md-ellipsis> 12 | 存储优化(上):常见的数据存储方法有哪些? </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/storage_2/ class=md-nav__link> <span class=md-ellipsis> 13 | 存储优化(中):如何优化数据存储? </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/storage_3/ class=md-nav__link> <span class=md-ellipsis> 14 | 存储优化(下):数据库SQLite的使用和优化 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/network_1/ class=md-nav__link> <span class=md-ellipsis> 15 | 网络优化(上):移动开发工程师必备的网络优化知识 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/network_2/ class=md-nav__link> <span class=md-ellipsis> 16 | 网络优化(中):复杂多变的移动网络该如何优化? </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/network_3/ class=md-nav__link> <span class=md-ellipsis> 17 | 网络优化(下):大数据下网络该如何监控? </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/battery_1/ class=md-nav__link> <span class=md-ellipsis> 18 | 耗电优化(上):从电量优化的演进看耗电分析 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/battery_2/ class=md-nav__link> <span class=md-ellipsis> 19 | 耗电优化(下):耗电的优化方法与线上监控 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/ui_1/ class=md-nav__link> <span class=md-ellipsis> 20 | UI 优化(上):UI 渲染的几个关键概念 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/ui_2/ class=md-nav__link> <span class=md-ellipsis> 21 | UI 优化(下):如何优化 UI 渲染? </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/package_1/ class=md-nav__link> <span class=md-ellipsis> 22 | 包体积优化(上):如何减少安装包大小? </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/package_2/ class=md-nav__link> <span class=md-ellipsis> 23 | 包体积优化(下):资源优化的进阶实践 </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/compile/ class=md-nav__link> <span class=md-ellipsis> 26 | 关于编译,你需要了解什么? </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/bytecode/ class=md-nav__link> <span class=md-ellipsis> 27 | 编译插桩的三种方法:AspectJ、ASM、ReDex </span> </a> </li> <li class=md-nav__item> <a href=/android/paid/master/native_hook/ class=md-nav__link> <span class=md-ellipsis> 35 | Native Hook 技术,天使还是魔鬼? </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex> <span class=md-ellipsis> Books </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> Books </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3_1> <label class=md-nav__link for=__nav_3_1 id=__nav_3_1_label tabindex=0> <span class=md-ellipsis> Design Pattern </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_1_label aria-expanded=false> <label class=md-nav__title for=__nav_3_1> <span class="md-nav__icon md-icon"></span> Design Pattern </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/design-pattern/design-pattern/ class=md-nav__link> <span class=md-ellipsis> 设计模式概述 </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/design-principle/ class=md-nav__link> <span class=md-ellipsis> 面向对象的六大原则 </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/singleton/ class=md-nav__link> <span class=md-ellipsis> 单例模式(Singleton) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/builder/ class=md-nav__link> <span class=md-ellipsis> 建造者模式(Builder) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/prototype/ class=md-nav__link> <span class=md-ellipsis> 原型模式(Prototype) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/factory-method/ class=md-nav__link> <span class=md-ellipsis> 工厂方法模式(Factory method) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/abstract-factory/ class=md-nav__link> <span class=md-ellipsis> 抽象工厂模式(Abstract factory) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/proxy/ class=md-nav__link> <span class=md-ellipsis> 代理模式(Proxy) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/composite/ class=md-nav__link> <span class=md-ellipsis> 组合模式(Composite) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/adapter/ class=md-nav__link> <span class=md-ellipsis> 适配器模式(Adapter) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/decorator/ class=md-nav__link> <span class=md-ellipsis> 装饰模式(Decorator) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/flyweight/ class=md-nav__link> <span class=md-ellipsis> 享元模式(Flyweight) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/facade/ class=md-nav__link> <span class=md-ellipsis> 外观模式(Facade) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/bridge/ class=md-nav__link> <span class=md-ellipsis> 桥接模式(Bridge) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/strategy/ class=md-nav__link> <span class=md-ellipsis> 策略模式(Strategy) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/state/ class=md-nav__link> <span class=md-ellipsis> 状态模式(State) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/chain-of-responsibility/ class=md-nav__link> <span class=md-ellipsis> 责任链模式(Chain of responsibility) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/interpreter/ class=md-nav__link> <span class=md-ellipsis> 解释器模式(Interpreter) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/command/ class=md-nav__link> <span class=md-ellipsis> 命令模式(Command) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/observer/ class=md-nav__link> <span class=md-ellipsis> 观察者模式(Observer) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/memento/ class=md-nav__link> <span class=md-ellipsis> 备忘录模式(Memento) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/iterator/ class=md-nav__link> <span class=md-ellipsis> 迭代器模式(Iterator) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/template-method/ class=md-nav__link> <span class=md-ellipsis> 模版方法模式(Template method) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/visitor/ class=md-nav__link> <span class=md-ellipsis> 访问者模式(Visitor) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/mediator/ class=md-nav__link> <span class=md-ellipsis> 中介者模式(Mediator) </span> </a> </li> <li class=md-nav__item> <a href=/design-pattern/confusing-design-pattern/ class=md-nav__link> <span class=md-ellipsis> 易混淆的设计模式 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex=0> <span class=md-ellipsis> Effective Java </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> Effective Java </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/effective-java/effective-java/ class=md-nav__link> <span class=md-ellipsis> Effective Java概述 </span> </a> </li> <li class=md-nav__item> <a href=/effective-java/chapter1/ class=md-nav__link> <span class=md-ellipsis> 创建和销毁对象 </span> </a> </li> <li class=md-nav__item> <a href=/effective-java/chapter2/ class=md-nav__link> <span class=md-ellipsis> 对于所有对象都通用的方法 </span> </a> </li> <li class=md-nav__item> <a href=/effective-java/chapter3/ class=md-nav__link> <span class=md-ellipsis> 类和接口 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3_3> <label class=md-nav__link for=__nav_3_3 id=__nav_3_3_label tabindex=0> <span class=md-ellipsis> JVM </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3_3> <span class="md-nav__icon md-icon"></span> JVM </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/jvm/jvm-content/ class=md-nav__link> <span class=md-ellipsis> 深入理解Java虚拟机 </span> </a> </li> <li class=md-nav__item> <a href=/jvm/java-memory-area-oom/ class=md-nav__link> <span class=md-ellipsis> Java内存区域与内存溢出异常 </span> </a> </li> <li class=md-nav__item> <a href=/jvm/java-gc/ class=md-nav__link> <span class=md-ellipsis> 垃圾收集器与内存分配策略 </span> </a> </li> <li class=md-nav__item> <a href=/jvm/class-struct/ class=md-nav__link> <span class=md-ellipsis> 类文件结构 </span> </a> </li> <li class=md-nav__item> <a href=/jvm/load-class/ class=md-nav__link> <span class=md-ellipsis> 虚拟机类加载机制 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3_4> <label class=md-nav__link for=__nav_3_4 id=__nav_3_4_label tabindex=0> <span class=md-ellipsis> Refactoring </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_4_label aria-expanded=false> <label class=md-nav__title for=__nav_3_4> <span class="md-nav__icon md-icon"></span> Refactoring </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/refactoring/refactoring/ class=md-nav__link> <span class=md-ellipsis> 重构:改善既有代码的设计 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> LeetCode </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> LeetCode </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/leetcode/ class=md-nav__link> <span class=md-ellipsis> 算法目录 </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/code_interviews_1/ class=md-nav__link> <span class=md-ellipsis> 数据结构、算法和数据操作 </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/code_interviews_3/ class=md-nav__link> <span class=md-ellipsis> 高质量的代码 </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/code_interviews_4/ class=md-nav__link> <span class=md-ellipsis> 解决问题的思路 </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/code_interviews_5/ class=md-nav__link> <span class=md-ellipsis> 优化时间和空间效率 </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/code_interviews_6/ class=md-nav__link> <span class=md-ellipsis> 面试中的各项能力 </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/array/ class=md-nav__link> <span class=md-ellipsis> Array </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/leetcode1-10/ class=md-nav__link> <span class=md-ellipsis> LeetCode(1-10) </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/leetcode11-20/ class=md-nav__link> <span class=md-ellipsis> LeetCode(11-20) </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/leetcode21-30/ class=md-nav__link> <span class=md-ellipsis> LeetCode(21-30) </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/leetcode31-40/ class=md-nav__link> <span class=md-ellipsis> LeetCode(31-40) </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/leetcode41-50/ class=md-nav__link> <span class=md-ellipsis> LeetCode(41-50) </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/leetcode51-60/ class=md-nav__link> <span class=md-ellipsis> LeetCode(51-60) </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/leetcode61-70/ class=md-nav__link> <span class=md-ellipsis> LeetCode(61-70) </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/leetcode71-80/ class=md-nav__link> <span class=md-ellipsis> LeetCode(71-80) </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/leetcode81-90/ class=md-nav__link> <span class=md-ellipsis> LeetCode(81-90) </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/leetcode91-100/ class=md-nav__link> <span class=md-ellipsis> LeetCode(91-100) </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/leetcode101-110/ class=md-nav__link> <span class=md-ellipsis> LeetCode(101-110) </span> </a> </li> <li class=md-nav__item> <a href=/leetcode/leetcode111-120/ class=md-nav__link> <span class=md-ellipsis> LeetCode(111-120) </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_5> <label class=md-nav__link for=__nav_5 id=__nav_5_label tabindex> <span class=md-ellipsis> Flutter </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> Flutter </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=/flutter/flutter_first_project_1/ class=md-nav__link> <span class=md-ellipsis> 年轻人的第一个Flutter程序(1) </span> </a> </li> <li class=md-nav__item> <a href=/flutter/flutter_first_project_2/ class=md-nav__link> <span class=md-ellipsis> 年轻人的第一个Flutter程序(2) </span> </a> </li> <li class=md-nav__item> <a href=/flutter/flutter_first_project_3/ class=md-nav__link> <span class=md-ellipsis> 年轻人的第一个Flutter程序(3) </span> </a> </li> <li class=md-nav__item> <a href=/flutter/flutter_first_project_4/ class=md-nav__link> <span class=md-ellipsis> 年轻人的第一个Flutter程序(4) </span> </a> </li> <li class=md-nav__item> <a href=/flutter/flutter_provider/ class=md-nav__link> <span class=md-ellipsis> Flutter状态管理——Provider </span> </a> </li> <li class=md-nav__item> <a href=/flutter/flutter_rich_text/ class=md-nav__link> <span class=md-ellipsis> Flutter 文本编辑器——记自研 Markdown 编辑器 MooD </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label=目录> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <h1>404 - Not found</h1> </article> </div> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> 回到页面顶部 </button> </main> <footer class=md-footer> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> © 2024 Yorek </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/YorekLiu target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <script id=__config type=application/json>{"base": "/", "features": ["navigation.tabs", "navigation.instant", "navigation.top", "navigation.tracking", "navigation.expand", "search.suggest", "search.highlight", "search.share", "content.code.copy"], "search": "/assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}}</script> <script src=/assets/javascripts/bundle.d7c377c4.min.js></script> <script src=/js/timeago.min.js></script> <script src=/js/timeago_mkdocs_material.js></script> <script src=/javascripts/mathjax.js></script> <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script> <script src=https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js></script> </body> </html>