Record CS knowlegement with XMind, version 2.0. 使用 XMind 记录 Linux 操作系统,网络,C++,Golang 以及数据库的一些设计

Overview

Psyduck

另一个用 XMind 记录 CS 基础问题的地方,同样提供了 .xmind 源文件以及导出的 .pdf 文件,XMind 版本为「XMind 2020」。

在 2020 年时,曾花了约 2 个月的时间整理了第一份 XMind 知识库: ZeroMind。 之所以额外创建一个 Repo 干同样的事情,是因为一方面自己的审美发生了变化,另一方面则是对那些最重要但基础的问题有了更深刻地理解。

温故而知新,孔子诚不欺我。在整理面试题目的过程中,对诸如 CFS-vruntime、POSIX 条件变量、TCP 和 epoll 等内容有了自己的理解:不再是死记硬背了。

之所以使用 XMind 来记录这些内容,是因为我非常喜欢《火星救援》里面的一句台词:

有时候,所有的情况都会对你不利。所有的坏事一起发生,你就可能会想,就是这样了,这就是我的终点了。面对这种情况,你要么接受,要么想办法解决,这就是一切的真谛。解决问题,你想各种办法,解决一个问题,然后接着解决下一个问题,循环往复,等你解决了足够多的问题,你就可以回家了。

即学会分解。下面是一些图片,可以帮助你更好地了解这个项目做了什么:


🔆 目录


🍱 Database


🔥 Linux-Network-Programing


🐾 Golang


🔭 C++

common

面向对象程序设计

TODO

拷贝控制

模板与泛型编程

类型相关

函数编程

智能指针

并发编程

编译与链接


Issues
  • Linux Virtual Memory  细节补充

    Linux Virtual Memory 细节补充

    在虚拟内存优化一节中,已经提到了多级页表的使用,但仍有一些细节可以补充。 并且强烈建议改变虚拟地址中 页号数组下标 的说法和思路!

    多级页表优点:查找高效

    一如大家都提到的节省内存的优点,多级页表的设计同样大大提高了 CPU 对页面的查找效率

    32位 CPU的虚拟地址为例,一条4字节的虚拟地址其页表基址占20位: 如果采用一级页表的方式查找,其时间复杂程度为 O(2^20); 如果采用二级页表的方式查找,其时间复杂程度为 O(2*2^10)

    多级页表如何分级

    多级页表的分级方式由CPU 位数以及页面大小共同决定

    在过去32位 CPU 中,页面通常设置为4KB

    还是以32位 CPU的虚拟地址为例,一条4字节的虚拟地址由20位页表基址和12位偏移地址构成, 那么是否有疑问:我们为什么只凭地址的高20位就能找到对应的页面呢?

    在二级页表下,每级页表基址占10位,这里的基址是作为索引去对应的目录表项和页表项遍历查找的。

    页式映射

    而具体每个目录表项和页表项的结构实际上如下图所示:

    E结构

    所以并不存在页号这一不规范且容易误解的说法(在每一项里面并不存在“页号”这一事物) 而”索引“更不应该引喻为“数组下标”,会让人有一种“随机存取”的错觉: 无论分不分级,这些表项都是需要存储在内存中(多级页表节省内存的根本所在), 而在内存中的查找是字节或者字为单位逐个遍历的。

    我们会发现,每一个目录表项和页表项的大小为4B,共有1024个目录表项及每个目录表项对应的1024个页表项,恰好可以存放在一个个4KB的页面中而不会出现跨页面存放现象。 也正是因此,页面表和页面的起始地址总是在 4K 字节的边界上,这些地址的低12位永远为0.

    反过来我们可以思考64位 CPU 的虚拟内存地址,采用4KB页面: 先预留低12位的偏移地址,再考虑页表设计; 将每一级目录(按级数划分)的大小限定在一个页面也就是4KB内,而一条地址占有8字节, 作除法可以得到每一级目录中有512个条目,每个条目还可以继续往下一级目录分512条, 所以最少的情况下我们采用一级目录需要9位的页面基址,当然我们可以用更多级目录,那么就要留 n*9 位作为目录基址。 当然我们不必用目录基址将64位全部填满,剩余位可用于其他用途。

    以上就是我学习虚拟内存的一些想法和理解,如果有错误欢迎批评指正。

    bug need to be improved 
    opened by Frank-Ye7104 3
Owner
SmartKeyerror
知其然,知其所以然
SmartKeyerror
Testing the use of a golang wrapper around UserMode Linux for making stdin

