- 博客(2189)
- 资源 (16)
- 收藏
- 关注
原创 一套适合 ABAP 初级和中级开发人员,从入门到提高的 ABAP 学习教程
曾几何时,ABAP 就是 SAP 的代名词。ABAP 这门编程语言造就了 SAP 名噪一时的 R/3 产品,同时也是如今 SAP 旗舰级产品,SAP S/4HANA 底层的实现语言。ABAP 不仅代表着 SAP 这家公司在企业级管理软件市场辉煌的过去,ABAP 自身也在不断地进化着。SAP 不仅在本地部署(On-Premise)领域继续保持着自己绝对的统治地位,而且在云应用领域(Software-as-a-Service, 简称 SaaS), 也推出了自己的解决方案,比如 SAP S/4HANA Clo
2023-10-12 19:43:52 1798 2
原创 零基础 ABAP 学习教程系列文章的目录
曾几何时,ABAP 就是 SAP 的代名词。ABAP 这门编程语言造就了 SAP 名噪一时的 R/3 产品,同时也是如今 SAP 旗舰级产品,SAP S/4HANA 底层的实现语言。ABAP 不仅代表着 SAP 这家公司在企业级管理软件市场辉煌的过去,ABAP 自身也在不断地进化着。SAP 不仅在本地部署(On-Premise)领域继续保持着自己绝对的统治地位,而且在云应用领域(Software-as-a-Service, 简称 SaaS), 也推出了自己的解决方案,比如 SAP S/4HANA Clo
2023-05-04 16:23:25 21177 23
原创 SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)
在 SAP 产品里,存在多种 OData 服务的开发方式,其中最典型的三类,SEGW, RAP(Restful ABAP Programming) 和 CDP(Cloud Application Program),就是笔者在本教程里会为大家分享和讲解的内容。同笔者的另一个 SAP UI5 教程《SAP UI5 应用开发教程的学习目录 - 循序渐进,由浅入深,适合不同水平的 SAP UI5 开发人员》一样,本教程笔者计划通过 300 篇以上的文章篇幅,分别介绍这三类 SAP 主流的 OData 服务开发技术。
2022-06-26 11:30:23 7663 13
原创 SAP UI5 应用开发教程的学习目录 - 循序渐进,由浅入深,适合不同水平的 SAP UI5 开发人员
笔者在业余时间设计了这份 SAP UI5 学习教程,把开发一个完整的 SAP UI5 应用的流程,拆分成若干个步骤,力求每个步骤里,把涉及到的知识点都涵盖到。建议零基础或者对 SAP UI5 知之甚少的 SAP UI5 初学者,按照顺序从第一个步骤开始循序渐进地学习,把这些代码下载到本地,配合教程的文字讲解,自己动手,以加深理解。对于已经有一定基础的 SAPUI5 开发人员,可以通过本文的目录,跳过前面一部分比较基础的章节,直接挑选对自己工作项目有关,或者包含某些知识点自己尚未掌握的章节来有针对性地学习。
2021-10-05 21:11:59 21935 6
原创 Kubernetes 集群的目录结构有哪些关键部分?
Kubernetes 集群的目录结构包含了许多重要的部分,每一个目录都在集群的管理和运行中扮演着不同的角色。了解这些目录不仅帮助你更好地理解 Kubernetes 的内部运作机制,也为你在管理和排查集群故障时提供了有效的手段。通过对等目录的深入理解,我们能够更快地找到问题的根源,进而采取相应的修复措施。这些目录中存储的信息,如配置文件、状态文件、日志和证书等,都是 Kubernetes 集群正常运行的重要保障。
2024-10-11 12:00:12 559
原创 如何使用 ArgoCD 安全地管理多个 Kubernetes 集群?
使用 ArgoCD 来管理多个 Kubernetes 集群是一种在持续交付和大规模集群管理场景中非常高效的方法。然而,确保这些集群之间的管理过程是安全的,是我们作为 Kubernetes 管理员必须仔细考虑的问题。在这里,我们将逐步讨论如何使用 ArgoCD 安全地管理多个 Kubernetes 集群,并通过实际案例来帮助大家理解其中的关键细节和实现方式。
2024-10-11 11:58:19 395
原创 软件源代码里的 if( 1 == 0 ) 有什么用
if(1 == 0)。表面上看,这是一个永远不可能成立的条件,因为数学上1永远不会等于0。那么,为什么会有人在代码中写下这种不可能成立的条件,并在这个条件下编写逻辑呢?这其中的原因牵涉到软件开发中的多个方面,包括代码的调试、未来的扩展性、安全性、以及团队协作等。
2024-10-11 11:51:04 437
原创 什么是CPS(Cost Per Sale)
比如说,随着短视频的流行,越来越多的自媒体达人开始转型制作短视频内容,借助平台的流量支持和粉丝互动,进一步提升 CPS 的销售转化。品牌商可以和今日头条上的一些自媒体达人合作,基于 CPS 的合作方式,达人们通过文章、短视频、图文推送等形式,来向其粉丝和目标用户推荐该品牌产品。通过不断的尝试和调整,达人可以找到最适合自己的推广方式,提高 CPS 合作的效果。CPS,全称是 Cost Per Sale,在自媒体和电商的世界里,CPS 是一种重要的合作方式,用于衡量广告投放效果和最终销售之间的关系。
2024-10-10 23:07:16 249
原创 什么是自媒体平台的流量孤岛?
了解流量孤岛是理解现代自媒体运营中的一个重要概念。自媒体平台在不断发展壮大的过程中,为了保有自己独特的用户生态,各个平台之间实际上形成了一些难以互通的壁垒,这种现象就被称为“流量孤岛”。简单来说,流量孤岛是指某个平台上的用户、内容和流量无法与其他平台自由共享的状态。虽然各个平台都在吸引创作者进行内容生产,并带来一定的流量,但这些流量被封闭在平台内,无法自由跨平台扩散,从而形成了孤立的“流量池”。要更好地理解流量孤岛的现象,可以结合几个常见的自媒体平台来探讨。
2024-10-10 23:05:55 552
原创 什么是 OData 协议的 groupby 操作?
groupby是一种用于聚合数据的操作符,类似于 SQL 中的GROUP BY。它允许用户指定某些字段,将数据按照这些字段进行分组。数据分组的意义在于,可以将大而复杂的数据集转化为较小且有意义的摘要数据,从而帮助用户理解数据中潜在的模式。OData 的groupby操作是通过$apply系列参数来实现的,尤其是当我们希望以汇总和聚合的方式来表示数据时,groupby就显得非常有用。例如,如果我们希望对公司的销售数据按销售员、地区、年份等字段进行分类统计,就可以使用groupby操作来实现。以下是。
2024-10-10 23:04:23 69
原创 Java 泛型在实际项目开发中的应用
Java 的泛型通过类型参数化为代码提供了更高的灵活性和类型安全性。它在集合框架、工具类、接口设计和大型框架(如 Spring 和 Hibernate)中得到了广泛应用。通过类型擦除机制,Java 保留了向下兼容性,尽管这也带来了一些局限性。理解泛型的编译时与运行时行为对于编写高效、类型安全的代码至关重要。在实际项目中,泛型不仅提高了代码的可复用性,还减少了运行时类型转换错误的发生,特别是在处理集合类和通用算法时。通过对泛型的深入理解,开发者可以编写出更具扩展性和维护性的 Java 代码。
2024-10-10 23:02:46 757
原创 为什么 ABAP 会认为 0 等于 ‘0.4‘
隐式类型转换,也被称为自动类型转换,指的是编程语言里当一个表达式,包含了不同类型的操作数时,编译器或解释器自动地将其中一个或多个操作数转换为兼容的类型,以确保整个表达式能够顺利执行。从表格中获悉,i 和 c 类型的变量进行比较时,两个操作数的类型,统一成整型即 i 类型。但另一方面,因为其隐式特性,有时发生在后台的转换逻辑,并不是开发人员期望中的行为。首先,符号 = 在 ABAP 里有两种用法,一是赋值操作,二是比较操作,即 comparison. 本文场景显然是后者。要解释这个现象,不能凭空臆测。
2024-10-10 15:11:01 81
原创 如何使用 Python 程序从 Flask 框架的 web 服务中下载 JSON 文件
要实现一个 Python 程序从 Flask 框架的 web 服务中下载一个 JSON 文件,这个需求可以分为几个步骤。我们将需要用 Flask 来创建一个 web 服务,并将 JSON 文件放置在 Flask 服务器的根目录下,然后使用 Python 的 HTTP 请求库来访问和下载该文件。首先,我们将通过 Flask 创建一个简单的 web 服务来暴露 JSON 文件。然后,我们来学习如何使用 Python 代码来访问这个服务并下载 JSON 文件。
2024-10-09 22:40:57 1211 1
原创 中央处理器 CPU 的组成部分介绍
了解 CPU 的组成和工作原理,可以帮助我们更好地理解计算机的整体运作机制。在现代社会中,CPU 的性能直接影响到各种电子设备的体验,从手机、电脑到服务器,每一个设备中的 CPU 都在默默地执行着数十亿次的计算。在智能手机的应用中,由于体积和功耗的限制,CPU 的设计需要权衡性能和能效。因此,现代智能手机通常使用“大小核架构”(big.LITTLE),其中大核用于处理高性能任务,小核用于低功耗任务,这种设计既保证了性能,又节省了电量。
2024-10-09 22:38:27 1016
原创 为什么没有能够处理 Python 字节码的 CPU?
在讨论 Python 字节码之前,我们先来理解什么是字节码。在计算机编程领域,字节码是一种比源代码更接近机器语言的中间代码,但它仍然与机器语言有所不同。机器语言是能够被 CPU 直接执行的二进制指令,这些指令与特定的 CPU 架构相关,通常由汇编语言翻译而来。而字节码是一种用于跨平台编程语言的中间代码,它可以被解释器执行,也可以通过某种方式被编译成机器语言。在 Java、Python 等语言中,字节码的设计初衷是实现跨平台能力。
2024-10-08 13:23:21 1080
原创 通过一个实际的例子,介绍 Java 的自动装箱与拆箱机制
Java 中返回false,但100 == 100返回true,这一现象背后隐藏了 Java 对于对象和基本类型的内存管理机制。为了理解这个现象,我们需要从 Java 的自动装箱与拆箱机制、对象引用和数值缓存策略等角度深入探讨。让我们一步一步通过 JVM 的层面、字节码分析和实例案例来探讨这一问题的根本原因。
2024-10-08 13:22:11 1012
原创 GPU 和 FPGA 是否能够互相通用?
GPU 和 FPGA 都是并行计算的代表性硬件,它们在不同的计算场景中扮演着重要的角色。虽然它们都能进行并行计算,但它们在设计理念、应用场景、灵活性以及性能表现方面有着显著的差异。理解这些差异对于选择适合的硬件来解决特定问题非常重要。
2024-10-08 12:18:59 1235
原创 什么是 JavaScript 的数组空槽
在 JavaScript 中,数组是一种非常灵活的数据结构,能够保存任意类型的元素。而与其他编程语言的数组实现不同,JavaScript 的数组并不固定长度,并且可以包含空槽(Sparse Array)。// 在位置 1 处存在一个空槽// 输出: [1, , 3]空槽不同于undefined。在数组的某个索引位置,如果元素未显式赋值,我们称之为空槽,而undefined则表示这个位置明确地赋值为undefined。// arr1 中有一个空槽。
2024-10-07 22:53:18 1788
原创 如何在 Kubernetes 上部署 Spark
在 Kubernetes 中部署 Spark,可以充分利用 Kubernetes 的容器编排和自动扩展能力,让 Spark 集群能够根据工作负载动态调整。这个过程虽然涉及多个复杂的步骤,但 Kubernetes 的工具链(如 Helm、kubectl 等)以及 Spark 提供的 Kubernetes 集成特性,使得整体部署流程相对顺畅。通过真实案例的讲解,我们看到 Kubernetes 和 Spark 的结合为大型电商公司提供了强大的数据处理能力。
2024-10-07 22:52:43 1193
原创 AOP 能够取代依赖注入吗?
AOP(面向方面编程)和依赖注入(DI)都是面向对象编程中非常重要的设计概念,它们在软件开发中扮演着不同的角色,但常常被用于解决相似的问题,如解耦、提高代码的可维护性和灵活性等。那么,AOP 是否比依赖注入更强大?能否完全代替 DI?
2024-10-07 12:23:49 713
原创 Kubernetes proxy 命令与集群资源交互中起的作用
是 Kubernetes 中一个非常有用的工具,它简化了开发者与集群资源的交互,特别是在调试和开发过程中表现尤为出色。通过代理 API 服务器,开发者可以方便地访问集群内部的服务,无需复杂的认证和网络配置,这使得开发人员能够专注于调试和优化应用。在本地开发和测试 Kubernetes 应用时,提供了一种简单有效的方式来快速访问集群资源。它不仅能够帮助开发者验证应用的状态,还可以在开发者不熟悉 Kubernetes 复杂的安全和网络配置时,降低访问 API 的难度。结合真实的案例,我们可以看到。
2024-10-07 12:23:14 781
原创 使用 ChatGPT Canvas 辅助 ABAP 开发
因为我们在 Canvas 里没有提供三个 ABAP Function Module 的完整源代码,所以翻译成 C++ 后的三个 function 的实现体,除了将对应的 IF ELSE 等 ABAP 关键字翻译成 C++ 关键字之后,也没有太多其他的逻辑。整个工作区域分为三部分,最左边是对话区域,中间占据了屏幕绝大部分宽度的,是代码编辑器,最右侧的侧边栏是 Canvas 工具栏。笔者后续会继续详细介绍。这个功能主要是方便我们阅读一些复杂度较高的代码时,通过执行代码后观察打印的内容,进一步熟悉代码的执行流。
2024-10-07 12:21:12 505
原创 ABAP Daemons 和 ABAP 后台作业的区别
Daemon 在计算机科学领域的含义是守护进程。在《计算机操作系统专业课》里讲过,以 Linux 系统为例,Linux 守护进程是运行在后台的一种特殊进程,独立于控制终端并且周期性地执行某种任务,或等待处理某些将要发生的事件。Linux 系统很多服务都通过守护进程实现,常见的例子有系统日志进程 syslogd,web服务器 httpd,邮件服务器 sendmail 和数据库服务器 mysqld 等。
2024-10-07 12:19:39 132
原创 什么是 SAP ABAP 系统的工作进程(Work Process)
ABAP 系统架构图里,Work Process 工作进程的地位如下图所示。ABAP 工作进程的概念和作用,同《计算机操作系统》中的同名概念有所差异。操作系统的进程,是对正在运行中的程序的一个抽象。线程则是操作系统分配处理器时间资源的基本单元,是进程之内独立执行的一个单元。对于操作系统而言,其调度单元是线程。一个进程至少包括一个线程,通常将该线程称为主线程。ABAP 应用服务器也有调度器(Dispatcher)的概念, 如下图黄色高亮区域所示。调度的对象就是一个个工作进程,如下图绿色区域所示。
2024-10-07 12:16:59 291
原创 使用 ABAP Messaging Channel 实现多用户会话间的消息发布和订阅
笔者之前的系列文章,详细介绍了使用 ABAP Push Channel(简称 APC)来开发 TCP Socket 和 Web Socket 服务器端和客户端的实现步骤。ABAP Push Channels(APC)是一种可以实现与服务器的全双工(full-duplex)通信技术。名称里的 Push,强调了即使客户端并未向服务器端发起数据请求,服务器也能够通过该技术,将消息主动推送到客户端。
2024-10-07 12:16:05 172
原创 使用 SAP ABAP Webdynpro 实现 ABAP Push Channel 的 Web Socket 客户端
test_web_sockets_wsp.js 里定义了一个 JavaScript 对象,名称为 MySocket,包含了 connect 和 send 两个函数,分别作为 ABAP Webdynpro Connect 和 Send 按钮的处理函数,在这两个按钮被调用时触发。上一篇文章提到,SAP 发布了一个标准的 ABAP Webdynpro 应用 WDR_TEST_APC_WSP,可以用来作为 Web Socket 客户端使用,测试我们通过 APC 实现的 Web Socket 服务器端。
2024-10-07 12:14:56 519
原创 Python 能用来开发桌面客户端吗?
Python 作为一门多功能、跨平台的编程语言,适用于不同领域的开发,包括桌面客户端程序。在桌面客户端开发中,Python 以其简洁、可读性高的语法和广泛的第三方库生态圈提供了强大的支持。尽管 Python 的强项可能更多地体现在 web 开发、数据分析、机器学习等领域,然而,借助适当的 GUI 库,Python 依然可以高效地编写桌面客户端应用。
2024-10-06 09:46:20 1593
原创 GPU 是否有朝一日可以取代 CPU?
总的来说,虽然 GPU 的频率与 CPU 相当,核心数量更是远超 CPU,但它们的架构设计和应用场景决定了 GPU 并不能直接替代 CPU。GPU 适用于大规模并行计算任务,而 CPU 则在处理复杂逻辑和顺序任务上具有明显优势。即便未来技术发展使得 GPU 的计算能力进一步提升,GPU 和 CPU 的协作也将是计算架构中的主流。在一些高性能计算和图形渲染领域,GPU 的优势不可否认,但 CPU 在处理通用计算任务上的优势依然无可取代。
2024-10-06 09:45:32 845
原创 使用 Python 代码连接 PostgreSQL
在 SQLAlchemy 中,数据模型是通过 Python 类定义的,并与数据库中的表映射。为了定义一个表,通常继承Base类。# 创建基类# 定义用户表模型。
2024-10-05 22:20:15 1235
原创 如何向文科生解释什么是计算机的缓存
通过对缓存的深入理解,我们可以看到它在计算机系统中起着至关重要的作用。缓存作为 CPU、内存和硬盘之间的“中间层”,有效地提高了数据访问的速度,减少了系统的等待时间。在现实世界中,缓存技术被广泛应用于各种场景,从 CPU 的数据处理到互联网系统的网页加载,缓存的引入都极大地提升了系统的性能和用户体验。然而,缓存并非没有挑战,它在提高性能的同时,也带来了数据一致性和管理上的难题。因此,在设计和使用缓存系统时,需要仔细考虑系统的需求,合理设置缓存的大小、更新策略和有效期,确保缓存能够为系统带来最大化的效益。
2024-10-05 22:19:15 1075
原创 存储电话号码的数据类型,用 int 还是用 string?
在 Java 编程中,存储电话号码的选择可以通过两种常见方式进行:使用int类型或String类型。这种选择看似简单,但实际上涉及到 JVM 内部的字节码实现、内存优化、数据表示、以及潜在的可扩展性问题。
2024-10-05 22:17:14 722
原创 使用 Python 遍历文件夹
通过使用 Python 的标准库os和字符串处理功能,我们可以轻松实现读取子目录下所有.txt文件,并删除空行和空格,将处理后的内容合并到一个新的文件中。这个方法是高效且易扩展的,适用于各种目录结构和文件规模。
2024-10-05 21:45:36 1286
原创 Angular 服务器端应用 ng-state tag 的作用介绍
ng-state这个脚本标签在 Angular 服务器端渲染 (SSR) 中的作用不仅仅是用于客户端在页面启动时恢复应用的状态。它实际上可以在多个场景中发挥重要作用。通过将状态数据嵌入到 HTML 页面中,ng-state标签不仅能加速客户端应用的启动,还能帮助解决许多其他与数据管理和优化相关的问题。
2024-10-05 21:44:47 1212
原创 什么是 HTTP Get + Preflight 请求
CORS 是的缩写,它是浏览器与服务器之间的一种安全机制,用于控制不同源(如不同域名、端口或协议)之间的 HTTP 请求。正常情况下,浏览器会禁止不同源之间的请求(称为同源策略)。然而,CORS 是一种打破同源策略的方式,允许服务器明确声明哪些源可以访问它的资源。Preflight是 CORS 机制中的一个关键概念。它是一个通过OPTIONS方法发出的请求,目的是在执行实际的跨域请求之前,浏览器询问服务器是否允许这个跨域操作。这种请求被称为“预检”请求。浏览器会发起Preflight请求,以确保实际的。
2024-10-05 21:44:02 928
原创 什么是 HTTP 请求中的 preflight 类型请求
Preflight请求作为 CORS 机制的一部分,主要作用是确保跨域请求的安全性,尤其是在涉及非标准请求时。通过Preflight请求,浏览器与服务器能够就请求的合法性达成共识,保护用户的数据安全。在实际应用中,理解Preflight请求的工作原理,并在合适的场景下进行优化,能够大大提升 Web 应用的性能和用户体验。
2024-10-05 21:42:09 857
原创 关于 Angular SSR 应用 html 源代码中的 ng-state script 标签
在 Angular 服务器端渲染 (SSR) 的机制中,出现的是一个关键部分,它与 Angular 的状态转移和优化用户体验息息相关。这个ng-state标签中的 JSON 对象包含了 Angular 应用的预渲染状态信息。它允许将服务器端生成的状态数据传递给客户端,避免重复的状态重建,从而提高应用的性能和用户体验。当我们启用了 Angular SSR 后,应用的 HTML 内容会在服务器上生成并返回给客户端。这种做法带来了显著的性能提升,特别是在首次加载时,用户能够尽快看到渲染好的页面。
2024-10-03 22:17:13 1272 1
原创 Angular ng-state script 元素的生成机制介绍
ng-state的生成过程是在 Angular SSR 中非常关键的部分。为了让客户端能够接管服务器渲染的页面状态,Angular 在服务器端需要将应用的当前状态保存下来,并将其嵌入到返回的 HTML 中。这样,客户端在接管时就可以直接使用这些状态,而不必重新发起 API 请求或重新计算数据。这个状态的传递是通过ng-statescript 标签实现的,里面包含了整个应用的序列化状态信息,通常是以 JSON 格式存储。
2024-10-03 22:15:24 1535
原创 Angular 客户端渲染时,从 ng-state 里读取 SSR 状态的具体逻辑
Angular 在客户端启动时通过服务从ng-state标签中读取状态的机制,是 SSR 与 CSR 平滑衔接的关键。通过这一机制,应用可以避免重复请求数据,提升用户体验。结合源代码分析和实际应用案例,我们深入了解了 Angular 的状态传递与还原过程。
2024-10-03 22:12:57 1152
原创 单词 facet 的含义和使用场景介绍
在生活中,很多复杂的事物或问题都不是单一的,而是由许多不同的面构成。例如,假设我们在讨论某个电影时,不仅仅想评价它的故事情节,还想谈论它的摄影、配乐、演员表演等不同方面。它可以是具体的、物理的,比如珠宝的切面;也可以是抽象的、概念的,像是某个问题的不同侧面。复杂的社会问题往往不是黑白分明的,它们有着许多细微的层面,所有的。这个单词在英文中有着多重含义,它的主要用法和含义可以根据语境的不同表现出丰富的层次感。代表的是公司运营的不同部分,只有每个部分都处理得当,公司才能在市场上立于不败之地。
2024-10-03 22:03:38 970
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人