自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一文讲解如何写高质量的接口

实际工作中,可能出现需求考虑不全或人员操作失误等情况,可能需要变更需求(或数据);这时,产品轻描淡写的一句修改就完了,殊不知变更可能带来大量的工作量或风险;很多时候产品对于需求都是模糊的,就让开发来做,后面将会无休止的变更,并让开发背锅,所以需求详细之后再开始,磨刀不误砍柴工!:通常情况下,数量相关的往往和金钱、库存等相关,因此数据准确性就很重要,如果数量出错,往往会导致很严重问题;按墨菲定律讲,可能会发生的,或早或晚会发生;:在产品看来,可能注重的是功能,但是对开发来说,关注的是关联和逻辑;

2023-03-08 17:26:56 481

原创 盘点编程方法论中的一些思想

举个实际场景的案例:在曾经的一个项目中,有同事为省事,在使用消息队列时,没有很好的根据业务拆分话题和队列,大杂烩式的使用统一的话题与队列。如果可以很好的掌握和理解他们,将为我们处理开发中的问题,提供极大的帮助,做的有的放矢。在编程中也是很常用的,比如动静分离(将变经常动态变化的,和静态资源做隔离)、主次隔离(将核心业务、和普通业务做隔离,避免普通业务影响核心业务的流程)等。这时,就可以采用拆分的方法,将单体的组织,根据业务、共性或一些其他方面的特点,拆分为多个不同的部分,来达到解耦合的目的。

2024-04-06 12:20:32 410

原创 从源码学习单例模式

在需要保证线程安全的情况下,饿汉式单例模式是一个很好的选择,因为它在类加载时就创建实例,不需要进行额外的同步操作,避免了线程安全问题。在该模式中,实例被静态初始化,因此在程序运行时实例已经存在,不需要在获取实例时进行额外的判断和同步操作,从而。:如果单例对象的初始化和占用的资源比较小,可以在程序启动时就创建实例,避免在后续使用过程中频繁创建和销毁对象,提高性能。:如果单例对象的初始化比较简单,并且不依赖于外部参数或环境,饿汉式单例模式是一个合适的选择,可以在类加载时完成初始化。饿汉式单例模式是一种在。

2024-02-24 17:46:22 625

原创 从源码学习static的使用

​ static意味静态的,在Java中,主要用来修饰类级别的变量或方法等,被修饰的内容,表示随着类的加载而加载,而不是具体的实例级别。​ 具体到static的使用场景,主要有以下用途:静态变量、静态方法、静态代码块和静态内部类。

2024-02-24 16:29:41 1062

原创 从源码学习访问控制符使用

​ 在Java中,有四个访问控制符:public、protected、default(默认或缺省,不使用关键字)和private。​ 通过合理使用访问控制符,可以控制类、方法、变量等成员的访问权限,从而提高代码的封装性和安全性。​ 访问控制符,可以用来修饰类、方法和变量。使用不同的控制符,可以达到不同的权限控制效果。​ 根据迪米特法则,也即最少知道原则,我们应该尽可能少的暴露内部细节,只需要暴露需要对外暴露的部分,已提高封装性和安全性。

2024-02-08 17:13:56 1125

原创 从源码学习final的使用

​ final字面意思,意为最终的、不可变的。在Java中,final可以用来修饰类、方法和变量,可以分别起到不同的作用。​ 上面的概念我们都很清楚,那具体到应用场景,有该如何使用呢?下面集合JDK的源码,看看final在源码中的使用;

2024-02-08 10:56:05 937

原创 浅谈防御性编程

防御性编程,基于我的理解,主要在于两点:不信任和防御。不信任,就是不要总是乐观的认为外部传参都是没问题的、“好”队友提供的方法都是可靠的、第三方的Api都是稳定的、用户都不是“抽象”的,会按照正常的流程来操作等等。防御,就是针对不信任,所引出来的意外情况,做出一些防御保护措施,来避免外部的不合理情况,对我们既有程序的不利影响。

2023-12-16 14:05:53 648

原创 RocketMQ任意延时消息导致重复消费问题

