文件描述符

文件描述符是什么 fd 是 File descriptor 的缩写,中文名叫做:文件描述符。文件描述符是一个非负整数,本质上是一个索引值(这句话非常重要)。 什么时候拿到的 fd ? 当打开一个文件时,内核向进程返回一个文件描述符( open 系统调用得到 ),后续 read、write 这个文件时,则只需要用这个文件描述符来标识该文件,将其作为参数传入 read、write 。 fd 的值范围是什么? 在 POSIX 语义中,0,1,2 这三

一道SQL练习题

表结构 有三张表:students学生表,courses课程表,scores成绩表,三个表的结构如下: students: courses: scores: 1. 输出成绩表,按照 姓名,课程名,成绩 的格式输出 第一个题目很简单,要求输出学生姓名,课程名,以及每位同学的成绩,因此只需要把成绩表和学生表,课程表链接,分别获取学生名,课程名即可。 select s.name,c.name,sc.score from scores sc left join students s on sc.sid = s.id left join course c on sc.cid = c.id; 2. 输出每科的第一名,按照 课程名,学

kubernetes鉴权

在k8s中,客户端对API Server访问的大体流程如下: 用户简介 在k8s中,用户具有如下基础属性: 用户名:标识用户的字符串 UID:标识用户的数字 组:即用户组,包含若干个用户 额外字段:其他信息 看起来和Linux中的系统用户一模一样。。。不过基本上只需要关心用户名。 用户分类 在Kubernetes中,用户分为两类: 普通用户(normal user):为Pod外的程

gitignore如何忽略之前已提交的文件

做开发时,有些编译生成的代码我们希望不提交到 git 上,这时候就要使用 .gitignore 对文件/文件夹进行忽略,但有时候会碰到个棘手的问题,就是之前已经正常提交到 git 上的文件,即使在 .gitignore 进行了忽略,但代码仓库里依旧还是存在。 其实通过几行简单的命令就可以轻松解决这个问题 首先删除本地缓存 $ git rm -r --cached . 新建/修改 .gitignore 文件 将需要忽略的文件/文件夹路径写到 .gitignore 里 commit 本次变更 $ git commit -m "本次提交说

Ansible入门

Ansible 什么是Ansible? Ansilbe是一个部署一群远程主机的工具。远程的主机可以是远程虚拟机或物理机, 也可以是本地主机。 Ansible能做什么? Ansilbe通过SSH协议实现远程节点和管理节点之间的通信。理论上说,只要管理员通过ssh登录到一台远程主机上能做的操作,Ansible都可以做到。 包括: 拷贝文件 安装软件包 启动服务 … Ansible的架构 Ansil

Context使用和原理

背景 上下文(Context)是 Go 语言中非常有特色的一个特性, 在 Go 1.7 版本中正式引入新标准库 context。 其主要的作用是在 goroutine 中进行上下文的传递,而在传递信息中又包含了 goroutine 的运行控制、上下文信息传递等功能。 使用 在 Go context 用法中,我们常常将其与 select 关键字结合使用,用于监听其是否结束、取消等。 代码如下: func main() { parentCtx := context.Background() ctx, cancel := context.WithTimeout(parentCtx, 1*time.Millisecond) defer cancel() select { case <-time.After(1 * time.Second): fmt.Println("overslept") case <-ctx.Done(): fmt.Println(ctx.Err()) } } 输出结果: context deadline exceeded 如果是

TCP图解

经过网络是怎么连接 这篇文章中的一番折腾,只要你知道另一位伙伴 B 的 IP 地址,且你们之间的网络是通的,无论多远,你都可以将一个数据包发送给你的伙伴 B 这就是物理层、数据链路层、网络层这三层所做的事情。 站在第四层的你,就可以不要脸地利用下三层所做的铺垫,随心所欲地发送数据,而不必担心找不到对方了。 虽然你此时还什么都没干,但你还是给自己这一层起了个响亮的名字,叫做传输层

网络是怎么连接的

你是一台电脑,你的名字叫 A 很久很久之前,你不与任何其他电脑相连接,孤苦伶仃。 直到有一天,你希望与另一台电脑 B 建立通信,于是你们各开了一个网口,用一根网线连接了起来。 用一根网线连接起来怎么就能"通信"了呢?我可以给你讲 IO、讲中断、讲缓冲区,但这不是研究网络时该关心的问题。 如果你纠结,要么去研究一下操作系统是如何处理网络 IO 的,要么去研究一下

分布式ID实现方法

实现方式 UUID 在Java的世界里,想要得到一个具有唯一性的ID,首先被想到可能就是UUID,毕竟它有着全球唯一的特性。那么UUID可以做分布式ID吗?答案是可以的,但是并不推荐! public static void main(String[] args) { String uuid = UUID.randomUUID().toString().replaceAll("-",""); System.out.println(uuid); } UUID的生成简单到只有一行代码,输出结果 c2b8c2b9e46c47e3b30dca3b0d447718,但UUID却并不适用于实际的业务需求。像用作订单号UU

kubernetes基础使用(二)

Kubernetes Job Using Job Kubernetes Job 通过创建 Pod 来批量执行一次性任务;不同于单独跑一个 Bare Pod,由 Job 运行起来的 Pod 在机器故障等问题下会重新调度 Pod,因此更加健壮。 下面,我们通过创建一个 Pod 来感受一下 Job 的使用: $ kubectl create -f resources/job.yaml job "pi" created $ kubectl get job NAME COMPLETIONS DURATION AGE pi 1/5 29s 29s $ kubectl get pods -l job-name=pi NAME READY STATUS RESTARTS AGE pi-76h5p 1/1 Running 0 12s pi-fhww6 0/1 Completed 0 36s 这是job.yaml apiVersion: batch/v1 kind: Job metadata: name: pi spec: completions: 5 template: metadata: name: pi spec: containers: - name: pi image: cargo.caicloud.io/caicloud/perl:latest command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never 一段时间之后,Pod