- 博客(43)
- 问答 (1)
- 收藏
- 关注
原创 轻松实现百度大模型ERNIE对话
设置成流式清求能一段一段内容返回,如果您需要达到逐字输出的效果,你可以使用服务端接收到流式返回结果后,通过SSE的方式返还给客户端、客户端通过EventSource接收后使用js定时打印,Typed.js等方式实现逐字输出即可。// # 在.env文件中,设置以下内容,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk。该代码直接可用,实现了流式输出,只需要在你自己的开发环境配置百度申请的QIANFAN_AK和QIANFAN_SK即可使用啦。
2024-07-04 16:17:47 195
原创 对比 JSON 和 Hessian2 的序列化格式
特性JSONHessian2可读性高,可读性强,便于调试低,二进制格式,不便于调试语言无关性高,几乎所有语言都支持中等,支持多语言但依赖库支持性能低,序列化和反序列化速度较慢高,序列化和反序列化速度非常快数据体积大,包含字段名等额外信息小,二进制格式,数据体积小类型安全低,类型不严格,可能导致解析错误高,包含类型信息,保证数据一致性应用场景Web 开发,API 接口,广泛应用高性能 RPC 调用,高并发场景调试和日志记录容易调试,日志记录友好调试困难,不便于日志记录安全性。
2024-06-07 16:18:42 735
原创 Mongo 地理位置查询:海量密集点转换成聚合信息
将地图上的海量密集点通过网格分割的方式实现聚合;需求:用mongo实现设备地理位置聚合查询 :多边形,矩形查询;背景:上万设备数据量目的:分享Mongo地理位置查询,以及文末对在此之前的两种实现方式做分析比较,纠正一些开发中的错误认知;1、自定义:数据库查询注意:MongoDB 不支持在一个查询中同时使用 $polygon 和 $box;2、如果需要求中心点,可以使用聚合查询,实现加权平均权重点。
2024-06-04 09:49:51 226
原创 MethodArgumentNotValidException提取关键报错信息返回
中的错误信息包含了字段验证错误的详细信息。具体地说,这些详细信息被包含在。对象表示一个字段验证错误,包含了验证失败的详细信息。对象表示一个验证失败的字段及其详细信息。具体到你的例子中的异常信息,它的类型是。目的:只需要关键提示词;
2024-05-30 16:18:50 387
原创 SQL、Mongo、Redis一般适用于那些场景
总的来说,SQL 数据库适合存储结构化数据,如用户信息、订单信息等;Redis 适合用作缓存、会话管理和消息队列;根据具体的业务需求和数据特点,可以合理选择和组合这些数据库技术来支持物联网项目的开发和运行。在一个项目中同时使用 MySQL、Redis 和 MongoDB 是相对常见的做法,因为它们各自具有不同的特点和适用场景,可以组合使用以满足不同的需求。这样的组合可以充分发挥各种数据库的优势,满足项目的不同需求。但同时也需要注意数据一致性、同步更新等问题,确保各个数据存储之间的数据一致性和正确性。
2024-05-13 16:36:42 592
原创 常见的领域驱动设计架构
又或者,可以将事件驱动架构与CQRS架构结合,使用事件驱动架构来处理应用程序内部的异步通信和事件驱动逻辑,同时使用CQRS架构来将读取操作和写入操作分离,以提高应用程序的性能和可扩展性。例如,可以将三层架构与REST架构结合,使用三层架构来组织应用程序的内部结构和业务逻辑,同时使用REST架构来实现应用程序的外部接口和与客户端的通信。常见的领域驱动设计架构有经典的三层架构、REST架构、事件驱动架构、CQRS架构、六边形架构等。
2024-04-16 11:39:05 399
原创 循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。
反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象,然后进行 append 操作,最后通过 toString() 返回 String 对象,造成内存资源浪费。这种方式避免了在循环中创建多个 StringBuilder 对象,从而提高了性能并减少了内存资源的浪费。在上面的示例中,我们首先创建了一个 StringBuilder 对象。方法将 StringBuilder 对象转换为最终的字符串结果。,并将初始字符串 "start" 传递给它。
2024-03-01 16:55:47 478
原创 使用索引访问用 String 的 split 方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛 IndexOutOfBoundsException 的风险。
在上面的代码中,字符串 "a,b,c,," 使用逗号作为分隔符进行了分割,预期得到的数组长度应该大于 3,因为有四个逗号分隔出了五个部分。然而,实际上,由于最后两个逗号之间没有内容,split 方法会忽略这部分内容,因此得到的数组长度为 3,而不是预期的大于 3。为了避免这种情况,我们可以在使用索引访问 split 方法得到的数组时,进行额外的检查,确保最后一个分隔符后是否有内容。通过在末尾添加一个额外的空字符串元素,我们确保了最后一个分隔符后的内容不会被忽略,从而得到了预期的数组长度。
2024-03-01 16:02:43 406
原创 杂七杂八的命令
配置rocketMQ的log日志存储信息。# checkpoint 文件存储路径。# commitLog 存储路径。# abort 文件存储路径。3、清除Docker的数据。4、清除具体某一个端口号占用。# 消息索引存储路径。
2024-01-24 11:43:44 577
原创 使用Java VisualVM实现细粒度代码执行时间测量:深入分析每行代码的性能
VisualVM 将会提供一个实时的 CPU 采样图,显示了方法的调用树以及每个方法的执行时间百分比。你可以查看这些信息,以确定哪些方法花费了更多的时间。如果你需要更细颗粒度的代码执行时间测量,你可以考虑使用 Java 代码性能分析工具,其中一种比较常用的是 Java VisualVM。
2024-01-08 09:57:55 591
原创 后端处理文件上传:对比用Controller层和Service层的优缺点
当涉及文件上传时,有两种主要的处理方式:将文件上传逻辑放在控制器(Controller)层和将文件上传逻辑放在服务(Service)层。
2024-01-05 18:22:08 847
原创 switch识别枚举类型
类型有两种声明方式:一种是简单的枚举常量,另一种是带有字段和构造函数的枚举。您第一段代码使用的是简单的枚举常量,而第二段代码使用的是带有字段和构造函数的枚举。而带有字段和构造函数的枚举实例是对象,而不是简单的常量。在这种情况下,Java 编译器无法将其直接映射到整数值,因此不能在。语句中,Java 可以直接识别简单的枚举常量。这是因为简单的枚举常量是唯一的且在编译时就可以确定的,它们本质上是整数值。语句要求表达式是常量表达式,即在编译时就能确定的值。属性,可以直接使用枚举常量,而不是调用方法。
2024-01-02 11:05:05 576
原创 MongoDB搜索实现Query-监控数据列表
需求逻辑:假如一个id为4399666,那么它对应的独立的文档名则为metricData_4399666,然后从这个文档中,然后拿到该文档中的createdAt字段来进行时间排序拿到前6个数据。然后再根据每个id去找到他们一一对应的metricData-id文档,然后根据时间排序拿到最新的六条数据;该接口预留了很多字段可以根据实际需求进一步编写来实现更精细化的搜索数据功能;总得来说就是,现从一个总得监控metric文档中拿到每一条metric的id;注释也写的非常清楚了。
2023-12-28 16:43:33 400
原创 为什么建议用“构造函数注入“替换@Autowired?
平时写代码我还是推荐使用构造函数注入(Constructor Injection)或方法注入(Setter Injection)来代替字段注入。这有助于更好地管理类的依赖关系,并提高代码的可维护性和可测试性。@Autowired字段注入(Field Injection)通常不被推荐,因为它使得类对具体的实现产生依赖,降低了可测试性,并且在一些场景下可能引起循环依赖问题。这样的注入方式提高了类的可测试性,并使得类的依赖关系更加明确。而且视觉上编辑器上的感叹号数量看着真的很难受!
2023-12-22 17:39:27 652
原创 为什么private、protected修饰的方法事务注解不能回滚
解决方法是将事务注解放在公共(public)方法上,以便事务管理器能够正确地拦截和处理这些方法的调用。如果确实需要在私有方法上使用事务注解,可以考虑通过将注解放在公共方法上,并在公共方法中调用私有方法的方式来实现事务的正确处理。但是,对于私有方法或受保护的方法,这些方法在外部类或事务管理器的代理对象中不可见。因此,如果你在私有方法上使用事务注解,事务管理器可能无法正确地拦截和处理这些方法的调用,从而导致事务无法正常回滚。修饰的方法通常是类内部使用的方法,而事务注解通常是由外部的事务管理器来处理的。
2023-12-21 10:35:39 721
原创 事务管理机制@Transactional保护数据的一致性
上面代码目前还是不够安全 极小概率还会遇到,数据第一次insert是成功的,但是下一步数据库突然异常 thingRepository.save(newThing)失败了的情况,这种情况而数据库确写入了该不合法数据;如果在方法执行期间发生异常,事务将被回滚,确保数据的完整性。场景:创建设备需要先插入到数据库一个数据,然后rn字段需要先拿到数据库生成的设备id再进行字段拼接才会更新数据库,这样一个流程数据才是有效数据;当方法执行过程中发生异常时,事务会被回滚,确保数据的一致性。在Spring框架中,可以使用。
2023-12-20 17:16:58 372
原创 MongoRepository、原生、聚合的使用场景
在MongoDB中,MongoRepository、原生查询(Native Query)、聚合框架(Aggregation Framework)是三种不同的查询和数据处理方式,它们适用于不同的场景和需求。综合考虑业务需求和查询复杂度,可以根据具体场景选择合适的查询方式,甚至在一个应用中同时使用多种方式。
2023-12-06 17:52:53 755
原创 SpringCloud微服务启动,自动生成数据库中的表
如果不需要灵活可随时添加新数据的表的话,则可以用枚举计不用像这样麻烦了;自动生成数据库中的表,注意要考虑每次重启服务时做了什么事想要什么效果;
2023-12-05 15:01:29 485
原创 代码规范:下拉框里的选项应该是后端生成的
问题场景:netType字段:之前只是前端写了一个下拉框定死的选项:Wifi,NB-IoT,以太网,蜂窝;但是这明显是不规范的,应该是后端定义一张单独的表来制定只能有这些字段,其他字段都不通过,然后通过一个解决返回一个数组包含这些信息才对;在服务层中,通过调用数据库操作类(可能是Repository、Mapper等,具体取决于您的技术栈)来获取合法的。字段的有效性,同时也提供了一个可维护的方式来管理这些合法取值。值,如"Wifi"、"NB-IoT"、"以太网"、"蜂窝"等。通过这样的设计,可以确保。
2023-11-30 16:37:55 572
原创 String,List,对象的空判断区别
String和List是特殊的情况,要注意“” “ ” 的区别。注意对:String,List,对象的区别,具体对象的话则可以只用 null来判断。例子:String s;
2023-11-29 19:02:07 371
原创 Spring MVC(Model-View-Controller)的架构
在Java中,通常采用Spring框架进行开发,其中涉及到MVC(Model-View-Controller)的架构。在这种架构下,Controller、Service以及ServiceImpl分别代表不同的层次和职责,并通过一定的联系协同工作。这种分层的设计有助于提高代码的可维护性、可测试性和可扩展性,使各个模块的职责清晰分离。
2023-11-28 13:51:00 410
原创 java模糊查询
方法来检查标识符是否包含所需的子字符串。这样,无论输入的大小写如何,都将进行模糊匹配。这样的实现会更符合您的期望。上面两种写法实现的模糊查询时有区别的,通常第一种适用范围更宽泛的模糊匹配!方法将标识符和目标进行小写转换,以确保不区分大小写。如果你小子想要实现一个更宽泛的模糊匹配,可以使用。Beacause:这里使用了。
2023-11-22 13:59:33 58
原创 Acorn解析传入脚本(前端js脚本格式校验)
现在前端有一个js脚本输入框,要对用户写的脚本做函数验证,要保证用户写的函数正确,必须保证有rawDataToProtocol和protocolToRawData这两个函数才正确,如果只有一个或者其它函数名均是不正确的,且函数格式不正确也会有提示;最终决定使用:Acorn,原因下载量大,最合适,一直处于维护状态长达十几年,且使用配置规范合理,适合Js解析。
2023-11-14 15:43:20 285 2
原创 更新接口@Patch和@Put的区别
PATCH:一般为更新那个传那个,比如你需要更新nodeType,和netType只需要传这两个就可以。PUT:一般为更新一个整体,属于整体更新,一般会把所有的都放进去做整体更新。都是可以更新的属性;一般requestBody定义的时候是有区别的。这是开发者们约定俗成的一种默认的一种更细分的代码规范而已~两种接口请求的后端实现逻辑几乎是不用变的;
2023-11-11 18:51:02 519 1
原创 MongoDB聚合搜索Aggregation(时间,模糊匹配,最新值)SpringCloud JAVA
mongo的聚合查询实现。同时注意细节:mongo的映射关系,还有文档名必须正确还要注意层级关系!
2023-11-11 16:44:34 1843 1
原创 为什么用INTERNAL_FAILURE和log.debug而不用e.printStackTrace();
实际发布项目还是用log输出日志文件记录更好,他现在用的INTERNAL_FAILURE,可能是考虑的:当应用程序遇到无法处理的异常情况时,会记录错误详细信息以供开发人员进行故障排除,同时向客户端返回 INTERNAL_FAILURE 或类似的错误码以指示问题。1、在部署到正式服,或者有日志系统不能规范的采集到异常错误,因为这种异常没有附加任何日志规范,比如日期,时间,等级,给日志分析带来了不便。是记录调试级别的日志消息的一种方法,通常用于记录更详细的信息,例如变量的值、方法的执行轨迹等。
2023-10-09 15:31:22 84 1
原创 搜索查询一般由前端还是后端筛选的优缺点分析
在某些情况下,可以采用混合策略,部分筛选在前端执行以提供更快的用户体验,同时后端仍然进行额外的验证和安全性检查。如果数据量大或需要更高的安全性和权限控制,或者需要跨多个客户端共享筛选逻辑,最好在后端执行筛选。最终的选择取决于你的应用的具体需求和性能目标,可以在前端和后端之间找到平衡点以满足这些需求。如果数据量较小且前端设备性能足够强大,可以考虑在前端执行筛选以提供更快的响应时间。查询范围的筛选可以在前端或后端执行,具体哪种方式更好取决于你的应用需求和架构。
2023-09-27 14:53:14 1137 1
原创 Jackson控制多态的注解--JsonTypeInfo,JsonSubTypes,JsonTypeName
总的来说,这两个选项的区别在于类型信息是放在已有的属性中(EXISTING_PROPERTY)还是放在一个新的外部属性中(EXTERNAL_PROPERTY)。例如,如果您的数据结构已经包含了一个属性,您可以使用这个属性来存储类型信息。当使用 EXISTING_PROPERTY 时,类型信息被包含在一个已有的属性中,而不是创建一个新的属性来存储类型信息。这个外部属性与您的数据结构中的其他属性是分离的。当使用 EXTERNAL_PROPERTY 时,类型信息被包含在一个新的外部属性中。
2023-08-14 13:48:49 1658
原创 阻止keydown.enter事件的默认行为
点击发送按钮是正常的,输入框停留在第一行,但是一旦使用回车Enter发送消息后,输入框总是停留在第二行,这是为什么呢?这是因为keydown.enter事件的默认行为,它会在输入框内添加换行符。这样就完美解决keydown.enter事件的默认行为啦。方法中传递事件对象并调用其。事件侦听器更改为传递。
2023-04-27 15:21:21 670
原创 premium 风格按钮
定义一个技术流畅的premium 风格按钮,提供用户交互时的提升效果,展现出极高的技术流畅感。CSS文件通常会有很多这样的规则组合使用来达到丰富的UI风格。
2023-04-26 17:40:16 80
原创 轻松地搭建一个反向代理OpenAI服务器
此外,请确保您的代理服务器能够访问互联网,并且您的防火墙允许流量通过。如果您的服务器位于中国大陆,您可能需要确保已经解决了网络访问限制的问题,以便访问国际服务器。现在,您已经成功创建了一个简单的反向代理服务器,它将请求从您的服务器代理到目标服务器。您可以根据需要进一步配置和定制代理服务器。如果您想在中国地区设置一个反向代理以访问 OpenAI 的服务器,请将上述示例中的。在这个示例中,我们设置了一个反向代理,将所有以。首先,确保您已经安装了 Node.js。在 Node.js 中,您可以使用。
2023-04-26 15:10:03 3521 2
原创 教你用 Node.js 和 Cheerio 爬取网站内容
下面这个示例代码根据中国日报网站的HTML结构来提取文章标题和链接。实际上,网站结构可能会发生变化,因此您需要根据实际情况调整选择器。下面是一个使用Node.js、Express和Axios实现的简单爬虫效果。,您可以看到获取的文章列表,并在控制台中查看打印出的数据。应用程序将在端口3000上启动。在运行此代码之前,请确保安装了。然后,将上述代码保存为。
2023-04-13 16:13:55 314
原创 使用ChatGTP完成自动化翻译外刊到上线发布
如果可以自动爬到文章的内容,可以把每次一爬到的文章内容数据丢给GTP API 或者 传统方法:翻译API的接口;如何合法爬取多个网站,每个网站的结构都有所不同,无疑很复杂;
2023-04-13 15:57:04 397
原创 Quasar Framework 基于 Vue.js的开源框架
Quasar Framework 是一个基于 Vue.js 的开源框架,用于构建跨平台的 Web、移动应用和桌面应用程序。该网站提供了关于 Quasar Framework 相关的指南、文档、示例代码、论坛等资源,帮助开发者更好地理解和使用该框架。可定制性受限:在某些情况下,可能需要更多的自定义需求,但是 Quasar Framework 的一些默认约定可能会限制了开发者的自由度。使用该框架和网站的感受:代码注释很清晰,细节到位,可以很好的满足自己的开发需求来去做更改,非常推荐!
2023-03-20 17:50:34 564
原创 所有向服务器提交数据的操作
一般情况下,向服务器提交数据的操作指的是将数据通过HTTP请求的方式发送到服务器,包括POST、PUT、DELETE等请求方法,而GET请求方法则一般用于从服务器获取数据。因此,通常情况下只有POST、PUT、DELETE等请求方法才需要向服务器提交数据。但是,在一些特殊情况下,GET请求也可能需要向服务器提交数据,比如使用查询参数的方式将数据附加到URL中,此时也可以视为向服务器提交数据的操作。
2023-03-03 17:21:32 405
小狐狸GPT付费体验系统
2023-04-28
MiniGPT-4(KAUST) 手写草稿创建网站
2023-04-27
大四下学期该怎么规划?前端培训机构有必要吗?
2021-12-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人