自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

你关注了我,是个概率极低的事件......

美团外卖移动端开发工程师、上海大学硕士

  • 博客(105)
  • 收藏
  • 关注

原创 【编程框架】Android可配置的ScrollView框架

给大家推荐一下我最近刚写好的“可配置的ScrollView框架”,凡是采用scrollView结构的业务页面都可以采用这个框架。该框架主要有以下几个优点:1、scrollView中的每个模块位置走配置,有一个configuration类统一管理2、业务代码模块化。activity里不再充斥了各种业务代码,每个模块的业务代码分别在自己的模块里实现3、layout布局模块化。每个模块的布局都写在...

2018-09-27 16:34:26 317

原创 携程App无线开发全流程介绍

Native工程结构 1、基础设施层:网络通信、加解密 2、公共业务层:支付、登录 3、业务模块层: App整体框架通用组件 网络协议 读出错或写出错会重连 protoBuffer序列化时间短、序列化结果小50%Bundle模块化 为什么用bus? 不相互依赖,你玩你的,我玩我的,我不会因为你的编译不过,影响我的开发Bund...

2018-06-10 21:40:02 1933

原创 可怕!从简洁高效的角度来说,Kotlin比Java强太多了吧!难道Java真的要被替代了?

用Kotlin开发Android程序也有几个月了,这里

2018-05-30 00:15:37 9906 4

原创 【Android View相关】自定义价格日历(附demo)

一. 引言最近刚刚实现了日历页,感触颇多。这个日历页跟我之前开发的任何一个页面都不太像,这个页面的所有模块之间都有关联,一个模块的数据层有任何修改,其他模块都要跟着改变,关联性非常强。具体如下图所示: 这只是一个基本流程的截图,当满足某些条件还会出现“帮我下单”等模块。这里说一下我对开发完这个页面的感想:1. MVP架构的优势完全凸显出来。(1)可以看到这些模块几乎都是关联的...

2018-03-24 11:06:38 1669 6

原创 【Android 编程框架】网络缓存框架重构

背景为什么想到了要对网络框架和缓存框架进行封装?我们之前的框架层分别封装了网络框架和缓存框架,但是我们没有对网络缓存框架进行一个总的封装。也就是说,我们需要自己去控制是从网络获取数据还是从缓存获取数据。控制代码如下: 这个是我们请求数据的方法,它包含两个参数:useCache和forceUpdate。 useCache forceUpdate 效果 true...

2018-03-17 00:44:30 256

原创 【Android 热修复与插件化 一】带你入门Android插件化(附demo)

一. 背景Android插件化作为每个合格的Android程序员都必须会的技术,被各大厂广泛使用。随着各大厂对移动互联网的垄断,我们渐渐发现app集成的功能越来越多。比如如下几个app(携程、淘宝、支付宝): 可以看到每一个app都被集成了无数的功能入口,就拿淘宝来说,“天猫”、“外卖”、“飞猪”、“拍卖”,这任何一个入口都其实是一个app,只不过被集成到“淘宝”这个入口里了。如果没...

2018-03-08 00:13:41 10614 31

原创 送给每一个关注Colin的朋友

这篇博客是献给所有的“屌丝”、“宅男”、“loser”,所有别人会说他是“没有未来”的人,因为其实我就是这么一个人。 我上学的时候,跟我所有的同学都不太一样,我不会出去玩,也不会打球,也不会社交,只会躲在自己的屋子里。而且,我的生活,它就是一系列的失败。你知道吗?刚进大学时,一个连基本office操作都不会的我,害得全班同学必须等着不会“盲打”的我打完字才能下课。对不起,你没有天赋。...

2018-02-21 23:49:04 2371 6

原创 【Android 前沿技术】用MediaPlayer+TextureView封装好的视频播放器,可直接使用(附demo)

一、引言在经过将近半个月的调研开发,我终于算是对“Android短视频开发”入门了。为了给自己一个总结,也为了把自己潜心研究的成果分享出来,我决定写下这篇blog。播放器已经封装好,结构很清晰,直接调用即可。这里附上效果图和demo(点击下载)! 其中,图一为全屏播放,图二为播放中,图三为暂停,图四为上滑展示小窗口,图五为网络异常提示。     二、方案选择...

