自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

方亮的专栏

方亮的专栏

  • 博客(724)
  • 资源 (2)
  • 收藏
  • 关注

原创 谈代码注释

只要写代码,就会遇到代码注释的问题。在不同的公司,不同的项目组,不同的项目中,可能会有不同的注释标准。有些标准让我们感觉很受益,有些则让我们感觉很反感。而对于没有明确标准的项目,我们往往会遇到“百花齐放,百家争鸣”般的注释。我无法给出一个明确的标准,只是在此探讨下:什么样的注释不应该写,什么地方需要写注释。(转载请指明出于breaksoftware的csdn博客)“不”的原则...

2018-04-01 01:24:25 10766 9

原创 Olingo分析和实践——ODataImpl详细分析

ODataImpl.java是Apache Olingo OData服务器核心组件中的关键实现类,采用工厂模式管理OData服务的各种组件。作为抽象类OData的具体实现,它主要承担序列化器、反序列化器和处理器的创建工作,支持OData v4.0和v4.01多版本以及JSON/XML数据格式。通过工厂模式、策略模式和模板方法模式,该类实现了版本感知的组件创建机制,并提供完善的错误处理功能。核心方法包括创建EDM辅助序列化器、版本检测算法等,为OData服务提供灵活可扩展的底层支持。

2025-07-17 00:30:00 20231 2

原创 Olingo分析和实践——Delta 序列化器详解(第三部分: 实战案例)

我们深入探讨了Delta序列化器的高级应用场景,包括实时数据同步、微服务间数据一致性以及移动端离线同步等。同时,通过电商订单系统、IoT设备数据收集和金融交易数据同步等实战案例,展示了Delta序列化器在不同领域的灵活应用。此外,还介绍了Delta序列化器与Spring Cache、消息队列和数据库事务等组件的集成方式,为开发者提供了丰富的参考和指导。

2025-07-17 00:15:00 709

原创 Olingo分析和实践——Delta 序列化器详解(第二部分: 高级应用)

本文介绍了分布式系统中基于Delta序列化器的实时数据同步方案。主要内容包括:1) 实时数据同步和批量变更处理流程,通过流程图展示系统运作机制;2) 微服务架构下的数据一致性解决方案,包含数据同步架构、冲突检测与解决流程以及Delta合并策略;3) 具体实现代码示例,展示了跨服务数据同步、Delta变更应用、冲突检测和智能合并等核心功能。系统采用消息队列和直接调用相结合的方式,确保关键服务数据实时同步,并提供完善的冲突处理机制,有效解决了微服务架构中的数据一致性问题。

2025-07-16 00:30:00 390

原创 Olingo分析和实践——Delta 序列化器详解(第一部分: 基础概念与核心功能)

Delta 序列化器(Delta Serializer)是 Apache Olingo OData 框架中专门用于处理增量数据变更的序列化器。它实现了 OData 协议中的 Delta 响应格式,用于高效地传输数据集合中的变化信息,而不是传输完整的数据集。

2025-07-16 00:15:00 1184

原创 Olingo分析和实践——EDM 辅助序列化器详解

EDM辅助序列化器(EdmAssistedSerializer)是Apache Olingo OData框架中的一种特殊序列化工具,专为缺少完整实体数据模型(EDM)的场景设计。其核心特点包括:1)EDM信息可选,可在无完整元数据时工作;2)智能类型推断,自动识别数据类型;3)支持不同OData版本;4)灵活的元数据级别控制。与标准序列化器相比,它更适用于动态数据处理、快速原型开发等场景,但性能略低。工作原理是通过检查EDM信息或运行时类型推断来完成JSON序列化,特别适合开发初期或集成阶段的数据处理需求。

2025-07-15 00:30:00 1201

原创 Olingo分析和实践——OData框架核心组件初始化

