操作系统基本概念
1. 操作系统的基本概念1.1 概念、功能和目标概念
操作系统(Operating System)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件
功能和目标
1.2 操作系统的特征
并发指两个或多个事件在同一时间间隔内发生,这些事件宏观上是同时发生的,但微观上是交替发生的
注意:
单核CPU同一时刻只能执行一个程序,各个程序只能并发执行
多核CPU同一时刻可以同时执行多个程序,多个程序可以并行的执行
并行:两个或多个事件在同一时刻同时发生
共享
互斥共享
系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源
同时共享
系统中的某些资源,允许一个时间段内由多个进程同时对它们进行访问
虚拟虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体是实际存在的,而逻辑上对应物是用户感受到的
如果失去了并发性,则一个时间段内系统只需要运行一道程序,那么就失去了虚拟性的意义了。因此,没有并发性就谈不上虚拟性
异步异步是指,在多道程 ...
区块链导论(4)_以太坊
以太坊简介比特币的缺点
缺少图灵完备(不支持循环语句)
可表达状态少(只能是已花费和未花费)
价值盲(UTXO不可分割)
区块链盲(看不到区块链数据)
以太坊
一个开源的具有智能合约功能的基于公共区块链的分布式账本
一个可编程的区块链,允许用户创建他们自己的任意复杂的操作,成为了多种不同类型去中心化区块链的平台,包括但不限于密码学货币
可以用来编程、分散、担保和交易
以太坊定义了去中心化应用的平台,核心是以太坊虚拟机(EVM)
EVM可以执行任意复杂度的代码,内置图灵完备编程语言
以太坊使得任何人都可以创建智能合约和去中心化应用,并在其中设立自定义的所有权规则、交易方式、状态转换函数
以太坊Dapp架构
以太坊的特点
支持智能合约,不再是才支持单一的虚拟币应用
交易信息内容扩展
账户状态跟踪
支持信息加密
系统架构及核心概率系统架构
应用层
DApp、智能合约,通过Web3.js进行交互
核心模块层
以太坊虚拟机:智能合约的运行环境
分布式账本:交易、区块等信息
共识算法:PoS、DPoS
共识机制:矿工、代理…
网络服务:点对点 节点发现及链接服务
底层服 ...
区块链导论(3)_比特币
比特币简介比特币是一套点对点的公共账本
点对点架构
去中心化、分布式
P2P
每个节点等同地位
同时扮演用户端与服务端的角色
去中心化系统的优势
去中心化面临的挑战
工作原理比特币系统面临的挑战
为什么要动用自己的计算机资源来存储这些信息
以谁的记录为准
比特币如何做到支付功能
比特币如何防伪
比特币如何防篡改
比特币如何防双重支付
交易流程
Alice间接创建了自己的比特币地址
Alice给Bob转比特币
比特币钱包
比特币钱包用来存放比特币地址和数字密钥
比特币的所有权是通过数字密钥、比特币地址和数字签名来确定的
比特币密钥包包括一个私钥和由其衍生出的唯一公钥
冷钱包:离线钱包;热钱包:在线钱包。
交易包括输入、输出、将被转移的比特币数量
比特币交易将比特币在一个或多个输入和输出之间移动
每个输入都是提供比特币的交易和地址
每个输出都是接收比特币的地址,以及发送到该地址的比特币数量
比特币地址用于接收比特币,私钥用于比特币支付时的交易签名
支付时,比特币当前所有者需要在交易中提交其公钥和签名
比特币网络中所有人可以通过提交的公钥和签名进 ...
区块链导论(2)_加密技术
密码学简介密码学技术
密码学技术是保障网络信息安全的核心技术
区块链大量使用了密码学的最新成果,特别是身份认证和隐私保护技术
信息安全的四大安全属性
机密性
网络信息不被泄露给非授权的用户、实体或过程,或供其利用的特性
可认证性
确保发送方和接收方声称的身份是真实有效的,方式冒充和重放
不可抵赖性
所有参与者都不可能否认或抵赖曾经完成的操作和承诺
利用信息源证据可以防止发信方不真实地否认已发送信息
利用递交接收证据可以防止收信方否认已经接收的信息
完整性
网络信息未经授权不能改变的特性
网络信息在存储或传输过程中保持不被偶然或蓄意删除、修改、伪造等特性
保持信息原样
公钥密码学:密码学的新方向诞生,意味着互联网时代一到多的安全模式出现
加解密算法加密技术的两个元素
算法
将普通信息或可理解的信息与密钥结合,产生不可理解的密文的步骤
密钥
一种参数,是在明文转换为密文或将密文转换为明文的算法中输入的参数
对称加密算法
用相同密钥对原文进行加密和解密
优点:效率高,强度高
缺点:无法确保密钥被安全传递
DES (Data Encryption Stan ...
区块链导论(1)_区块链简介
区块链的产生账本科技的四个阶段
简单账本
指在会计核算中,对每一项经济业务只进行单方面的、不完整的记载,也就是只在一个账户中记一笔账
登账手续简单
账户设置和记录上不完整
不能全面反映经济业务的来龙去脉
不便于检查账户记录的正确性
容易出错
很难确认账本记录跟实际情况是否匹配
即使发现不匹配,也很难定位到哪次记录出了问题
容易篡改
账本只有一个,保管在记账者个人手里
很难发现账本被篡改过
复式账本
复式账本原理:
交易的本质是将某种价值从来源方转移到目标方
可将每笔交易分别在贷方(来源方)和借方(目标方)两个科目进行记录
借贷双方的总额时刻保持相等(守恒)
优点:
很容易对交易的来龙去脉进行追踪
可以验证账目是否记录正确
审计的缺陷:
对账较为困难、发现问题不及时、存在联合舞弊的可能
数字化账本
使用计算机可以提高大规模记账的效率,还可以避免人工操作的错误
为更好管理统计数据,人们发明了专门的数据库技术
记账方法本身没有太多创新
账本的规模、处理的速度、账本的复杂度有了数量级的提升
分布式账本
第三方记账
记账方法属于第三方记账,复式 ...
Docker
Docker概述Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、 bare metal、OpenStack 集群和其他的基础应用平台。
Docker通常用于如下场景:
web应用的自动化打包和发布;
自动化测试和持续集成、发布;
在服务型环境中部署和调整数据库或其他的后台应用;
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
Docker是基于Go语言开发的
Docker官方文档:Docker Documentation | Docker Documentation
仓库地址:Docker Hub Container Image Library | App Containerization
docker与VMware的区别
VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用;
Container(Docker容器),在宿主机器、宿 ...
GoWeb
Web应用流程
创建服务默认多路复用器HandleFunc123456789101112131415161718192021package mainimport ( "fmt" "net/http")//处理器函数func handler(w http.ResponseWriter,r *http.Request) { fmt.Fprintln(w,"Hello World!",r.URL.Path)}func main() { //HandleFunc注册一个处理器函数handler和对应的模式pattern(注册到DefaultServeMux) http.HandleFunc("/",handler) //ListenAndServe监听TCP地址addr,并且会使用handler参数调用Serve函数处理接收到的连接。handler参数一般会设为nil,此时会使用DefaultServeMux。 http.ListenAndServe(":8080&q ...
vim
vim模式
vim初始是normal(正常)模式
输入:可以进入command(命令)模式
输入i(insert), a(append),o(open a line below)可以进入insert(编辑)模式。i表示在光标的位置插入,a表示在光标后的位置插入,o表示在当前的下一行插入
v 进入visual(可视)模式
command
退出文件:
:wq 保存并退出
:q! 不保存退出
在编写代码,如C文件时:
:set number 显示行数
:syntax on 语法高亮
但是每次在文件中设置不会保存。想要全局保存,可编辑配置文件
1vim ~/.vimrc
将所有命令写出配置中即可全局保存
简单配置:https://raw.githubusercontent.com/amix/vimrc/master/vimrcs/basic.vim
normal1234H 左J 下K 上L 右
上面的方向前的数字则代表向那个方向移多少例如:10K 向上移10行
W 跳到下一个单词
B 跳到上一个单词
PaUp / Ctrl+ ...
Linux操作
主要系统目录
/:根目录,
一般根目录下只存放目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始
当在终端里输入 /home,其实是在告诉电脑,先从 /(根目录)开始,再进入到 home 目录
/bin、/usr/bin:可执行二进制文件的目录,如常用的命令 ls、tar、mv、cat 等
/boot:放置 linux 系统启动时用到的一些文件,如 linux 的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub
/dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt
/etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有
/etc/inittab
/etc/fstab
/etc/init.d
/etc/X11
/etc/sysconfig
/etc/xinetd.d
/home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下
~ 表示当前用户的家目录
~edu 表示用户 edu 的家 ...
shell
Shell简介Shell 既是一种脚本编程语言,也是一个连接内核和用户的软件.常见的脚本解释器有:
bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。
sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
另外还有:ash、 csh、 ksh等。
编译型语言的优点是执行速度快、对硬件要求低、保密性好,适合开发操作系统、大型应用程序、数据库等。
脚本语言的优点是使用灵活、部署容易、跨平台性好,非常适合Web开发以及小工具的制作。
Shell 就是一种脚本语言,我们编写完源码后不用编译,直接运行源码即可。
Bash和sh区别
bash 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。
bash 兼容 sh 意味着,针对 sh 编写的 Shell 代码可以不加修改地在 bash 中运行。
尽管如此,bash 和 sh 还是有一些不同之处:
一 ...
Shiro入门
shiro简介
Apache Shiro 是 Java 的一个安全(权限)框架。
Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。
Shiro 可以完成:认证、授权、加密、会话管理、与Web 集成、缓存等。
核心:
Subject:应用代码直接交互的对象是Subject,也就是说Shiro的对外API 核心就是Subject。Subject 代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等;与Subject 的所有交互都会委托给SecurityManager;Subject 其实是一个门面,SecurityManager才是实际的执行者
SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且其管理着所有Subject;可以看出它是Shiro的核心,它负责与Shiro的其他组件进行交互,它相当于SpringMVC中DispatcherServlet的角色
Realm:Shiro从Realm 获取安全数 ...
Git
Git
Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。
➢ 集中式版本控制工具 CVS、**SVN(Subversion)**、VSS……
➢ 分布式版本控制工具 Git、Mercurial、Bazaar、Darcs……
工作机制:
工作区 add—>暂存区 commit—>本地库
Git 和代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
➢ 局域网
✓ GitLab
➢ 互联网
✓ GitHub ✓ Gitee 码云
Git常用命令
命令名称
作用
git config –global user.name 用户名
设置用户签名
git config –global user.email 邮箱
设置用户签名
git init
初始化本 ...