2018-01-23 15:08:55 4235 5

原创 【Android 技术难点攻克】RecyclerView实现悬停导航栏

介绍在上一篇文章《彻底解决RecyclerView与ScrollView滑动冲突问题,并实现RecyclerView悬停导航栏》中,我讲述了如何解决ScrollView与RecyclerView的滑动冲突问题。时隔几个月,我对这样的程序结构有很多的反思。当初这样嵌套,其实最主要是为了实现悬停。那么悬停的最好的实现方式就是这样去解决滑动冲突吗?答案或许是否。当然,几个月前,我设计出Scr...

2017-12-14 20:27:22 6651 2

原创 【Android 控件】垂直滚动广告栏控件实现(跑马灯效果)

跑马灯TextView是每个学过android开发的人在入门阶段都会去自己实现一遍的。然而,在实际应用当中,要在跑马灯中展示的不仅仅是一行文字,常常是一幅幅图片,甚至是图文混排的广告。这种场景下,集成了跑马灯效果的TextView肯定就不能满足我们的需求了。经过一番调研,我找到了一种能非常好实现垂直滚动广告栏的控件——ViewFlipper。先看下实现效果。具体实现起来,代码也...

2017-12-12 21:20:16 1255

原创 【Android 动画】仿淘宝加入购物车动画实现(附件demo)

在开发详情页时,我们需要实现这样一个下面这样的动画。在看到这个动画设计的时候,我就想到“京东”和“淘宝”的加入购物车的动画。 话不多说,讲一下这个动画的实现原理:1、获取“对比”按钮和“比+1”按钮的绝对位置2、在ScrollView滑动过程中,这两个按钮的位置会不断变化,所以需要不断更新两个按钮的位置 scrollView.setOnScrollChange...

2017-10-31 15:11:58 2251

原创 【React Native入门系列文章 四】组件间通信【重要】

可以说,组件间通信是react native开发的基础中的基础,但凡具有一定规模的项目,都一定会涉及组件间通信。组件间通信大体有下面几种情况:父组件向子组件通信 子组件向父组件通信下面依次说下这几种通信方式。一、父组件向子组件通信父组件通过向子组件传递props,子组件得到props后进行相应的处理。下面是演示代码:父组件ParentComponent.js:...

2017-09-12 11:20:09 452

原创 【Android 编程架构】MVP实战(附demo)

今天有时间,把之前用mvp架构开发的一个需求整理一下。网上大多数是介绍mvp的简单应用,而如何在产品级项目中真正应用mvp架构?一、mvp架构的优势到现在为止,我用mvp架构做的需求已经上线了3个大版本,n个小版本了。说实话,刚开始做的时候,并没有意识到mvp对于开发有多大的好处,可是经过这几次版本迭代,mvp架构的优势就凸显出来了——当要加需求时,我只需要改presenter就可以了...

2017-07-28 15:31:53 641 2

原创 【Android 源码解析】bus 实现原理(附demo)

公司级的app肯定包含多个业务,比如淘宝的“天猫超市”、“聚划算‘、”天猫精选“、”天猫直播“、”品牌汇“,这些背后都是一个业务链,也都肯定是不同的业务部门负责的。一般情况下,不同业务部门的代码肯定在不同的module下,那么不同module下的页面如果需要通信该怎么实现?难道要在module之间相互依赖?为了解耦各个module,业务间通信常常需要bus。为什么要解耦?(1)试想,如...

2017-07-13 18:03:36 5672 16

原创 【Android 多模块构建】如何启动另外一个module中的Activity

一、多模块构建比如下图是我们现在工程的结构  project ├─── setting.gradle ├─── build.gradle ├─── app │ └─── build.gradle └─── testlibrary └─── build.gradle 要想进行多模块构建,必须要告诉gradle项...

2017-05-27 15:01:34 15858 3

原创 水一篇文章,吐槽下我最近的工作生活

先说下为什么自己没有更博。从去年7月份加入美团外卖,我收获了很多新知识,进步真的很大,那这不是应该更多地更博,把学到的知识记录下么?我之所以没有更博,是因为在美团内部是有技术文章期刊的,能在内部期刊上发文章也算是绩效的一部分。。。我的精力都花在发表内部期刊了,而且发一篇文章很占用时间,基本前前后后要用一个月。。。所以,当我有些学习心得时,我都在想能不能再扩展一下,发成一篇技术文章。。接下来我想吐...

