自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一个天蝎座的程序猿

情怀,信仰,使命;低调,谦虚,不骄不躁;心比天高,脚踏实地。观察Amazon,追踪FaceBook,跟紧Google,偷瞄Microsoft,朝向Silicon Valley。本博主做事,从来都是走心...

  • 博客(99)
  • 资源 (1)
  • 收藏
  • 关注

原创 SDK与API的区别?

有一杯密封饮料,它的名字叫做“SDK”。饮料上插着吸管,吸管的名字叫“API”。把你叫做“XX系统”。如果你想喝到SDK里的饮料(让系统拥有SDK中的功能),你必须通过API这根吸管来实现(通过API连接你的系统和SDK工具包),否则你就喝不到饮料。

2024-05-01 13:39:06 855 5

原创 SaaS 究竟是何方神圣?一文带你了解!

在当今数字化浪潮的推动下,云服务架构已经成为企业信息化建设的重要基石。其中,PaaS、IaaS和SaaS作为云服务架构的三大核心概念,为企业提供了从基础设施到应用程序的全面支持。它们不仅降低了企业的IT成本,提高了运营效率,更在推动企业数字化转型、实现业务创新方面发挥了重要作用。接下来,本文将深入探讨PaaS、IaaS和SaaS的概念、特点以及应用,帮助读者更好地理解和运用这些云服务架构,为企业的发展注入新的动力。

2024-04-29 14:12:16 657

原创 【JAVA】优雅处理重复请求:Java十万级并发去重

/用户//接口名//计算请求参数摘要,其中剔除里面请求时间的干扰// 1000毫秒过期,1000ms内的重复请求会认为重复// NOTE:直接SETNX不支持带过期时间,所以设置+过期不是原子操作,极端情况下可能设置了就不过期了,后面相同请求可能会误以为需要去重,所以这里使用底层API,保证SETNX+过期时间是原子操作} else {

2024-04-29 13:53:48 901 1

转载 时光荏苒:Java老矣,尚能饭否?

最近抽空看了Go、Rust等一些语言的新版本特性,还有云原生的一些基础设施(Docker,Kubernetes,ServiceMesh,Dapr,Serverless),有点感慨Go真的是云原生的“一等公民”,像是启动速度快、依赖少、内存占用少、Goroutine 并发等无一不是击中Java的软肋。然后突发奇想在Google上搜了下“Java老矣”,能搜出520,000条结果。不禁想问:Java真的老了吗?

2024-04-28 17:02:21 9

原创 【JAVA】深入理解Java限流接口实现:详细解析与实例

限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。在高并发系统中,出于系统保护角度考虑,通常会对流量进行限流。在分布式系统中,高并发场景下,为了防止系统因突然的流量激增而导致的崩溃,同时保证服务的高可用性和稳定性,限流是最常用的手段。本文介绍的实现方式属于应用级限制,应用级限流方式只是单应用内的请求限流,不能进行全局限流。假设将应用部署到多台机器,我们需要分布式限流和接入层限流来解决这个问题。

2024-04-28 16:23:27 1242 3

原创 【JAVA】防范于未然:Java项目SQL注入预防四招

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。SQL案列此时,数据库的数据都会被清空掉,后果非常严重。

2024-04-28 16:02:13 233

原创 【JAVA】探究Java依然屹立的25个理由

与平台线程不同,虚拟线程不会锁定宝贵的操作系统线程,并且它们的数量可以远远超出操作系统线程可用性的限制。Java 遵循抽象、继承、多态性和封装等面向对象原则,使其成为构建复杂、可扩展和可维护的软件系统的良好选择。除了减少必须处理的运行时错误之外,Java 的强类型系统还可以让你更轻松地理解变量、参数和返回值的预期数据类型,从而提高代码的可读性。最近,我们看到 JDK 21 引入了 15 个特性,包括关键的封装机制 API、虚拟线程以及字符串模板和结构化并发的预览,这些特性显着增强了 Java。

