自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ddm

业精于勤,荒于嬉,行成于思,毁于随。

  • 博客(138)
  • 收藏
  • 关注

原创 Java多线程——入门基础

目录概述创建多线程继承Thread类实现Runnable接口多线程安全问题产生原因:解决思路:解决代码:同步函数:同步代码块与同步函数的区别:静态同步函数:同步的弊端生产者消费者问题等待/唤醒机制多线程通信多生产多消费问题Lock接口sleep和wait的区别线程如何停止守护线程线程优先级线程组Join、yield方法匿名内部类概述多线程进程:正在执行中的程序,在内存中有自己的数据集合,进程控制块,每

2020-12-25 14:02:53 185

原创 Linux——常用命令

查看linux版本cat /etc/redhad-release cat /etc/issue uname -a查看端口号是否被占用netstap -ntlp|grep 3306查看当前目录大小du -sh ./查看当前目录文件夹数查看磁盘容量使用情况df -THlinux 查看当前所有用户和组的信息cat /etc/passwdLinux查看内存使用量cat /proc/meminfoLinux查看物理CPU个数grep 'core id' /...

2020-09-25 19:11:03 188

原创 Java基础——java代码规范详细版

本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。本文档中没有说明的地方,请参看SUN Java标准代码规范。如果两边有冲突,以SUN Java标准为准。1. 标识符命名规范1.1 概述标识符的命名力求做到统一、达意和简洁。1.1.1 统一统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplie...

2019-07-03 11:41:57 29853 1

原创 设计模式——中介者模式(mediator pattern)

如果需要在原有系统中增加新的具体中介者类,只需要继承抽象中介者类(或已有的具体中介者类)并覆盖其中定义的方法即可,在新的具体中介者中可以通过不同的方式来处理对象之间的交互,也可以增加对新增同事的引用和调用。(2) 协调作用(行为性):中介者可以更进一步的对同事之间的关系进行封装,同事可以一致的和中介者进行交互,而不需要指明中介者需要具体怎么做,中介者根据封装在自身内部的协调逻辑,对同事的请求进行进一步处理,将同事成员之间的关系行为进行分离和封装。在具体同事类中实现了在抽象同事类中声明的抽象方法。

2024-03-02 20:10:25 676

原创 设计模式——状态模式(State Pattern)

状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化,对于客户端而言,无须关心对象状态的转换以及对象所处的当前状态,无论对于何种状态的对象,客户端都可以一致处理。● State(抽象状态类):它用于定义一个接口以封装与环境类的一个特定状态相关的行为,在抽象状态类中声明了各种不同状态对应的方法,而在其子类中实现类这些方法,由于不同状态下对象的行为可能不同,因此在不同子类中方法的实现可能存在不同,相同的方法可以写在抽象状态类中。

2024-01-31 10:07:53 1287

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

● ConcreteHandler(具体处理者):它是抽象处理者的子类,可以处理用户请求,在具体处理者类中实现了抽象处理者中定义的抽象请求处理方法,在处理请求之前需要进行判断,看是否有相应的处理权限,如果可以处理请求就处理它,否则将请求转发给后继者;在具体处理类中通过对请求进行判断可以做出相应的处理。(1) 职责链模式使得一个对象无须知道是其他哪一个对象处理其请求,对象仅需知道该请求会被处理即可,接收者和发送者都没有对方的明确信息,且链中的对象不需要知道链的结构,由客户端负责链的创建,降低了系统的耦合度。

2024-01-30 16:07:21 809

原创 设计模式——模板方法模式(Template Method Pattern)

模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中,在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行结果。

2024-01-29 17:04:09 1004

原创 设计模式——建造者模式(Builder Pattern)

建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性。建造者模式定义如下:建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。

2024-01-19 20:29:31 651

原创 设计模式——原型模式(Prototype Pattern)

原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。原型模式的工作原理很简单:将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝自己来实现创建过程。由于在软件系统中我们经常会遇到需要创建多个相同或者相似对象的情况,因此原型模式在真实开发中的使用频率还是非常高的。原型模式是一种“另类”的创建型模式,创建克隆对象的工厂就是原型类自身,工厂方法由克隆方法来实现。

2024-01-12 21:14:51 1100

