<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[JasonGaoH的专栏]]></title><description><![CDATA[掘金地址：https://juejin.im/user/5cf5d02af265da1ba431d95b]]></description><link>https://blog.youkuaiyun.com/H_Gao</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; H_Gao]]></copyright><item><title><![CDATA[你可能需要这份大厂面经]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/108305802</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/108305802</guid><author>H_Gao</author><pubDate>Sun, 30 Aug 2020 14:01:36 +0800</pubDate><description><![CDATA[今年小红书这边发完年终奖之后，心里隐隐觉得要出去看看机会，因为在小红书这边已经呆了快三年了，对于一些技术，业务总觉得有点麻木了，内心里总觉得自己啥都会了，但是很多只是知道个皮毛。
有句话是这么说的，一个人在一个地方待久了，内心里以为他所处的这个环境就是全世界，所以想着做些改变，不管结果如何，至少让自己走出舒适区，同时也想着能去大厂看看。
其实大家也不能特别迷信大厂，认为加入大厂就没有后顾之忧了，只能说目前对我现在这个阶段来说，加入大厂刷一下自己的大厂背景这个对于自己当下来说还是有益的。
一开始也是不确定到底]]></description><category></category></item><item><title><![CDATA[快到年底的年中总结]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/107856046</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/107856046</guid><author>H_Gao</author><pubDate>Fri, 07 Aug 2020 10:03:53 +0800</pubDate><description><![CDATA[今天聊聊技术以外的话题。
为什么要坚持写公众号
这个和为什么坚持写博客的问题类似，我的回答是为了进步。16年毕业，我一直在坚持写博客，早期的时候对于技术这块可能关于Activity的生命周期都能整一篇文章出来，现在有时候因为时间忙，可能好几个月才会出一篇文章，但是我还是一直在坚持着，应该以后也会一直坚持下去。
为什么写博客或者写公众号文章能够让我们进步，简单来讲，在你写文章的时候会促进我们思考。
举个例子，我在第一家公司的时候，当时在手机设置页遇到一个UI的卡顿问题，因为牵扯代码比较偏底层，当时让我一个刚毕]]></description><category></category></item><item><title><![CDATA[Feed流上的优化实践]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/107753577</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/107753577</guid><author>H_Gao</author><pubDate>Sun, 02 Aug 2020 23:14:17 +0800</pubDate><description><![CDATA[之前一直负责小红书的关注Feed的迭代工作，因为一直是在完成新功能的迭代工作，对于Feed的性能和消费体验就没有特别关注，加上对于这块业务的一些监控也没有落地，所以长期对于这块的性能基本上就是一个忽视的状态。随着业务越来越复杂，功能越来越多，收到好多反馈都是说关注页面的滑动体验很不好，于是决定对关注Feed做一个性能优化。
这里先从优化说起，之前在网上看到一个关于优化的分类，觉得很有道理。
请看下面这张图：

关于优化
优化整体可以分为两大类，软优化和硬优化。那么什么是软优化呢？软优化并不会改变某段代码的执]]></description><category></category></item><item><title><![CDATA[我画了近百张图来理解红黑树]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/103541307</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/103541307</guid><author>H_Gao</author><pubDate>Sat, 14 Dec 2019 17:24:56 +0800</pubDate><description><![CDATA[文章已同步发表于微信公众号JasonGaoH，我画了近百张图来理解红黑树,文章略有修改。

之前在公司组内分享了红黑树的工作原理，今天把它整理下发出来，希望能对大家有所帮助，对自己也算是一个知识点的总结。
这篇文章算是我写博客写公众号以来画图最多的一篇文章了，没有之一，我希望尽可能多地用图片来形象地描述红黑树的各种操作的前后变换原理，帮助大家来理解红黑树的工作原理，下面，多图预警开始了。
在讲红...]]></description><category></category></item><item><title><![CDATA[解决CoordinatorLayout的动画抖动以及回弹问题]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/102516256</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/102516256</guid><author>H_Gao</author><pubDate>Sat, 12 Oct 2019 10:49:58 +0800</pubDate><description><![CDATA[在使用CoordinatorLayout来实现Android中的一种吸顶的时候，遇到了两个CoordinatorLayout的滑动问题，这里做下记录。
这里使用CoordinatorLayout实现的是一个tab吸顶的效果，类似淘宝，京东首页的一个效果。
头部区域展示各种类型banner卡片，中间是类似TabLayout的可点击tab，下面是feed卡片，可以一直下拉加载，并且feed卡片区域使用...]]></description><category></category></item><item><title><![CDATA[RecyclerView中出现item重复问题的一次记录]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/101753302</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/101753302</guid><author>H_Gao</author><pubDate>Mon, 30 Sep 2019 09:44:59 +0800</pubDate><description><![CDATA[问题背景
前不久我们项目中由用户反馈说遇到笔记重复的问题，而且不只一次遇到类似的反馈。
这种重复笔记总是出现的feed流的中间位置，如下示意图所示：

这个图画的有点丑，凑合看，意思大概就是这样的。
接下来，我就得追踪下这个问题了，开始时我几乎就一口咬定是接口返回的有问题，由于前几次后端没有日志，好像之前的反馈就那么过去了，直到后面又出现一次重复笔记的问题，这次是公司内部员工出现的，于是后端也通过...]]></description><category></category></item><item><title><![CDATA[一篇文章彻底搞懂volatile关键字]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/101603231</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/101603231</guid><author>H_Gao</author><pubDate>Sat, 28 Sep 2019 17:39:40 +0800</pubDate><description><![CDATA[volatile关键字和synchronized关键字一样，在Java多线程开发中，是一道必须要跨越的槛。之前有篇文章已经分析过synchronized关键字的原理，synchronized关键字的原理，这一次，我们来一步一步分析下volatile关键字的工作原理。
本文篇幅稍微有点长，希望您能耐心看下去，并有所收获。
volatile关键字的使用
首先，我们从一个简单的程序来入手。
public...]]></description><category></category></item><item><title><![CDATA[ConcurrentHashMap是如何保证线程安全的]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/101266831</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/101266831</guid><author>H_Gao</author><pubDate>Tue, 24 Sep 2019 09:59:35 +0800</pubDate><description><![CDATA[ConcurrentHashMap是如何保证线程安全的
之前分析过HashMap的一些实现细节，关于HashMap你需要知道的一些细节, 今天我们从源码角度来看看ConcurrentHashMap是如何实现线程安全的，其实网上这类文章分析特别多，秉着”纸上得来终觉浅，绝知此事要躬行“的原则，我们尝试自己去分析下，希望这样对于ConcurrentHashMap有一个更深刻的理解。
为什么说HashM...]]></description><category></category></item><item><title><![CDATA[Android面试题最全总结系列 (持续更新中...)]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/101149400</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/101149400</guid><author>H_Gao</author><pubDate>Sun, 22 Sep 2019 10:51:55 +0800</pubDate><description><![CDATA[前言
自己一直做Java、Android相关的知识总结-&gt;KnowledgeSummary系列。这个GitHub的repo想作为自己对于Android核心知识点以及一些面试题的总结，因为很多知识点理解的不够深刻，所以通过这个来强迫自己做总结，目前已经初具规模，我基本每天都会更新这个repo，后续还会持续更新下去，大家有兴趣可以点个star关注下，感谢。
在做这个知识总结系列，发现有的比较零散...]]></description><category></category></item><item><title><![CDATA[仿京东、淘宝首页，通过两层嵌套的RecyclerView实现tab的吸顶效果]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/101014042</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/101014042</guid><author>H_Gao</author><pubDate>Thu, 19 Sep 2019 10:17:10 +0800</pubDate><description><![CDATA[为什么会有这篇文章

之前写过一篇文章使用CoordinatorLayout过程中遇到的两个问题以及浅析CoordinatorLayout工作机制，这篇文章上主要讲了通过CoordinatorLayout实现tab吸顶的效果时遇到的问题，效果跟京东、淘宝首页类似，只不过实现方法不同而已，但是使用CoordinatorLayout来实现是会有不少细节问题是很难处理好的，下面会详细介绍。

首先我们可...]]></description><category></category></item><item><title><![CDATA[synchronized关键字的原理]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/98593198</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/98593198</guid><author>H_Gao</author><pubDate>Tue, 06 Aug 2019 10:27:19 +0800</pubDate><description><![CDATA[synchronized关键字
什么是synchronized
JDK官网对synchronized关键字有个比较权威的解释。
Synchronized keyword enable a simple strategy for preventing thread interference and memory consistency errors: if an object is visible ...]]></description><category></category></item><item><title><![CDATA[关于HashMap你需要知道的一些细节]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/90746413</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/90746413</guid><author>H_Gao</author><pubDate>Mon, 03 Jun 2019 08:13:21 +0800</pubDate><description><![CDATA[本文的公众号文章链接：
关于HashMap你需要知道的一些细节
在官方文档中的描述：

Hash table based implementation of the Map interface. This implementation provides all of the optional map operations, and permits null values and the null ...]]></description><category></category></item><item><title><![CDATA[从源码角度分析ArrayList和LinkedList的区别]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/90711226</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/90711226</guid><author>H_Gao</author><pubDate>Fri, 31 May 2019 10:07:19 +0800</pubDate><description><![CDATA[List代表一种线性表的数据结构，ArrayList则是一种顺序存储的线性表。ArrayList底层采用数组来保存每个集合的元素，LinkedList则是一种链式存储的线性表。其本质上就是一个双向链表，但它不仅实现了List接口，还是想了Deque接口。也就是说LinkedList既可以当成双向链表使用，也可以当成队列使用，还可以当成栈来适用于（Deque代表双端队列，即具有队列的特征，也具有栈的...]]></description><category></category></item><item><title><![CDATA[ArrayList和Vector的区别]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/90710891</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/90710891</guid><author>H_Gao</author><pubDate>Fri, 31 May 2019 09:49:20 +0800</pubDate><description><![CDATA[ArrayList和Vector的区别
ArrayList和Vector这两个集合本质上并没有什么太大的不停，他们都实现了List接口，而且底层都是基于Java数组来存储集合元素。
在ArrayList集合类的源代码中也可以看到下面一行：
    transient Object[] elementData; // non-private to simplify nested class acce...]]></description><category></category></item><item><title><![CDATA[2017年，我成功入职小红书的经历]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/79427661</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/79427661</guid><author>H_Gao</author><pubDate>Wed, 29 May 2019 22:04:44 +0800</pubDate><description><![CDATA[很早就想写这篇总结，但是因为⾃⼰太懒，拖拖拉拉到现在，因为去年10⽉份加⼊现在的公司（⼩红书），加上之前的⼀些经历，有很多感慨，所以想简单回顾下，算得上是对毕业以来这段时间的总结吧。

我是2016毕业的，2017年算是毕业的第⼀年，来上海的第⼆年（⼤四的时候就来上海实习）。这⼀年，离职，⼊职，再离职，再⼊职，前后换了两个公司，真的算上是⼀波三折。



与德的工作经历

再来具体谈谈这⼀年的经历...]]></description><category></category></item><item><title><![CDATA[Java基础知识总结]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/90597985</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/90597985</guid><author>H_Gao</author><pubDate>Mon, 27 May 2019 09:43:57 +0800</pubDate><description><![CDATA[1. Java 面向对象编程三大特性: 封装 继承 多态

封装
继承
多态


2. Java对象的生命周期
3. 抽象类和接口的区别
抽象类与接口：

常用关键字this、super、static和final

this: 代表对象。就是所在函数所属对象的引用。
super关键字    -
static：关键字，是一个修饰符，用于修饰成员(成员变量和成员函数)。
静态代码块：就是一个有静态关...]]></description><category></category></item><item><title><![CDATA[一些零星的思考]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/83241102</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/83241102</guid><author>H_Gao</author><pubDate>Sun, 21 Oct 2018 13:51:15 +0800</pubDate><description><![CDATA[越是夜深人静的时候，越会有着清晰的思考。
这段时间以来，工作比较忙，业余时间也总想着玩去了，也没有时间学习什么的，公众号，博客一直都没更新。这周公司宣布Q4全体员工周六都要加班，同事都说累得不行，我也感觉到身心俱疲。借着这个时间点，也让自己好好梳理一些思路。
关于技术方面的成长问题，自己工作上很多时候都是写业务，加上前段时间是处在一个舒适区里，业余时间都是去玩游戏，看视频去了，其实大多数人都是这种...]]></description><category></category></item><item><title><![CDATA[关于TabLayout的indicator宽度的一次探索]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/79784325</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/79784325</guid><author>H_Gao</author><pubDate>Mon, 02 Apr 2018 09:06:27 +0800</pubDate><description><![CDATA[本文的微信公众号链接：关于TabLayout的indicator宽度的一次探索


  关于TabLayout，做过android开发的都知道，在android开发中应用特别广泛。这里来简单记录一下前不久遇到的关于TabLayout的一个问题。


先来看看下面一张图，

 
 这是我们app首页顶部的部分截图，典型的TabLayout的应用场景，现在遇到一个问题，设计需要TabLayout的in...]]></description><category></category></item><item><title><![CDATA[为什么推荐使用Kotlin进行开发]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/79593619</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/79593619</guid><author>H_Gao</author><pubDate>Sat, 17 Mar 2018 16:55:45 +0800</pubDate><description><![CDATA[对于Kotlin，我一开始是有抵触情绪的，觉得这门语言有点像Js，所以主观地就判定这个语言不好。后面来到新公司，大佬要求新写的代码必须使用Kotlin，于是慢慢喜欢上了这门语言。很多人在学习之前会问，Kotlin到底值不值得学？在这里，我们先不急着回答这个问题，先来看看Kotlin之于Java到底有哪些不一样的地方。
第一，Kotlin对可空类型的显示支持这一点简单来讲，就是用Kotlin写的代码在]]></description><category></category></item><item><title><![CDATA[谈谈android中的内存泄漏]]></title><link>https://blog.youkuaiyun.com/H_Gao/article/details/78893156</link><guid>https://blog.youkuaiyun.com/H_Gao/article/details/78893156</guid><author>H_Gao</author><pubDate>Mon, 25 Dec 2017 15:17:56 +0800</pubDate><description><![CDATA[写在前面
  内存泄漏实际上很多时候，对于开发者来说不容易引起重视。因为相对于crash来说，android中一两个地方发生内存泄漏的时候，对于整体没有特别严重的影响。但是我想说的是，当内存泄漏多的时候，很容易造成他OOM的，因为android给每个app的分配的内存是有限的，而且当发生内存泄漏的时候，对于app的体验也会不好，容易造成卡顿等不好的体验。
Java内存结构 
上面展示的是Java虚拟]]></description><category></category></item></channel></rss>