摘要:
周五在做一个推送需求的时候出现了一个问题。需求大致是讲一个Im通信中的消息通信的实体类存入缓存的时候,但在Redis里面多了几个字段,导致之后序列化出来的时候,属性增多无法转化为实体,代码报错。 先说解决办法由于引用的是jar包,无法修改实体类而且用的是一套相对成熟的sdk所以不推荐改动源码。使用J 阅读全文
摘要:
异常处理的两大组成要素是抛出异常和捕获异常。这两大要素共同实现程序控制流的非正常转移。 抛出异常可分为显式和隐式两种。显式抛异常的主体是应用程序,它指的是在程序中使用“throw”关键字,手动将异常实例抛出。隐式抛异常的主体则是 Java 虚拟机,它指的是 Java 虚拟机在执行过程中,碰到无法继续 阅读全文
摘要:
在 Java 程序里,如果同一个类中出现多个名字相同,并且参数类型相同的方法,那么它无法通过编译。也就是说,在正常情况下,如果我们想要在同一个类中定义名字相同的方法,那么它们的参数类型必须不同。这些方法之间的关系,我们称之为重载。 这个限制可以通过字节码工具绕开。也就是说,在编译完成之后,我们可以再 阅读全文
摘要:
Java 语言的类型可以分为两大类:基本类型(primitive types)和引用类型(reference types),Java 的基本类型,它们是由 Java 虚拟机预先定义好的。 至于另一大类引用类型,Java 将其细分为四种:类、接口、数组类和泛型参数。由于泛型参数会在编译过程中被擦除,因 阅读全文
摘要:
在 Smalltalk(真正的面向对象设计的早一代)中,所有的值都是对象。因此,许多人认为它是一门纯粹的面向对象语言。Java 则不同,它引进了八个基本类型,来支持数值计算。Java 这么做的原因主要是工程上的考虑,因为使用基本类型能够在执行效率以及内存使用两方面提升软件性能。 Java 的基本类型 阅读全文
摘要:
Netty 是一个高性能网络应用框架,应用非常普遍,目前在 Java 领域里,Netty 基本上成为网络程序的标配了。Netty 框架功能丰富,也非常复杂,今天我们主要分析 Netty 框架中的线程模型,而线程模型直接影响着网络程序的性能。 网络编程性能的瓶颈 BIO 模型里,所有 read() 操 阅读全文
摘要:
Guava 是 Google 开源的 Java 类库,提供了一个工具类 RateLimiter。场景:假设我们有一个线程池,它每秒只能处理两个任务,如果提交的任务过快,可能导致系统不稳定,这个时候就需要用到限流。 //限流器流速:2个请求/秒 RateLimiter limiter = RateLi 阅读全文
摘要:
Java 里 String 这个类在实现 replace() 方法的时候,并没有更改原字符串里面 value[]数组的内容,而是创建了一个新字符串,这种方法在解决不可变对象的修改问题时经常用到。如果你深入地思考这个方法,你会发现它本质上是一种 Copy-on-Write 方法。所谓 Copy-on- 阅读全文
摘要:
解决并发问题,其实最简单的办法就是让共享变量只有读操作,而没有写操作。这个办法如此重要,以至于被上升到了一种解决并发问题的设计模式:不变性(Immutability)模式。所谓不变性,简单来讲,就是对象一旦被创建之后,状态就不再发生变化。 不再变化第一个想到的就是final,初始化之后就不可变。 将 阅读全文
摘要:
首先还是看多线程多进程在硬件上意味着什么,对于多CPU情况,多线程是如何进行调解的。复习下基本的概念 进程:是操作系统(OS)[windows,Linux,Mac]进行资源(CPU、内存、磁盘、IO、带宽等)分配的最小单位——>QQ,微信,网易云等; 线程:是CPU调度和分配的基本单位。一个进程可由 阅读全文