自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (1)
  • 收藏
  • 关注

原创 jdbc-mysql json乱码问题

更改mysql-connector-java版本到5.1.40以上,这个bug在5.1.40修复,git传送门<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency> <groupId>mysql</groupId> &lt...

2019-07-31 18:14:54 242

原创 三门问题(Monty Hall problem)

三门问题,亦称为蒙特霍尔(英文:Monty Hall problem),是一个源自博弈论的数学游戏问题,大致出自美国的电视游戏节目Let’s Make a Deal。问题的名字来自该节目的主持人Monty Hall。这个游戏的玩法是:参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车或者是奖品,选中后面有车的那扇门就可以赢得该汽车或奖品,而另外两扇门后面则各藏有一只山羊或者是后面没有任何东西。当...

2018-04-21 17:01:47 1786

原创 Tomcat系统架构

Server   控制着Tomcat的整个生命周期,Server作为Service的载体,给Service提供了一个生存环境Service   Service值是作为Connector和Container的载体在外面多包了一层,把它们组装在一起,向外面提供服务。一个Service可以设置多个Connector,但只能有一个Container。Service中所有组件的声明周期都通过Li...

2018-04-17 23:05:14 277

原创 JVM GC策略

静态内存   在Java中静态内存分配是指在Java被编译时就已经能够确定需要的内存空间,当程序被加载时系统把内存一次性分配给它。这些内存不会在程序执行时发生变化,直到程序执行结束时内存才会被回收。在Java的类和方法中的局部变量包括原生数据类型和对象的引用都是静态分配内存的。静态内存空间实在Java栈上分配的,当方法运行结束时,对应的栈帧也就撤销了,所以分配的静态内存空间也就被回收了。...

2018-04-17 20:16:38 4927

原创 JVM内存结构

PC寄存器   严格来说这是一个数据结构,用于保存当前正常执行的程序的内存地址。同时Java程序是多线程执行的,所以不可能一直按照线性执行下去,当有多个线程交叉执行时,被中断线程的程序当前执行到哪条的内存地址必然要保存下来,以便于它被恢复执行再按照被中断时的指令地址继续执行下去。这很好理解,它就像一个记事员一样记录下哪个线程当前执行到哪条指令了。这仅限于Java方法,对于Native方法并没有要...

2018-04-17 10:48:52 138

原创 Java使用内存的组件

Java堆:Java堆是用于存储Java对象的内存区域,堆的大小在JVM启动时就一次向操作系统申请完成,通过-Xmx和-Xms两个选项来控制大小,Xmx表示堆的最大大小,Xms表示初始大小。一旦分配完成,堆的大小就将固定,不能在内存不够时再像操作系统重新申请,同时当内存空闲时也不能将对于的空间交还给操作系统。在Java堆中内存空间的管理由JVM来控制,对象创建由Java应用程序控制,但是对象所占的...

2018-04-17 10:03:50 205

原创 Javac工作原理分析(4):代码生成器

经过语义分析器后的语法树已经非常完善了,接下来就是要遍历语法树生成最终的Java字节码,分为以下两个步骤: 1)将java方法中的代码块转化成符合JVM语法的命令形式,JVM的操作都是基于栈的,所有的操作都必须经过出栈和进栈来完成 2)按照JVM的文件组织形式将字节码输出到以class为扩展名的文件中 这个操作主要涉及到com.sun.tools.javac.jvm包三个类: Gen:遍历...

2018-04-15 14:05:31 259

原创 Javac工作原理分析(3):语义分析器

java代码经过词法分析器和语法分析器后形成一棵结构化、可造作的语法树,但是这棵语法树太粗糙了,离我们的目标java代码字节码的产生还有点差距。必须要在这棵语法树的基础上在做一些处理,如给类添加默认的构造函数,检查变量在使用前是否已经初始化,将一些常来进行合并处理,检查操作变量类型是否匹配,检查所有的操作语句是否可达,检查checked exception异常是否已经捕获或抛出,解除Java的语法...

