凤凰架构 —— 访问远程服务
RPC“为了让计算机像调用本地方法一样调用远程方法” 这是RPC最原始的定义,于是可以从调用本地方法的思路上来分析RPC 调用的时候 需要知道入参 方法 返回结果 本质上和RPC上是一样的 即 发什么 发给谁 得到什么的问题 原文中采用了这样的例子 12345678910// Caller : 调用者,代码里的main()// Callee : 被调用者,代码里的println()// Call Site : 调用点,即发生方法调用的指令流位置// Parameter : 参数,由Caller传递给Callee的数据,即“hello world”// Retval : 返回值,由Callee传递给Caller的数据。以下代码中如果方法能够正常结束,它是void,如果方法异常完成,它是对应的异常public static void main(String[] args) { System.out.println(“hello world”);} 如上是一个调用时的minimal的情景 通讯在实际的RPC中 还需要考虑如 怎么发 什么形式发...
百度测开二面
...
测试用例设计分析&场景
测试用例如何设计写在一面反思后 目前的测试思维还是太差了 想要思考出一套适合自己的方法论 当我们拿到一个场景题 想要来设计一个具体场景的测试用例的时候 我应该怎么去思考? 将不同情景下的需求都抽象出来 根据产品实现的多个方面进行抽象 有什么方面?功能 性能 安全 UI 兼容性 功能功能首先就是 对于该场景下的这一部分 他是否完成所需要实现的功能 这里我将他归类为普遍功能和特殊功能 通过产品本身的性质进行定义 所谓的普遍功能 本质上就是说 同类型的其他产品都会实现的一些功能 以及他们都会接触到的一些测试用例 例如说搜索框和大模型QA中的输入相关 例如说购物车和售货机 他是否可以跳转支付 所谓的特殊功能就是在这一个场景下的具体差异实现 例如说搜索框的搜索跳转与大模型QA中的文本生成回复 购物车的网购和售货机的货物弹出 以及针对拆分出的各个模块 分别测试他的所对应边界值(异常处理) 以及处理措施 该两者也是这一部分的一大组成 性能然后就可以从性能这方面进行思考 性能本身是很难量化的 所以我们可以借助一些数据来体现他 同样可以从两个方面进行体现 一个是正常服务状态下的...
百度测开一面
通义千问生成 之后再修改面试官人很好.jpg 技术相关的问题没有深挖 比较基础 重点在项目是否有进行测试 怎么测试的 测试了什么 与测试场景题的回答上 个人介绍与背景 基本信息: 广东金融学院计科专业大三学生 面试岗位: 测试开发 技术背景: 学习了Java, Go, C++, Python等语言及其常用框架 项目经验: 自建项目在内测阶段,服务于学校本校学生,已有100多人使用 正在完善个人博客,学习MIT6.s081操作系统课程 目标: 希望通过实习获得实际生产经验,量化和提升个人能力 项目详细讨论 筋斗云项目 基于OpenAI...
百度测开预备
总结了一下各大平台上的面经 以及一些自己不熟悉的 百度测开预备mysql和redis的区别前者是关系型数据库 后者是kv型数据库 nosql mysql以表格形式存储数据 redis以键值对形式存储数据 前者将数据存储在磁盘当中 后者将数据存储在内存当中 所以后者的响应速度一般来说比前者快 可容忍的QPS比前者大 mysql在项目中一般用作DB层 redis一般用作缓存 中间层 mysql基于innodb 在重启之后数据不会丢失 还可以进行一定程度上的崩溃恢复 redis重启后会丢失数据 但是提供了 AOF和RDB文件来支持数据持久化 查找排名第二的成绩1234select score from table order by score desclimit 1 offset 1 查询范围内的成绩1234select scorefrom tablewhere score between 1 and 100order by score desc 如何评判ai大模型的准确率什么任务: 生成任务 分类任务 回归任务 分类任务:给出多个分类和目标物体 让ai大模型对他进行分类...
Linux常见命令
Linux在学习的时候,通过WSL服务器等用的还挺多。但是一问起来还真不好答,遂组织一下 Linux常见命令ls列举当前目录下的所有文件 常用ls ls -l (ll) ls -a (la) 对应列举文件 列举文件详细信息 列举包括隐藏文件的所有文件 12345678910chenz@Chenzc:~/test$ lsa b backup test.cchenz@Chenzc:~/test$ ls -ltotal 16drwxr-xr-x 2 chenz chenz 4096 Jan 15 00:09 a-rw-r--r-- 1 chenz chenz 1 Jan 15 00:08 bdrwxr-xr-x 8 chenz chenz 4096 Feb 10 17:19 backup-rw-r--r-- 1 chenz chenz 132 Feb 11 00:51 test.cchenz@Chenzc:~/test$ ls -a. .. .a.txt a b backup ...
mit6.s081 lab5
不知道官网上为什么找不到lazylab 仓库中也没有lazy的分支 暂时跳过了 Copy On Write work: 复制进程的时候 共享页面而非复制 将所有页面设置为只读(标记COW情景) 修改uvmcopy函数 识别页面错误时 分配新页面 新页面可以设置PTE_W位 设计引用计数法 添加时机:fork 删除时机:删除引用的时候 RSW中记录当时是否为COW场景 RSW记录引用次数 √ 页表数据组织格式 页表相关数据 在xv6中 页表并没有其他信息 是通过一个指针来进行保存的 页表条目(PTE)位按照以下结构来组织: 位范围 含义 0 PTE_V (Valid) 1 PTE_R (Read) 2 PTE_W (Write) 3 PTE_X (Execute) 4 PTE_U (User) 5 PTE_G (Global) 6 PTE_A (Accessed) 7 PTE_D...
mit6.s081 lecture9
Lecture9 在进入Lecture9内容前 先复盘一下xv6 Chapter中的内容 控制台输入 先用使用者的角度讲起 在输入的时候我们通常是一行行进行输入 即以\n或ctrl + D进行分界 在xv6中 是通过几个板块进行读取的 首先在程序启动的时候 可以在kernel/main.c中看到consoleinit() 程序会在这个函数当中配置硬件的参数等信息(其中注册的比特率 数据结构等 都是直接写入寄存器 使硬件按照该规定生效的) 同时此处配置了consoleread()和consolerwrite()的两个方法 12345678910111213void consoleinit(void) { // 初始化锁 initlock(&cons.lock, "cons"); // 配置硬件参数 uartinit(); // connect read and write system calls // to consoleread and consolewrite. // 注册读写系统调用用到的方法...
mit6.s081 lecture8
Lecture8 在xv6中现有的实现当中,当出现了pagefault,会直接panic报错,然后杀掉对应的进程 而在实际上的操作系统当中 往往会利用这个产生一个缺页中断 来实现一个 lazy allocation的效果 本质上就是通过标志位 状态变量等方法 判断此次中断是否需要加载资源的情况 然后捕获该次异常(中断) 对资源进行加载即可 怎么进行判断呢? stval:存储出错时的虚拟地址 或访问出错的目标地址 up to具体的错误类型 scause:存储出错的原因 存储,读取异常等 sepc:存储出错时的位置 计数器 以下为scause值所对应的具体错误类型: scause 某个角度上就在中断的时候得到了 哪里出错 为什么出错 谁出错了 Lazy 按需加载 本质上是一种设计模式 体现在懒汉式单例模式 等等乱七八糟的场景下 定义不赘述 Lazy Page Allocation 本质上就是动态分配内存,默认的xv6实现的分配内存的模式是eager的,也就是在sbrk()等指令调用的时候,就立马执行对于大小的内存空间分配与缩小。 但是在实际的使用过程中 由于局部性原理等...