通过上述分析,这次出现的重复消费的问题,还是挺严重,但幸好还是在测试环境,发生在了生产,估计都得提桶跑路了。使用消息队列时,考虑可能出现的常见问题:重复消费,消息积压、消息丢失等;充分测试确保不会出现上述问题;慎重使用递归、死循环;我们相信正常流程执行的话,递归和死循环是不会有大问题的;但根据墨菲定律,虽然意外情况概率小,但仍可能出现。所以使用递归、死循环时,一定要慎重,考虑各种意外场景,且考虑中断策略。

2023-12-09 22:40:26 132

原创 如何避免在编码层面产生质量事故

在日常开发中,产生BUG似乎看起来是习以为常的事情,但是如果在生产环境出现BUG,将会是蛮严重的问题,轻则警告处罚,重则扫地出门。虽然不同的公司对待生产BUG的严厉程度,可能不甚相同,但往往越大的公司,在高并发的场景下,小小的BUG也可能产生蝴蝶效应,最终造成大的问题。为了避免BUG可能在生产环境导致事故,还是应该从日常做起,避免在生产环境出现质量事故。作为一名优秀的程序员,应该养成好的编码习惯,避免因代码层面BUG,在生产环境造成的质量问题。

2023-11-19 22:45:32 300

原创 Oracle查看锁表和正在执行的Sql

【代码】Oracle查看锁表和正在执行的Sql。

2023-09-06 08:56:37 979

原创 Spring之Bean的生命周期

下图展示了bean装载到Spring应用上下文中的一个典型的生命周期过程。如上图所示,bean在Spring容器中从创建到销毁经历了若干阶段,而每一阶段都可以针对Spring如何管理bean进行个性化定制。在bean准备就绪之前,bean工厂执行了若干启动步骤。

2023-09-03 22:27:15 170

原创 如何更好的进行异常处理

为特定的错误情况创建自定义异常类,以提供更具信息性的异常类型,同时可以携带额外的上下文信息。

2023-08-27 15:27:55 185

原创 Struts2一次请求参数问题的记录

第二个Filer中,发现未防止Xss注入,对请求进行了处理,在图中第二个标注出,对数值中script的全文替换,导致了上述问题

2023-08-14 19:45:58 342

原创 Oracle查询表字段名并拼接

在数据库使用中,我们常常需要,获取一张表的全部字段,那该如何查询呢?

2023-08-14 15:38:16 1483

原创 如何从项目中学习

日常工作中,经常会有这样的错觉,就是明明感觉参与了不少项目,但是好像技术并没有提升太多。那原因大概率是,平时工作内容是非核心业务,更多是在CRUD的“打螺丝”。无法接触到核心的优质业务、或者参与到架构设计方面来,导致技术成长缓慢。那么如何在日常的项目开发中,不断提升自己的技术水平呢?那如何吃透一个项目呢?

2023-08-11 23:16:09 361

原创 一文了解Java泛型特性和实践

​ 在Java中,泛型(Generics)是一种类型参数化的机制,它允许在定义类、接口或方法时使用类型参数。泛型的主要目的是为了增加代码的重用性、类型安全性和灵活性。通过使用泛型,可以在定义类、接口或方法时指定一个或多个类型参数。这些类型参数可以在类内部或方法内部作为占位符使用,并在实际使用时被具体的类型替代。这样一来,可以在编译时期检查代码的类型正确性,并避免了类型转换的麻烦。泛型可以应用于类、接口、方法的定义,以及集合类(如List、Set、Map等)。int size();. . . }

2023-07-18 20:00:11 268 1

原创 一文讲解Linux上部署Web项目(war包)

​ 接下来,我们需要进入Linux上Tomcat所在的目录(如果未安装的话,需要先在Linux上安装Tomcat),当然,前提是我们要知道tomcat所在的目录,比如我这里是/usr/local/tomcat;​ 我们先通过:ps -ef | grep tomcat 命令来查询是否有启动的tocmat,并确保是当前目录启动的tomcat.​ 在部署war包之前,我们需要将原有已启动的tomcat关闭掉,不然你新启动时,可能会因端口占用而启动失败;

