自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

JackChan

生活不止眼前的苟且,还有诗和远方!

  • 博客(31)
  • 资源 (57)
  • 收藏
  • 关注

原创 Android学习之路

Android学习之路

2016-08-31 20:13:15 5074

原创 动态加载

动态链接库加载原理及HotFix方案介绍 http://dev.qq.com/topic/57bec216d81f2415515d3e9c

2016-08-31 19:49:57 449

转载 软件设计之高内聚低耦合

原文出处:http://blog.csdn.net/nengyu/article/details/421416351. 低耦合(Low Coupling)“低耦合”这个词相信大家已经耳熟能详,我们在看spring的书籍、MVC的数据、设计模式的书籍,无处不提到“低耦合、高内聚”,它已经成为软件设计质量的标准之一。那么什么是低耦合?耦合就是对某元素与其它元素之间的连接、感知和依赖的量度。这里所说的元素

2016-08-29 10:43:20 7577

转载 夜间模式的实现套路

今天要写的这篇文章主题是关于夜间模式的实现套路。本来这篇文章是上周要写的,结果因为上周末有其他事情,所以拖到这个周末才完成。曾经和薇薇(钛媒体漂亮的程序媛)聊过夜间模式实现的问题,当时薇薇酱负责钛媒体客户端的重构工作,有个夜间模式功能在考虑要不要用 Android M 新加的夜间模式特性。凭借稍微有点点老司机的经验,我直接说了 NO。按照以往的套路,通常新出的功能都会有坑,或者向下兼容性的问题。自己弄弄 Demo 玩玩是可以的,但是引入企业开发还是谨慎点,说白了就是先等等,让大家把坑填完了再用。果然,And

2016-08-29 10:10:45 3410

转载 Android进程保活招式大全

《Android进程保活招式大全》Android 进程拉活主要包括两个层面:提供进程优先级,降低进程被杀死的概率;在进程被杀死后,进行拉活,本文作者即从这两个方面入手对 Android 进程保活的有效解决方案进行了总结。

2016-08-28 12:44:21 724

转载 Android 热修复

热补丁技术是当前非常热门的Android开发技术,其中比较出名的方案有支付宝的AndFix以及QZone的超级热补丁方案。微信大约在2015年6月开始尝试应用,经过研究与尝试现有的各个方案,我们发现它们都有着自身的一些局限性。我们最终采用不同于它们的技术方案,也就是微信热补丁开源框架Tinker。

2016-08-28 12:37:36 1356

原创 Java数据结构和算法:位运算

