江湖迈杰的博客

江湖迈杰的博客

江湖迈杰的博客

江湖迈杰的博客

江湖迈杰的博客

理解Spring系列——什么是控制反转(Inversion of Control, IoC)

声明:我已委托「维权骑士」(rightknights.com)为我的文章进行维权行动。 控制反转 —— 软件复用的解决方案。 控制反转(Inversion of Control, IoC)最早由Michael Mattsson在《Object-Oriented Frameworks:A survey of methodological issues》一文中提出。 Wikipedi...

理解Spring系列——前言

声明:我已委托「维权骑士」(rightknights.com)为我的文章进行维权行动。 为什么会有《理解Spring》系列? 在日常开发工作中,笔者天天与Spring打交道,发现Spring系列工程的代码设计愈发有趣,因此专门开辟一个系列博客用于Spring代码设计相关的技术积淀和交流。 在Spring Framework官方介绍的Design Philosophy一节中,Sp...

Docker 101

声明:我已委托「维权骑士」(rightknights.com)为我的文章进行维权行动。 Docker印象 为什么我们需要docker? 作为一款PaaS或者SaaS的产品,Docker利用容器技术帮助开发人员实现应用的快速构建、分发和部署。你可以得到如下好处: 实现不同应用间的运行环境隔离:Docker支持存储、系统、网络等多个方面的隔离,不同应用可以拥有独立的运...

JVM的垃圾回收(三) -- JVM垃圾收集器

声明:我已委托「维权骑士」(rightknights.com)为我的文章进行维权行动。 前言 在之前的两篇博客,我们大致介绍了,常见的垃圾回收算法及JVM中常见的分类回收算法。这些都是从算法和规范上分析Java中的垃圾回收,属于方法论。 在JVM中,垃圾回收的具体实现是由垃圾收集器(Garbage Collector)负责的。 在JVM中,具体实现有Serial、ParNew...

JVM的垃圾回收(二) -- JVM中的分代垃圾回收机制

声明:我已委托「维权骑士」(rightknights.com)为我的文章进行维权行动。 JVM 的内存模型 JVM的内存模型,往往是指Java程序在运行时内存的模型,运行时内存模型,分为线程私有和共享数据区两大类,其中线程私有的数据区包含程序计数器、虚拟机栈、本地方法区,所有线程共享的数据区包含Java堆、方法区。 方法区(Method Area) 方法区的作用与传统...

JVM的垃圾回收(一) -- 常见的垃圾标识和回收算法

声明:我已委托「维权骑士」(rightknights.com)为我的文章进行维权行动。 为什么需要垃圾回收? 在程序运行时,程序为了计算需要,往往会申请一大块的内存空间,将它们分配给相应的变量。 当程序执行结束后(准确的说是相关变量使用完毕,例如,对于函数中的局部变量而言,这个时刻可能是对应的函数调用结束),相关的内存不再使用,需要对这块区域进行垃圾回收。 进行垃圾回收的好处是可...

代理模式

声明:我已委托「维权骑士」(rightknights.com)为我的文章进行维权行动。 代理模式 代理模式是设计模式中一种常见的设计模式,我们往往通过代理模式可以拦截目标方法的执行,进行自己想要的业务需求,例如日志拦截,权限校验等工作。 代理模式的实现方式如下: 在代理模式中,我们将类分为以下三类角色 抽象对象Subject,代理对象Proxy,以及真实对象RealSu...

二叉树的遍历算法

声明:我已委托「维权骑士」(rightknights.com)为我的文章进行维权行动。 二叉树的遍历算法 二叉树遍历算法是面试过程中的常见考题,面试官常常要求应聘者写成树的三种遍历(前序、中序、后序)算法,当然要完成这个任务非常简单,每一种遍历方式的代码不超过10行。假设树中节点的结构如下 class TreeNode{ int val; TreeNode left,r...

ExoPlayer探营

1.什么是ExoPlayer ExoPlayer是谷歌官方主导基于低层媒体API(如MediaCodec,AudioTrack,MediaDrm)开发的Android媒体播放库,整体上的特点如下: 高度的可定制性,开发者可以根据实际需求对其进行修改 提供一系列MediaPlayer不提供的特性,例如,支持动态的自适应流HTTP(DASH) 和平滑流 独立于Android系统...

小试RxJava原理

RxJava的Hello World 在开始介绍RxJava的源码之前,我们先来写一个RxJava的Hello world吧! Observable .create(new Observable.OnSubscribe<Integer>() { public void call(Subscriber<? super Integer...