
凯哥Java
文章平均质量分 74
凯哥Java
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
微服务+多级缓存,性能起飞
本文探讨了微服务架构下的多级缓存设计策略,从客户端到服务层全面解析性能优化方案。主要内容包括:1)客户端通过Expires响应头实现浏览器静态资源缓存;2)应用层采用CDN智能分发和Nginx静态资源缓存;3)服务层结合进程内缓存(EhCache)与分布式缓存(Redis),通过MQ保证数据一致性。文章指出多级缓存特别适用于数据稳定、高并发及允许短暂不一致的场景,并强调应根据业务特点灵活选择缓存策略,在性能与复杂度之间取得平衡。原创 2025-07-21 14:01:13 · 434 阅读 · 0 评论 -
消除重复代码:MyBatis-Plus自动填充公共字段实战
本文介绍了利用MyBatis-Plus和AOP技术实现数据库公共字段自动填充的解决方案。针对开发中常见的创建时间、更新用户等重复字段维护问题,提供了从基础配置到高级实践的完整实现方案,包括元对象处理器、自定义注解切面处理、多数据源适配等核心策略。文章还分享了生产环境中的性能优化技巧和常见问题解决方案,如线程缓存用户信息、批量操作优化等。实践表明该方案可显著减少重复代码量,降低维护成本,提升开发效率。适用于需要统一管理公共字段的Java企业级应用开发场景。原创 2025-07-16 08:45:00 · 993 阅读 · 0 评论 -
阿里这款多级缓存框架一定要掌握,非常不错!
摘要:阿里开源的JetCache是一款高效的多级缓存框架,支持本地缓存(Caffeine/LinkedHashMap)与Redis分布式缓存的无缝集成。本文详细介绍了JetCache在SpringBoot项目中的三种使用方式:注解驱动的AOP模式(推荐)、API模式和高级API模式,并提供了完整的配置示例和常见问题解决方案。该框架通过自动化缓存加载/失效机制、TTL控制和缓存预热等特性,显著提升高并发系统性能。文章还对比了不同缓存类型的协同工作逻辑,并强调了实体类序列化等重要注意事项。(148字)原创 2025-07-11 13:06:39 · 598 阅读 · 0 评论 -
面试官问我:你写代码会复用公共SQL么?
本文分享3种Java项目中SQL复用的实战方案:MyBatis的<sql>标签实现字段复用,动态SQL封装分页逻辑,常量类管理简单SQL片段。每种方案都有详细代码示例和适用场景分析,帮助开发者提升代码质量,减少重复工作,同时为面试中常见的SQL复用问题提供满分回答模板。原创 2025-07-10 13:13:14 · 648 阅读 · 0 评论 -
利用 MyBatis Plus 拦截器动态管理数据访问权限
2. 创建拦截器@Component@Autowired@Bean功能权限与数据权限02进阶版实现1. 建立范围枚举@Getter2. 建立角色枚举@GetterDATA_MANAGER("数据管理员", "DATA_MANAGER", DataScope.ALL),DATA_AUDITOR("数据审核员", "DATA_AUDITOR", DataScope.DEPT),原创 2024-11-17 13:21:28 · 713 阅读 · 0 评论 -
Nginx实用篇:实现负载均衡、限流与动静分离
Nginx 以其灵活多变的配置方式和高效的执行能力,成为现代 Web 架构不可或缺的一部分。无论是通过反向代理实现的负载均衡,还是限流机制以及动静分离策略,都能极大地改善服务质量和用户体验。熟练掌握这些配置技巧,可以帮助我们更好地发挥 Nginx 的潜力,进一步提升 Web 应用的整体性能。原创 2024-09-16 09:16:17 · 1530 阅读 · 0 评论 -
Nginx实用篇:实现负载均衡、限流与动静分离
Nginx 以其灵活多变的配置方式和高效的执行能力,成为现代 Web 架构不可或缺的一部分。无论是通过反向代理实现的负载均衡,还是限流机制以及动静分离策略,都能极大地改善服务质量和用户体验。熟练掌握这些配置技巧,可以帮助我们更好地发挥 Nginx 的潜力,进一步提升 Web 应用的整体性能。原创 2024-09-16 11:15:00 · 1049 阅读 · 0 评论 -
JavaScript 与Java什么关系?为什么名字中带有Java?
JavaScript被命名为"JavaScript",是因为它最初的版本是在1995年由网景公司开发的,它的原名是"Mocha",之后在不久后改名为"LiveScript"。在这个时期,Java语言正受到热烈关注,因此网景公司决定将"Livescript"改名为"JavaScript",以便能够借用Java的声誉来推广这门新的脚本语言。JavaScript和Java之间的共同点是Java语言的一些思想和语法被部分应用在了JavaScript中,例如基本语法、面向对象编程、方法调用等。原创 2024-02-01 19:06:34 · 1918 阅读 · 0 评论 -
解锁讯飞星火:从零开始,教你如何轻松驾驭这款全能AI工具
玩法举例:假如你需要一份2023年的部门年终总结报告,只需告诉星火助手大致框架和关键数据,它就能为你生成一份初步的报告草稿,你只需稍加润色和补充个性化内容即可。智能写作助手接入如下:智能写作助手案例截图程序编写助手功能点:根据用户需求,生成对应的代码片段,并提供详尽的参数说明和注意事项。玩法举例:当你需要将Word文档转换为PDF格式的代码时,只需向星火助手输入“请帮我生成将Word转PDF的代码”,它会快速提供一段转换代码,同时告知你运行该代码所需的环境配置和步骤。程序编写助手实例截图。原创 2024-01-31 23:10:40 · 2460 阅读 · 0 评论 -
ThinkPad产品如何升级BIOS程序
4) 在驱动列表页面上,选择相应的操作系统信息,单击“BIOS”(有光盘版和非光盘版两个版本,如Windows系统可以正常进入,建议选择非光盘版“BIOS 升级程序”)。进如Windows系统后,按下 “Win+R” 组合键打开运行窗口,输入dxdiag,单击确定,弹出的窗口中可以看到当前BIOS版本信息。三、查看协议,选择“I accept the agreement”,单击"Next"按钮。四、选择“Install”(安装),单击"Next"按钮。五、确认进行安装操作,单击"Install"按钮。原创 2024-01-01 13:44:26 · 3193 阅读 · 0 评论 -
MySQL的替换函数及补全函数的使用
不支持树形结构递归查询的。但是,又想实现树形结构的一种思路在实际开发中,有时候,我们会遇到这样的情况,数据库存储树形结构,又想展示出树形结构,MySQL数据库是8.0以下的。怎办?树形结构如下图:要实现上面的功能?怎么实现呢?凯哥这里提供一种变相的方法:先使用MySQL的替换函数,将上文中的exclld种地小数点去掉。原创 2023-12-25 13:09:29 · 692 阅读 · 0 评论 -
使用office打开word文档时候提示错误:0x426-0x0的解决方案
昨天还用的好好的,怎么今天就不行了?为什么呢?这个错误导致office无法启动通常是由于office软件所依赖的服务无法正常运行导致。为什么会无法启动呢?突然想到,凯哥昨天手贱,昨天电脑重启时候,提示有需要优化的启动项,于是在wind+R,运行中输入msconfig,然后找到启动,咔咔咔的一顿禁止启动,可能不小心把office启动也给关闭了:今天在来看启动应用:Microsoft To Do 果然是禁用的,启动后,在打开word试试。还是不行,还不能打开。那么是不是还有其他服务没有启动呢?原创 2023-12-24 08:46:22 · 6435 阅读 · 0 评论 -
【已解决】Spring data jpa的@query的传入参数是对象怎么匹配参数
这里,我们使用#{}来访问employee对象的firstName和lastName属性。注意,#{}的内容需要用双引号括起来。在使用@Query注解时,可以使用spel表达式来访问对象的属性。我们知道,在使用JPA的时候,如果参数是一个一个的话,有两种方式匹配。Spring Data JPA会自动将该对象转换为查询语句中的参数。或者在 String id前面加上@Param("id")③:如果入参是一个对象的话,那么,参数又是如何匹配的呢?2正好对应入参的cId和id。②:使用@Param进行显示指定。原创 2023-12-23 12:00:38 · 2026 阅读 · 0 评论 -
【已解决】使用fastjson返回给echarts的时候怎么不忽略null值?
在使用fastjson的将对象序列化成json字符串的时候,如果对象属性为null的话,会被忽略掉的。有时候,这些null值还是很有用的。比如我们在使用echarts的时候,返回给前端就不能因为null而忽略,如果忽略了null值,就会出现如下的错误:那么使用fastjson怎么解决这个问题?原创 2023-12-22 13:28:35 · 1103 阅读 · 1 评论 -
【已解决】在使用frp内网穿透访问VUE项目提示:Invalid Host/Origin header 解决方案
在使用frp作为内网穿透的时候,配置了多端口穿透(也是第一次配置frp多端口),端口配置如下:8079:vue项目的管理系统8080:vue项目的前台系统8082:普通的web项目。原创 2023-12-22 12:58:51 · 1578 阅读 · 2 评论 -
frp配置多端口内网穿透?frp多端口怎么配置?
使用frp作为内网穿透的时候,有时候,我们需要多个端口穿透,怎么配置呢?思考:我们知道frp要想内网穿透,需要配置服务端和客户端。如果需要直接访问80端口的话,需要还需要在nginx做配置。原创 2023-12-22 12:48:19 · 4772 阅读 · 0 评论 -
在Docker中安装kafka遇到问题记录
这样,Kafka就会告知客户端通过连接到宿主机的IP地址的9092端口来访问Kafka,从而使Windows宿主机能够访问到Kafka服务。要使Windows宿主机能够访问到容器内的IP地址,可以尝试使用Docker的端口映射功能,将容器的端口映射到宿主机上的一个端口。如果在Windows的宿主机上无法ping通172.17.0.2,但在Docker中的zk能够ping通宿主机的IP,这可能是由于Windows主机上的网络配置导致的。,指定了Kafka连接到的Zookeeper服务的地址和端口。原创 2023-12-21 12:45:17 · 1397 阅读 · 0 评论 -
SDK和API的区别
简单一句话:api就是一个函数接口,函数内容的功能无法独立运行,只有连接到服务器才可以发挥作用。sdk是开发工具包,含有功能和函数接口,可以独立运行。原创 2023-12-21 12:43:10 · 532 阅读 · 0 评论 -
【已解决】Java中,判断:集合中是否包含指定元素(模糊匹配)比如权限中的user:list或者是user:*这种判断
在工作中,有时候,我们需要对list中是否包含了指定元素进行判断,但是,有时候又需要支持模糊匹配,这个时候怎么办呢?比如权限,我们知道,权限不仅可以配置完整的路径,也可以配置通配符。比如,系统管理员角色直接返回的权限是*。子公司A的管理员返回的是:departmentA:*的权限。子公司A的人事权限是:hrA:*。你自己登录系统后,返回的权限是:userA:view这个权限。类似这样的,一个人不止是只有一个权限。原创 2023-12-21 12:40:48 · 1876 阅读 · 0 评论 -
java 怎么读取文件创建时间?
在工作时候,我们有时候需要获取到文件的最后更新时间,根据最近更新时间,来处理其他业务。接下来,我们可以调用File对象的lastModified()方法来获取文件的最后修改时间。通过上述步骤,你可以轻松地获取文件的创建时间并进行进一步的处理。需要注意的是,你需要将上述代码中的“文件路径”替换为你实际要读取的文件的路径。下面是一个完整的代码示例,演示了如何实现Java读取文件创建时间的功能。请将上述代码中的"文件路径"替换为你实际要读取的文件的路径。下面是一个简单的关系图,描述了本文中涉及到的类之间的关系。原创 2023-12-21 12:36:14 · 2600 阅读 · 1 评论 -
【已解决】修改了网站的class样式name值,会影响SEO,搜索引擎抓取网站及排名吗?
修改了网站的class样式name值,会影响搜索引擎抓取网站及排名吗?如果你仅仅修改了网站class样式的名称,而没有改变网站的结构和内容,那么搜索引擎通常不会因此而影响它对网站的抓取和排名。但如果你改变了class名称,而导致网站结构或内容发生了变化,那么搜索引擎就会重新抓取你的网站,并且可能会重新评估你的网站排名。同时,也需要考虑修改class样式名称是否对网站的用户友好性产生影响,因为用户体验也是搜索引擎考虑的重要因素之一。原创 2023-12-21 10:39:52 · 1230 阅读 · 0 评论 -
【已解决】本地使用Git拉取代码的时候提示:master has no tracked branch的解决办法
操作步骤:现在自己的Git服务器上,新建了对应的项目,直接在Git页面中,添加了redme文件后,再git clone到本。把下载的zip解压后,放到Git检出的目录下,修改东西,准备提交。请注意,执行这个命令时要慎重,因为它会合并远程仓库和本地仓库的数据。你遇到的问题“master has no tracked branch”通常是因为远程仓库和本地仓库的起始点不一致导致的。需求描述:因为是从GitHub上下载的一个项目,直接下载的ZIP包,然后想把这个推送到自己Git服务器上。原创 2023-12-21 10:36:32 · 12724 阅读 · 0 评论 -
mybatis 批量查询时候多条件,怎么写?
在循环体中,我们将每个detail对象中的schedulingId和name作为查询条件,使用AND操作符连接。在MyBatis中,根据传入的details参数来动态生成查询条件是比较复杂的。这样,当调用selectList()方法时,MyBatis会根据传入的details参数动态生成查询条件,返回符合条件的Detail对象列表。最后,将生成的查询语句放在<select>元素的内部。查询结果的类型是Detail。首先,我们需要使用<select>元素来定义查询语句的id、参数类型和结果类型。原创 2023-12-20 13:26:46 · 775 阅读 · 0 评论 -
【已解决】Redis序列化反序列化不一致 - String类型值多了双引号问题
在项目中使用spring 的RedisTemplate从redis中获取数据的时候,发现字符串的value多了双引号。原创 2023-12-20 13:23:32 · 2662 阅读 · 0 评论 -
在使用Map的时候,怎么保证插入数据的数据,就是map的put顺序呢 ?
在Java中,Map接口的实现类并不能保证元素的顺序。但是可以通过使用TreeMap来实现按照插入顺序排序的Map。TreeMap是基于红黑树实现的,可以按照元素的自然顺序或者自定义的顺序进行排序。这里使用LinkedHashMap代替了TreeMap,LinkedHashMap可以保持元素的插入顺序。这样,插入到Map中的顺序将会保持不变。那么我们将HashMap缓存TreeMap,发现,依然是不能按照我们put进去的顺序入库的。上面代码,怎么保证入库后顺序就是put到map的顺序?原创 2023-12-20 13:10:11 · 1220 阅读 · 0 评论 -
简单快速的用SpringBoot访问静态资源包括(图片、html)及spring.resources.static-locations不能正常访问其他盘符文件解决方案
如果文件不多的话可以考虑将图片放到项目的静态文件夹中。如果图片多的话就不可能一张一张的往里面放了!表示图片资源在本地的位置。表示静态资源访问的格式。原创 2023-12-20 13:07:56 · 1380 阅读 · 0 评论 -
【已解决】Mysql在更新的时候,需要更新的字段是其他表查询的值,这个时候update语句怎么写
执行上面语句之后就能将A表中id =5的且B表type=5查询后的id设置个A表的floor字段了。例如:我想要更新A表中的floor字段。但是这个字段的是是根据条件在B表中查询后,得到的值。Mysql在更新的时候,需要更新的字段是其他表查询的值,这个时候update语句怎么写?要点:这里使用到了JOIN...ON语句。这样需求的sql语句怎么写?原创 2023-12-20 13:03:45 · 513 阅读 · 0 评论 -
【已解决】解决Springboot项目访问本地图片等静态资源无法访问的问题
今天在开发一个招聘系统的时候,有功能,有投递就会有随之而来的对吧,我投递过的简历,,就是说,用于存放PDF(),比如说文件夹在这个位置,那么我的项目就得必须读取到这个文件夹的url里的pdf文件也好,img也好,然后我就遇到了各种问题读取不到;那么。原创 2023-12-20 13:00:41 · 3760 阅读 · 0 评论 -
系统可控实现方案
通过约定一个加密算法,客户端在发起请求时将所有的非空参数按程序拼接在一起,形成一个sign,并将其放在请求头中传递给后端服务,后端服务端使用相同的算法生成sign,并将其与传入的sign进行比较,以判断是否被篡改。加解密是保护数据安全和防止数据泄露的重要手段。总结: 通过以上方案和技术的应用,可以有效实现系统的可控性,保护用户数据的安全和隐私,防止接口数据的篡改、暴力请求以及数据的泄密。系统可控实现方案是指通过一系列的技术和策略,确保系统在运行过程中受到合理的保护,防止数据被篡改、泄密以及暴力请求的攻击。原创 2023-12-20 12:52:02 · 1191 阅读 · 0 评论 -
为什么hash数据结构的底层,使用skiplist比直接使用hash会更节省内存呢?
元素:abc,权重:3」节点的 leve[1] 的下一个指针指向了「元素:abcde,权重:4」的节点,然后将其和要查找的节点比较。虽然「元素:abcde,权重:4」的节点的权重和要查找的权重相同,但是当前节点的 SDS 类型数据「大于」要查找的数据,所以会继续跳到「元素:abc,权重:3」节点的下一层去找,也就是 leve[0];「元素:abc,权重:3」节点的 leve[0] 的下一个指针指向了「元素:abcd,权重:4」的节点,该节点正是要查找的节点,查询结束。举个例子,下图有个 3 层级的跳表。原创 2023-12-20 12:50:50 · 434 阅读 · 0 评论 -
【已解决】taos时序数据库3.0版本,怎么按照时间分组?
taos数据库中按照时间分组,在2.4版本时候可以直接使用INTERVAL(time_unit)来查询。前面可以直接添加_ts的。那么在3.0版本时候,怎么修改呢?原创 2023-12-20 12:49:48 · 1135 阅读 · 0 评论 -
页面菜单,通过get请求一个url后,跳转另外一个页面,+丢失问题
当 URL 中的 '+' 被解析为空格后,你可以在前端再次进行编码,将空格转换回 '+',然后再发起 POST 请求。比如accessToken的值:YU+OHLJ2pyDRbiZWOuo4LQ== 这个时候,在post请求后端,后端接受到的参数,+变空格了。A系统菜单是get请求到B系统的一个缓冲页面,然后这个缓冲页面获取到url中的accessToken后,在这个页面中通过post请求后端接口。然后将编码后的 accessToken 作为参数添加到 POST 请求中。原创 2023-12-20 12:47:59 · 791 阅读 · 0 评论 -
Java实现对图片压缩指定大小。比如1260*945。如果图片尺寸大于,就压缩。小于,就拉伸到指定大小
Java实现对图片压缩指定大小。// 创建一个新的 BufferedImage,用于存放处理后的图片。System.out.println("图片处理完成。// 创建一个 Graphics2D 对象,用于绘制新图片。// 如果原始图片尺寸小于目标尺寸,则进行拉伸。// 如果原始图片尺寸大于目标尺寸,则进行压缩。// 获取原始图片的尺寸。// 保存处理后的图片。原创 2023-12-16 20:28:59 · 1630 阅读 · 0 评论 -
在非Spring环境下Main方法中,怎么使用spring的ThreadPoolTaskScheduler启动Scheduler?
作为Java开发人员,在使用spring框架的时候,如果想要获取到线程池对象,可以直接使用spring框架提供的ThreadPoolxxx来获取。// 初始化你的任务和触发器(这里假设 jobDTO 和 cronTrigger 已经定义)其实就是在调用任务器调度任务前执行taskScheduler.initializer()就可以了。// 初始化你的任务和触发器(这里假设 jobDTO 和 cronTrigger 已经定义)通过上面两步,就可以在Spring环境下使用带有定时任务的线程池了。原创 2023-12-07 13:09:25 · 1086 阅读 · 0 评论 -
OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的
在真实的环境中,合理配置虚拟内存大小,结合物理内存和系统负载进行调优,是确保系统平稳运行的关键。最近遇到一个情况,物理内存不够,导致项目一两天就自动死掉了。服务器物理内存就2GB,上面有好多服务,但是,又不能停,导致一个新上的项目,总是过一两天就自己死掉了。从上图中,我们可以看到,swap区域的默认大小是1GB的,可用空间为0.这说明,交换区域已经被占满了,看来是需要提高swap区大小了。好了,通过上面介绍,我们知道了,虚拟内存是什么了,那么接下来我们,需要思考的是,Linux操作系统下怎么扩大交换区呢?原创 2023-12-02 12:35:12 · 1147 阅读 · 0 评论 -
【已解决】如果将MySQL数据库中的表生成PDM
①:打开MySQL客户端,连接到需要生成PDM的数据库,并将表导出成sql文件的。注意:这里只导出结构,不需要导出数据的。自动生成的,不会添加表之间的关系。如果需要添加表结构之间的关系,需要自己在PowerDesigner中手动的去添加关联关系的。有时候,我们需要MySQL数据库中的表生成对应的PDM文件,这里凯哥就讲讲第一种将MySQL数据库的表生成对应的PDM文件。这里凯哥使用的是PowerDesigner来生成PDM的。⑤:点击确当,就可以生成对应的PDM文件了。需要生成PDM的数据库文件。原创 2023-07-31 22:05:14 · 459 阅读 · 0 评论 -
【已解决】Spring boot项目获取到resource目录下文件完整路径怎么获取 ?
在实际开发过程中,可能有时候,我们将文件放在resource下,在程序中需要获取到文件路径然后操作。比如,将公钥放到resource文件夹下,在程序中需要获取到这个公钥的完整路径。怎么操作?原创 2023-07-02 18:21:08 · 3103 阅读 · 0 评论 -
【图文教程】云服务器上,Linux安装VSFTPD组件及遇到的问题
我们知道,ftp服务器,可能会提供出去(虽然凯哥这里不会提供出去),给其他的三方人员使用,从数据及服务器安全角度来考虑,我们给ftp服务一个单独的用户。如果,你不行,服务器重启之后,FTP服务就不能访问,或者每次重启服务器之后,都需要手动启动VSFTPD的话,可以将VSFTPD设置成随机启动的。这个被动默认是开启的。如果你的服务器上,SElinux是开启的,可能会出现,外网可以访问,没目录返回,且也上传不了。在执行完上面命令后,如果返回结果中,看到上图高亮的两个是off的话,就代表,没有开启外网访问。原创 2023-01-12 17:37:27 · 792 阅读 · 1 评论 -
Docker高级篇:实战Redis集群-从3主3从变为4主4从
通过前面两篇,我们学会了三主三从的Redis集群搭建及主从容错切换迁移,随着业务增加,可能会有主从扩容的,所以,本文我们来实战主从扩容在之前3主3从的架构,随着业务的增加,流量扛不住了。需要由3主3从变为4主4从。架构变化图如下:回顾下之前3主3从槽位分配如下:那么现在变成了4主4从了。多出来的这一对主从,槽位怎么分配ne?实战步骤。原创 2022-12-21 10:11:07 · 328 阅读 · 0 评论 -
【图文教程】若依前后端分离版本-菜单怎么设置
在使用若依前后端分离版本作为基础架构的时候,需要新建菜单怎么操作?本文凯哥将详细讲解怎么添加。1:登录若依系统后,[系统管理]>>[菜单]先新建一个一级菜单。可以模仿【系统管理】菜单来创建:系统菜单:我们自己创建的【淘宝客】菜单如下:这里需要注意,路由地址。创建完成之后,我们使用代码自动生成工具,生成我们需要的表相关的controller、server等2:将代码添加到对应位置,执行菜单sql语句。3:修改sys_menu中,刚插入的数据。将刚插入的菜单,的parent_id修改成,我们刚才手动创建的【淘宝原创 2022-12-03 18:44:09 · 2440 阅读 · 0 评论