2024-04-28 15:47:46 568

原创 【SpringBoot】通用且优雅:SpringBoot超大文件上传实战方案

通俗的说,你把要上传的东西上传,服务器会先做MD5校验,如果服务器上有一样的东西,它就直接给你个新地址,其实你下载的都是服务器上的同一个文件,想要不秒传,其实只要让MD5改变,就是对文件本身做一下修改(改名字不行),例如一个文本文件,你多加几个字,MD5就变了,就不会秒传了。分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块(我们称之为Part)来进行分别上传,上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件。

2024-04-28 10:02:48 936

原创 从3秒飞降至25毫秒:揭秘惊艳的接口优化策略!

批量思想:批量操作数据库,这个很好理解,我们在循环插入场景的接口中,可以在批处理执行完成后一次性插入或更新数据库,避免多次 IO。//for循环单笔入库insert();});//批量入库我相信很多接口的效率问题不是一朝一夕形成的,在需求迭代的过程中,为了需求快速上线,采取直接累加代码的方式去实现功能,这样会造成以上这些接口性能问题。变换思路,更高一级思考问题,站在接口设计者的角度去开发需求,会避免很多这样的问题,也是降本增效的一种行之有效的方式。

2024-04-28 09:40:15 941

原创 如何优雅做好项目管理?

项目( Project )是为创造独特的产品、服务或者成果而进行的临时性工作。管理( Management )通过实施计划、组织、领导、协调、控制等职能来协调他人的活动,使别人同自己一起实现既定目标的活动过程。项目管理(Project Management) 在项目活动中运用专门的知识、技能、工具和方法,使项目能够在有限资源限定条件下,实现或超过设定的需求和期望的过程。从项目的基本概况可以看出,每个项目是具备三种基本特征即独特性临时性目的性。

2024-04-26 16:32:09 1025 2

原创 【JAVA】阿里技术官耗时三个月整理的Java核心知识点

在裁员风波的席卷之下,IT行业弥漫着浓厚的焦虑和不安。。这不仅仅是指薪资上的数字增长,更重要的是在职场中、在专业领域、在技术上不断取得突破,并塑造自己的核心竞争力。这样的个人价值,即便在裁员潮中,也能保持其独特的不可替代性。危机往往伴随着机遇,新的选择或许就在转角处等待。在风云变幻的时代,我们更应坚持学习,不断提升自己。为此,我为大家整理了一份宝贵的资料。这份资料由业内大神倾注一个月时间精心整理,涵盖了15个篇章,内容深入且广泛。从Java基础知识到JVM,从Mysql到并发编程,从Spring框架。

2024-04-26 14:40:28 1051 3

原创 【JAVA】一文掌握Java并发编程

Java 开发中,并发编程属于相当重要的一个知识点,可以说,Java 的并发能力,是成就今日 Java 地位的因素之一。Java 的并发编程由浅入深实质上是包含 Java(API)层、JVM(虚拟机)层、内核(操作系统)层和 CPU 层。本文从原理上,由浅入深的解释 Java 并发原理。掌握并发原理,才能更好地使用 Java 并发编程!

2024-04-26 11:10:02 721

原创 15个应用场景的算法实现(可套用)

常用的算法理解起来还是有难度的,大多数初中级程序员接触的机会也不多,但我们不能因为不接触就放弃研究和积累算法,除非你不想往更高的技术架构或高级去走,算法通常都是比较成熟的,拿来即用也不是不可以,这是第一步解决问题,然后再慢慢研究理解,因为项目中的核心技术永远掌握在公司那些天价核心的技术人员手里,今天的内容就分享到这里。

2024-04-26 10:11:20 283

原创 【SpringBoot】SpringBoot接口防抖(防重复提交)的一些实现方案

