SF
Coding
Coding
注册登录
关注博客
注册登录
主页
关于
RSS
浅析 Linux 进程与线程
然则
2019-07-16
阅读 4 分钟
10.5k
进程与线程是所有的程序员都熟知的概念,简单来说进程是一个执行中的程序,而线程是进程中的一条执行路径。进程是操作系统中基本的抽象概念,本文介绍 Linux 中进程和线程的用法以及原理,包括创建、消亡等。
Redis 的持久化与过期键
然则
2018-12-26
阅读 4 分钟
6.9k
Redis 是使用非常广泛的 Key-Value 内存数据库。因为数据都存放在内存中,所以存取速度非常快。不过,很多情况下我们需要将 Redis 中的数据保存到硬盘中以便做备份。Redis 提供了两种数据持久化方式,分别是 RDB 和 AOP,本文分析这两种方式的使用以及过期键对持久化的影响。
MyBatis 源码解析(二):SqlSession 执行流程
然则
2018-12-19
阅读 6 分钟
5.7k
上一篇文章(MyBatis 源码解析(一):初始化和动态代理)分析了 MyBatis 解析配置文件以及 Mapper 动态代理相关的源码,这一篇接着上一篇探究 SqlSession 的执行流程,另外了解一下 MyBatis 中的缓存。
MyBatis 源码解析(一):初始化和动态代理
然则
2018-12-13
阅读 15 分钟
5.1k
MyBatis 是 Java 开发中非常流行的 ORM 框架,其封装了 JDBC 并且解决了 Java 对象与输入参数和结果集的映射,同时又能够让用户方便地手写 SQL 语句。MyBatis 的行为类似于以下几行代码:
函数栈的实现原理
然则
2018-11-26
阅读 4 分钟
6.5k
编程语言离不开函数,函数是对一段代码的封装,往往实现了某个特定的功能,在程序中可以多次调用这个函数。稍有编程经验的同学都知道,函数是由栈实现的,调用对应入栈,退出对应出栈。在写递归函数的时候,如果递归层次太深会出现栈溢出(StackOverFlow)的错误。
从 AbstractQueuedSynchronizer 理解 ReentrantLock
然则
2018-08-01
阅读 12 分钟
2.9k
Java 并发编程离不开锁, Synchronized 是常用的一种实现加锁的方式,使用比较简单快捷。在 Java 中还有另一种锁,即 Lock 锁。 Lock 是一个接口,提供了超时阻塞、可响应中断以及公平非公平锁等特性,相比于 Synchronized,Lock 功能更强大,可以实现更灵活的加锁方式。
ELF 文件结构及静态链接
然则
2018-06-23
阅读 3 分钟
5.3k
C/C++ 代码在变成可执行文件之前需要经历预处理、编译、汇编以及链接这几个步骤,最终生成的可执行文件包含了能够被系统处理的机器码。可执行文件必须按照特定的格式进行组织才能被系统加载、执行,所以可执行文件是特定于操作系统的。对于 Linux 来说是 ELF(Executable Linkable Format) 格式的文件,Windows 是 PE(Por...
volatile 的用法及原理
然则
2018-05-17
阅读 3 分钟
6.2k
在 Java 并发编程中,volatile 是经常用到的一个关键字,它可以用于保证不同的线程共享一个变量时每次都能获取最新的值。volatile 具有锁的部分功能并且性能比锁更好,所以也被称为轻量级锁。下面具体分析 volatile 的用法及原理,涉及到内存模型、可见性、重排序以及伪共享等方面。
OkHttp 源码解析(三):连接池
然则
2018-03-28
阅读 7 分钟
6.4k
上一篇文章(OkHttp 源码解析(二):建立连接)分析了 OkHttp 建立连接的过程,主要涉及到的几个类包括 StreamAllocation、RealConnection 以及 HttpCodec,其中 RealConnection 封装了底层的 Socket。Socket 建立了 TCP 连接,这是需要消耗时间和资源的,而 OkHttp 则使用连接池来管理这里连接,进行连接的重用,提高...
OkHttp 源码解析(二):建立连接
然则
2018-03-11
阅读 12 分钟
5.4k
上一篇文章(OkHttp源码解析(一):基本流程)介绍了 OkHttp 的基本流程,包括 Request 的创建、Dispatcher 对 Request 的调度以及 Interceptor 的使用。OkHttp 中默认会添加 RetryAndFollowUpInterceptor、BridgeInterceptor、CacheInterceptor、ConnectInterceptor 以及 CallServerInterceptor 这几个拦截器。本文主...
代理模式和装饰者模式
然则
2018-01-25
阅读 3 分钟
8.6k
代理模式和装饰者模式是两种常见的设计模式。代理模式是为其它对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建...
Okio 源码解析(二):超时机制
然则
2018-01-16
阅读 8 分钟
6k
上一篇文章(Okio 源码解析(一):数据读取流程)分析了 Okio 数据读取的流程,从中可以看出 Okio 的便捷与高效。Okio 的另外一个优点是提供了超时机制,并且分为同步超时与异步超时。本文具体分析这两种超时的实现。
Okio 源码解析(一):数据读取流程
然则
2018-01-04
阅读 9 分钟
7.1k
Okio 是 square 开发的一个 Java I/O 库,并且也是 OkHttp 内部使用的一个组件。Okio 封装了 java.io 和 java.nio,并且有多个优点:
OkHttp 源码解析(一):基本流程
然则
2017-12-31
阅读 13 分钟
6.1k
OkHttp 是一款用于 Android 和 Java 的网络请求库,也是目前 Android 中最火的一个网络库。OkHttp 有很多的优点:
Retrofit 源码解析
然则
2016-08-30
阅读 10 分钟
7.7k
Retrofit 是 Square 推出的 HTTP 框架,主要用于 Android 和 Java。Retrofit 将网络请求变成方法的调用,使用起来非常简洁方便。本文先简要介绍一下 Retrofit 的用法,然后具体分析其源码执行的流程。
Java 泛型总结(三):通配符的使用
然则
2016-05-25
阅读 6 分钟
52.2k
简介 前两篇文章介绍了泛型的基本用法、类型擦除以及泛型数组。在泛型的使用中,还有个重要的东西叫通配符,本文介绍通配符的使用。 这个系列的另外两篇文章: Java 泛型总结(一):基本用法与类型擦除 Java 泛型总结(二):泛型与数组 数组的协变 在了解通配符之前,先来了解一下数组。Java 中的数组是协变的,什么意...
Java 泛型总结(二):泛型与数组
然则
2016-05-24
阅读 6 分钟
32.5k
上一篇文章介绍了泛型的基本用法以及类型擦除的问题,现在来看看泛型和数组的关系。数组相比于Java 类库中的容器类是比较特殊的,主要体现在三个方面:
Java 泛型总结(一):基本用法与类型擦除
然则
2016-05-23
阅读 6 分钟
28k
Java 在 1.5 引入了泛型机制,泛型本质是参数化类型,也就是说变量的类型是一个参数,在使用时再指定为具体类型。泛型可以用于类、接口、方法,通过使用泛型可以使代码更简单、安全。然而 Java 中的泛型使用了类型擦除,所以只是伪泛型。这篇文章对泛型的使用以及存在的问题做个总结,主要参考自 《Java 编程思想》。
Android Activity启动模式总结
然则
2016-04-24
阅读 3 分钟
5k
Activity 作为 Android 四大组件之一,几乎是被接触得最多的。Activity 中有个启动模式的概念,分别是 standard、singleTop、singleTask 以及 singleinstance,这篇文章总结一下这四种启动模式的特点。
Android LruCache源码分析
然则
2016-04-23
阅读 4 分钟
5.4k
Android 中常常会用通过网络请求数据,为了节省流量、电量以及时间等等,一般会把得到的数据进行缓存。缓存分为内存缓存和文件缓存。Android 自带的内存缓存是 LRU 机制,也即是最近最少使用算法,对应的类是 LruCache。要说它的原理,一句话概括就是使用了 LinkedHashMap。本文具体分析 LruCache 源码的实现,其实还是...
Android Volley源码解析
然则
2016-04-09
阅读 13 分钟
3.5k
Volley 是非常火的一个网络请求框架,一方面它是由谷歌官方在2013年I/O大会推出的,另一方面大家都说它很优秀。Volley 非常适合去进行数据量不大,但通信频繁的网络操作。Volley 可以传输 String 、Json,还可以很方便的加载图片。它的用法很简单,无非就是获取一个 RequestQueue ,把请求 request 加入其中。网上的介绍...
Android IntentService源码分析
然则
2016-04-06
阅读 3 分钟
4.3k
Service 是 Android 四大组件之一,用于后台运行,但由于 Service 依然运行在主线程,所以是不能直接进行耗时操作的。如果有耗时操作,还是需要放到子线程中,可以手动开启线程,也可以使用 Android 提供的一个非常简便的类 IntentService。这个类的源码还是很简单的,本文分析一下它的实现。
Android Handler的原理
然则
2016-04-05
阅读 7 分钟
12k
在 Android 中,只有主线程才能操作 UI,但是主线程不能进行耗时操作,否则会阻塞线程,产生 ANR 异常,所以常常把耗时操作放到其它子线程进行。如果在子线程中需要更新 UI,一般是通过 Handler 发送消息,主线程接受消息并且进行相应的逻辑处理。除了直接使用 Handler,还可以通过 View 的 post 方法以及 Activity 的 r...
Android ViewStub的使用
然则
2016-03-28
阅读 3 分钟
10.8k
在Android开发中,布局的加载速度会影响APP的性能。如果布局实现的不好,会导致程序非常占内存并且UI运行缓慢。优化布局可以从三个方面着手:
Android AsyncTask源码分析
然则
2016-03-27
阅读 5 分钟
5.5k
Android中只能在主线程中进行UI操作,如果是其它子线程,需要借助异步消息处理机制Handler。除此之外,还有个非常方便的AsyncTask类,这个类内部封装了Handler和线程池。本文先简要介绍AsyncTask的用法,然后分析具体实现。
Android 自定义View---进度条
然则
2016-03-17
阅读 5 分钟
5.3k
简介 Android系统内置的控件有时候无法满足我们的效果,这时候可以自定义View。自定义View可以通过几种方式实现: 继承View重写OnDraw方法 继承ViewGroup实现特殊的Layout 继承特定的View(比如TextView) 继承特定的ViewGroup(比如LinearLayout) 本文实现一个通过继承View实现自定义的加载进度条,效果如下图所示: (gif...
Android View绘制流程总结
然则
2016-03-17
阅读 4 分钟
8.7k
View occupies a rectangular area on the screen and is responsible for drawing and event handling
Java LinkedList源码分析
然则
2016-01-25
阅读 5 分钟
5k
LinkedList是一个常用的集合类,用于顺序存储元素。LinkedList经常和ArrayList一起被提及。大部分人应该都知道ArrayList内部采用数组保存元素,适合用于随机访问比较多的场景,而随机插入、删除等操作因为要移动元素而比较慢。LinkedList内部采用链表的形式存储元素,随机访问比较慢,但是插入、删除元素比较快,一般认...
Java HashMap源码分析
然则
2016-01-08
阅读 7 分钟
5.1k
HashMap是Map接口下比较常用的一个类,我们都知道它存储的是键值对(key-value),可以高效地插入和删除。这篇文章分析一下它内部的实现,由于源码比较长,只看一些重要的。
Java StringBuilder和StringBuffer源码分析
然则
2016-01-06
阅读 4 分钟
18k
StringBuilder与StringBuffer是两个常用的操作字符串的类。大家都知道,StringBuilder是线程不安全的,而StringBuffer是线程安全的。前者是JDK1.5加入的,后者在JDK1.0就有了。下面分析一下它们的内部实现。
1
(current)
2
下一页
1
(current)
下一页