原创 设计模式——抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式的基本思想是将一些相关的产品组成一个“产品族”,由同一个工厂统一生产。在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法具有唯一性,一般情况下,一个具体工厂中只有一个或者一组重载的工厂方法。但是有时候我们希望一个工厂可以提供多个产品对象,而不是单一的产品对象,如一个电器工厂,它可以生产电视机、电冰箱、空调等多种电器,而不是只生产某一种电器。

2024-01-10 20:26:52 1150

原创 设计模式——工厂方法模式(Factory Method Pattern)

说工厂方法模式之前,先说下简单工厂模式,简单工厂模式并不属于GoF 23个经典设计模式,但通常将它作为学习其他工厂模式的基础,它的设计思想很简单,其基本流程如下:首先将需要创建的各种不同对象(例如各种不同的Chart对象)的相关代码封装到不同的类中,这些类称为具体产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类;然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方法,该方法可以根据所传入的参数不同创建不同的具体产品对象;

2024-01-08 19:34:17 1226

原创 设计模式——最全梳理,最好理解

新年献礼!设计模式呕心梳理。

2024-01-05 20:07:27 1075

原创 设计模式——迭代器模式(Iterator Pattern)

迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。在软件开发中,我们经常需要使用聚合对象来存储一系列数据。聚合对象拥有两个职责:一是存储数据;二是遍历数据。从依赖性来看,前者是聚合对象的基本职责;而后者既是可变化的,又是可分离的。

2024-01-05 19:31:30 1146

原创 设计模式——装饰模式(Decorator Pattern)

装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为,装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系。在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能。装饰模式定义如下:装饰模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。

2024-01-04 19:26:57 1402

原创 设计模式——桥接模式(Bridge Pattern)

桥接模式是一种结构型设计模式,如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名桥接模式。桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展,同时有效控制了系统中类的个数。

2023-12-28 18:35:45 1596

原创 设计模式——适配器模式(Adapter Pattern)

根据类适配器模式结构图,适配器类实现了抽象目标类接口Target,并继承了适配者类,在适配器类的request()方法中调用所继承的适配者类的specificRequest()方法,实现了适配。● Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。如果需要使用其他排序算法类和查找算法类,可以增加一个新的适配器类,使用新的适配器来适配新的算法,原有代码无须修改。

2023-12-26 19:06:18 1387

原创 设计模式——组合模式(Composite Pattern)

组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象)并调用执行,牵一而动百,其中使用了递归调用的机制来对整个结构进行处理。

2023-12-22 19:22:27 715

原创 设计模式——外观模式(Facade Pattern)

外观模式的主要目的在于降低系统的复杂程度,在面向对象软件系统中,类与类之间的关系越多,不能表示系统设计得越好,反而表示系统中类之间的耦合度太大,这样的系统在维护和修改时都缺乏灵活性,因为一个类的改动会导致多个类发生变化,而外观模式的引入在很大程度上降低了类与类之间的耦合关系。外观模式又称为门面模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。通过引入外观模式,客户端代码将变得很简单,与之关联的对象也很少。

2023-12-20 19:05:25 1073

原创 设计模式——代理模式(Proxy Pattern)

代理模式是指为其他对象提供一种代理,以控制对这个对象的访问。代理对象在访问对象和目标对象之间起到中介作用。代理对象也可以在不修改目标对象的前提下,提供额外的功能操作,拓展目标对象的功能,比如说在目标对象的某个方法执行前后你可以增加一些自定义的操作。Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,而动态代理代理类则是在Java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。

2023-12-14 18:51:44 179

原创 设计模式——观察者模式(Observer Pattern)

观察者模式是使用频率最高的设计模式之一,它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。

2023-12-13 11:10:06 284

原创 设计模式——策略模式(Strategy Pattern)

策略模式又叫政策模式,是一种对象行为型模式。它是将定义的算法家族分别封装起来,让它们之间可以互相替换,从而让算法的变化不会影响到使用算法的用户。策略模式的主要目的是将算法的定义与使用分开,也就是将算法的行为和环境分开,将算法的定义放在专门的策略类中,每一个策略类封装了一种实现算法,使用算法的环境类针对抽象策略类进行编程,符合“依赖倒转原则”。在出现新的算法时,只需要增加一个新的实现了抽象策略类的具体策略类即可。

2023-12-11 16:50:21 667

原创 设计模式——单例模式(Singleton Pattern)

