自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

JasonGaoH的专栏

掘金地址:https://juejin.im/user/5cf5d02af265da1ba431d95b

  • 博客(47)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 仿京东、淘宝首页,通过两层嵌套的RecyclerView实现tab的吸顶效果

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

2019-09-19 10:17:10 10168 9

原创 android 7.0中Settings新功能全面解析

Settings N预览android N 在Settings中作了一些调整,如上面的截图。 - 增加了侧滑菜单,采用v4下的DrawerLayout来实现; - 在Settings主界面增加了Condition,能够在设置列表中显示状态; - 在Settings主界面增加了Suggestion。Dashboard category数据的加载首先来看下Settings的Dashboard ca

2017-02-27 19:26:19 15744 10

原创 android开发中Fingerprint模块浅析

一、Fingerprint上层总体架构 Fingerprint模块架构图如下,这里分为application,framework,fingerprintd和FingerprintHal这几个部分,不涉及指纹的IC库和驱动这部分,这部分逻辑由指纹厂商来实现,目前了解的并不多。 二、Fingerprint framework初始化流程 在系统开机的时候,会启动各种S

2017-01-15 19:56:01 12498 10

原创 你可能需要这份大厂面经

今年小红书这边发完年终奖之后,心里隐隐觉得要出去看看机会,因为在小红书这边已经呆了快三年了,对于一些技术,业务总觉得有点麻木了,内心里总觉得自己啥都会了,但是很多只是知道个皮毛。有句话是这么说的,一个人在一个地方待久了,内心里以为他所处的这个环境就是全世界,所以想着做些改变,不管结果如何,至少让自己走出舒适区,同时也想着能去大厂看看。其实大家也不能特别迷信大厂,认为加入大厂就没有后顾之忧了,只能说目前对我现在这个阶段来说,加入大厂刷一下自己的大厂背景这个对于自己当下来说还是有益的。一开始也是不确定到底

2020-08-30 14:01:36 768 1

原创 快到年底的年中总结

今天聊聊技术以外的话题。为什么要坚持写公众号这个和为什么坚持写博客的问题类似,我的回答是为了进步。16年毕业,我一直在坚持写博客,早期的时候对于技术这块可能关于Activity的生命周期都能整一篇文章出来,现在有时候因为时间忙,可能好几个月才会出一篇文章,但是我还是一直在坚持着,应该以后也会一直坚持下去。为什么写博客或者写公众号文章能够让我们进步,简单来讲,在你写文章的时候会促进我们思考。举个例子,我在第一家公司的时候,当时在手机设置页遇到一个UI的卡顿问题,因为牵扯代码比较偏底层,当时让我一个刚毕

2020-08-07 10:03:53 618

原创 Feed流上的优化实践

之前一直负责小红书的关注Feed的迭代工作,因为一直是在完成新功能的迭代工作,对于Feed的性能和消费体验就没有特别关注,加上对于这块业务的一些监控也没有落地,所以长期对于这块的性能基本上就是一个忽视的状态。随着业务越来越复杂,功能越来越多,收到好多反馈都是说关注页面的滑动体验很不好,于是决定对关注Feed做一个性能优化。这里先从优化说起,之前在网上看到一个关于优化的分类,觉得很有道理。请看下面这张图:关于优化优化整体可以分为两大类,软优化和硬优化。那么什么是软优化呢?软优化并不会改变某段代码的执

2020-08-02 23:14:17 1057

原创 我画了近百张图来理解红黑树

文章已同步发表于微信公众号JasonGaoH,我画了近百张图来理解红黑树,文章略有修改。之前在公司组内分享了红黑树的工作原理,今天把它整理下发出来,希望能对大家有所帮助,对自己也算是一个知识点的总结。这篇文章算是我写博客写公众号以来画图最多的一篇文章了,没有之一,我希望尽可能多地用图片来形象地描述红黑树的各种操作的前后变换原理,帮助大家来理解红黑树的工作原理,下面,多图预警开始了。在讲红...

2019-12-14 17:24:56 2672 3

原创 解决CoordinatorLayout的动画抖动以及回弹问题