This code is for testing the use of a golang wrapper around UserMode Linux for making stdin, stdout and stderr available to attach, detach and reattach to from the host using Unix sockets.

null 0 Dec 24, 2021
📦 Go version of the Python pewn library.

Gownload Go version of pewn. Allows you to Download file(s) easily.

Penguen 5 Dec 11, 2021
TheOtherRolesInstaller - A simple tool to install the latest version of TheOtherRoles Mod

TheOtherRoles Installer This is a simple tool to install TheOtherRoles Mod for A

Oliver Stahl 1 Feb 14, 2022
A patcher for the MS-DOS version of Fallout 1 including Crafty's sFall1 patches and maybe more

A patcher for the MS-DOS version of Fallout 1 including Crafty's sFall1 patches and maybe more

null 6 Jun 7, 2022
Lima launches Linux virtual machines on macOS, with automatic file sharing, port forwarding, and containerd.

Lima: Linux-on-Mac ("macOS subsystem for Linux", "containerd for Mac")

Akihiro Suda 8.4k Jun 26, 2022
IBus Engine for GoVarnam. An easy way to type Indian languages on GNU/Linux systems.

IBus Engine For GoVarnam An easy way to type Indian languages on GNU/Linux systems. goibus - golang implementation of libibus Thanks to sarim and haun

Varnamproject 10 Feb 10, 2022
Nintendo Switch Joycon keyboard mapper for Linux

joygo Nintendo Switch Joycon keyboard mapper for Linux First, build with -> chmod +x build && ./build Then pair your Joycons to your computer via Blue

SM177Y 1 Nov 13, 2021
Script that sets your nzxt kraken temps based on cpu temps on linux

liquidctl-cpu-temp Script that monitors cpu temps and sets cpu cooler temps according to entered fan/pump curves. Only tested on NZXT kraken z63 requi

null 1 Nov 16, 2021
An experimental vulkan 3d engine for linux (raspberry 4)

protomatter an experimental vulkan 3d engine for linux (raspberry 4).

Torben Schinke 0 Nov 14, 2021
Graphical small-internet client for windows, linux, MacOS X and BSDs. Supports gemini, http, https, gopher, finger.

Graphical small-internet client for windows, linux, MacOS X and BSDs. Supports gemini, http, https, gopher, finger.

Felix Queißner 537 Jun 17, 2022
Apptainer: Application containers for Linux

Apptainer NOTE: The apptainer repo is currently working towards a v1.0.0 release and not ready for production in its current state. Until then, use th

The Apptainer Container Project 272 Jun 22, 2022
Linux UDisks2 (dbus) easy access from Go

udisks udisks gives you high level access to Linux system drives and block devices wrapping the udisk2 interfaces. An example command line udisks clie

Sergio Rubio 3 Apr 25, 2022
Monitor usb hotplug events (Linux)

USBMon Thin udev wrapper to simplify usb device add/remove monitoring. // monitor USB hotplug events package main import ( "context" "fmt" "githu

Sergio Rubio 17 Apr 26, 2022
Golang CS:GO external base. Development currently halted due to compiler/runtime Golang bugs.

gogo Golang CS:GO External cheat/base. Also, my first Golang project. Wait! Development momentarily halted due to compiler/runtime bugs. Disclaimer Th

cristei 2 Jun 25, 2022
Belajar Golang Install Golang

Golang belajar Golang Install Golang = download di https://golang.org/dl/ = pilih yg Zip = extract file zipnya = buka foldernya - copy folder go = pas

Arif Fadilah 1 Nov 15, 2021
Golang-module-references - A reference for how to setup a Golang project with modules - Task Management + Math Examples

Golang Module Project The purpose of this project is to act as a reference for setting up future Golang projects using modules. This project has a mat

Bob Bass 0 Jan 2, 2022
Golang-echo-sample - Make an out-of-the-box backend based on golang-echo

Golang-echo-sample - Make an out-of-the-box backend based on golang-echo

Haitwang 0 Dec 31, 2021
Minimalistic, pluggable Golang evloop/timer handler with dependency-injection

Anagent Minimalistic, pluggable Golang evloop/timer handler with dependency-injection - based on codegangsta/inject - go-macaron/inject and chuckpresl

Ettore Di Giacinto 14 Jan 26, 2022
GoLang Library for Browser Capabilities Project

Browser Capabilities GoLang Project PHP has get_browser() function which tells what the user's browser is capable of. You can check original documenta

Maksim N. 40 Jun 13, 2022