2018-04-14 12:26:32 1329

原创 Javac工作原理分析(2):语法分析器

语法分析器是将词法分析器分析的Token流组建成更加结构化的语法树,也就是将一个个单词组装成一句话,一个完整的语句。哪些词组合在一起是主语、哪些是谓语、宾语、定语…要做进一步区分。 语法树及各种语法节点对应的类关系图如下: 每个语法树上的节点都是com.sun.tools.javac.tree.JCTree的一个实例,关于语法树有如下规则: 1).每个语法节点都会实现一个接口xxxT...

2018-04-13 17:30:01 897

原创 Javac工作原理分析(1):词法分析器

Javac分四个模块:词法分析器,语法分析器,语义分析器,代码生成器。 整个流程如下图: 本文先记录词法分析器的工作过程,文中出现的源码出自Jdk9 首先来看一下词法分析器设计的类图: Lexer和Parser:Javac的主要词法分析器的接口类 Scanner:Lexer的默认实现类,逐个读取java源文件的单个字符,对读取到的词法进行归类 JavacParser:规...

2018-04-13 14:53:35 1140

原创 Android增量更新——bsdiff&bspatch

为了节省流量,增量更新应运而生,用这篇文章来记录下运用patch差分包的形式实现无脑增量更新。为了方便,就将生成差分包和差分包与旧apk合并这两个过程都放在安卓机上完成...

2017-02-08 20:24:04 6886 4

原创 中介者模式(行为型)

中介这个词在我们听的不要太多了,印象最深刻的莫过于房产中介了,你看见一个穿着西装打着领带的人迈着疾快的步伐向你走来,别担心,他只是想问问你买不买房。   在使用手机远距离通话时,手机也可以看做是中介:一个人在哈尔滨,一个人在三亚,他们要交流靠喊是不可能的,只有通过手机来进行,在哈尔滨的把要说的话告诉手机,手机通过无线传输将信息传到在三亚的手机上,在三亚的人就可以听到在哈尔滨的说的话了...

2017-01-23 16:25:55 259

原创 适配器模式(结构型)

定义:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作结构:目标角色:期待得到的接口源角色:需要适配的接口适配器角色:把源接口转换成目标接口适用场景:需要一个统一的输出接口,而输入端的类型不可预知系统需要使用现有的类,而此类的接口不符合系统的需要(接口不兼容)想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的

2017-01-23 15:38:46 205

原创 桥接模式(结构型)

定义:将抽象部分与实现部分分离,使他们都可以独立的进行变化结构:抽象部分:抽象类,保持一个对实现部分对象的引用,抽象部分中的方法需要调用实现部分的对象来实现优化抽象部分:抽象部分的具体实现,对抽象部分的方法进行完善和扩展实现部分:接口或者抽象类,由实现部分提供基本的操作,抽象部分的定义基于实现部分这些基本操作的业务方法具体实现部分:完善实现部分中方法定义的具体逻辑适用场景:需要跨越多个平

2017-01-23 13:41:20 298

原创 装饰模式(结构型)

定义:动态地给一个对象添加一些额外的职责,是继承关系的一个替代方案结构:抽象组件:被装饰的原始对象抽象,接口或者抽象类具体组件:组件的具体实现,是装饰的具体对象抽象装饰者:装饰组件对象,内部有一个指向组件对象的引用,通常为抽象类具体装饰着:装饰着具体实现适用场景:需要透明且动态扩展类的功能时...

2017-01-22 17:24:16 235

原创 外观模式(结构型)

外观模式在我们身边是最常见的了。就拿手机来说,手机中有各种模块,相机,gps,通信,音视频等等,这些全部集成到手机上,只要在手机上点点屏幕就可以轻松使用这些功能。还有各种第三方SDK,这些SDK往往会提供一个统一的接口供我们调用,让开发者很轻松的就可以将SDK集成到自己的系统中。定义:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行;提供一个高层次的接口,使得子系统更易于使用...

