Sukai's Blog 
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
  •   
  •   
深入理解Kotlin协程(二)——复合协程

深入理解Kotlin协程(二)——复合协程

本篇文章我们将基于简单协程实现几种复合协程。 序列生成器仿Python的Generator实现Python中的Generator可以在函数中调用yield将当前函数挂起并返回yield的参数,效果如下: 12345678910111213141516171819val nums: (Int) -> Generator<Int> = generator { start:

2021-02-05
Kotlin
Coroutines
深入理解Kotlin协程(一)——基本概念与原理

深入理解Kotlin协程(一)——基本概念与原理

协程的基本概念在当前主流的计算机操作系统中,进程和线程是我们比较熟悉的东西。在早期的计算机系统中,并没有线程的概念,而进程是操作系统进行资源分配和调度的基本单位,也是程序执行的最小单位,每个进程都有其单独的内存空间,使得进程之间的内存相互独立。随着计算机的发展,越来越多的场景需要多任务并发执行,而进程的创建、切换、销毁开销大,且进程之间内存无法共享等问题无法满足复杂的场景需求,这些问题促使了线程的

2021-02-01
Kotlin
Coroutines
计算机网络知识总结

计算机网络知识总结

图片源自本人两年前校招时写的计算机网络脑图

2021-01-15
Computer Science
Network

刷题笔记

滑动窗口滑动窗口可以解决子结构中求最值问题,例如: 3. 无重复字符的最长子串 76.最小覆盖子串 643. 子数组最大平均数 I 992. K 个不同整数的子数组 解决滑动窗口问题包含几个步骤: 确定窗口大小 移动右指针使得窗口最大,更新结果 移动左指针缩小窗口,使得窗口保持最大,更新结果 要理解滑动窗口不难,难点在于如何正确的把所有细节都写出来,以 无重复字符的最长子串为例: 给定一

2020-12-22
Algorithm
BinarySearch

Android Studio金丝雀版更新 原生View Binding要来了?

前言今天Android Studio推特放出了Android Studio 3.6 Canary 11的更新日志,终于是在IDE层面支持了View Binding。 View Binding大家肯定都用过,常用的有Data Binding、ButterKnife和Kotlinx,一般来说Java项目中ButterKnife用的多,kotlin项目的话kotlinx synthetic用起来更快、更

2019-09-12
Android Basics
View Binding

Android性能优化之OOM

前言OOM全称为Out Of Memory,内存溢出,指的是请求的内存超过了剩余内存的容量。在Android中,App中已经使用的内存加上新申请的内存大于Android系统分配给App进程的最大内存时,就会发生OOM,导致程序直接崩溃,使得我们的App的用户体验非常糟糕。因此如何避免OOM就成了Android内存优化中比较关键的一点, 这篇文章就是关于内存优化中如何避免OOM的总结性概要文章。 5

2019-03-20
Performance Optimization
OOM

Android性能优化之Bitmap高效加载

为什么Bitmap需要高效加载?现在的高清大图,动辄就要好几M,而Android对单个应用锁施加的内存限制,只有小十几M,如16M,这导致加载Bitmap的时候很容易出现内存溢出。如下异常信息,便是在开发中经常需要的: java.lang.OutofMemoryError:bitmap size exceeds VM budget 为了解决这个问题,就出现了Bitmap的高效加载策略。假设通

2019-03-06
Performance Optimization
Bitmap

LinkedHashMap原理

概述之前文章讲了HashMap。HashMap是一种非常常见、非常有用的集合,但在多线程情况下使用不当会有线程安全问题。 大多数情况下,只要不涉及线程安全问题,Map基本都可以使用HashMap,不过HashMap有一个问题,就是迭代HashMap的顺序并不是HashMap放置的顺序,也就是无序。HashMap的这一缺点往往会带来困扰,因为有些场景,我们期待一个有序的Map。 这个时候,Linke

2019-02-16
Data Structure
LinkedHashMap

Java中的线程池

前言Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,

2019-02-10
Java Basics
ThreadPool

HashMap详解

数据结构JDK1.7之前HashMap采用的数据结构为数组+链表,使用这种结构是为了解决哈希冲突(拉链法)。JDK1.8之后还引入了红黑树,当链表长度达到一个阈值时该链表就会转化为红黑树。 数组元素和链表结点JDK1.7之前为Entry,JDK1.8为Node,两者只是名称不同。 Entry(或Node)中存放着键值对、键的哈希值,并且指向下一个结点。 123456789101112131415

2019-02-04
Data Structure
HashMap
1234

搜索

Powered by Hexo , Theme Fluid