自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

原创 MIT 6.s081学习笔记

MIT 6.s081学习笔记introduction计算机组织结构:最底部是一些硬件资源,包括了CPU,内存,磁盘,网卡最上层会运行各种应用程序,比如vim,shell等,这些就是正在运行的所有程序,它们都运行在同一个空间中,这个空间通常会被称为用户空间(Userspace)。区别于用户空间程序,有一个特殊的程序总是会在运行,它称为Kernel。Kernel是计算机资源的守护者。当你打开计算机时,Kernel总是第一个被启动。Kernel程序只有一个,它维护数据来管理每一个用户空间进程。操

2022-03-10 19:42:21 2522

原创 CMU 15-445实验记录(二):Project 1 Buffer Pool Manager

CMU 15-445实验记录(二):Project 1在project 1中,已经为我们提供了磁盘管理器以及page layouts ,我们要构建自己的buffer pool管理器以及替换 策略,根据需要调⽤磁盘管理器将这些数据写出到磁盘。LRU REPLACEMENT POLICY这一部分负责跟踪缓冲池中的page使用情况,我们需要在 src/include/buffer/lru_replacer.h 中实现一个名为 LRUReplacer 的新子类,并在 src/buffer/lru_replac

2021-11-12 11:41:20 2049

原创 CMU 15-445实验记录(三):Project 2 B+Tree的插入与删除

CMU 15-445实验记录(三):Project 2 B+Tree的插入与删除B+Tree的删除的五种情况:叶结点被删除后没有underflow,直接删除对应的key和recordPtr即可叶结点被删除后有underflow,从sibling节点借一个key和recordPtr,从相邻节点借了一个key过来后,两个节点的key的范围都发生了变化,为了正确地反映指针指向的key的范围,必须更新中间节点,也就是父节点的key叶结点被删除后有underflow,但是sibling的ke

2021-11-12 11:35:51 3078 1

原创 CSAPP实验记录(四):Malloc lab

