自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (2)
  • 收藏
  • 关注

原创 音视频开发之旅——实现录音器、音频格式转换器和播放器(PCM文件转换为WAV文件、使用LAME编码MP3文件)(Android)

本文主要讲解的是实现和,在实现过程中需要把文件转换为文件,同时需要使用上一篇文章出来的库编码文件。本文基于和。

2024-05-03 01:23:58 1119

原创 音视频开发之旅——音频基础概念、交叉编译原理和实践(LAME的交叉编译)(iOS)

音视频开发之旅——音频基础概念、交叉编译原理和实践(LAME的交叉编译)(iOS)——本文主要讲解的是音频基础概念、交叉编译原理和实践(LAME的交叉编译),是基于iOS平台。

2024-03-19 03:38:39 1193

原创 阿俊带你用Kotlin刷算法(五)

阿俊带你用Kotlin刷算法(五)——本系列通过Java和Kotlin这两种语言来解决力扣上面的算法题,由于本人算法菜鸟一枚,可能部分题目并不是最优题解,希望能和各位大神共同讨论~

2024-03-07 03:49:48 798

原创 音视频开发之旅——音频基础概念、交叉编译原理和实践(LAME的交叉编译)(Android)

音视频开发之旅——本文主要讲解的是音频基础概念、交叉编译原理和实践(LAME的交叉编译),是基于Android平台。

2024-03-05 03:18:02 1167

原创 阿俊带你用Kotlin刷算法(四)

