自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 多线程切换消耗

多线程切换消耗

2022-12-05 08:26:44 468

原创 java操作xlsx文件

import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import

2022-04-21 11:41:47 1441

原创 Java参数列表的值传递与引用传递

class Value{ public int i=15; } public class Test{ public static void main(String argv[]){ Test t=new Test( ); t.first( ); } public void first( ){ int i=5; Value v=new Value( ); v.i=25; second(v,i); System.

2020-09-05 23:34:16 408

原创 Tomcat专题

一、Tomcat基础 1. web服务器 (1)概念: 1)服务器:安装了服务器软件的计算机。 2) 服务器软件:接收用户的请求,处理请求,做出响应。 3)web服务器软件:接收用户的请求,处理请求,做出响应。 在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目。 (2)常见的web服务器软件 1)webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。 2)webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,

2020-09-05 09:37:12 398

原创 MySQL锁机制

一、MyISAM的锁机制(表锁) 在MyISAM中,当前会话查询一个表中的数据时,会将该表设置为读锁,当前会话可以查询表中的数据,但不能修改,也不能对其他表进行操作,需要提交后即可;其他会话也可以查询该表的数据,但不能修改该表的数据,但是可以对其他表进行操作。 在当前会话中,如果修改表中的数据,会将该表设置为写锁,当前会话可以查询表中的数据,也可以对表中的数据进行操作,但是不能对其他表进行操作,需要提交后即可;其他会话不能对该表进行查询的操作,如果进行了查询,处于阻塞状态,需要等待第一个会话提交后方可查询。

2020-09-03 11:18:20 231

原创 JVM底层剖析

1.Jdk其中就是包含了一些支撑java程序运行时的类库和jvm。 2.Java跨平台性体现了java编译后的字节码文件(.class)在jvm上运行,而jvm可以从软件层面屏蔽不同操作系统在底层硬件和指令上的区别。也就是说jvm可以在不同的操作系统中运行。 3.jvm的组成部分 当我们的字节码文件被运行的时候,会在jvm中的第一个部分(类装载子系统),之后会被放入到第二个部分(运行时数据区),最后会在第三部分执行(字节码执行引擎)。 蓝色块(线程栈、本地方法栈、程序计数器)是线程私有的部分,每个线程都有

2020-08-30 20:51:50 237

原创 MySQL索引优化

一、索引单表优化 建立一个组合索引时,当where后的字段都匹配上了该索引的字段,但是中间的字段出现了范围的查找,该索引失效,出现using filesort(内部排序);范围查找换成精准查找之后,索引有效。 解决方法: 范围查找的字段不建立索引,只建立前后两个字段的组合索引,则type变为ref,Extra中的Using filesory也消失了,结果非常理想。 二、索引两表优化 不加索引的情况: 在右表的连接字段上加索引: 此时右表的type为ref,rows为1。 在左表的连接字段上加索引:

2020-08-30 20:36:37 419

原创 MySQL中的explain的使用(详解)

explain的使用介绍 使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MYSQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。 执行计划包含的信息: 1. id字段:(表的读取顺序) 含义:select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。 三种情况: (1) id相同,执行顺序由上至下。(mysql内部优化器进行排序) (2)id不同。如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行。 (3)id相同不同,

2020-08-30 14:54:19 1115

原创 Java中重写equals方法为什么还要重写hashcode方法?

一、重写equals方法,还要重写hashcode就是要保证当两个对象equals的时候也要保证两者的hashcode值是一样的。 为什么要这么做?下面有俩个原则要知道: 1.两个对象如果互相equals,那么他们的hashcode值一定是相同的。 2.两个对象的hashcode值相同,他们不一定互相equals。 hashcode主要用于在HashMap、HashSet、HashTable等进行key值的比较,如果你不重写hashcode只重写equals,当两个对象互相equals的时候,那么这两个对象

2020-08-28 16:35:12 221

原创 Java 实现在一个数组中,找出最多连续整数的个数是多少

