- 博客(114)
- 资源 (6)
- 问答 (2)
- 收藏
- 关注
原创 让SpringBoot不需要Controller、Service、DAO、Mapper,卧槽!这款工具绝了!
Dataway介绍第一步:引入相关依赖第二步:配置 Dataway,并初始化数据表第三步:配置数据源第四步:把数据源设置到 Hasor 容器中第五步:在SprintBoot 中启用 Hasor第六步:启动应用第七步:访问接口管理页面进行接口配置第八步:新建一个接口最后总结Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需求的接口。整个接口配置、测试、冒烟、发布。一站式都通过 Dataway 提供的 UI 界面完成。UI 会以 Jar
2025-05-07 22:14:30
396
原创 SpringBoot + ResponseBodyEmitter 实时异步流式推送,优雅!
这就好比一场接力赛,每完成一段赛程(生成一部分数据),就马上将接力棒(数据)传递给客户端,大大提高了数据传输的实时性。这种方式使得数据可以边生成边传输,减少了客户端的等待时间,提高了用户体验。:通用性更强,适用于任何支持 HTTP 的客户端,并且易于与 Spring 框架集成,是一种更为便捷的流式传输解决方案。有着广泛的应用,比如进度条的实时更新、实时聊天功能、股票价格的实时更新、系统日志的流式输出以及 AI 的流式响应等。:服务器在有数据时会立即响应客户端请求,若暂无数据,则保持连接开放,等待数据到来。
2025-03-12 21:32:03
916
原创 别踩坑!存储电话号码,到底用 int 还是用 string?
通过以上分析可以看出,虽然在表面上 int 可能看起来是一种节省内存的选择,但从 JVM 的层面分析,使用 String 存储电话号码更加符合语义要求,能有效处理多种场景下的电话号码格式。在性能优化方面,合理利用字符串常量池,也能避免过多的内存分配。虽然 String 对象的内存开销相对较大,但在处理电话号码这种以字符为基础的标识符时,String 提供了更灵活的表现形式。经过紧急处理后,开发团队将电话号码改为 String 类型,不仅解决了数据丢失问题,还提高了数据的兼容性和系统的可维护性。
2025-02-22 22:08:37
933
原创 项目自从用了接口请求合并,效率直接加倍!
请求合并到底有什么意义呢?我们来看下图。img假设我们3个用户(用户id分别是1、2、3),现在他们都要查询自己的基本信息,请求到服务器,服务器端请求数据库,发出3次请求。我们都知道数据库连接资源是相当宝贵的,那么我们怎么尽可能节省连接资源呢?这里把数据库换成被调用的远程服务,也是同样的道理。我们改变下思路,如下图所示。img我们在服务器端把请求合并,只发出一条SQL查询数据库,数据库返回后,服务器端处理返回数据,根据一个唯一请求ID,把数据分组,返回给对应用户。
2025-02-16 21:55:45
262
原创 中国程序员前景一片灰暗?其实,全世界都差不多...
全世界的程序员在github上卷生卷死,被别人一忽悠什么共享、创新,弄个简单的开源协议,利润被互联网巨头和云服务商们拿走,然后一群普通程序员现实里被裁员快饿死了。很多进入这行就是因为钱多,写代码也确实赚钱,但是什么东西都是双向的,有收获就有付出:经常加班熬夜,学不完的框架数据结构底层知识,倒了一家又一家的公司...做程序员肯定是有前途的,自己要做好持之以恒的准备,晚上周末有时间要多学习,另外就是一定要去大厂,名气越大越好。对你的职业前途有大大的好处。但是我知道,每个行业都有混的好的,也有混不好的。
2025-02-13 20:38:45
282
原创 DeepSeek 装进 VSCode,编程非常丝滑!
作为一款强大的 AI 编程助手,Roo Code 通过其全面的功能和灵活的定制能力,为开发者提供了全新的开发体验,可以轻松接入各大 AI 巨头的 API,无论是 OpenAI、DeepSeek、Anthropic,还是 Google Gemini,都能完美兼容。安装扩展后在左侧活动栏会有个小火箭的图标,打开就可以看到支持的大模型,我们可以选择 DeepSeek,填写API Key。更贴心的是,还可以通过 Ollama 使用本地模型,让开发者可以根据自己的实际需求和预算自由选择最适合的 AI 模型。
2025-02-12 20:42:52
196
原创 SpringBoot3.0 新特性尝鲜,秒启动的快感!SpringAOT与RuntimeHints来了解一下?
一、前置知识二、打包SpringBoot3.0三、认识AOT四、AOT的原理。
2025-02-10 21:06:14
1003
原创 Deepseek52条喂饭指令
指令:以[身份]的口吻,写一篇[产品]的种草笔记,突出5个使用场景和3个痛点解决方案。- 指令:以[风格]写一篇关于[主题]的深度文章,包含5个分论点,每个论点配2个案例。- 指令:以[身份]的口吻,对比[产品A]和[产品B],突出各自的优缺点和适用人群。- 指令:以[身份]的口吻,推荐[平价产品]作为[高价产品]的替代,突出性价比。- 指令:以[身份]的口吻,推荐[产品],重点解决[用户痛点],并提供使用建议。- 指令:以[身份]的口吻,推荐[节日]相关的[产品],突出节日氛围和实用性。
2025-02-09 19:52:07
906
原创 农银一面:Filter、Interceptor、Spring AOP 的执行顺序
Filter是 JavaServlet规范的一部分,定义在包中,Filter可以对Servlet容器的所有 HTTP 请求()和响应()进行预处理或后处理操作。例如,在请求到达目标资源之前执行身份验证或设置字符编码,或者在响应返回给客户端前修改其响应内容格式。是 Spring MVC 框架的一部分,是位于包中的接口,用于在请求处理之前或之后执行特定逻辑。与Filter不同的是,不依赖于Servlet容器,它是 Spring 框架独有的。
2025-02-08 21:04:36
939
原创 IntelliJ IDEA 神级攻略:IDEA 实战隐藏技巧指南
IDEA是一款功能强悍、非常好用的Java开发工具,近几年编程开发人员对IDEA情有独钟。本文不仅介绍IDEA的基础操作,更揭示众多提升效率的高级功能和不为人知的快捷方式。【错误:Maven资源编译器:模块“xxx”所需的Maven项目配置不可用。如果想让这个临时的导航栏消失的话,直接使用esc快捷键即可。可以把红色的导航栏去掉,让IDEA显得更加干净整洁一些。这种热加载比较全面,资源文件、代码的修改都可以监听到,但 有些情况下也会有问题。去掉这个导航栏后,如果你偶尔还是要用的,直接用。
2025-02-05 20:42:06
403
原创 Redis持久化锦囊在手,再也不会担心数据丢失了
RDB全称(Redis数据备份文件),也可以称为Redis数据快照。RDB 文件是一个经过压缩的二进制文件(默认:dump.rdb);RDB 文件保存在硬盘里;通过保存数据库中的键值对来记录数据库状态。AOF全称为(追加日志文件)。日志是写后日志,Redis 是先执行命令,把数据写入内存,然后才记录日志。写后日志通过保存 Redis 服务器所执行的写命令来记录数据库状态;写入 AOF 文件的所有命令都是以 Redis 的命令请求协议格式保存的。
2025-01-12 20:59:51
786
原创 Spring Event 别瞎用!从我司的悲剧中,我总结了6条最佳实践
这个场景下,使用 Spring Event 发布事件,Spring 无法正常广播事件,一定会出现异常,导致处理失败!在这个场景中,我们需要处理履约完成、退款完成、订单过期等事件,并且每个事件都有一些独立的业务逻辑,每一个业务场景都属于最终一致性的场景。Spring 不知道哪些订阅者成功,哪些订阅者失败,下一次重试时,会全部执行所有的订阅者。使用 SpringEvent 之前,一定要先治理服务,确保服务关闭时,先切断入口流量(Http、MQ、RPC),然后再关闭服务,关闭 Spring 上下文!
2025-01-11 21:46:13
654
原创 SpringBoot 一键提取身份证与营业执照信息
在处理图像以进行文字识别的上下文中,OpenCV可以用于多种预处理步骤,比如调整图像大小、转换为灰度图、应用滤波器、边缘检测等,以增强图像中的文字部分,从而提高OCR的准确性。在这个示例中,我们首先将图像转换为灰度图,然后应用高斯模糊来平滑图像,最后使用Canny算法进行边缘检测。这些步骤可以帮助突出图像中的文字,使其在OCR过程中更容易被识别。为了提高识别的准确性,首先对图片进行预处理,如调整大小、对比度、亮度等。一个开源的OCR引擎,可以识别多种语言的文字。可以协同工作,提高图像中文字识别的准确率。
2025-01-10 20:45:13
429
原创 一个技巧,优雅解决 IDEA 构建速度慢的问题
背景前置要求IDEA 构建慢的原因设置步骤1.开启多线程2.将IDEA的构建/运行委托给MVAEN3.添加配置文件结语由于项目扩展,项目模块越来越多也越来越大。每次项目启动,构建时间非常长,严重影响做牛马的效率。也在网上找寻提升构建速度的方法,但都不适用,自己研究了下,找到了提升效率的方法,用起来比较舒服,决定来分享分享。本方案适用于使用 IDEA 和 Maven 进行开发的项目,我当前使用的版本是 IDEA 2023.2 和 Maven 3.8.6,但此方法在其他较新版本中也依然适用。IDEA 在启动项目
2024-12-27 21:15:58
2773
原创 程序员缺乏经验的 7 种表现!
这句话在某种程度上是对的,但是你从事这项工作的年限,并不一定代表你获得了相同年限的工作经验,正如一句话所说:“我们以为我们是工作了十年,其实却只有一年的工作经验,只不过又重复用了九年”。是啊,能不急吗,排到后边,还需要解决代码冲突的问题。其实不只是新人——一些有几年工作经验的开发人员也会表现出这种傲慢,一部分原因是其满足于个人获得的专业成就,另一部分可能的原因是其缺乏和优秀的人共事的机会,有点坐井观天。缺乏经验的开发人员不接受任何建设性的建议,甚至代码评审中的评论,他都会认为是对他个人的一种攻击。
2024-12-25 22:20:55
505
原创 面试官:每天100w次登陆请求, 8G 内存该如何设置JVM参数?
对象进入老年代的动态年龄判断规则(动态晋升年龄计算阈值):Minor GC 时,Survivor 中年龄 1 到 N 的对象大小超过 Survivor 的 50% 时,则将大于等于年龄 N 的对象放入老年代。核心的优化策略是:是让短期存活的对象尽量都留在survivor里,不要进入老年代,这样在minor gc的时候这些对象都会被回收,不会进到老年代从而导致full gc。
2024-12-23 21:18:17
1082
原创 Netty 如何做到单机百万并发?
相信很多人知道石中剑这个典故,在此典故中,天命注定的亚瑟很容易的就拔出了这把石中剑,但是由于资历不被其他人认可,所以他颇费了一番周折才成为了真正意义上的英格兰全境之王,亚瑟王。说道这把剑,剑身上铭刻着这样一句话:ONLY THE KING CAN TAKE THE SWORD FROM THE STONE。虽然典故中的 the king 是指英明之主亚瑟王,但是在本章中,这个 king 就是读者自己。
2024-12-19 22:31:39
821
原创 MySQL 中 Varchar(50) 和 varchar(500) 区别是什么?
一. 问题描述二.验证存储空间区别1.准备两张表2.准备数据3.验证存储空间4.结论三.验证性能区别1.验证索引覆盖查询1.验证索引查询3.验证全表查询和排序四.最终结论我们在设计表结构的时候,设计规范里面有一条如下规则:对于可变长度的字段,在满足条件的前提下,尽可能使用较短的变长字段长度。为什么这么规定?我在网上查了一下,主要基于两个方面基于存储空间的考虑基于性能的考虑网上说和存储空间上是一样的,真的是这样吗?基于性能考虑,是因为过长的字段会影响到查询性能?
2024-12-17 21:46:26
881
原创 五行代码 —— 接口吞吐量提升了10倍!
结果是好的,过程是曲折的。总的来说还是知识的欠缺,文章看起来还算顺畅,但都是事后诸葛亮,不对,应该是时候臭皮匠。基本都是边查资料边分析边操作,前后花费了4天时间,尝试了很多。Redo Log大小、双一配置...异步执行,线程池参数调整,tomcat 配置,Druid连接池配置...内存大小,分配,垃圾收集器都想换...总归一通瞎搞,能想到的都试试。后续还需要多了解一些性能优化知识,至少要做到排查思路清晰,不瞎搞。131。
2024-12-14 21:24:58
833
原创 面试回答 Redis 是单线程的所以很快,让我回去等通知....
避免过多的上下文切换开销:在多线程调度过程中,需要在CPU之间切换线程上下文,并且上下文切换涉及一系列寄存器替换、程序堆栈重置,甚至包括程序计数器、堆栈指针和程序状态字等快速表项的退休。因为单个进程内的多个线程共享进程地址空间,线程上下文要比进程上下文小得多,在跨进程调度的情况下,需要切换整个进程地址空间。避免同步机制的开销:如果Redis选择多线程模型,因为Redis是一个数据库,不可避免地涉及底层数据同步问题,这必然会引入一些同步机制,如锁。
2024-12-11 22:07:43
762
原创 Spring Boot 性能提升的核武器,速度提升 500%!
虚拟线程由 JVM 管理,而非操作系统,因此它们的内存占用和创建成本远低于传统线程。在 Spring Boot 中配置虚拟线程非常简单,只需几行代码即可启用虚拟线程,带来显著的性能提升。在高并发场景下,虚拟线程的优势尤为明显。:虚拟线程能处理更高并发的场景,特别是 I/O 密集型的应用,适合开发高并发、响应式的应用程序。:无需手动管理线程池,JVM 会根据负载自动调整虚拟线程的调度,简化了并发编程的复杂性。创建虚拟线程非常简单。是 Java 并发编程的革新,它简化了线程管理,提升了高并发场景下的性能。
2024-12-10 21:15:05
964
原创 Nginx 性能优化全方案:打造一个高效服务器
Nginx是一款高性能的Web服务器,广泛应用于互联网领域。然而在高并发、大流量的情况下,Nginx的性能可能会受到一定的影响。因此,对Nginx进行性能优化是非常必要的。本文将从多个方面介绍如何基于Nginx进行性能优化。
2024-12-09 22:05:02
664
原创 面试官:线程池提交一个任务占多大内存?
在开了指针压缩的情况下,对象头占12个字节,4个字节用于填充补齐到8的整数倍,由于这个lambda实例中没有其他成员变量了,所以它就是占据16个字节。同样对象头占12字节,item是一个4字节的引用,next也是一个4字节的引用,一共20字节,4个字节用于填充对齐,所以一个node对象是24字节。对象占用的字节数是12+4+4+4+4=28个字节,还需要4个字节做填充,所以一共是32个字节。对象占用的字节数是12+4+4=20个字节,同样需要4个字节做填充,所以一共是24个字节。的Node实例的开销;
2024-12-08 17:45:30
517
原创 别提桶跑路,MySQL 误删数据救命指南来了!
比如说,数据是在9月12日12:00插入的,那么我们看上方的所有binlog文件,可以看出插入语句应该保存在mysql-bin.000213文件中。刚刚提到,对于delete操作,只有row模式才能找到被删除数据的具体值,因此需要确认开启的binlog模式。比如说,数据是在9月12日12:00删除的,那么我们看上方的所有binlog文件,可以看出插入语句应该保存在。条件的顺序,就是表结构的字段顺序。目前有一些开源的工具,可以帮助我们解析binlog,并且自动生成binlog记录的操作的逆向操作。
2024-12-06 22:06:09
577
原创 【无标题】
这和SpringCache很像,不过@Cached注解原生支持了TTL(超时时间),cacheType有LOCAL/REMOTE/BOTH三种选择, 分别代表本地内存/远程Cache Server(例如Redis)/两级缓存,可根据情况选用,合理的使用LOCAL或BOTH类型可以降低Cache Server的压力以及我们提供的服务的响应时间。支持多级缓存,可以将数据缓存在本地内存、Redis、Tair、Memcached 等多种缓存存储中,提高缓存的命中率和查询效率。一.JetCache的基本概念。
2024-12-04 20:55:26
694
原创 谈一谈三方接口调用方案设计
Token是什么?token即 访问令牌access token,用于接口中标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请一个接口调用的账号,服务器会给出一个appId和一个appSecret(appSecret用于参数签名使用)注意appSecret保存到客户端,需要做一些安全处理,防止泄露。
2024-12-03 22:26:13
815
原创 Arrays.asList() 数组转换成集合酿成的线上事故,差点要滚蛋了!
然而,这个看似简单的方法背后却隐藏着一个大坑,如果不小心处理,可能会导致线上事故,本文也是本人自身项目遇到的惨痛经历,希望能够通过讲解这个问题,让大家在实际工作中避开这个坑。首先先简单描述一下这个事故问题,废话不多说,直接看实际业务代码,也就将一个数组转换为List,并对这个List进行增删操作。同时,也应该从这次事故中吸取教训,加强代码审查和测试,避免类似问题的再次发生。返回的是一个固定长度的List集合,没有add和remove具体实现方法,不能进行增删操作,否则会报错。在实际开发中,务必注意。
2024-12-02 21:52:48
840
原创 面试官:Spring Boot 的启动原理是什么?
下图代码说明了,Spring在初始化全部 单例Bean以后,会执行接口。图片SpringBoot 会在Spring完全启动完成后,才开启Http流量。这给了我们启示:应该在Spring启动完成后开启入口流量。Rpc和 MQ流量 也应该如此,所以建议大家 在或者等位置 注册服务,开启流量。例如 Spring Cloud Eureka 服务发现组件,就是在中注册服务的!
2024-11-29 22:12:49
762
原创 2024年,只有搞颜色的 P 站真正关心网站性能
近年来,层出不穷的现代化前端技术让人眼花缭乱,让网站拥有了更多的交互和丰富的功能,再加上终端设备的配置越来越高,许多网站似乎不用再过分担心性能问题 —— 常常打开网站就要下载超过 10M 的 JS 文件。Pornhub 声称「每一天都有 1.3 亿人访问我们的网站」,因此不难理解他们对于性能的极致追求。根据他们 Web 工程师的采访,该网站主要使用原生 JavaScript。2024 年,大家觉得一个网站 JS 文件的平均大小应该是多少?目前看下来,维基百科网站的 JS 文件最小,仅有 0.2MB。
2024-11-25 20:12:31
428
原创 微服务架构:10个实用设计模式
在现代大规模企业软件开发中,微服务架构能够帮助开发扩展规模并带来很多长期收益。但是微服务架构并不是随处可用的银弹,如果应用在错误的应用程序类型,微服务架构将弊大于利。希望采用微服务架构的开发团队应该遵循最佳实践,并使用一系列可重用的、久经锤炼的设计模式。微服务架构中至关重要的设计模式是独享数据库。实现这种设计模式具有挑战性,需要其他几种密切相关的设计模式(事件驱动、 CQRS、 Saga)来支持。
2024-11-21 21:53:57
1265
原创 面试官:Redis 大 key 多 key,你要怎么拆分?
使用bitmap或布隆过滤器的场景,往往是数据量极大的情况,在这种情况下,Bitmap和布隆过滤器使用空间也比较大,比如用于公司userid匹配的布隆过滤器,就需要512MB的大小,这对redis来说是绝对的大value了。一:key 本身就有很强的相关性,比如多个key 代表一个对象,每个key是对象的一个属性,这种可直接按照特定对象的特征来设置一个新Key——Hash结构, 原先的key则作为这个新Hash 的field。这样算出三个key 的桶分别是 1 , 2, 2。
2024-11-20 20:32:53
722
原创 面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
时间片超线程上下文切换切换查看线程调度引起线程上下文切换的因素由于现在大多计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发,但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大、上下文非常频繁,你的程序反而不能支持更高的TPS。多任务系统往往需要同时执行多道作业。作业数往往大于机器的CPU数,然而一颗CPU同时只能执行一项任务,如何让用户感觉这些任务正在同时进行呢?操作系统的设计者 巧妙地利用了时间片轮转的方式时间片是CPU分配给各个任务(线程)的时间。
2024-11-19 20:13:30
679
原创 一款高颜值、现代化的 Git 可视化管理工具
用户可以将多个分支上的改动,通过拖拽的方式快速地聚合到一个独立分支上,实现灵活地跨分支操作。如果某个虚拟分支确实与你的上游分支有冲突,并且处于蓝点状态,你可以通过应用来修复它。应用冲突分支将首先取消应用所有现有的虚拟分支,然后将合并冲突标记放入你的工作目录并为你标记冲突文件。现在有更多方法来修复你的提交历史记录。最终,你将把工作合并到你选择作为基础分支的分支中,该分支需要与所有虚拟分支进行协调,以使它们与最终需要合并的位置保持同步。虚拟分支就像普通的 Git 分支一样,只是可以同时处理其中的多个分支。
2024-11-18 20:53:29
361
原创 用了 6 年的Spring Boot 项目部署方案!打包 + Shell 脚本部署详解,稳的一批!
正如上面小节说的,shell中的参数 package-name,activeProfile,boot-main 都是由mvn中profiles的properties中提供,是可变的参数,脚本代码本身不需要人工去修改,只需要变的是mvn的参数即可;注:这里第一次执行./shenniu_publish.sh脚本时候,提示了错误信息;filtered节点:脚本中参数变量为pom的profiles中properties的值(该配置,是把mvn中属性值映射生成到sh文件中,如:${package-name})
2024-11-17 18:22:14
862
原创 警惕!List.of() vs Arrays.asList():这些隐藏差异可能让你的代码崩溃!
通过合理选择合适的方法,我们可以编写出更加健壮、高效的代码,从而有效减少错误,提高应用程序的稳定性和可维护性。的特点和差异,我们可以看出,尽管它们都是用于将数组转换为列表的工具,但它们在可变性、空值处理、以及与底层数组的关系等方面有着截然不同的设计理念。在Java开发中,列表是最常用的数据结构之一,快速、灵活地将数组转换为列表是一个常见需求。的区别,帮助开发者更好地理解这两种方法的特性、潜在陷阱及其在不同场景下的最佳使用实践。固定大小列表: 列表大小是固定的,不能添加或删除元素,但可以修改现有元素。
2024-11-14 21:16:32
499
原创 这款轻量级 Java 表达式引擎,真不错!
aviator本来是一个轻量级、高性能的基于JVM的表达式引擎。不过从5.0.0版本开始,aviator升级成为了aviatorScript,成为一个高性能、轻量级寄宿于 JVM (包括 Android 平台)之上的脚本语言。根据官网的介绍,aviator支持的主要特性:支持数字、字符串、正则表达式、布尔值、正则表达式等基本类型,完整支持所有 Java 运算符及优先级等。函数是一等公民,支持闭包和函数式编程。
2024-11-13 21:38:05
972
原创 49.3k star,本地 SSL 证书生成神器,轻松解决 HTTPS 配置痛点
它能让你快速生成本地受信任的SSL/TLS证书,轻松打造安全的HTTPS开发环境,成为许多开发者的首选。除了基本的SSL证书,mkcert还可以生成客户端认证证书、ECDSA密钥、PKCS#12文件等,为复杂场景下的开发提供更高的安全性。相比传统的SSL证书生成方式,它完全摆脱了繁杂的手动配置。不论是本地的localhost,还是特定的IP地址和自定义域名,mkcert都可以生成对应的证书,支持多样化的开发测试环境。这个命令会在你的系统信任存储中安装一个本地CA证书,mkcert生成的所有证书都会被信任。
2024-11-12 21:35:05
723
Java就业指导(改简历,面试要准备的资料)
2021-03-09
StuInfoManagement.zip
2020-07-31
java经典必考面试题(顺序一).docx
2020-07-29
关于#pdfbox#生成的PDF文件正常,转图片中文乱码的问题,如何解决?
2023-02-07
关于pdfbox生成的PDF文件正常,转图片中文乱码,的问题,如何解决?
2022-12-01
在uniapp小程序中怎么获取加载视频的第一帧的图片
2021-06-30
怎么获取上传视频的第一帧的图片
2021-06-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人