- 博客(417)
- 资源 (6)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【整理】后端接口设计和优化相关思路汇总
在高并发的后端系统中,合理使用缓存可以显著提升性能,减轻数据库的压力,并缩短接口的响应时间。缓存的核心思想是将一些计算量大、访问频繁的数据暂时存储在内存中(如Redis、Memcached等),当下次请求相同数据时,可以直接从缓存中获取,而不需要再次访问数据库或执行复杂的计算。
2024-08-19 21:45:24
911
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 慢SQL优化的30个思路方案整理
对于一些特别大的表,单靠索引优化可能效果有限。这时,可以通过业务层面的优化来限制查询的时间范围,从而缩小查询范围,提高查询性能。以下是一些业务上可以采取的优化措施:对大表进行时间范围分区(如按月、按季度),在查询时只针对相关时间段的分区进行查询,避免全表扫描。在业务层限制查询的时间窗口,如只允许查询最近一年的数据。对于超出时间窗口的查询,可以要求用户提供更具体的查询条件以缩小查询范围。将历史数据定期归档到历史表或其他存储介质中,保持主表的数据量在一个合理范围内。查询时先在主表中查找,如果需要再到历史表中
2024-08-07 20:46:27
1261
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 系统出现高CPU可能风险因素整理
死循环是最常见的原因之一。当代码中存在无穷循环(例如在多线程环境下的HashMap线程不安全问题或分页查询条件不明确导致的无限循环),会导致CPU资源被持续占用。
2024-08-06 22:26:51
313
原创 Java使用Graphics绘制图片文字边缘出现粗糙的锯齿问题解决
设置抗锯齿:通过 setRenderingHint 方法,设置抗锯齿选项。RenderingHints.KEY_ANTIALIASING 控制整体的抗锯齿效果,而 RenderingHints.KEY_TEXT_ANTIALIASING 则专门控制文字的抗锯齿效果。转换为 Graphics2D:Graphics2D 是 Graphics 类的子类,它提供了更多的绘图控制功能,包括设置抗锯齿。文字出现锯齿的现象通常是由于显示设备的分辨率有限,无法完美地表现出字符的曲线和斜线的原因。
2024-08-19 21:11:36
174
原创 【代码优化】使用枚举替代 if/else 和 switch-case 语句的实践
使用枚举替代 if/else 和 switch-case 语句是一种提升代码可读性、可维护性和扩展性的有效方法。通过将不同的逻辑分支封装在枚举实例中,代码变得更加简洁,符合开闭原则,并且能够减少重复代码和潜在的错误。尽管如此,开发者在使用这种方法时仍需权衡其适用性,确保它适用于当前的开发场景。通过实践和不断优化,开发者可以充分利用枚举的强大功能,编写出更具结构化、扩展性和维护性的代码,提升整体的开发效率和代码质量。
2024-08-10 10:36:41
786
原创 【Vim 一下日志文件,Java 进程没了?】学习总结
通过结合dmesg -T和grep命令,可以有效地筛选和分析与Java相关的内核消息。这种方法在诊断系统级别的问题时非常有用,尤其是涉及到内存管理、I/O操作和硬件驱动的情况。根据筛选出的具体错误信息,采取相应的措施进行优化和修复。
2024-08-03 17:25:52
453
原创 RequestMappingHandlerMapping工作原理和应用实践
RequestMappingHandlerMapping 的主要任务是扫描 Spring 容器中的所有处理器(标注了 @Controller 或 @RestController 注解的类),并找到其中标注了 @RequestMapping、@GetMapping、@PostMapping 等注解的方法,将这些方法注册到一个映射表中,以便在接收到 HTTP 请求时能快速找到并执行对应的处理器方法。
2024-06-30 14:45:27
901
原创 【线上多线程问题总结】记一次项目线程数持续增加至1500多问题
根据运维反馈的线程数量趋势图 ,可以看到在1月~3月中旬线程数都是稳定的,这个数量大概在几十~1百左右,这个数量还比较合理,tomcat的线程数以及项目中的线程池。但是从3月底开始线程数就一直持续上升,到4月底又突然降低至稳定点,然后又持续波动,并在5月1号后持续上升,截止今天容器的线程数以及增长到1500多。
2024-06-29 07:42:08
762
原创 【JDBC】Oracle数据库连接问题记录
oracle驱动包未正确加载,可以先尝试使用下面方式加载检查类是否存在,如果不存在需要手动下载odbc包。这是因为oracle驱动版本过低造成的,删除或屏蔽目前驱动版本,驱动添加升级。
2024-06-20 22:38:17
329
原创 本地启动时避免将服务注册到Eureka网关
在某些情况下,我们获取的配置都是远程配置中心的,即使本地开发也不能随意修改影响别人,针对于此可以通过本地修改代码的方式,例如可以限制获取本地的操作系统属性,如果是windows或者mac则不进行注册。当在本地开发时,有时你可能想要避免将服务注册到网关,这样可以更轻松地进行单独的服务测试。在使用Eureka注册服务时,你可以通过配置来控制服务是否注册到Eureka服务器。这样配置后,服务启动时将不会向Eureka注册自己,也不会从Eureka获取服务注册信息。这对本地开发和测试来说是非常方便的。
2023-12-10 11:47:42
900
原创 根据表名称快速查询表所有字段是否包含特定数据筛选
根据表名称快速查询表所有字段是否包含特定数据筛选。当前需要清理某个表中所有字段,检查是否有包含@DEl@字符的脏数据,如果字段比较少的直接根据字段查询即可,但是如果有几十个字段的话,逐个检查会很慢。通过这种方式相对来说可以更加快速匹配数据和定位问题字段。2:通过字段拼接的方式构建一个筛选条件。1:根据表名称获取当前表所有的字段。3:使用这个统一的一个字段进行查询。
2023-09-25 20:25:56
451
原创 Linux内核网络参数调优命令
当服务器的处理能力有限,无法及时处理大量的连接请求时,可以通过增大 somaxconn 参数,增加监听队列的长度,让更多的连接请求可以先暂时存放在队列中等待处理。这样一来,即使服务器繁忙,新的连接请求也不会立即被拒绝,而是可以暂时等待,直到服务器处理完前面的连接再逐个处理队列中的连接请求。cat /proc/sys/net/core/netdev_max_backlog,该文件表示在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
2023-08-05 20:56:58
1818
原创 AIPRM for ChatGPT 提示词模板扩展工具实践
AIPRM for ChatGPT是一个Chrome浏览器扩展程序,基于Chromium内核开发的浏览器都可以使用该扩展,比如微软的Edge浏览器等。在AIPRM的帮助下,我们可以在ChatGPT中一键使用各种专门为网站SEO、SaaS、营销、艺术、编程等领域设计的提示模板。此外,我们也可以在AIPRM上保存、分享、编辑、删除自己或他人创建的提示模板。如果喜欢或不喜欢某个模板,我们还可以在社区中投票反馈,最终影响这个模板的推荐排名。
2023-07-02 14:56:17
1413
1
原创 分布式配置中心Apollo中Namespace的类型整理
公共类型的Namespace具有public权限。公共类型的Namespace相当于游离于应用之外的配置,且通过Namespace的名称去标识公共Namespace,所以公共的Namespace的名称必须全局唯一。
2023-06-19 19:51:23
814
原创 MyBatis插件开发——解析和记录输出完整的SQL语句
自定义MyBatis插件,该插件实现当MyBatis执行SQL发生异常时输出错误原因,SQL参数以及完整的SQL语句。在日常的开发中我们可以通过mybatis配置设置是否输出SQL,但是对于正常运行的SQL全部输出出来日志量过大,所以这里实现了仅针对于发生异常的时候输出执行的SQL语句。对于日志输出的SQL框架仅提供了带有占位符的SQL以及对应的参数,如果想要测试运行这个SQL还需要自己手动拼接下,所以为了提高效率,在插件中对于SQL进行解析和占位符的替换,最终输出的SQL语句是可以直接在数据库中运行的。
2023-06-18 14:25:00
3109
原创 MySQL 根据表名称生成完整select语句
在编写SQL语句的时候我们经常写SELECT *的方式,但是这个大多仅在临时查询,对于真正使用的时候一般还是写字段名称的方式,但是字段名称一般都比较多,一个一个写比较麻烦,对于此我们可以通过INFORMATION_SCHEMA.COLUMNS快速生成某个表的(select 字段A,字段B from 表名称),提高工作效率。它是INFORMATION_SCHEMA数据库的一部分,该数据库是一个系统目录,包含有关RDBMS中的数据库、表、列和其他数据库对象的元数据。替换表名称为自己需要的特定的表名称。
2023-06-11 17:39:15
523
原创 后台服务接口间大文件的流式发送和读取
使用HTTP协议进行数据流式传输是一种常见的方法。对于大文件数据传输可以使用HTTP的chunked编码或使用多部分响应来实现数据流式传输。【HTTP的chunked编码】在发送数据的服务中,可以将数据切分为较小的块,并使用HTTP的chunked编码将这些块发送给接收数据的服务。接收数据的服务在接收到每个块时可以进行相应的处理。【使用多部分响应】发送数据的服务可以将数据分割为多个部分,并使用多部分响应将这些部分作为独立的消息发送给接收数据的服务。接收数据的服务可以逐个处理这些部分。
2023-06-11 17:11:52
3546
1
原创 关于前后端分离的Cookie的事项
同源策略主要是由浏览器实施的一种安全机制,用于限制不同源(协议,域名,端口)之间的客户端脚本访问。同源策略确实会限制浏览器中前端应用程序对不同源服务器的访问,但在服务器与服务器之间的通信中,同源策略并不适用。
2023-06-11 10:25:28
4094
1
原创 RabbitMQ消息属性详解
在AMQP规范中,message-id和correlation-id是“应用级别使用”的属性,并没有提供正式的行为定义。这意味着就规范而言,你可以利用它们实现任何目的。这两个字段允许多达255个字节的UTF-8编码数据,并以未压缩的方式存储在Basic.Properties数据结构中。
2023-05-31 21:26:46
2716
原创 如何在Java中使用同步回调和异步回调
使用异步回调函数的方法是使用 CompletableFuture API。这个强大的 API 在 Java 8 中引入,有助于执行和组合异步方法调用。它完成了我们在前面的示例中所做的一切,例如创建一个新线程然后启动和管理它
2023-04-16 20:24:52
2881
1
原创 通过javassist操作字节码实现MyBatis动态生成DAO的实现类功能
mybatis帮我们简化了通用的实现类的代码,并通过字节码技术在运行期间根据接口和xml文件自动生成了对应的实现类。当前就通过javassist来实现类似的过程。注意上面的代码重点在于原来通过IOC注入的方式是由mybatis提供其实现类,但是现在是通过我们自定义的MyBatisGenerateDaoProxy工具类根据接口创建对应的实现类代码。【1】这里使用的javassist类是mybatis所自行封装提供的类,其所提供的api和javassist所提供的api相同。【4】创建对应的xml代码。
2023-04-06 21:03:13
713
1
原创 ChatGPT使用介绍、ChatGPT+编程、相关组件和插件记录
OpenAI的GPT-3模型为程序员提供了开发接口。要掌握开发接口的使用方法,就得花时间阅读相关的技术文档。如果没有时间阅读文档,也可以用ChatGPT生成示例代码,从而快速了解接口的基本用法。
2023-03-23 21:00:14
8070
1
原创 《Linux是怎样工作的》 读书笔记(二)
Linux通过内核中名为内存管理系统的功能来管理系统上搭载的所有内存。除了各种进程以外,内核本身也需要使用内存。
2023-03-20 21:42:32
340
原创 《Linux是怎样工作的》 读书笔记(一)
Linux借助硬件,使进程无法直接访问设备。具体来说,CPU存在内核模式和用户模式两种模式,只有处于内核模式时才允许访问设备。另外,使设备驱动程序在内核模式下运行,使进程在用户模式下运行。
2023-03-19 21:08:45
482
原创 使用AppSmith(PagePlug )低代码平台快速构建小程序应用实践
Appsmith 是一个开源框架,可让您的团队更快、更协作地构建自定义内部应用程序,如仪表板、管理面板、CRUD 应用程序。PagePlug 是基于 AppSmith 打造的更适合中国开发者的开源前端低代码项目。无需侵入客户架构,直接连接数据源(API、DB),无需学习任何第三方概念,使用基础 js知识就可以快速生成多平台前端应用,包括 PC 端 web 应用、微信小程序等。PagePlug提供的几款模板参考。
2023-03-04 17:26:58
7861
4
原创 Easy-Es框架实践测试整理 基于ElasticSearch的ORM框架
Easy-Es(简称EE)是一款基于ElasticSearch(简称Es)官方提供的RestHighLevelClient打造的ORM开发框架,在 RestHighLevelClient 的基础上,只做增强不做改变,为简化开发、提高效率而生。EE是Mybatis-Plus的Es平替版,在有些方面甚至比MP更简单,同时也融入了更多Es独有的功能,助力您快速实现各种场景的开发.
2023-02-11 20:54:22
3219
6
原创 logstash毫秒时间戳转日期以及使用业务日志时间戳替换原始@timestamp
详细观察内部数据发现其中日志数据有一个timestamp字段保存的是业务日志的毫秒级时间戳,经过和@timestamp数据对比发现二者的时间不匹配。经过分析得知@timestamp是按照logstash插入es数据的时间来排序,而且数据是按照批次来的,每一批次的时间可能都是大径相同,结果就是导致上面描述的一系列问题。
2023-02-11 20:35:42
2450
原创 《技术领导力:程序员如何才能带团队》 读书笔记
一位管理者最重要的是给团队指明方向,包括技术方向和业务方向,还有个人成长方向。与下属相比,领导者的优势不只在于他的专业能力,还在于他的眼光和胸怀。既然选择做技术管理,你就要有成就他人的心胸,同时还要有超出一般人的眼界,能够给予团队正确的方向。同时,要保持对技术的兴趣,多关注新技术的发展,否则你很难在重大的技术决策上做出正确的决定。
2023-02-02 21:49:59
734
原创 工作笔记——微信支付开发相关知识整理
小程序支付是指商户通过调用微信支付小程序支付接口,在微信小程序平台内实现支付功能;用户打开商家助手小程序下单,输入支付密码并完成支付后,返回商家小程序。
2023-01-08 19:40:32
2834
原创 开发检查测试参考文档整理
成长的关键在于总结和反思,为了避免相同的问题重复发生,避免无谓的踩坑,提高工作效率,减少共性BUG的产生。我这里将日常WEB开发中常见的开发注意自测检查事项进行了抽象,整理,分类,希望能够帮助开发人员减少出现这些易错的,常见的开发问题。
2022-12-26 21:19:30
894
原创 OWASP API安全Top 10
OWASP API安全Top 10的发布,第一次在公众视野中理清了API安全的常见问题类型,同时也从API生命周期管理、纵深防御的安全设计思想上,为API安全的综合治理提供了指导方向。当然,作为API安全的第一个版本,也会有它的不足,比如笔者认为API1与API5对问题成因的阐述,没有传统的Web安全中对水平越权、垂直越权的描述清晰,容易导致问题归类划分的混乱,但仍有理由相信,OWASP API安全Top 10对业界的重大意义,未来的版本发布更值得期待。
2022-12-18 16:10:34
1055
原创 《API安全技术与实战》 读书笔记 API的前生今世和API安全的演进
API安全是从安全的角度关注API领域的安全问题和这些问题的解决方案,从技术和管理两个层面提高API自身和API周边生态的安全性。
2022-12-18 16:05:58
595
原创 Java脚本化编程实践整理 ScriptEngineManager万字详解
对于多变的计算公式,应用程序扩展/定制:你可以“外部化”应用程序的各个部分,例如配置脚本、业务逻辑/规则和金融应用程序的数学表达式。对于规则引擎类似的功能实现,对于其中的业务流程,动态脚本使用也可以参考使用这种脚本语言特性。下图是Kettle软件工具的截图,可以看到下面有很多的脚本处理方式,Kettle就是Java编写的,我自己就使用过很多次其中的动态脚本的功能,那么对于这类场景来说,我们就可以去使用ScriptEngineManager去帮助我们实现。
2022-12-10 15:07:06
5444
1
原创 管道模式 流处理
管道这个名字源于自来水厂的原水处理过程。原水要经过管道,一层层地过滤、沉淀、去杂质、消毒,到管道另一端形成纯净水。我们不应该把所有原水的过滤都放在一个管道中去提纯,而应该把处理过程进行划分,把不同的处理分配在不同的阀门上,第一道阀门调节什么,第二道调节什么……最后组合起来形成过滤纯净水的管道。这种处理方式实际上体现了一种分治(Divid and Conquer)思想,这是一种古老且非常有效的思想。接下来,我们来看管道模式的实际应用。一个典型的管道模式,会涉及以下3个主要的角色。(1)阀门:处理数据的节点
2022-12-04 15:26:06
390
原创 Selenium隐藏浏览器和元素截屏实践
在使用Selenium采集网页数据时,需要不断地调用浏览器。实际上,通过对Selenium的设置,可以达到隐藏浏览器的效果。在程序中,对浏览器设置了headless,其作用是实现无界面状态。当设置了隐藏浏览器时也是可以正常进行和之前不隐藏浏览器一样的操作的。// 设置隐藏浏览器模式 firefoxBinary . addCommandLineOptions("--headless");在网络爬虫中,很多网站会采用验证码的方式来反爬虫,例如在登录时设置验证码、频繁访问时自动弹出验证码等。
2022-11-19 10:39:54
1566
1
原创 前端工程化——Livereload和HMR、本地开发服务器
本地开发服务器动态编译功能的目的是为了节省人力、方便前端开发和调试,本质原理是监听+触发。webpack-dev-server是官方提供的用于搭建本地开发环境的一个微型Node.js服务框架,并且提供动态编译、HMR(热更新)等功能。如果你的项目不需要Mock服务,webpack-dev-server完全可以满足需求。但是Mock服务是本地开发服务器不可或缺甚至可以说是最重要的功能,不能舍弃。幸运的是,webpack同时提供了webpack-dev-middleware,它是Express框架的一个中间件,
2022-11-13 09:52:48
731
原创 前端工程化——构建过程中的增量更新与缓存
增量更新策略完美地解决了上述缺陷,实现的方案很简单,将原本作为参数值的hash指纹作为资源文件名的一部分并且删除用于更新的url参数。比如上文提到的代码改为增量更新策略之后的形式如下:
2022-11-13 09:18:57
1356
原创 前端工程化——前后端分离,进化流程
前端工程化不是一个框架或者工具,聚焦的不是某个垂直的研究领域或者特殊的业务类型,而是一种可演化、可扩展的服务,服务的目标是解决前端开发以及前后端协作开发过程中的难点和痛点问题,涵盖项目的起始、开发、测试以及部署环节。工具是前端工程化的实现媒介,规范是工程化的指导方针,工作流程是工程化的外在表现形式以及约束规范的载体。
2022-11-13 08:45:56
879
原创 vue弹窗如何嵌入其它vue页面
对于类似需要根据特定参数动态展示其他组件数据的时候,我们可以通过在可以给子组件传递其他参数,在子组件watch中监听。通过子组件监听参数变量变化从而动态展切换数据。注意子组件渲染只会执行一次created生命周期,如果非要将更改内容写在created中,就要配合 v-if 使用,将子组件用 v-if 包裹起来,每次都重新加载子组件。
2022-11-11 21:16:29
9622
Spring Cloud微服务实战
2020-11-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人