0%

2024 OS营第一阶段总结-FV

背景

沉迷 LOL 十年,归来仍是白银 的经常翘课但毕业后有自己复习408专业课的血亏科班老东西,写过 vue,nodejs,python,C

(欢迎找我干活,可以为爱发电)

第一阶段做的事就是 90% 刷 rustlings,加上 10% 复习了下基础知识

rust

一言以蔽之,我永远喜欢 C 🌝🌝🌝🌝🌝🌚

安全诚可贵,自由价更高。但是为了完成训练营还是学习一下

类型太多要匹配,所有权转移,可变引用与不可变引用的限制 是耽误我最长时间的,机制理解但是感觉用起来就是很不方便。

参考资料

圣经也就图一乐,真学rust还得 官方文档,写代码神器:官方手册

官方文档:理解一些机制和基础用法,做 rustlings 里模块分类和调用方式、编译器参数 等题目时用到的

官方手册:各种类型包含的函数和用法,不会做了就翻一翻,在左边列表找一找,经常能有意想不到的收获

具体内容

对我有用的新学到的且值得值得记录的 主要是 Option 的几个方法

  • as_mut() :&mut Option -> Option<&mut T>.
  • as_ref() : &Option -> Option<&T>.
  • as_deref_mut() : Option (or &mut Option) to Option<&mut T::Target>

前面题目里用到的时候只是按照提示修改,没有细究功能和用法,后面算法题才发现很好用

还有一些用起来不熟练或者还没用但感觉以后可能会有用的,具体用法等实践中再研究了

  • Rc, Arc, Cell, RefCell

数据结构

包括 rustlings 里新加入了一些算法题,小复习了一下涉及到的 BST, heap 的内容,

其他 BFS, DFS, stack,queue,图,都太基本了没啥好说的,DFS 连边的类型都不用区分 =。=
建议下次提升到 912 难度😉(bushi)
加点 最短路径、KMP啥的 可以有🥺

二叉搜索树

  • 特性:中序,任意 parent 不小于左子树,不大于右子树。
    亦即中序遍历序列单调非降

    完全二叉树

  • 平衡因子处处非负:左子树满树

  • 逻辑节点与物理元素依层次遍历次序彼此对应:

Parent(i) = ( i-1 ) >> 1
LChild(i) = ( 1 + ( i << 1 )
RChild(i) = ( 1 + i ) << 1

完全二叉堆

  • 用物理上的向量实现逻辑上的完全二叉树
  • 维持偏序而非全序,即 val [i] <= val [Parent(i)]

操作

  • 插入 + 上滤 O(lgn):只与 Parent 对比并直接互换
  • 删除 + 下滤 O(lgn):用末节点填充根节点(维持结构性)+ swap(e, max(Lchild, Rchild)) (维持堆序性)

操作系统

当年就这门课学得最好,前几个月刷了下 《Three Easy Pieces》,看一半发现还是 rCore指导书 最好,理论与实践相结合,讲解详细清晰,操作切实可行,跟着刷了两章

第一阶段用不上,剩下的等到第二阶段再补啦