自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 卫语句等方式简化条件表达式

在阿里巴巴Java开发手册中建议优化如下:在《重构 改善既有代码的设计》描述如下:我之前设计模式相关博客中有介绍策略模式以及状态模式:策略模式与状态模式接下来我们简单介绍下卫语句常见优化后效果如果在项目中复杂逻辑的情况下,卫语句会使代码更加清晰、简略。...

2019-04-09 16:07:41 488

原创 jvm 早期优化与晚期优化

jvm除了对内存进行清楚还会再编译期(早期)以及运行期(晚期)进行一些优化处理,这篇文章就简单编写一下我理解到得编译期与运行期jvm帮我们做了那些优化处理。该文由于个人水平有限,理解不够深刻。所以有些可能重要的点,我并不理解就没有编写。如果要深入学习可以百度学习其他文章。编译过程大致可以分为3个过程:  1、解析与填充符号表过程。 (不清楚具体操作与优化,后期学习补充)    2、插入...

2018-12-24 16:42:13 178

原创 java垃圾回收机制

本文是针对个人感觉总要与否进行编写,某些常见,易懂的部分我会简单描述。不建议初次了解读本篇文章,本文适合巩固学习。如何判定对象是否已死引用计数算法:给对象一个引用计数器,当有地方引用计数器加一,一个引用失效计数器减一;计数器为0的对象可被清除。(缺点:互相引用时,计数器都为1时,对象已经不会在被使用,但并不会被消除)可达性分析算法:通过一系列成为“GC Roots”的对象作为起点,从...

2018-12-11 20:16:42 148

原创 java内存分区

java内存分区程序计数器:是一块较小的内存空间,可以看作当前线程所执行的字节码的行号指示器。(线程私有,不存在异常抛出)Java虚拟机栈:生命周期跟线程相同,每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、方法出口等信息。每个方法从调用知道执行完的过程,对应着在虚拟机栈中入栈到出栈的过程。线程私有,定义大量本地变量或者减小栈内存空间会抛出StackOve...

2018-12-04 17:37:13 242

原创 备忘录模式

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象回复到原先保存的状态。备忘录角色分类: Memento(备忘录)角色:负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录。备忘录实际上有两个接口,“备忘录管理者角色”只能看到备忘录提供的窄接口——对于备忘录角色中存放的属性是不可见的。“备忘...

2018-03-16 11:58:45 175

原创 适配器模式

适配器模式:将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。 适配器模式有三种不同的类别,分别是:类适配器模式、对象的适配器模式、接口的适配器模式。类适配器模式 我们直接看代码吧:适配前接口public interface Voltage220 { public int out220();}...

2018-03-15 18:02:17 135

原创 策略模式与状态模式

策略模式:它定义了算法家族,分别封装起来,让他们之间可以相互替代,此模式让算法发生变化,不会影响到使用算法的客户。 我们继续来打去学校的例子。先看代码。 定义一个策略接口:public interface ToSchoolStrategy { public void toSchool();}策略实现:public class ExceptionalStrategy im...

2018-03-15 14:41:17 859

原创 观察者模式

观察者模式:定义一种一对多的依赖关系,让多个观察者对象同时监控某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。这个模式比较绕。我尽量吧上面具体展示在代码位置进行注释,希望对你能有帮助。我也是饶了好久好了若干次关系图才理清。希望我的注解能对你理解这种模式有所帮助。首先我们把主题与观察者接口定义:public interface ISubje...

2018-03-14 18:37:42 122

原创 外观模式

外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。这种模式是我们日常开发经常用到的设计模式,也就是当我们对外提供服务时只是对每个服务提供一个接口,可能这个服务内部包含着相对复杂的算法与步骤,我们需要去调用多个服务甚至更多的Dao层去实现这个服务的需求,我们无意中就 用到了这种模式。看下代码实现你就知道是什么了。子系统A的方法:...

2018-03-13 16:33:44 210

原创 模板方法模式