2023-07-07 13:55:53 4638

原创 一文了解RabbitMQ安装使用

RabbitMQ是一种开源的消息中间件软件,用于构建可扩展的分布式应用程序。它实现了高级消息队列协议(AMQP),这是一种网络协议,用于在应用程序之间进行可靠的异步消息传递。RabbitMQ提供了一个可靠的消息传递系统,使不同的应用程序能够通过消息进行通信。它支持多种消息传递模式,包括点对点、发布/订阅和消息广播。应用程序可以通过将消息发布到队列或主题交换机来发送消息,并通过订阅队列或主题交换机来接收消息。

2023-06-23 15:02:51 1019

原创 一文了解Docker安装和入门

Docker 是一种开源的容器化平台,旨在简化应用程序的部署、运行和管理过程。它基于容器化技术,可以将应用程序及其依赖项打包到一个独立的、可移植的容器中,从而实现应用程序在不同环境中的一致性运行。容器是一种轻量级、独立的执行单位,包含应用程序及其所有运行时所需的软件、库、环境变量和配置文件。通过使用 Docker,可以将应用程序和其依赖项打包成一个容器镜像,然后在任何支持 Docker 的环境中部署和运行这个容器镜像,而不需要担心底层环境的差异性。

2023-06-16 14:51:50 1972 1

原创 一文讲解如何写出高效精致SQL

虽然记录少的单表没啥感觉,但当关联多个表且表体量大时,select * from将返回所有表的字段,会影响查询效率。而逻辑删除的话,虽说更安全一点,但是一定程度污染的表数据,后续每次关联查询,都得记得过滤有效数据。日常开发环境查询中,可能随手就写了select * from tableA,这样的查询将返回全部记录和全部字段,这样的查询如果误升级到生产环境,查询太慢可能会带来灾难性的后果。所以,在设计表时,最好就考虑业务场景,同时,在查询过程中,也尽量走索引查询,比非索引查询效率高太多了。

2023-06-15 15:58:54 1102

原创 一文总结程序员快速提升秘籍

用新技术赋能当前项目当我们学习到一些新技术时,如果不去实践,可能很快就忘了。因此,当学习到新技术后,思考当前项目那些场景可以用到此技术,并试图用新技术去实践,这样一举两得。既重构优化了旧代码,也实践了新知识。当然使用技术,记得充分测试,不要影响既有功能运行。参与项目相关的技术交流项目开展过程中,

2023-06-06 22:31:56 78

原创 一文简单理解《Effective Java》建议

​一种失败的接口就是所谓的常量接口这样的接口不包含任何方法;它只包含静态 final 属 性,每个输出一个常量。使用这些常量的类实现接口,以避免需要用类名限定常量名。​常量接口模式是对接口的糟糕使用。类在内部使用一些常量,完全属于实现细节。实现一个常量接口会导致这 个实现细节泄漏到类的导出 API 中。对类的用户来说,类实现一个常量接口是没有意义的。事实上,它甚至可能使他 们感到困惑。更糟糕的是,它代表了一个承诺:如果在将来的版本中修改了类,不再需要使用常量,那么它仍然必须 实现接口,以确保二进制兼容性。

2023-05-27 11:18:45 1455

原创 异常:Caused by: java.lang.ClassNotFoundException: com.xxx.xxx

近日,IDEA启动JavaWeb项目,报错:Caused by: java.lang.ClassNotFoundException: com.xxx.xxx;显然这不是代码逻辑层面的问题,大概率就是,Web项目的配置有问题;同样的代码,同事可以成功启动,而我的启动报错;然后对照文章,配置了Web项目的。启动配置,再次启动无报错。

2023-04-06 17:58:41 654

原创 一文详解分库分表

