百度测开一面
通义千问生成 之后再修改面试官人很好.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 Writework: 复制进程的时候 共享页面而非复制 将所有页面设置为只读(标记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 (Dirty) 8-10 保留(可能有用于架构扩展的位) 11-62 页表的物理地址(具体按页大小分配) 63 保留位,可能是用于扩展的位
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值所对应的具体错误类型: 某个角度上就在中断的时候得到了 哪里出错 为什么出错 谁出错了 Lazy按需加载 本质上是一种设计模式 体现在懒汉式单例模式 等等乱七八糟的场景下 定义不赘述 Lazy Page Allocation本质上就是动态分配内存,默认的xv6实现的分配内存的模式是eager的,也就是在sbrk()等指令调用的时候,就立马执行对于大小的内存空间分配与缩小。 但是在实际的使用过程中 由于局部性原理等...
mit6.s081 lab4
RISC-V assembly这个lab是回答一下问题并记录 此处就直接把问题分析和答案打上来了 答案通过chatGPT查验 call.asm中的g、f、main具体的代码 123456789101112131415161718192021222324252627282930313233343536373839404142int g(int x) { 0: 1141 addi sp,sp,-16 2: e422 sd s0,8(sp) 4: 0800 addi s0,sp,16 return x+3;} 6: 250d addiw a0,a0,3 8: 6422 ld s0,8(sp) a: 0141 addi sp,sp,16 c: 8082 ret000000000000000e...
mit6.s081 lecture6
6和7中是陷入的代码相关的问题和页表的复盘 很多涉及的内容已经在前面的文章中描述过 这里不赘述 Lecture6Trap机制trap机制是指用户从用户空间切换到内核空间的渠道方法 而触发它的情况包括: 执行系统调用 出现除零错误 等异常 需要进行handle 设备主动触发中断 可能是在需要IO设备交互等的前提下触发 从用户空间陷入以系统调用为例,从顶层开始描述有: eg: 在user/sleep.c中调用了用户侧的sleep()方法 该方法是通过usys.pl文件生成的usys.S汇编脚本文件 提供了一个调用的汇编接口 12345.global sleepsleep: li a7, SYS_sleep ecall ret 上方就是用户侧sleep()方法的实际代码 这里调用了一个ecall指令 该指令准备好一切进入内核空间的环境: 设置当前为supervisor mode 存原程序计数器PC值到sepc寄存器当中 将程序计数器设置为控制寄存器stvec寄存器当中 同时设置scause寄存器中的值 该寄存器存储中断原因 这里存储的值是8...
mit6.s081 lab3
Speed up system calls顾名思义 该Lab就是在user / kernel mode之间设定一个共享只读缓存 该缓存是以线程为单位共享的 换言之 只要不影响两空间之间的数据隔离规则 就可以将其值设置在这个只读缓存当中‘ 这里所设置的是pid 内核空间和用户空间之间交互的手段是trampoline和trapframe 前者是将数据由一个态陷入另一个态的逻辑代码 后者则是在这一过程中需要携带的数据结构 在这里需要多加一个字段 类似实现trace的时候一样 关于这个usyscall 已经给出了用户侧ugetpid()调用实例和实际的结构体内容 kernel/proc.c 结构体添加元素 12345// Per-process statestruct proc { ... struct usyscall* usyscall_info; // user / kernel model shared...