Believe it

相信不屈不挠的努力,相信战胜死亡的年轻

1. 开始学习Go

从一本书开始,这本书叫做《Go语言从入门到进阶实战(视频教学版)》,当然这篇Blog并不是所有的内容都来自这本书,毕竟书中也有不足之处。

2. Hello World

学啥语言的第一步都是Hello World, 第一步是搭建开发环境,直接下载Goland,创建一个新的工程,点击create

阅读全文 »

1. 从协程谈起

很多语言都支持协程,那什么是协程,和线程进程有什么区别呢?这里推荐一篇Blog,笔者直接提取其中最重要的部分

进程、线程 和 协程 之间概念的区别

  对于 进程、线程,都是有内核进行调度,有 CPU 时间片的概念,进行 抢占式调度(有多种调度算法)

  对于 协程(用户级线程),这是对内核透明的,也就是系统并不知道有协程的存在,是完全由用户自己的程序进行调度的,因为是由用户程序自己控制,那么就很难像抢占式调度那样做到强制的 CPU 控制权切换到其他进程/线程,通常只能进行 协作式调度,需要协程自己主动把控制权转让出去之后,其他协程才能被执行到。

 goroutine 和协程区别

  本质上,goroutine 就是协程。 不同的是,Golang 在 runtime、系统调用等多方面对 goroutine 调度进行了封装和处理,当遇到长时间执行或者进行系统调用时,会主动把当前 goroutine 的CPU (P) 转让出去,让其他 goroutine 能被调度并执行,也就是 Golang 从语言层面支持了协程。Golang 的一大特色就是从语言层面原生支持协程,在函数或者方法前面加 go关键字就可创建一个协程。

操作系统是不知道协程的,那么应用层如何实现协程呢?下面给一些伪代码

1
2
3
4
5
6
7
8
不断循环:
从任务队列获取任务
执行任务,如果任务运行结束:
进行下一轮循环(continue)
如果任务运行时进入阻塞状态:
把当前任务放入队列尾部(挂起)
如果任务主动释放CPU:
把当前任务放入队列尾部(挂起)

我们可以看到,其实这里正在执行的任务就是协程,这样的线程模型,他的CPU利用率非常高,他的协程切换代价非常低,几乎只需要入队出队而已。

但是这样的模型有一个很大的缺点,那就是CPU的公平性,如果一个协程迟迟不退出,且不进行系统调用,也不主动释放CPU,那么,这个协程将造成队头阻塞现象。

阅读全文 »

给磁盘分区

1
fdisk /dev/vdc

格式化分区

1
mkfs.ext4 /dev/vdc 

挂载磁盘

1
mkdir -p /data/ssd && mount /dev/vdc /data/ssd

Jps

jps 可以看到运行中的java进程

1
2
3
sh-4.2$ jps
370 xxx.jar
180682 Jps

Jcmd

jcmd可以看到运行中的java进程以及参数

1
2
3
sh-4.2$ jcmd
370 /usr/local/xxx.jar config_path=xxx.yaml
180773 sun.tools.jcmd.JCmd

Jmap

jmap是可以查看整个JVM内存的工具。

阅读全文 »

K8S

安装docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo sed -i 's/$releasever/7/g' /etc/yum.repos.d/docker-ce.repo
sudo yum update -y
sudo yum install yum-utils docker-ce docker-ce-cli containerd.io -y
sudo systemctl start docker

kubaadm 引导初始化K8S集群

1
2
3
4
5
6
kubeadm init --pod-network-cidr 10.244.0.0/16 --control-plane-endpoint  k8s-control-plane-endpoint-vip:6443  --upload-certs  --kubernetes-version=v1.22.1
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 允许master节点进行负载
kubectl taint nodes --all node-role.kubernetes.io/master-
vim /etc/kubernetes/manifests/kube-apiserver.yaml
#- --service-node-port-range=1000-32000
1
2
# 加入控制平面
kubeadm join k8s-control-plane-endpoint-vip:6443 --token xxxxxx.xxxxxxxxxxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --control-plane --certificate-key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
阅读全文 »

查看开机启动项

1
systemctl list-unit-files

会看到有两列,左侧是服务的名字,右侧是服务的状态,enabled代表开机自启

1
2
3
4
5
6
7
8
9
UNIT FILE                                                                     STATE   
docker-cfaf73bd979fa2fea877e7ae44193bf46318c1bc7fda16e14ffeaa8f8b397e04.scope static
docker-d66a6df41c6b8f1ce687c864a580638d8000f8095f29fbef936f7abc3ff3ec69.scope static
session-102.scope static
session-106.scope static
session-96.scope static
acpid.service enabled
arp-ethers.service disabled
arptables.service disabled

禁用开机启动项

1
systemctl disable kubelet

启用开机启动

1
systemctl enable kubelet

参考

https://linux.cn/article-5926-1.html

书评

一星,书写的不好,非常牵强,代码过多,并且大多为Windows下的代码,全书主要分析的是Windows操作系统下的病毒。

2.2. 计算机病毒常见表现行为及目的

2.2.1. 病毒如何爆发

  • 欺骗用户-文件欺骗

    下面两个病毒其实都是exe可执行文件,但是他们通过更改自己的图标达到了欺骗用户点击的效果。

阅读全文 »

张三写了一个计算机病毒,上传到了Github,张三犯不犯法?

张三从黑客那里盗用了一些肉鸡去攻打其他非法网站,张三犯不犯法?

...

法律法规

目前国家级别的计算机相关的法律一共有6本,分别是

  • 《最高人民法院关于审理涉及计算机网络域名民事纠纷案件适用法律若干问题的解释》
  • 《计算机软件保护条例》
  • 《最高人民法院、最高人民检察院关于办理危害计算机信息系统安全刑事案件应用法律若干问题的解释》
  • 《中华人民共和国计算机信息系统安全保护条例》
  • 《计算机信息网络国际联网安全保护管理办法》
  • 《中华人民共和国计算机信息网络国际联网管理暂行规定》
阅读全文 »

1. 笔者序

这篇Blog记录了笔者对《破坏之王: DDoS攻击与防范深度剖析》的学习记录,贡献出来和大家一起学习。

为什么学这个,笔者的服务在2021年9月4日晚上遭受了惨重的DDoS攻击,攻击者使用了100多台肉鸡,对笔者对服务进行了持续的CC攻击,最终导致产生了18TB的流量,这部分费用总计高达4000元人民币,当然在腾讯工作人员的积极帮助下,对这笔费用进行了处理,笔者也不用对这些费用进行支付,所以笔者在此由衷地感谢腾讯云团队,另外也感谢笔者的大学室友,谢谢你们的帮助。

阅读全文 »

6. 语义分析

6.1. 语法制导翻译

语法制导翻译分为两类,一类是S型语法制导翻译,另一类是L型语法制导翻译。这里我们主要介绍S型语法制导翻译,因为他更简单,更加适用于语法树。

6.2. S型语法制导翻译

当我们构建出语法书以后,其每个节点与自己的子节点的关系就是产生式的关系,对语法树进行DFS就是遍历整个语法树,很多信息可以在遍历的过程中自底向上进行逐步翻译。

阅读全文 »