作为一名老码农,在开发后端Java业务系统,包括各种管理后台和小程序等。在这些项目中,我设计过单/多租户体系系统,对接过许多开放平台,也搞过消息中心这类较为复杂的应用,但幸运的是,我至今还没有遇到过线上系统由于代码崩溃导致资损的情况。这其中的原因有三点:一是业务系统本身并不复杂;二是我一直遵循某大厂代码规约,在开发过程中尽可能按规约编写代码;三是经过多年的开发经验积累,我成为了一名熟练工,掌握了一些实用的技巧。啥是防抖?所谓防抖,一是防用户手抖,二是防网络抖动。

2024-04-25 16:15:12 699

原创 数据库表设计的18条军规

对于后端开发同学来说,访问数据库,是代码中必不可少的一个环节。系统中收集到用户的核心数据,为了安全性,我们一般会存储到数据库,比如:mysql,oracle等。后端开发的日常工作,需要不断的建库和建表,来满足业务需求。通常情况下,建库的频率比建表要低很多,所以,我们这篇文章主要讨论建表相关的内容。如果我们在建表的时候不注意细节,等后面系统上线之后,表的维护成本变得非常高,而且很容易踩坑。今天就跟大家一起聊聊,数据库建表的18个小技巧。

2024-04-25 15:48:53 795

原创 【JAVA】PO、VO、DAO、BO、DTO、POJO你分得清吗?

综上所述,PO、VO、DAO、BO、DTO和POJO都是Java开发中常见的术语和概念,它们分别代表不同的含义和用途。其中,PO用于表示数据库中的数据模型,VO用于表示传递给前端的数据模型,DAO用于访问数据库,BO用于表示业务逻辑实体,DTO用于在不同层之间传输数据,POJO用于表示简单的Java对象。在实际的开发中,程序员需要根据不同的场景选择适当的对象类型,并且清楚地理解它们之间的区别和联系。

2024-04-25 15:18:39 771

原创 【IDEA】掌握 IDEA 这 30 个 Debug 小技巧,开发、改 Bug 速度快10倍

写Bug、改Bug几乎占据了程序员日常工作的绝大部分时间,如果你能掌握一手调试代码的绝技,相信工作效率必定会得到大幅度的提升;IDEA 就为我们提供了很多简单且非常强大的调试功能,但是发现有些小伙伴并没有完全用上,今天就一起来玩一下那些Debug的奇淫巧计;30来个功能及调试小技巧,学完后让你开发调试效率提升个10倍!争取做到早上9点上班,10点就能下班。

2024-04-25 11:26:57 828

原创 23种设计模式(Java版,超详细!)

什么是设计模式设计模式是在软件设计中反复出现的问题的通用解决方案。它们是经过多次验证和应用的指导原则,旨在帮助软件开发人员解决特定类型的问题,提高代码的可维护性、可扩展性和重用性。设计模式是一种抽象化的思维方式,可以帮助开发人员更好地组织和设计他们的代码。它们提供了一种通用的框架,可以用于解决各种不同的软件设计问题。设计模式不是完整的代码,而是一种描述问题和解决方案之间关系的模板。设计模式并不是一成不变的法则,而是根据不同的问题和情境来决定是否使用以及如何使用。了解和应用设计模式可以帮助开发人员更好

2024-04-24 18:17:54 856

原创 成为程序员后你都明白了什么?

而且由于计算机在中国发展本来就晚,十五年前电脑对家庭来说都是奢侈品了,家里有电脑的都算小康人家了,哪怕15年前,你20岁开始工作,现在也才35岁,所以35岁以上的程序员是少啊。我认为,程序员的成长史,就应该是从单纯的开发人员,变成bug解决机器,能从源头上分析bug来源,这就要对编译器底层逻辑和代码去学习,才能知道报错的内容,其次就是数学能力,提高算法能力。最后,程序员是一批职业人员的代称,程序员生活中也就是普通人,不会天天穿格子衫、没头发,跟大部分高薪职业一样,有职业特征,需要持续学习,工作忙压力大。

2024-04-23 10:12:10 437