方法1: public static int test(int[] arr) { Map<Integer, Integer> headMap = new HashMap<Integer,Integer>(); Map<Integer, Integer> tailMap = new HashMap<Integer,Integer>(); Set<Integer> set = new HashSet<Integer>();

2020-08-27 19:40:38 1011

转载 Java (==和equals)

链接

2020-08-27 19:38:01 154

原创 Java职责链模式

一、OA系统采购审批需求 学校OA系统的采购审批项目:需求是 采购员采购教学器材 如果金额 小于等于5000, 由教学主任审批 (0<=x<=5000) 如果金额 小于等于10000, 由院长审批 (5000<x<=10000) 如果金额 小于等于30000, 由副校长审批 (10000<x<=30000) 如果金额 超过30000以上,有校长审批 ( 30000<x) 请设计程序完成采购审批项目 传统方案解决OA系统审批问题分析 传统方式是:接收到一个采购请

2020-08-26 21:42:58 243

原创 Java策略模式

一、编写鸭子项目,具体要求如下 有各种鸭子(比如 野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如 叫、飞行等)。 显示鸭子的信息。 传统的方式实现的问题分析和解决方案 其它鸭子,都继承了Duck类,所以fly让所有子类都会飞了,这是不正确的。 上面说的1 的问题,其实是继承带来的问题:对类的局部改动,尤其超类的局部改动,会影响其他部分。会有溢出效应。 为了改进1问题,我们可以通过覆盖fly 方法来解决 => 覆盖解决。 问题又来了,如果我们有一个玩具鸭子ToyDuck, 这样就需要ToyDuck去

2020-08-25 08:40:55 268

转载 Java的NIO(New IO)

Java的NIO

2020-08-23 15:07:39 138

转载 Java的JUC笔记

JUC笔记

2020-08-22 15:44:53 170

原创 Java状态模式

一、先引出一个APP抽奖活动问题 请编写程序完成APP抽奖活动 具体要求如下: 假如每参加一次这个活动要扣除用户50积分,中奖概率是10% 奖品数量固定,抽完就不能抽奖 活动有四个状态: 可以抽奖、不能抽奖、发放奖品和奖品领完 活动的四个状态转换关系图 二、状态模式基本介绍 基本介绍 状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换。 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变

2020-08-22 15:07:09 353

原创 Java利用Condition控制线程通信完成线程按序交替

一、Condition控制线程通信 Condition 接口描述了可能会与锁有关联的条件变量。这些变量在用 法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的功能。需要特别指出的是,单个 Lock 可能与多个 Condition 对象关联。为了避免兼容性问题,Condition 方法的名称与对应的 Object 版本中的不同。 在 Condition 对象中,与 wait、notify 和 notifyAll 方法对应的分别是 await、signal 和 signalAll。 Co

2020-08-22 14:28:01 267

原创 Java解释器模式

一、四则运算问题 通过解释器模式来实现四则运算,如计算a+b-c的值,具体要求: 先输入表达式的形式,比如 a+b+c-d+e, 要求表达式的字母不能重复。 在分别输入a ,b, c, d, e 的值。 最后求出结果:如图 传统方案解决四则运算问题分析 编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果。 问题分析:如果加入新的运算符,比如 * / ( 等等,不利于扩展,另外让一个方法来解析会造成程序结构混乱,不够清晰。 解决方案:可以考虑使用解释器模式, 即: 表达式 -&g

2020-08-21 17:17:15 289

原创 Java实例化对象的过程

首先看一段代码: public class C { private int i = test(); private static int j = test1(); static{ System.out.println(1); } { System.out.println(2); } public C(){ System.out.println(3); } public int test() { System.out.println(4); return 1; } p

2020-08-21 10:10:04 297

原创 Java实现二叉树的前中后序遍历、查找和删除

public class BinaryTreeDemo { public static void main(String[] args) { //先需要创建一颗二叉树 BinaryTree binaryTree = new BinaryTree(); //创建需要的结点 HeroNode root = new HeroNode(1, "宋江"); HeroNode node2 = new HeroNode(2, "吴用"); HeroNode node3 = new HeroNo

2020-08-20 14:19:21 229

原创 Java备忘录模式

一、引出一个问题 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态。 传统方案解决游戏角色恢复 传统方法是每一个对象对应一个状态,类图如下: 传统的方式的问题分析 一个对象,就对应一个保存对象状态的对象, 这样当我们游戏的对象很多时,不利于管理,开销也很大.。 传统的方式是简单地做备份,new出另外一个对象出来,再把需要备份的数据放到这个新对象,但这就暴露了对象内部的细节。 解决方案: =

2020-08-20 11:29:38 214

原创 Java的静态代码块

看如下的代码输出结果: public class C { static{ System.out.println("c"); } public C(){ System.out.println("cc"); } } public class D extends C{ static{ System.out.println("d"); } public D(){ System.out.println("dd"); } } class F{ public static void ma

2020-08-19 19:48:44 135

原创 Java如何实现字符串的逆序。

实现逆序的方法有很多,其中有俩个比较经典,一个是利用StringBuffer中的reverse方法进行逆序的输出。第二个就是利用递归的方法实现逆序。代码如下: public static void main(String[] args) { String str = "abc"; System.out.println(reverse(str)); } public static String reverse(String originStr) { if(originStr ==

2020-08-19 19:42:37 1444

原创 Java中介者模式(Mediator Pattern)

一、智能家庭项目 智能家庭项目: 智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘 等。 主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为:闹铃响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放。 传统的方式的问题分析 当各电器对象有多种状态改变时,相互之间的调用关系会比较复杂 各个电器对象彼此联系,你中有我,我中有你,不利于松耦合. 各个电器对象之间所传递的消息(参数),容易混乱 当系统增加一个新的电器对象时,或者执行流程改变时,代码的可维护性

2020-08-10 18:51:53 161

原创 Java观察者模式(Observer)

一、天气预报项目需求,具体要求如下 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方)。 需要设计开放型API,便于其他第三方也能接入气象站获取数据。 提供温度、气压和湿度的接口。 测量数据更新时,要能实时的通知给第三方。 二、观察者模式解决天气预报需求 思路分析图解(类图): 观察者模式的好处 观察者模式设计后,会以集合的方式来管理用户(Observer),包括注册,移除和通知。 这样,我们增加观察者(这里可以理解成一个新的公告板),就不需要去修改核心

2020-08-09 19:26:10 350

原创 Java迭代器模式

一、看一个具体的需求 编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图: 传统的设计方案(类图): 传统的方式的问题分析: 将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的。 实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的遍历的操作。 解决方案:=> 迭代器模式 二、迭代器模式基本介绍 迭代器模式(Iterator

2020-08-08 10:31:38 273

转载 Java哈希表实现

import java.util.Scanner; public class HashTabDemo { public static void main(String[] args) { //创建哈希表 HashTab hashTab = new HashTab(7); //写一个简单的菜单 String key = ""; Scanner scanner = new Scanner(System.in); while(true) { System.out.p

2020-08-07 19:18:29 233

原创 Java访问者模式(Visitor Pattern)

一、完成测评系统需求 将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价 有不同的种类,比如 成功、失败 等)。 传统方案 传统方式的问题分析 如果系统比较小,还是ok的,但是考虑系统增加越来越多新的功能时,对代码改动较大,违反了ocp原则, 不利于维护。 扩展性不好,比如 增加了 新的人员类型,或者管理方法,都不好做。 引出我们会使用新的设计模式 ,访问者模式。 二、访问者模式基本介绍 访问者模式(Visitor Pattern),封装一些作用于某

2020-08-07 16:00:06 815

原创 Java斐波那契查找算法

import java.util.Arrays; public class FibonacciSearch { public static int maxSize = 20; public static void main(String[] args) { int [] arr = {1,8, 10, 89, 1000, 1234}; System.out.println("index=" + fibSearch(arr, 189));// 0 } //因为后面我们mid=low+F(

2020-08-06 19:25:44 244 2

原创 Java命令模式(Command Pattern)

一、看一个具体的需求 我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装app就可以控制对这些家电工作。 这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个App,分别控制,我们希望只要一个app就可以控制全部智能家电。 要实现一个app控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给app调用,这时 就可以考虑使用命令模式。 命令模式可将“动作的请求者”从“动作的执行者”对象中解耦出来.。 在我们的例子中,动作的请求者是手机app,动作的执行者是每个厂商

2020-08-06 13:51:46 315

原创 Java模板方法模式

一、引出一个豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎。 通过添加不同的配料,可以制作出不同口味的豆浆。 选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的。 请使用 模板方法模式 完成 (说明:因为模板方法模式,比较简单,很容易就想到这个方案,因此就直接使用,不再使用传统的方案来引出模板方法模式 )。 二、模板方法模式基本介绍 模板方法模式(Template Method Pattern),又叫模板模式

2020-08-05 18:43:44 461

原创 Java代理模式(Proxy)

一、代理模式的基本介绍 代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象 代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK代理、接口代理)和 Cglib代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴) 。 二、静态代码模式的基本介绍 静态代理在使用时,需要定义接口或者父类

2020-08-04 14:06:16 323

原创 Java享元模式

一、展示网站项目需求 小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同: 有客户要求以新闻的形式发布。 有客户人要求以博客的形式发布。 有客户希望以微信公众号的形式发布。 二、传统方案解决网站展现项目 直接复制粘贴一份,然后根据客户不同要求,进行定制修改。 给每个网站租用一个空间。 方案设计示意图。 传统方案解决网站展现项目-问题分析 需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来处理,相当于一个相同网站的

2020-08-03 21:49:01 286

原创 Java外观模式(Facade)

一、引出一个组建一个家庭影院问题: 家庭影院中有DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为: • 直接用遥控器:统筹各设备开关 • 开爆米花机 • 放下屏幕 • 开投影仪 • 开音响 • 开DVD,选dvd • 去拿爆米花 • 调暗灯光 • 播放 • 观影结束后,关闭各种设备 二、利用传统的方法解决影院管理 传统方式解决影院管理问题分析 在ClientTest 的main方法中,创建各个子系统的对象,并直接去调用子系统(对象) 相关方法,会造成调用过程混乱

2020-08-02 16:17:08 281

原创 Java组合模式

一、先看一个学校院系展示需求 编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图: 二、用传统的方法展示(类图) 传统方案解决学校院系展示存在的问题分析 将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的。 实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,遍历等。 解决方案:把学校、院、系都

2020-08-02 10:35:39 585

原创 Java装饰者模式

一、先引出一个星巴克咖啡订单项目(咖啡馆)的问题: 咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)。 调料:Milk、Soy(豆浆)、Chocolate。 要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便。 使用OO的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合。 二、利用方案1-解决星巴克咖啡订单问题分析 类图: 方案1-的问题分析 Drink 是一个抽象类,表示饮料。 d

2020-08-01 09:52:50 179

原创 Java桥接模式

一、先提出一个问题: 针对上面的问题传统的解决方法(类图)如下: 二、传统方案解决手机操作问题分析 扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。 违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本。 解决方案就是使用桥接模式。 三、桥接模式(Bridge)基本介绍 桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。

2020-07-31 20:02:24 201

原创 Java类适配器模式(接口适配器)

一、接口适配器模式介绍 一些书籍称为:适配器模式(Default Adapter Pattern)或缺省适配器模式。 当不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可有选择地覆盖父类的某些方法来实现需求。 适用于一个接口不想使用其所有的方法的情况。 代码示例: public interface Interface4 { public void m1(); public void m2(); public void

2020-07-31 16:05:49 892

转载 Java 内部类,成员类,局部类,匿名类

链接

2020-07-31 15:58:52 135

原创 Java类适配器模式(对象适配器)

一、对象适配器模式介绍 基本思路和类的适配器模式相同,只是将Adapter类作修改,不是继承src类,而是持有src类的实例,以解决兼容性的问题。 即:持有 src类,实现 dst 类接口,完成src->dst的适配。 根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系。 对象适配器模式是适配器模式常用的一种。 二、使用对象适配器完成上一篇文章的问题 代码: //被适配的类 public class Voltage220V { //输出220V的电压 public int outpu

2020-07-30 20:32:06 702

空空如也

空空如也

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

TA关注的人

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