├── images ├── 公众号.jpg ├── 个人微信.jpeg ├── 小彭的读者群.png ├── 微信收款码.jpeg ├── 搜一搜公众号.png ├── 签约海报.jpeg ├── 群二维码.jpeg ├── 船底座星云.jpg ├── knowledge.png ├── 请小彭喝杯速溶咖啡.png ├── 搜一搜公众号-文字-白色版.png ├── Android_Banner.png └── AndroidFamily_2022_09_06.png ├── 关于我.md ├── thoughts ├── career.md └── extensive_reading.md ├── LICENSE └── README.md /images/公众号.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengxurui/AndroidFamily/HEAD/images/公众号.jpg -------------------------------------------------------------------------------- /images/个人微信.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengxurui/AndroidFamily/HEAD/images/个人微信.jpeg -------------------------------------------------------------------------------- /images/小彭的读者群.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengxurui/AndroidFamily/HEAD/images/小彭的读者群.png -------------------------------------------------------------------------------- /images/微信收款码.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengxurui/AndroidFamily/HEAD/images/微信收款码.jpeg -------------------------------------------------------------------------------- /images/搜一搜公众号.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengxurui/AndroidFamily/HEAD/images/搜一搜公众号.png -------------------------------------------------------------------------------- /images/签约海报.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengxurui/AndroidFamily/HEAD/images/签约海报.jpeg -------------------------------------------------------------------------------- /images/群二维码.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengxurui/AndroidFamily/HEAD/images/群二维码.jpeg -------------------------------------------------------------------------------- /images/船底座星云.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengxurui/AndroidFamily/HEAD/images/船底座星云.jpg -------------------------------------------------------------------------------- /images/knowledge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengxurui/AndroidFamily/HEAD/images/knowledge.png -------------------------------------------------------------------------------- /images/请小彭喝杯速溶咖啡.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengxurui/AndroidFamily/HEAD/images/请小彭喝杯速溶咖啡.png -------------------------------------------------------------------------------- /images/搜一搜公众号-文字-白色版.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengxurui/AndroidFamily/HEAD/images/搜一搜公众号-文字-白色版.png -------------------------------------------------------------------------------- /images/Android_Banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengxurui/AndroidFamily/HEAD/images/Android_Banner.png -------------------------------------------------------------------------------- /images/AndroidFamily_2022_09_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pengxurui/AndroidFamily/HEAD/images/AndroidFamily_2022_09_06.png -------------------------------------------------------------------------------- /关于我.md: -------------------------------------------------------------------------------- 1 | ### Hi there 👋 2 | 3 | 简单介绍一下自己: 4 | - Hi,我是小彭,一名活跃在 Android 社区的搬砖师,掘金签约作者,头条 / 简书优秀创作者,阿里云专家博主,全网文章阅读 100W+; 5 | - 95 后,坐标深圳; 6 | - 我们有一个 Android 交流群,寻找志同道合,热爱分享,热爱技术的小伙伴,欢迎进群(群宗旨:开放 · 纯粹 · 脑洞 · 互助); 7 | - 扫描 [微信](https://github.com/pengxurui/Android-NoteBook/raw/master/images/个人微信.jpeg) 或 [公众号](https://github.com/pengxurui/Android-NoteBook/raw/master/images/搜一搜公众号.png) 二维码可以找到我。 8 | 9 | ### 目前专注于输出 [AndroidFamily](https://github.com/pengxurui/AndroidFamily) 体系化文章和 [AndroidPlatforms](https://github.com/pengxurui/AndroidPlatforms) 适配指南,欢迎关注! 10 | 11 | ![](https://user-images.githubusercontent.com/25008934/204834420-1861b317-38a7-42bf-938f-932ab8b34c16.jpeg) 12 | -------------------------------------------------------------------------------- /thoughts/career.md: -------------------------------------------------------------------------------- 1 | # 关于职场 2 | 3 | 4 | #### 2021 年第 13 周 5 | 6 | **1、关于工作价值(你认为你的工作能打几分?)** 7 | 8 | 这说的是对自身工作价值的认识。“在其位谋其职”,抛开不合格和卓越两种极端情况,大多数工作的价值评估无非是合格或者优秀两种。那么,合格和优秀的边界在哪里呢?因素很多,既取决于每个领导者内心的评价标准,还取决于公司的大环境和资源分配。继续抛开这些外在因素,如果从你自己的角度评估,如何界定合格与优秀? 9 | 10 | - “我提出了优秀的解决方案,成功解决了 xx 问题” 【高质量】 11 | - “我在完成了预定工作之外,还完成了 xx” 【高效】 12 | - “我的工作成果(自认为)比所有同事的要好” 【横向对比】 13 | 14 | 以上三种自我认识,不能说是主观认识。的的确确都是用事实描绘出了一种(自认为)高质量、高效和拔尖的工作成果,这应该就是优秀的表现了吧?其实,不然!因为这些都是预期内的事情,一个公司招聘一名员工,高质量、高效、拔尖本身就是对工作成功的预期,这是合格的定义。而那些(所谓)不高质、不高效的工作成果的存在,其实是因为处于可以接受的容忍范围内。那么,什么才是优秀的标准?应该更多体现在岗位上的难点工作、公司迫切需要解决的问题、超出岗位预期的工作范畴上。 15 | 16 | 17 | **2、关于计划** 18 | 19 | 经过这 4 周的周计划实践,从结果来看,大体上学习和输出的效率有所提升,对每个周期内自己做了什么比较清楚。但在过程中也发现了一些可以改进的点~ 20 | 21 | 比如,我为每周列了一个计划,每天有什么奇思妙想也会往里面加。造成的影响就是每天我盯着这张越来越长越来越长的任务表,我不清楚应该做什么先做什么。另外,我的周计划里只有学习内容,没有工作内容,容易忽略工作安排带来的限制。 22 | 23 | 所以这周做出改进:周计划保持,依旧接收每天的奇思妙想。此外增加一个日计划。日计划里包括工作内容和每天计划学习内容,日计划一般的制定时间在前一天 / 当前早上,的方针是要体现硬性内容(high priority) 和弹性内容(mid priority)。 24 | 25 | **3、如何判断现在做的事情有没有前途?** 26 | 27 | 如何判断现在做的事情有没有前途,以及如何判断这份工作值不值得做?需要从行业 - 公司 - 岗位三个角度思考: 28 | 29 | - 行业的选择:判断是否是正在快速崛起的行业,而不是所谓高薪的行业。如何判断一个行业是正在快速崛起的行业:看巨头们是不是在投入关注。 30 | 31 | - 公司的选择:去到能力范围内最好的公司。在公司体量上,如果一直在小公司,一定要去大公司,在小公司眼光和格局是局限的,你不知道大公司的流程、体系是怎么运转的,优秀的人才标准的定义是怎样的。一直在大公司,可以选择去优质的小公司,很多人会把大公司的平台价值当作自己的价值,不知道自己真正几斤几两,个人能力也难得到全面施展。此外,还要看公司是否有健全的晋升/加薪机制。所要关心的不仅仅在于第一年签约的工资,更要关心在公司内兢兢业业工作几年的前辈们的工资,因为他们的工资很有可能就是你未来的工资。如果存在很多付出与回报不成正比的前辈,那么说明这个公司的晋升/加薪是有问题的。 32 | 33 | - 岗位的选择:除了选择感兴趣、与个人特质契合的岗位,还要选择核心岗位。所谓核心岗位就是老板投入最大关注力的地方。 34 | 35 | **4、拖延症的本质** 36 | 37 | 大脑的运行机制是分不清什么是计划,什么是执行指令的,所以当我们做出计划之后,我们的焦虑情绪就已经得到缓解。一旦我们制定的计划被拖延,长期下来会造成不断自我否定,认为自己不具备持续做一件事的能力。往往计划被拖延的原因,是在计划执行过程中遇到困境,但又不知道如何应对。 38 | 39 | WOOP 思维工具(加布里埃尔·厄廷根) 40 | 41 | W(Wish,愿望):本周、本月或本年需要完成的愿望;
42 | O(Outcome,蓝图):完成计划后最好的结构;
43 | O(Obstacle,可能遇到的障碍 / 困境):提前设想完成计划的过程中可能遇到的问题;
44 | P(Plan,预案):针对可能遇到的障碍做出的预案,采用 “如果......就......” 的句式:如果我遇到...问题,我就采取...的举措。
45 | 46 | 举个例子: 47 | 48 | - Wish:每周输出一篇文章,通过输出来倒逼自己输入,刺激自己不断学习。 49 | 50 | - Outcome:让自己保持思维的敏捷度,保持对新技术的敏感度,同时帮助到其他对技术感兴趣的人,称为更好的自己。 51 | 52 | - Obstacle: 53 | 1、工作 / 家庭太忙, 精力不够
54 | 2、创意枯竭
55 | 3、懈怠
56 | 57 | - Plan: 58 | 1、如果我精力不够,那么我就利用碎片化时间积累灵感和素材;
59 | 2、如果我创意枯竭,那么我通过持续学习,让自己获得更好的灵感;
60 | 3、如果我懈怠,那么我力 Flag,通过白纸黑字激励自己。
61 | 62 | 1、初期不要把战线拉得太强,可以先从每天 / 每周 / 每月开始,不断增强自己的自信心
63 | 2、Obstacle 和 Plan 要尽可能细致 & 具体 -------------------------------------------------------------------------------- /thoughts/extensive_reading.md: -------------------------------------------------------------------------------- 1 | # 关于扩展阅读 2 | 3 | #### 2021 年第 10 周 4 | 5 | **[《 “无代码” 与我们的距离》](https://isux.tencent.com/articles/trend-nocode-design.html)** —— ISUX 著 6 | 7 | > “无代码” 指的是无代码开发平台(NCDP,No-Code Development Platform),**本质上是通过图形用户界面这种可视化的形式替代程序员一行行编写代码的传统开发方式**。这意味着研发上游的产品经理和设计师可能比开发人员更需要关注 “无代码” 趋势对未来产品形态带来的影响。 8 | > 9 | > 优点:低门槛、低成本、高效率。 10 | > 11 | > 在面对需要为非专业用户提供无代码平台的设计时,如何简化复杂,把握非专业用户的心智模型而跳出专业开发者和设计师自身的思维习惯,是实践中会遇到的挑战。 12 | 13 | **[《腾讯文档 | 数据化设计》](https://isux.tencent.com/articles/data-awareness-for-ux.html)** —— ISUX 著 14 | 15 | > 数据是什么 / 数据是怎么产生的:**二手资料数据 + 问卷调研数据 + 应用埋点数据** 16 | > 17 | > 应用埋点类型:**曝光埋点 + 操作埋点 + 时长**,基于这三类原始数据,可以计算出点击率、功能渗透率、人均点击次数、人均使用时长等具有对比价值的数据。 18 | > - 曝光埋点:页面或条目展示的次数; 19 | > - 操作埋点:对某一区域(按钮、卡片、提示条等)进行手势操作(点击、双击、长按、滑动等); 20 | > - 时长埋点:标记以上两类埋点的时间差来获得。 21 | > 22 | > 数据分析在 UX 设计中的作用: 23 | > - 1、需求评审:以提升最终业务数据为目标,评估需求的价值贡献和优先级; 24 | > - 2、需求挖掘:数据作为产品健康度的体检指标,为设计圈定问题域; 25 | > - 3、设计决策:借鉴用户行为数据,对方案进行快速决策; 26 | > - 4、设计实验:采用数据实验对设计方案进行择优或改进。 27 | 28 | **[《程序员成长路线》](https://mp.weixin.qq.com/s/nUtUu6e_bXHvb_06Pf_05g)** —— 毕玄 著 29 | > **编程能力成长:** 30 | > - **初级:会用** 31 | > - **中级:会查问题和避免问题** 32 | > - **高级:懂得高级 API 和原理** 33 | > 34 | > **系统设计能力的要点:** 35 | > - **1、子系统职责划分:** 在超大型技术方案中,很容易出现某些部分职责重叠和冲突,如何划分子系统非常重要; 36 | > - **2、控制系统风险** 超大型系统设计一定是多个专业领域的架构师和大架构师共同设计,怎么确保在执行的过程中系统最重要的风险能够被控制住。这个时候需要在设计中考虑和遵守系统设计原则(例如:最基本的原则是接受系统不可用,但也要保证数据一致)。 37 | > - **3、考虑问题全面性:** 超大型系统设计会涉及业务层面、各种基础技术层面、基础设施层面,它的执行节奏也需要综合考虑人力投入、机器成本、基础设施布局述求、稳定性控制等。 38 | > 39 | > **系统设计能力成长的重点:** 40 | > 41 | > - **1、现在一两个技术领域做到专业,然后尽量扩大自己的知识广度;** 42 | > - **2、练习自己做 tradeoff 的能力。** 43 | 44 | **[《Beginner's Mind》](https://mp.weixin.qq.com/s/ZiB8zDXcD9CKqgLhc9XuTA)** —— 孟岩 著 45 | > 46 | > 我们在学习知识的时候,并不是凭空学习新知识,而是根据我们大脑中已有的知识,来解读我们读到的新东西。一方面,这会加快我们理解新知识的过程,也可以帮助我们更好地记忆,构成知识的复利。但是另一方面,如果新知识和旧知识差别过大,也会给我们带来困扰:我们的大脑会本能地抵御这些冲突,选择性的接受大脑认为 “合理” 的知识。 47 | > 48 | > 人们对于新事物的会做出不同的反应:有的人对一切好奇,每天都在进化、迭代甚至推翻昨天的自己;有的人像倒满的茶杯,聊天的时候根本不管你在说什么,只想把自己想说的说出来,对于新知识本能排斥。 49 | > 50 | > Pony马曾经说过,做产品要具备 “一秒变小白” 的能力。如果没有 Beginner's Mind,不能真切地体验到用户的困惑和问题,而是按照自己的理解来臆想功能,产品就会出问题。 51 | 52 | --- 53 | #### 2021 年第 11 周 54 | 55 | **[《怎样的监控,才真正说明系统有问题?》](https://juejin.cn/post/6940122949160550407)** —— 58 沈剑 著 56 | > 单维度易漏报,多维度立体化监控才是监控平台的根本。在设计上,看重通用、非侵入。 57 | 58 | **[《设计师如何从 0 到 1 做出一个好产品》](https://mp.weixin.qq.com/s/FRpzKKKTeh-JUy7XGN4sjA)** —— Luckgg 著 59 | 60 | ![](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f28879ef6ce046a1b77c0d04f2f60b90~tplv-k3u1fbpfcp-watermark.image) 61 | 62 | **[《如何写出高质量的技术文章?》](https://mp.weixin.qq.com/s/s27aEhwgwHZZbtd4wn9MVA)** —— 张建飞(阿里)著 63 | > **为什么要写技术文章?** 64 | > 65 | > “费曼学习法”:写文章是逼迫自己深入理解问题的过程(定义问题、整理思路、清晰表达),是构建知识体系的最佳方法。 66 | > 67 | > **什么是好的技术文章?** 68 | > 69 | > 1、指标因素:浏览量、点赞数、评论数、收藏数
70 | > 2、有价值的内容
71 | > 3、结构清晰、逻辑严密,具备一定的可读性和可理解性
72 | > 73 | > **如何写好技术文章?** 74 | > 75 | > 1、内容有用、大家好奇的点、自己的技术见解和思考、敢说真话。
76 | > 2、结构清晰:《金字塔原理》:结论先行、以上统下、归类分组、逻辑递进。对于一篇文章来说,金字塔的顶点是中心论点(通常是文章标题),围绕中心论点用多个观点去支撑中心论点。如果表达的内容很多,观点还可以进一步细分,形成金字塔结构。 77 | > ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b555a89be3cc450e8e9dad060b5b8cdc~tplv-k3u1fbpfcp-watermark.image) 78 | > 79 | > 使用 3W2H 模型来帮助构建文章结构: 80 | > 1. What:什么是抽象; 81 | > 2. Why:抽象为什么重要; 82 | > 3. How:如何进行抽象; 83 | > 4. Where:抽象可以用在什么地方; 84 | > 5. How much:抽象到什么程度。 85 | > 86 | > 3、刻意练习
87 | > 4、迭代优化 88 | 89 | **《幕后产品:打造突破式产品思维》** (第 2 章 · 第 4 节)—— 王诗沐 著 90 | 91 | > 现在中国年轻人的内心深处越来越孤独(这是长期竞争压力大的产物)。人们的物质生活水平在不断提高,但距离生活富足还有很长的路要走;朋友圈中大家都信仰财务自由,但大部人没有明确的目标并为之奋斗;每一年似乎自己的生活与之前的并没有什么两样,大家都不满足,却又不知道这种不满足从何而来。一切似乎都处于焦虑的状态。焦虑和孤独感正式如今快节奏生活下年轻人的写照(尤其是在中国的一二线城市),现实生活中不如人意,让用户越发地渴望获得情感共鸣。 92 | > 93 | > 文字和音乐恰好就是连接共鸣与记忆碎片的好方式,两者都能使人展开想象,而网易云音乐的评论区正是让用户产生共鸣的地方。一首打动人心的歌曲聚集起来产生共鸣的人,其中腹有诗书的佼佼者写下的评论更让广泛的用户群产生了更强烈的情感共鸣。评论带来的价值超出了文字本身,真正发挥了慰藉人心的力量。 94 | > 95 | >一篇好文章,由文字本身和读者透过文字的想象共同组成;一个好的产品,由产品本身和用户使用产品过程中所获得的的感受共同组成。 96 | 97 | 《经济学的思维方式》· 第 4 章 关于价格的其他问题 —— 托马斯·索维尔 著 98 | 99 | > **理解任何事物都需要先对它进行定义,这样才能够在头脑中清楚地知道正在讨论的是这个东西,而不是其他的东西。** 正像人们不会把有关天气的诗意讨论看作气象学,对经济的道德批判或关于经济的政治信条也不能看作经济学。 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [2022] [Peng Xurui] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AndroidFamily 2 | 3 | ![](https://github.com/pengxurui/AndroidFamily/blob/master/images/Android_Banner.png) 4 | 5 |

6 | 7 | 8 | 9 |

10 | 11 |

12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |

37 | 38 | **这是一份帮助 Android 开发者知识积累与能力进阶的学习路线,主要集中在 Java、Android、计算机基础、Flutter、NDK、产品和软实力等话题。** 39 | 40 | 小彭的整个 Android 知识体系是参考了杜威十进制的知识分类思想进行分级整理,未来小彭也会按照这个体系去输出内容。有很多细节的地方,考虑到不是很完善的地方,大家可以提 Issue 给意见(别忘记 Star 哟)。 41 | 42 | ## 使用方法 43 | 44 | **1、⭐ 先给一个 Star:** 你的支持对我非常重要,我的内容质量绝对对得起你的 Star,给我一点创作的动力,感谢。 45 | 46 | **2、进小彭的 Android [交流群](https://github.com/pengxurui/AndroidFamily/blob/master/images/%E4%B8%AA%E4%BA%BA%E5%BE%AE%E4%BF%A1.jpeg):** 加我微信进群,我们对群质量有要求,你可以在这里找到志同道合的朋友。群里可以讨论技术、分享文章、聊天、吐槽,允许适当发招聘广告,不受欢迎的行为是严格禁止的: 47 | 48 | **3、关注我的 [公众号](https://github.com/pengxurui/Android-NoteBook/raw/master/images/搜一搜公众号.png):** 坚持高质量原创内容,不人云亦云,公众号后续是我主要的内容更新平台; 49 | 50 | **4、关注我的 [掘金](https://juejin.cn/user/1063982987230392)、[知乎](https://www.zhihu.com/people/pengxurui) 和 [《AndroidFamily》](https://github.com/pengxurui/AndroidFamily) 专栏:** 掘金上有我历史发布过的所有文章; 51 | 52 | **5、关注 [AndroidFamilyDemo](https://github.com/pengxurui/AndroidFamilyDemo) 项目:** 该项目作为 《AndroidFamily》 专栏配套 “示例程序” 而存在,旨在帮助读者更直观感性地理解纸面上的知识点,进一步提高学习效率; 53 | 54 | **6、催文:** 我会优先输出大多数读者朋友感兴趣的内容,你可以在 Issue 里提出你的需求,小彭会按照大家普遍的需求调整方向。当然同时能请小彭喝一杯速溶咖啡的话,你就是很 Nice 的 boy! 55 | 56 | ## 如何成为有高度的移动开发工程师? 57 | 58 | 很快的,再过几个月就已经是工作四年的老同学了。这几年和不少同学共事过,发现不少人(包括我在内)平时看起来工作努力,也有足够的能力“应付”需求,但一旦跳出舒适区,到更高的要求去解决问题, 却不一定能游刃有余。为什么会这样,我想原因是多方面的: 59 | 60 | - **1、缺乏深度,不知其所以然:** 懂得运用技术去解决问题,但没有思考过选择这些技术背后的逻辑,对技术背后的底层原理也知之甚少。这种状态在遇到有一定深度的任务时,会束手无策或南辕北辙。 61 | 62 | - **2、知识碎片化,不成体系:** 对每项技术都有所涉猎,但却无法站在更高 / 更深的角度理解使用的技术,也无法完整且有条理地描述出项目中使用到的技术。这种状态很难说有能力胜任复杂业务 / 复杂系统设计。 63 | 64 | 是什么原因导致出现这种状态,是公司的原因吗?也许。在初创团队,会更多地奉行 “拿来主义”,很多问题直接使用第三方 SDK 解决。只有在大型团队,才有机会真正参与到基础平台的研发。事实确实如此,业务和团队的限制因素的确存在并且影响巨大,但这是决定因素吗?我想,我们需要问自己是否真正地去努力了吗?既然在小厂,那么就更加应该坚持学习,持续探索技术深度,在自己的能力边界疯狂试探,这些行为会在将来晋升或者跳槽时称为自己的筹码和亮点。我会推荐你读读看张绍文(前微信工程师)的[《做一名有高度的移动开发工程师》](https://time.geekbang.org/column/article/86258),包括整个专栏,很多内容会激发你的思考。 65 | 66 | 回到主题,如何成为有高度的移动开发工程师呢?首先需深度和广度:能站在客户端的角色上,深入钻研一个问题在客户端技术上的实现细节,并且持续打磨,同时又能横向全面地思考每个细节 / 边界。然而,移动开发已经不是单兵作战的时代,随着业务复杂性提升,单纯的客户端优化已经不能解决业务述求,这个时候就需要跳出客户端的角色范畴,站在更高的角度思考问题,清楚每个端能够做和不能做的事情,而不局限在客户端这一亩三分地。 67 | 68 | 很多 Android 开发者有焦虑和浮躁的心态,这似乎已经称为一种普遍的现象,更不用说还待在小厂的同学。的确,移动开发已经不再是 “风口”,很多初级移动开发的岗位在减少,一线大厂对候选人的要求也变得越来越严格,对算法和计算机底层知识也有深入的考察。难吗,你是不是在羡慕那些当年选择了前端或服务端的同学?但是据我观察,往往是服务端羡慕客户端,前端看着服务端眼馋,而客户端又盯着服务端手中的蛋糕。我不知道谁在说心里话,也许,别人碗里的饭就是香一点,更别提 AI、算法、音视频这些香饽饽。 69 | 70 | 有的人选择了转行,结果是站在风口上被吹到天上,还是在任何方向都没有深度积累,最终没有竞争力。我没有经历过,所以我也看不到最终的结果。我们唯一能看到的结果是:“风口是等来的,而不是追来的”,人家之所以能站在风口上,原因是有多年的积累,最终等来的风口。站在当前时代,我们首先要做的,就是抛弃焦虑,焦虑解决不了任何问题。唯有无所畏惧地往前冲,才能留有一席之地,那些落后于时代的移动开发者必将被淘汰。看过王争(前 Google 工程师)在文章里写过:“每一个优秀的人,都有一段沉默的时光,那段时光是付出了很多努力的,却得不到结果的日子,我们把它叫做扎根。” 你经历过这个阶段吗? 71 | 72 |

73 | 74 | 75 | 76 |

77 | 78 | # Android Family 知识体系(善用 Ctrl+F) 79 | 80 | ## 最新文章 81 | 82 | [![](https://github-readme-juejin-recent-article-flywith24.vercel.app/juejin/1063982987230392/0?width=550)](https://github-readme-juejin-recent-article-flywith24.vercel.app/juejin/1063982987230392/0)[![](https://github-readme-juejin-recent-article-flywith24.vercel.app/juejin/1063982987230392/1?width=550)](https://github-readme-juejin-recent-article-flywith24.vercel.app/juejin/1063982987230392/1)[![](https://github-readme-juejin-recent-article-flywith24.vercel.app/juejin/1063982987230392/2?width=550)](https://github-readme-juejin-recent-article-flywith24.vercel.app/juejin/1063982987230392/2) | [![](https://github-readme-juejin-recent-article-flywith24.vercel.app/juejin/1063982987230392/3?width=550)](https://github-readme-juejin-recent-article-flywith24.vercel.app/juejin/1063982987230392/3)[![](https://github-readme-juejin-recent-article-flywith24.vercel.app/juejin/1063982987230392/4?width=550)](https://github-readme-juejin-recent-article-flywith24.vercel.app/juejin/1063982987230392/4)[![](https://github-readme-juejin-recent-article-flywith24.vercel.app/juejin/1063982987230392/5?width=550)](https://github-readme-juejin-recent-article-flywith24.vercel.app/juejin/1063982987230392/5) 83 | ---|--- 84 | 85 | ## 000 Java 86 | 87 | - 010 Java 编程 88 | 89 | - [010.1 · 金九银十,收下这份 Java String 面试题](https://juejin.cn/post/6909066772721172488) 90 | 91 | - 020 Kotlin 编程 92 | 93 | - [020.1 · 金三银四必备,全面总结 Kotlin 面试知识点](https://juejin.cn/post/7076744947440812062) 94 | 95 | - [020.2 · 扩展函数(终于知道为什么 with 用 this,let 用 it)](https://juejin.cn/post/6935027613542907941) 96 | 97 | - [020.3 · by 委托机制 & 原理 & 应用](https://juejin.cn/post/6958346113552220173) 98 | 99 | - 030 Java 虚拟机 100 | 101 | - 031 Java 虚拟机内存管理 102 | 103 | - 031.1 内存分布模型 104 | 105 | - 031.2 垃圾回收机制 106 | 107 | - 031.3 对象创建过程 108 | 109 | - [031.4 吊打面试官:对象的内存分为哪几个部分?](https://juejin.cn/post/7130508389175853087) 110 | 111 | - [031.5 吊打面试官:说一下 Java 的四种引用类型](https://juejin.cn/post/7130652285817847844) 112 | 113 | - [031.6 吊打面试官:为什么 finalize() 方法只会执行一次?](https://juejin.cn/post/7131027741163388958) 114 | 115 | - [内存分配模型](https://juejin.cn/post/6917796881196122120) 116 | 117 | - [垃圾回收机制](https://juejin.cn/post/6918740822163161095) 118 | 119 | - [拿放大镜看对象](https://juejin.cn/post/6918257137806376968) 120 | 121 | - [Java 虚拟机面试题](https://www.jianshu.com/p/846d05fc5e45) 122 | 123 | - 032 Java 编译过程 124 | 125 | - 032.1 Java 编译过程 126 | 127 | - 032.2 Class 文件结构 128 | 129 | - 032.3 APT 注解处理器 130 | 131 | - 032.4 注解 132 | 133 | - 032.5 类加载机制 134 | 135 | - 032.6 泛型机制 136 | 137 | - [Class 文件结构](https://www.jianshu.com/p/14c969b8add2) 138 | 139 | - [编译过程(编译前端 & 编译后端)](https://juejin.cn/post/6867124787576373256) 140 | 141 | - [类加载机制](https://www.jianshu.com/p/f4318e626a22) 142 | 143 | - [泛型(含Kotlin)](https://juejin.cn/post/6888345234653052941) 144 | 145 | - [注解(含 Kotlin)](https://www.jianshu.com/p/5871e1186840) 146 | 147 | - [为什么 Java 实现了平台无关性?](https://juejin.cn/post/6866716238207254536) 148 | 149 | - 033 Java 虚拟机执行系统 150 | 151 | - 033.1 方法调用与方法返回 152 | 153 | - 033.2 重载与重写 154 | 155 | - 033.3 反射机制 156 | 157 | - 033.4 异常机制 158 | 159 | - [方法调用的本质(含重载与重写区别)](https://juejin.cn/post/6867481742723268615) 160 | 161 | - [反射机制(含 Kotlin)](https://juejin.cn/post/6889833658669072397) 162 | 163 | - 034 并发编程 164 | 165 | - [034.01 全网最全的 ThreadLocal 原理详细解析 —— 原理篇](https://juejin.cn/post/7166202551782604837) 166 | 167 | - [034.02 全网最全的 ThreadLocal 原理详细解析 —— 源码篇](https://juejin.cn/post/7166202801470013476) 168 | 169 | - 035 Java 集合 170 | 171 | - [035.1 Java 数据结构:ArrayList:ArrayList 可以完全替代数组吗?](https://juejin.cn/post/7161731329078329381) 172 | 173 | - [035.2 Java 数据结构:CopyOnWriteArrayList 是如何保证线程安全的?](https://juejin.cn/post/7162035643785150472) 174 | 175 | - [035.3 Java 数据结构:说一下 ArrayList 和 LinkedList 的区别?](https://juejin.cn/post/7162203434014212109) 176 | 177 | - [035.4 Java 数据结构:说一下 ArrayDeque 和 LinkedList 的区别?](https://juejin.cn/post/7162819765361672199) 178 | 179 | - [035.5 Java 数据结构:万字 HashMap 详解,基础(优雅)永不过时 —— 原理篇](https://juejin.cn/post/7163985718417555487) 180 | 181 | - [035.6 Java 数据结构:万字 HashMap 详解,基础(优雅)永不过时 —— 源码篇](https://juejin.cn/post/7164024676618862622) 182 | 183 | - [035.7 Java 数据结构:如何使用 LinkedHashMap 实现 LRU 缓存?](https://juejin.cn/post/7164348785512939551) 184 | 185 | - [035.8 Java 数据结构:WeakHashMap 和 HashMap 的区别是什么,何时使用?](https://juejin.cn/post/7165044834590261256) 186 | 187 | --- 188 | ## 100 Android 189 | 190 | - 110 Android 四大组件 191 | 192 | - 111 Activity 193 | 194 | - 112 Service 195 | 196 | - 113 BroadcastReceiver 197 | 198 | - 114 ContentProvider 199 | 200 | - [114.1 ContentProvider 基础](https://juejin.cn/post/6929518871921557512) 201 | 202 | - [114.2 ContentProvider 原理](https://www.jianshu.com/p/e144079840b3) 203 | 204 | - [114.3 ContentProvider 案例:无侵入获取 Context 进行初始化](https://juejin.cn/post/6887980244389593096) 205 | 206 | - [114.4 ContentProvider 案例:Jetpack · App Startup](https://juejin.cn/post/6898738809895125006) 207 | 208 | - 115 Intent 209 | 210 | - 115.1 Intent 基础 211 | 212 | - [115.2 Android 面试题:说一下 PendingIntent 和 Intent 的区别](https://juejin.cn/post/7122767360976486413) 213 | 214 | - 116 Context 215 | 216 | - [116.1 一个进程有多少个 Context 对象(答对的不多)](https://www.jianshu.com/p/51d63a1ffb95) 217 | 218 | - [116.2 View & Fragment & Window 的 getContext() 一定返回 Activity 吗?](https://juejin.cn/post/6886857116787687438) 219 | 220 | - 120 Android 核心原理 221 | 222 | - 121 Android IPC 通信 223 | 224 | - 122 Android 虚拟机 225 | 226 | - [Android 从类加载到程序执行](https://juejin.cn/post/6919121581180616718) 227 | 228 | - 123 Android 系统层服务 229 | 230 | - 123.1 Android 系统架构 231 | 232 | - 123.2 Android 系统启动过程 233 | 234 | - 123.3 应用安装过程 235 | 236 | - 123.4 四大组件启动过程 237 | 238 | - 124 Android 应用层机制 239 | 240 | - 124.1 Handler 机制 241 | 242 | - 124.2 事件分发机制 243 | 244 | - 124.3 Window 机制 245 | 246 | - 124.4 视图框架 247 | 248 | - 124.5 布局解析 249 | 250 | - 124.6 绘制机制 251 | 252 | - 124.7 ANR 机制 253 | 254 | - [带你探究 LayoutInflater 布局解析原理](https://juejin.cn/post/6886052422260228103) 255 | 256 | - 125 Android 编译过程 257 | 258 | - 125.1 APK 编译过程 259 | 260 | - 125.2 APK 文件格式 261 | 262 | - 125.3 DEX 文件格式 263 | 264 | - 125.4 so 文件格式 265 | 266 | - 126 Android 资源管理机制 267 | 268 | - 126.1 资源基础 269 | 270 | - 126.2 资源编译过程 271 | 272 | - 126.3 资源匹配过程 273 | 274 | - 126.4 资源案例:换肤 275 | 276 | - 126.5 资源案例:插件化 277 | 278 | - 126.6 资源案例:组件化资源冲突 279 | 280 | - [说说从 android:text 到 TextView 的过程(主题&样式)](https://juejin.cn/post/6889029050753531917) 281 | 282 | - 130 Android 核心特性 283 | 284 | - 131 Android 版本适配 285 | 286 | - [131.1 做了这么多年 Android,你对系统特性有多熟悉?](https://juejin.cn/post/7092381934810038279) 287 | 288 | - [131.2 Android 12 还没用上,Android 13 已经来了!](https://juejin.cn/post/7088731887945908260) 289 | 290 | - [131.3 还没适配 Android 12 的要抓紧了](https://juejin.cn/post/7088731887945908260) 291 | 292 | - 132 权限机制 293 | 294 | - 132.1 权限基础 295 | 296 | - 132.2 动态权限 297 | 298 | - 132.3 特殊权限 - 设备管理器 299 | 300 | - 132.4 特殊权限 - 无障碍服务 301 | 302 | - 132.5 特殊权限 - 通知使用权限 303 | 304 | - 133 系统通知 305 | 306 | - 134 持久化存储 307 | 308 | - 134.1 键值对存储 - SharedPreference 309 | 310 | - 134.2 键值对存储 - MMKV 311 | 312 | - 134.3 键值对存储 - DataStore 313 | 314 | - 135 网络请求 315 | 316 | - [135.1 网络案例:飞书前端提到的竞态问题,在 Android 上怎么解决?](https://juejin.cn/post/7130144715063689253) 317 | 318 | - 136 桌面微件 Widget 319 | 320 | - 140 Android 组件原理 321 | 322 | - 141 Jetpack 组件 323 | 324 | - [141.01 Lifecycle:生命周期感知型组件的基础](https://juejin.cn/post/7120472134853328909/) 325 | 326 | - [141.02 为什么 LiveData 会重放数据,怎么解决?](https://juejin.cn/post/7121621553670225957) 327 | 328 | - [141.03 为什么 Activity 都重建了 ViewModel 还存在?](https://juejin.cn/post/7121998366103306254/) 329 | 330 | - [141.04 有小伙伴说看不懂 LiveData、Flow、Channel,跟我走](https://juejin.cn/post/7077149853876224013) 331 | 332 | - [141.05 Android UI 架构演进:从 MVC 到 MVP、MVVM、MVI](https://juejin.cn/post/7072020104212381732) 333 | 334 | - [141.06 ViewBinding 与 Kotlin 委托双剑合璧](https://juejin.cn/post/6960914424865488932) 335 | 336 | - [141.07 AndroidX Fragment 核心原理分析](https://juejin.cn/post/6970998913754988552) 337 | 338 | - 141.08 RecyclerView:可复用型列表视图 339 | 340 | - 141.09 Navigation:单 Activity 多 Fragment 的导航方案 341 | 342 | - [141.10 从 Dagger2 到 Hilt 玩转依赖注入(一)](https://juejin.cn/post/6947655947875516424) 343 | 344 | - 141.11 Hilt:从 Dagger2 到 Hilt 玩转依赖注入(二) 345 | 346 | - [141.12 OnBackPressedDispatcher:Jetpack 处理回退事件的新姿势](https://juejin.cn/post/6967039557220958244) 347 | 348 | - [141.13 食之无味!App Startup 可能比你想象中要简单](https://juejin.cn/post/6898738809895125006) 349 | 350 | - 141.14 DataStore:新一代键值对存储方案 351 | 352 | - 141.15 Room:ORM 数据库访问框架 353 | 354 | - 141.16 WindowManager:加强对多窗口模式的支持 355 | 356 | - 141.17 WorkManager:加强对后台任务的支持 357 | 358 | - 141.18 Compose:新一代视图开发方案 359 | 360 | - 142 网络组件 361 | 362 | - 142.1 OkHttp 363 | 364 | - 142.2 Retrofit 365 | 366 | - 142.3 Glide 367 | 368 | - [142.4 EventBus 这是一份详细的 EventBus 使用教程](https://juejin.cn/post/6930562700128813070) 369 | 370 | - [142.5 适可而止!看 Glide 如何把生命周期安排得明明白白](https://juejin.cn/post/6900548494818279432) 371 | 372 | - [142.6 Android IO 框架 Okio 的实现原理,到底哪里 OK?](https://juejin.cn/post/7167757174502850597/) 373 | 374 | - [142.7 Android IO 框架 Okio 的实现原理,如何检测超时?](https://juejin.cn/post/7168097359807971342) 375 | 376 | - 143 序列化组件 377 | 378 | - [143.1 Android 序列化框架 Gson 的实现原理](https://juejin.cn/post/7160359176282538015) 379 | 380 | - 143.2 Protobuf 381 | 382 | - 144 持久化组件 383 | 384 | - [144.1 Android 初代 K-V 存储框架 SharedPreferences,旧时代的余晖?(上)](https://juejin.cn/post/7169263929510592519) 385 | 386 | - [144.2 Android 初代 K-V 存储框架 SharedPreferences,旧时代的余晖?(下)](https://juejin.cn/post/7169265620306165790/) 387 | 388 | - 145 调优组件 389 | 390 | - [144.1 为什么各大厂自研的内存泄漏检测框架都要参考 LeakCanary?因为它是真强啊!](https://juejin.cn/post/7134728428003000356) 391 | 392 | - 146 其他 393 | 394 | - [145.1 Android 内存缓存框架 LruCache 的实现原理](https://juejin.cn/post/7166476725981806628) 395 | 396 | - 150 Android UI 开发 397 | 398 | - 151 Android UI 基础 399 | 400 | - 151.1 Material Design 401 | 402 | - [151.2 老生常谈!屏幕适配原理 & 方案总结笔记](https://juejin.cn/post/6903344875136745479) 403 | 404 | - 151.3 自定义 View 基础 405 | 406 | - 152 文本 407 | 408 | - 152.01 TextView 文本控件 409 | 410 | - 152.02 Html 富文本 411 | 412 | - 152.03 Span 富文本 413 | 414 | - 152.04 IconFont 图标文字 415 | 416 | - 153 图片 417 | 418 | - 153.01 图片控件 419 | 420 | - 153.02 ImageView 使用详解 421 | 422 | - 153.03 Bitmap 使用详解 423 | 424 | - 153.04 Drawable 使用详解 425 | 426 | - 153.05 资源图片加载过程 427 | 428 | - [153.06 高低版本 Bitmap 内存分配与回收原理对比]() 429 | 430 | - 153.07 图片解码过程 431 | 432 | - 153.08 Bitmap 复用机制 433 | 434 | - 153.09 Bitmap 硬件位图 435 | 436 | - 153.10 计算图片内存占用 437 | 438 | - 153.11 常见图片类型解析 439 | 440 | - 153.12 图片优化概述 441 | 442 | - 153.13 图片优化案例 - NativeBitmap 443 | 444 | - 153.14 图片优化案例 - 大图加载 445 | 446 | - 153.15 图片优化案例 - 大图监测 447 | 448 | - 153.16 图片优化案例 - 图片慢响应排查 449 | 450 | - 154 动画 451 | 452 | - 154.1 动画基础 453 | 454 | - 154.2 Lottie 动画 455 | 456 | - 155 交互 457 | 458 | - 156 高级组件 459 | 460 | - 156.1 SurfaceView 461 | 462 | - 156.2 NestedScrollView 463 | 464 | - 156.3 RecyclerView 465 | 466 | - 其他 467 | - 端内数据状态同步方案VM-Mapping 468 | 469 | - 160 Android 性能优化 470 | 471 | - 170 Android 工程化 472 | 473 | - 171 Gradle 构建工具 474 | 475 | - [171.1 为什么说 Gradle 是 Android 进阶绕不去的坎](https://juejin.cn/post/7092367604211253256) 476 | 477 | - [171.2 手把手带你自定义 Gradle 插件](https://juejin.cn/post/7098383560746696718) 478 | 479 | - 171.3 Gradle 依赖管理 480 | 481 | - [171.4 使用 Maven 实现组件化发布](https://juejin.cn/post/6963633839860088846) 482 | 483 | - [171.5 Gradle 插件案例:一键检索未适配 64 位架构的 so 文件](https://juejin.cn/post/7034201332500135966) 484 | 485 | - 172 AGP 插件 486 | 487 | - 172.1 AGP 构建过程 488 | 489 | - 172.2 AGP 常用配置项 490 | 491 | - [172.3 其实 Gradle Transform 就是个纸老虎](https://juejin.cn/post/7098752199575994405) 492 | 493 | - [172.4 代码混淆到底做了什么?](https://juejin.cn/post/6930648501311242248) 494 | 495 | - [172.5 一篇文章看懂 v1/v2/v3 签名机制](https://juejin.cn/post/6906882748909092871) 496 | 497 | - 172.6 AGP 案例:多渠道打包 498 | 499 | - 173 组件化开发 500 | 501 | - [173.1 方案积累:有赞、蘑菇街、得到、携程、支付宝、手淘、爱奇艺、微信、美团](https://juejin.cn/post/6896099703474749453) 502 | 503 | - 173.2 组件化基础 504 | 505 | - 173.3 ARouter 原理分析 506 | 507 | - 173.4 组件化案例 - 通用方案 508 | 509 | - [173.5 组件化案例 - 美团组件化事件总线方案改进:ModularEventBus](https://juejin.cn/post/7137602073188630535) 510 | 511 | - 173.6 组件化案例 - Key-Value 512 | 513 | - 174 AOP 面向切面 514 | 515 | - 174.01 AOP 基础 516 | 517 | - 174.02 Java 注解 518 | 519 | - 174.03 Java APT 注解处理器 520 | 521 | - [174.04 JDK 动态代理的原理其实很简单](https://juejin.cn/post/6974018412158664734) 522 | 523 | - [174.05 JDK 服务发现框架 ServiceLoader](https://juejin.cn/post/6916161542492782605) 524 | 525 | - 174.06 AspectJ 526 | 527 | - 174.07 Javassist 528 | 529 | - 174.08 ASM 530 | 531 | - 174.09 JavaPoet 532 | 533 | - 174.10 KotlinPoet 534 | 535 | - [174.11 AOP 案例 - 使用 AspectJ 限制按钮快速点击](https://juejin.cn/post/6889239355307753485) 536 | 537 | - 175 应用测试 538 | 539 | - 175.1 单元测试基础 540 | 541 | - 175.2 Android 调试基础 542 | 543 | - 176 动态化 544 | 545 | - 177 安全与逆向 546 | 547 | - 180 Compose 548 | 549 | 550 | --- 551 | ## 200 计算机基础 552 | 553 | - 210 计算机组成原理 554 | 555 | - 211 计算机组成结构 556 | 557 | - [211.1 从图灵机到量子计算机,计算机可以解决所有问题吗?](https://juejin.cn/post/7148390668614762503/) 558 | 559 | - [211.2 一套用了 70 多年的计算机架构 —— 冯·诺依曼架构](https://juejin.cn/post/7148723199818072095/) 560 | 561 | - 211.3 学习计算机组成原理,到底在学什么? 562 | 563 | - [211.4 图解计算机内部的高速公路 —— 总线系统](https://juejin.cn/post/7158122900355022855) 564 | 565 | - 212 数制和编码 566 | 567 | - [212.1 为什么计算机中的负数要用补码表示?](https://juejin.cn/post/7169966346753540103/) 568 | 569 | - [212.2 今天一次把 Unicode 和 UTF-8 说清楚](https://juejin.cn/post/7126396251322449934) 570 | 571 | - [212.3 为什么浮点数运算不精确?](https://juejin.cn/post/6860445359936798734) 572 | 573 | - 213 处理器系统 574 | 575 | - [213.1 CPU 中央处理器 程序员学习 CPU 有什么用?](https://juejin.cn/post/7166625448254767118) 576 | 577 | - 213.2 CPU 如何执行任务 578 | 579 | - 213.3 从源码到程序执行 580 | 581 | - 213.4 GPU 图形处理器 582 | 583 | - 214 存储器系统 584 | 585 | - [214.1 计算机的存储器金字塔长什么样?](https://juejin.cn/post/7157033848344150053) 586 | 587 | - [214.2 我把 CPU 三级缓存的秘密,藏在这 8 张图里](https://juejin.cn/post/7157288161578745869) 588 | 589 | - [214.3 12 张图看懂 CPU 缓存一致性与 MESI 协议,真的一致吗?](https://juejin.cn/post/7158395475362578462) 590 | 591 | - [214.4 已经有 MESI 协议,为什么还需要 volatile 关键字?](https://juejin.cn/post/7159127308492603400) 592 | 593 | - 214.5 内存屏障 594 | 595 | - [214.6 面试官:什么是伪共享,如何避免?](https://juejin.cn/post/7159964489621635109) 596 | 597 | - 215 IO 系统 598 | 599 | - 220 计算机网络 600 | 601 | - 221 计算机网络基础 602 | 603 | - 221.1 计算机网络基础概念 604 | 605 | - [221.2 认为 Base64 是加密算法吗?](https://juejin.cn/post/6887498543494660109) 606 | 607 | - 222 底层网络协议 608 | 609 | - 222.01 TCP 610 | 611 | - 222.02 UDP 612 | 613 | - 223 应用层网络协议 614 | 615 | - [223.01 图解 DNS & HTTPDNS 原理](https://juejin.cn/post/6884183177926033416) 616 | 617 | - 223.02 HTTP 协议 618 | 619 | - [223.03 安全传输模型 - 加密、摘要、签名、证书,一次说明白!](https://juejin.cn/post/6995549209348816909) 620 | 621 | - 223.04 HTTPS 协议 622 | 623 | - [223.05 MQTT 协议:为什么每份 Android 简历都说 “熟悉 MQTT 协议”?](https://juejin.cn/post/6984379979962253342) 624 | 625 | - 224 网络技术 626 | 627 | - 224.1 CDN 628 | 629 | - 224.2 Nginx 代理服务 630 | 631 | - 225 网络调试工具 632 | 633 | - 225.1 网络调试命令 634 | 635 | - [225.2 从原理到实战,全面总结 Android HTTPS 抓包](https://juejin.cn/post/7083761008321232933) 636 | 637 | - 225.3 Postman 638 | 639 | - 225.4 WireShark 640 | 641 | - 230 操作系统 642 | 643 | - 231 操作系统基础 644 | 645 | - 232 操作系统启动过程 646 | 647 | - 233 进程管理 648 | 649 | - 234 内存管理 650 | 651 | - 235 文件管理 652 | 653 | - 236 IO 管理 654 | 655 | - 237 进程间通信 656 | 657 | - [操作系统 | 中断 & 系统调用浅析](https://juejin.cn/post/6894225735265206286) 658 | 659 | - 240 数据结构与算法 660 | 661 | - 241 基础数据结构 662 | 663 | - 241.1 线性表 664 | 665 | - [241.2 散列表:如何实现一个优秀的 HashTable 散列表?](https://juejin.cn/post/7163301919316934693) 666 | 667 | - 241.3 队列 668 | 669 | - 241.4 栈 670 | 671 | - [214.5 什么是二叉树?](https://juejin.cn/post/7170767634445631525) 672 | 673 | - [241.6 二叉树:二叉树高频题型汇总](https://juejin.cn/post/6917131822711341070) 674 | 675 | - 242 高级数据结构 676 | 677 | - [242.01 使用前缀和数组解决"区间和查询"问题](https://juejin.cn/post/7147962276534812685) 678 | 679 | - [242.02 差分数组] 680 | 681 | - [242.03 线段树(区间查询):面试被问到线段树,已经这么卷了吗?](https://juejin.cn/post/6984052900901158943) 682 | 683 | - 242.04 树状数组(区间查询) 684 | 685 | - 242.05 字典树 686 | 687 | - [242.06 使用单调队列解决 “滑动窗口最大值” 问题](https://juejin.cn/post/7144939559489372168) 688 | 689 | - [242.07 使用单调栈解决 “下一个更大元素” 问题](https://juejin.cn/post/7144769422882766885) 690 | 691 | - [242.08 并查集(动态连通):如何使用并查集解决朋友圈问题?](https://juejin.cn/post/7143880364233064455) 692 | 693 | - [242.09 二叉堆:微博 Top 10 热搜是怎么计算出来的?](https://juejin.cn/post/6904691545493274637) 694 | 695 | - 242.10 图 696 | 697 | - 242.11 布隆过滤器(大数据判存) 698 | 699 | - 243 算法设计基础 700 | 701 | - 243.01 复杂度分析 702 | 703 | - [243.02 为什么你学不会递归?谈谈我的经验](https://juejin.cn/post/7145888770410151967) 704 | 705 | - 243.03 分治算法 706 | 707 | - 243.04 DFS、BFS 708 | 709 | - [243.05 回溯算法:回溯算法解题框架](https://juejin.cn/post/6882928981268496398) 710 | 711 | - 243.06 贪心算法 712 | 713 | - 243.07 动态规划 714 | 715 | - 244 算法应用 716 | 717 | - [244.01 二分查找算法:下次面试遇到二分查找,别再写错了](https://juejin.cn/post/6933241413341708296) 718 | 719 | - 244.02 排序算法 720 | 721 | - 245 编程技巧 722 | 723 | - 246 经典题目 724 | 725 | - [246.01 高楼丢鸡蛋(动态规划)](https://juejin.cn/post/6938389793760313375) 726 | 727 | - [246.02 计算器(逆波兰表达式)](https://juejin.cn/post/6938387752811495455) 728 | 729 | - [246.03 链表](https://juejin.cn/post/6882370280946302983) 730 | 731 | - [246.04 相交链表 & 环形链表](https://juejin.cn/post/6881580736428638215) 732 | 733 | - 247 思维逻辑题 734 | 735 | - [247.01 我知道你不知道,我到底知不知道](https://juejin.cn/post/6902829580013436942) 736 | 737 | - [247.02 至少要几个砝码,可以称出 1g ~ 40g 重量](https://juejin.cn/post/6903460612886495245) 738 | 739 | - [247.03 舞会上有多少顶黑帽?](https://juejin.cn/post/6903524335193948167) 740 | 741 | - [247.04 25 匹马 5 条赛道,最快需要几轮求出前 3 名?](https://juejin.cn/post/6903861591188783112) 742 | 743 | - 248 竞赛 744 | 745 | - 250 数据库 746 | 747 | - 260 设计模式 748 | 749 | --- 750 | ## 300 Flutter 开发 751 | 752 | 753 | 754 | --- 755 | ## 400 NDK 开发 756 | 757 | - 410 C/C++ 基础 758 | 759 | - 410.1 NDK 开发概述 760 | 761 | - 410.2 C 语言基础 762 | 763 | - 410.3 C/C++ 语言基础 764 | 765 | - 410.4 C/C++ 编译过程 766 | 767 | - [C 语言复习笔记](https://juejin.cn/post/6939477843088769032) 768 | 769 | - [C++ 复习笔记](https://juejin.cn/post/6947657958419333151) 770 | 771 | - 420 JNI 基础 772 | 773 | - [420.1 JNI 基础:JNI 从入门到实践,万字爆肝详解!](https://juejin.cn/post/7125338583959306248) 774 | 775 | - [420.2 注册 JNI 函数:说一下注册 JNI 函数的方式和时机](https://juejin.cn/post/7125021894562349092) 776 | 777 | - [420.3 so 文件加载过程:说说 so 库从加载到卸载的全过程](https://juejin.cn/post/6892793299427491854) 778 | 779 | - [420.4 System.getProperty(...) 获取系统属性](https://juejin.cn/post/6892294041632210957) 780 | 781 | - 430 NDK 基础 782 | 783 | - 430.1 NDK 编译基础:ndk-build & CMake 784 | 785 | - 420.2 so 文件格式 786 | 787 | - [420.3 NDK 案例 - 一键检索未适配 64 位架构的 so 文件](https://juejin.cn/post/7034201332500135966) 788 | 789 | - 420.4 NDK 案例 - so 文件动态化 790 | 791 | - 420.5 NDK 案例 - so 文件精简 792 | 793 | - 420.6 NDK 案例 - Native 内存泄漏监控 794 | 795 | - 440 音视频基础理论 796 | 797 | - 440.1 视频基础理论 798 | 799 | - 440.2 音频基础理论 800 | 801 | - 440.3 H.264 视频压缩编码 802 | 803 | - 440.4 音频压缩编码 804 | 805 | - 440.5 FFMPEG 基础 806 | 807 | - 440.6 OPENSL ES 基础 808 | 809 | - [440.7 PNG 图片格式:PNG 除了无损压缩你还知道什么?](https://juejin.cn/post/6905635070397612039) 810 | 811 | --- 812 | ## 500 DevOps 813 | 814 | - 510 Git 版本控制 815 | 816 | - 520 CI/CD 持续集成 817 | 818 | - [520.1 你的第一个 Jenkins 项目,从这里开始](https://juejin.cn/post/7077957170121146376) 819 | 820 | - 530 开源 821 | 822 | - [530.1 发布开源组件到 MavenCentral 仓库超详细攻略](https://juejin.cn/post/7135457823055413278) 823 | 824 | --- 825 | ## 600 后端 826 | 827 | - [600.1 客户端同学应该理解的 ELK Stack 组件知识](https://juejin.cn/post/6947712552390361119) 828 | 829 | --- 830 | ## 700 项目实践 831 | 832 | - 地图 833 | 834 | - [WGS84、GCJ-02、BD-09都是什么鬼?](https://www.jianshu.com/p/559029832a67) 835 | 836 | - 日志 837 | 838 | - 数据 839 | 840 | - [落地西瓜视频埋点方案,埋点从未如此简单](https://juejin.cn/post/7010797094151651365) 841 | 842 | - IM 即时通信 843 | 844 | - 账号体系 845 | 846 | - 推送 847 | 848 | - 社交分享 849 | 850 | - 红包 851 | 852 | - 设备 853 | 854 | - [IMEI 弃用!收下这份保姆级的 OAID 集成教程](https://juejin.cn/post/7072741392178479140) 855 | 856 | - 信息流 857 | 858 | - [列表分页接口有哪些方案,你知道吗?](https://juejin.cn/post/7084996711998816292) 859 | 860 | - 搜索 861 | 862 | - 应用网关 863 | 864 | - Hybird 865 | 866 | - 深度链接 867 | 868 | - [Android Deep Link 深度链接,看看你在第几层?](https://juejin.cn/post/7073731278612201509) 869 | 870 | - 隐私 871 | 872 | - [还在见招拆招?先看懂 APP 个人信息保护治理机制](https://juejin.cn/post/7078940840009302052) 873 | 874 | --- 875 | ## 800 产品 & 设计 & 市场 & 运营 876 | 877 | --- 878 | ## 900 软实力 879 | 880 | - [一个菜鸟管理的学习和思考(一)](https://juejin.cn/post/7106065076313915405) 881 | 882 | - [一个菜鸟管理的学习和思考(二)](https://juejin.cn/post/7106531274458103821) 883 | 884 | - [明天 520,说说两性之间的那些事](https://juejin.cn/post/7099395743210815502) 885 | 886 | - [自媒体 | 使用Markdown高效率编写文档](https://juejin.cn/post/6844903901548789773) 887 | 888 | - [什么是原创?独立完成就是原创吗?](https://juejin.cn/post/7145112711796359205/) 889 | 890 | ## 思维导图 891 | 892 | ![](https://github.com/pengxurui/AndroidFamily/blob/master/images/AndroidFamily_2022_09_06.png) 893 | 894 | ## 小彭的其它开源项目 895 | 896 | - [AndroidFamily](https://github.com/pengxurui/AndroidFamily) 【Android 面经 + Android 学习指南】一份帮助 Android 开发者知识积累与能力进阶的学习路线;🔥 897 | - [AndroidPlatforms](https://github.com/pengxurui/AndroidPlatforms) 每个 Android 开发都要收藏的系统适配手册,带你全面体系化地解读 Android 系统更新;🔥 898 | - [ModularEventBus](https://github.com/pengxurui/ModularEventBus) 一个 Android 事件总线框架,为你解决事件总线 “滥用” 问题; 899 | - [EasyTrack](https://github.com/pengxurui/EasyTrack) 基于西瓜视频前端视图树埋点方案实现的埋点方案; 900 | - [EasyPrivacy](https://github.com/pengxurui/EasyPrivacy) 一个帮助开发者快速解决整改问题的工具; 901 | - [LeetCode-Kotlin](https://github.com/pengxurui/LeetCode-Kotlin) LeetCode 高频题解 - Kotlin 版本。 902 | 903 | ## Donate 904 | 905 | 如果本仓库对你有帮助,可以请小彭喝杯速溶咖啡。 906 | 907 | ![](https://github.com/pengxurui/AndroidFamily/blob/master/images/%E8%AF%B7%E5%B0%8F%E5%BD%AD%E5%96%9D%E6%9D%AF%E9%80%9F%E6%BA%B6%E5%92%96%E5%95%A1.png) 908 | 909 | ## License 910 | 911 | Copyright [2022] [Peng Xurui] 912 | 913 | Licensed under the Apache License, Version 2.0 (the "License"); 914 | you may not use this file except in compliance with the License. 915 | You may obtain a copy of the License at 916 | 917 | [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) 918 | 919 | Unless required by applicable law or agreed to in writing, software 920 | distributed under the License is distributed on an "AS IS" BASIS, 921 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 922 | See the License for the specific language governing permissions and 923 | limitations under the License. 924 | --------------------------------------------------------------------------------