一、需求分析什么是 Mock?RPC 框架的核心功能是调用其他远程服务。但是在实际开发和测试过程中,有时可能无法直接访问真实的远程服务,或者访问真实的远程服务可能会产生不可控的影响,例如网络延迟、服务不稳定等。在这种情况下,就需要使用 mock 服务来模拟远程服务的行为,以便进行接口的测试、开发和调试。
mock 是指模拟对象,通常用于测试代码中,特别是在单元测试中,便于我们跑通业务流程。
举个例子,用户服务要调用订单服务,伪代码如下:
12345678class UserServiceImpl { void test() { doSomething(); orderService.order(); doSomething(); }}
如果订单服务还没上线,那么这个流程就跑不通,只能先把调用订单服务的代码注释掉。
但如果给 orderService 设置一个模拟对象,调用它的 order 方法时,随便返回一个值,就能继续执行后续代码,这就是 mock 的作用。
为什么要支持 Mock?虽 ...
一、需求分析在 RPC 框架运行的过程中,会涉及到很多的配置信息,比如注册中心的地址、序列化方式、网络服务器端口号等等。
之前的简易版 RPC 项目中,我们是在程序里硬编码了这些配置,不利于维护。
而且 RPC 框架是需要被其他项目作为服务提供者或者服务消费者引入的,我们应当允许引入框架的项目通过编写配置文件来 自定义配置。并且一般情况下,服务提供者和服务消费者需要编写相同的 RPC 配置。
因此,我们需要一套全局配置加载功能。能够让 RPC 框架轻松地从配置文件中读取配置,并且维护一个全局配置对象,便于框架快速获取到一致的配置。
二、设计方案配置项首先我们梳理需要的配置项,刚开始就一切从简,只提供以下几个配置项即可:
name 名称
version 版本号
serverHost 服务器主机名
serverPort 服务器端口号
后续随着框架功能的扩展,我们会不断地新增配置项,还可以适当地对配置项进行分组。
比如以下是一些常见的 RPC 框架配置项,仅做了解:
注册中心地址:服务提供者和服务消费者都需要指定注册中心的地址,以便进行服务的注册和发现。
服务接口:服务提供者需要指定提 ...
为了加深对RPC框架的理解,我跟着鱼皮进行了一次完整的RPC框架的开发,写博客主要用来记录技术要点,开发过程适当省略。
一、基本概念什么是 RPC?RPC(Remote Procedure Call)即远程过程调用,是一种计算机通信协议,它允许程序在不同的计算机之间进行通信和交互,就像本地调用一样。
简单理解,以前只能跑腿到线下店购买食物,耗时耗力。但现在有了手机、网络、外卖平台,只需要在家动动手指,就能点外卖让骑手把食物配送到家,而不需要关注网络是怎么传输的、外卖平台是怎么操作的、骑手小哥是怎么配送的,只负责享受食物就行了。
为什么需要 RPC?回到 RPC 的概念,RPC 允许一个程序(称为服务消费者)像调用自己程序的方法一样,调用另一个程序(称为服务提供者)的接口,而不需要了解数据的传输处理过程、底层网络通信的细节等。这些都会由 RPC 框架帮你完成,使得开发者可以轻松调用远程服务,快速开发分布式系统。
举个例子,现在有个项目 A 提供了点餐服务,项目 B 需要调用点餐服务完成下单。
点餐服务和接口的示例伪代码如下:
1234interface OrderService ...
“攻击” 5步走 1.社会工程,获取特定目标(比如已知qq号码)或非特定目标(机会主义者要控制一批机器当僵尸机) 2.扫描,获取目标漏洞信息 3.入侵 4.拖库或潜伏监控 5.消除痕迹
“防范” 1.不要泄露社工信息 2.打补丁堵漏洞 3.观察网络流量,识别正常、异常、攻击,以及拖库等行为(snort,mydlp) 4.对流量载荷中可能的泄露进行检查(ntop一般不关心载荷,用squid+sslbump+icap) 5.日常性的工作,比如勤于观察日志、关心技术论坛和安全新闻等
“网络”系统 1.访问控制,除了os、app登录等,还有iptables、selinux等 2.传输加密,https,vpn,ssh 3.掩盖IP来源,各种proxy和跳转,典型就是vps、tor、i2p 4.对流量进行其他混淆,比如使用ping载荷、dns载荷等 5.其他,比如利用Botnet、APT、供应链攻击等
网络攻击的深层技术(脱离脚本小子的低级趣味) 1.内存安全,以缓冲区溢出为代表,各种exploit和shellcode基本都是这一类 2.二进制分析和逆向,各种平台 ...
4.14我们组的项目是基于大模型的知识问答教育系统,我在前期的任务是数据采集和处理清洗,以便于构建数据集训练大模型。
基于调查研究,我对于数据收集的关键点做出了以下归纳。
准确性:确保数据来源可靠,内容准确无误。错误的信息会导致模型输出错误答案,影响用户体验和教育效果。
更新性:确保数据是最新的,特别是对于动态变化的领域,如科技、法律等。
教育层次:覆盖从基础教育到高等教育的内容,适应不同学习阶段的用户需求。
结构化数据:优先选择结构化数据(如数据库、表格),便于处理和分析。
隐私保护:确保用户数据的匿名化处理,避免泄露个人信息。
合规性:遵守数据保护法律法规,如GDPR等,确保数据收集和使用过程中的合法合规性。
在开始的时候,我准备从百度百科、csdn等知识网站上收集数据,但是我发现这些网站上的数据质量良莠不齐,有的甚至有常识性错误,难以在爬取的时候进行分辨;并且这些数据的格式不一致,在后期处理的时候会造成麻烦,于是放弃。
然后我找到了Hugging Face 的 Datasets 库,这个库提供了大量预构建的数据集,涵盖了广泛的任务和领域,包括文本分类、情感分析、机 ...
其他队友的大模型训练和前后端开发工作基本完成了,于是我进行了测试。
功能测试功能测试的主要目的是验证网站的核心功能是否按预期工作,包括用户交互、数据输入、页面跳转和功能性操作。
测试过程中,主要集中在以下几个方面:
- 验证链接跳转是否正确
- 输入验证和表单提交
- 功能性测试,如搜索、提问、用户登录、密码找回等
测试环境
操作系统:Windows 10
浏览器:Microsoft Edge,火狐,Chrome
自动化测试工具:Selenium WebDriver, JUnit
自动化测试
对于某些复杂的用例,我用了自动化测试以便减轻人工工作量
测试结果
绝大多数功能点按照预期工作,但发现了包括链接跳转错误、输入验证不严格的问题。
Bug 列表
1.输入问题时如果小于一定长度时提交会没有反应,而不是给出报错
2.输入问题时如果超出一定长度时提交会没有反应,而不是给出报错
3.前端路由跳转有时会失效
在反应给开发同学之后,修改了这些bug
性能测试虽然网站不进行上线同时供多人使用,但性能测试也是测试的重要一环。
评估系统能力:性能测试通过模拟实际使用情况,对系统进行压力测试,以 ...
第一章1 软件测试学科的发展1957~1978年,以功能验证为导向,测试是证明软件是正确的(正向思维)。1978~1983年,以破坏性检测为导向,测试是为了找到软件中的错误(逆向思维)。1983~1987年,以质量评估为导向,测试是提供产品的评估和质量度量。1988年起,以缺陷预防为导向,测试是为了展示软件符合设计要求,发现缺陷、预防缺陷。
2 正向测试与反向测试的定义,关系Bill Hetzel博士(正向思维的代表):
软件测试就是为程序或系统能够按预期设想运行而建立信心的过程。
软件测试是一系列活动以评价一个程序或系统的特性或能力并确定是否达到预期的结果
测试是为了验证软件是否符合用户需求,即验证软件产品是否能正常工作
Glenford J. Myers (反向思维的代表):
测试是为了证明程序有错,而不是证明程序无错误
一个好的测试用例是在于它能发现至今未发现的错误
一个成功的测试是发现了至今未发现的错误的测试
3 从经济视角认知软件测试测试的经济观点就是以最小的代价获得最高的软件产品质量。经济观点也要求软件测试尽早开展工作,发现缺陷越早,返工的工作量就越小,所造成的损 ...
转换为Alpaca数据集和Json格式用于模型训练和微调之前得到了csv格式的数据集,而模型训练和微调需要用到json格式,于是进行转换。下面是代码:
12345678910111213141516171819import pandas as pdimport json# 读取CSV文件data = pd.read_csv('cleaned_translated_train.csv')# 转换数据为JSON格式,每一行变成一个字典json_data = [ { "instruction": row["question"], "input": "", "output": row["answer"] } for index, row in data.iterrows()]# 将JSON数据保存到文件with open('data_for_training.json ...
.ssh/authorized_keys就是为了让两个 Linux 机器之间使用 ssh 不需要用户名和密码。采用了数字签名 RSA 或者 DSA 来完成这个操作。
.ssh/id_rsa是SSH(Secure Shell)协议使用的默认私钥文件。当连接到支持SSH的远程服务器或系统时,id_rsa文件用于SSH身份验证。 它包含SSH密钥对的私钥部分。相应的公钥(通常存储在id_rsa.pub文件中)被添加到远程服务器上的~/.ssh/authorized_keys文件中,以允许使用关联的私钥进行身份验证。
.ssh/id_rsa.pub是与用于SSH身份验证的私钥文件(id_rsa)对应的公钥文件。它包含可以与支持SSH的远程服务器或系统共享的加密密钥。当您想要通过远程服务器进行身份验证时,通常需要将您的公钥添加到服务器上的~/.ssh/authorized_keys文件中。这允许服务器通过将您在SSH连接期间提供的公钥与存储在authorized_keys文件中的公钥进行匹配来验证您的身份。
与应保持安全且不可 ...
去除过短或者过长训练数据在机器学习中,去除过短或过长的训练数据通常是为了提高模型的性能和稳定性。以下是具体的原因:
质量控制
过短的文本:
可能包含太少的信息,无法提供足够的上下文。
可能是噪音或无用的内容,如单个字符或单词。
过长的文本:
可能包含冗余信息或噪音。
处理起来资源消耗较大,增加计算开销。
计算效率
过长的文本:
需要更多的计算资源和时间。
可能导致内存不足或训练时间过长。
模型训练稳定性
过短的文本:
可能导致模型过拟合,无法泛化到更长或更复杂的句子。
模型可能学不到有用的特征。
过长的文本:
可能导致模型在训练时遇到梯度消失或爆炸的问题。
增加模型的复杂性,可能需要更复杂的架构来处理。
数据均衡性
去除过短或过长的文本有助于确保训练数据的长度分布更加均衡,避免模型对特定长度的文本过度拟合。
一致性和可解释性
保持数据长度在一个合理的范围内,可以提高模型预测结果的一致性和可解释性。
下面是我去除过短或者过长训练数据的代码
1234567891011import pandas as pd# 读取CSV文件data = pd.read ...