原创 设计模式六大原则详解

引言对于设计模式,自己很早之前就看了好多本设计模式书籍,其中一些还看了好几遍,也一直希望自己能在编码的时候把这些设计模式用上去。可是,在日常的打码中,用的做多的就是单例,其次是观察者和建造者模式 ( builder ) 用得比较多,其他的基本很少用到。用不到的原因是还是不能够理解设计模式的思想,无法将这些设计模式和编码遇到的问题联系起来,从而用不到设计模式。其实设计模式的提出都是为了解决一个常见的问题而总结出来的办法。所以当你思考采用何种设计模式的时候,你应该先问问自己当前问题的是什么?根据问题去选

2024-04-22 17:28:09 1124

原创 负载均衡的原理及算法

负载均衡(Load Balancing)是一种计算机网络和服务器管理技术,旨在分配网络流量、请求或工作负载到多个服务器或资源,以确保这些服务器能够高效、均匀地处理负载,并且能够提供更高的性能、可用性和可扩展性。本文分析了五种常见的负载均衡算法,算法的实现都比较简单,在实际的生产环境中,我们可以根据自己的业务场景来选择合适的负载均衡算法。一致性哈希:Consistent Hashing,可以参考文章:hash & 一致性hash,如何选择?

2024-04-22 14:54:22 1131

原创 【Linux】8个常用操作系统

红帽提供了非常多的稳定版应用程序,但是众所周知的缺点是,把太多旧程序包打包起来,支持成本确实相当高。不过,如果安全是关注的首要问题,那么红帽企业级Linux的确是款完美的发行版,它使用YUM程序包管理器。红帽企业级Linux是系统管理员的第一选择,它有众多的程序包,还有非常到位的支持。由于让滚动发行版本成为可能的Tumbleweed,可将已安装的操作系统更新到最新版本,不需要任何的新发行版。对他们来说,CentOS值得一试。Fedora是一款非常好的发行版,有庞大的用户论坛,软件库中还有为数不少的软件包。

2024-04-22 14:31:45 885

原创 【Java】Java程序员必备的一些流程图

在虚拟机的模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、异常处理、线程恢复等基础功能都需要依赖计数器完成。Spring Cloud是一个基于Spring Boot实现的云原生应用开发工具,它为基于JVM的云原生应用开发中涉及的配置管理、服务发现、熔断器、智能路由、微代理、控制总线、分布式会话和集群状态管理等操作提供了一种简单的开发方式。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务,这避免了在处理短时间任务时创建与销毁线程的代价。

2024-03-22 11:01:14 631

原创 SDKMAN多版本SDK并行管理工具

SDKMAN是管理多个SDK并行版本的工具,它提供了方便的命令行界面(CLI)和API,用于列出,安装,切换和删除候选对象。此外,它还为我们设置了环境变量。它还允许开发人员安装基于JVM的SDK,例如Java,Groovy,Scala,Kotlin和Ceylon。还支持Maven,Gradle,SBT,Spring Boot,Vert.x等。SDKMAN是用Bash编写的免费,轻量级开源工具。

2024-03-22 10:30:17 436

原创 使用nvm让多个node版本共存

最近从网上找了个项目,里面的脚手架需要node版本在12,之前项目的node版本一直是18,版本不兼容。思来想去,还是安装一个nvm,nvm是node版本的管理工具,可以切换node的不同版本。nvm-noinstall.zip:免安装版,需配置- nvm-setup.zip:安装版我个人比较倾向于安装版的,按需选择即可。如果电脑上已经安装了node,会有这个弹窗提示,选择【是】就OK了。选择nvm的安装目录,可自定义 切记安装目录不要有中文!下载安装包 github下载。选择node的安装目录。

2024-03-22 10:19:10 429

原创 【Java】从java8到java17各版本新特性详解