2017-01-20 11:17:26 201

原创 享元模式(结构型)

在软件系统中,经常会出现资源浪费的情况,例如在计算机内存中同时存在多个完全相同的或者非常相似的对象,当这些对象的数量很多,会占用很多的内存,并且重复的创建和销毁,使得GC任务繁重,内存占用居高不下,这使得系统运行代价过高。为了解决这个问题,可以将已经创建的对象的缓存起来,当下一次要再要创建新对象时,先判断缓存池中是否已经存在该对象了,如果存在就直接拿出来用,如果不存在,就新实例化一个对象——享元模式....

2017-01-15 23:29:59 276

原创 访问者模式(行为型)

  在实际开发中也会遇到这种情况,有一个属性类E,有abcd四个属性,另外有四个类ABCD,要去访问类E,A只访问属性a,B只访问属性b,C只访问属性c,D只访问属性d。这时候访问者模式就派上用场了。定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。结构:抽象访问者:声明对每一个元素访问的行为方法,方法个数与元素个数一样...

2017-01-14 23:53:42 272

原创 备忘录模式(行为型)

有许多人喜欢玩单机游戏,单击游戏都有一个存档功能,把当前的所有状态保存下来,下次打开游戏只要读取这个存档信息就可以还原到上次玩的地方。还有一个我们在文本编辑时最常使用的快捷键Ctrl+Z,撤销本次操作,返回到上一个状态。这所体现的就是备忘录模式。定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态结构...

2017-01-14 22:35:51 232

原创 代理模式(结构型)

快递员:王先生您好,这里有您你的快递,麻烦来签收一下。 隔壁老王:我现在有事情走不开,你把快递放在小区物业那里,让他们代收一下。 快递员:好的。   上面的场景就是代理模式

2017-01-13 00:30:50 182

原创 组合模式(结构型)

在电脑磁盘里有文件和文件夹,文件夹里又可以放文件和文件夹,这个磁盘可以看做是一个树状结构,磁盘里的文件可以看做叶子,文件夹看做枝干。文件夹其实也是文件的一种形式,对它们可以进行相同的操作(复制、粘贴、删除)。   再来说说Android中的View和ViewGroup,ViewGroup是继承于View,因此ViewGroup和View可以同等看待。不同的是ViewGroup是一个容器,里面可以放....

2017-01-12 00:27:56 334

原创 解释器模式(行为型)

大家都知道,写好的代码放到无法直接运行,必须要经过编译后才能运行。java代码需要编译成class(java字节码)文件才能放在jvm上运行,java代码只有经过javac编译器编译后jvm才能认识。javac编译器在这里扮演的就是解释器的角色。xml解析器也是同样的道理,还有tomcat解析war包运行web项目,android中PackageManager解析apk安装app等等,都运用了解释器...

2017-01-10 21:00:36 237

原创 六大设计原则

面向对象设计的目标之一在于支持可维护性复用,一方面需要实现设计方案或者源代码的复用,另一方面要确保系统能够易于扩展和修改。在程序开发中,适当的运用设计模式可以开发一个易于维护和扩展的系统。当然,关键还是在于封装。

2017-01-10 00:48:36 185

原创 迭代器模式(行为型)

在java中容器有List、数组、Set、Map等等。这四种容器内部的组织方式都不一样,List是列表形式,Set是集合形式,Map是键值对形式。现在要去遍历一个容器里的内容,首先要了解内容在容器中的组织形式;在jdk中已经实现了List、Set、Map的迭代器,迭代器后,就不用去了解内容的组织形式了,直接用迭代器的 hasnext()和next()完成遍历。

2017-01-07 21:59:48 223

原创 策略模式(行为型)

&emspo; 从北京到上海,可以坐高铁,可以坐绿皮,可以自己开车,也有个别人可能选择步行的方式。总之就是有很多种方式可以供我们选择,选择的方式不同,过程不同,但结果都是一样的,都可以从北京到上海,只要选择适合的就可以了,高铁贵但快,绿皮便宜但慢,自己开车累但方便。   在开发中也经常碰到这种情况,例如要对一个数组进行排序,可选择不同的方法.....