单例模式确保一个类只有一个实例,而且自行实例化并向整个系统提供整个实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。单例模式有三个要点:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。单例模式结构图中只包含一个单例角色:Singleton(单例):在单例类的内部实现只生成一个实例,同时它提供一个静态的getInstance()工厂方法,让客户可以访问它的唯一实例;为了防止在外部对其实例化,将其构造函数设计为私有;

2023-12-08 13:55:55 362

原创 MySQL问题-[Err] 1205 - Lock wait timeout exceeded; try restarting transaction

[Err] 1205 -Lock wait timeout exceeded; try restarting transaction错误解决

2022-06-14 11:11:41 8158 2

原创 Java问题——sheet.getLastRowNum()不准确问题

通过POI包使用sheet.getLastRowNum()获取Excel行数的时候,由于获取行数时是从0开始,实际的行数需要获取到的行数+1,但是有时候获取到的行数与Excel实际的行数差的很远,例如:实际Excel中只有100行,但是通过sheet.getLastRowNum()获取到的数值却是1000,这是为什么呢?原因在于Excel中只要操作过单元格就会认为样式发生改变。即使单元格为空,也会被读取行数据。解决办法:判断空行boolean rowEm...

2021-11-24 09:10:09 7990 1

转载 Java问题——can not be represented as java.sql.Date 错误解决

在java应用程序中,数据表中有记录的time字段(属性为timestamp)其值为:“0000-00-00 00:00:00”程序使用select 语句从中取数据时出现以下异常:java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date这是因为 “0000-00-00 00:00:0...

2021-07-08 17:53:05 1252

原创 Java多线程——run方法中直接调用service业务类应注意的问题

Java多线程run方法里边使用service业务类会产生java.lang.NullPointerException异常的问题,这是由于spring注入的业务类为null,或者直接new的业务对象也为null。多线程为了线程安全会防止注入,因此在想使用service业务类时,需要使用ApplicationContext的方式获取bean的方法获取service类。获取ApplicationContext的类要实现ApplicationContextAware接口,如下:import org.spr

2020-12-14 21:11:19 3533 6

原创 MySQL问题——max_allowed_packet参数设置不当带来的问题

向mysql数据库中写数据时超过了单次最大数据量,会引发以下问题:Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1354 > 1024). You can change this value on the serverby setting the max_allowed_packet' variable解决办法:可通过修改MySQL中max_allowed_packet参数进行解决

2020-07-10 19:17:40 971

原创 Java基础——数据库连接信息使用密文

背景数据库连接配置文件一般都是使用明文,这会带来数据库泄露的安全问题。例如jdbc.properties配置文件中,数据库连接地址、用户名、密码都是明文,如何使配置文件中的数据库连接信息避免明文显示是本文重点内容,即如何使配置信息使用密文就可以达到跟明文一样的效果。分析假如数据库连接密码使用了密文。修改连接池源码顾名思义,修改dbcp、c3p0、Druid连接池的源码,先对加密的密码解密,然后再创建连接。改完源码后重新打包发布。不建议采用修改源码的方式。拦截数据库连接属性信息不修改源

2020-06-30 19:14:05 1579

原创 HTML——微信浏览器H5页面调用微信扫一扫

使用JS-SDK调用微信扫一扫,需要有公众号支持,通过公众号生成JS-SDK使用权限签名。本文直接调用已封装好的接口来获取随机数(noncestr)、时间戳(timestamp)、签名(signature),接口地址:http://xx.xx.com/xxmap/wechat/jsapi/getSignature.do?appId=APPID&url=URL。appId是公众号的标识,url是需要调用微信扫一扫的页面的地址,需要进行encodeURIComponent编码。调用微信扫一扫前端页面

2020-06-05 19:35:31 5140

原创 HTML——H5微信浏览器自动播放音频

H5 <audio src="xxx.mp3" controls autoplay="autoplay"></audio>标签,在PC浏览器打开后载入音频播放器并自动播放,但在微信浏览器上都是禁止自动播放音频或视频,这个时候使用以下方法可以解决。<head><script src=”http://res.wx.qq.com/open/js/jweixin-1.0.0.js”></script></head><bod

2020-05-18 19:46:11 2615

原创 Java基础——Java代码开发预防漏洞整理

1、打印一个一次性文件及其堆栈跟踪到某个流。默认情况下,该stream System.Err可能会无意中公开敏感信息。应该使用记录器来打印一次性文件,因为它们有许多优点:用户可以轻松地检索日志。日志消息的格式是统一的,允许用户轻松浏览日志。如果使用printStackTrace时没有参数,即堆栈跟踪打印到默认流时,此规则会引发问题。Noncompliant Code Examplet...