下面这张图是 Oracle 官方给出的 Oracle JDK 支持的时间线,可以看出,JDK 17的支持时间最长,可以延续到2029年9月。考虑到技术更新的速度,这次免费商用8年的时间可谓是经过精心考虑,旨在让用户放心地升级到JDK 17(不过JDK 8的支持时间更长,可以延续到2030年12月)。从JDK诞生到现在,仅有几个版本得到了长期支持,主要包括JDK 7、JDK 8、JDK 11以及即将发布的JDK 17,它将是继Java 8之后最重要的LTS版本,是Java社区八年努力的成果。

2024-03-22 10:15:00 1263

原创 在IDEA中将工具类打包成jar

一、在Project Structure下创建JAR类型的Artifacts二、输入jar包的名字,自定义jar包生成的目录,勾上’Include in project build’三、在jar包下创建需要打包的工具类的包路径四、选择编译好的class文件(一定是编译过的class文件不是java文件)五、开始构建工件六、获取打包生成的目录下查看构建的jar

2024-03-01 11:48:29 558

原创 【Java】查看class文件的jdk编译版本的两种方式

使用EditPlus打开该class文件,字符集选择16进制(Hex viewer)。我们只需要看major version的值是多少(它的值是十进制数字)。仅看第一行数据,前面8个字节CA FE BA BE是固定的。次版本后面的4个字节00 34 就是jdk版本。cmd进入class文件所在目录后,运行以下命令。之后4个字节00 00 是次版本。

2024-03-01 10:07:02 634

原创 云原生向量数据库Milvus

Milvus 是一款云原生向量数据库,它具备高可用、高性能、易拓展的特点,用于海量向量数据的实时召回。Milvus 基于 FAISS、Annoy、HNSW 等向量搜索库构建,核心是解决稠密向量相似度检索的问题。在向量检索库的基础上,Milvus 支持数据分区分片、数据持久化、增量数据摄取、标量向量混合查询、time travel 等功能,同时大幅优化了向量检索的性能,可满足任何向量检索场景的应用需求。通常,建议用户使用 Kubernetes 部署 Milvus,以获得最佳可用性和弹性。

2024-01-11 15:49:55 1353

原创 【DDD - 概念】领域模型

模型是一种知识形式,它通过对知识进行抽象和选择性简化和有意识的结构化来传达重要的要素信息,它可以使人专注于问题并帮助人快速的理解问题。因为系统需要一整套的知识体系来完成特定的功能,这一整套的知识体系是很复杂的,而且需要人掌握的信息广度也是极高的,这就是信息超载问题。而模型就是为了解决信息超载问题。模型是对复杂知识体系的抽象和简化,它携带了最后重要的信息,抛弃掉了一些无关紧要的信息。模型分多种:比较常见的有数据模型、服务模型、领域模型等。

2023-08-16 11:41:51 149

原创 优雅的使用 Dockerfile 定制镜像

此外,还可以看到这一组命令的最后添加了清理工作的命令,删除了为了编译构建所需要的软件,清理了所有下载、展开的文件,并且还清理了 apt 缓存文件。下载后的文件权限自动设置为 600,如果这并不是想要的权限,那么还需要增加额外的一层 RUN 进行权限调整,另外,如果下载的是个压缩包,需要解压缩,也一样还需要额外的一层 RUN 指令进行解压缩。那么什么是上下文呢?每一个 RUN 的行为,就和刚才我们手工建立镜像的过程一样:新建立一层,在其上执行这些命令,执行结束后,commit 这一层的修改,构成新的镜像。

2023-08-15 14:45:09 228

原创 K8S系列四:服务管理

本文是K8S系列第四篇,主要面向对k8s新手同学。阅读本文需要读者对k8s的基本概念,比如Pod、Deployment、Service、Namespace等基础概念有所了解,尚且不了解的同学推荐先阅读本系列的第一篇文章《K8S系列一:概念入门》[1];阅读本文还需要读者对k8s的服务部署有一定深入的了解,特别是怎么通过Pod部署自己的服务,尚且不熟悉的同学推荐阅读本系列前一篇文章《K8S系列三:单服务部署》[2]。本文旨在讲述如何基于k8s集群管理一群服务,包括如何做。