本系列通过Java和Kotlin这两种语言来解决力扣上面的算法题,由于本人算法菜鸟一枚,可能部分题目并不是最优题解,希望能和各位大神共同讨论~阿俊带你用Kotlin刷算法(一)阿俊带你用Kotlin刷算法(二)阿俊带你用Kotlin刷算法(三)阿俊带你用Kotlin刷算法(四)项目的GitHub:Algorithm盛最多水的容器(Container With Most Water)难度:中等链接:Container With Most Water代码Java/** * Created

2021-07-21 03:24:26 402 2

原创 阿俊带你用Kotlin刷算法(三)

本系列通过Java和Kotlin这两种语言来解决力扣上面的算法题,由于本人算法菜鸟一枚,可能部分题目并不是最优题解,希望能和各位大神共同讨论~阿俊带你用Kotlin刷算法(一)阿俊带你用Kotlin刷算法(二)阿俊带你用Kotlin刷算法(三)项目的GitHub:Algorithm整数反转(Reverse Integer)难度:简单链接:Reverse Integer代码Java/** * Created by TanJiaJun on 2021/6/15. * 7. 整数反转(Re

2021-06-27 09:23:53 229 1

原创 阿俊带你用Kotlin刷算法(二)

本系列通过Java和Kotlin这两种语言来解决力扣上面的算法题,由于本人算法菜鸟一枚,可能部分题目并不是最优题解,希望能和各位大神共同讨论~阿俊带你用Kotlin刷算法(一)阿俊带你用Kotlin刷算法(二)项目的GitHub:Algorithm寻找两个正序数组的中位数(Median of Two Sorted Arrays)难度:困难链接:Median of Two Sorted Arrays代码Java/** * Created by TanJiaJun on 2021/6/9.

2021-06-19 21:51:42 225 3

原创 阿俊带你用Kotlin刷算法(一)

本系列通过Java和Kotlin这两种语言来解决力扣上面的算法题,由于本人算法菜鸟一枚,可能部分题目并不是最优题解,希望能和各位大神共同讨论~项目的GitHub:Algorithm两数之和(Two Sum)难度:简单链接:Two Sum代码Javaimport java.util.Arrays;import java.util.HashMap;import java.util.Map;/** * Created by TanJiaJun on 2021/6/4. * 1. 两数之和

2021-06-15 07:47:30 2258 5

原创 一个可以方便调试响应数据的控件(Android版本)

该控件可以方便调试响应数据,如下图所示:控件的样式参考以下这个网站:JSON在线解析解析及格式化验证项目GitHub:JSONRecyclerView概述控件是以RecyclerView为基础,文本会呈现相应的颜色以反映对应的类型,如果值的类型为JSONObject或者JSONArray,该数据对应的视图可以展开或者收缩,除此之外,文本的大小或者颜色都可以自定义更改。文本分为以下七种类型:普通文本:冒号、花括号、中括号、逗号、Object{…}和Array[]。key类型的文本Stri

2021-05-31 00:16:00 252

原创 计算机网络总结

本文章讲解的内容是计算机网络总结。基本术语节点(node):在电信网络中,一个节点是一个连接点,表示一个再分发点(redistribution point)或一个通信端点(一些终端设备),节点的定义依赖于网络和协议层,一个物理网络节点是一个连接到网络的有源电子设备,能够通过通信通道发送、接收或转发信息,要注意的是,无源分发点(例如:配线架或接插板)不是节点,在网络理论或图论中,术语节点表示网络拓扑中,线相交或分支的点。链路(link):从一个节点到另一个节点的一段物理线路,要注意的是,中间不能有其他

2021-03-08 03:22:22 1550

原创 深入了解Android的View工作原理

本文章讲解的内容是深入了解Android的View工作原理,建议对着示例项目阅读文章,示例项目链接如下:ViewDemo本文章分析的相关的源码基于Android SDK 29(Android 10.0,即Android Q)。Android的窗口结构先从Activity的startActivity系列方法开始说起,我选了一个常用的**startActivitiy(Intent intent)**方法,源码如下所示:// Activity.java@Overridepublic void sta

2020-10-09 03:32:02 226

原创 深入了解Android消息机制和源码分析(Java层和Native层)

本文章讲解的内容是深入了解Android消息机制和源码分析(Java层和Native层),建议对着示例项目阅读文章,示例项目链接如下:HandlerDemo本文章分析的相关的源码基于Android SDK 29(Android 10.0,即Android Q)。概述Android消息机制涉及到以下四个类:Message:消息,它分为硬件产生的消息(例如:触摸、点击)和软件产生的消息。MessageQueue:消息队列,它的作用是向消息池投递消息和从消息池中取出消息。Looper:用于为线程运

2020-09-25 04:11:43 651

原创 Java线程池源码分析

本文章讲解的内容是Java线程池。概述线程是操作系统的内核资源,是CPU调度的最小单位,所有的应用程序都运行在线程上,它是我们实现并发和异步的基础。在Java的API中,Thread是实现线程的基础类,每创建一个Thread对象,操作系统内核就会启动一个线程,在Thread的源码中,它所有的关键方法都是本地方法(Native Method),内部实现是大量的JNI的调用,因为线程的实现必须由操作系统提供直接支持。在Linux操作系统中,每一个Java thread对应一个native thread,它们

2020-09-09 04:13:31 128

原创 Java线程基础

本文章讲解的内容是Java线程,建议对着示例项目阅读文章,示例项目链接如下:ThreadDemo概述在说线程的概念之前,先说下进程的概念,进程是代码在数据集合上的一次运行活动,它是系统进行资源分配和调度的基本单位。一个线程至少有一个线程,线程是进程中的实体,线程本身是不会独立存在的,进程中的多个线程可以共享进程的资源(例如:内存地址、文件I/O等),也可以独立调度。有以下三种方式实现线程:使用内核线程实现使用用户线程实现使用用户线程和轻量级线程混合实现Java语言统一处理了不同硬件和操作

2020-08-31 02:33:08 151 1

原创 深入了解volatile关键字

本文章讲解的内容是深入了解volatile关键字,建议对着示例项目阅读文章,示例项目链接如下:VolatileDemo查看汇编代码的hsdis-amd64.dylib文件链接如下:hsdis-amd64.dylib汇编代码链接如下:双重检查锁定(DCL)单例模式使用关键字volatile修饰变量的汇编代码:SingletonAssemblyCodeWithVolatile.log双重检查锁定(DCL)单例模式不使用关键字volatile修饰变量的汇编代码:SingletonAssembl

2020-08-24 03:00:37 190

原创 读书笔记——Java内存模型

本文章讲解的内容是Java内存模型。在讲解Java内存模型之前,我先聊下硬件的效率和一致性。硬件的效率和一致性我们先了解下物理计算机中的并发问题,物理计算机遇到并发问题与虚拟机中的情况有不少相似之处,物理计算机对并发的处理方案对于虚拟机的实现也有相当大的参考意义。“让计算机并发执行若干个运算任务”与“更充分地利用计算机处理器的效能”之间的因果关系,看起来顺理成章,实际上它们之间的关系并没有想象中的那么简单,其中一个重要的复杂性来源是绝大多数的运算任务都不可能只靠处理器“计算”就能完成,处理器至少要与

2020-08-17 03:09:23 144

原创 Java集合框架——Android中的HashMap源码分析

本文章讲解的内容是Android中的HashMap源码分析。本文章分析的HashMap源码是基于Android SDK(版本为28)。要注意的是,Android SDK 28和JDK 1.8对HashMap的底层实现进行了优化,例如:引入了红黑树的数据结构和扩容的优化等。概述HashMap的UML类图如下所示:HashMap是基于哈希表实现的Map接口。此实现提供了所有可选的映射操作,并且允许空键和空值,要注意的是,最多允许一条记录的键是空,允许多条记录的值是空。它不保证映射的顺序随着时间保持不

2020-08-13 03:22:53 196

原创 读书笔记——Java虚拟机类加载机制

本文章讲解的内容是Java虚拟机类加载机制。概述Java虚拟机把描述类的的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被Java虚拟机直接使用的Java类型,这就是Java虚拟机的类加载机制。与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提高高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特

2020-08-01 18:56:01 192

原创 Android Studio自定义模板——一键生成框架模板代码

本文章讲解的内容是Android Studio自定义模板——一键生成框架模板代码。框架GitHub地址:Dagger2版本:Dagger2Koin版本:Koin为了快速使用Android通用框架开发项目,我配置了一套属于它的模板,可以一键生成框架模板代码。模板GitHub地址:AndroidGenericFrameworkTemplate使用方法将模板下载回来,目录如下图所示:TanJiaJunActivityForDagger2:用于生成Dagger2版本的Activity对应的xml

2020-07-26 02:43:53 1620

原创 读书笔记——Java虚拟机垃圾收集器与内存分配策略

本文章讲解的内容是Java虚拟机垃圾收集器与内存分配策略。概述说起垃圾收集(Garbage Collection),也就是GC,大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期时,人们就在思考GC需要完成的三件事情:哪些内存需要回收?什么时候回收?如何回收?经过本个多世纪的发展,目前内存动态分配和内存回收技术已经相当成熟,一切看起来都进入了自动化时代,那为

2020-07-19 02:48:40 158

原创 Java集合框架——Android中的ArrayList源码分析

本文章讲解的内容是ArrayList的源码分析。本文章分析的ArrayList源码是基于Android SDK(版本为28)。概述ArrayList是一个大小可以调整的动态数组,它可以允许所有元素(包括null),它提供了增加、删除、修改、查找方法。ArrayList的数据结构是数组,它会占据一块连续的内存空间,容量是数组的长度(length),增加、删除、查找的时间复杂度是O(n),根据索引访问元素的时间复杂度是O(1)。ArrayList是线程不安全的,未实现同步,如果多个线程同时访问Arra

2020-07-13 03:57:45 295

原创 Android的内存管理

本文章讲解的内容是Android的内存管理。概览Android Runtime(ART)虚拟机和Dalvik虚拟机都使用分页(Paging)和内存映射(Memory-mapped file)来管理内存。这意味着应用修改的任何内存,无论修改的方式是分配新对象还是轻触内存映射的页面,都会一直驻留在RAM中,并且无法换出。要从应用中释放内存,只能释放应用保留的对象引用,使内存可供垃圾回收器回收。这种情况有一个例外:对于任何未被修改的内存映射文件(例如:代码),如果系统想要在其他位置使用其内存,可将其从RAM中

2020-07-07 03:41:34 717

原创 读书笔记——Java虚拟机自动内存管理机制

本文章讲解的内容是Java虚拟机自动内存管理机制。概述对于从事C、C++程序开发的开发人员来说,在内存管理领域,他们既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任。对于Java程序员来说,在Java虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题,这看起来一切美好,不过正是因为Java程序员把内存控制的权力交给Java虚拟机,一旦出现内存泄漏和内存溢出的问题的时候,如果不了解Java虚拟机是怎样使

2020-06-27 04:41:19 166

原创 Kotlin系列——在Android中使用协程以及协程源码分析

本篇文章讲解的内容是在Android中使用协程。在说协程之前,我先说下线程和线程池:线程是操作系统的内核资源,是CPU调度的最小单位,所有的应用程序都运行在线程上,它是我们实现并发和异步的基础。在Java的API中,Thread是实现线程的基础类,每创建一个Thread对象,操作系统内核就会启动一个线程,在Thread的源码中,它的内部实现是大量的JNI调用,因为线程的实现必须由操作系统提供直接支持,在Linux操作系统中,每一个Java thread对应一个native thread,它们是一一对应的

2020-06-18 03:59:50 786

原创 MVC、MVP、MVVM以及使用MVVM搭建GitHub客户端

本篇文章讲解的内容是MVC、MVP、MVVM以及使用MVVM搭建GitHub客户端,以下是框架的GitHub地址:Dagger2版本:Dagger2Koin版本:Koin在讲解之前,我想先聊一下MVC、MVP和MVVM相关的概念。MVCMVC(Model-View-Controller)的概念最早源自于Erich Gamma、Richard Helm、Raplph Johnson、John Vlissides这四位大牛在讨论设计模式中的观察者模式时的想法;Trygve Reenskaug在1979

2020-05-29 03:07:04 559

原创 Kotlin系列——泛型型变

本文章讲解的内容是泛型的型变,我写一个扩展Boolean的示例代码来应用我要奖的内容,示例代码如下:BooleanExtensionDemo先看下以下例子,代码如下:List<String> strings = new ArrayList<String>();// Java中禁止这样的操作List<Object> objects = strings;...

2020-01-31 02:02:55 3273

原创 Kotlin系列——封装MMKV及其相关Kotlin特性

这篇文章主要是对MMKV进行封装,由此了解一些Kotlin特性,建议对着示例代码阅读文章,示例代码如下:MMKVDemoMMKV简单介绍其实在MMKV的Wiki中已经有很详细的介绍了,地址如下:MMKV for Android官方WikiMMKV是基于mmap内存映射的key-value组件,底层序列化/反序列化使用protobuf实现,性能高,稳定性强,而且Android这边还支持多进...

2020-01-28 17:31:44 1651

原创 Android Jetpack系列——LiveData源码分析

本文章已授权微信公众号郭霖(guolin_blog)转载。本文章主要是对LiveData进行源码分析,建议对着示例代码阅读文章,示例代码如下:LiveDataDemo本文章使用的是Android SDK 29的源码分析。定义LiveData是一种可观察的数据存储器类,它具有生命周期感知能力,遵循应用组件(例如:Activity、Fragment、Service(可以使用Lifecycle...

2020-01-28 17:29:11 490

原创 Android Jetpack系列——ViewModel源码分析

本文章已授权微信公众号郭霖(guolin_blog)转载。本文章主要是对ViewModel进行源码分析,建议对着示例代码阅读文章,示例代码如下:ViewModelDemo本文章使用的是Android SDK 29的源码分析。定义Android框架管理UI控制器的生命周期(例如:Activity和Fragment),Framework可能决定销毁或者重新创建一个UI控制器,以响应某些用户操...

2020-01-28 17:25:14 445

原创 RxJava2源码分析——FlatMap和ConcatMap及其相关并发编程分析

本文章主要是对RxJava2的FlatMap和ConcatMap这两个操作符进行源码分析,并且对其相关并发编程进行分析,在阅读之前,可以先阅读以下文章:RxJava2源码分析——订阅RxJava2源码分析——线程切换RxJava2源码分析——Map操作符本文章用的RxJava和RxAndroid版本如下:implementation 'io.reactivex.rxjava2:rxjav...

2020-01-28 17:10:36 616

原创 RxJava2源码分析——Map操作符

本文章主要是对RxJava2的Map操作符进行源码分析,在阅读之前,可以先阅读以下文章:RxJava2源码分析——订阅RxJava2源码分析——线程切换本文章用的RxJava和RxAndroid版本如下:implementation 'io.reactivex.rxjava2:rxjava:2.2.6'implementation 'io.reactivex.rxjava2:rxandr...

2020-01-28 17:03:14 187

原创 RxJava2源码分析——线程切换

本文章主要是对RxJava2的线程切换流程进行源码分析,在阅读之前,可以先阅读以下文章:RxJava2源码分析——订阅本文章用的RxJava和RxAndroid版本如下:implementation 'io.reactivex.rxjava2:rxjava:2.2.6'implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'我们先写段示...

2020-01-28 17:02:12 209

原创 RxJava2源码分析——订阅

本文章主要是对RxJava2的订阅流程进行源码分析,先说下我用的RxJava和RxAndroid版本,版本如下:implementation 'io.reactivex.rxjava2:rxjava:2.2.6'implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'我们先写段示例代码,为了方便理解,我就不用上Lambda和链式调用了,代码...

2020-01-28 16:58:55 140

原创 Kotlin系列——带弧形的进度条

本文章已授权微信公众号郭霖(guolin_blog)转载。这是一个带弧形的进度条,其实这个控件很久之前已经实现了,但是我想用Kotlin去重写优化一遍,并且对此铺开来讲解。项目GitHub:CircularArcProgressView效果图属性NameFormatDescriptioncapv_background_colorcolor背景颜色capv...

2020-01-28 16:55:18 344

原创 Kotlin系列——DSL

本文章已授权微信公众号郭霖(guolin_blog)转载。什么是DSL?DSL是domin specific language的缩写,中文名叫做领域特定语言,指的是专注于某个应用程序领域的计算机语言,比如显示网页的HTML、用于数据库处理的SQL、用于检索或者替换文本的正则表达式,它们都是DSL。与DSL相对的就是GPL,GPL是General Purpose Language的简称,即通用编...

2020-01-28 16:49:10 3277 1

原创 Android通用框架(Kotlin-MVVM)

项目技术要点:1. 使用Kotlin编写(协程、DSL)。2. 使用MVVM架构。3. 使用Android Jetpack组件:DataBinding、LiveData、ViewModel、LifeCycle、Navigation。4. 使用OkHttp、Retrofit做网络请求。5. 使用Glide加载图片。6. 使用ViewPager2。7. 使用Snackbar...

2020-01-28 16:45:33 2488

java循环嵌套

java虚幻嵌套,java基础部分,初学者可以下回来看看!

2014-09-04

广州腾科java基础

广州腾科java基础,里面有很多java基础的东西,初学者可以看看!

2014-09-04

空空如也

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

TA关注的人

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