分库:将一个数据库拆分为多个数据库水平分库:指将一个大型数据库分成多个较小的、相似的数据库,每个数据库包含数据的不同部分例如:将用户数据根据其 ID 值的范围分配到用户库DB1、用户库DB2中。这种分片方式可以提高系统的扩展性和性能,因为可以将负载分散到多个数据库中特点:每个库的结构都一样,存储同一业务类型的数据每个库的数据都不一样,没有交集所有库的并集是全量数据垂直分库:是指将一个大型数据库,根据业务关系分成多个较小的数据库。例如,将用户数据存储在用户库,订单数据存储在订单库中。

2023-03-18 13:59:18 981

原创 一文详解JVM

JVM相关知识系统总结,后续将持续完善

2023-03-08 17:47:52 639

原创 一文详解并发编程

并发编程知识总结

2022-12-03 13:31:25 1377

原创 如何编写整规范的代码

日常工作中,如何编写整洁规范的代码,来减少BUG、提升代码质量,提高可读性、维护性、复用性等等

2022-08-30 23:37:53 168

原创 一文详解Linux常用命令

系统常用命令 echo [选项] [输出内容] :用来输出内容 -n:取消输出后行末的换行符号(即内容输出后不换行) [root@linuxprobe network-scripts]# echo this is a testthis is a test[root@linuxprobe network-scripts]# echo "the root path is $HOME"the root path is /root ifconfig 用来查看和配置网络

2022-02-14 21:33:11 934

原创 异常:连接数据库报错CLIENT_PLUGIN_AUTH is required

今天在启动项目,链接数据库时,报错:看了下网上说明,错误发生原因就是:maven的数据库jar包版本和数据库服务器版本不一致导致的,我本机安装的mysql服务版本是5.0版本;然后查看maven项目依赖的版本,发现是5.1.8:照理说,这两个版本差别不大,应该不存在上述的版本错误的问题才对啊,但是启动仍然报错,这次我发现项目加载的其实是8.0版本的的jar包:最后,在左侧项目的依赖jar包栏里,发现了这个8.0版本的jar包依然存在,且被默认加载了高版本:然后,我移除

2020-08-23 11:12:47 7624

原创 异常:maven install 报错:repackage failed: Unable to find main class

今天在用maven对项目进行install时,提示报错:Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.3.1.RELEASE:repackage (repackage) on project core: Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:2.3.1.RELEASE:repackag

2020-08-23 10:29:13 3372 1

原创 信息安全要达到哪些目标

信息安全的目标是保障产品里信息资产的保密性,完整性和可用性,简称为CIA。保密性保障信息资产不被未授权的用户访问或泄露。完整性保障信息资产不会未经授权而被篡改。可用性保障已授权用户合法访问信息资产的权利。安全架构5A方法论进行产品的安全架构设计或评估,有几个需要重点关注的逻辑模块,他们可以在逻辑上视为安全架构的核心元素。身份认证:对用户身份进行认证。授权:授予或拒绝某些客户访问资源的权限。访问控制:权限的控制措施,以及是否放行的执行者。可追溯:行程可以对数据的操作进行追溯的操作日志

2020-08-16 15:02:00 1158

原创 协议的体系结构

** OSI的七层协议**7.应用层6.表示层5.会话层4.运输层3.网络层2.数据链路层1.物理层** TCP/IP的四层协议**4.应用层3.运输层2.网际层1.网络接口层五层协议5.应用层4.运输层3.网络层2.数据链路层1.物理层5层协议的体系结构应用层应用层是体系结构的最高层。应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程间通信和交互的规则。运输层运输层的任务就是负责向两台主机中进程之间的通信提供通用的数据

2020-08-16 14:47:49 418

原创 Oracle下载及安装超详细教程

Oracle下载可以从其官网下载:https://www.oracle.com/index.html点击Products,选择其下的Oracle DataBase:跳转至新页面后,选择下载按钮:然后会跳转至下载页,可选择合适的版本下载:此处我选择下载11.2.0.1.0的Windows,64位安装包,两个都要下载下来:点击下载之后,如果没有登录Oracle账户,页面会提示登录Oracle账户:由于之前没有Oracle账户,我选择创建账户:创建完账户之后

2020-07-15 01:27:42 74399 18

原创 Oracle安装时显示环境不满足最低要求