2020-04-29 11:31:43 916

原创 Java基础——java后台向前台返回数据的几种方式

1、向html/jsp输出流(适用于Ajax请求)response.getWriter().write(string);仅支持输出字符类型数据,字符、字符数组、字符串等response.getWriter().print(Object);可以输出各种类型,包括Object,对象等这两种都是以IO流的形式返回数据给前端。2、@ResponseBody 或者 ResponseEntity1...

2020-03-25 14:46:34 10577

原创 Java基础——抽象类&接口简介与使用

Java接口一个接口(interface)是一些方法特征的集合,接口里没有方法的实现,因此这些方法在不同的地方被实现时,可以具有完全不同的行为。Java接口可以有public、静态的和final的属性(常量)Java接口里的方法和常量只能是public类型的接口是对可插入性的保证Java接口常用方法:单方法接口:只含有一个方法,例如:Runnable接口只有一个run()方法...

2020-01-17 10:46:55 206

原创 MySQL问题——属性为timestamp,值为“0000-00-00 00:00:00”带来的问题

在java应用程序中,数据表中有记录的time字段(属性为timestamp)其值为:“0000-00-00 00:00:00”程序使用select 语句从中取数据时出现以下异常:java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date这是因为 “0000-00-00 00:00:0...

2019-12-30 19:28:23 3123

原创 设计模式——命令模式(Command Pattern)

命令模式属于行为型模式,又称为行动模式或交易模式;它把一个请求或者操作封装到对象中,以命令接收人作为参数,然后将该命令交由执行者执行,执行者不需要关心命令的接收人或者命令的具体内容,因为这些信息均被封装到命令对象中。命令模式中涉及的角色及作用如下:命令接口(Command):声明执行操作的接口,执行操作的参数为命令接收人;接口实现(ConcreteCommand):命令接口实现,以...

2019-11-08 15:13:37 210 1

原创 MySQL问题——正则匹配两个字符串含有交集

开发过程中,会遇到这样的情况:判断两个以","号分割或者"-"分割的字符串是否含有交集,那么就可以使用MySQL正则匹配的方式进行判断,举例如下:表数据如下:id join_person join_time 1 张三 2019-09-23 22:07:55 2 张三丰,李四 2019-09-23 22:07:55 3 李四,王五 ...

2019-09-23 22:40:23 2325 1

原创 Java基础——java集合之HashSet,TreeSet和LinkedHashSet

共同点:1)、它们都实现了Set接口,都可以对数据进行CRUD操作(add(),remove(),set(),get()),都可以使用迭代器遍历;2)、他们都是不允许元素重复的;3)、它们都不是线程同步的:如果多个线程同时访问一个HashSet(TreeSet或LinkedHashSet),而其中至少一个线程修改了该 set,则它必须 保持外部同步。这一般通过对自然封装该 set ...

2019-08-22 12:02:59 206

原创 Nginx问题——windows版本Nginx启动报错问题

启动报错(1113: No mapping for the Unicode character exists in the target multi-byte code page)使用windows版本的nginx启动时遇到(1113: No mapping for the Unicode character exists in the target multi-byte code page)...

2019-08-16 14:24:14 564

原创 java基础——8种基本数据类型及对应包装类以及注意事项

整数类型:byte(8位),short(16位),int(32位),long(64位)包装类:Byte,Short,Integer,Long浮点类型:float(单精度32位),double(双精度64位)。包装类:Float,Double字符类型:char(16位UNICODE字符)包装类Character布尔类型:boolean包装类:Boolean注意:8种基本数据类...

2019-07-31 19:41:10 1378

原创 Oracle问题——时间与时间戳互转(SQL)

开发中总会遇到很奇怪的现象,时间类型被定义为Number类型,很不解,根据SQL执行的结果,怎么才能一眼就看出时间戳代表的时间呢?这个时候就需要我们改造一下SQL了,对时间戳直接转换为时间。时间戳是某一时间点距离1970年1月1日早上八点的毫秒数或者秒数,根据这一规则我们可以计算出来时间戳,也可以根据时间戳算出某一时间点:具体SQL如下:时间戳转换为时间字符串:SELECT TO_CHAR...

2019-07-15 19:00:09 3482

空空如也

空空如也

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

TA关注的人

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