Transformer
Transformer背景介绍
Transformer指的是一种架构,未来的NLP(自然语言处理)
都可以使用此架构。Transformer由编码器、解码器(后面会介绍)等组成,他的输入是向量数组,输出是也是向量数组。
注意:Transformer架构的输出是把向量逐个输出的。
Transformer架构最初只用来做机器翻译,例如将英语翻译成德语。在翻译的过程中待翻译语句
作为输入,而翻译结果
作为输出。待翻译语句
中的每一个Token(词)
会被转化为向量作为输入,Transformer的输出向量最终被转化为翻译结果
的Token(词)
。由于Transformer逐一输出结果的特性,翻译结果
是一个Token(词)
一个Token(词)
逐渐输出的。
Transformer架构不仅仅只可以用与机器翻译,Transformer现在也用于GPT中,就是GPT的最后一个字母T所代表的含义。由于Transformer逐一输出结果的特性,GPT也是一个Token(词)
一个Token(词)
逐渐输出的。
VPN与代理那些事
VPN 与 Proxy
VPN 和Proxy有什么区别呢,国内的各大平台极力屏蔽了VPN和Proxy这两个关键字,很多人都分不清他们的关系。
VPN全名虚拟专用网络,Proxy全名代理。
其实,VPN工作于操作系统级别,而Proxy工作在应用级别。如果你配置了VPN,那么所有的应用都进入了虚拟的网络;但如果你配置了代理,只有支持代理的那部分应用才可以进入到虚拟的网络,不支持代理的APP,则无法使用虚拟网络。
VPN原理图
Nginx
Nginx
通过Docker快速部署一个Nginx实例
下面的指令可以把当前目录快速部署成一个web服务,注意要有index.html,否则会403 1
docker run -d --rm --name nginx -p 8081:80 -v $PWD:/usr/share/nginx/html nginx
配置stream
1 | # 支持stream 的nginx |
CPU架构介绍
CPU分类
CPU分两类,精简指令集CPU(RISC)和复杂指令集CPU(CISC)。Intel、AMD厂商主要做复杂指令集CPU;IBM,ARM厂商主要做精简指令集CPU。
精简指令集CPU能耗低,性能相对较弱,常用于移动设备;复杂指令集CPU能耗高,性能强,常用于桌面设备。
CPU架构分类
不同厂商做的CPU,其架构也不尽相同,目前为止,比较多的架构有四种,ARM架构、X86架构、MIPS架构、PowerPC架构。
ARM架构CPU为精简指令集CPU;X86架构CPU为复杂指令集CPU;MIPS架构和PowerPC架构目前用的不太多了。笔者大学期间学习计算机组成原理的时候,学的就是MIPS架构。
docker内部安装软件
以哪个镜像作为基础镜像
1 | docker run -it --rm centos:centos8 |
换源
阿里源
1 | sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* \ |
安装Git
yum 安装
1 | yum install git -y |
二进制安装
1 |
安装Clang
yum安装
1 | yum install clang -y |
二进制安装
1 | ``` |
启动
1 | /usr/sbin/sshd |
白帽子讲Web安全
1. 总揽
很老的一本书,但是依然有阅读价值。
全书分为4个部分,其中比较重要的应该是第二章和第三章,第二章主要讲解客户端(浏览器)如何保障用户的安全,第三章主要讲解服务端如何保障用户安全。
2. 客户端安全
客户端这边容易受到攻击的主要有三个类型。
第一个是XSS攻击,全名跨站脚本攻击,通常指的是黑客通过某些手段,篡改了用户访问的页面,导致页面上执行了一些恶意的脚本。一个简单的例子:在你登陆淘宝之后,黑客篡改了你的淘宝页面(篡改了用户访问的页面),自动帮你购买了一些奇怪的东西(执行了一些恶意的脚本)。
第二个是CSRF攻击,全名跨站点请求伪造,通常指的是黑客通过某些手段,诱导用户访问某钓鱼页面,在该页面上完成了一些恶意的脚本。一个简单的例子: 在一些诱惑下你点开了一个页面(诱导用户访问某钓鱼页面),尽管你之后什么都没有做,但是你的淘宝购物车被恶意清空了(在该页面上完成了一些恶意的脚本)
第三个是ClickJacking攻击,全名点击劫持攻击,通常指的是黑客通过某些手段,诱导用户访问某钓鱼页面,该页面有个按钮,按钮上悬浮了一个透明的iframe,然后引诱你点击该按钮,当你点击该按钮时触发了iframe中的按钮。一个例子是:在一些诱惑下你点开了一个页面,然后在该页面的诱惑下你点击了一个按钮,结果你的淘宝购物车被恶意清空了。
Java异常原因及处理
Java常见异常
classDiagram
Object <|-- Throwable
Throwable <|-- Error
Throwable <|-- Exception
Error <|-- OutOfMemoryError
Error <|-- NoClassDefFoundError
Error <|-- StackOverflowError
Exception <|-- IOException
Exception <|-- RuntimeException
RuntimeException <|-- NullPointerException
RuntimeException <|-- IndexOutOfBoundsException
NoClassDefFoundError 异常原因处理
spring13-AspectJ
1. AspectJ
1.1. AspectJ介绍
AspectJ官网1
AspectJ文档2
1.1.1. pointcuts
pointcuts指的是程序中的某些链接点(某些时机),例如call(void Point.setX(int))
表示:调用类Point
的setX(int)
方法时
pointcuts可以使用与或非表达式(||,&&,!
)连接,比如 call(void Point.setX(int)) || call(void Point.setY(int))
pointcuts可以被定义为变量,如下面代码中的move()
1 | pointcut move(): |
当然pointcuts定义的时候还可以使用通配符,比如call(void Figure.make*(..))
代表Figure
的以make开头且返回值为void的方法(不关心参数)调用的时候。比如call(public * Figure.* (..))
代表Figure
的任何方法(不关心方法名,参数,返回值)调用的时候。