袁平

Hello ! Welcome !

ListView[一]

ListView基本使用

前言 本文将从ListView的基本使用入手, 介绍常见的ListView性能优化问题 ListView采用适配器模式, 关于ListView的优化主要体现在Adapter上; 本文也主要从Adapter入手, 分析常见的优化问题 文章代码基于kotlin 正文 一. 最差版本 ListView的性能问题主要是其通常用于展示大量数据造成的; 我们手指上下滑动的时候伴随着A...

红黑树

红黑树Java实现

前言 红黑树Java实现 正文 一. 概述 红黑树是一颗平衡二叉树, 是为了避免二叉查找树在极端情况下形成单链表而表现出线性级别的时间复杂度; 红黑树的前身是2-3查找树, 为了便于理解红黑树的各种旋转操作, 需要先了解一下2-3查找树 平衡二叉树始终要保证的是所有空链接(指向一棵空树的链接)到根节点的距离相等 二. 2-3查找树 2.1 基本概念 为了保证树的平...

AwesomeAndroid

AwesomeAndroid

前言 记录一些有趣的Android知识, 内容不限~ 正文 子线程更新UI 考虑如下代码: 注: MainActivity的Layout布局只有一个id为main_text的TextView class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceStat...

Note

各类笔记整理, 文章博客收集

前言 记录各类笔记, 包括各类优秀文章收集, 资料收集等! 正文 一. Git 超赞的Git操作讲解 二. Android Android面试

FFmpeg交叉编译与接入Android工程

记录FFmpeg的交叉编译与将动态库接入Android工程

前言 本文主要讲解如何在Linux上编译FFmpeg, 以及将编译出来的动态库(so)接入已有的Android工程 正文 一. FFmpeg交叉编译 本文选用的FFmpeg版本是FFmpeg 4.0, NDK版本是Android-ndk-r15c, 注意在编译FFmpeg时, 对NDK版本有要求, 另外, 笔者最开始选用最新版本的NDK, 总是编译不过, 去查证了一下...

进程与线程

进程与线程总结

前言 操作系统之进程与线程总结 正文 一. 进程 定义: 一个运行中的程序 进程和程序的区别: 一个进程是某种类型的活动, 它有程序, 输入, 输出以及状态, 如果一个程序运行了两遍, 则算作两个进程 进程地址空间见下图: 内核模式和用户模式的实现: 通常是用某个控制寄存器中的一个模式位实现的 进程有三种状态: 运行态, 就绪态, 阻塞态; 其相互之间的切...

Java并发[三]

Java并发编程实战第三部分第四部分总结

前言 讲解锁等高级主题 正文 一. 死锁及其避免 死锁出现的原因通常是出现锁环路造成的, 不管是显示的还是隐式的 通过定义获取锁的顺序来避免死锁: 通过System.identityHashCode(object)来返回一个锁对象的Object.hashCode()的返回值; 通过这个值来定义锁的顺序, 并在整个应用程序中都按照这个...

Java并发[二]

Java并发编程实战第二部分总结

前言 主要讲解了Executor框架 正文 一. Executor框架 线程池: 可以通过Executors中的静态工厂方法之一来创建一个线程池 newFixedThreadPool: 创建一个固定长度的线程池, 每当提交一个任务时就创建一个线程, 直到达到线程池的最大数量, 这是线程池规模将不再变化(如果某个线程发生异常终止, 那么线程池会...

Java并发[一]

Java并发编程实战第一部分总结

前言 Java并发编程实战第一部分总结 正文 一. 基本概念 先检查后执行: 首先观察到某个条件为真(例如文件X不存在), 然后根据这个观察结果采用相应的动作(创建文件X), 但事实上, 在你观察到这个结果以及开始穿件文件之间, 观察结果可能变得无效(另一个线程创建了文件X), 从而导致各种问题(未预期异常, 数据被覆盖, 文件被破坏等) ...

编译器笔记与实验记录

Compiler

序言 编译器,教程: http://mooc.study.163.com/learn/1000002001?tid=1000003000#/learn/content?type=detail&id=1000023001&cid=1000019000 配套网站: http://staff.ustc.edu.cn/~bjhua/courses/compiler/201...