CSAPP实验记录(四):Malloc lab此实验要求实现自己的存储分配器,特别是malloc、free 和 realloc 函数的实现。我们将修改和提交的唯一文件是mm.c。mdriver.c程序是一个驱动程序,它可以评估我们的实现方案的性能。使用命令make编译生成驱动程序并使用该命令运行它:./mdriver -V(-V标志显示有用的摘要信息。)我们的动态内存分配器将包含四个函数,声明在mm.h中,是现在mm.c中int mm_init(void);void *mm_malloc(siz

2021-10-05 15:55:12 3858

原创 CS144—手写TCP 实验记录(五):lab4

CS144实验记录(五):lab4在lab 4中,我们将创建总体模块,称为TCP connection,该模块将TCPSender和TCPReceiver结合起来。我们的TCP segment可以封装到用户(TCP-In-UDP)或IP(TCP/IP)数据报的有效载荷中。本lab提供了代码支持从用户数据包或IP数据报中读取或写入TCPsegment,还提供了CS144TCPSocket类,将我们的TCPConnection包装,使它表现得像一个普通的流套接字,就像在lab 0中用来实现webget的

2021-09-28 19:41:12 1716 3

原创 CMU15-213学习笔记(七)Dynamic Memory Allocation

CMU15-213学习笔记(七)Dynamic Memory Allocation动态内存分配程序员通过动态内存分配(例如 malloc)来让程序在运行时得到虚拟内存。动态内存分配器会管理一个虚拟内存区域,称为堆(heap)。动态内存分配器将堆视为一组不同大小的块(block)的集合,每个块就是一个连续的虚拟内存片(chunk),每个块具有两种状态:**已分配:**已分配的块能为应用程序所用,且块会保持已分配状态直到被释放**空闲的:**空闲的块无法使用,直到它被分配在最开始进行内存映射时

2021-09-17 22:48:20 1244

原创 MIT6.s081实验记录(一):gdb调试qemu方法 & lab1

MIT6.s081实验记录(一):gdb调试qemu方法 & lab1准备工作xv6调试在xv6文件夹下make qemu-gdb启动qemu上的gdbserver。xv6的ISA是riscv,所以我们需要使用riscv的调试器riscv64-unknown-elf-gdb来调试xv6。使用tmux分屏,在另一窗口中,在相同的xv6文件夹下riscv64-unknown-elf-gdb 再加上要调试的文件名(比如kernel/kernel或者user/_sleep),也可以进入gd

2021-09-15 18:11:14 4371

原创 CMU 15-445实验记录(一):project 0

CMU 15-445实验记录(一):project 0要求实现一个矩阵和矩阵操作类我们的代码必须遵守Google 的C++规范,使用Clang来自动检查代码样式,如果没有通过任何一项检查,项目成绩将为0 。执行以下命令来检查代码规范和语法,format 目标将自动更正代码。 check-lint 和 check-clang-tidy 目标将打印错误并指导如何修复它以符合我们的风格指南。$ make format$ make check-lint$ make check-clang-tidy为

2021-09-09 14:11:41 3639

原创 CS144—手写TCP 实验记录(四):lab3

CS144实验记录(四):lab3在lab3中,我们需要实现TCPsender。TCPsender负责接收对方发送的TCPsegment中的ack号和接收窗口大小(first unassembled索引和first unacceptable索引的距离),应用层通过socket将字节流写入TCPsender中的ByteStream,TCPsender根据接收到的ackno和window size,从ByteStream中读取出来,将ByteStream中的字节流转化为连续的TCPsegment,发送给对方

2021-09-01 18:23:33 1118

原创 CS144实验记录(三):lab2

CS144实验记录(三):lab2Overview在lab2中,我们将实现TCPReceiver。TCPReceiver通过segment_received()方法从网络层接收TCPsegments(即IP数据报的载荷部分)。每接收到一个segment,就调用一次STreamReassembler的push_substring()方法。push_substring将该segment中的有效载荷切割、去重后加入StreamReassembler的等待重组的缓冲区中,segment中的有效载荷在Stre

2021-08-21 18:57:10 1064

原创 CS144实验记录(二)lab1

CS144实验记录(二)lab1实验编译说明在sponge目录下有CMakeLists.txt文件,用来生成编译所需的Makefile文件。cmake后会生成很多编译的中间文件以及makefile文件,所以一般不会在CMakeLists.txt所在的目录中使用cmake,而是使用mkdir build新建一个新的目录build,专门用来编译。使用cd build进入build目录,在build目录下使用cmake ..命令,..表明CMakeList.txt在build的上一层目录,将CMakeL

2021-08-17 19:13:01 1020

原创 CS144实验记录(一)lab0

CS144实验记录(一)lab0环境搭建按照官网要求搭建环境2.1 Fetch a Web page使用Telnet获取http://cs144.keithw.org/hello页面的内容在虚拟机中,输入 telnet cs144.keithw.org http,This tells the telnet program to open a reliable byte stream between your computer and another computer (named cs144.k

2021-08-12 14:37:47 730

原创 CMU15-213学习笔记(五)virtual memory虚拟内存

CMU15-213学习笔记(五)virtual memory虚拟内存分页存储管理早期:程序员自己管理主存,通过分解程序并覆盖主存的方式执行程序。1961年,英国曼切斯特研究人员提出一种自动执行overlay的方式。动机:把程序员从大量繁琐的存储管理工作中解放出来,使得程序员编程时不用管主存容量的大小基本思想:把地址空间和主存容量的概念区分开来。程序员在一个虚拟地址空间里编写程序,而程序则在真正的物理内存中运行。由一个专门的机制实现地址空间和实际主存之间的映射,就是早期的分页管理机制。当时的一种典型

2021-08-06 16:18:07 1281

原创 CMU15-213学习笔记(六)Exceptional Control Flow

CMU15-213学习笔记(六)Exceptional Control Flow程序的正常执行顺序有两种:按顺序取下一条指令执行通过CALL/RET/Jcc/JMP等指令跳转到转移目标地址处执行CPU所执行的指令的地址序列称为CPU的控制流,通过上述两种方式得到的控制流为正常控制流。异常控制流CPU会因为遇到内部异常或外部中断等原因而打断程序的正常控制流,转去执行操作系统提供的针对这些特殊事件的处理程序。由于某些特殊情况引起用户程序的正常执行被打断所形成的意外控制流称为异常控制流(Exce

2021-08-06 00:11:42 685

原创 CMU15-213学习笔记(四)Linking 链接

CMU15-213学习笔记(四)Linking 链接编译过程编译系统(compilation system):预处理器(pre-processor)、编译器(compiler)、汇编器(assembler)、链接器(linker)预处理阶段:处理字符#开头的命令,即:将头文件的内容插入程序文本中宏定义替换条件编译(#if #ifdef),不被编译的部分变为空行删除注释预处理的命令:$gcc –E hello.c –o hello.i$cpp hello.c > hello

2021-08-01 13:42:22 552

原创 CSAPP实验记录(三):Attack lab

CSAPP实验记录(三):Attack lab这个lab涉及到对分别有不同安全漏洞的两个程序进行总共5次攻击。从这个lab中我们将了解到当程序不能很好地保护自己免受缓冲区溢出时,攻击者可以利用安全漏洞的不同方式。我们将学习到如何写出更安全的程序、如何使用GDB和OBJDUMP等工具。objdump是在类Unix操作系统上显示关于目标文件的各种信息的命令行程序。我们可以使用objdump命令对目标文件(obj)或可执行文件进行反汇编,它以一种可阅读的格式让你更多的了解二进制文件可能带有的附加信息。从官网

2021-07-25 17:24:01 2278

原创 《计算机网络自顶向下方法》Wireshark lab(一)

Getting StartedWireshark:A packet sniffer for observing the messages exchanged between executing protocol entitiesA packet sniffer captures (“sniffs”) messages being sent/received from/by your computer; it will also typically store and/or display the con

2021-07-20 22:15:21 2484

原创 CSAPP实验记录(二)Bomb Lab

CSAPP实验记录(二)Bomb Lab二进制炸弹是由一系列阶段组成的程序。每个阶段都要求你在 stdin 上键入一个特定的字符串。如果你输入了正确的字符串,那么这个阶段就被拆除,炸弹进入下一个阶段。否则炸弹会爆炸,并打印出 “BOOM!!!”,然后终止。当每一个阶段都被拆除时,炸弹才算拆除。我们需要将bomb可执行文件反汇编,对汇编语言代码进行逆向分析,而gdb是我们调试汇编语言的有效工具。我们选择比标准gdb更好用的cgdb。cgdb是对GNU Debugger(GDB)的轻量级curses(基于终

2021-07-18 12:21:53 1136

原创 CMU15-213 学习笔记(二)Machine Level Programming

CMU15-213 Machine Level Programming学习笔记本篇参考了 小土刀的博客。1、history of Intel processors and architecture精简指令集计算机(reduced instruction set computer,RISC)或简译为精简指令集,是计算机中央处理器的一种设计模式。这种设计思路可以想像成是一家模块化的组装工厂,对指令数目和寻址方式都做了精简,使其实现更容易,指令并行执行程度更好,编译器的效率更高。基于RISC的架构:

2021-07-15 23:47:22 794

原创 Linux常见问题记录

Linux常见问题记录本文是我在使用Linux中遇到的问题,记录在此,防止以后忘记了需要反复搜索。之前用的是Ubuntu18.04,坑很多,建议换成Ubuntu20.04Ubuntu安装安装VMtools,https://www.cnblogs.com/EasonJim/p/5363986.html,https://zhuanlan.zhihu.com/p/67622390VMtools突然失效sudo vmware-config-tools.pl无法获得锁Ubun

2021-07-13 01:48:55 1842

原创 CSAPP实验记录(一):环境配置&datalab

CSAPP实验记录(一):环境配置&datalab1、环境配置下载Ubuntu虚拟机。我之前用的是Ubuntu18.04,非常坑,强烈建议换成Ubuntu20.04windows和Ubuntu共享文件将实验网站上下载的实验Handout放入windows下的共享文件夹在Ubuntu中打开共享文件夹继续打开/mnt/hgfs/<你的共享文件夹名字>.右键选择该文件,复制到另一个自己创建的目录下进入该目录,打开终端,输入命令:tar x

2021-07-13 01:44:17 5282 1

原创 GCC介绍

编译过程编译系统(compilation system):预处理器(pre-processor)、编译器(compiler)、汇编器(assembler)、链接器(linker)预处理阶段:处理字符#开头的命令,即:1)将头文件的内容插入程序文本中。2)宏定义替换。3)条件编译(#if #ifdef),不被编译的部分变为空行。4)删除注释编译阶段:通过编译器将源程序翻译成汇编程序(assembly-language program)汇编阶段:将汇编程序翻译成机器语言指令,并将其打包成可重定位目标程

2021-07-10 22:15:38 2265 1

原创 Android课程设计:基于离线地图服务器的Android地图应用

Android开发课程设计:基于离线地图服务器的Android地图应用此项目的灵感来源于伯克利cs61b的Project3:cs61b的官网地址:Project 3: Bear Maps我的实验记录:cs61b实验记录(八)project 3此应用实现了一个Android地图应用,以及一个提供必要服务的离线地图服务器。Android端:使用Mapbox提供的API完成地图的展示和用户界面的控制。服务器端:使用Spark框架搭建服务器,自己实现算法,提供Android端的兴趣点(PO

2021-05-21 16:17:07 1438 2

原创 ArcGIS Runtime API for Android学习笔记

ArcGIS Runtime API for Android学习笔记Display a mapmapview是一个用来显示地图的UI组件,同时还负责用户与地图的交互。显示地图的第一步就是将map view添加到xml文件中。<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com

2021-05-19 13:46:28 626 2

原创 OSMdroid开发

OSMdroid开发获取OSM数据可以通过该网站下载世界各地的OpenStreetMap地图矢量数据,可以下载pbf,shapefile,geojson格式的数据。缺点:只能选择国家范围的数据,无法精确到一个省或市。比如:从这个页面下载中国的地图,选择bz2格式,使用7-zip解压,可以得到一个osm文件,也就是xml文件。openstreetmap.org 网站本身提供地图数据的下载服务(范围不能过大),点击地图上端的“输出”,然后选择范围和输出格式即可,下载格式为osm格式。如果范围太

2021-05-19 13:43:04 667 1

原创 伯克利cs61b总结贴

伯克利cs61b总结贴​ 花了一个多月,总算把cs61b 18sp的刷的差不多了,课后的lab、hw和project也差不多做完了,project3后面还剩几个hw,后面会一一补上。​ 总的来说,cs61b真的是名不虚传,果然是享誉全球的神课。开始上这门课的时候,我就只有一个感觉:后悔。后悔自己为什么没有早点接触到这门课,大二再开始上确实太晚了。很多美帝知名cs课程只是课后的lab非常好,而老师讲的其实很一般(比如我现在正在学的cs144…简直无力吐槽),而cs61b不仅lab设计的很好,能够让你真

2021-04-30 12:14:30 6617 8

原创 cs61b学习记录(四)Trie、KDTree、Prim、Dijkstra、Kruskul

cs61b学习记录(四)Lecture21、Prefix Operations and TriesBalanced Search Tree:contains(x): Θ(logN)add(x): Θ(logN)Resizing Separate Chaining Hash Table:contains(x): Θ(1) (assuming even spread)add(x): Θ(1) (assuming even spread and amortized)We can s

2021-04-25 20:33:35 577

原创 cs61b实验记录(八)project 3:BearMaps 基于OSM的伯克利地图web应用

cs61b实验记录(八)project 3:BearMapshttps://github.com/BoL0150/Berkeley-cs61bApplication StructureYour job for this project is to implement the back end of a web server. To use your program, a user will open an html file in their web browser that displays a m

2021-04-23 02:13:21 2105 3

原创 cs61b实验记录(七)Lab11 A* search algorithm for shortest path

cs61b实验记录(七)Lab11Breadth First SearchBFS and DFS are very similar. BFS uses a queue (First In First Out, a.k.a. FIFO) to store the fringe, whereas DFS uses a stack (First In Last Out, a.k.a. FILO). Naturally, programmers often use recursion for DFS, sinc

2021-04-18 01:17:06 508

原创 cs61b实验记录(六)HW4 A* search algorithm for 8 puzzle

cs61b实验记录(六)HW4 A* search algorithmSpecifically, given an object of type WorldState, our solver will take that WorldState and find a sequence of valid transitions between world states such that the puzzle is solved.all puzzles will be implementations of

2021-04-17 18:44:18 686 2

原创 cs61b实验记录(五)HW3、Lab10

cs61b实验记录(五)HW3、Lab10HW3equals@Override public boolean equals(Object o) { if (o==this)return true; if (o==null)return false; if (o instanceof SimpleOomage){ SimpleOomage anothero=(SimpleOomage)o; retur

2021-04-16 18:40:59 889

原创 Android开发:可以区分优先级和括号的计算器

Android开发:可以区分优先级和括号的计算器此计算器是基于将中缀表达式转化为后缀表达式,从而对表达式求值的算法。成果图如下:xml布局文件<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/

2021-04-13 03:59:09 466 1

原创 cs61b学习记录(三)BST,LLRB,Heap

cs61b学习记录(三)Lecture17、B-Trees (2-3, 2-3-4 Trees)对于二叉搜索树,如果我们随机地插入,可以保证Θ(log N)的时间复杂度,但是如果我们不是随机地插入,二叉搜索树就有可能失去平衡BST失去平衡的原因是:当我们插入叶的时候,树的高度会增高,所以这个时候我们不能产生新的叶结点,避免高度增加,解决办法只能是扩充被插入的结点。被扩展的树永远是平衡的,因为它的高度不会改变。然而,当一个节点被扩展地太多时,该节点就退化成了链表所以我们的解决方案是:为每一个

2021-04-09 13:52:21 624

原创 cs61b实验记录(四)HW2,lab9

cs61b实验记录(四)HW2,lab9HW 2Percolation:先不解决backwash问题import edu.princeton.cs.algs4.WeightedQuickUnionUF;public class Percolation { private boolean[][]grid; private int N; private WeightedQuickUnionUF UF; private int numberOfOpenSites;

2021-04-05 01:39:46 3760 1

原创 cs61b学习记录(二)

cs61b学习记录(二)Lecture13 Generics, AutoboxingGeneric MethodsLecture14 Exceptions, Iterators, IterablesExceptionExceptions cause normal flow of control to stop. We can in fact choose to throw our own exceptions. why is this better?We have control of

2021-03-28 12:39:21 876

原创 cs61b实验记录(三)project 2 prim迷宫随机生成算法

cs61b实验记录(三)project 2 prim迷宫随机生成算法HW1nothing special具体详见我的GitHub:https://github.com/BoL0150/Berkeley-cs61b/tree/main/hw1Lab5RandomRandom对象是一个“伪随机数”生成器,它可以产生一串无穷的看起来是随机数的数字序列,调用nextInt方法获取序列中的每一个数字。Random r = new Random(1000);System.out.println(r.n

2021-03-28 09:30:25 2411 11

原创 C++ 非常量引用的初始值必须是左值

C++ 非常量引用的初始值必须是左值左值和右值:在C++中,左值可以出现在赋值语句的左边和右边;右值只能出现在赋值语句的右边,不能出现在赋值语句的左边。变量是左值,常量是右值。有如下的代码:错误的原因:按照规则解释:L是常量,既可以放在等号的右边也可以放在等号的左边,属于右值。&L是L的地址,地址只能放在等号的左边,是不可以被改变的,属于左值。而函数中对应的形参是非常量引用,所以无法赋值。当我们把形参变成常量引用后就是正确的根本原因是什么?只允许将常量传递给常量引用,如

2021-03-19 23:09:02 1606

原创 cs61b实验记录(二)project1A,B

cs61b实验记录(二)project1ALinkedListDequecircular sentinel错误写法:public LinkedListDeque(){ sentinel=new Node(sentinel,null,sentinel.next); size=0; }在实例化sentinel时,sentinel本身还只是null,用sentinel和sent.next去实例化sentinel当然是行不通的。我们应该:public Link

2021-03-14 01:01:28 5633 14

原创 cs61b实验记录(一)Lab2、Lab3

cs61b实验记录(一)Lab2、Lab3Lab2Debugstep into“step into” shows the literal next step of the programstep over“step over” button allows us to complete a function call without showing the function executingstep outescape the functionresume重新开始,重新回到

2021-03-13 18:03:21 3558

原创 CS61B学习记录(一)

CS61B学习笔记Lab2Debugstep into“step into” shows the literal next step of the programstep over“step over” button allows us to complete a function call without showing the function executingstep outescape the functionresume重新开始,重新回到这个位置Cond

2021-03-10 12:27:12 1647

姓名+新员工花名册.xlsx

姓名+新员工花名册.xlsx

2025-03-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除