自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Joseph_Geeker的博客

菜比一枚

  • 博客(44)
  • 资源 (1)
  • 收藏
  • 关注

原创 Dubbo2.7服务暴露源码阅读笔记(未完)

服务暴露整体分为三部分,首先组装参数,构建URL,然后进入服务暴露逻辑,最后是向注册中心注册服务。入口就是ServiceBean的onApplicationEvent方法,因为实现了ApplicationListener接口,在spring容器refresh之后就会触发这段逻辑,进入服务暴露的逻辑。这里判断是否设置了延迟暴露、是否已经被导出、是否不支持导出。我看了下2.7版本,这里的isDela...

2019-01-07 14:32:57 875

原创 ReentrantLock

ReentrantLock继承了Lock接口,实现了lock、lockInterrupibly、unlock、tryLock等方法。构造方法:两个构造方法,无参构造方法默认是非公平锁,有参构造函数如果为true初始化变量为公平锁,false为非公平锁。 public ReentrantLock() { sync = new NonfairSync(); } ...

2018-12-24 15:11:42 216

原创 Base64编码

Base64编码Base64编码是一种基于64个字符的编码,按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。完整的Base64定义可见RFC 1421和RFC 2045。编码后的数据比原始数据略长,为原来的¾,编码中往往会以“=”号来结尾,这是因为其编码表的第64位是用“=”来补位的原因。严格的来讲Base6...

2018-09-29 23:27:38 2209

原创 加密基础概念浅析

背景介绍大黄和小涵是好朋友,大黄的成绩在班级名列前茅,小涵的成绩却总是不如人意,于是在一次考试前大黄和小涵约定好,大黄通过各种方式给小涵传答案,帮助小涵渡过难关,但是监考老师和其他因素的影响,让两人倍感紧张,一场考试风云即将拉开序幕…第一集,机智的老师!考虑到小纸条被监考老师发现的风险,大黄决定将选择题答案变得隐蔽一些。大黄:ABCD分别对应1、2、3、4,这样老师发现也不知道是考试答案...

2018-09-29 23:24:17 385

原创 Java加密体系:java.security包

一、JCA/ JCEJCA(Java Cryptography Architecture) 是Java体系结构,提供了基本Java加密框架,比如证书、数字签名、消息摘要、秘钥对生成器等,在java.security包中实现。JCE(Java Cryptography Extension)是JCA的扩展,主要负责提供DES、AES、RSA、DSA这样的加密算法,因为加密算法是会不断进步的...

2018-09-29 23:21:49 4575

原创 Base64算法不一致可能会导致的坑

简述笔者工作中常用的Base64算法的实现有三种方式,第一种是sun公司提供的Base64算法,第二种是bouncycastle提供的加密算法(以下简称BC包),第三种是apache的codec包(以下简称codec包)不推荐使用第一种,这些api在未来的jdk发行版本中是可能被删除的。Base64背景:两个公司直接互相通信,双方约定加密方式,涉及数字签名、数字证书等,约定非敏感信息使用Ba...

2018-09-29 23:18:42 11898

原创 《Effective Java》谨慎的覆盖clone()方法

首先说一些,clone()是什么?应该怎么用? clone()方法是Object类中的方法,protected修饰符修饰,用来复制对象。下面是结果:可以看到clone()创建了一个完全不同的对象,t2指向了一个新的在堆中的对象。使用clone()方法需要实现Cloneable接口,如果不实现的话会抛出CloneNotSupportedException,这个接口并没有什么实际意义,只...

2018-03-24 22:00:23 341

原创 《Effective Java》覆盖equals()时总是要覆盖hashcode()

在Object类中的注释写到: - 在java应用执行期间,只要对象的equals方法的比较操作所用到的信息没有被修改,那么对这同一对象调用多次hashCode方法都必须始终如一地同一个整数。在同一个应用程序的多次执行过程中,每次执行该方法返回的整数可以不一致。如果两个对象根据equals(Object)方法比较是相等的,那么调用这两个对象中任意一个对象的hashCode方法都必须产生同样...

2018-03-23 15:21:57 325

原创 《Effective Java》读书笔记(已更新至24条)

《Effective Java》读书笔记目录,这篇文章记录了我读这本书的一些想法和验证,带水印刘屠户的java养猪场是我的公众号,考虑后面的源码解析同步到公众号中。1. 考虑用静态工厂方法代替构造器第一条,考虑用静态工厂方法代替构造器优点一:静态工厂可以很好的理解名称四个构造方法,面对这样的构造方法,三个、四个是可以接受的,那如果是七个八个甚至是十几个呢?这个时候有一个好的...

