Bing Yan Blog

我干了什么 究竟拿了时间换了什么

Design Patterns (2)

Design patterns -- Singleton

前言 经过上一次的设计模式基础的学习,已经了解了设计模式的意义和基本原则。 从这次学习开始,主要针对20多种具体的设计模式的意义,场景,和具体实现来深入学习。 这些学习的内容,都是根据网络上对于设计模式的书籍、博客等内容进行整理。 正文 什么是单例(Singleton) 一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免...

Design Patterns (1)

Design patterns basic

前言 刚接触编码的时候,相信很多人和我一样,早早就听了设计模式的大名,但是却对这个存在表示不能理解甚至不屑一顾。 “不懂”为什么要把很简单的东西搞得那么复杂。只有随着软件开发经验的增加,也许才能明白我所看到的“复杂”恰恰就是设计模式的精髓所在,之前所理解的“简单”就是一把钥匙开一把锁的模式,目的仅仅是着眼于解决现在的问题,而设计模式的“复杂”就在于它是要构造一个“万能钥匙”,目的是提出一种对...

Producer-Consumer model

KFC vs McDonald's

前言 相信多数人都进过肯德基和麦当劳消费,笔者进店消费的时候发现他们的点单流程和并发模型十分接近。虽然每家店的流程有所差异,但是大概就只有两种模型。在肯德基里,你点单之后点单员会把所点的食物完成封装之后拿来你面前,然后让你结账,有时候有些耗时操作没完成就会留下一个餐台号稍后送来。而在麦当劳的点餐模型大致是,你点完快餐之后要求你立即付款,付完款之后下一位点餐,而取餐的是在旁边等待,另一个服务员...

Java Dead Lock learning

What happened to 'synchronized'

前言 Java 语言通过 synchronized 关键字来保证原子性,这是因为每一个 Object 都有一个隐含的锁,这个也称作监视器对象。在进入 synchronized 之前自动获取此内部锁,而一旦离开此方式,无论是完成或者中断都会自动释放锁。显然这是一个独占锁,每个锁请求之间是互斥的。相对于众多高级锁 (Lock/ReadWriteLock 等),synchronized 的代价都比...

Overload vs Override

Java characteristic - Polymorphism

前言 中文都叫重x,英文都叫Overxx,对于还是初学者的小白,难免会傻傻分不清楚。这里就对两个概念进行比较学习。 通过本次的学习,除了学习重载和重写的概念的区别,还可以同时看看Java三大特性之一的多态(Polymorphism)是如何实现的。 正文 重写(Override) 重写的概念 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。 重写的好处...

Java Generic learning

Generic class & Generic method & Generic interface

前言 Java 泛型(generic)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型...

Java memory management learning (2)

Garbage collection & GC algorithm

前言 通过上一次学习,已经了解了JVM中对于内存的分配。这一次我要学习关于Java中重要的垃圾回收(GC)机制和回收机制中涉及到的分代收集原则,新生代(Young generation)、老年代(Tenured / Old Generation)、永久代(Perm Area)的划分,GC常用的算法(Algorithm),Java中垃圾回收器(Garbage collector)的类型等内容。...

Java memory management learning (1)

Stack & Heap & Method Area

为什么学习java内存管理? 首先我们要了解我们为什么要学习java虚拟机的内存管理,不是java的gc垃圾回收机制都帮我们释放了内存了吗?但是在写程序的过程中却也往往因为不懂内存管理而造成了一些不容易察觉到的内存问题, 并且在内存问题出现的时候,也不能很快的定位并解决。因此,了解并掌握Java的内存管理是我们必须要做的是事,也只有这样才能写出更好的程序,更好地优化程序的性能。 Java...