自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Git的学习

Git概念:​ 是一个免费的、开源的分布式 版本控制系统。可以快速版本控制:​ 一种记录一个或若干文化内容变化,以便将来查阅特定版本修订情况的系统​ 好处:​ 可以将某个文件【甚至整个项目】回溯到之前的状态​ 可以比较文件的变化细节,并且可查看最后谁进行修改。版本控制的分类:​​ 集中化的版本控制系统 [SVN]通过一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到该服务器,取出最新的文件或者提交更新。缺点:中央服务器的单点故障。分布式

2021-08-27 00:39:19 205

原创 运行时数据区之堆

堆的核心概述  对一个进程而言是唯一的。一个进程对应一个JVM实例、一个JVM实例拥有一个运行时数据区,仅拥有一个堆结构,也是Java内存管理的核心区域。  Java堆区在JVM启动时便被创建,并且设定好了大小。是JVM中最大的一块内存空间(可调节)通过Java Visual JVM查看 通过 -Xms…m -Xmx…m  堆在物理上可以存在不连续的内存空间,但逻辑上应当视为连续的。  所有线程共享堆。堆还能划分为

2021-08-01 22:02:37 188

原创 本地方法接口

什么是本地方法?​ 就是一个Java调用非Java代码的接口。即本地方法(Native Method)的实现由非Java语言实现。在定义一个本地方法时,并不由Java提供实现,因为实现是由非Java语言在外部实现。作用:​ 融合不同的编程语言位Java所用。为什么需要本地方法?​ 1.与Java环境外的交互​ 有时候Java需要与Java环境外的环境交互【主要原因】。Java需要与一些底层系统,如操作系统或硬件交换信息的情况。本地方法便是一种提供非常简洁的接口,并且使我们无需了解.

2021-07-20 14:04:58 121

原创 本地方法栈

​ 本地方法栈用于管理本地方法的调用。​ 生命周期:与线程一致,属线程私有。​ 允许被实现成固定或可动态扩展的内存大小。​ 具体做法:本地方法栈登记native方法,在Execution Engine 执行时加载本地方法库。当某个线程调用一个本地方法时,它就进入一个全新且不再受JVM限制的世界。​ -本地方法可以通过本地接口来访问JVM的运行时数据区​ -甚至可以直接使用本地处理器的寄存器​ -直接从本地内存的堆中分配任意数量的内存​ 由于JVM规范并没有明确要求本地方法栈的使用语言、实

2021-07-20 14:02:11 774

原创 Mybatis

 一种持久层框架。支持定制化SQL、存储过程以及高级映射。 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。 支持简单的XML或注解来配置和映射原生类型、接口和java的POJO为数据库中的记录。  如何获取Mybatis?<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency> <groupId>org.mybatis</groupId&gt

2021-07-15 20:30:48 152

原创 运行时数据区之虚拟机栈

概述 Java虚拟机栈(Java Virtual Machine Stack)。每个线程在创建时都会创建一个虚拟机栈,用来保存一个个栈帧,对应着一次次的Java方法调用。 生命周期:  虚拟机栈是每个线程私有的,因此生命周期与线程一致 作用:  管理Java程序的运行,虚拟机栈保存方法的局部变量、部分结果,并参与方法的调用和返回。 优点:  1.是一种快速有效的分配存储方式,访问速度仅次于 程序计数器  2.不存在垃圾回收机制(由于操作仅支持pop、push) 开发常见异常:

2021-07-15 01:09:48 2072 1

原创 运行时数据区之PC寄存器

运行时数据区 内部结构: 其中有些是随着虚拟机的启动而创建,随着虚拟机退出而销毁。还有一些是与线程相对应的,随着线程的开始与结束而创建或销毁。 程序计数器、虚拟机栈、本地方法栈都属于每个线程私有的 方法区、堆是属于多个线程共享 程序计数器 PC寄存器(Program Counter Register)中,寄存器存储指令相关的现场信息。 作用 1.程序计数器用来存储指向下一条指令的地址,即将要执行的指令代码。【由执行引擎读取下一条指令】 程序计数器是一个占用小的内存空间,也是运行速度

2021-07-15 00:55:22 156 1

原创 类加载器 && 双亲委派机制

类加载器 整体作用:  1.类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。  2.ClassLoader只负责class文件的加载,执行则由Execution Engine决定  3.加载的类信息存放在方法区的内存空间,除了类信息外,方法区还会存放运行时常量池的信息,可能还包括字符串字面量和数字常量 类加载过程 类加载流程图 类加载过程一:Loading 1.通过一个类的全限定名获取定义此类的二进制字节流 2.将这个字节流所

