
架构之路
文章平均质量分 75
贺公子之数据科学与艺术
科技向善,拥抱开源,要用技术的影响力来领导人,而不是威权和职位!
展开
-
Clumsy 网络模拟工具使用指南
Clumsy 是一款用于模拟 Windows 系统上网络状况的工具,通过控制网络包的延迟、丢包等参数,帮助开发者测试和调试网络相关应用。它利用 WinDivert 库实时拦截系统接收和发出的网络数据包,并进行人为的延迟、丢包、篡改等操作,从而模拟各种网络问题。原创 2025-01-15 10:43:41 · 1795 阅读 · 0 评论 -
大数据应用案例
大数据平台在阿里巴巴和京东等公司中发挥了关键作用。这些平台通过分析海量的数据,提供个性化的产品推荐、精确的市场趋势预测和高效的供应链管理,帮助企业提高运营效率和利润。大数据平台已成为企业决策和运营的重要工具,将在未来持续发挥重要作用。原创 2025-01-10 09:27:26 · 347 阅读 · 0 评论 -
CountDownLatch应用
当你提到“方法A调用时,对象锁锁着,方法B等待释放”,这通常是指通过。是一次性的,一旦计数器减到0,它就不能再次使用。如果你需要多次使用类似的等待/通知机制,可能需要考虑其他工具,如。方法,这将导致方法B所在的线程等待,直到计数器被减到0。这样,方法B就会等待方法A完成操作后再继续执行。来实现一种类似的效果,即让方法B等待方法A完成某个操作后再执行,那么可以这样使用。被初始化为1,表示有一个计数器需要被减到0。可以实现一种等待/通知机制,但它与对象锁(方法,将计数器减1。块或方法来实现的互斥访问。原创 2025-01-10 09:26:01 · 511 阅读 · 0 评论 -
【主键自增】
在上述例子中,JPA实体类和MyBatis实体类都使用了@Id注解和@TableId注解将id字段标记为主键字段,并使用了@GeneratedValue(strategy = GenerationType.IDENTITY)和@TableId注解的type属性设置了主键生成策略为数据库自增长主键。@GeneratedValue(strategy = GenerationType.IDENTITY)注解是用于设置主键生成策略,其中GenerationType.IDENTITY表示使用数据库自增长主键。原创 2024-12-27 09:53:48 · 438 阅读 · 0 评论 -
Session和JWT (JSON Web Token) 两种不同的身份验证和授权机制详解
在使用JWT时,服务器会颁发一个令牌(Token)给用户,该令牌包含了用户的身份信息和其他相关的元数据。头部包含了令牌的类型和加密算法信息,负载包含了用户的身份信息,签名用于验证令牌的真实性和完整性。在使用Session时,服务器会为每个用户创建一个唯一的Session ID,并将该ID存储在服务器端的存储介质中(如内存、数据库等)。当用户进行身份验证后,服务器会将Session ID发送给用户,用户在后续的请求中需要携带该Session ID,供服务器进行身份验证和授权。原创 2024-12-27 09:06:47 · 385 阅读 · 0 评论 -
【大模型 RAG】
它由一个检索模型和一个生成模型组成,通过检索模型从候选文档中检索出相关信息,然后将这些信息作为输入,通过生成模型生成最终的输出。而在工业界,企业通常会将大模型 RAG 技术应用到实际的产品和应用中,解决一些实际问题。他们会根据市场需求和业务场景,结合学术界的研究成果,开发出适用于特定场景的大模型 RAG 系统,并通过产品推广、商业合作等方式将其应用到实际生产中。总之,大模型 RAG 场景下的产学结合是学术界和工业界合作研究和应用大模型 RAG 技术的一种方式,通过合作与交流,推动该领域的发展和应用。原创 2024-12-23 09:06:23 · 374 阅读 · 0 评论 -
跨站请求伪造(Cross-Site Request Forgery, CSRF)的检测和防御通
在API调用中,可以将JWT作为认证令牌发送给API端,并在API端对JWT进行验证,以确保请求的合法性和完整性。可以在请求头或请求体中包含一个CSRF令牌,API接收到请求后会验证该令牌的有效性。API密钥验证:可以为每个API调用生成一个唯一的API密钥,并在请求中包含该密钥。API端接收到请求后,会验证该密钥的有效性,以确保请求来自授权的应用程序。:如果涉及到API调用,可以在API端也添加CSRF验证,如在JWT(JSON Web Tokens)中包含一个nonce(一次性请求标记)。原创 2024-12-22 23:11:14 · 398 阅读 · 0 评论 -
史上最全之无线传感网络通讯技术
无线传感网络(WSN)和通信技术在工业、智能家居、农业、医疗等领域有着广泛的应用。以下将针对常见的通信技术(如 RFID、ZigBee、Wi-Fi、蓝牙 4.0、UWB 等)进行详细介绍,并结合传感器的主流应用方案,通过案例分析和代码演示帮助理解其实现。RFID 是一种通过无线电波进行自动识别的技术,主要由 RFID 标签和读写器组成。标签通常附加在物体上,用于唯一标识。2. ZigBee简介:ZigBee 是一种低功耗、低速率的无线通信协议,基于 IEEE 802.15.4 标准,支持网状网络拓扑原创 2024-12-17 08:53:46 · 868 阅读 · 0 评论 -
`openssl` 创建自签名证书(CA证书)
通过openssl生成的 CA、自签名服务器证书和客户端证书,您可以构建一个安全的 MQTT 传输环境,确保设备身份认证和数据加密安全。原创 2024-12-16 08:48:43 · 1453 阅读 · 0 评论 -
java消费消息且保证消息不丢失
持久化消息:确保消息队列中的消息被持久化到磁盘。手动确认:消费者应手动确认消息,避免自动确认机制导致消息丢失。消息包装:确保在消息体或队列的消息属性中保留所有相关的包装信息,以便正确处理。通过这些措施,可以确保 Java 消费消息的过程中,消息本身及其包装不会丢失或篡改。原创 2024-11-29 12:50:18 · 875 阅读 · 0 评论 -
使用 Redis 进行数据同步
最基础的数据同步就是将数据存储到 Redis 中,并在需要时读取出来。例如,你可以将用户的一些频繁访问的数据存储在 Redis 中,从而减少对后端数据库的压力。为了保证数据的一致性,通常会在更新主存储的同时清除 Redis 中的缓存数据,或者采用读取时更新策略(read-through caching)。在实际应用中,可能还需要考虑更复杂的场景,如数据的持久化、集群支持等。Redis 的发布/订阅功能允许程序间发送消息。命令(带有 NX 和 PX 参数)来实现分布式锁,确保在高并发环境下数据的一致性。原创 2024-11-07 12:23:41 · 647 阅读 · 0 评论 -
软件系统产品设计方案
根据系统的特点和用户的需求,确定合理的响应时间要求,例如要求用户在1秒内获得系统的响应。在功能设计的过程中,应该注重合理的模块划分和良好的接口设计,以及适当的测试和调试。根据用户的并发访问数量和系统的处理能力,确定系统需要具备的并发处理能力。需求分析的目标是为软件开发团队提供一个明确的方向,确保开发的软件能够满足用户的需求。可以根据系统的定位和用户群体的特点选择合适的主题色,并与其他颜色进行搭配,以便突出重点和区分不同的功能。通过良好的数据库设计,可以确保数据的完整性和一致性,提高系统的性能和可维护性。原创 2024-02-23 13:01:54 · 4463 阅读 · 0 评论 -
【@Autowired`注解注入与构造器注入的区别】
可测试性使用构造器注入可以更容易地进行单元测试,因为可以在构造器中传递依赖项,从而轻松地替换或模拟依赖对象。使用@Autowired注解的字段注入则不太适合单元测试,因为你无法在测试中轻松地替换这些依赖。依赖不变性构造器注入通常伴随着final修饰符,这意味着依赖项一旦设置就不能改变,这对于保证对象的不变性和线程安全性很有帮助。使用@Autowired的字段注入则没有这样的保证,依赖项可以随时改变。强制性当你使用@Autowired注解时,Spring 容器会尝试自动注入 Bean。原创 2024-08-15 11:50:37 · 666 阅读 · 0 评论 -
配置核心交换机
上述配置创建了两个接口作为网关,分别用于内部网络和外部网络。注意:由于每个网络VLAN都有自己的网关IP地址,确保将相应的网关地址配置为PC的默认网关。另外,确保交换机上的接口连接到正确的网络。实现连接到交换机上的PC既能访问内网又能访问外网,可以在交换机上配置VLAN和路由。确保根据你的设备型号和版本进行适当调整。上述配置创建了两个VLAN:VLAN 10(用于内部局域网)和VLAN 20(用于外网互联网接入)。上述配置为两个网络VLAN分别配置了DHCP池,分配IP地址和默认网关。原创 2024-07-13 22:56:05 · 1280 阅读 · 0 评论 -
【通讯协议】
报文的总长度为1字节(数据类型)+4字节(设备ID)+2字节(设备代码)+4字节(时间)+设备报文的长度。设备代码(2字节):用于标识设备的类型,可以是预先定义的设备代码,例如0x0001表示温度传感器,0x0002表示湿度传感器等。设备报文:根据设备类型和数据类型的不同,设备报文的内容也会有所不同。在测试案例中,我们创建了一个协议对象,将其转换为字节数组并打印,然后再将字节数组解析为协议对象并打印出协议内容。设备ID(4字节):用于唯一标识设备的ID,通常采用32位的无符号整数表示。原创 2024-07-01 23:21:14 · 334 阅读 · 0 评论 -
【架构之路】行技术选型
性能需求:根据项目的性能需求,考虑选择适合的技术。根据功能需求,选择适合的技术栈,例如前端框架、后端语言、数据库等。可扩展性:考虑到项目的长期发展,需要选择具有良好可扩展性的技术。技术生态和社区支持:考虑选择具有成熟技术生态和强大社区支持的技术,以便能够获取到大量的资源和帮助,同时也能够从社区中获得更新和改进。例如,如果团队对某种技术已经有深入了解,可以选择使用该技术来提高开发效率和质量。例如,如果项目预算有限,可以选择成本较低的开源技术或云平台来降低开发和运维成本。原创 2024-04-29 17:52:53 · 220 阅读 · 0 评论 -
java 监听 sqlserver 数据库的变化
来定时查询数据库变化。首先,我们初始化数据库连接,并执行初始查询语句获得初始数据。然后,使用定时器每隔一段时间执行查询语句获取最新的数据库数据,并进行处理。在程序运行一段时间后,我们关闭连接并取消定时器。在Java中,可以使用JDBC和JDK提供的API来监听SQL Server数据库的变化。欢迎关注微信公众号:数据科学与艺术 作者WX:superhe199。在上面的示例中,我们使用。原创 2024-04-12 08:23:00 · 685 阅读 · 0 评论 -
【如何从CS架构客户端获取详尽数据】
服务器接收到请求消息后,根据消息内容查询数据库或执行相应的业务逻辑,获取详尽的数据,并将数据封装为响应消息发送给客户端。使用日志和事件记录:客户端可以记录各种事件和操作的日志,包括用户交互、网络请求、错误和异常等。使用网页爬虫技术:客户端可以通过模拟浏览器的行为来访问网页,并从网页中提取所需的详尽数据。访问服务器端API:客户端可以通过与服务器端的API通信来请求所需的详尽数据。使用数据库查询:如果客户端与一个数据库相连,您可以使用查询语言如SQL来向数据库发送查询请求来获取详尽的数据。原创 2024-04-12 08:22:44 · 469 阅读 · 0 评论 -
HTTPS通信过程
服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。报文中包含客户端支持的 SSL 的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。2.client和server之间协商加密算法,用公钥(服务器发过来的)加密随机数串(共享密钥)发给服务器,协商加密技术成功。步骤 4: 最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的 SSL 握手协商部分结束。3.SSL连接建立,受SSL保护,开始加密通信,交换HTTP报文阶段(共享密钥加密)。原创 2024-04-10 10:13:31 · 342 阅读 · 0 评论 -
【缓存库来存储数据】
在Java中,可以使用各种缓存库来存储数据。其中最常见的缓存库是Ehcache和Guava Cache。这样,在缓存中不存在数据或数据已过期时,会自动调用回调函数从数据库中获取最新的数据并将其存入缓存。对于Guava Cache,你可以使用。如果数据不存在或已过期,你可以在。原创 2024-04-07 08:54:03 · 307 阅读 · 0 评论 -
数据驱动:从方法到实践
1.随着技术的发展,企业竞争出现白日化现象,加之目前互联网各种技术的不停发展,互联网行业出现大量的数据,导致新的互联网公司交与传统公司相比较出现数据精准营销现象发生。2.通过在平台中采集使用用户产生的大量数据来加之以分析,进行网页页面,APP界面进行各个元素的点击分析对比,判断用户界面设计,商品主要窗口商品的摆放,以及用户在每个页面浏览停留有的时间,来逐步提升公司产品的运营能力,增加公司产品的销售量。原创 2024-03-05 08:48:58 · 1695 阅读 · 0 评论 -
【程序员如何选择职业赛道】
程序员的职业赛道就像是一座迷宫,有前端的美丽花园,后端的黑暗洞穴,还有数据科学的神秘密室。准备好探索这个充满挑战和机遇的迷宫了吗?快来了解如何选择职业赛道吧!选择职业赛道是程序员职业发展的重要决策之一。以下是程序员在选择职业赛道时可以考虑的一些方向。选择职业赛道是一个个人化的决策过程。程序员需要通过自我评估、市场分析和借鉴他人的经验,综合考虑自身条件和长期目标,做出最适合自己的选择。最重要的是,选择职业赛道要与自己的兴趣和激情相匹配,才能在工作中获得更大的满足和成就感。原创 2024-03-05 08:44:39 · 1001 阅读 · 0 评论 -
【案例分析之重构方案】
通过重新构建架构,可以解决远程无人干预情况下的升级和调试需求。采用可靠的技术选型和合适的架构设计,确保系统具有稳定性、连续性和安全性,并能满足使用场景的需求。技术委员会的管理和管控确保了技术的正确使用和发展。原创 2024-03-04 11:59:12 · 1035 阅读 · 0 评论 -
Rest 和微服务的要点
它是一种无状态的、可缓存的、可伸缩的、可扩展的、轻量级的通信协议。需要注意的是,使用REST作为微服务之间的通信协议并不是唯一的选择,还有其他协议和技术,如GraphQL、MQTT等。微服务架构是一种灵活、可扩展和可靠的架构风格,可以提高开发速度和质量,并促进团队间的协作和创新。灵活性:由于微服务之间使用REST通信,可以使用不同的编程语言和技术栈来实现不同的微服务,增加了系统的灵活性和技术选型的自由度。明确的API接口、独立的数据存储和业务逻辑、可独立部署和扩展、可通过HTTP进行通信、松耦合和高内聚。原创 2024-03-04 10:27:39 · 918 阅读 · 0 评论 -
【企业高管的职责】
例如,你可以提到你在一个项目中遇到了挑战,但通过反思和与团队成员的讨论,你学会了如何更好地应对类似的情况,并在下次取得了更好的成果。此外,准备好回答关于你的职业目标、团队合作经验、解决问题的能力等常见问题,并在面试中展示你的沟通技巧和逻辑思维能力。例如,你可以提到你在一个紧迫的项目期限下工作过,但通过制定清晰的计划、与团队成员协作和适时寻求帮助,你成功地应对了压力并完成了任务。了解并应用当前行业的技术趋势,可以帮助公司保持竞争优势,创新产品和服务,提高运营效率,拓展市场份额,满足顾客需求,实现可持续发展。原创 2024-02-21 08:14:45 · 987 阅读 · 0 评论 -
【软件架构设计-业务逻辑和技术分离】
关于架构这个概念很难给出一个明确的定义,也没有一个标准的定义。硬是要给一个概述,我认为架构就是对系统中的实体以及实体之间的关系所进行的抽象描述。架构始于建筑,是因为人类发展(原始人自给自足住在树上,也就不需要架构),分工协作的需要,将目标系统按某个原则进行切分,切分的原则,是要便于不同的角色进行并行工作。原创 2024-02-19 10:54:28 · 1228 阅读 · 0 评论 -
当系统遇到性能瓶颈时,如何进行性能分析和优化
这可能涉及到检查系统的日志文件、跟踪系统的调用流程,以及使用代码分析工具来找出慢速代码或资源耗尽的问题。Profilers(性能分析器):可以帮助你监测程序的执行时间,找出执行时间长的函数或方法,从而定位慢速代码的问题。Logging tools(日志工具):通过分析系统的日志文件,可以获取系统的运行状态和潜在的性能问题。一旦找到性能瓶颈的源头,我会考虑采取不同的优化策略来改善系统的性能。这可能涉及到监控系统的关键指标,如响应时间、吞吐量等,并与系统的预期性能进行比较。原创 2024-02-20 08:39:45 · 980 阅读 · 2 评论 -
微服务架构的理解,以及它的优缺点
每个服务都可以独立部署、管理和扩展,通过定义明确的接口进行通信,并以弹性和可靠性为基础。可替代性:由于每个服务都是相对独立的,可以选择性地使用不同的技术栈和编程语言。此外,如果服务之间有复杂的依赖关系,可能会增加系统的复杂性和性能开销。弹性和容错性:由于每个服务都是自治的,即使其中一个服务发生故障或不可用,其他服务仍然可以正常工作。可扩展性:由于每个服务都是自治的,可以根据需求独立扩展每个服务。运维复杂性:微服务架构中可能存在大量的服务,每个服务都需要独立进行部署、监控和管理。这增加了运维的复杂性和成本。原创 2024-02-20 08:38:58 · 421 阅读 · 0 评论 -
在设计大型系统时,系统的安全性和数据保护
综上所述,考虑系统的安全性和数据保护涉及多个方面,包括访问控制、加密、网络安全、安全审计、数据备份和恢复等。通过综合应用这些措施,可以提高系统的安全性和数据保护水平。原创 2024-02-20 08:38:37 · 940 阅读 · 0 评论 -
用工具或者技术进行数据库性能调优
可以通过使用Prometheus和Grafana来监控数据库的性能指标,如查询响应时间、TPS(每秒事务处理数)、QPS(每秒查询数)等,并通过图表展示分析结果。比如pt-query-digest可以帮助分析慢查询日志,pt-stalk可以在出现性能问题时自动收集诊断信息,pt-summary可以提供服务器的性能概要信息等。以上只是一些常见的数据库性能调优技术和工具,实际的调优过程会更加复杂,需要根据具体的业务需求和数据库系统进行调整。将大型表分成更小的分区,可以减少查询的范围,提高查询性能。原创 2024-02-20 07:47:31 · 783 阅读 · 0 评论 -
分布式数据库的使用经验和感受
总的来说,分布式数据库是处理大规模数据和高并发访问的有效解决方案,具备高可用性、可伸缩性和容错性等优势。然而,使用分布式数据库也面临一些挑战,如数据一致性和负载均衡等问题,需要仔细规划和设计。原创 2024-02-20 07:45:04 · 380 阅读 · 0 评论 -
【在处理大量数据时,如何设计数据库架构以确保数据的可扩展性和可维护性】
总之,设计可扩展和可维护的数据库架构需要考虑多个方面,包括数据拆分、复制、索引、缓存和分布式等技术的选择和应用。通过合理的架构设计和维护策略,可以提高大数据处理的效率和可靠性。原创 2024-02-19 17:43:55 · 1066 阅读 · 0 评论 -
【常用的分布式中间件作用和原理】
RabbitMQ的原理是将消息存储在队列中,并通过交换机将消息路由到不同的队列,支持多种消息模式和灵活的消息路由。总之,RabbitMQ通过提供一个可靠的消息传递机制,支持多种消息模式和灵活的消息路由,使得应用程序之间可以进行可靠的异步通信。Kafka的原理是通过将消息存储在分布式的日志中,并允许多个消费者同时读取和处理这些消息,支持消息的持久化和高可用。命令解析与执行的代码主要包括命令的解析、参数的验证、命令的执行和结果的返回等。网络通信的代码包括接收客户端的命令、解析命令参数、执行命令并返回结果等。原创 2024-02-19 17:43:39 · 1138 阅读 · 0 评论 -
【设计一个分布式容错性和可恢复性的系统】
总而言之,通过考虑容错性和可恢复性的设计原则、使用合适的技术和工具,可以提高分布式系统的稳定性和可靠性,减少故障对系统的影响。原创 2024-02-19 17:30:37 · 420 阅读 · 0 评论 -
【边缘存储-云端计算】
*边缘存储就是把数据直接存储在数据采集点或者靠近的边缘计算节点中,例如MEC服务器或CDN服务器,而不需要将数据通过网络即时传输到中心服务器(或云存储)的数据存储方式。边缘存储一般采用分布式存储,也称为去中心化存储。下面通过几个案例来说明:1、在安防监控领域,智能摄像头或网络视频录像机(NVR)直接保存数据,即时处理,不需要将所有数据传输至中心机房再处理。原创 2024-01-28 13:09:12 · 1212 阅读 · 0 评论 -
外部配置文件和Class打包到jar 然后重新启动java -jar
一.将DeviceDataService.class和DeviceDataPushTOSEventListener.class替换到jar内部。我这边以bpvs-backend-2.0.0-SNAPSHOT.jar和application-dev.properties配置文件为例。二、优先加载外部的配置文件application-dev.properties,启动jar应用。步骤1:解压原始bpvs-backend-2.0.0-SNAPSHOT.jar。步骤2:替换或添加class文件。原创 2024-01-18 14:19:42 · 694 阅读 · 0 评论 -
史上最全:TCP三次握手原因、过程、失败以及不采用三次握手的后果
如果客户端想建立连接,给服务端发了一个连接请求(SYN),但是由于网络中种种情况,导致没有及时到达服务端,这就导致客户端在很长一段时间中没有收到回复消息(ACK),这时客户端又给服务端发送一个SYN,这次的发送和接收的很顺利,很快就收到了ACK,但是这时之前的SYN终于到了服务端,服务端规规矩矩的为这个SYN申请资源,然后返回ACK。四次握手和两次握手的情况一样,五次握手和三次握手的情况一样,以此类推,奇数次握手的情况与三次握手相同,同理偶数次握手与两次握手一样,所以为了更快的连接,就使用三次握手最合适。原创 2022-06-10 19:19:06 · 1498 阅读 · 0 评论 -
SpringCloud-Gateway
SpringCloud-Gateway原创 2022-05-16 19:59:33 · 320 阅读 · 0 评论 -
2021-09-16Sharding 分片模式
Sharding 分片模式Sharding 分片模式将一个数据存储到一组水平分区或碎片。存储和访问大量数据时,这个模式可以提高可扩展性。背景和问题由一个单一的服务器托管的数据存储区可能会受到以下限制:存储空间。一种数据存储为一个大型云应用可以预期含有数据量巨大,可以随着时间的推移显著增加。服务器通常提供的磁盘存储仅是有限的,但它可以是能与较大的取代现有的磁盘,或者添加另外的磁盘的机器作为数据量的增加。然而,由此,不能够容易地增加一个给定的服务器上的存储容量的系统最终将达到一个硬限制。计算资源。云原创 2021-09-16 14:15:45 · 237 阅读 · 0 评论 -
消息队列
消息队列中间件、分布式面向对象中间件和事务处理中间件等。 消息队列服务是一种松耦合的分布式应用集成形式。发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。这种模式下,发送和接收是异步的,发送者无需等待;二者的生命周期未必相同;发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行;一对多通信:对于一个消息可以有多个接收者。消息队列中间件最重原创 2017-12-20 14:39:47 · 296 阅读 · 0 评论