2017-01-07 13:45:56 273

原创 状态模式(行为型)

在很多种情况下,一个对象的行为取决于一个或多个动态变化的属性,这些属性称为状态。例如水,液态时可以流动,气态时可以扩散,结冰时成了固态,这时既不能流动也不能扩散。例如使用键盘输入字符,当Caps Lock开启时,处于大写状态,这时输入的是大写字母,当Caps Lock关闭时,输入的是小写字母。例如用手机打电话,有信号并且话费充足时,才可以打电话,当没信号或者是处于欠费状态,就无法打电话了。

2017-01-03 14:39:01 223

原创 模板方法模式(行为型)

我们去坐火车,有几个固定的步骤:买票->检票进站->上车->找到座位坐下。买票的方式有很多种,网上订票,电话订票,或者代售点买票,自助售票机买,通过黄牛买票等等,买的高铁,动车,还是普快,买的是站票还不能坐。   再来一个例子,去吃饭:点单->吃->买单。点单和买单都是大同小异,那吃什么就大不同,面,饺子,饭等等。

2016-12-30 18:30:23 212

原创 责任链模式(行为型)

首先我们来看一个例子,在一个人员众多大公司里,为了方便人员管理,自然形成了金字塔结构的管理层级,最上层是老板,最底层为苦逼的码农,中间则是各个等级的管理层,并且无法跨层管理,也就是你只能与上级或者下级进行沟通,每个管理层的权限都是不一样的,逐级向上递增;现在一个员工要请半个月的假,组长最多能批3天假,于是这个申请由组长递交到项目经理,项目经理只能批5天内的假,项目经理就把这个申请递交到部门经理,部门...

2016-12-30 11:30:09 268

原创 观察者模式(行为型)

在软件系统中经常会有这样的需求:如果一个对象的状态发生改变,某些与它相关的对象也要随之做出相应的变化。举个例子,要设计一个右键菜单的功能,只要在软件的有效区域内点击鼠标右键,就会弹出一个菜单;再举一个现实生活中的例子,你的一个朋友存了你的手机号码,有一天你把号码换了,你是不是要把换号码的消息通知你的朋友,并且把新号码也告诉他。

2016-12-29 18:06:15 236

原创 原型模式(创建型)

在我们的实际开发中,常常会碰到这种情况要对一个对象进行处理,又不能改变它原来的属性,这里我就把它称为保护现场。   例如凶手用枪杀了一个人,为了保持枪上指纹原有的样子,这把就密封包装起来,不能其他人用手去碰了,现在要进行指纹鉴定了,最好的方法就是copy一把一模一样的枪用来进行鉴定,因为可能有些鉴定手段会对枪上原有的指纹造成无法复原破坏,那现实的鉴定方法肯定是最大限度保持原有指纹不变。

2016-12-27 17:38:21 253

原创 工厂模式(创建型)

创建一个对象常常需要复杂的过程,不适合包含在一个复合对象中。创建对象可能导致大量的重复代码,可能会需要复合对象访问不到的信息,也可能提供不了足够级别的抽象,还可能并不是复合对象概念的一部分。工厂方法模式通过定义一个单独的创建对象的方法来解决这些问题。由子类实现这个方法来创建具体类型的对象。

2016-12-26 18:15:26 183

原创 单例模式(创建型)

单例模式的主要作用是保证在java程序中,某个类只有一个实例存在,许多时候整个系统只需要拥有一个的全局对象,这样有利于协调系统整体的行为。 一些管理器和控制器常被设计成单例模式,例如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象在通过这个单例对象获取这些配置信息;再比如android中的关于SystemSetti

2016-12-25 23:46:07 484

android增量更新

这是android增量更新demo

2017-02-08

空空如也

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

TA关注的人

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