Victor's Code Journey
Victor's Code Journey

操作系统-IO

先介绍下系统的IO原型架构。CPU 通过内存总线(memory bus)连接到系统内存。显卡或者其他高性能 I/O 设备通过常规的I/O 总线(I/O bus)连接到系统,在许多现代系统中会是 PCI 或它的衍生形式。最后,更下面是外围总线(peripheral bus),比如 SCSI、SATA 或者 USB。它们将最慢的设备连接到系统,包括磁盘、鼠标及其他类似设备。

IO原型架构

考虑物理布局及造价成本。越快的I/O 设备的总线越短,因此高性能的内存总线没有足够的空间连接太多设备。另外,在工程上高性能总线的造价非常高。所以,系统的设计采用了这种分层的方式,这样可以让要求高性能的设 备(比如显卡)离 CPU 更近一些,低性能的设备离 CPU 远一些。将磁盘和其他低速设备连到外围总线的好处很多,其中较为突出的好处就是你可以在外围总线上连接大量的设备。

web安全之XSS漏洞

Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。为了和 CSS 区分,这里把攻击的第一个字母改成了 X,于是叫做 XSS。XSS 的本质是:恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行。

而由于直接在用户的终端执行,恶意代码能够直接获取用户的信息,或者利用这些信息冒充用户向网站发起攻击者定义的请求。在部分情况下,由于输入的限制,注入的恶意脚本比较短。但可以通过引入外部的脚本,并由浏览器执行,来完成比较复杂的攻击策略。

Linux 环境编译openjdk

  • Linux 环境: ubuntu 20.04
  • jdk 版本: openjdk-8

openjdk的源码可以从github中获取:

git clone https://github.com/openjdk/jdk.git
git checkout jdk8-b120
git checkout -b tag-jdk8-b120

国内码云上有同步的镜像仓库:

Ubuntu切换GCC版本

首先在ubuntu上安装多版本的GCC:

$ sudo apt install build-essential
$ sudo apt -y install gcc-7 g++-7 gcc-8 g++-8 gcc-9 g++-9

然后使用update-alternatives注册不同版本的GCC:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 7
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 8
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 9
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 9

选择想使用的GCC:

$ sudo update-alternatives --config gcc
There are 3 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path            Priority   Status
------------------------------------------------------------
  0            /usr/bin/gcc-9   9         auto mode
  1            /usr/bin/gcc-7   7         manual mode
* 2            /usr/bin/gcc-8   8         manual mode
  3            /usr/bin/gcc-9   9         manual mode
Press  to keep the current choice[*], or type selection number: 

Kerberos协议

什么是Kerberos?

Kerberos是一种网络身份验证协议,提供了网络上的身份验证和强大的加密工具,旨在通过使用密钥加密为客户端/服务器应用程序提供强身份验证。

互联网是一个不安全的地方。Internet中使用的许多协​​议都不提供任何安全性。一些站点尝试使用防火墙来解决其网络安全问题。不幸的是,防火墙假设“坏人”在外面,这通常是一个非常糟糕的假设。大多数真正破坏性的计算机犯罪事件都是由内部人员实施的。防火墙还有一个很大的缺点,那就是它限制了用户使用Internet的方式。(毕竟,防火墙一个极端的例子,就是没有比没有连接到网络并关闭电源的计算机更安全的说法了。)

Kerberos是由MIT创建的,用于解决这些网络安全问题。Kerberos协议使用强大的加密技术,以便客户端可以通过不安全的网络连接向服务器证明其身份(反之亦然)。客户端和服务器使用Kerberos证明其身份后,他们还可以加密所有通信,以确保在开展业务时的私密性和数据完整性。

缓存的一些思考

缓存常被用于处理高并发,高性能问题,在现今的系统中被广泛使用。缓存模式,简单来说就是利用时间局限性原理,通过空间换时间来达到加速数据获取的目的。

缓存的读写性能很高,预热快,在数据访问存在性能瓶颈或遇到突发流量,系统读写压力大增时,可以快速部署上线,同时在流量稳定后,也可以随时下线,从而使系统的可扩展性大大增强。

但是,在系统中引入缓存后,会增加系统的复杂度。