在使用CoordinatorLayout来实现Android中的一种吸顶的时候,遇到了两个CoordinatorLayout的滑动问题,这里做下记录。这里使用CoordinatorLayout实现的是一个tab吸顶的效果,类似淘宝,京东首页的一个效果。头部区域展示各种类型banner卡片,中间是类似TabLayout的可点击tab,下面是feed卡片,可以一直下拉加载,并且feed卡片区域使用...

2019-10-12 10:49:58 3526 1

原创 RecyclerView中出现item重复问题的一次记录

问题背景前不久我们项目中由用户反馈说遇到笔记重复的问题,而且不只一次遇到类似的反馈。这种重复笔记总是出现的feed流的中间位置,如下示意图所示:这个图画的有点丑,凑合看,意思大概就是这样的。接下来,我就得追踪下这个问题了,开始时我几乎就一口咬定是接口返回的有问题,由于前几次后端没有日志,好像之前的反馈就那么过去了,直到后面又出现一次重复笔记的问题,这次是公司内部员工出现的,于是后端也通过...

2019-09-30 09:44:59 4569 1

原创 一篇文章彻底搞懂volatile关键字

volatile关键字和synchronized关键字一样,在Java多线程开发中,是一道必须要跨越的槛。之前有篇文章已经分析过synchronized关键字的原理,synchronized关键字的原理,这一次,我们来一步一步分析下volatile关键字的工作原理。本文篇幅稍微有点长,希望您能耐心看下去,并有所收获。volatile关键字的使用首先,我们从一个简单的程序来入手。public...

2019-09-28 17:39:40 2452 5

原创 ConcurrentHashMap是如何保证线程安全的

ConcurrentHashMap是如何保证线程安全的之前分析过HashMap的一些实现细节,关于HashMap你需要知道的一些细节, 今天我们从源码角度来看看ConcurrentHashMap是如何实现线程安全的,其实网上这类文章分析特别多,秉着”纸上得来终觉浅,绝知此事要躬行“的原则,我们尝试自己去分析下,希望这样对于ConcurrentHashMap有一个更深刻的理解。为什么说HashM...

2019-09-24 09:59:35 5955 10

原创 Android面试题最全总结系列 (持续更新中...)

前言自己一直做Java、Android相关的知识总结->KnowledgeSummary系列。这个GitHub的repo想作为自己对于Android核心知识点以及一些面试题的总结,因为很多知识点理解的不够深刻,所以通过这个来强迫自己做总结,目前已经初具规模,我基本每天都会更新这个repo,后续还会持续更新下去,大家有兴趣可以点个star关注下,感谢。在做这个知识总结系列,发现有的比较零散...

2019-09-22 10:51:55 2986 1

原创 synchronized关键字的原理

synchronized关键字什么是synchronizedJDK官网对synchronized关键字有个比较权威的解释。Synchronized keyword enable a simple strategy for preventing thread interference and memory consistency errors: if an object is visible ...

2019-08-06 10:27:19 659

原创 关于HashMap你需要知道的一些细节

本文的公众号文章链接:关于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 ...

2019-06-03 08:13:21 1175 1

原创 从源码角度分析ArrayList和LinkedList的区别