模板方法模式 :定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模块方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。也就是说抽象父类定义算法格式的骨架,一些不确定的实现由子类来实现。具体java实现如下: 抽象父类:public abstract class AbstractSchool { public final void studyDay(){...

2018-03-13 16:09:09 125

原创 代理模式

代理模式:为其他对象提供一种代理以控制对这个对象的访问。 这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 代理模式有三种写法:静态代理 首先,我们需要一个代理接口public interface Something { public void doSthing();}然后代理对象的实现类。public class So...

2018-03-12 17:45:39 106

原创 装饰器模式

装饰器模式,是对已经存在的某些类进行装饰,以此来扩展一些功能。其结构图如下(图片转自:https://www.cnblogs.com/jzb-blog/p/6717349.html): Component抽象构件角色:真实对象和装饰对象有相同的接口。这样,客户端对象就能够以与真实对象相同的方式同装饰对象交互。ConcreteCompoent具体构建角色(真实对象):定义一个将要接收附...

2018-03-12 14:29:11 137

原创 原型模式

原型模式实际功能主要包含下面两个:通过克隆创建新的对象实例为克隆出来的新的对象实例复制原型实例属性的值。一般来说克隆对象与原型对象的值是一样的,但是也有一定区别,对于基本数据类型,我们会发现改变克隆模式的值原型模式不会改变。但是对于引用数据类型来说,如果是浅拷贝会出现他们所指的类型是同一区域,也就是改变克隆模式引用类型的值时,会影响到原型模式。如果是深拷贝的话就不会出现这种情况。下面我...

2018-03-09 13:49:55 118

原创 生成器模式(建造者模式)

生成器模式功能:生成器模式的重心在于分离构建算法和具体的构建实现,从而使得构建算法可以重用。具体的构造实现可以很方便地扩展和切换,从而可以灵活的组合构造出不同的产品。 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同,建造者模式又可以称为生成器模式。...

2018-03-08 17:05:20 302

原创 单例模式

单例模式,是一种常用的软件设计模式,划分为创建型。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。下面我们介绍常见的一些单例模式的写法(基于java),包括懒汉式、恶汉式、双检锁、内部类、枚举式。恶汉式public class ActSingleton { private static...

2018-03-07 13:30:48 132

原创 普通工厂模式、工厂方法模式、抽象工厂模式

概述 属于创建型设计模式,需要生成的对象叫做产品 ,生成对象的地方叫做工厂 。1.普通工厂模式使用场景:在任何需要生成复杂对象的地方,都可以使用工厂方法模式。准备: 定义一个接口:public interface Api { public void say();}编写几个实现接口的方法:public class Impl1 imp...

2018-03-06 19:18:22 277

原创 CAS(Compare and Swap)无锁算法 与 ConcurrentLinkedQueue 队列

了解CAS 我们就先了解一下乐观锁与悲观锁:独占锁是一种悲观锁,synchronized就是一种独占锁,它假设最坏的情况,并且只有在确保其它线程不会造成干扰的情况下执行,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。CAS就是乐观锁运用到的策略。

2018-01-19 13:36:19 247

原创 结合“锁”性能学习并发集合

“锁”的竞争必然会导致程序性能急剧下降,常见的提高“锁”性能有以下一些建议。我们根据“锁”的优化来顺便学习一下并发集合(java.util.concurrent包下的部分集合类)1.减少锁粒度所谓减少锁粒度,就是指缩小锁定对象的范围,从而减少锁冲突的可能性,进而提高系统的并发能力。我们来了解一下ConcurrentHashMap 类怎么实现减小锁粒度的:    通过分析Ha

2018-01-16 15:10:08 315

原创 线程池学习理解

1.线程池是什么为了避免系统频繁地创建和销毁线程,我们可以让创建的线程进行复用。如果大家进行过数据库开发,对数据库连接池应该不会陌生。为了避免每次数据库查询都重新建立和销毁数据库连接,我们可以使用数据库连接池维护一些数据库连接,让他们长期保持在一个激活状态。当系统需要使用数据库时,并不是创建一个新的连接,而是从连接池中获得一个可用的连接即可。反之,当需要关闭连接时,并不真的把连接关闭,而是将这...

2018-01-05 14:19:54 178

转载 类之间关系

原文地址:http://blog.csdn.net/zhengzhb/article/details/7187278转载只为方便个人查看。类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强。 1.依赖(Dependence) 依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间

2017-09-14 16:37:50 281

原创 spring源码导入eclipse

1.先下载spring源码: Spring源码地址 2.下载安装Gradle: Gradle下载地址 3.安装Gradle软件,解压即可,设置GRADLE_HOME,和PATH: 配置GRADLE_HOME到你的gradle根目录当中,然后把%GRADLE_HOME%/bin加到PATH的环境变量。 4.命令行中运行gradle -v,检查一下是否正确安装配置; 5.命令行中运行spr

2017-09-13 16:45:57 179

原创 极光推送服务端实现

因为暂时开发自有对单一用户不同设备进行信息推送。 因此就简单实现了两个接口,可能后期项目完善会增加一些其他接口也不会太难。 极光推送已经把接口编写的简单至极,一个简单的例子就可以实现。但是会有很多参数有他不同的含义,可以参照:极光推送接口文档 接口代码:public interface PushPortal { /** * 推送所有平台所有用户 * @return

2017-09-09 10:31:48 3721

转载 redis.conf 配置文件说明

# redis 配置文件示例 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位,# 通常的格式就是 1k 5gb 4m 等酱紫:## 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes# 1gb => 10

2017-08-21 15:48:50 276

原创 fibonacci数列四种不同解法思路。

很久在学校的时候看一个人微软的讲面试讲到斐波拉契数列。当初也没做太深的研究只记得可以求出一个通项公式。最近无聊翻出来研究下。第一种:递归(最简单,最low)时间复杂度O(n2)这里就不做大数处理了。超过50跑起来时间就超过了我的忍耐了。 private int fib(int i) { if(i==0) return 0; els

2017-04-02 11:28:52 398

转载 Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)

原帖地址:http://blog.csdn.net/vebasan/article/details/6193916位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面详细介绍每个位运算符。 1.与运算符与运算符用符号“&

2017-03-27 20:31:18 206

原创 二分查找与快排算法

最近公司比较闲,想起进公司面试题,一个简单的排序。但是当时只写出了优化后的冒泡。尝试快排失败。实现low。这两个都是用到分治的思想很容易搞混。还有一个叫二分排序的,其实就是快排的核心,二分查找和快速排序属于面试笔试的高频问题就总结一下。毕业面试可以看下。 binarySearch(二分排序)有两种实现方式,一种是递归,一种是循环。(其实之前我只知道递归并未想到可以循环,确实略屌,也不难理解

2017-03-22 11:32:20 1972

转载 BigDecimal 的那些坑事儿

原文地址:http://blog.csdn.net/ugg/article/details/8213666最近查看rebate数据时,发现一个bug,主要现象是,当扣款支付宝的账号款项时,返回的是数字的金额为元,而数据库把金额存储为分,这中间要做元与分的转化,这个转化规则很简单,就是*100的,所以一开始代码很简单,如下。[java] view pl

2017-02-17 16:32:24 1206

转载 oracle 序列 current 与 nextval

原文地址:http://www.cnblogs.com/sos-blue/p/4897515.html以前写sql的时候总是担心current()得到的值并不会绝对等于我上一次nextval()取得的值;因为可能其他线程并发访问nextval()。先说结论吧:当你拿到一个数据库连接,先nextval(),然后无论其他再怎么操作这个sequence,你用current()取得

2016-11-23 17:44:50 3570

原创 oracle 数据库语句简记

ALTER SESSION SET CURRENT_SCHEMA=p2p;select ym,nvl(counth,0) zc,nvl(countt,0) tz from ( SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2014-10', 'yyyy-MM'), ROWNUM - 1),'yyyy-MM') as ym FROM DUAL CONNE

2016-10-31 09:32:55 299

转载 web.xml JSP <jsp-config>标签

包括  和  两个子元素。其中 元素在JSP 1.2 时就已经存在;而 是JSP 2.0 新增的元素。 元素主要有八个子元素,它们分别为: 1.:设定的说明 2.:设定名称 3.:设定值所影响的范围,如: /CH2 或 /*.jsp4.:若为 true,表示不支持 EL 语法 5.:若为 true,表示不支持 <% scripting %>语法 6.:设定 JSP 

2016-10-19 16:00:03 349

转载 java实现二维码生成

package com.qrcode.create; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File;

2016-03-15 14:59:36 306

原创 JS获取EL表达式的值

for循环遍历List 因此id为变量。无法直接或许: ${yppctp.tpui}" alt="" id="coll${j.index}" name="img123" onclick="img('coll${j.index}')" > ${yppctp.tpnr} js代码:function img(textid){ var id11 = tex

2015-11-04 21:33:05 2275

原创 省赛小结

省赛结束啦,其实能参加省赛是我的荣幸。也是贺大学霸和学长带我飞的结果。其实省赛这段时间最为深刻的还是大家一起在机房作比赛的感觉,那是我上大学至今最为美好的回忆之一,在那段时间过的很充足。甚至后面几天没有加比赛,种感觉少什么的样子。渐渐地习惯了那种生活。省赛期间,我们了解自己的实力不是太强。我们队一直本着跟题,我们不强求速度一血,我们就是看那道题A的多然后立刻去看那道题。这点

2014-05-29 11:50:27 1098

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除