本文分析了OData框架在SpringBoot中的初始化过程,重点关注OData实例和服务元数据两大核心组件的创建。OData实例通过工厂方法模式提供序列化器、反序列化器、URI解析器等核心功能。服务元数据构建依赖于EdmProvider,其中详细解析了Car实体类型的定义实现,包括属性配置、主键设置和类型映射。该初始化流程为后续OData请求处理奠定了框架基础,实现了数据结构描述与业务逻辑的分离。

2025-07-15 00:15:00 3696

原创 Olingo分析和实践——整体架构流程

摘要 OData协议为跨平台数据交互提供了标准化解决方案,而Apache Olingo是其重要的开源实现框架。本文探讨了在Spring Boot环境中集成Olingo的技术方案,重点解决了REST路径映射冲突问题。通过创建OData实例、构建服务元数据、配置HTTP处理器等核心步骤,实现了OData服务的初始化。针对Spring Boot与Servlet规范的路径处理差异,采用HttpServletRequestWrapper重载getPathInfo方法,确保Olingo能正确解析请求路径。该方案既保持了

2025-07-14 20:00:00 1146

原创 Spring Boot中处理Servlet路径映射问题

摘要: 本文探讨了将传统Servlet框架(如Apache Olingo OData)集成到Spring Boot应用时出现的路径映射问题。传统Servlet容器通过web.xml配置路径解析,而Spring Boot的DispatcherServlet机制导致getServletPath()和getPathInfo()返回值不符合第三方框架预期。文章分析了问题根源,并提出两种解决方案:1)通过server.servlet.context-path设置上下文路径,并使用包装器修正路径信息;2)采用完整路径硬

2025-07-14 02:00:00 1404

原创 使用Visual Studio Code附加到Jetty进程调试Servlet

Jetty 是一个开源的轻量级 Web 服务器和Servlet 容器,专为高吞吐量和低延迟场景设计。Servlet是运行在 Web 服务器(如 Tomcat、Jetty)上的 Java 程序,负责处理客户端请求(如 HTTP 请求)并返回响应。在我们的案例中,Java代码会打包成war,然后被Jetty使用。所以我们没法直接调试Java代码,需要附加到Jetty上。需要注意的是,我们配置的是端口号是5005。作为Servlet容器的Jetty,会根据“配置映射”,找到请求对应的Servlet。

2025-07-11 00:15:00 791

