- 博客(134)
- 资源 (11)
- 收藏
- 关注
原创 设计模式(一):七大原则
其中,我们称出现成员变量,方法参数,方法返回值中的类为直接的朋友,而出现在局部变量中的类不是直接的朋友。编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好。在一个软件产品中,父类对象可以出现的地方,都可以替换成它的子类对象,且不能发生错误和异常,里氏替换原则为良好的继承定义了规范。设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式为什么这样设计的依据。
2024-08-26 16:45:36
878
原创 开放API如何设计及注意事项
接口的文档和注释也应该详细描述接口的功能、输入参数、返回结果等信息,以便用户能够快速理解和使用。因此,在开发API接口时,应尽量避免使用复杂的框架或加载不必要的文件,以减轻服务器负担并提高响应速度。:API接口设计应具有一定的可扩展性,以便在未来的需求变更或功能扩展时能够方便地进行修改。例如,客户端和服务端针对不同接口统一做好加密方式,服务端在对于每次接口请求都要进行验证,以防止接口被恶意刷新或黑客恶意调用。:在进行API接口对接前,需要明确双方应用程序或系统的数据格式和协议,确保数据能够顺利传递。
2024-08-15 10:29:55
835
原创 SQL group by 遇到的坑
背景介绍:有两张表:busi_customer用于保存客户信息;busi_order用于保存客户的订单信息;建表语句如下:CREATE TABLE "public"."busi_customer" ( "id" int8 NOT NULL DEFAULT nextval('busi_customer_id_seq'::regclass), "cust_code" varchar(255) COLLATE "pg_catalog"."default", "cust_name" var
2022-01-25 10:31:28
1085
原创 java基础知识回顾
一、面向对象的三大特性1、封装将方法的内部实现对外关闭;2、继承3、多态多态是指同一个方法的调用,由于对象的不同可能会有不同的行为。比如:继承、实现、重写!二、JDK\JRE\JVM三者的区别和联系三、==与equals的区别1、==基本数据类型:byte,short,char,int,long,float,double,boolean。他们之间的比较,应用双等号(==),比较的是他们的值引用数据类型:比较的是他们在内存中的存放地址(确切的说,是堆内存地址).
2021-07-26 10:46:40
198
原创 基本数据类型、包装数据类型、BigDecimal使用注意事项
public static void main(String[] args) { /** * 对于 Integer在-128 至 127 之间的赋值,Integer对象是在 IntegerCache.cache 产生, 会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都 会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法进行判断。 */ Integer v1 = 134; Integer ..
2021-07-07 10:28:23
319
原创 java编码常见踩坑
1、pojo类中的任何布尔类型的变量,都不要加is前辍,否则部分框架解析会引起序列化错误。在数据库建表SQL中,布尔类型变量采用is_xxx的命名方式,所以,需要在<resultMap>设置从is_xxx到xxx的映射关系。2、Object的equals方法容易抛出空指针异常,应使用常量或确定有值的对象来调用equals。推荐使用java.util.Objects#equals(JDK7以后)。3、任何货币金额/时间单位,均以最小货币单位/时间单位,且整形类型来进行存储。4、浮点数之
2021-04-20 10:08:12
272
原创 自定义HashMap(玩一玩)
一、自定义Map接口public interface Map<K,V> { V set(K k,V v); V get(K k); int size(); void remove(K k);}二、自定义HashMap实现类package com.summer.customer;public class HashMap<K, V> implements Map<K, V> { private static final int
2021-04-08 10:09:02
185
原创 java设计模式(二):创建型设计模式之单例模式
一、创建型模式的特点和分类创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成。就像我们去商场购买商品时,不需要知道商品是怎么生产出来一样,因为它们由专门的厂商生产。创建型模式分为以下几种。单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。 原型(Prototype)模式:将一个对象作为原型,通过对其进行复
2020-12-28 14:15:31
135
原创 java设计模式(一):概述
一、什么是设计模式设计模式(designpattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(ErichGamma)等人在 1990年代从建筑设计领域引入到计算机科学的。二、为什么要用设计模式可读性 (即:编程规范性, 便于其他程序员的阅读、理解和维护); 代码重用性 (即:相同功能的代码,不用多次编写); 可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护) 可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)...
2020-12-25 09:55:35
106
原创 RabbitMQ进阶教程
RabbitMQ入门的相关课程请查看我的上一个博客https://blog.youkuaiyun.com/qq_34721505/article/details/109992289一、Spring boot 集成RabbitMQ二、RabbitMQ相关参数的说明三、RabbitMQ之死信队列四、RabbitMQ集群搭建五、RabbitMQ常见问题5.1如果消费者连接中断,这期间我们应该怎么办?如果消息是持久化的,消费者服务重启后可以继续接收未消费的消息;5.2如何...
2020-11-25 19:31:35
239
原创 RabbitMQ快速入门
一、RabbitMQ简介RabbitMQ官网:https://www.rabbitmq.com/With tens of thousands of users, RabbitMQ is one of the most popular open source message brokers. FromT-MobiletoRuntastic, RabbitMQ is used worldwide at small startups and large enterprises.RabbitMQ拥...
2020-11-23 18:27:31
815
原创 ubuntu16.04(阿里云ESC)安装postgres
一、postgres简介PostgreSQL是一个开源的、免费的、对象关系型数据库管理系统(ORDBMS),由PostgreSQL全球开发集团(全球志愿者团队)开发, 它不受任何公司或其他私人实体控制。PostgreSQL的官方网站是:https://www.postgresql.org/postgres中文手册:http://www.postgres.cn/docs/10/二、postgres下载登录https://www.postgresql.org/ftp/source/v10..
2020-11-04 14:49:27
390
原创 ubuntu16.04 OS搭建FTP服务器
FTP: File Transfer Protocol文件传输协议,两台计算机传送文件的协议,客户端可以通过FTP命令从服务器下载,上传文件,修改目录。可以通过命令vsftpd -version查看是否安装了vsftpd。FTP支持以下两种工作模式:主动模式:客户端向FTP服务器发送端口信息,由服务器主动连接该端口。 被动模式:FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接。说明大多数FTP客户端都在局域网中,没有独立的公网IP地址,且有防火墙阻拦,主动模式下F.
2020-10-31 09:21:07
616
1
原创 redis从入门到精通
一、redis简介redis官网地址:https://redis.io/1、redis的优势Reids是REmote DIctionary Server远程数据服务的缩写。是一款内存高速缓存数据库。 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的String类型的数据,同时还提供list,set,sorted set,hash等数
2020-08-06 21:24:09
323
原创 开放API接口安全(2)---HTTP Headers消息头详解
一、关于HTTP消息头HTTP消息头是在客户端请求(Request)或服务器响应(Response)时传递的,位于请求或响应的第一行,HTTP消息体(请求或响应的内容)是其后传输。HTTP消息头以明文的字符串格式传送,是以冒号分隔的键/值对,如:Accept-Charset: utf-8,每一个消息头最后以回车符(CR)和换行符(LF)结尾。HTTP消息头结束后,会用一个空白的字段来标识,这样就会出现两个连续的CR-LF。HTTP消息头支持自定义, 自定义的专用消息头一般会添加'X-'前缀。二、
2020-07-29 15:23:57
1830
原创 开放API接口安全(1)---常用加密算法
一、对称加密在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。美国国家标准局倡导的AES即将作为新标准取代DES。常见的对称加密算法:DES算法,3DES算法,TDEA算法,Blowfish算法,RC
2020-07-29 15:12:49
1464
1
原创 postgres重命名表名后修改主键自增序列
----删除前先解除 id 对该序列的依赖ALTER TABLE public.biz_device ALTER COLUMN id SET DEFAULT null;DROP SEQUENCE IF EXISTS device_id_seq;SELECT MAX(id) FROM public.biz_device;---- id_max 即 id 目前的最大值,可写为1,可通过 “SELECT MAX(id) FROM tablename” 得到CREATE SEQUENCE biz_dev.
2020-06-28 21:18:06
876
原创 feign.FeignException: status 404 reading XXXClient#XXMethod(String)
在一次feign调用中,有一个需求,根据订单编号查询订单,接口如下:@FeignClient(name = "order", path = "/")public interface OrderFeignService { @GetMapping(value = "/order/{orderNumber}") BizOrderModel checkBizOrderExist(@PathVariable("orderNumber") String orderNumber);}实现如下:
2020-06-22 12:23:05
1555
原创 java计算字符串的字节长度,以及字符集转换
String sgbk = "aB 1234567"; System.out.println(sgbk.length()); // 10 System.out.println(sgbk.getBytes("GBK").length); // 10 System.out.println(sgbk.getBytes("UTF-8").length); // 10 String sgbk = "中国移动通信 a1"; // 中文之后有个空格 System.out.println(s...
2020-06-02 14:37:40
3864
1
原创 window环境启动kafka报错:此时不应有../config/log4j.properties
window7下启动kafka报错如下:背景:1、在官网下载kafka_2.10-0.10.2.0.tgz;2、将第一步的压缩包解压到D:\Program Files (x86)目录下;3、启动zookeeper;4、进入到D:\Program Files (x86)\kafka_2.10-0.10.2.0\kafka_2.10-0.10.2.0目录,执行.\bin\win...
2020-04-24 22:34:20
1840
1
原创 Enum枚举类的优雅用法
一、声明一个通用接口/** * 枚举类通用接口 * @author Administrator * * @param <T> */public interface CommonEnum<T> { Object getCode();}二、声明枚举类public enum EMessageCode implements CommonEnum...
2020-02-06 10:58:17
577
原创 常用并发数据结构:CopyOnWriteArrayList,CopyOnWriteArraySet,ConcurrentHashMap
并发数据结构:添加或删除阻塞式集合:当集合为空或满时,等待; 非阻塞式集合:当集合为空或满时,不等待,返回null或抛出异常!ListArrayList:线程不安全; Vector:线程安全,适合写多读少,效率低(几乎所有的读写操作都加了synchronized); Collections.synchronizedList(...):线程安全,使用synchronized,效率低;...
2020-01-21 11:11:06
272
原创 FTPClient踩过的坑
一、ftpClient.enterLocalPassiveMode() public static final int PASSIVE_LOCAL_DATA_CONNECTION_MODE = 2;官网关于该常量的说明:A constant indicating the FTP session is expecting all transfers to occur between...
2019-11-06 16:46:59
7939
1
转载 postgres之窗口函数
本博客内容来自于官方文档:http://www.postgres.cn/docs/10/functions-window.html#FUNCTIONS-WINDOW-TABLE一、窗口函数介绍一个窗口函数在一系列与当前行有某种关联的表行上执行一种计算。这与一个聚集函数所完成的计算有可比之处。但是窗口函数并不会使多行被聚集成一个单独的输出行,这与通常的非窗口聚集函数不同。取而代之,行保留它们...
2019-09-30 10:22:23
611
原创 PostGres常用的日期和时间函数
详细使用请参考官方文档:http://www.postgres.cn/docs/10/functions-datetime.html一、需求有一张工单表biz_ticket,建表SQL如下:CREATE TABLE "public"."biz_ticket" ("id" int4 DEFAULT nextval('"public".biz_ticket_id_seq'::regcl...
2019-09-29 10:35:17
1109
原创 postgres使用with计算占比,同比和环比
1、postgres中with用法的官方文档地址http://www.postgres.cn/docs/10/queries-with.html2、有一张表biz_ticket,建表语句如下CREATE TABLE "public"."biz_ticket" ("id" int4 DEFAULT nextval('"crt".biz_ticket_id_seq'::regclass...
2019-09-26 11:24:00
5050
原创 springboot JPA的JPQL中判断查询条件是否为空
springboot的版本号为:2.1.4.RELEASEpostgres版本号为:PostgreSQL 10.5, compiled by Visual C++ build 1800, 64-bit建表SQL如下:CREATE TABLE "crt"."employee" ("id" int8 DEFAULT nextval('"crt".employee_id_seq'::re...
2019-09-20 17:44:25
7407
3
原创 java加减乘除计算踩过的坑以及BigDecimal的用法
直接上代码:一、普通数值类型的加减乘除:System.out.println(1.1+2.2); // 返回3.3000000000000003System.out.println(2.0-1.1); // 返回:0.8999999999999999System.out.println(2.1234*1.16); // 返回:2.4631440000000002System.out...
2019-08-30 18:27:46
408
原创 Executor线程池
一、为什么要用线程池?1)、系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互。在这种情形下,使用线程池可以很好地提高性能,尤其是当程序中需要创建大量生存期很短的线程时,更应该考虑使用线程池;使用线程池可以降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2)、使用线程池可有有效地控制系统中并发线程的数量;当系统中包含大量并发线程时,会导致系统性能剧烈下降,甚至...
2019-08-07 21:47:59
134
原创 JDK1.8新特性---lambda表达式
一、简介函数式接口(Functional Interfaces):如果一个接口定义个唯一一个抽象方法,那么这个接口就成为函数式接口。同时,引入了一个新的注解:@FunctionalInterface。可以把他它放在一个接口前,表示这个接口是一个函数式接口。这个注解是非必须的,只要接口只包含一个方法的接口,虚拟机会自动判断,不过最好在接口上使用注解 @FunctionalInterface 进行...
2019-07-18 18:18:07
358
原创 java守护线程
Java分为两种线程:用户线程和守护线程;所谓守护线程是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因 此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。守护线程和用户线程的没啥本质的区别:唯一的不同之处就在于虚拟机的离开:...
2019-04-02 09:50:17
2271
原创 synchronized(this)引发的线程不安全问题
业务场景说明:模拟多个线程同时抢购100张火车票;代码展示:/** * 对synchronized(this)的一些理解: * 一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 * 二、然而,当一个线程访问object的一个sy...
2019-03-28 10:56:39
1085
原创 rabbitmq之死信队列的应用
如果此教程对你有帮助,有钱的捧个钱场,没钱的请捧个人场!1、背景说明: 开发环境:sprint boot,rabbitmq,mysql,jdk1.8... 在预生产环境中,消费者消费消息时出现了异常,后台不断写日志,一天时间日志文件超过了30G,导致服务器因磁盘空间不足而宕机! 2、原因分析: 1)rabbitmq的默认配置spring.rabbitmq.l...
2019-03-27 17:37:27
1431
分布式调度框架quartz从入门到精通
2020-12-08
FTP服务器搭建.docx
2019-10-11
sonar代码检测
2019-02-01
redis笔计(第二版)
2018-12-17
史上最全redis学习笔计
2018-12-13
使用sigar监控web服务器软硬件信息
2017-12-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人