2021-07-12 15:21:22 76

原创 JVM的学习

 java虚拟机,二进制字节码的运行环境,负载装载字节码到其内部,解释、编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。  特点:  一次编译,到处运行  自动内存管理  自动垃圾回收功能 JVM整体结构 简略图 详细图 流程: Class files =》 类装载器子系统 == 加载到内存当中,生成CLASS类 ==》 运行时数据区 == 实例与各个分区相联系 ==》 执行引擎(解释

2021-07-12 15:15:27 53

原创 职责链模式(Chain of Responsibility Pattern)

学校OA系统的采购审批项目: 需求是  1.采购员采购教学器材  2.如果金额小于等于5000,由教学主任审批  3.如果金额小于等于10000,由院长审批  4.如果金额小于等于 30000, 由副校长审批  5.如果金额超过30000,由校长审批 传统方案: 碰到金额,根据数目调用相对应的采购员传统方案解决 OA 系统审批问题分析 1.传统方式是 :接收到一 个采购请求后,根据采购金额来调用对应的 Approver ( 审批人 完成审批)。 2.传统方式的问题分析

2021-07-11 12:53:06 160 1

原创 策略模式(Strategy Pattern)

鸭子问题​  1.有各种各样的鸭子,eg:野鸭,北京鸭,水鸭​  2.鸭子有各种行为:叫、飞行​  3.显示鸭子信息 传统方案Duck 野鸭 北京鸭 水鸭传统的方式实现的问题分析和解决方案 1.其它鸭子,都继承了 Duck 类,所以 fly 让所有子类都会飞了,这是不正确的 2.上面说的1的问题,其实是继承带来的问题:对类的局部改动,尤其超类的局部改动,会影响其他部分,容易引起溢出效应。 3.为了改进1问题,我们可以通过覆盖fly方法来解决 => 覆盖解决&

2021-07-11 12:47:45 154 1

原创 状态模式(State Pattern)

抽奖问题 1.每参加一次抽奖需要50积分,中奖概率10% 2.奖品数量有限,没有即止 3.抽象由4个状态:可以抽奖、不能抽奖、发放奖品、奖品领完。状态模式 状态模式:它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类状态模式结构 1.上下文 (Context) 保存了对于一个具体状态对象的引用, 并会将所有与该状态相关的工作委派给它。 上下文通过状态接口与状

2021-07-11 12:43:20 98 1

原创 解释器模式

四则运算问题计算a+b-c 要求:  先输入表达式的形式,eg:a+b+c-d+e,并且字母不可重复  分别输入 a,b,c,d,e  计算出结果 传统方案 编写方法,来接受根据数据输入的数值进行解析,得出结果​>问题分析: 如果加入新的运算符,比如 * /。 则不利于扩展,另外让一个方法来解析会造成程序结构混乱 解释器模式 1.在编译原理中一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法分析树,最终形成一颗抽象的

2021-07-10 12:08:19 106 1

原创 备忘录模式

游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战 Boss 前保存自 身的状态攻击力和防御力当大战 Boss 后攻击力和防御力下降, 从备忘录对象恢复到大战前的状态 传统方案对象 <-> 对象状态对象 <-> 对象状态对象 <-> 对象状态传统方式的问题分析 1.一 个对象,就对应一个保存对象状态的对象, 这样当我们游戏的对象很多时,不利于管理,开销也很大 2.传统的方式是简单地做备份(new 出另外一个对象出来),再把需要备份的数

2021-07-10 12:05:36 102 2

原创 中介者模式

智能家庭 智能家居有许多。当你起床时,你希望各个设备能够协同做一些事情。 比如:闹钟响起->音响播放音乐->空调关闭 传统方案:问题: 当有多种电器时,相互之间的调用关系会比较复杂。不利于松耦合。 各个对象之间传递的内容容易混乱 当系统中途增加一个电器对象,或者执行流程改变,则需要改动代码较大,不利于系统的可维护性、扩展性。 中介者模式 用一个中介对象来封装一系列的对象交互。则中介者可以使各个对象不需要显示地相互引用,从而松耦合,又可以独立地改变它

2021-07-10 12:01:52 66 1

原创 观察者模式

天气预报: 1.天气站可以将每天测量的温度,湿度,气压等等以公告的形式发布出去 2.如果设置开放型API,则第三方的应用也可接入气象站获取数据 3.提供温度、气压和适度的接口。 4.测量数据更新时,要实时的通知第三方 普通方案1:​  通过getxxx的方法,直接让第三方接入,并获取相关信息。​  当数据变化时,气象站使用dataChange()来更新数据。那么第三方再次获取时,就能得到最新数据。 普通方案2: 当dataChange时,则通知给第三方的upda

2021-07-10 11:58:00 120

原创 迭代器模式

展示学校院系系统 展示学校院系系统,展示一个学校要多少学院、一个学院有多少个系。 迭代器模式 提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要指导集合对象的底层。 当我们集合元素是用不同的方式实现,比如数组、集合类等,当客户端需要遍历时,便会使用多种迭代方法,则容易暴露元素的内部结构,此时便可考虑迭代器模式 迭代器模式结构 1.迭代器 (Iterator) 接口声明了遍历集合所需的操作: 获取下一个元素、 获取当前位置和重新开始迭代等。 2.具体迭代器

2021-07-09 15:47:28 61

原创 访问者模式

评测系统的需求 当电影播放完后,通常人们都会对其进行评价。评价有三种状态:成功、失败、待定。而观众分为男人、女人。 传统方案 Person  ->Woman  ->Man 问题: 若要增加新功能时,对代码改动较大。 扩展性不好,比如增加新的人员类型,新的管理方法。 访问者模式 封装一些作用于某种数据类型的各元素的操作,它可以在不改变的前提下定义作用于这些元素的新操作。 主要将数据结构与数据操作分离,有利于解决数据结构和操作耦合性的问题

2021-07-09 15:44:23 65

原创 命令模式的学习

智能生活需求:​  每个品牌都有着各自的智能家居。而你想操作不同牌子的智能家居只能通过不同品牌的App进行控制。​  我们能否通过一个App就可以控制全部的智能家居。这便要求每个智能家具厂家提供一个统一接口给App调用。 命令模式​  在软件设计中,经常需要向某些对象发生请求,但是并在不知道接收者是谁,也不知道被请求的操作是哪个,那么我们只需要在程序运行时指定具体的请求接收者即可。​  它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参

2021-07-09 15:39:56 106

原创 模板方法的学习

豆浆制作问题​  1.流程:选材 添加配料 浸泡 放入豆浆机搅碎​  2.通过添加不同的配料,可以制作不同口味的豆浆​  3.其中选材、浸泡、放入豆浆机搅碎对于制作每一种口味的豆浆机都是一致的。​模板方法模式​  公开它方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类定义的方式进行。​  即定义了一个操作中的算法骨架,将一些步骤的实现延迟给子类,使得子类可以在不改变一个算法的结构,便可定义某些特定步骤。 模板方法模式结构 1.抽象类 (Abstract­Cla

2021-07-09 15:35:56 75

原创 代理模式的学习

应用例子:​ 一个老师请假了,需要一个代课老师。代理模式 让你能够提供对象的替代品或其占位符。 代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理。即通过代理对象访问具体目标对象。​分类: 静态代理 动态代理(JDK代理、接口代理)  Cglib代理(可以在内存动态创建,而不需要实现接口) 代理模式结构 1. 服务接口 (Service Interface) 声明了服务接口。 代理必须遵循该接口才能伪装成服务对象。 2. 服务(Service)

2021-07-08 12:35:01 96

原创 享元模式的学习

展示网站项目​  给客户A做了一个产品展示网站,客户A的朋友感觉效果不错,但是需求不同。==》有人希望以博客的形式,或者微信公众号的形式发布 传统方案存在的问题:  因为需要的网站结构相似度高,并且都不属于高访问量的项目,若分成多个虚拟空间处理,则相当于一个相同网站的实例对象被创建了很多,造成服务器的资源浪费。  解决思路:整个到一个网站,共享相关的代码和数据。 享元模式​  摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状态,

2021-07-08 11:55:49 51

原创 外观模式的学习

家庭影院管理项目:​ 当你想看电影时,你需要 开爆米花机->开投影仪->开机顶盒选择电影->拿爆米花->调低灯光->播放->结束后,关闭各种设备。传统模式​​   通过main来创建各大对象,使用一系列方法。问题:​  创建许多的对象,并调用相关方法,容易造成调用过程混乱,没有清晰的过程。​  不利于在main中维护系统的操作解决思路:定义一个高层接口,给子系统一组接口提供一致的界面。例如:对智能AI说 我要看电影,于是机器开始运行。等电影结束了,便关

2021-07-07 15:00:18 105

原创 组合模式的学习

学校院系展示在一个页面展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。传统方案​ ​ 根据组织大小分层次。​ 但该方案不好实现对学校、系的添加、删除、遍历等。解决方案:把学校、院、系都看作组织结构,他们不是继承关系,而是树形结构,可以更好地实现管理操作。=》组合模式组合模式​ 创建了对象组的树形结构,将对象组合成树状结构以表示 整体-部分的层次关系。​ 该模式使得用户对单个对象和组合对象的访问具有一致性。使客户能让一致的方式处理个别对象以及组合对象。组合模式结构1.组件 (

2021-07-07 13:57:06 134

原创 装饰者模式

咖啡订单项目:​ 咖啡种类:Espresso、ShortBlack、LongBlack、Decaf​ 调料:Mike、Soy、Chocolate​ 要求:在拓展新咖啡种类时,具有较好的扩展性、改动方便、维护方便​ 使用OO的方式计算不同种类的费用,可有单点,也可单点+调料组合方案1:​ ​   Drink:抽象类,表示饮料​     description:对咖啡的描述,不然咖啡的名字​     cost():计算费用,由具体实现类实现。​ 问题:​   该设计需要许多

2021-07-07 11:55:57 75

原创 桥接模式的学习

手机操作问题:​  现在不同的手机会装载不同的系统来实现操作(开机、关机)  eg:​   手机​     小米 -> MIUI​     OPPO->COLORS​     ONEPLUS ->COLORS/H2OS​     … 传统方案解决手机操作问题​ 存在问题:​   1.拓展问题,容易类爆炸。即当我们需要添加新品牌,及其以下的系统时,则就要新建相对的类。​   2.违反了单一职责原则,当我们添加一个手机品牌时,可能会有增加许多的系统。增加了

2021-07-06 15:14:34 66

原创 适配器模式

手机充电问题  想给手机充电,家用电的220V交流电则需要转换成适配司机的5V,则充电器充当了适配器。 适配器模式 适配器模式 会将某个类的接口转换成客户期望的另一个接口表示,主要目的是兼容性。 ​ 让原本因接口不匹配不能工作的两个类可以协同工作。别名为包装器 适配器模式结构 类适配器 这一实现使用了继承机制: 适配器同时继承两个对象的接口。 注:Java中可以继承一个类,实现另外一个接口。 类适配器不需要封装任何对象, 因为它同时继承了客户

2021-07-06 14:49:56 106

原创 UML类图

UML​ ​ 分类:​  ​1.用例图​​  ​ 2.静态结构图:类图、对象图、包图、组件图、部署图​  ​ 3.动态行为图:交互图(时序图与协作图)、状态图、活动图​ UML类图​ 代码形式:public class Person{ private Integer id; private String name; public void setName(String name){this.name=name;} public String getName(){re

2021-07-05 14:23:32 119

原创 原型模式&clone的学习

克隆羊问题: 有一只名叫Tom,年龄为1,毛为白色的羊。请编写程序创建和Tom羊属性完全一致的10只羊。 传统方法:代码:public class Sheep { private String name; private int age; private String color; public Sheep(String name, int age, String color) { this.name = name; t

2021-07-05 13:16:59 108

原创 建造者模式

盖房子的需求:​  1.建造房子的过程:打桩、砌墙、封顶​  2.房子是多样的,有普通房、高楼、别墅等。虽然过程一样,但是要求是不同的 传统的方法:问题:​  设计的程序结构过于简单,并没有缓存层对象,致使程序的扩展和维护不好。产品和创建房子的过程封装在一起,耦合性较强。 建造者模式​  又叫生成器模式(Builder)​  它可以分步骤创建复杂对象,该模式允许你使用相同的创建代码生成不同类型和形式的对象。 建造者模式结构图​  1.生成器 (Bu

2021-07-05 12:53:50 69

原创 工厂方法模式&&抽象工厂模式

披萨项目​披萨的项目:便于披萨种类的扩展。​  1. 披萨的种类很多​  2.披萨的制作流程有 prepare bake cut box  3.完成披萨店订购功能 起初的构思:​ 首先 客户通过向披萨店订购。然后披萨店根据类型做相对应的披萨。类图代码:Pizza类public abstract class Pizza { protected String name; public abstract void prepare(); public v

2021-07-04 14:12:28 142

原创 单例模式的学习

单例模式 ​  对某些类只允许存在一个对象实例,并且提供一个取得其对象实例的方法【静态方法】 Java中的体现:​  1.在类中添加一个私有静态成员变量用于保存单例实例。​  2.声明一个公有静态构建方法用于获取单例实例。​  3.在静态方法中实现"延迟初始化"。 该方法会在首次被调用时创建一个新对象, 并将其存储在静态成员变量中。 此后该方法每次被调用时都返回该实例。​  4.将类的构造函数设为私有。 类的静态方法仍能调用构造函数, 但是其他对象不能调用。​  5

2021-07-04 13:30:36 84

原创 设计模式的原则

概述  设计模式是对软件设计种普遍存在(反复出现)的各种问题,所提出的解决方案。 目的  ​ 提高代码重用性,可读性、可拓展性、可靠性。  ​ 使程序呈现高内聚、低耦合的特性。设计原则  1.单一职责原则​   对类来说,一个类应该只负责一项职责。​   注:通常,应当遵循该原则。类中方法足够少时,可以在方法层级保持单一职责原则。 ​  2.接口隔离原则  ​ 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小

2021-07-04 13:00:43 55

原创 Filter&Listen

过滤器 Filter​ 当访问服务器的资源时,过滤器可以将请求拦截下来,完成开发者所达成的效果。​ eg: 处理中文乱码、登录验证…开发步骤​ 编写过滤器​ a.实现接口 implements Filter(import javax.servlet.Filter; !!!!)​ b.实现方法​ c.配置拦截路径eg:解决中文乱码Filter.classpublic class FilterDemo implements Filter { //初始化 publ

2021-06-02 15:46:52 58

原创 JSP的相关知识

JSPJava Server Pages:java服务端页面​ 本质上还是Servlet,只是简化了许多。需要导入依赖pom.xml<!--Servlet--><dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version&

2021-06-02 15:46:15 51

原创 Cookie&Seesion

Cookie&Seesion​ Seesion (会话):用户打开浏览器,点击网页,访问web资源,关闭浏览器的过程​ 有状态的会话:带Cookie的访问Cookie讲解​ 客户端技术 ->响应、请求​ 从请求中拿到Cookie信息​ 服务器响应给客户端相关方法public Cookie(String name, String value) //构方Cookie[] getCookies() //获取CookiegetName //获取cookie的keygetValu

2021-06-02 15:45:09 62

原创 Servlet

Servlet​ 用于开发动态web的技术。​ 是一个接口,定义了Java被浏览器访问到的规则。​ 步骤:​ 编写类,实现Servlet接口​ 把已完成的java类部署至web服务器Servlet接口​ 有两个实现类 HttpServlet GenericServlet​ 通常需要重写doPost、doGet​ eg:​ 1.构建Maven项目。​ 2.prom.xml<?xml version="1.0" encoding="UTF-8"?><proje

2021-06-02 15:43:56 51

原创 Maven

Maven​ 在开发中,会需要大量的jar包。手动导入,有时太累赘。​ 故Maven 可以自动帮助我们导入和配置jar包。Maven项目架构管理工具​ 核心思想: 约定大于配置​ Maven会制定规则,指引我们规范操作。​ 配置环境变量​ M2_HOME maven目录的bin目录​ MAVEN_HOME maven的目录​ path => %MAVEN_HOME%\bin修改配置文件镜像配置 mirrors国内建议使用 阿里云镜像 有利于下载速度的提升。 <!-

2021-06-02 15:42:35 53

原创 HTTP的相关操作

HTTP​ 超文本传输协议,是一个简单的请求-响应协议,通常运行在TCP上。HTTP请求​ 客户端向服务器发请求请求行Request URL: //请求地址Request Method: //请求方法Status Code: //状态码Remote Address: //远程地址​ 请求方式:GET、POST、HEAD、DELETE、PUT、TRACT…​ get:请求的参数比较少,限制大小。会在URL地址中显示,不安全但高效​ post:请求参数没限制,不限制大小

2021-06-02 15:41:41 51

原创 Tomcat

Tomcat详解bin 启动,关闭的相关脚本conf 配置lib 依赖的jar包logs 日志tempwebapps 存放网站works默认端口号:8080​ 可以在核心配置文件(conf/server.xml)修改<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />​ 配置主机名

2021-06-02 15:40:55 45

空空如也

空空如也

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

TA关注的人

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