本文记录自己工作或学习的过程中了解到的一些概念和名词,包含但不限于计算机科学、数据库、经济学、软件工程等。
Code Complete
结对编程
结对编程(Pair programming)是一种敏捷软件开发的方法,两个程序员在一台计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称为驾驶员,审查代码的人称作观察员。两个程序员经常互换角色。
- 驾驶员(Driver):驾驶员负责直接操控键盘和鼠标,编写代码。驾驶员集中精力于当前的任务和细节,实现功能
- 导航员/观察员(Navigator):导航员负责观察代码的编写过程,审查代码,提出建议和改进,并考虑更高层次的设计、策略和潜在的问题。导航员也会帮助发现错误,提出优化建议和进行代码重构。
优势/好处:
- 提高代码质量
- 知识共享
- 更好的设计:导航员可以帮助驾驶员考虑更高层次的设计问题,从而提高系统的整体设计质量,避免产生技术债务
- 增强团队合作
- 持续的代码审查
- 提高生产率:看似两个人一起工作成本较高,但由于减少了错误和重构时间,整体生产率实际上可以提高
横向和纵向越权
横向越权:指的是攻击者尝试访问与他拥有相同权限的用户的资源
纵向越权:纵向越权指的是一个低级别攻击者尝试访问高级别用户的资源
如何防止横向越权漏洞:
- 可以通过建立用户和可操作资源的绑定关系,用户对任何资源进行操作时,通过该绑定关系确保该资源是属于该用户的
- 对请求中的关键参数进行间接映射,避免使用原始关键参数名,比如使用索引1代替id值123等
如何防止纵向越权漏洞:
建议使用基于角色访问控制机制来防止纵向越权攻击,即预先定义不同的权限角色,为每个角色分配不同的权限,每个用户都属于特定的角色,即拥有固定的权限,当用户执行某个动作或产生某种行为时,通过用户所在的角色判定该动作或者行为是否允许。
反向链接
反向链接(也称"入站链接","单向链接")是从一个网站到另一个网站页面的链接。Google和其他主要的搜索引擎认为:反向链接是给特定网站的"投票"。拥有大量反向链接的页面,通常会有较高的自然搜索排名。
ROI
ROI (Return On Investment) 投资回报率,经济学名词,指投资后收入的收益与成本间的百分比,是一种衡量获利能力的指标,用于评估一项投资的效率或盈利能力。
ROI的计算公式为:ROI = ( (收益 - 投资成本) / 投资成本 ) * 100%
其中:
-
收益指投资项目带来的利润或回报
-
投资成本是指投资项目的总成本
ROI的结果是一个百分比值,通常,正的ROI表示投资带来了正收益,而负的ROI表示投资导致了亏损。
增量同步&全量同步
增量同步和全量同步是两种不同的数据同步策略,常用于数据库、文件系统、云服务等数据管理领域。
- 增量同步:就是每天只将业务数据中的新增及变化数据同步到数据仓库
- 全量同步:就是每天都将业务数据库中的全部数据同步一份到数据仓库
EJB
企业级JavaBean
(Enterprise JavaBean,或称Jakarta Enterprise Bean)是一个用来构建企业级应用的服务器端可被管理的组件。
EJB技术的诞生标志着Java Beans的运行正式从客户端领域扩展到服务器领域,在电子商务领域运用EJB技术可以简化应用系统的开发。
通俗的讲,EJB就是将一些类封装成一个组件,然后部署到一台服务器上,这样客户端用户就可以调用这个组件来获取该组件的能力,比如订单服务、下单服务都可以单独封装成一个组件,部署在不同的服务器上,以此来提高系统的运行效率
JNDI
Java命名和目录接口(Java Naming and Directory Interface),是Java的一个目录服务应用程序接口(API),它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象。
J2EE/J2SE
不管是J2ee还是J2se,都是Java为不同需求的用户提供的不同服务,也就是说通过提供不同类型的类库满足不同用户的需求
Java提供三个版本:j2se、j2ee、j2me
- J2se(Java 2 standard edition)是Java2的标准版,j2se包含了构成Java语言核心的类:java.util、io流、多线程、网络编程(java.net)、swing GUI组件库等
- J2ee(Java 2 enterprise edition)是Java2的企业版,主要用于提供分布式的网络程序开发功能,包含许多用于开发企业级应用的类,比如:jdbc、servlet、jms、jsp、ejb、jndi、rmi等
RMI
Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。
远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI的宗旨就是尽可能简化远程接口对象的使用。
分布式
分布式计算是以计算机科学中的一个研究方向,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给多个计算机进行处理,最后把这些计算结果综合起来得到最终的结果。
分布式通常指的是一种计算模型,其中计算任务被分解并在多个计算节点上执行。这些计算节点可以是位于同一台计算机或网络中不同计算机上的处理单元。
分布式计算旨在通过同时利用多个计算资源来提高性能、可伸缩性和容错性。
NAS
NAS
通常是指网络附加存储(Network Attached Storage)。NAS是一种专门设计用于提供文件存储和共享的设备,它通过网络连接,使多个用户和客户端能够访问存储在其中的数据。一般来说,NAS设备是一台专用的硬件,配备了自己的操作系统和存储管理软件。
NAS存储通常包括磁盘驱动器(可以是单个硬盘或多个硬盘组成的存储阵列)和网络连接端口。用户可以通过网络协议,如SMB
或NFS
等来访问NAS
存储中的文件。
主要特点及用途:
- 文件共享:允许多个用户通过网络访问相同的文件和文件夹
- 数据备份:用户可以通过定期备份来保护重要的文件
- 远程访问:通过网络连接,用户可以在任何地方通过互联网访问其NAS存储中的文件
- 中央化管理:NAS提供了中央化的存储管理,允许管理员轻松管理和维护存储系统
有效性检查
在Java中,"有效性检查"通常指的是在程序中对数据或输入进行验证的过程。有效性检查的目的是确保或输入符合预期的规范、范围、格式或其他条件,以保证程序的正常运行和安全性。
UT/IT/ST/UAT
- UT(Unit Testing):单元测试,也称为模块测试,是对软件中最小的可测试单元(通常是函数或方法)进行测试的过程
- IT(Integration Testing):集成测试,又称组合测试,测试不同模块之间的交互和集成,它的目标是验证系统中不同模块之间的数据传递、通信和写作是否正常工作。集成测试可以帮助发现模块之间的接口问题和依赖关系
- ST(System Testing):系统测试是在整个系统范围内进行的测试,旨在验证系统是否符合规格和需求。系统测试可以包括功能测试、性能测试、安全测试和可靠性测试等。它是在模块和子系统集成测试之后进行的。
- UAT(User Acceptance Testing):用户验收测试是由终端用户或客户执行的测试,旨在确认系统是否满足其业务需求,并准备好投入使用。UAT通常是最后一个测试阶段,目的是确保系统在用户角度下的功能、性能和可用性都符合预期。
CVE
CVE(Common Vulnerabilities and Exposures)的全称是公共安全漏洞和暴露,是公开披露的网络安全漏洞列表。IT人员、安全研究人员查阅CVE获取漏洞的详细信息,进而根据漏洞评分确定漏洞解决的优先级。
它是由MITER(麻省理工学院软件工程研究中心)创建和维护的。
CVE的主要目的是提供一个公共的、可搜索的漏洞标识符,以帮助安全专业人员、研究人员和供应商追踪、共享和汇总有关已知漏洞信息
CVE标识符的格式如下:
串行接口/并行接口
在计算机领域,"串行接口"和"并行接口"通常是指数据传输的两种不同方式
- 串行接口:一种数据传输方式,其中位按照顺序一个接一个地传输。在串行通信中,数据通过单个通信线路传输,通常使用较少的引脚。
- 并行接口:一种数据传输方式,其中多个位同时传输。在并行通信中,数据通过多个平行通信线路传输,通常使用更多的引脚
区别:
- 传输方式:并行传输是指同时传输多个数据位,每个数据位使用独立的线路传输,传输速度较快;串行传输是指依次传输一个数据位,只有一个数据线路,传输速度较慢
- 适用距离:并行传输适用于短距离传输,因为数据位之间会相互干扰;串行传输适用于长距离传输,因为数据位之间相互独立,不会干扰。
- 成本:并行传输需要更多的线路和接口,成本较高;串行传输只需要一个线路和接口,成本较低。
架构设计
架构设计是指在构建复杂系统时,从整体上规划系统的结构、组件和交互方式的过程。它关注系统中组件之间的相互关系,以及如何将系统划分为模块和层次。合理应用架构设计不仅有助于提高系统性能和稳定性,还能为用户提供更好地使用体验。
没有银弹
"没有银弹"(No Silver Bullet)是一个经典的计算机科学术语,最初由图灵奖获得者弗雷德里克*布鲁克斯在其著名的论文《没有银弹:软件工程中的本质复杂性》("No Silver Bullet: Essence and Accidents of Software Engineering")中提出。
这个短语表达的意思是,对于软件工程中的困难和挑战,没有单一的解决方案或者技术可以解决所有的问题。
布鲁克斯认为软件工程的本质复杂性是无法被简化或者彻底消除的。
这个短语强调了软件工程领域的复杂性和挑战,提醒人们不要寄希望于单一的技术或者方法可以解决所有的问题,而需要在理解问题的基础上,采用多种方法和策略来解决软件开发中的挑战。
令牌桶
令牌桶(Token Bucket)是计算机网络中一种常用的流量控制算法,用于限制数据传输的速率。他可以确保发送方以恒定的速率发送数据,同时允许数据量突然突发,但是会有一个限制。令牌桶算法通常用于实现流量控制、速率限制和流量整形等功能。
算法原理,可以用一个比喻来理解:想象一个水桶,这个水桶里面装有一个固定数量的令牌(Token)。发送方在发送数据之前必须从水桶中取出一个令牌,只有取到令牌的时候才能发送数据,而当桶中的令牌用完时,发送方需要等待一段时间,直到桶中再次产生新的令牌为止。
TPS/QPS/RT
- TPS(Transactions Per Second):即每秒事务数。在计算机科学和性能测试中,
TPS
是一个常用的衡量指标,用于描述系统在单位时间内处理的事务数量。事务可以是任何系统中的操作或事件,例如数据库事务、网络请求、消息处理等。 - QPS(Queries Per Second):每秒查询数,用于描述系统在单位时间内收到的查询或请求的数量。查询可以是数据库查询、HTTP请求、API调用等。
- RT(Response Time):响应时间。响应时间是指系统在收到请求后完成处理并返回响应所花费的时间。它是衡量系统性能和用户 体验的重要指标之一。较低的响应时间意味着系统能够更快地响应用户请求,反之则表示系统性能较差。
幂等性
幂等性是指在处理重复请求时,确保对于同一个请求,无论接收多少次,最终的结果都是一致的。换句话说,即使同样的请求被重复发送多次,系统仍然只会处理一次,并产生相同的结果,而不会产生额外的影响。
分布式系统中,重复请求是一个常见的问题,可能由于网络问题、客户端重试、系统故障等原因导致同一个请求被发送多次。为了避免重复请求对系统造成不必要的影响,通常会对请求进行幂等校验。
常见的实现方式有:
- 唯一标识校验:每个请求都包含一个唯一的标识符,可以是请求ID、业务流水号或者其他的唯一标识符
- 状态标记校验:服务端可以有一个记录表来记录当前操作的状态,以此来判断操作是否执行过
- 版本号校验:请求中携带资源的版本号和系统中资源的当前版本号来判断请求的重复性(不一致则表示重复请求)
RTT(Round-Trip Time)
RTT:往返时间,在计算机网络中它是一个重要的性能指标,通常用于衡量网络延迟或网络响应时间。
是指数据包从发送端传输到接收端并返回到发送端所需的总时间
BitTorrent协议
BitTorrent协议(简称BT、俗称比特洪流、BT下载)是用在对等网络中文件分享的网络协议程序。和点对点(point-to-point)的协议程序不同,它是用户群对用户群(peer-to-peer),而且用户越多,下载同一文件的人越多,下载该档案的速度越快。且下载后,继续维持上传的状态,就可以"分享",成为其用户端节点下载的种子文件(.torrent)
MQTT
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级、开放标准的消息传输协议,设计用于受限环境中的物联网(IoT)设备之间的通信。MQTT最初由IBM开发,现已成为OASIS标准。
Callee/Caller
在编程领域中,"callee"和"caller"是指在函数调用中的两个角色。
- caller(调用者):Caller是指发起函数调用的代码或函数,在调用函数的过程中,Caller会调用一个或多个函数,并将必要的参数传递给被调用的函数
- callee(被调用者):Callee是指被调用的函数。
鲁棒性(Robustness)
鲁棒性是一个在工程学、计算机科学、统计学等领域中广泛使用的概念,它指的是一个系统、模型或算法在面对不确定性和变化时,能够保持其性能和稳定性的能力。
具体来说,鲁棒性意味着系统能够有效地处理输入数据中的噪声、异常值、变化或者不完全信息,以及在设计参数、环境条件或使用场景发生变化时,仍能正常工作或保持一定的性能水平。
破窗效应
破窗效应(Broken Windows Theory)是一种社会学理论,最初由犯罪学家詹姆斯·威尔逊(James Q. Wilson)和乔治·凯利(George L. Kelling)于1982年提出。该理论通过比喻突出了环境中的不良现象(如破窗户、涂鸦、垃圾等)对社会治安的负面影响。
该理论的核心观点是:如果在一个社区中有一扇破窗户没有及时修理,那么其他人就会认为这个社区不受人们尊重,进而会放任不良行为的发生,这样就会导致更多的窗户被破坏,最终社区的整体治安会急剧恶化。
软件开发中,常提到的破窗理论通常指"软件开发中的破窗理论(The Broken Windows Theory of Software Development)"。该理论由程序员和作者 Steve McConnell 在他的书籍《软件项目生存指南》(Code Complete)中首次提出的,它是基于社会学中的“破窗理论”而来。
在软件开发领域,该理论的核心概念是:如果软件项目中存在不良的编码实践、低质量的代码、未解决的问题或者其他"破窗"现象,那么其他开发者可能会受到影响,继续破坏代码的质量,导致更多的问题产生。
得墨忒耳法则
Demeter法则(Law of Demeter,LoD),又称为最少知识原则(Principle of Least Knowledge),是一种用于软件开发中的设计原则。其主要目的是通过减少对象之间的耦合,提高软件模块的独立性和可维护性。
一个对象应当对其他对象尽可能少的了解。具体而言,一个对象应只与其直接关联的对象进行交互,而不应该依赖于链式调用或过多地了解其他对象的内部结构。
里氏替换原则
又称Liskov法则
,是面向对象设计中的五大原则之一(SOLID
原则中的"L
")。由计算机科学家Barbara Liskov在1987年提出。
核心思想:子类对象能够替换父类对象并且程序的行为不会发生变化。这意味着,程序中的一个基类对象可以被其他子类对象替换,而不影响程序的正确性、可用性和功能。
奥卡姆剃刀原则
也称奥卡姆的剃刀,是一种解决问题和做出决策的哲学原则。它的核心思想是:"若无必要,勿增实体"。
通俗地说,面对多个解释同一现象的理论时,应该选择最简单的那个,即假设最少得那个。这个原则强调不要引入不必要的假设和复杂性。
奥卡姆剃刀的精髓并非是将问题简单化,而是采取简洁有效的步骤。即:针对性强,直接了当
在编程中,对应的就是说代码不要过度优化
TLDR(太长未读)
太长未读(too long, didn't read的缩写),多用于在社交媒体等上对某条消息或某篇文章进行评论。
(对某篇文章或某个讨论议题的)短小总结,扼要概述。
EOL
产品寿命结束(End-of-life,EOL)是一个用于提供给用户产品的术语,表示该产品的生命周期结束,即表示产品/软件不再维护或随时可能终止服务