2020-05-01 15:39:46 480 3

原创 React Native展示富文本(HTML标签)最佳解决方案

需求背景我们最近要做一个React Native的产品详情页,里面有一部分内容展示的是服务端下发的html标签(运营人员编写的,内容不固定,且很随意)。需求点是:1、展示富文本,包括img、span、div等基本html标签;2、控制富文本的整体样式,比如业务配置的图片大小不一,我们要统一已屏幕宽度为基准,高度自适应。第三方组件react-native-htmlview要实现这个需求,我第一...

2019-06-06 18:34:38 19956 10

原创 【web安全】深入浅出XSS攻击

在学习JS的过程中,你一定听说过CSRF攻击和XSS攻击。关于CSRF攻击,我已经在之前的文章中介绍过了,本文就来介绍一下XSS攻击。XSS定义和原理发出请求时,XSS代码出现在url中,作为输入提交到服务端,服务端解析后响应,XSS代码随响应内容一起回传给浏览器,最后浏览器解析并执行XSS代码。XSS防御措施一般xss防御措施有三种:编码过滤:原样显示用户输入内容时,要把不合法的内...

2019-05-02 14:56:35 5270 6

原创 箭头函数this指向的陷阱

箭头函数没有this!箭头函数没有this!!箭头函数没有this!!!重要的事情说三遍!那你可能要问我在箭头函数中明明可以取到this啊!function foo() { this.a = 1 let b = () => console.log(this.a) b()}foo() // 1以上箭头函数中的this其实是父级作用域中的this,箭头函数...

2019-04-27 17:33:15 1026 1

原创 【跨域】jsonp看完这篇文章就够了

jsonp是一种jQuery提供的跨域解决方案,我们今天来好好讲讲jsonp。同源策略所有浏览器都会使用同源策略这个安全策略。所谓同源,是指协议、域名、端口号都相同。没有同源的两个危险场景设想在用户访问淘宝时,进行了登录操作,并且登录信息写进了cookie。这时,你突然看到了一个广告,点击跳转进了一个广告链接。如果没有同源策略,这个广告页可以向淘宝发起请求,而由于登录信息已经写进了co...

2019-04-21 16:36:06 318

原创 require和import有啥区别?

今天在研究react的lazyRequire时突然想到了这个问题,于是展开了一些列研究。。要回答这个问题,必须从模块化说起。所谓模块化主要就是解决代码分割、作用域隔离、模块之间的依赖管理。通常一个文件就是一个模块,有自己的作用域,只向外暴露特定的变量和函数。流行的模块化规范有:CommonJS、AMD、CMD、ES6的模块系统。这里简单介绍下CommonJS规范和ES6 Module...

2019-04-10 21:26:42 1432

原创 不妨这样去理解JavaScript中的dom和bom

JavaScript是由三大部分组成:核心ECMAScript、文档对象模型-DOM、浏览器对象模型-BOM。这里我们主要来讲解下BOM和DOM。一. DOMJavaScript可以通过DOM来获取文档里的标签、属性等内容,也可以用来操控文档内容Document文档,这里的文档指的是XML和HTML的页面。当你创建一个页面并且加载到浏览器中,DOM就悄然而生。Object在学习Jav...

2019-04-09 00:10:34 281

原创 摆脱create-react-app,来让我们自己搭建一个react脚手架

创建一个文件夹REACT-CNODE-TEACHmkdir REACT-CNODE-TEACH在文件夹中npm init(我们使用npm来管理依赖包)一路点回车就行,当然你也可以去详细配置下工程信息。装一个webpack一个react工程,怎么能不安装react?这个时候我们要配置一下webpack,我们先在工程根目录创建一个文件夹build,然后创建一个webpack配置文件...

2019-04-09 00:03:33 670

原创 封装一个在react上更易用的redux框架

redux框架相信大家都已经用的很多了,不知道你们用的还习惯吗?我们在项目里反正用的都是

2019-03-24 22:40:34 506 2

原创 JS数组的几个有逼格操作

