- 博客(31)
- 收藏
- 关注
原创 Java设计模式之结构型:装饰器模式
当需要对类的功能进行拓展时,一般可以使用继承,但如果需要拓展的功能种类很繁多,那势必会生成很多子类,增加系统的复杂性,并且使用继承实现功能拓展时,我们必须能够预见这些拓展功能,也就是这些功能在编译时就需要确定了。那么有什么更好的方式实现功能的拓展吗?答案就是装饰器模式。装饰器模式可以动态给对象添加一些额外的职责从而实现功能的拓展,在运行时选择不同的装饰器,从而实现不同的行为;比使用继承更加灵活,通过对不同的装饰类进行排列组合,创造出很多不同行为,得到功能更为强大的对象;符合“开闭原则”,被装饰类与装饰类独立
2022-06-21 11:20:38 235
原创 Java设计模式之结构型:代理模式
代理模式的设计动机是通过代理对象来访问真实对象,通过建立一个对象代理类,由代理对象控制原对象的引用,从而实现对真实对象的操作。在代理模式中,代理对象主要起到一个中介的作用,用于协调与连接调用者(即客户端)和被调用者(即目标对象),在一定程度上降低了系统的耦合度,同时也保护了目标对象。但缺点是在调用者与被调用者之间增加了代理对象,可能会造成请求的处理速度变慢。小时候你看到一个玩具,想让父母买,但是父母不会轻易给你买,这时候你就需要做点家务让父母开心才能拥有自己的小玩具。首先就是父母类:然后是抽象主题,做家
2022-06-21 10:30:42 100
原创 Java设计模式之创建型:单例模式
单例模式可以确保系统中某个类只有一个实例,该类自行实例化并向整个系统提供这个实例的公共访问点,除了该公共访问点,不能通过其他途径访问该实例。单例模式的优点在于:单例模式有以下特点:(1)单例类只能有一个实例;(2)单例类必须自己创建自己的唯一实例;(3)单例类必须给所有其他对象提供这一实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例,这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个
2022-06-20 14:43:09 295
原创 Java设计模式之创建型:建造者模式
建造者模式将复杂产品的创建步骤分解在在不同的方法中,使得创建过程更加清晰,从而更精确控制复杂对象的产生过程;通过隔离复杂对象的构建与使用,也就是将产品的创建与产品本身分离开来,使得同样的构建过程可以创建不同的对象;并且每个具体建造者都相互独立,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。但建造者模式的缺陷是要求创建的产品具有较多的共同点、组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式。同时如果产品的内部变化复杂,可能会导致需要定义很多
2022-06-20 11:09:45 183
原创 简单工厂模式
最近买了一本《大话设计模式》,准备好好了解一下设计模式,然后把自己的感受记录一下。什么是简单工厂模式工厂负责生产,程序里的工厂就是负责生产类的实例,简单工厂实现只需一个类即可,通过公开一个方法,根据传入的相应参数,返回相应的实例,使代码不直接依赖于具体的实现类,从而实现解耦。官方语言比较难以理解,下面就看一下书上的代码以及UML图:Operation 类(用于接收数字以及拥挤继承的方法)public class Operation { private double numA
2021-08-24 16:07:03 95
原创 树状排序(目录结构)
前几天碰到了一个小问题是关于数据库取出数据然后弄成树状结构类似于目录,首先想到的是递归,于是自己就做了个小demo来测试这个功能。 实体类@Datapublic class CategoryPojo { private int id; private String categoryName;//名称 private int parentId;//父类id private List<CategoryPojo> nodes=ne...
2021-03-30 19:43:58 743
转载 Java实现八大排序算法
本文对常见的排序算法进行了总结。常见排序算法如下:直接插入排序希尔排序简单选择排序堆排序冒泡排序快速排序归并排序基数排序稳定与非稳定:如果一个排序算法能够保留数组中重复元素的相对位置则可以被称为是 稳定 的。反之,则是 非稳定 的。直接插入排序基本思想通常人们整理桥牌的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置。在计算机的实现中,为了要给插入的元素腾出空间,我们需要将其余所有元素在插入之前都向右移动一位。算法描述一般来说,插入排序都采用in-place在数组上实现。具体
2021-03-15 19:31:48 1561
原创 JAVA插入排序
算法描述一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:1.从第一个元素开始,该元素可以认为已经被排序;2. 取出下一个元素,在已经排序的元素序列中从后向前扫描;3.如果该元素(已排序)大于新元素,将该元素移到下一位置;4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;5. 将新元素插入到该位置后;6. 重复步骤2~5。在这里插入代码片public static void main(String[] args) { int[] ar
2020-12-17 10:16:39 104
原创 JAVA选择排序
算法描述n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:1.初始状态:无序区为R[1…n],有序区为空;2.第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1…i-1]和R(i…n)。该趟排序从当前无序区中-选出关键字最小的记录R[k],将它与无序区的第1个记录R交换,使R[1…i]和R[i+1…n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;3.n-1趟结束,数组有序化了public static void mai
2020-12-17 09:54:40 113
原创 JAVA冒泡排序
今天写一下好久没用过但是很经典的冒泡排序/** * 冒泡排序. * * 假如有N个数,是无序的 * 1.从第一个数开始和后面N-1的数比较,发现有比自己小的就交换位置 * 2.从第二个数开始和后面N-2的数比较,同样发现有比自己小的就交换位置 * 直到N-1结束. * * * @author qinge * */public class BubbleSort { public static void main(String[] args) { // 数组元 i
2020-12-16 09:35:01 124
原创 Dubbo + Zookeeper 简单搭建
1.项目整体2.首先创建一个parent项目,然后把中间所有的东西东删掉3.partents的pom文件<modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId>
2020-10-18 17:20:23 259
原创 小程序二维码(扫描二维码到小程序页面)
最近公司有在做一款APP和小程序,里面有一个扫一扫调到小程序页面的功能,所以就写了下面的一些内容,记录一下:public class QrCodeUtils { public static String decodeQrcode(BufferedImage image) throws NotFoundException { MultiFormatReader formatReader = new MultiFormatReader(); BinaryBitmap
2020-09-14 16:44:15 549
原创 搭建一个简单的SpringBoot项目
一、创建项目1.File->new->project;2.选择“Spring Initializr”,点击next;.完善项目信息,组名可不做修改,项目名可做修改;最终建的项目名为:test,src->main->java下包名会是:com->example->test;点击next;4.Web下勾选Spring Web Start ;Template Englines勾选Thymeleaf;SQL勾选:MySQL Driver,JDBC AP
2020-08-18 19:07:20 950
原创 JVM 第五节:JVM 性能优化(上)
内存溢出内存溢出的原因:程序在申请内存时,没有足够的内存空间栈溢出方法死循环递归调用(StackOverflowError)、不断建立线程(OutOfMemoryError)堆溢出不断创建对象,分配对象大于最大堆的大小(OutOfMemoryError)直接内存JVM 分配的本地直接内存大小大于 JVM 的限制(可以通过-XX:MaxDirectMemorySize 来设置(不设置的话默认与堆内存最大值一样,也会出现OOM 异常)方法区溢出在经常动态生产大量 Class 的应用中,CGL
2020-07-06 13:32:19 151
原创 JVM第四节:JVM 执行子程序
Class 文件结构计算机只认识 0 和 1,这个称之为本地机器 NativeCodeJvm 的无关性与平台无关性是建立在操作系统上,虚拟机厂商提供了许多可以运行在各种不同平台的虚拟机,它们都可以载入和执行字节码,从而实现程序的“一次编写,到处运行” https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode)
2020-07-03 17:17:08 187
原创 JVM第三节:垃圾回收算法与垃圾回收器
学习垃圾回收的意义Java 与 C++等语言最大的技术区别:自动化的垃圾回收机制(GC)为什么要了解 GC 和内存分配策略1、面试需要2、GC 对应用的性能是有影响的;3、写代码有好处栈:栈中的生命周期是跟随线程,所以一般不需要关注堆:堆中的对象是垃圾回收的重点方法区/元空间:这一块也会发生垃圾回收,不过这块的效率比较低,一般不是我们关注的重点判断对象的存活引用计数法给对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收。(P
2020-07-03 13:35:55 163
原创 JVM第二节:JVM 中的对象
虚拟机中的对象对象的分配虚拟机遇到一条 new 指令时:根据 new 的参数是否能在常量池中定位到一个类的符号引用,如果没有,说明还未定义该类,抛出 ClassNotFoundException;1)检查加载先执行相应的类加载过程。如果没有,则进行类加载2)分配内存根据方法区的信息确定为该类分配的内存空间大小指针碰撞 (java堆内存空间规整的情况下使用)接下来虚拟机将为新生对象分配内存。为对象分配空间的任务等同于把一块确定大小的内存从 Java 堆...
2020-06-19 10:53:20 151
原创 JVM第一节:内存结构
为什么要了解虚拟机JVM 不单单只支持 Java 语言,也支持其他语言(Scala、Kotlin、Groovy 等等) 区块链 2.0--以太坊(比特币是区块链 1.0) 中提供了 EVM 的虚拟机,它的实现和 JVM 类似,基于栈、生成脚本编译成字节码来执行。知 识通用。(理论大于实际)虚拟机历史了解即可,无需关注 解释执行和编译执行(针对字节码的执行) 解释执行就是边翻译为机器码边执行、即时编译(编译执行)就是先将一个方法中的所有字节码全部编译成机器码之后再执行。 Hotspot 采用的是先解释执行
2020-06-11 16:30:13 194
原创 IntelliJ IDEA使用技巧(七)——常用快捷键Mac篇
在IntelliJ IDEA中有两个 Mac 版本的快捷键,分别为 Mac OS X 和 Mac OS X 10.5+, 其中 Mac OS X 10.5+ 为 IntelliJ IDEA 默认的快捷键版本。此外,建议将 Mac 系统中与 IntelliJ IDEA 冲突的快捷键取消或更改,不建议改 IntelliJ IDEA 的默认快捷键。Mac 键盘符号和修饰键说明⌘——>Command ⇧——>Shift ⌥——>Option ⌃——>Cont...
2020-05-18 14:54:27 235
原创 IntelliJ IDEA使用技巧(六)——设置主题、字体样式和背景色
设置主题快捷键Ctrl+Alt+s,快速进入intellij idea设置项可供选择的有Darcula、IntelliJ、Windows,Darcula是暗黑系。当然你也可以导入你自己喜欢的主题样式:网上百度得到很多intellij idea的主题样式,你可以下载下来这里Import Scheme即可。设置字体样式也可根据自己喜好来设置...
2020-05-07 15:37:54 1359
转载 HTTP常见状态码(404、400、500)等错误
一些常见的状态码为:200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务不可用详细分解:1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码。代码 说明100 (继续) 请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。...
2020-04-28 16:50:00 209
原创 IntelliJ IDEA使用技巧(五)——页面乱码和控制台乱码
在项目中经常会碰到控制台乱码和页面乱码的问题,下面是自己用的一些方法: 控制台编码乱码打开intelliJidea的安装路径的bin目录下(例如:D:\Program Files\IntelliJ IDEA\IntelliJ IDEA 2018.3.2\bin),找到如下两个文件:找到上图的两个文件(根据你的系统是32位或64位选择其中一个配置文件),在配置文件中添加:...
2020-04-28 09:55:52 404
原创 文件上传
文件上传文件上传是项目开发中最常见的功能。为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器。一旦设置了enctype为multipart/form-data,浏览器即会采用二进制流的方式来处理表单数据,而对于文件上传的处理则涉及在服务器端解析原始的HT...
2020-04-27 11:06:32 318
原创 IntelliJ IDEA使用技巧(四)——设置默认Maven的方法
第一种:在 IntelliJ IDEA 的初始化界面中,依次选择“Configure”—>“Project Defaults”—>“Settings”,然后在“Default Preferences”里的“Maven”中进行配置,即可。第二种:在项目中,依然选择“File”—>“Others Settings”,然后在“Default Preferences”里的“M...
2020-04-27 09:18:58 193
原创 IntelliJ IDEA使用技巧(三)——Debug 篇
如上图所示:从“Server”开始,往后图标依次为:Show Execution Point :显示执行端点(Alt + F10) Step Over :跳到下一步 (F8) Step Into :进入代码或者说进入到方法内部(F7) Force Step Into :强制进入代码或者说进入到方法内部(Alt + Shift + F7) Step Out :跳到下一个断点或者跳出方...
2020-04-24 09:10:22 170
原创 IntelliJ IDEA使用技巧(二)——添加jar包
我现在在做的这个项目目前没有用到maven,因此有些时候比较麻烦需要手动添加jar包,因此在这里,将带着大家一起过一遍添加 jar 包的流程: 首先,通过菜单栏中的“File”进入到“Project Structure”, 然后,选择左侧的“Modules”, 再选择右侧对应的“Dependencies”,接下来,...
2020-04-23 09:38:45 162
原创 IntelliJ IDEA使用技巧(一)——常用快捷键
因为最近来了一个项目总监也是教给了我们很多IDEA很多小技巧然后就在网上收集了一下IDEA的使用技巧。快捷键 功能 Ctrl + X 删除行 Ctrl + D 复制行 Ctrl + N 查找类 Ctrl + F 查找文本 Ctrl + J 自动代码 Ctrl + H 显示类结构图 Ctrl + Q 显示注释...
2020-04-22 13:13:33 185
原创 使用 JavaScript 生成二维码 —— QRCode.js
最近在修改同时代码的时候发现了一个根据JavaScript生成二维码的语法:QRCode.js,和之前接触的不太一样,于是记录一下。什么是 QRCode.js?QRCode.js 是一个用于生成二维码的 JavaScript 库。主要是通过获取 DOM 的标签,再通过 HTML5 Canvas 绘制而成,不依赖任何库。基本用法<div id="qrcode">...
2020-04-22 11:38:33 852
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人