- 博客(17)
- 收藏
- 关注

原创 java设计模式——单例模式运用指南
目录1.单例模式定义2.具体创建3.优化 4.其他场景1.单例模式定义 确保一个类只有一个实例,并提供全局访问点2.具体创建根据定义,我们可以想到创建一个静态私有实例,一个私有构造器,和一个公有的静态方法就可以简单的实现这个模式。具体代码如下:这种方法的优点:在多线程环境下,也能保证实例唯一。缺点:同步会降低性能,同步一个方法可能会降低100倍性能,不能用在频繁运行的地方。3.优化 3.1双重检查加锁...
2021-01-26 22:33:58
155
原创 从0开始学架构——架构解释
架构是顶层设计;框架是面向编程或配置的半成品;组件是从技术维度上的复用;模块是从业务维度上职责的划分;系统是相互协同可运行的实体。参考文档:《从零开始学架构》——李运华。
2023-10-07 00:06:18
288
原创 服务降级实战指南
大促或者业务高峰时,为了保证核心服务的SLA(Service Level Agrement服务等级协议),往往需要停掉一些不太重要的服务,例如商品评论、论坛或者粉丝积分等。另外一种场景就是某些服务因为某种原因不可用,但是流程不能直接失败,需要本地Mock服务端实现,做流程放通。上述两种场景都是服务降级。服务降级主要包括容错降级和屏蔽降级两种。屏蔽降级对非核心服务做强制降级,不发起远程服务调用,直接返回空、异常或者执行特定的本地逻辑,减少自身对公共资源的消费,把资源释放出来供核心服务使用。1
2021-06-09 17:00:34
998
2
转载 Intellij IDEA远程debug教程实战和原理
远程调试,特别是当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常有用。 JAVA 支持调试功能,本身提供了一个简单的调试工具JDB,支持设置断点及线程级的调试同时,不同的JVM通过接口的协议联系,本地的Java文件在远程JVM建立联系和通信。此篇是Intellij IDEA远程调试的教程汇总和原理解释,知其然而又知其所以然。 ...
2021-03-14 21:36:50
1132
原创 java动态代理之CGLib代理运用指南
1.1 CGLiib代理CGLib代理主要涉及spring-core-4.xjar包中的三个类:Enhancer,MethodInterceptor和MethodProxy。其中MethodInterceptor是spring自带的拦截接口,可以通过实现该接口,定义intercept方法拦截。而Enhancer是spring自带的类,通过字节码技术动态创建子类实例。代理类具体代码如下:package designMode;import designCommon.PerfomanceMonit
2021-02-07 21:40:31
182
2
原创 手写springAOP之动态代理
1.1 jdk动态代理 JDK的动态代理主要涉及java.lang.reflect包中的两个类:Proxy和InvocationHandler.其中,InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态地将横切逻辑和业务逻辑编织在一起。而Proxy利用InvocationHandler动态创建一个符合某一个接口实例,生成目标类的代理对象。具体代码如下:实际代码:(1)实现InvocationHandler接口(2...
2021-01-20 21:51:04
129
原创 《Effect Java》第三章 Object类的非final方法实战使用
第三章 对于所有对象都通用的方法主要讲的是对Object类的非final方法(equals,hashCode,toString,clone和finalize)覆盖的一些规则第8条 覆盖equals时请遵守通用约定覆盖equals规范:自反性(reflexive)。对于任何非null的引用值x,x.equals(x)必须返回true。 对称性(symmetric)。对于任何非null的引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)必须返回true。 传递
2021-01-06 22:59:42
172
原创 第10章并发
第10章并发线程机制允许进行多个活动。并发程序设计比单线程程序设计有更多的东西可能出错,也难以重现失败。但是并发能从多核的处理器中获得好的性能。66. 同时访问共享的可变数据 关键字synchronized, 保证同一个时刻,只有一个线程可以执行某一个方法,或者某一个代码块。同步不仅是指互斥的一种方式,还可以保证进入同步方法或者同步代码块的每个线程,都看到由同一个锁保护的之前所有的修改效果。java的语言规范保证读取或者写一个变量是原子的,除非这个变量的类型是long或者double。换句话
2020-08-01 22:36:52
180
原创 第9章异常
第9章异常充分发挥异常的优点,可以提高程序的可读性、可靠性和可维护性。57.只针对异常的情况才使用异常 异常只用于异常的情况,永远不能用于正常的流程控制。设计良好的 api 不应该强迫它的客户端为了正常的控制流使用异常。具体应用方法:如果类具有“状态相关”的方法,即只有在特定的不可预知的条件下才可以被调用的方法,这个类往往也应该有个单独的“状态测试”方法,即指示是否可以调用这个状态相关的测试方法。例如,Iterator接口有一个“状态相关”的next方法,和相应的状态测试方法...
2020-07-19 15:26:01
185
原创 第8章通用程序设计
本章主要讨论:局部变量的处理、控制结构类库的用法、各种数据类型的用法和不是由语言本身提供的机制(反射和本地方法)、优化和命名惯例。45. 将局部变量的作用域最小化将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性。要使局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方声明。每个局部变量都应该包含一个初始化表达式。如果你还没有足够的信息来对一个变量进行有意义的初始化,就应该推迟这个声明,直到可以初始化为止。将局部局部变量的作用域最小化的方法,循环的时候优
2020-07-11 19:45:19
213
原创 第七章 方法
第七章方法本章的焦点集中在可用性、健壮性和灵活性上。38.检查参数的有效性当编写方法或者构造器的时候,应该考虑它的参数有哪些限制。应该把这些限制写到文档中,并且在每个方法的开头处,通过显示的检查来实施这些限制。即应该在发生错误之后尽快检测出错误 ,可以避免很多异常和不正确的却无法检测的结果。通过进行有效性检查,付出的努力远远小于带来的异常。39.必要时进行保护性拷贝Java是一门安全的语言,即它对于缓冲区溢出、数组越界、非法指针及其他内存破坏错误都自动免疫。但对于客户的不良行为,仍能
2020-07-07 20:04:54
170
原创 第四章 类和接口(二)
18接口优于抽象类由于java是单继承,因此接口在类型定义方面优于抽象类。但抽象类也有自己的优点,抽象类允许包含某些方法的实现,接口不允许。接口相对抽象类的优点:现有的类可以很容易被更新,以实现新的接口。这句话的意思是新接口比抽象类更容易引入java平台。 接口是定义mixin类型的理想选择。 接口允许我们构造非层次结构类型的框架。由于抽象类只能单继承,所以只能构造层次结构的框架。通过对你导出的每个重要接口都提供一个抽象的骨架实现类,可以把接口和抽象类的优点结合起来。此时,接口的作用.
2020-06-26 22:58:34
408
原创 第四章 类和接口(一)
类和接口是Java程序设计的核心,也是java语言的基本抽象单元。13.使类和成员的可访问性最小 封装(信息隐藏原则):设计良好的模块和不好的模块最重要的区别是对于外部模块,是否隐藏内部数据和实现细节。设计良好的模块会隐藏所有的细节,只通过api进行通信。 信息隐藏的好处:1.解除模块之间的耦合关系,使模块独立。 2.减轻维护负担,使程序员更快理解模块。 3.调节性能,增加系统重用性,降低构建大型系统风险。...
2020-06-21 23:09:49
305
原创 java并发编程之CAS
CAS(Compare-and-Swap):比较替换。这个思想非常的重要,在Java并发编程中多处用到,包括轻量级锁也用到了CAS的思想。所以我觉得有必要单独学习一下。class CAS{ Object value; Object getValue(){ return this.value; } void setValue(Object...
2020-02-09 20:40:22
126
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人