List代表一种线性表的数据结构,ArrayList则是一种顺序存储的线性表。ArrayList底层采用数组来保存每个集合的元素,LinkedList则是一种链式存储的线性表。其本质上就是一个双向链表,但它不仅实现了List接口,还是想了Deque接口。也就是说LinkedList既可以当成双向链表使用,也可以当成队列使用,还可以当成栈来适用于(Deque代表双端队列,即具有队列的特征,也具有栈的...

2019-05-31 10:07:19 416

原创 ArrayList和Vector的区别

ArrayList和Vector的区别ArrayList和Vector这两个集合本质上并没有什么太大的不停,他们都实现了List接口,而且底层都是基于Java数组来存储集合元素。在ArrayList集合类的源代码中也可以看到下面一行: transient Object[] elementData; // non-private to simplify nested class acce...

2019-05-31 09:49:20 3271

原创 2017年,我成功入职小红书的经历

很早就想写这篇总结,但是因为⾃⼰太懒,拖拖拉拉到现在,因为去年10⽉份加⼊现在的公司(⼩红书),加上之前的⼀些经历,有很多感慨,所以想简单回顾下,算得上是对毕业以来这段时间的总结吧。我是2016毕业的,2017年算是毕业的第⼀年,来上海的第⼆年(⼤四的时候就来上海实习)。这⼀年,离职,⼊职,再离职,再⼊职,前后换了两个公司,真的算上是⼀波三折。与德的工作经历再来具体谈谈这⼀年的经历...

2019-05-29 22:04:44 21798 7

原创 Java基础知识总结

1. Java 面向对象编程三大特性: 封装 继承 多态封装继承多态2. Java对象的生命周期3. 抽象类和接口的区别抽象类与接口:常用关键字this、super、static和finalthis: 代表对象。就是所在函数所属对象的引用。super关键字 -static:关键字,是一个修饰符,用于修饰成员(成员变量和成员函数)。静态代码块:就是一个有静态关...

2019-05-27 09:43:57 503 1

原创 一些零星的思考

越是夜深人静的时候,越会有着清晰的思考。这段时间以来,工作比较忙,业余时间也总想着玩去了,也没有时间学习什么的,公众号,博客一直都没更新。这周公司宣布Q4全体员工周六都要加班,同事都说累得不行,我也感觉到身心俱疲。借着这个时间点,也让自己好好梳理一些思路。关于技术方面的成长问题,自己工作上很多时候都是写业务,加上前段时间是处在一个舒适区里,业余时间都是去玩游戏,看视频去了,其实大多数人都是这种...

2018-10-21 13:51:15 542 1

原创 关于TabLayout的indicator宽度的一次探索

本文的微信公众号链接:关于TabLayout的indicator宽度的一次探索 关于TabLayout,做过android开发的都知道,在android开发中应用特别广泛。这里来简单记录一下前不久遇到的关于TabLayout的一个问题。先来看看下面一张图, 这是我们app首页顶部的部分截图,典型的TabLayout的应用场景,现在遇到一个问题,设计需要TabLayout的in...

2018-04-02 09:06:27 3453 5

原创 为什么推荐使用Kotlin进行开发

对于Kotlin,我一开始是有抵触情绪的,觉得这门语言有点像Js,所以主观地就判定这个语言不好。后面来到新公司,大佬要求新写的代码必须使用Kotlin,于是慢慢喜欢上了这门语言。很多人在学习之前会问,Kotlin到底值不值得学?在这里,我们先不急着回答这个问题,先来看看Kotlin之于Java到底有哪些不一样的地方。第一,Kotlin对可空类型的显示支持这一点简单来讲,就是用Kotlin写的代码在

2018-03-17 16:55:45 1469

原创 谈谈android中的内存泄漏

写在前面 内存泄漏实际上很多时候,对于开发者来说不容易引起重视。因为相对于crash来说,android中一两个地方发生内存泄漏的时候,对于整体没有特别严重的影响。但是我想说的是,当内存泄漏多的时候,很容易造成他OOM的,因为android给每个app的分配的内存是有限的,而且当发生内存泄漏的时候,对于app的体验也会不好,容易造成卡顿等不好的体验。Java内存结构 上面展示的是Java虚拟

2017-12-25 15:17:56 2545 2

原创 关于layout_centerHorizontal、layout_gravity、gravity的区别

layout_centerHorizontal是相对于RelativeLayout的布局属性如果设置为true,就将该控价设置在相对于父控件水平居中的位置layout_gravity针对LinearLayout的一种控件对齐方式,可以把值设置成下列值:center_vertical、center_horizontal、center等等gravity控制控件内文字的对齐方式举个栗子:在写一个简单的

2017-03-30 10:28:36 12414 1

原创 android开机启动流程简单分析

android启动 当引导程序启动Linux内核后,会加载各种驱动和数据结构,当有了驱动以后,开始启动Android系统同时会加载用户级别的第一个进程init(system\core\init\init.cpp)代码如下:int main(int argc, char** argv) { ..... //创建文件夹,挂载 // Get the basic filesyst

2017-02-14 19:42:17 2601

原创 你真的理解程序中的变量吗

关于变量,很多人肯定觉得这有啥可说的,不就是int a=10这类的吗,这样的太简单了, 学习编程语言入门的时候就已经知道了,能没啥可讲的。 可是,你真的理解变量吗,你知道变量的本质是什么吗?变量的概念 既能读又能写的内存对象,称为变量;若一旦初始化后不能修改的对象则称为常量。上述概念中说到了内存对象,要想真正理解变量就需要从内存的角度来理解。我们来看下面这张图: int a;定义了一个变量a,

2016-12-18 21:35:02 4800 1

原创 你知道android中的视差特效吗

阻尼效果(视差特效)空间,微博很多地方都有这种下拉出现的”阻尼“效果,这种效果最早在ios上出现,如今android上这种功能也是很常见了。先看效果图:该功能可以分为两个点: 1. 当ListView下拉的时候,顶部的HeaderView会有一个拉长的效果; 2. 当下拉一段距离后,ListView会复位,执行一个简单的回弹动画。这个功能实现起来挺简单的,下面来介绍如何实现:第一个功能:(阻尼效

2016-12-07 23:05:39 2127

原创 android自定义ViewGroup(侧滑菜单)

侧滑菜单的简单实现不少APP中都有这种侧滑菜单,例如QQ这类的,比较有名开源库如slidingmenu。 有兴趣的可以去研究研究这个开源库。这里我们将一种自己的实现方法,把学习的 东西做个记录,O(∩_∩)O!首先看效果图:这里我们实现的侧滑菜单,是将左侧隐藏的菜单和主面板看作一个整体来实现的,而左侧隐藏的菜单和主面板相当于是这个自定义View的子View。首先来构造该自定义View的布局:自定义

2016-11-27 22:14:13 1871

原创 java中增强for循环的原理

package com.wind.gaohui;import java.util.ArrayList;import java.util.List;public class TestFor { public static void main(String[] args) { List<String> lists = new ArrayList<String>();

2016-10-23 13:30:05 7820 3

原创 jni开发初试

简单jni流程初试JNI java本地开发接口JNI 是一个协议 这个协议用来沟通java代码和外部的本地代码(c/c++)。 通过这个协议,java代码就可以调用外部的c/c++ 代码, 外部的c/c++代码也可以调用java代码。首先学习熟悉下简单的jni开发流程: 1.创建一个android工程 这个工程实现一个简单的功能: 使用jni这种技术打印一个由底层C语言返

2016-09-25 19:36:29 848

原创 从源码角度剖析Handler 机制

android中,在进行耗时操作更新UI用到最多的方法就是Handler了,一般在子线程中进行耗时操作(访问网络等),然后发送消息到UI线程(主线程),使得界面得以更新。对于Handler的用法,相信大家都比较熟悉了,那么Handler机制的原理是什么呢?我们今天从源码角度来分析下Handler机制的原理。Handler mHandler = new Handler(){ publ

2016-09-11 20:16:15 868

原创 深入分析AsyncTask

什么是AsyncTask==AsyncTask 即 asynchronous task,异步任务==。AsyncTask实际上是围绕Thread和Handler设计的一个辅助类,在内部是对Thread和Handler的一种封装。AsyncTask的异步体现在由后台线程进行运算(访问网络等比较耗时的操作),然后将结果发布到用户界面上来更新UI,使用AsyncTask使得我不用操作Thread和Han

2016-09-04 15:38:40 1522 2

原创 仿微信通讯录右侧快速定位字母表控件的实现

仿微信通讯录右侧快速定位字母表控件先看效果图:界面比较单调,凑合看,主要看功能。这种控件在很多应用的通讯录的界面,MIUI里面的通讯录都有这个功能,其实这是一个自定义View,相对来说,这个并不是一个多么复杂的自定义View。下面介绍一下这种控件的实现方法:首先,自定义View,一般是对View的增强,因为系统提供的控件不能满足需求,一般情况下,都是继承View

2016-08-22 22:41:52 10523

原创 java中的synchronized(同步代码块和同步方法的区别)

问题的由来: 看到这样一个面试题://下列两个方法有什么区别public synchronized void method1(){}public void method2(){ synchronized (obj){}}synchronized用于解决同步问题,当有多条线程同时访问共享数据时,如果进行同步,就会发生错误,java提供的解决方案是:只要将操作共享数据的语句在某一时

2016-08-21 13:48:37 41486 26

原创 android开发中Settings结构简单分析

Settings界面结构简单分析Setting是android系统很重要的模块,这个模块并不是很复杂,这部分也一直在看,很多时候都是在看某个具体的选项,比如WLAN,蓝牙这样具体的源码,但是对于主界面的布局以及结构并不清楚。 在使用Hierarchy Viewer工具可以看到Settings模块的主界面显示的是Settings, com.android.settings/com.android.

2016-08-03 20:25:53 13370 3

原创 之前的实习--关于Web部分的笔记

之前实习的时候做的是关于Web的,主要做的是CRM这类企业项目,比较传统,技术用的也比较传统,是典型的SSH架构,如今不再从事Web开发,但是之前实习的一些笔记进行简单记录下,希望以后能够用的着。1、poi POI提供API给Java程序对Microsoft Office格式档案读和写的功能2、在html中a标签的href中调用js函数 3、在javascript 里怎样实现html中的

2016-06-03 22:17:55 4486

原创 说说关于Servlet你不知道的知识

什么是Servlet?       Java Web技术是当今主流的互联网Web应用技术之一,而Servlet是Java Web 技术的核心基础。那么什么是Servlet,什么是Servlet容器呢?       最简单的介绍,Servlet是Sun公司提供的一门用于开发动态Web资源的技术。Servlet是一个接口,一个规范。它是运行在Web服务器上的一个Java程序,并且能通过HTTP

2015-11-03 17:45:46 765

原创 java并发编程(synchronized同步和Lock显示锁)

为什么需要并发程序?              线程是java语言中不可或缺的重要功能,它们能使复杂的异步代码变得更简单,从而极大地简化了复杂系统的开发。另外,在开发当数据量大的时候,往往需要使用多线程来提高程序的运行速度,尤其是如今处在一个大数据的时代。在并发编程中,就是需要解决实现线程安全问题,而这个问题的核心就在于要对状态访问操作进行管理,说简单点,就是要管理好对共享数据的访问。“共享”

2015-11-03 14:28:39 3718

转载 Hibernate中Criteria的完整用法

Hibernate中Criteria的完整用法       Criteria 是一个完全面向对象,可扩展的条件查询API,通过它完全不需要考虑数据库底层如何实现、SQL语句如何编写,是Hibernate框架的核心查询对象。1,Criteria  Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和D

2015-11-03 12:34:26 19764

原创 android学习之使用AIDL实现进程间的通讯

一般在android中,每个应用程序都有自己的进程。每一个应用程序都是运行在自己独立的进程里面的,并且进程拥有独立的内存空间,它们的数据时独立的。正常情况下,不同的进程之间一般是不能进行通讯的。       这里简单介绍下进程间的通讯:在操作系统中,不同的进程之间的通讯方式一般有:信号量,消息队列,管道等等。一、信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止

2015-11-02 21:26:56 1035

原创 android学习之Service

服务是安卓中的典型组件,一般组件都需要在清单文件中注册。服务能够长时间的运行在后台,并且不提供用户界面。其他的组件能够开启服务 并且在用户在开启其他应用的时候该服务仍然能够继续在后台执行。一个组件通过bind的方式绑定服务,并且该组件能与之交互。最典型的案列就是播放音乐,播放器应用在后台仍然能够播放音乐。服务,简单的解释就是,长期在后台运行并且没有界面的组件。类似天气预报和股票显示的应用,需要

2015-11-02 16:42:09 861

QuickSearchView

仿微信通讯录右侧快速定位字母表控件

2016-08-22

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除