后端
文章平均质量分 80
后端
韩悸桉
情怀,信仰,使命;低调,谦虚,不骄不躁;心比天高,脚踏实地。观察Amazon,追踪FaceBook,跟紧Google,偷瞄Microsoft,朝向Silicon Valley。本博主做事,从来都是走心...
展开
-
SDK与API的区别?
有一杯密封饮料,它的名字叫做“SDK”。饮料上插着吸管,吸管的名字叫“API”。把你叫做“XX系统”。如果你想喝到SDK里的饮料(让系统拥有SDK中的功能),你必须通过API这根吸管来实现(通过API连接你的系统和SDK工具包),否则你就喝不到饮料。原创 2024-05-01 13:39:06 · 986 阅读 · 6 评论 -
【JAVA】优雅处理重复请求:Java十万级并发去重
/用户//接口名//计算请求参数摘要,其中剔除里面请求时间的干扰// 1000毫秒过期,1000ms内的重复请求会认为重复// NOTE:直接SETNX不支持带过期时间,所以设置+过期不是原子操作,极端情况下可能设置了就不过期了,后面相同请求可能会误以为需要去重,所以这里使用底层API,保证SETNX+过期时间是原子操作} else {原创 2024-04-29 13:53:48 · 1181 阅读 · 1 评论 -
时光荏苒:Java老矣,尚能饭否?
最近抽空看了Go、Rust等一些语言的新版本特性,还有云原生的一些基础设施(Docker,Kubernetes,ServiceMesh,Dapr,Serverless),有点感慨Go真的是云原生的“一等公民”,像是启动速度快、依赖少、内存占用少、Goroutine 并发等无一不是击中Java的软肋。然后突发奇想在Google上搜了下“Java老矣”,能搜出520,000条结果。不禁想问:Java真的老了吗?转载 2024-04-28 17:02:21 · 87 阅读 · 0 评论 -
【JAVA】深入理解Java限流接口实现:详细解析与实例
限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。在高并发系统中,出于系统保护角度考虑,通常会对流量进行限流。在分布式系统中,高并发场景下,为了防止系统因突然的流量激增而导致的崩溃,同时保证服务的高可用性和稳定性,限流是最常用的手段。本文介绍的实现方式属于应用级限制,应用级限流方式只是单应用内的请求限流,不能进行全局限流。假设将应用部署到多台机器,我们需要分布式限流和接入层限流来解决这个问题。原创 2024-04-28 16:23:27 · 1699 阅读 · 3 评论 -
【JAVA】防范于未然:Java项目SQL注入预防四招
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。SQL案列此时,数据库的数据都会被清空掉,后果非常严重。原创 2024-04-28 16:02:13 · 341 阅读 · 0 评论 -
【JAVA】探究Java依然屹立的25个理由
与平台线程不同,虚拟线程不会锁定宝贵的操作系统线程,并且它们的数量可以远远超出操作系统线程可用性的限制。Java 遵循抽象、继承、多态性和封装等面向对象原则,使其成为构建复杂、可扩展和可维护的软件系统的良好选择。除了减少必须处理的运行时错误之外,Java 的强类型系统还可以让你更轻松地理解变量、参数和返回值的预期数据类型,从而提高代码的可读性。最近,我们看到 JDK 21 引入了 15 个特性,包括关键的封装机制 API、虚拟线程以及字符串模板和结构化并发的预览,这些特性显着增强了 Java。原创 2024-04-28 15:47:46 · 627 阅读 · 0 评论 -
【SpringBoot】通用且优雅:SpringBoot超大文件上传实战方案
通俗的说,你把要上传的东西上传,服务器会先做MD5校验,如果服务器上有一样的东西,它就直接给你个新地址,其实你下载的都是服务器上的同一个文件,想要不秒传,其实只要让MD5改变,就是对文件本身做一下修改(改名字不行),例如一个文本文件,你多加几个字,MD5就变了,就不会秒传了。分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块(我们称之为Part)来进行分别上传,上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件。原创 2024-04-28 10:02:48 · 1238 阅读 · 0 评论 -
从3秒飞降至25毫秒:揭秘惊艳的接口优化策略!
批量思想:批量操作数据库,这个很好理解,我们在循环插入场景的接口中,可以在批处理执行完成后一次性插入或更新数据库,避免多次 IO。//for循环单笔入库insert();});//批量入库我相信很多接口的效率问题不是一朝一夕形成的,在需求迭代的过程中,为了需求快速上线,采取直接累加代码的方式去实现功能,这样会造成以上这些接口性能问题。变换思路,更高一级思考问题,站在接口设计者的角度去开发需求,会避免很多这样的问题,也是降本增效的一种行之有效的方式。原创 2024-04-28 09:40:15 · 1000 阅读 · 0 评论 -
【JAVA】阿里技术官耗时三个月整理的Java核心知识点
在裁员风波的席卷之下,IT行业弥漫着浓厚的焦虑和不安。。这不仅仅是指薪资上的数字增长,更重要的是在职场中、在专业领域、在技术上不断取得突破,并塑造自己的核心竞争力。这样的个人价值,即便在裁员潮中,也能保持其独特的不可替代性。危机往往伴随着机遇,新的选择或许就在转角处等待。在风云变幻的时代,我们更应坚持学习,不断提升自己。为此,我为大家整理了一份宝贵的资料。这份资料由业内大神倾注一个月时间精心整理,涵盖了15个篇章,内容深入且广泛。从Java基础知识到JVM,从Mysql到并发编程,从Spring框架。原创 2024-04-26 14:40:28 · 1390 阅读 · 4 评论 -
【JAVA】一文掌握Java并发编程
Java 开发中,并发编程属于相当重要的一个知识点,可以说,Java 的并发能力,是成就今日 Java 地位的因素之一。Java 的并发编程由浅入深实质上是包含 Java(API)层、JVM(虚拟机)层、内核(操作系统)层和 CPU 层。本文从原理上,由浅入深的解释 Java 并发原理。掌握并发原理,才能更好地使用 Java 并发编程!原创 2024-04-26 11:10:02 · 806 阅读 · 0 评论 -
15个应用场景的算法实现(可套用)
常用的算法理解起来还是有难度的,大多数初中级程序员接触的机会也不多,但我们不能因为不接触就放弃研究和积累算法,除非你不想往更高的技术架构或高级去走,算法通常都是比较成熟的,拿来即用也不是不可以,这是第一步解决问题,然后再慢慢研究理解,因为项目中的核心技术永远掌握在公司那些天价核心的技术人员手里,今天的内容就分享到这里。转载 2024-04-26 10:11:20 · 1672 阅读 · 0 评论 -
【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 · 876 阅读 · 0 评论 -
【Java】Java程序员必备的一些流程图
在虚拟机的模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、异常处理、线程恢复等基础功能都需要依赖计数器完成。Spring Cloud是一个基于Spring Boot实现的云原生应用开发工具,它为基于JVM的云原生应用开发中涉及的配置管理、服务发现、熔断器、智能路由、微代理、控制总线、分布式会话和集群状态管理等操作提供了一种简单的开发方式。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务,这避免了在处理短时间任务时创建与销毁线程的代价。原创 2024-03-22 11:01:14 · 797 阅读 · 0 评论 -
【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 · 3218 阅读 · 1 评论 -
【Maven】使用Maven构建多模块项目
Maven多模块项目 Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理。尤其是一些开源框架,也是采用多模块的方式,提供插件集成,用户可以根据需要配置指定的模块。 项目结构如下: test-hd-parent (父级) ---pom.xml ---test-hd-api ...翻译 2018-03-20 09:48:55 · 331 阅读 · 1 评论 -
【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 · 1506 阅读 · 1 评论 -
如何获取IP归属地
IP归属地原创 2022-08-12 14:47:00 · 2677 阅读 · 0 评论 -
分布式锁之Redis实现
在Java中,关于锁我想大家都很熟悉。在并发编程中,我们通过锁,来避免由于竞争而造成的数据不一致问题。通常,我们以synchronized 、Lock来使用它。但是Java中的锁,只能保证在同一个JVM进程内中执行。如果在分布式集群环境下呢?一、分布式锁分布式锁,是一种思想,它的实现方式有很多。比如,我们将沙滩当做分布式锁的组件,那么它看起来应该是这样的:加锁在沙滩上踩一脚,留下自己的脚印,就对应了加锁操作。其他进程或者线程,看到沙滩上已经有脚印,证明锁已被别人持有,则等待。解锁把脚印从沙.原创 2022-02-26 11:26:50 · 467 阅读 · 0 评论 -
【Java】封装OkHttp3工具类
一、准备工作Maven项目在pom文件中引入jar包<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.10.0</version></dependency><dependency> <groupId>com.a原创 2021-08-13 11:44:02 · 4101 阅读 · 0 评论 -
还在用分页?太Low !试试 MyBatis 流式查询,真心强大!
基本概念流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。如果没有流式查询,我们想要从数据库取 1000万条记录而又没有足够的内存时,就不得不分页查询,而分页查询效率取决于表设计,如果设计的不好,就无法执行高效的分页查询。因此流式查询是一个数据库访问框架必须具备的功能。流式查询的过程当中,数据库连接是保持打开状态的,因此要注意的是:执行一个流式查询后,数据库访问框架就不负责关闭数据库连接了,需要应用在取完数据后自己关闭。原创 2021-01-18 09:53:32 · 221 阅读 · 1 评论 -
【Java】拥抱 Java 8 并行流:执行速度飞起 !
在 Java7 之前,如果想要并行处理一个集合,我们需要以下几步手动分成几部分为每部分创建线程在适当的时候合并。并且还需要关注多个线程之间共享变量的修改问题。而 Java8 为我们提供了并行流,可以一键开启并行模式。是不是很酷呢?让我们来看看吧认识和开启并行流什么是并行流: 并行流就是将一个流的内容分成多个数据块,并用不同的线程分别处理每个不同数据块的流。例如有这么一个需求:有一个 List 集合,而 list 中每个 apple 对象只有重量,我们也知道 apple 的单价是 5元/kg,原创 2021-01-11 11:22:41 · 141 阅读 · 0 评论 -
mybatis-plus 判断参数是否为空并作为查询条件
方式一、在配置文件中加上全局配置mybatis-plus.global-config.db-config.field-strategy=not_empty方式二、对某一字段单独进行判断非空QueryWrapper<BillCust> queryWrapper = new QueryWrapper<BillCust>(BeanUtil.mapToBean(params, BillCust.class, false));queryWrapper.lambda().eq(Obje原创 2020-12-28 17:18:47 · 21458 阅读 · 4 评论 -
【Java】JVM内存分代策略
Java虚拟机根据对象存活的周期不同,把堆内存划分为几块,一般分为新生代、老年代和永久代(对HotSpot虚拟机而言),这就是JVM的内存分代策略。为什么要分代? 堆内存是虚拟机管理的内存中最大的一块,也是垃圾回收最频繁的一块区域,我们程序所有的对象实例都存放在堆内存中。给堆内存分代是为了提高对象内存分配和垃圾回收的效率。试想一下,如果堆内存没有区域划分,所有的新创建的对象和生命周期很长的对象放在一起,随着程序的执行,堆内存需要频繁进行垃圾收集,而每次回收都要遍历所有的对象,遍历这些原创 2020-07-13 16:18:46 · 339 阅读 · 1 评论 -
【Java】堆和栈的区别
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。 在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用.原创 2020-06-17 19:16:32 · 198 阅读 · 1 评论 -
【Java】循环删除list中元素的方法总结
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区。下面就来讲一讲。。伸手党可直接跳至文末。看总结。。 JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。1、for循环遍历listfor(int i=0;i<list.size();i++){ if(list.get(i).equals("del"))原创 2020-06-17 17:37:01 · 278 阅读 · 1 评论 -
【Java】异常的十个关键知识点
前言总结了Java异常十个关键知识点,面试或者工作中都有用哦,加油。一. 异常是什么异常是指阻止当前方法或作用域继续执行的问题。比如你读取的文件不存在,数组越界,进行除法时,除数为0等都会导致异常。一个文件找不到的异常:public class TestException { public static void main(String[] args) throws IOExc...转载 2019-11-25 18:04:14 · 335 阅读 · 1 评论 -
【Java】整理Java8中Stream常用的API
JDK1.8-Stream中常用的API1 StreamStream是一组用来处理数组,集合的API。1.1 特性不是数据结构,没有内部存储。不支持索引访问。延迟计算支持并行很容易生成数据或集合支持过滤,查找,转换,汇总,聚合等操作。1.2 运行机制Stream分为源source,中间操作,终止操作。流的源可以是一个数组,集合,生成器方法,I/O通道等等。一个流可以有零个...原创 2019-11-12 11:17:11 · 456 阅读 · 1 评论 -
【Java】来看Java11的8 个逆天新特性教你写出更牛逼的代码!
美国时间 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本。为什么说是长期版本,看下面的官方发布的支持路线图表。可以看出 Java 8 扩展支持到 2025 年,而 Java 11 扩展支持到 2026 年。现在大部分都在用 Java 8,Java 9 和 10 目前很少有人在用,至少我没有发现有公司在生产环境应用的,那就...原创 2019-11-08 14:51:15 · 150 阅读 · 1 评论 -
【Java】整理Java8 lambda 排序 筛选 分组 求和 最大值 平均值
package cc.pigg.base.study.stream;import lombok.AllArgsConstructor;import lombok.Data;import java.util.*;import java.util.stream.Collectors;public class JavaStreamTest { private static L...原创 2019-10-25 16:18:14 · 1589 阅读 · 1 评论 -
【Java】集合知识点: Java8集合List排序、筛选、求和、求最大值、平均值
1. List元素有序 元素可重复1.1 ArrayList动态数组实现 查询快 增删慢(末尾处也快)1.2 LinkedList链表实现 查询慢 增删快1.3 ArrayList和LinkedList比较ArrayList:它的默认初始化容量是10,每次扩容时候增加原先容量的一半,也就是变为原来的1.5倍。LinkedList:底层实现是双向链表。在...原创 2019-10-25 16:16:27 · 1923 阅读 · 1 评论