点击oracle安装文件setup.exe,提示环境不满足最低要求:可进行如下操作解决:进入oracle目录下的>stage>cvu,编辑cvu_prereq.xml文件;在文件的指定位置,添加如下内容:<OPERATING_SYSTEM RELEASE="6.2"> <VERSION VALUE="3"/> <ARCHITECTURE VALUE="64-bit"/> &l

2020-07-15 00:19:01 11648 5

原创 Web项目启动,控制台乱码

通过IDEA,将Web项目部署到Tomcat上,启动之后,控制台输出中文乱码,如下图所示:处理:点击" Help" → “Edit custom VM options…”:末尾添加:-Dfile.encoding=UTF-8,然后重启IDEA,乱码消除。注意:在上面的乱码中,我曾试着修改:Idea安装目录bin里的idea64.exe.vmoptions文件,在末尾添加一行:-Dfile.encoding=UTF-8,未起作用;有没有疑问,这种方式和前面第一种方式有什么

2020-07-13 22:54:10 604 1

原创 注解@Resource与@Autowired的区别

在面试中,谈及Spring框架的IOC时,经常会被问及@Resource与@Autowired的区别。相同点:@Resource和@Autowired都是做bean的依赖注入时使用;不同点:来源不同:@Autowired为Spring提供的注解。需要导入包org.springframework.beans.factory.annotation.Autowired。 @Resource由J2EE提供,需要导入包javax.annotation.Resource。装配类型不同:@Aut

2020-07-11 13:52:45 159

原创 程序员水平三大境界,看看你在那一层

清代著名学者王国维,曾在的他的著作《人间词话》里提及读书的三大境界: “古今之成大事业、大学问者,必经过三种之境界: ‘昨夜西风凋碧树,独上高楼,望尽天涯路’。此第一境也。 ‘衣带渐宽终不悔,为伊消得人憔悴。’此第二境也。 ‘众里寻他千百度,蓦然回首,那人却在灯火阑珊处’。此第三境也。” 平时喜欢读书的小伙伴们,到了哪一境界呢? 同样的,对于程序员们,也有大佬给出了自己眼中的程序员三境界。...

2020-07-11 13:32:19 483

原创 HashMap与Hashtable的区别

HashMap与Hashtable就简单的表现来说,有以下的区别:HashMap是非synchronized的,多线程环境下,是非线程安全的;而HashTable是synchronized的,线程安全 因为线程安全、哈希效率的问题,单线程环境下,HashMap效率比HashTable的要高 HashMap允许 null key 和 null value;而HashTable不允许 null key 或者 null value HashMap初始size为16,扩容:扩容为原来的2倍(newsi

2020-07-01 23:12:36 106

原创 SpringBoot相比传统Spring,有哪些优势?

传统Spring框架存在的弊端: Spring事物管理,MVC,启用第三方库都需要XML或Java进行显示配置,配置过重 写配置挤占了实际写应用的逻辑的时间 项目依赖管理,要考虑用那些库,还要知道哪些版本和库不会有冲突,影响开发效率 SpringBoot的优势:自动配置:针对很多Spring常见的应用功能,SpringBoot能自动提供相关配置 起步依赖:告诉SpringBoot需要什么功能,它就能引入需要的库 CLI命令行界面:通过SpringBootCLI,借此你只

2020-07-01 22:30:20 5153

原创 异常:MySQL报错CLIENT_PLUGIN_AUTH is required

项目访问MySQL时,报错CLIENT_PLUGIN_AUTH is required,如下图:发生以上错误的原因应该是:pom依赖中导入的mysql版本和所连接的mysql版本不一致导致的。如下图,我没有指定pom中mysql的版本,则系统自动使用最新的版本。而我当前使用的myql版本为5.0(版本有点低),如下图:所以我选择在pom依赖中指定mysql版本与当前服务中版本一致,我指定的5.0.8版本,如下图:添加Mysql版本之后,更新依赖jar包(自动更新或者ins

2020-06-29 00:46:16 49092 2

空空如也

空空如也

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

TA关注的人

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