docker
docker 入门
docker架构
docker包括三个基本概念
镜像(image),相当于是最小的root文件系统。
容器(container), 相当于是镜像的实例化。
仓库(repository), 镜像的仓库。
docker hello world
1docker run ubuntu:15.10 /bin/echo "Hello world"
run命令可以添加参数
-t:在新容器中指定一个伪终端
-i:和容器内的标准输入进行对话
使用
1. 获取镜像
1docker pull [image name]
2. 启动镜像
1docker run -it ubuntu /bin/bash
镜像管理
1. 列出镜像
123456❯ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ...
linux ls实现
linux ls 命令实现
1. 前置知识
12345678910111213struct dirent {#ifndef __USE_FILE_OFFSET64 __ino_t d_ino; __off_t d_off;#else __ino64_t d_ino; __off64_t d_off;#endif unsigned short int d_reclen; /* 文件名的长度 */ unsigned char d_type; /* 普通文件为4,软链接为8 */ char d_name[256]; /* We must not include limits.h! */ };
d_name是文件的名称
2. 实现思路
使用opendir函数处理读入的文件路径,随后遍历结构体。
123456789101112131415161718192021void unix_error(const char *msg){ int errnum = errno; fprintf(stderr, & ...
nodejs入门
nodejs 入门
1. 一个简单的粒子
我看很多教程都用这个
1234567var http = require("http")http.createServer(function(request, response) { response.writeHead(200, {"Content-Type":"text/plain"}); response.write("Hello world"); response.end();}).listen(8888)
require函数中的参数如果是模块名,那么返回这个模块,如果是文件路径,那么将返回该文件。
createServer在这里创建一个服务,监听888端口
也可以分为两个文件
123456789101112131415// server.jsvar http = require("http")function start() { function onRequ ...
linux 文件系统解析
linux 系统目录结构
1. 整体结构
在/下有这些文件夹
12bin dev home lib64 opt root sbin srv tmp varboot etc lib mnt proc run snap sys usr
2. 目录作用
/bin(binaries) 中是二进制文件,存放着常用的命令,在\usr\bin中也存放着二进制包,但是一般为后期安装的
比如g++,
/boot里面存放的是linux里面的核心文件
12efi initramfs-linux-fallback.img intel-ucode.imggrub initramfs-linux.img vmlinuz-linux
比如存放的有efi,系统分区,grub中为启动时你看到的那个界面。
/dev中存放的是相关的设备数据,包括块数据文件,外部设置
/etc中存放的是相关的配置文件
/home为用户自己的文件,比如/download…
/lib 包含了所需的动态链接基本库
lost+found系统异常关闭的时候存放一些文件
/ ...
cs144 lab2
CS144 lab2
在lab2中将实现tcp的接收器
project1
实现warp和unwrap,进行在序号和绝对序号之间的转换
一个数据的序号可能很大,但是在tcp中能够使用的序号是有限的,只有uint32, 所以当一个数据的大小超过uint32的时候,将会进入到0
进行循环,所以序号是循环的。
warp的的功能在于将起始的序号加上相对序号变为tcp内的序号
123WrappingInt32 wrap(uint64_t n, WrappingInt32 isn) { return WrappingInt32{static_cast<uint32_t>(n) + isn.raw_value()};}
unwrap的功能在于将tcp内的序号转换到初始的序号,实验中给了相对序号n,初始序号ISN,和最近的一个点序号
那么可以先将最近的一个点wrap成相对序号,得到和n之间的差距,然后加上原来的和n之间的距离即可。
12345uint64_t unwrap(WrappingInt32 n, WrappingInt32 is ...
javascript
JavaScript 入门
1. 基本用法
主要的用法有两种
在script中编写函数,后面进行调用,放在head中
在script中直接进行js代码,放在body中
2. 输出
123windows.alert() // 在页面上进行警告document.write() // 写入到html页面中innerHTML="" // 将其写入到特定的HTML元素中去
123<p id="date">dede</p><script> document.getElementById("date").innerHTML="w2w"
3. 变量
在js中使用var进行变量的声明,比如var name = "111",再次对变量进行声明并不会改变变量的值。
对数组的声明可以使用如下的三种方式进行声明
123var array = new Array()var array1 = ["11", "22"]var ...
求解最大矩形
求解最大矩形
问题
largest rectangle in histogram
求解
使用一个vector存储一个递增的高度数组,保证每次可以直接从最后面进行取数,直到最前面。
当后面存在一个更高的高度的时候,此时必然存在一个更低的高度作为边界,始终保持一个小的
边界就可以了。
code
123456789101112131415int solute(vector<int>&heights) { int ret = 0; vector<int>v; heights.push_back(0); for (int i = 0; i < heights.size(); i++) { while (v.size() && heights[v.back()] >= heights[i]) { int h = heights[v.back()]; v.pop_back(); int l = v.e ...
shell lab
CSAPP shell lab
1. 给出的函数功能
eval(char cmdline) :处理输入的一行命令
parse: 对输入的一行进行解析
builtin_cmd: 判断是否为内置的命令,比如quit
do_bgfg:在后台执行程序
waitfg:当进程不是前台程序的时候一直被阻塞
sigchld_handler:当子进程终止的时候向父进程发送相应信号
sigint_handler:终止的时候发送信号给父进程
sigtstp_handler:处理停止信号(ctrl + z)
clearjob:将存储job的结构体清空为0
一个job的结构体如下
123456struct job_t { /* The job struct */ pid_t pid; /* job PID */ int jid; /* job ID [1, 2, ...] */ int state; /* UNDEF, BG, FG, or ST */ char cm ...
all of the subsets
Get all of the subsets of the set
1. The problem
leetcode subset
我们需要得到所有的子集合
2. The solution
在中学的时候我们就学过,子集的数目为2n2^n2n 对应的是一个长为n的二进制
子串的所有可能性。
12345678910111213141516171819class Solution {public: vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>>ans = {}; int n = nums.size(); int num = pow(2, n), i = 0; while (i < num) { /* code */ vector<int>temp; ...
Permutation
排列组合
1. 全排列
原理:假设要求的是5个数字的全排列,那么就等同于将第一位数字设置好后加上剩余4个数字的全排列。
123456789101112131415161718192021class Solution {public: int vis[30]; void f(int dep, vector<int>&nums,vector<vector<int>>&ans) { if (dep == nums.size()) { ans.emplace_back(nums); return; } for (int i = dep;i < nums.size();i++) { swap(nums[dep],nums[i]); f(dep+1,nums,ans); swap(nums[dep],nums[i]); ...