获取大于等于 某个整数 并且是 2 的幂数的整数public static int roundUpToPowerOfTwo(int i) { i--; // If input is a power of two, shift its high-order bit right. // "Smear" the high-order bit all the way to the right. i

2016-08-27 21:04:44 1031

转载 详细介绍Java和C++区别

Java和C++都是面向对象语言。也就是说,它们都能够实现面向对象思想(封装,继承,多态)。而由于C++为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性!

2016-08-27 13:58:31 853

转载 BAT无线工程师面试流程详细解析

求职和我们每个人息息相关,而求职也有门道,好的发挥和技巧或许能让我们以压倒性优势在面试中胜出,可能我们技不如人,但是我们的综合能力如果优秀的话,企业也愿意招这样的人,因此我将自己亲身经历的BAT和其他知名互联网的面试经

2016-08-25 19:43:31 1754

转载 Retrofit

Retrofit  和Java领域的ORM概念类似, ORM把结构化数据转换为Java对象,而Retrofit 把REST API返回的数据转化为Java对象方便操作。同时还封装了网络代码的调用。

2016-08-22 13:10:18 567

转载 Retrofit 2.0:有史以来最大的改进

因为其简单与出色的性能,Retrofit 是安卓上最流行的HTTP Client库之一。不过它的缺点是在Retrofit 1.x中没有直接取消正在进行中任务的方法。如果你想做这件事必须手动杀死,而这并不好实现。Square几年前曾许诺这个功能将在Retrofit 2.0实现,但是几年过去了仍然没有在这个问题上有所更新。直到上周,Retrofit 2.0 才从候选发布阶段变成Beta 1 ,并且公开给所有人。在尝试了之后,我不得不说自己对新的模式和新的功能印象深刻。有许多改进,本文将讨论它们。让我们

2016-08-22 12:19:17 993

转载 Android Studio系列教程三:快捷键

今天是个大日子,Android Studio 1.0 终于发布了正式版, 这对于Android开发者来说简直是喜大普奔的大消息啊,那么就果断来下载使用。

2016-08-21 10:23:09 536

转载 Android Studio系列教程二:基本设置与运行

上面一篇博客,介绍了Studio的优点与1.0 RC的安装与上手体验,没想到google的更新速度这么快,已经出了RC 2版本,主要是修复一些bug。那么今天就带大家预览下Stduio的界面与基本功能。

2016-08-21 10:21:42 544

转载 Android Studio系列教程一:下载与安装

相信大家对Android Studio已经不陌生了,Android Studio是Google于2013 I/O大会针对Android开发推出的新的开发工具,目前很多开源项目都已经在采用,Google的更新速度也很快,明显能感觉到这是Android开发的未来,那么我们还有什么理由不去拥抱未来呢?虽然推出了很久,但是国内貌似普及的程度并不高,鉴于很多朋友求studio的详细教程,那么今天我就手把手教大家下载、安装、使用,Studio之路从这里开始。

2016-08-21 10:19:49 587

转载 Android自定义控件系列

在我从C++转到Android时,就被Android里炫彩斑斓的自定义控件深深折服,想知道如果想利用C++实现这些功能,那是相当困难的。从那时候起,我就想,等我学会了自定义控件,一定要写一篇系列出来,方便后来者能更系统完善地掌握它。今天,这个系列就这样默默地诞生了,希望它能够完成它的使命,在你读完这系列博客时,发现定自义控件也不过如此!如果,顺便能给个评论,加个关注,我将不胜感激——启舰

2016-08-21 10:16:13 788

转载 ThumbnailUtils的使用

特别喜欢系统中一些小而精的工具类,有的时候分析一下别有一番味道。ThumbnailUtils是系统内置的一个生成缩略图的工具类,只有512行代码,网上有很多使用ThumbnailUtils的例子,刚好我个人正在整理Bitmap的相关资料,希望从中也能有所收获。

2016-08-21 10:04:50 2245

转载 Android 4.4 中 WebView 使用注意事项

自Android 4.4起,Android中的WebView开始基于Chromium( 这大概是因为Android部门负责人从Andy Rubin变成了Chrome部门的主管Sundar Pichai了吧)。这个改变,使得WebView的性能大幅度提升,并且对HTML5, CSS3, and JavaScript有了更好的支持。那么,作为一个客户端开发者,我们写代码的时候需要注意哪些呢?1

2016-08-20 13:08:25 888

转载 Android WebView与js交互通信

事出有因,那天我看到手厅的客户端里,在网页webview中点击网络设置后,跳转到了手机的网络设置界面,然后就搜了一下,原来是html中js与androidApp之间的交互。这么说的太费劲了,还是上截图吧,如下:手机没网的时候,会弹出上面这个网页,然后我们通过快捷按钮“网络设置”后,界面跳转到如下这个是通过js和webview共同完成的一个交互效果。首

2016-08-20 12:55:33 3415

转载 Android WebView开发问题汇总

在native与网页相结合开发的过程中,难免会遇到关于WebView一些共通的问题。就我目前开发过程中遇到的问题以及最后得到的优化方案都将在这里列举出来。有些是老生常谈,有些则是个人摸索得出解决方法。

2016-08-20 12:44:49 936

转载 Glide使用教程

Glide,就像 Picasso,可以从多个源去加载和显示图片,同时也兼顾缓存和在做图片处理的时候维持一个低内存消耗。它已经在 Google 官方 APP (如 Google 2015开发者大会的应用程序)中使用了,就和 Picasso 一样受欢迎。在这个系列中,我们要探讨 Glide 和 Picasso 的不同和优势。

2016-08-18 00:23:45 1002

转载 Android各大热补丁方案分析和比较

原文出处:http://blog.zhaiyifan.cn/2015/11/20/HotPatchCompare/ 最近开源界涌现了很多热补丁项目,但从方案上来说,主要包括Dexposed、AndFix、ClassLoader(来源是原QZone,现淘宝的工程师陈钟,在15年年初就已经开始实现)三种。前两个都是阿里巴巴内部的不同团队做的(淘宝和支付宝),后者则来自腾讯的QQ空间团队。开源界往往一

2016-08-17 23:54:15 1086

转载 DL动态加载框架技术

转载自:http://blog.csdn.net/singwhatiwanna/article/details/40283117DL动态加载框架技术文档1. Android apk动态加载机制的研究2. Android apk动态加载机制的研究(二):资源加载和activity生命周期管理3. APK动态加载框架DL解析4. Androi

2016-08-17 21:40:45 493

转载 携程Android App插件化和动态加载实践

携程Android App的插件化和动态加载框架已上线半年,经历了初期的探索和持续的打磨优化,新框架和工程配置经受住了生产实践的考验。本文将详细介绍Android平台插件式开发和动态加载技术的原理和实现细节,回顾携程Android App的架构演化过程,期望我们的经验能帮助到更多的Android工程师。

2016-08-17 21:38:38 721

转载 Android动态加载黑科技 动态创建Activity模式

基本信息Author:kaedeaGitHub:android-dynamical-loading代理Activity模式的限制还记得我们在代理Activity模式里谈到启动插件APK里的Activity的两个难题吗,由于插件里的Activity没在主项目的Manifest里面注册,所以无法经历系统Framework层级的一系列初始化过程,最终导致获得的Ac

2016-08-17 17:00:13 2697

转载 Android动态加载进阶 代理Activity模式

基本信息作者:kaedea项目:android-dynamical-loading技术背景简单模式中,使用ClassLoader加载外部的Dex或Apk文件,可以加载一些本地APP不存在的类,从而执行一些新的代码逻辑。但是使用这种方法却不能直接启动插件里的Activity。启动没有注册的Activity的两个主要问题Activity等组件是需

2016-08-17 16:36:28 1076

转载 Android动态加载入门 简单加载模式

基本信息作者:kaedea项目:android-dynamical-loading初步了解Android动态加载Java程序中,JVM虚拟机是通过类加载器ClassLoader加载.jar文件里面的类的。Android也类似,不过Android用的是Dalvik/ART虚拟机,不是JVM,也不能直接加载.jar文件,而是加载dex文件。先要通过And

2016-08-17 16:10:58 1344

转载 ClassLoader工作机制

基本信息作者:kaedea项目:android-dynamical-loading类加载器ClassLoader早期使用过Eclipse等Java编写的软件的同学可能比较熟悉,Eclipse可以加载许多第三方的插件(或者叫扩展),这就是动态加载。这些插件大多是一些Jar包,而使用插件其实就是动态加载Jar包里的Class进行工作。这其实非常好理解,Jav

2016-08-17 15:38:28 730

转载 Android动态加载技术

基本信息Author:kaedeaGitHub:android-dynamical-loading我们很早开始就在Android项目中采用了动态加载技术,主要目的是为了达到让用户不用重新安装APK就能升级应用的功能(特别是 SDK项目),这样一来不但可以大大提高应用新版本的覆盖率,也减少了服务器对旧版本接口兼容的压力,同时如果也可以快速修复一些线上的BUG。

2016-08-17 15:31:05 1097

转载 加载SD卡中的SO库

基本信息作者:kaedea项目:android-dynamical-loadingJNI与NDKAndroid中JNI的使用其实就包含了动态加载,APP运行时动态加载.so库并通过JNI调用其封装好的方法。后者一般是使用NDK工具从C/C++代码编译而成,运行在Native层,效率会比执行在虚拟机的Java代码高很多,所以Android中经常通过动态加载.s

2016-08-17 15:14:20 2604

转载 Android应用开发性能优化完全分析

其实有点不想写这篇文章的,但是又想写,有些矛盾。不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结、我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只给出啥啥啥不能用,啥啥啥该咋用等,却很少有较为系统的进行真正性能案例分析的,大多数都是嘴上喊喊或者死记住规则而已(当然了,这话我自己听着都有些刺耳,实在不好意思,其实关于性能优化的优质博文网上也

2016-08-13 10:12:11 1142

转载 深入浅出Android App耗电量统计

在Android统计App耗电量比较麻烦,直至Android 4.4,它仍没公开“电量统计”API或文档……额,是的,仅没有公开,并不是没有。平时在手机“设置- 电量”看到的数据就是系统调用内部API的统计结果。

2016-08-13 10:03:50 3627

数据结构各种算法实现(C++模板)

数据结构各种算法实现(C++模板)

2017-08-02

C语言程序设计教程

全书共分11章和5个附录,第1章介绍程序设计语言的基本概念、算法描述和C程序的框架以及上机基本方法;第2章讨论了C语言的数据;第3-6章讨论了C语言的结构化程序设计方法(包括顺序、分支、循环和函数);第7和8章讨论了数据的构造类型(包括数组、字符串、结构体、共用体等);第9章介绍了文件概念和各种操作;第10章讨论用C语言进行音乐和图形设计的基本方法;第11章详细介绍了TC2.0的上机环境,包括实践指导、实验、课程设计等内容。在附录中全面地介绍了C库函数。, 本书将C语言的精华和难点——“指针”分解到各个章节进行讨论,使读者能循序渐进,逐步了解、掌握“指针”的概念和各种应用方法,以达到熟练掌握的目的。, 本教材适用于本科、专科和各级职业技术学校的教学,可作为计算机等级考试教材、计算机爱好者自学用书或软件开发的参考资料。

2017-07-29

Android项目宝典

Android项目宝典

2017-06-16

Android面试宝典5.0

Android面试宝典,包括Java基础和高级面试,Android基础和高级面试,面试技巧,面试分享等内容

2017-06-16

Android面试宝典4.0

Android面试宝典,包括Java基础和高级面试,Android基础和高级面试,面试技巧,面试分享等内容

2017-06-05

Android面试宝典3.0 pfd 下载

Android面试宝典3.0,内容:JavaSE 基础,JavaSE 高级,Android 基础,Android 高级,Android 项目,项目面试常见问题,面试实战记录,BAT 面试题,Android 最新技术

2017-05-15

JavaWeb基础入门

JavaWeb开发入门,目录:JavaScript,XML解析器,JavaWeb开发入门,Http协议,Servlet技术,请求和响应,Cookie和Session,MySQL数据库,用JDBC操作数据库,JDBC之数据库连接池,JDBC之事务,上传下载文件,酷炫的文件上传技术,JavaMail邮件

2017-04-05

JavaWeb开发入门

JavaWeb开发入门,目录:JavaScript,XML解析器,JavaWeb开发入门,Http协议,Servlet技术,请求和响应,Cookie和Session,MySQL数据库,用JDBC操作数据库,JDBC之数据库连接池,JDBC之事务,上传下载文件,酷炫的文件上传技术,JavaMail邮件开发,过滤器Filter,AJAX,JSP入门,JSTL标签库,MVC设计模式,在线支付,Jquery

2017-04-05

Java基础入门 版本5

java基础入门,GitBook本地命令行生成,等线字体版目录:java开发入门,java编程基础,面向对象,常见对象,多线程,集合框架,网络编程,IO流,反射机制,动态代理,注解,java新特性

2017-04-05

Java基础入门 版本4

java基础入门,目录:java开发入门,java编程基础,面向对象,常见对象,多线程,集合框架,网络编程,IO流,反射机制,动态代理,注解,java新特性

2017-04-05

Java基础入门 版本2

java基础入门,目录:java开发入门,java编程基础,面向对象,常见对象,多线程,集合框架,网络编程,IO流,反射机制,动态代理,注解,java新特性

2017-04-04

Android Studio 使用指南

Android Studio 使用指南,Android Studio 提供用于为各类 Android 设备构建应用的最快速的工具。利用世界一流的代码编辑、调试、性能工具、一套灵活的构建系统以及一套即时构建/部署系统,您可以专注于构建独特的高品质应用。

2017-04-03

零基础学Python(第一版)

零基础学Python(第一版) Email:815712739@qq.com GitHub:https://github.com/JackChen1999 GitBook:https://www.gitbook.com/@alleniverson 博客:http://blog.csdn.net/axi295309066 微博:AndroidDeveloper

2017-03-30

Android源码解析

Android源码解析

2017-03-21

Java基础入门 2017-03-21

Java基础入门开发笔记

2017-03-21

JavaWeb开发笔记

JavaWeb开发笔记

2017-03-21

Java和Android源码设计模式 2017-03-21

Java和Android源码设计模式 2017-03-21

2017-03-21

Git和GitHub教程 2017-03-21

Git和GitHub教程 2017-03-21版

2017-03-21

Android-Studio使用教程 2017-03-21

Android-Studio使用教程

2017-03-21

Java设计模式2

Java设计模式,GitBook本地生成版

2017-03-21

Android面试宝典6.0

Android面试宝典,包括Java基础和高级面试,Android基础和高级面试,面试技巧,面试分享,BAT大咖助力,全面升级Android面试,Android高级面试,10大开源框架源码解析...等内容

2018-08-06

IT视频教程

IT视频教程,包括前端开发、后端开发、Android开发、数据结构与算法、数据库、人工智能、C++

2017-11-14

Kotlin 基础教程

内容摘要:Kotlin视频教程、第1章 Kotlin简介、第2章 快速开始:HelloWorld、第3章 Kotlin语言基础、第4章 基本数据类型与类型系统、第5章 集合类、第6章 泛型、第7章 面向对象编程、第8章 函数式编程、第9章 轻量级线程:协程、第10章 Kotlin与Java互操作、第11章 使用Kotlin集成SpringBoot开发Web服务端、第12章 使用Kotlin集成Gradle开发、第13章 使用 Kotlin 和 Anko 的Android 开发、第14章 使用 Kotlin DSL、第15章 Kotlin 文件IO操作与多线程、第16章 使用 Kotlin Native

2017-10-03

Kotlin 极简教程

内容摘要:Kotlin视频教程、第1章 Kotlin简介、第2章 快速开始:HelloWorld、第3章 Kotlin语言基础、第4章 基本数据类型与类型系统、第5章 集合类、第6章 泛型、第7章 面向对象编程、第8章 函数式编程、第9章 轻量级线程:协程、第10章 Kotlin与Java互操作、第11章 使用Kotlin集成SpringBoot开发Web服务端、第12章 使用Kotlin集成Gradle开发、第13章 使用 Kotlin 和 Anko 的Android 开发、第14章 使用 Kotlin DSL、第15章 Kotlin 文件IO操作与多线程、第16章 使用 Kotlin Native

2017-10-03

RxJava入门教程

上个月RxJava2正式版发布了,但目前国内的资料还比较少,以前使用过RxJava1只需要看看更新文档就知道怎么使用了,但还有一些以前没用过RxJava的朋友可能就不知道怎么办了,不知道该看RxJava1还是直接跳到RxJava2。所以写下这个教程, 帮助那些没有用过RxJava的朋友入门。

2017-09-30

RxJava基础入门教程

上个月RxJava2正式版发布了,但目前国内的资料还比较少,以前使用过RxJava1只需要看看更新文档就知道怎么使用了,但还有一些以前没用过RxJava的朋友可能就不知道怎么办了,不知道该看RxJava1还是直接跳到RxJava2。所以写下这个教程, 帮助那些没有用过RxJava的朋友入门。

2017-09-29

RxJava教程

上个月RxJava2正式版发布了,但目前国内的资料还比较少,以前使用过RxJava1只需要看看更新文档就知道怎么使用了,但还有一些以前没用过RxJava的朋友可能就不知道怎么办了,不知道该看RxJava1还是直接跳到RxJava2。所以写下这个教程, 帮助那些没有用过RxJava的朋友入门。

2017-09-29

Python 基础入门教程

Python 基础入门教程,这是小白的Python新手教程。不要再犹豫了,这个教程就是为你准备的!

2017-09-28

零基础学Python

Python是目前最流行的动态脚本语言之一。本书由浅入深,全面、系统地介绍了使用Python进行开发的各种知识和技巧。 本书内容包括Python环境的安装和配置、Python的基本语法、模块和函数、内置数据结构、字符串和文件的处理、正则表达式的使用、异常的捕获和处理、面向对象的语言特性和设计、Python的数据库编程、Tkinter GUI库的使用、HTML应用、XML应用、Django网页开发框架的使用、测试驱动开发模式应用、Python中的进程和线程、Python系统管理、网络编程、Python图像处理、Python语言的扩展和嵌入以及Windows下Python开发等。为了便于读者学习,本书每个章节中都提供了详尽的例子,结合实例讲解各个知识点。 本书适合Python爱好者、大中专院校的学生、社会培训班学生,以及系统管理员、界面开发人员、Web开发人员、网络编程人员等有关人员学习、使用。

2017-09-28

Git和GitHub使用教程

Git和GitHub使用教程:Git简介,安装Git,创建版本库,时光机穿梭,远程仓库,分支管理,标签管理,使用GitHub,自定义Git,从0开始学习GitHub

2017-09-27

Java基础入门教程

java基础入门,GitBook本地命令行生成,等线字体版目录:java开发入门,java编程基础,面向对象,常见对象,多线程,集合框架,网络编程,IO流,反射机制,动态代理,注解,java新特性,内存管理。

2017-09-26

给 Android 开发者的 RxJava 详解

Rx是一个编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流,现在已经支持几乎全部的流行编程语言了

2017-09-26

ReactiveX/RxJava文档中文版

Rx是一个编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流,现在已经支持几乎全部的流行编程语言了

2017-09-25

Glide v4 中文版

Glide v4 文档 中文版,Glide是Android平台上的一个快速高效的图像加载库,专注于平滑滚动。Glide提供了一个简单易用的API,一个性能可扩展的资源解码管道流和自动资源池。

2017-09-25

kotlin-for-android-developers

在这本书中,我会使用Kotlin作为主要的语言来开发一个android应用。方式是通过开发一个应用来学习这门语言,而不是根据传统的结构来学习。我会在感兴趣的点停下来通过与Java1.7对比的方式讲讲Kotlin的一些概念和特性。用这种方法你就能知道它们的不同之处,并且知道哪部分语言特性可以让你提高你的工作效率。

2017-09-24

Kotlin极简教程

本书从Kotlin的HelloWorld开始,生动讲解Kotlin的基础知识和实战案例,分为两大部分:“基础知识”部分包括语言基础、基本数据类型与类型变量、集合类、泛型、面向对象编程、函数式编程、协程等;“实战”部分包括Kotlin与Java互操作、使用Kotlin集成Spring Boot开发WEB服务端、使用Kotlin集成Gradle开发、使用Kotlin和Anko的Android开发、使用Kotlin DSL、Kotlin文件IO操作与多线程、使用Kotlin Native。本书包含了大量精选示例代码和应用案例,为初学者提供了实用指南,也帮助熟练的Java开发者快速切换到Kotlin, Kotlin是JetBrains团队开发的一门现代的、注重工程实用性的静态类型编程语言,JetBrains团队以开发了世界上最好用的IDE而著称。Kotlin于2010年推出,并在2011年开源。Kotlin充分借鉴并汲取了Java、Scala、Groovy、C#、Gosu、JavaScript、Swift等多门杰出语言的优秀特性,语法简单优雅、表现力丰富、抽象扩展方便、代码可重用性好,同时也支持面向对象和函数式编程的多范式编程。Kotlin可以编译成Java字节码运行在JVM平台和Android平台,也可以编译成JavaScript运行在浏览器环境,而且还可以直接编译成机器码的系统级程序,直接运行在嵌入式、iOS、MacOS/Linux/Windows等没有JVM环境的平台。Kotlin源自产业界,它解决了工程实践中程序设计所面临的真实痛点,例如,类型系统可以避免空指针异常的问题。, 我最早是被Kotlin的下面这段代码所吸引:, package com.easy.kotlin, fun compose(f: (B) -> C, g: (A) -> B): (A) -> C {, return { x -> f(g(x)) }, }, fun isOdd(x: Int) = x % 2 != 0, fun length(s: String) = s.length, fun main(args: Array) {, val oddLength = compose(::isOdd, ::length), val strings = listOf('a', 'ab', 'abc'), println(strings.f?ilter(oddLength)), }, 13行。, 这大约是在三年前,当时我在学习Java 8中的函数式编程以及Lambda表达式等新特性。那时,我也对Scala、Groovy、Clojure、Haskell等技术很感兴趣,在伴随着兴趣的学习过程中,我无意中看到了上面那段Kotlin代码,第一眼看到这么优雅的函数式编程风格,尤其是compose函数的定义实现,深深地吸引了我。, Swift使用func关键字声明函数多个c,怪怪的;Groovy、Scala等语言使用def关键字,与函数本义联想不直接;JavaScript使用function关键字又显得死板了些。而Kotlin中的fun则简单优雅地恰到好处,关键还让人自然联想到“乐趣、开心、愉快”这样的意思,使用Kotlin每写一个函数都是充满乐趣的。, 我们不妨来看看同样的逻辑实现,如果使用Java 8来写会如何:, package com.easy.kotlin;, import java.util.ArrayList;, import java.util.List;, interface G {, B apply(A a);, }, interface F {, C apply(B b);, }, interface FG {, C apply(A a);, }, public class ComposeFunInJava {, public static void main(String[] args) {, G g = (s) -> s.length();, F f = (x) -> x % 2 != 0;, FG fg = (x) -> f.apply(g.apply(x));, List strings = new ArrayList();, strings.add('a');, strings.add('ab');, strings.add('abc');, List result = new ArrayList();, for (String s : strings) {, if (fg.apply(s)) {, result.add(s);, }, }, System.out.println(result);, }, }, 36行,差不多是Kotlin的3倍。, 我们知道,Java是一门非常优秀的面向对象语言。但是在函数式编程方面,与其他函数语言相比,还是显得有些笨重与生涩,并且其内在体现出来的思想,依旧是面向对象的思想。, 功能强大的Scala语言,复杂性相对较高,学习成本也高,而且Scala与Java的互操作性没有Kotlin好。所以,如果既想方便、流畅地使用Java强大与完善的生态库,又想使用更加先进的编程语言特性,无疑Kotlin是个非常不错的选择。, 因此,我立马进入了Kotlin的世界!, Kotlin之前一直是默默无闻的,直到今年(2017年)Google IO大会上,Google宣布正式支持Kotlin为Android的官方开发语言,而且从Android Studio 3.0开始,将直接内置集成Kotlin而无需安装任何的插件。另外,在Spring 5.0 M4中也引入了对Kotlin专门的支持。, 在学习和使用Kotlin的过程中,我发现我越来越喜欢Kotlin,它是一门非常优秀、优雅、有趣、流畅实用的语言,绝对值得一试。感谢Kotlin团队!, 本书可以说是我对Kotlin的使用和思考过程的粗浅总结。通过本书的写作,我加深了对Kotlin语言及其编程的理解,深刻体会到了学无止境的含义。写书的过程也是我系统学习与思考Kotlin的过程,如果本书能够对你有所帮助,将不胜欣慰。, 如何阅读本书, 受到Kotlin极简特性的感召,我希望也通过极简的表述,全面介绍Kotlin语言特性以及如何使用Kotlin进行实际项目开发。全书共16章,分为三大部分:第一部分“Kotlin语言基础”包括第1~4章,介绍如何快速开始使用Kotlin,以及Kotlin语法、基本数据类型和类型系统;第二部分“编程进阶”包括第5~10章,介绍Kotlin标准库中的集合类、泛型、面向对象编程特性、函数式编程、协程、与Java的互操作;第三部分“综合实战”包括第11~16章,介绍如何使用Kotlin集成Spring Boot、Spring MVC等框架来开发Web服务端应用,如何使用Kotlin开发Android应用,如何使用Kotlin的DSL代码风格,如何操纵文件IO、正则表达式以及多线程,如何定义Kotlin Native与C语言互操作。, 建议初学者最好按照顺序来阅读本书,Java程序员可以从第5章开始阅读,直接研究Kotlin的特殊点,C语言程序员可以先读第16章再考虑补充前面的基础知识。, 本书章节内容如下。, 第一部分 “Kotlin语言基础”, 第1章是Kotlin语言的简介,带领读者快速学习Kotlin的环境搭建以及常用工具的使用。该章最后还给出一个编程语言学习的小结。通过该章的学习,能够快速进入Kotlin的世界。, 第2章是快速开始Hello World,分别给出了使用命令行REPL、可执行应用程序、Web RESTful、Android、JavaScript等平台环境上的HelloWorld示例。, 第3章介绍Kotlin语言的基础知识,包括Kotlin语言的关键字与标识符等、表达式与流程控制、运算操作符、函数及其扩展等基本内容。, 第4章介绍Kotlin语言的基本类型和类型系统。包括Kotlin的内置基本类型:数字、字符串、布尔、数组等,以及Kotlin中引入的特殊的可空类型。, 第二部分 “编程进阶”, 第5章介绍Kotlin标准库中的集合类:List、Set、Map。通过该章的学习,我们将了解到Kotlin是如何扩展Java集合库的,这使得写代码更加简单容易。, 第6章介绍Kotlin泛型的基本概念、型变以及类型边界等内容。, 第7章介绍Kotlin面向对象编程的特性:类与构造函数、抽象类与接口、继承以及多重继承等基础知识,同时介绍了Kotlin中的注解类、枚举类、数据类、密封类、嵌套类、内部类、匿名内部类等。, 第8章介绍Kotlin函数式编程的相关内容,其中重点介绍了Kotlin中的高阶函数、Lambda表达式、闭包等核心语法,并给出相应的实例说明。还探讨了关于Lambda演算、Y组合子与递归等函数式编程思想的内容。, 第9章介绍Kotlin中的协程,包括协程的创建、执行、取消等操作。在该章的后半部分,主要探讨挂起函数的组合执行、协程上下文与调度器、通道与管道等相关内容。最后,对协程与线程进行了简单比较,简要介绍了Kotlin的协程API库。, 第10章介绍Kotlin与Java的互操作。, 第三部分 “综合实战”, 第11章介绍如何使用Kotlin集成Spring Boot、SpringMVC等框架来开发Web服务端应用,给出了一个完整的开发实例。最后,简单介绍了Spring 5.0中对Kotlin的支持特性。, 第12章介绍使用Kotlin集成Gradle开发的相关内容。, 第13章介绍如何使用Kotlin开发Android应用的具体方法,其中用到了Anko、ButterKnife、Realm等相关框架。, 第14章介绍Kotlin中DSL的相关内容。我们将会看到Kotlin的扩展函数和高阶函数(Lambda表达式)特性,为定义Kotlin DSL提供了极大的支持。使用DSL的代码风格,可以让程序更加直观易懂、简洁优雅。, 第15章介绍Kotlin文件IO操作、正则表达式以及多线程相关的内容。, 第16章简单介绍了Kotlin Native,并给出了Kotlin与C语言互操作的完整实例。, 谁适合阅读本书, 本书适合于所有程序员,不管你是前端开发者、Android/iOS开发者,还是Java开发者、C语言开发者,学习Kotlin都会非常容易,本书将帮助读者快速进入Kotlin世界。, 如果你目前还不是程序员,但想进入编程世界,那么可以尝试从Kotlin开始学习。虽然本书中的部分内容需要一定的Java编程基础,但是Kotlin本身的极简特性能激发你对编程的兴趣。, 代码下载, 几乎在每章末尾处,我都附上了该章示例工程源代码地址。这些源码都在https://github.com/EasyKotlin。读者可以根据需要,自由下载学习。, 致谢, 在本书的写作出版过程中,得到了很多人的帮助和陪伴。, 首先要感谢的是我的妻子和两个可爱的孩子。正是有了你们的陪伴,我的生活才更加有意义。我要感谢我的父母,虽然他们可能不知道我写的东西是什么,但是我在写书过程中,脑海里会经常浮现出他们的笑脸,正是由于他们的辛勤养育,我才能长成今天的我。, 我要衷心地感谢本书的策划编辑吴怡女士。在本书的写作修改过程中,她耐心细致地对稿件进行了详尽审阅和批注,还提出了很多宝贵的修改建议,并不断给予我鼓励,才使我快速完成了这本书。还感谢审稿编辑陈佳媛、曲熠对本书提出的宝贵意见,同时感谢本书出版过程中所有付出辛劳的华章公司工作人员。, 在此,我还要特别感谢我们公司的技术大牛雷卷(陈立兵),非常感谢他能够抽出宝贵时间审阅本书,并给出了内容的勘误,极大地提升了本书的质量,最后,还为本书写了序。真的非常感谢!, 我还要感谢在我的工作学习中认识的所有朋友和同事们,能够认识你们并跟你们一起学习、共事,是我的荣幸!, 请联系我, 虽然在本书写作与修改的过程中,我竭尽全力追求简单正确、清晰流畅地表达内容,但是限于自身水平和有限的时间,仍会有错误与疏漏之处,还望各位读者不吝指正。, 对本书的任何问题、意见或者建议,欢迎通过邮件universsky@163.com与我交流。, 快乐生活,快乐学习,快乐分享,快乐实践出真知。祝大家阅读愉快!, 陈光剑, 2017年8月于杭州, 本书是不可多得的优秀图书,内容翔实,描述简洁,作者对编程语言有深刻的理解,融入了自己多年的开发经验……Kotlin非常新,而且发展也非常快,是一门非常有前景的开发语言,我希望Android和Java程序员都能停下来阅读这本Kotlin的图书,以系统地了解这项技术。, 雷卷 阿里巴巴70后Java程序员, 这是一本精彩有趣的好书。阅读本书,你会再次感受到编程的乐趣。我读过许多编程的书籍,但是这本书对程序设计的深刻见解依然深深触动了我。, 雷影 阿里巴巴技术专家, 光剑的这本书是非常不错的Kotlin教程。书中有大量有趣而实用的代码实例,理论与实践相结合,强烈推荐大家阅读。, 木羽 阿里巴巴高级技术专家, 身处互联网大潮汹涌席卷的时代里,对新知识的无限渴望和孜孜不倦的探求,是一名技术人员对自己的基本要求。陈光剑的这本书是Kotlin语言领域中非常值得借鉴的学习资料,无论是刚入门的技术小白,还是需要进阶的技术痴汉,都可在这本书中找到另一番天地。, 郁磊 有赞测试专家, Kotlin具备简洁的语言、与Java的无缝互译、很棒的IDE支持,且不断进化,如果你刚刚从事或者一直从事Android开发,Kotlin都将成为你很好的起点或新的助手。本书作为对Kotlin语言编程上手和基本使用都是不错的参考资料,必定对大家有所帮助。, 石舟 阿里巴巴测试专家, 在快速发展与创新的今天,不断孕育出各种新语言。Kotlin非常具有代表性,具有简明性和独特的表达能力,同时易于“并发编程”。这本书丰富而全面地介绍了这门优秀的语言。任何对编程语言感兴趣的程序员都不妨阅读一下,相信你定会有收获。, 林文国 二维火资深架构师, 作为JetBrains IDE的忠实用户,也一样喜欢上了它的Kotlin,而这本书绝对是Kotlin难得的教程,内容全面,理论和实战兼得。对我来说,读这本书的收获比自己想象的更多。, 刘鼎亮 挖财资深工程师, 我清楚地记得当初从Eclipse切换到JetBrains的Intelij时带来的效率提升和极致的用户体验,其中细节只有真正用过才能体会到。可以想见,JetBrains出品的Kotlin必然也会带来各种令人惊喜的提升。光剑在许多人还没注意到Kotlin的时候就已经开始动手实践了,并带来了一本语言精练、内容全面、示例丰富的教程,他亲自使用并检验过Kotlin的很多特性,有许多心得和深刻理解,这是一本不可多得的带领程序员领略Kotlin的便捷和高效的指南。, 有山 阿里巴巴技术专家, 这是一本Kotlin入门的好书,内容翔实全面,并且由浅入深,通过大量的案例,引导读者一步步了解Kotlin的方方面面,于开卷者大有裨益。, 张立柱 策道科技CTO

2017-09-20

C/C++设计模式-2

C语言面向对象编程,C语言设计模式,C++设计模式

2017-08-01

C/C++设计模式

C语言面向对象编程,C语言设计模式,C++设计模式

2017-07-31

泡妞与设计模式

泡妞与设计模式

2017-07-28

C语言面向对象编程与设计模式

C语言面向对象编程与设计模式

2017-07-28

空空如也

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

TA关注的人

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