原创 ASP.NET Core OData 实践——Lesson2增删改查Entity(C#)

OData中的Entity是数据模型的核心单元,代表可唯一标识的业务对象(如客户、订单)。它具有以下特点: 唯一标识性 - 每个实体都有主键 属性集合 - 包含描述业务特征的属性 类型继承 - 支持多态(如Circle继承Shape) 标准操作 - 支持CRUD操作(GET/PUT/PATCH/DDELETE) 灵活路由 - 支持基类/派生类的多种查询方式(/Shapes(1)或/Shapes(1)/Circle) 扩展性 - 通过继承适应不同业务需求 典型实现包含模型设计(如Shape基类与Circle/

2025-06-04 00:15:00 1088 1

原创 ASP.NET Core OData 实践——Lesson2多态机制(C#)

例如,定义一个基类 Shape(包含 Id 和 Area 属性),其派生类 Circle(新增 Radius 属性)和 Rectangle(新增 Width、Height 属性),三者可共同存储在 Shapes 这个 EntitySet 中。

2025-06-03 00:30:00 1051

原创 ASP.NET Core OData 实践——Lesson10基本概念和动态构建(C#)

Model Meta中的表现</Model Meta中的表现</Model Meta中的表现</Model Meta中的表现</Model Meta中的表现</Model Meta中的表现</Model Meta中的表现</Model Meta中的表现</

2025-06-03 00:15:00 1849

原创 ASP.NET Core OData 实践——Lesson9绑定和未绑定的Function和Action(C#)

本文基于ASP.NET Core OData v8.x,详解OData服务中Actions与Functions的差异及实现。Functions是幂等的查询操作,用于数据计算(如统计销售额),支持GET请求;Actions是非幂等的命令操作(如订单提交),通过POST修改状态。文章通过Book模型示例,演示了绑定/非绑定Function的实现(如MostRecent()和ReturnAllForKidsBooks()),以及Action的定义规则。关键区别在于:Functions是"只读计算器&qu

2025-06-02 00:30:00 2073

原创 ASP.NET Core OData 实践——Lesson8增删改查单值类型Property(C#)

单值属性(Single-Valued Property)指的是实体中类型为复杂对象但非集合的属性,比如客户的账单地址(BillingAddress)、企业客户的注册地址等。单值属性的操作涵盖了查询、替换、部分更新等多种场景。本文将结合代码示例,讲解如何在 OData 控制器中优雅地处理单值属性,并分析其在数据建模和接口设计中的重要性。

2025-06-02 00:15:00 868

原创 ASP.NET Core OData 实践——Lesson8增删改查原始类型Property(C#)

本文介绍了OData API中原始属性的操作方法。原始属性是OData实体中最基础的数据类型,包含字符串、数字、布尔值等。文章详细列举了支持GET、PUT、DELETE等操作的接口路由模板,包括对基类/派生类实体和单例属性的查询与更新。通过C#代码示例展示了主要模型设计(Address、Customer等类)和控制器实现,其中控制器继承ODataController以获得标准路由、查询参数支持等特性。最后提供了一个包含4个客户实例的数据源示例,演示了原始属性在实际业务中的典型应用场景。

2025-05-31 00:30:00 1039

原创 ASP.NET Core OData 实践——Lesson8增删改查集合Property(C#)

本文介绍了OData API设计中集合属性的实现方法。主要内容包括:1) 支持GET、POST、PUT、DELETE等方法的接口路由模板设计;2) 模型设计示例,展示了基类与派生类(Customer/EnterpriseCustomer)的结构;3) 控制器设计要点,通过继承ODataController获得路由、查询参数等支持;4) 提供了数据源示例代码,包含4个客户实例(2个普通客户和2个企业客户)。文章重点说明了如何通过OData规范处理集合类型属性(如ContactPhones列表)和复杂类型属性(

2025-05-31 00:15:00 954

原创 ASP.NET Core OData 实践——Lesson7通过Payload修改Reference(C#)

本文介绍了在ASP.NET Core OData中通过Payload修改Reference的方法。文章对比了两种修改方式:URI中指定Key的方式和Payload传递的方式,并提供了对应的路由模板。主要内容包括模型设计示例(Customer、Employee、Order等实体类)和控制器的关键实现方法TryParseRelatedKey,该方法用于解析Payload中的资源标识符。重点演示了如何通过POST/PUT请求和JSON Payload(包含"@odata.id")来设置导航属性

2025-05-30 00:30:00 913

原创 ASP.NET Core OData 实践——Lesson7使用Reference增删改查一对多Navigation Property(C#)

本文介绍了 OData 协议中的 Reference 机制,该机制专门用于管理实体间的一对一或一对多关系(如员工-企业)。通过标准的 RESTful 操作(GET/POST/PUT/DELETE),客户端可直接操作导航属性而无需修改整个实体。文章以“员工-企业”一对多关系为例,展示了模型设计(包含 Customer、Employee 等类)和 OData 控制器实现,重点说明了 Reference 支持的接口类型(如查询、添加、删除引用),并指出其不支持 PATCH 请求,仅用于管理关系而非属性更新。通过继

2025-05-30 00:15:00 1401

原创 ASP.NET Core OData 实践——Lesson7使用Reference增删改查一对一Navigation Property(C#)

本文介绍了OData协议中的Reference机制,这是一种专门用于管理实体间关系的标准接口。文章以"订单-客户"的一对一关系为例,详细讲解了Reference与普通导航属性的区别:Reference仅操作关系本身(如设置/取消关联),不修改被引用对象的属性。内容涵盖了支持的标准接口(GET/POST/PUT/DELETE)、模型设计(包含派生类ThirdpartyPaymentOrder)以及控制器实现方法,并强调Reference不支持PATCH操作。该机制通过专用路由和元数据支持,

2025-05-29 03:15:00 1036

原创 ASP.NET Core OData 实践——Lesson6使用Action(C#)

本文介绍了一个基于ASP.NET Core OData的Web API示例,重点演示了如何通过OData Action实现批量或单个对象的业务操作(如发放礼品、奖金等)。文章首先概述了OData Action的特点及其支持的6种接口调用方式(包括绑定/非绑定操作)。随后详细说明了模型设计(Employee和Manager类)以及控制器的实现,展示了如何继承ODataController来获得OData标准支持。核心部分通过具体代码示例演示了绑定到实体集的Action实现(批量发放礼品),并提供了对应的cUR

2025-05-29 00:15:00 940

原创 ASP.NET Core OData 实践——Lesson5使用Function(C#)

本文介绍了基于ASP.NET Core OData的Web API示例,演示如何使用Function机制对员工和经理进行业务计算。Function封装了服务端复杂的业务逻辑,支持幂等操作,通过URL传递参数和返回结果。文章详细说明了Function的核心概念、特点、支持的接口类型,并展示了模型设计(Employee和Manager类)及控制器实现。重点讲解了绑定函数的调用方式,包括获取最高绩效评分的具体代码示例,体现了OData在封装业务逻辑、提升API表达力方面的优势。

2025-05-28 00:30:00 903

原创 ASP.NET Core OData 实践——Lesson4增删改查Navigation Property(C#)

本文介绍了一个基于ASP.NET Core OData的Web API示例,演示了对员工(Employee)和经理(Manager)实体进行CRUD操作。系统支持多态性、导航属性和批量操作。文章详细阐述了导航属性的概念(单值和集合导航属性),并提供了完整的API接口说明。模型设计部分包含Employee基类(含Id、Name、Supervisor和Peers属性)和Manager子类(增加PersonalAssistant和DirectReports属性)。控制器继承ODataController实现ODa

2025-05-28 00:15:00 920

原创 ASP.NET Core OData 实践——Lesson3修改和查询Singleton(C#)

本文介绍了基于ASP.NET Core OData的单例模式Web API实现,主要演示了如何管理全局唯一的公司资源。OData单例代表系统中唯一存在的对象(如公司配置),不支持新增和删除操作。文章详细说明了支持的接口类型(GET/PUT/PATCH),包括基类和派生类的查询与更新方式。通过Company和HoldingCompany的继承模型设计,展示了多态处理能力。控制器继承ODataController获得标准OData功能,使用静态字段保证单例唯一性。文中提供了完整的请求响应示例,包括通过curl测

2025-05-27 00:30:00 767

原创 ASP.NET Core OData 实践——Lesson2查询和局部更新EntitySet(C#)

本文介绍了一个基于 ASP.NET Core OData 的 Web API 示例,演示了如何通过 OData 协议对多态形状(Shape 基类及 Circle、Rectangle 派生类)实现完整的 CRUD 操作。项目采用内存集合存储数据,详细展示了 OData 控制器的设计模式,包括支持基类和派生类实体的增删改查接口规范。摘要还列出了核心路由模板和请求方法,如 GET/POST/PUT/PATCH/DELETE 等标准操作,并说明了多态查询的特殊路径格式。通过 Shape 模型继承体系,体现了 ODa

2025-05-27 00:15:00 1008

原创 ASP.NET Core OData 实践——Lesson1-2查询服务文档、模型Meta和Entity数据(C#)

本文介绍了如何使用Postman查询OData服务中的数据。首先说明OData服务会公开服务文档和元数据文档两个资源:服务文档(GET /odata/)列出可用资源及其路径,元数据文档(GET /odata/$metadata)以XML格式详细描述数据结构。接着演示了如何查询Customers实体集数据,包括基本查询、排序($orderby)和筛选($filter)操作。文章还解释了EntityContainer的概念及其在OData服务中的核心作用,帮助理解服务的数据模型组织方式。

2025-05-26 03:45:00 959

原创 ASP.NET Core OData 实践——Lesson1-1搭建服务(C#)

本文介绍了使用Visual Studio 2022创建ASP.NET Core空项目并集成OData服务的过程。主要内容包括:1) 创建Lesson1项目并取消HTTPS配置;2) 安装Microsoft.AspNetCore.OData包;3) 创建Customer和Order模型类,定义数据结构和导航属性;4) 编写支持OData查询的CustomersController控制器;5) 配置Program.cs文件,通过ODataConventionModelBuilder注册EntityType和En

2025-05-26 03:30:00 1166

原创 51单片机编程学习笔记——无源蜂鸣器演奏《祝你生日快乐》

蜂鸣器分为有源和无源两种,有源蜂鸣器自带振荡电路,只需接入直流电源即可发声,声音单一且稳定,常用于设备状态提示。无源蜂鸣器需外部提供脉冲信号,通过改变信号频率可发出不同音调,适用于需要多样化声音的场景。无源蜂鸣器通过达林顿阵列驱动,输出方波信号使其发声。通过编程控制方波频率和时长,无源蜂鸣器可以模拟钢琴演奏,如《祝你生日快乐》。计算音符频率和时值后,通过循环输出相应频率的方波,实现音符的持续发声。

2025-05-20 22:56:55 1170

原创 51单片机编程学习笔记——动态数码管显示多个数字

在一文中,我们看到如何使用动态数码管显示数字。但是基于动态数码管设计的特点,每次只能显示1个数字。这就不能让我们一次性显示多个数字,比如666就无法显示。如果我们要让动态数码管“显示”多个数,就要结合我们人眼的视觉残留。人眼的视觉残留又称视觉暂留,是指物体在快速运动时,当人眼所看到的影像消失后,人眼仍能继续保留其影像 0.1 - 0.4 秒左右的图像。

2025-03-04 23:58:27 1428 3

原创 51单片机编程学习笔记——动态数码管

有了和的基础,我们就可以开始学习动态数码管的编程方法。我们首先要看下动态数码管的电路图。

2025-03-04 01:02:37 1002

原创 51单片机编程学习笔记——74HC245八路三态输出双向收发器

在单片机系统里,单片机的 I/O 口驱动能力往往有限。当需要连接较多外部设备或者负载较大时,就可能出现信号传输不稳定的问题。74HC245 收发器则能够很好地解决这一难题。通过将单片机的 I/O 口与 74HC245 的 A 端口相连,外部设备连接到 B 端口,利用 74HC245 的驱动能力。比如在一个智能环境监测系统中,单片机需要与多个传感器和显示设备进行通信。传感器采集到的环境数据(如温度、湿度等)需要准确无误地传输到单片机进行处理,而单片机处理后的结果又要传送到显示设备上显示。

2025-03-03 22:23:19 3054

原创 51单片机编程学习笔记——74HC138译码器

74HC138 是一款高速 CMOS 器件,属于二进制译码器,可将3位二进制输入代码转换为 8 个互斥的输出信号(2等于 8)。它的工作电压范围一般为 2.0V 至 6.0V,具有较宽的电压适应范围,能够满足多种不同电源电压的应用场景。它的原理图如下:下面我们会分开讲解各个模块。

2025-03-03 03:00:00 5539

原创 51单片机编程学习笔记——管脚输入

一文中,我们了解了管脚和寄存器之间的关系。我们可以给寄存器的一些位设置值,然后控制管脚的电平,以达到给器件传输信号的目的。即我们可以通过器件影响寄存器的值,从而给单片机获取输入信息的机会。需要说明的是,电路图中给的K1和K2对应的管脚是错的。实际上,我购买的开发板上,K1对应P30,K2对应P31。在学习之前,我们需要知道P0~P3管脚在复位情况下的电平状态。基于这样的认知,我们可以通过判断P30~P31的位变量值是否为0,来得知对应按键是否被按下。图中4个按键的电路连接的都是P3系列的管脚。

2025-02-28 05:00:00 953

原创 51单片机编程学习笔记——管脚输出

是用于定义可位寻址对象的关键字,主要用于访问可位寻址的特殊功能寄存器中的某位或可位寻址的内部 RAM 单元,方便对这些特定位进行单独操作。这就意味着给它赋值(不是定义),实际修改的是该位空间中的值,而不是该位的地址。使用 sfr 关键字后,紧跟着是要定义的特殊功能寄存器的名称,然后是等号和该寄存器的地址值。这就意味着代码中P2表示的特殊功能寄存器,它的地址是0xA0。VCC作为正极在LED的P端,N端则连着单片机的P20管脚。我们再在原理图中查看单片机核心的原理图,可以找到P20管脚。

2025-02-28 02:45:00 1167

原创 51单片机编程学习笔记——VSCode上开发代码

之前我们的例子都是在Keil中编写51单片机的代码。但是Keil的编辑界面非常不友好,而且没有AI加持,已经不能适应现代化的开发了。我们可以使用VSCode作为编码工具。它不仅可以提供AI功能,还能做代码补齐以及集成其他扩展。需要说明的是,VSCode只能作为编码工具,而不能作为编译工具。这就意味着我们还是需要安装Keil。

2025-02-27 01:35:30 512

原创 51单片机编程学习笔记——Delay效果的实现

有毫秒和微秒两个单位。我们选择生成延时1毫秒。这样我们就会得到代码。_nop_();i = 2;j = 199;do。

2025-02-27 00:48:25 1118

原创 51单片机编程学习笔记——从0到1创建Keil工程

在熟悉了一文后,我们可以根据学到的知识编写一段程序,让LED每隔一段时间闪烁一次。不同于中直接借用了教程中的工程项目,本例我们将创建一个全新的工程来完成需求。

2025-02-26 22:19:01 500

原创 51单片机编程学习笔记——LED原理图

在一文中,我们通过下面这段代码点亮了D1和D2两个LED灯。那么我们是怎么知道P0^2对应第一个LED的呢?这就需要我们能看懂LED电路原理图。在学习 51 单片机的过程中,能看懂电路原理图具有举足轻重的意义。51 单片机作为一款经典的微控制器,广泛应用于各类电子设备开发。而。首先,看懂电路原理图是进行硬件设计的基础。当着手设计基于 51 单片机的系统时,只有清晰了解各个元器件在电路中的位置、连接方式以及它们与单片机的接口关系,才能合理地选择和布局元器件,搭建出稳定可靠的硬件平台。

2025-02-26 00:23:48 1351

原创 51单片机编程学习笔记——点亮LED

因为开发板已经帮我们把很多元器件和引脚连接好了,而我们当前关注的重点不是接引脚,而是编程,所以我们选择购买开发板。下面是我购买板子的商家提供的地址:pwd=1234 提取码:1234。

2025-02-24 23:18:20 996

原创 51单片机编程学习笔记——编译代码点亮LED

一般情况下,开发板商家会提供开发相关的套件和资料。我们只要在这个资料中找到编译器和破解程序(在目录下:5–开发工具\1-KEILC51软件),按照步骤执行即可。非破解版可以编译代码量小于2K的工程,而对超过2K的代码则会报错。为了避免以后的麻烦,我们可以购买正版或者破解它。破解过程不表,可以在网上找到资料。需要注意的是,启动Keil时需要使用“管理员”权限。

2025-02-24 23:16:19 333

同步双工管道

http://blog.youkuaiyun.com/breaksoftware/article/details/7001672文中的工程

2011-11-24

LuaCmdTest

我用于测试的一个lua脚本,没啥用,不用下载。

2012-11-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除