2018-03-23 14:15:01 1189

原创 《Effective Java》避免使用finalize()方法

首先说一下finalize()方法用来做什么,这是一个Object类的方法,也就是说所有类都会继承这个finalize()方法,这个方法默认实现为空,这个方法被用于在类对象被GC之前做一些收尾工作,但是被执行是有条件的,类重写的finalize()方法必须不为空。首先JVM会先判断这个类是否重写了finalize()方法,并且这个方法不为空,如果满足这个条件会被标记。在java.lang....

2018-03-23 14:12:15 511

原创 《Effective Java》消除过期的引用

引用书中的例子代码 这段代码是有内存泄漏的隐患的,主要原因在pop()方法,pop()方法将一个元素从栈中弹出后,虽然size减少了,但是elements[]数组还持有着弹出元素的引用,从而引发内存泄漏。解决办法是可以手动将这个元素的引用置为null。 显然在写代码的时候不可能一直关注着引用,发现不用就置为null,这是不可取的,那么在什么时候应该注意引用的手动释放(也就是置为...

2018-03-23 14:11:50 376

原创 《Effective Java》考虑用静态工厂方法代替构造器

第一条,考虑用静态工厂方法代替构造器优点一:静态工厂可以很好的理解名称四个构造方法,面对这样的构造方法,三个、四个是可以接受的,那如果是七个八个甚至是十几个呢?这个时候有一个好的名字就是十分重要,比如书上提到的返回素数的方法名称:BigInteger.probablePrime(),这样的名称就可以很好地区分构建实例的用途,可读性也更强。优点二:不必每次调用它们的时候都创建一个新的...

2018-03-23 14:11:26 343

原创 《Effective Java》遇到多个构造器参数时要考虑用构造器

如果一个对象有多个参数时,应该如何处理?代码大全2中提到过,一个函数的参数最好不要超过7个,我们熟悉的线程池参数就是7个,构造方法也不例外,在笔记本电脑中,一屏幕代码最多也就是7个左右的参数。构建一个对象,通常我们会如何处理呢?1、构造函数,下面的类BuilderDemo有8个属性 这样的代码是十分冗长的,如果有多个构造函数的话,是十分混乱的。于是我们有个新的想法,创建这些属...

2018-03-23 14:10:57 286

原创 《Effective Java》用私有构造器或者枚举类型强化SingleTon属性

我们耳熟能详的单例有懒汉式、饿汉式等 例如下面这段的饿汉式 用private修饰构造方法,防止外界通过无参的构造方法直接创建对象,但是这样还是可以通过反射来攻击,造成代码的不安全,可以考虑设定一个变量,在创建第二个对象的时候抛出一个自定义的异常。这样就安全了吗? 如果我将这个对象序列化到本地,然后再反序列化回来,这个对象还是原来的对象吗?不是的,这时可以考虑使用序列化的hock函数r...

2018-03-23 14:10:25 354

原创 《Effective Java》通过私有构造器强化不可实例化的能力

一些类是不希望其他类对它实例化的,比如java.util.Arrays、java.lnag.Math、java.util.Collections。我们发现这些类都会声明一个私有的构造方法,这样外界就无法通过默认无参的构造方法来创建这些类的对象,同时这些类也不能被继承。 我们知道抽象类也是不可以被实例化的,那么为什么不使用抽象类呢? 抽象类是可以有子类的,而且抽象类的出现可能会让人误...

2018-03-23 14:09:55 282

原创 《Effective Java》避免创建不必要的对象

经典问题:这两行创建了几个对象?第一行创建了几个,第二行创建了几个?第一行创建了一个对象,第二行也是创建了一个对象。引用一共有两个,一个在虚拟机栈的栈帧的局部变量表中,另一个是在全局字符串池中(StringTable,本质上是个哈希表,池的位置视JDK的版本而定,1.6版本在方法区,1.7版本在堆,1.8从堆里面独立,被称为元空间),这个池中只保留被双引号修饰的字符串引用,实际对象还是存储在堆...

2018-03-23 14:08:21 292

原创 git Permission denied (publickey). fatal: Could not read from remote repository. Please make sure y

解决办法:    1,移除远程库 git remote rm origin2,删除掉本地 .ssh文件夹3,删除掉github的ssh key4,重新生成key5,将本地生成的id_rsa.pub文件中内容拷贝到github,生成ssh key6,git remote add origin [email protected]:用户名/仓库名.git7, git push -u origin

2017-04-29 14:25:32 532

原创 深入理解java虚拟机--->垃圾回收算法

一、标记-清除算法  分为两个步骤,标记与清除,首先根据GC Roots算法,标记需要被回收的对象,然后在标记完成后,回收掉所有标记的对象。      标记-清除算法是很基础的算法,有两个缺陷。      一、标记与清除的效率不高。   二、标记-清除算法结束回收后,内存中很可能留下很多不连续的内存空间,当一个占用内存比较大对象进入时,有可能内存中没有满足这个对象的连续的区域,从而导致提前

2017-04-04 14:21:40 605

原创 深入理解java虚拟机读书笔记--->如何判断对象可以被回收?

一、引用计数算法。  很早以前的判断对象是否无用的算法,给对象中添加一个引用计数器,每当有一个地方引用它的时候,就加一,引用失效后,就减一,任何时刻引用为0的对象就是不会再被继续使用的。   事实上,这个方法是有效的,但是有一定的局限性,当引用之间相互循环引用的时候,就不会生效。      例如 “` public class Test {public Object instance =

2017-03-28 12:14:22 567

原创 String中的equalsIgnoreCase()方法与regionMatches()方法解析

equalsIgnoreCase方法的作用是,比较两个字符串,不区分大小写。 与CompareToIgnoreCase的区别在于,equalsIgnoreCase的返回值是boolean,而CompareToIgnoreCase的返回值是int。下面我们来看一下equalsIgnoreCase()方法的源码 public boolean equalsIgnoreCase(String anoth

2017-03-06 13:50:15 1954 2

原创 String中的compareTo与compareToIgnoreCase()方法解析

这个方法的意思是比较两个字符串,不区分大小写。 我们来看一下这个方法是怎样实现的?public int compareToIgnoreCase(String str) { return CASE_INSENSITIVE_ORDER.compare(this, str); }它通过一个引用调用一个方法,并将这个要比较的字符串和当前类的String对象传过来。 让我们来看以下

2017-03-06 13:32:19 3078

原创 解决安装nginx的nginx: [emerg] mkdir() "/var/temp/nginx/client" failed (2: No such file or directory)问题

出现这个错误只需root下手动创建目录即可。 如图所示

2017-03-05 14:42:11 18072 5

原创 toArray方法浅析

在实际开发过程中,我们经常会遇到集合与数组的相互转化,我们以ArrayList为例,ArrayList类中有两个toArray方法重载。                                                    首先第一个无参的方法,返回一个包含所有元素的数组(从第一个到最后一个)。        通过源码我们可以发现,调用了Arrays类的copyOf()

2017-03-03 21:51:16 1414

原创 父类与子类的静态代码块、代码块、构造方法执行顺序

StaticTest.javapackage com.staticTest;/** * 测试静态代码块执行顺序 * 1、static能修饰的类只有静态内部类 * 2、静态方法不能直接访问非静态成员(方法,成员变量) * 3、静态代码块在类加载的时候,就直接加载,且只执行一次 * 4,执行顺序:父类静态代码块与静态成员--> * 子类静态代码块与静态成员--> *

2017-03-03 20:32:40 3004

原创 Java多线程生产者消费者问题

一、什么是生产者消费者问题?   生产者负责生产产品,消费者购买产品,当库存为空的时候,生产者继续生产,消费者购买数量要小于等于库存上限,不能出现,生产一次,消费两次,或者生产了没有消费的情况。二、代码实例Producer.java类/** * Created by yuandl on 2016-10-11. * /** * 消费者 */public class Producer impl

2017-03-02 20:12:07 743

转载 synchronized关键字详解(转)

作者:GangWang 出处:http://www.cnblogs.com/GnagWang/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。记下来,很重要。Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一、当两个并发线程访问同一个对象ob

2017-03-01 16:59:34 253

原创 navicat mysql导入数据sq文件时 USING BTREE 错误解决办法

如图所示,只需要将sql文件之中的USING BTREE放在括号前面就好了。DROP TABLE IF EXISTS `tb_content_category`;CREATE TABLE `tb_content_category` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '类目ID', `parent_id` bigint(20)

2017-02-14 14:19:57 1860

原创 解决mybatis,java.lang.IllegalArgumentException Mapped Statements collection does not contain value for

org.apache.ibatis.exceptions.PersistenceException: Error querying database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.test.mapper.PersonMap

2017-02-09 16:04:36 1038

原创 牛客网左程云直通BAT算法课10元优惠码

优惠码:A5ZLzAV 购课链接:http://www.nowcoder.com/courses/1?coupon=A5ZLzAV

2017-02-09 15:05:39 1890

原创 解决svnserve --version输入后出现的不是内部或外部命令,也不是可运行的程序或批处理文件的问题

问题情况如下: 重新安装svn到这里,将SvnServe勾选上即可。重新输入,成功。

2017-01-22 17:56:21 2780

原创 Struts2类型转换TypeConverter源码阅读笔记

在之前值栈的学习中,遗留的一个问题,值栈中保存了action的一些信息,而页面要从值栈取action中的数据,这个过程是怎样实现的?页面上的信息全部都是字符串,而在实际运行中变量的类型是多种多样的,他们之间是怎样完成类型转换的?首先我们要知道,ognl的jar包中的一个接口ognl.TypeConverter,它是做什么的?这个接口的实现类ognl.DefaultTypeConverter是实现og

2017-01-02 19:50:22 623

原创 模拟泛型DAO增删改查--->jdbc实现

在我之前做的的jdbc项目,参数列表中传入的都是指定类型,一旦添加了实体类,又要重新写一个dao层的方法,但是功能基本都是一致的,导致代码大量冗余,可维护性极差,所以在这里引入泛型DAO来解决这个问题,规定泛型,传入的参数可以是任意实体类,而我们在控制层可以将方法返回的泛型类型的值强转为我们要使用的实体类型,注意!这里不要通过反射在控制层获取实体类,多此一举,我们要知道,使用泛型DAO的目的是去冗余

2016-12-31 20:35:34 532

原创 Struts2动态代理生成action源码执行流程

动态代理生成action这部分源码,应该算是Struts2之中比较底层的代码了,在这里贴出源码的执行流程,仅供参考。核心过滤器StrutsPrepareAndExecuteFilter,在此只贴出doFilter()的代码 public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws

2016-12-31 19:26:12 1814

原创 Struts2值栈ValueStack源码阅读笔记

我们要从ActionContext开始说起,首先看StrutsPrepareAndExecuteFilter核心过滤器,也是整个程序的入口,doFilter()方法中的 ——-> prepare.createActionContext(request, response);public void doFilter(ServletRequest req, ServletResponse re

2016-12-31 18:57:43 403

转载 Struts2中的责任链模式模拟

模拟Struts2的工作责任链过程,接口调用invoke方法执行 [java] view plain copy public interface ActionInvocation{ Object getAction(); boolean isExecuted(); Result getResult() throws Exception; String getResultCode()

2016-12-31 16:35:31 633

转载 【策略模式】模拟Struts选择策略决策转移

目标:我们需要一个计算价格的类,有时候会打折 1.我们先设计一个接口 [java] view plain copy public interface PriceCalculationStrategy { public double calculatePrice(double price , double copies); public boolean match(double price

2016-12-31 16:31:04 321

转载 装饰器模式在Struts2中的应用

案列2 StrutsRequestWrapper public class StrutsRequestWrapper extends HttpServletRequestWrapper { /** * The constructor * @param req The request */ public StrutsRequestWrapper(HttpServletReque

2016-12-31 16:22:42 449

原创 Struts2容器Container源码阅读笔记

container是容器的意思,这让人很容易联想到java的Collection接口下的集合类,然而container并不是一个数据结构,我认为container其实是一个工厂,可以对对象的生命周期进行管理,,使对象的创建与业务逻辑的代码分开,同时可以避免对象的频繁的无用的创建,它可以将从配置文件中读取到的信息,通过依赖注入,缓存成key,value形式,也可以通过getInstance()通过反射

2016-12-31 16:15:36 896

转载 struts2中的 ThreadLocal模式详解

设计模式(Design pattern)是经过程序员反复实践后形成的一套代码设计经验的总结。设计模式随着编程语言的发展,也由最初的“编程惯例”逐步发展成为被反复使用、并为绝大多数程序员所知晓的、完善的理论体系。我们使用设计模式(Design pattern)的初衷,是使代码的重用度提高、让代码能够更容易被别人理解以及保证代码的可靠性。毫无疑问,在程序中使用设计模式无论是对于程序员自身还是对于应用程序

2016-12-30 22:00:18 319

原创 struts2拦截器源码阅读笔记

拦截器,是struts最具特色的,也是被大家称赞的亮点之一,整个拦截器体系运用了AOP思想,流程由责任链模式完成。下面将对拦截器的源码进行部分解读struts2通过创建代理对象,由生成的代理action走过拦截器的一系列流程StrutsPrepareAndExecuteFilter的executeAction()方法 execute.executeAction(request, response,

2016-12-30 21:49:31 310

effective java

effective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective javaeffective java

2018-10-31

空空如也

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

TA关注的人

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