2023-08-15 11:05:17 498

原创 K8S系列三:单服务部署

容器的名称、镜像地址没什么可说的。在前文中提到过,虽然由于不同Container的文件系统隔离关系,它们无法互相访问彼此的数据(但是k8s仍然给出了解决办法,具体措施在下一节),但是其他各个方面,譬如网络、IPC等,同个Pod内各个Container之间就如同部署在同一台“物理机”上。初始化容器,这个最为特别,它是通过’initContainers’而非’containers’指定的,k8s会确保’initContainers’下的容器首先启动,结束后再启动’containers’下的容器。

2023-08-15 10:30:02 352

原创 K8S系列二:实战入门

官方文档中介绍kubectl是:Kubectl 是一个命令行接口,用于对 Kubernetes集群运行命令。Kubectl的配置文件在$HOME/.kube目录。我们可以通过设置KUBECONFIG环境变量或设置命令参数–kubeconfig来指定其他位置的kubeconfig文件。也就是说,可以通过kubectl来操作K8S集群,官方文档中介绍其基本语法:就如何使用kubectl而言,官方文档已经说得非常清楚。

2023-08-14 18:04:26 1051

原创 K8S系列一:概念入门

试想下传统的后端部署办法:把程序包(包括可执行二进制文件、配置文件等)放到服务器上,接着运行启动脚本把程序跑起来,同时启动守护脚本定期检查程序运行状态、必要的话重新拉起程序。有问题吗?显然有!如果服务的请求量上来,已部署的服务响应不过来怎么办?传统的做法往往是,如果请求量、内存、CPU超过阈值做了告警,运维马上再加几台服务器,部署好服务之后,接入负载均衡来分担已有服务的压力。问题出现了:从监控告警到部署服务,中间需要人力介入!那么,有没有办法自动完成服务的部署、更新、卸载和扩容、缩容呢?

2023-08-14 17:27:29 992

原创 PO、VO、DAO、BO、DTO、POJO 能分清吗?

实际就是普通JavaBeans,使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接.其中有一些属性及其getter、setter方法的类,有时可以作为value object或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。J2EE开发人员使用数据访问对象(DAO)设计模式把底层的数据访问逻辑和高层的商务逻辑分开.实现DAO模式能够更加专注于编写数据访问代码.

2023-08-11 10:48:31 111

原创 禁止别人调试自己的前端页面代码

前端页面防止调试的方法主要是通过不断 debugger 来疯狂输出断点,因为 debugger 在控制台被打开的时候就会执行。并且添加条件,当窗口外部宽高和内部宽高的差值大于一定的值 ,我把 body 里的内容换成指定内容。由于程序被 debugger 阻止,所以无法进行断点调试,所以网页的请求也是看不到的。为了让自己写出来的代码更加的晦涩难懂,需要对上面的代码再优化一下。当然使用的时候,为了更加的安全,最好使用加密后的脚本。当然使用的时候,为了更加的安全,最好加密后再使用。

2023-08-11 10:25:00 95

原创 【SpringBoot】SpringBoot中后端服务的国际化

国际化

2023-02-06 11:25:46 1040 1

原创 AsyncAPI通过yaml生成html文档

asyncAPI文档

2022-12-01 15:28:28 769

转载 一篇文章从了解到入门 shell

shell 俗称叫做壳,计算机的壳层,和内核是相对的,用于和用户交互,接收用户指令,调用相应的程序。

2022-09-09 15:12:22 292

pmp项目管理认证-敏捷文档

pmp项目管理认证-敏捷文档

2024-04-30

整理的一个技术栈思维导图

整理的一个技术栈思维导图

2024-04-28

datax-web-2.1.2.zip

datax-web-2.1.2.zip

2021-08-14

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

TA关注的人

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