Alonestray's Blog


  • 首页

  • 分类

  • 归档

  • 标签

git初步学习

发表于 2017-04-04 | 分类于 版本控制工具

1.git和github

git 分布式版本控制工具;
github项目托管平台(ps: 一个网站);

2.git本地使用

下载git客户端window下傻瓜式安装;

git本地工作原理图

enter image description here
在本地GIT仓库当中,实际分为工作区和版本库。简单来说:

  • 工作区就是你存放工作文件的目录
  • 执行git init创建本地git仓库之后,隐藏的“.git”目录下就是版本库
  • 版本库当中有一个被称为“stage”或者“index”的暂存区
  • 当我们申请创建仓库之后,git会为我们创建版本库中的第一个默认的分支“master”,既主分支。
  • 以及指向当前所使用分支的一个指针“HEAD”

所以,当我们提交改动的时候,可以理解为:

  • git add将改动的文件提交到了暂存区
  • git commit将提交到暂存区存放的改动文件,一次性提交到我们的仓库分支上

3.本地操作git命令总结

git命令操作必须在所在库的目录下打开
  • 切换目录:cd 盘符:/文件夹名 创建文件:mkdir 文件名
  • git init 把这个目录变成git可以管理的仓库(.git文件夹勿动)
  • git add xxx.txt
  • git commit -m “备注”
  • git status 查看库当前状态
  • git diff 查看详情

    git重要操作
    
  • 历史记录(前进&后退)
    git log 查看记录
    git reset –hard HEAD^ 从当前版本回退到上一个版本
    git reset –hard [commit id] 回退到某个版本
    cat xxx.txt 查看内容

  • 撤销修改的三种情况

    1.在工作区: git checkout –file
    2.在暂存区:两步:git reset HEAD file 从暂存区取出到工作区;

    之后重复1 git checkout --file
    

    3.提交到本地:版本回退操作


分支branch

enter image description here

  • 创建并切换到分支上工作: git checkout -b dev
  • git add/git commit -m “xxx” 提交到目前所工作的分支上
  • 切换到主分支(或某个分支):git checkout master
  • 将分支合并到主分支(或某个分支):git merge dev(分支名)
  • 删除分支:git branch -d dev

4. 远程操作

准备工作:注册github账号,配置SSH;

本地仓库与远程仓库链接
  • 从远程克隆
    git clone 远程库的ssh地址/http地址
    并且输入github账号密码

    使用命令git push -u origin master第一次推送master分支的所有内容,使本地master与远程master对接;以后在推送用git push origin master就可以

  • 添加远程库
    git remote add origin git@github.com: 账号/库

[参考资料]:http://www.liaoxuefeng.com

http协议

发表于 2017-03-29 | 分类于 计算机网络

HTTP协议

  • http协议介绍
  • http请求
  • http响应
  • https

enter image description here

http是什么?
HTTP 是基于 TCP/IP 协议的应用层协议。(HyperText Transfer Protocol)主要规定了客户端和服务器之间的通信格式,默认使用80端口; 目前使用最多的http协议最多的还是1.1版本;

http特点:
无状态协议
应用层协议
传输明文内容安全性较差

http 1.1 缺点:
虽然1.1版允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。

为了避免这个问题,只有两种方法:一是减少请求数,二是同时多开持久连接。这导致了很多的网页优化技巧,比如合并脚本和样式表、将图片嵌入CSS代码、域名分片等等。如果HTTP协议设计得更好一些,这些额外的工作是可以避免的。

http请求&响应

http请求:get/post方式
主要:请求头信息各个参数&响应参数
http状态码:1,2,3开头代表成功 4请求错误 5服务器错误


对https的了解

  • http不安全(明文传输)https安全(加密传输)
  • 在OSI网络模型中,http工作于应用层,https工作在传输层
  • http标准端口80 http端口443

http——>https图解

enter image description here

ps:http通信使用明文,内容可能被窃听;

enter image description here

ps:http不验证通信方身份,因此有可能遭遇伪装;

enter image description here

ps:无法验证报文的完整性,所有有可能已篡改;

enter image description here

ps:HTTP + 加密 + 认证 + 完整性保护 = HTTPS

HTTPS是身披SSL外壳的HTTP,通常情况下HTTP是直接和TCP层进行通信的。当使用SSL(安全套阶字)时,则演变成HTTP先和SSL通信,SSL再和TCP通信的了。

enter image description here

参考@ 阮一峰 & 何小伟;用于自己学习;

数据结构绪论

发表于 2017-03-29 | 分类于 数据结构

数据结构和算法

数据结构是研究数据如何存储的,
对数据的不同存储形式有不同操作方式就是算法;

程序设计=数据结构+算法

数据结构包括两种:

  • 逻辑结构:数据对象中数据元素之间的相互关系
  • 物理结构:数据的逻辑结构在计算机中的存储形式

四大逻辑结构:

  • 集合结构:同属一个集合
  • 线性结构:一 一对应关系
  • 树形结构:层次关系
  • 图形结构:多对多关系

物理结构包括两种:

  • 顺序存储结构:把数据元素存放在地址连续的存储单元中
  • 链式存储结构:把数据元素存放在任意的存储单元里(ps:这组存储单元可以是连续的,也可以是不连续的,需要一个指针找地址存放数据及指针,所以多用一些内存空间);

算法五个特征:

  • 输入(零个或多个数据规模都可以)
  • 输出(返回一个值或多个值)
  • 有穷性
  • 确定性
  • 可行性

时间复杂度和空间复杂度

时间复杂度=执行次数

空间复杂度=占内存空间大小

以空间换时间,以时间换空间;

时间复杂度计算:
用大O记法

常数阶:O(1)

线性阶:O(n)

平方阶:O(n2)

handshake

发表于 2017-03-28 | 分类于 计算机网络

基本知识:

TCP是什么?

从ois网络七层模型说,上图

enter image description here

TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层;在第二层上的数据,我们把它叫Frame,在第三层上的数据叫Packet,第四层的数据叫Segment。 同时,我们需要简单的知道,数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端。这个基本的流程你需要知道,就是每个数据都会经过数据的封装和解封装的过程。 在OSI七层模型中,每一层的作用和对应的协议如下:

enter image description here

TCP是一个协议,那这个协议是如何定义的,它的数据格式是什么样子的呢?要进行更深层次的剖析,就需要了解,甚至是熟记TCP协议中每个字段的含义。哦,来吧。

enter image description here

上面就是TCP协议头部的格式,由于它太重要了,是理解其它内容的基础

  • Source Port和Destination Port:分别占用16位,表示源端口号和目的端口号;用于区别主机中的不同进程,而IP地址是用来区分不同的主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能唯一的确定一个TCP连接;
  • TCP Flags:TCP首部中有6个标志比特,它们中的多个可同时被设置为1,主要是用于操控TCP的状态机的,依次为URG,ACK,PSH,RST,SYN,FIN。

SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1,ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送一个只有SYN的数据包,如果对方主机响应了一个数据包回来
,就表明这台主机存在这个端口;但是由于这种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全的主机将会强制要求一个连接严格的进行TCP的三次握手;


三次握手又是什么?

enter image description here

第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;

第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

为什么要三次握手?

目的:防止已失效的请求传到服务器,造成服务器一直等待而资源浪费;

《计算机网络》—例子:
“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”

Hello World

发表于 2017-03-16

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

AloneStray

AloneStray

A way to the technology

5 日志
3 分类
3 标签
© 2017 AloneStray
由 Hexo 强力驱动
主题 - NexT.Mist