1. 去重Array.from(new Set([1,2,3,3,4,4]) //[1,2,3,4][...new Set([1,2,3,3,4,4])] //[1,2,3,4]2. 排序[1,2,3,4 ].sort (); // [1, 2,3,4],默认是升序[1,2,3,4].sort((a,b) => b - a); // [4,3,2,1] 降序3. 求和[1,...

2019-03-19 23:39:21 361

原创 颤抖吧!一起手写一个redux框架!

redux是一个前端架构,经常和react一起使用。你要用react.js基本上都要用到redux和react-redux,但这两者并不是一个东西!redux是一个前端框架,你可以把它用到react、vue,设置jquery。react-redux是把redux这个前端架构结合到react形成的库,就是redux架构在react中的体现。话不多说,我们来从头手写一个redux框架。用c...

2019-03-06 20:51:48 596

原创 聊一聊如何使用context,这是学习redux源码的基础哦

在学习redux源码一段时间之后,我发现不懂得context如何使用已经阻碍到我理解redux的设计思想了。。所以,这里介绍一下react的context如何使用,不过这个api可能你在业务开发时永远不会用到。。好了,废话不多说,我们来讲解下context如何使用。一. 如何使用context?想象一下,我们有现在这样一个页面(Index),其组件树长成如下这个样子:假设这个组件树里的...

2019-03-05 13:45:20 624

原创 JavaScript的事件循环与宏微任务

本文记录了作者在研究JS的宏任务和微任务的过程中如何抽丝剥茧,理清原理的。阅读本文大概需要二十分钟一. 理论基础1. 引擎和runtime引擎:解释并编译代码,把它变成能在机器上运行的代码。我们都知道JS是解释型语言,因为JS是没有办法直接运行在机器上的,需要一个引擎把它变成能在机器上运行的代码。JavaScript引擎的基本工作就是把开发人员编写的代码转换成高效、优化的代码,很多人把...

2019-02-28 21:04:12 388

原创 三分钟带你理解JS原型

一. 理论基础1. 普通对象和函数对象JavaScript中,万物皆对象!但是对象也是有区别的,分为普通对象和函数对象。function F(){}; //F:函数对象var f = new F(); //f: 普通对象2. 构造函数与大部分面向对象的语言不同,JavaScript中并没有引入类(class)的概念,但JavaScript仍然大量使用了对象,为了保证对象之间的联系,J...

2019-02-21 14:16:22 241

原创 【JS基础】从零开始带你理解JavaScript闭包--我是如何彻底搞明白闭包的

一直有一些刚入门js的朋友问我“什么是闭包?”,这里我就专门总结一下,下次再有人问起来,就直接把这篇文章给他看好了。什么是闭包?其实很简单啊。闭包就是一个函数(外部函数)内部又定义了一个函数(内部函数),内部函数可以访问外部函数中声明的所有变量。其实就是这样简单,可是官方解释就比较晦涩了:闭包是一个拥有许多变量和绑定了这些变量环境的表达式。接下来,理解闭包还需要知道闭包的几种写法和用法。...

2018-10-09 19:35:14 445

原创 【算法与数据结构】经典排序算法总结

1. 冒泡排序时间复杂度:o(n2)过程:一开始交换的区间是0-(N-1),也就是整个数组的整体;然后第一个数与第二个数进行比较,哪个大,哪个就放在后面;然后第二个数与第三个数进行比较,哪个大,哪个就放在后面;这样依次交换下去,最大的数就被放到了最后;然后把交互区间从0-(N-1),变为0-(N-2),这样第二大的数就被放到数组倒数第二的位置;这个过程进行下去,直到区间就只有一个数;这样数组...

2018-10-03 20:47:02 260

原创 【Android基础】讲讲Android的事件分发机制

Android的事件分发机制涉及的知识点很多,为了方便记忆和知识总结,小编决定专门开一篇文章,记录相关知识。 话不多说,我们直入主题。面试场景今天找到了几个自己之前校招时记录的关于事件分发的几个面试题。 讲讲Android的事件分发机制基本会遵从Activity => ViewGroup => View的顺序进行事件分发,然后通过调用onTouchEvent...

2018-07-26 15:38:35 725

原创 【设计模式】最常用的设计模式之一的观察者模式

这是之前做的“产品详情页”的长截图,这里讲解一下这个页面与“观察者模式”的关系:在活动季,底部的“开始预订按钮”会变成“秒杀按钮”(所谓秒杀按钮,就是一个显示成灰色不可点击,并且一直处于倒计时状态的按钮,直到到达秒杀时间,比如0点整,秒杀按钮才由灰色变为橘黄色,并且可以点击), 当秒杀时间到时,不光底部的“秒杀按钮”变为“开始预订按钮”,可选班期的几个按钮也从灰色不可点击状态,变为白色可点击状...

2018-07-19 12:01:56 27278 4

原创 android studio compiled code 之 记录一次艰难的android studio采坑之旅

不知从哪个时间点起,我的android studio就不能查看jar包里的源码了… 这个过程是极其痛苦的: - 要想查看jar包里的源码,只能去网上找网页版的… - 同事用我的电脑分享时,每每看到源码层就哭笑不得… 给大家看一下我看到的okhttp源码是什么样的真的生无可恋了…每次研究了半天都没进展的话,我就放下继续去做手头的事了,直到最近有空研究下,才真正解决了这个问题...

2018-07-18 11:48:47 2677 1

原创 【设计模式】单例模式的六种实现方式

记得几年前校招的时候,被某家公司要求手写单例模式,当时被问到时心里还在想“这么基础的问题还要问”,不过真的问到一些细节的时候,我答得还真不是太好。今天在看Glide源码时,突然想到可以总结出常用开源框架共通的东西,这也许才是研究源码的真正目的吧。 最近看的几个源码中都涉及到了单例模式,索性就在这里总结一下吧。饿汉式public class SingleTonEHan { //...

2018-07-17 17:01:28 276

原创 【React Native入门系列文章 九】如何从零开始学redux?(附demo)

一开始接触redux时对于它和react的关系理解很混乱:一会儿是state,一会儿又是store,这两者到底有什么关系?看代码时,dispatch、reducer、action这三者之间需要跳来跳去,它们到底是什么关系?为什么要这样设计结构?connect、mapStateToProps、mapDispatchToProps这三者有什么关系?或者说这三个是干什么的?跟redux有什么关...

2018-07-16 11:34:58 935 2

原创 【设计模式】中介者模式:设计模式中的解耦神器!!(附上demo)

偶然间看到了一个之前完全没有关注过的设计模式——中介者模式,在看过该设计模式的应用场景后,便有了相见恨晚的感觉啊!!!这么屌的设计模式应该应用很广泛呀!!可怎么之前都没怎么听过��难道是我之前以为『中介者模式』==『代理模式』吗?������不过话说回来,只看名字的话,很多人都会以为这两个是同一种设计模式吧……废话不多说,我们接下来介绍下这个非常屌的设计模式。一、应用场景『中介...

2018-06-26 23:23:52 1402

原创 【Android热修复与插件化 三】ClassLoader详解

一. Android中ClassLoader的种类Android的ClassLoader与Java的ClassLoader基本是一一对应的。如果对Java的ClassLoader不是很了解,可以参考《【Java 虚拟机】类加载器》。BootClassLoader(Java的BootStrap ClassLoader) 用于加载Android Framework层class文件。Pat...

2018-06-16 23:05:49 2974

原创 【Android热修复与插件化 二】class&dex文件详解

一. class文件结构深入解析(生成&执行&内部结构)####1. 什么是class文件?class文件是能够被JVM识别,加载并执行的文件格式。说白了,它就是一种文件格式,就像mp4、jpg、txt等文件格式一样。只有java源代码能编译成class文件吗?下图几种语言也能编译成class文件。2. 如何生成一个class文件?一般来说,有两种方式生...

2018-06-12 11:33:47 658

原创 一年前的一次员工培训总结

CTO见面会1、携程估值300亿 2、写周报是对自己知识的积累。如果没有积累能力,很多东西都会随着时间的推移而忘记。 3、技术人员要多依赖公司的委员会、啄木鸟。委员会存在的意义就是帮助大家。 4、大心脏!!遇到问题不可怕,一定之前有人遇到过。 5、CTO推荐电影《三傻大闹宝莱坞》——不停的追求卓越,成功就会在不经意间追上你。 6、博客应该记录什么: (1)自己解决问题的方法思路。 ...

2018-06-10 21:49:36 680

空空如也

空空如也

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

TA关注的人

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