IRIS's BLOG

王圆圆的每日报告


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

IOS12+Swift4+Xcode10开发 - 1 摇色子APP

发表于 2019-03-05 | 分类于 APP | | 阅读次数:
字数统计: 412 | 阅读时长 ≈ 1

项目介绍

点击按钮或者摇晃手机,两个骰子摇晃改变。

image-20190305161340845

阅读全文 »

用Swift开发iOS10 - 7 定制Table Views

发表于 2019-03-05 | 分类于 IOS学习 | | 阅读次数:
字数统计: 1.1k | 阅读时长 ≈ 5

项目简介

开始用Swift开发iOS 10 - 6 创建简单的Table Based App是basic风格的Table,这一部分将:

  1. 使用UITableViewController 代替 UITableView
  2. 展示table view cell中不同的图片显示方式
  3. 设计定制的table view cell来替代basic的table view cell
阅读全文 »

用Swift开发iOS10 - 6 创建简单的Table Based App

发表于 2019-03-04 | 分类于 IOS学习 | | 阅读次数:
字数统计: 826 | 阅读时长 ≈ 3

项目简介

image-20190304213818127

table view应该是iOS应用中最常用的UI element。最好的例子就是iPhone自带的一些应用,如电话,邮件,设置等。TED,Google+,Airbnb,微信等等都是很好例子。

阅读全文 »

用Swift开发iOS10 - 3 傻瓜式制作APP图标

发表于 2019-03-04 | 分类于 IOS学习 | | 阅读次数:
字数统计: 144 | 阅读时长 ≈ 1

使用真机测试的效果如下:

image-20190304192946073

阅读全文 »

用Swift开发iOS10 - 5 Stack View设计UI

发表于 2019-03-04 | 分类于 IOS学习 | | 阅读次数:
字数统计: 653 | 阅读时长 ≈ 2

项目介绍

image-20190304213443271

参考链接:https://www.jianshu.com/p/25f062e903cf

作者:Andy_Ron

这篇文章将学习到:

  • 用Stack View布局UI。
  • 用image views展示图片。
  • 用内建的asset catalog管理图片。
  • 用Size Classes适配Stack View
阅读全文 »

用Swift开发iOS10 - 4 AutoLayout

发表于 2019-03-03 | 分类于 IOS学习 | | 阅读次数:
字数统计: 226 | 阅读时长 ≈ 1

项目介绍

Xcode提供了两种方法定义Auto Layout的约束:

  1. Auto Layout工具栏
  2. Control-drag

使用Auto Layout使label到中央

Auto Layout工具栏提供了四个按钮:

  • Stack - 组合views变成一个stack view
  • Align - 构建对齐约束
  • Pin - 构建空间约束,例如UI的宽度,高度,边距等
  • Issues - 解决布局问题
阅读全文 »

合集 - 优秀iOS开发者博客

发表于 2019-03-03 | 分类于 博客 | | 阅读次数:
字数统计: 231 | 阅读时长 ≈ 1

image-20190311225256216

onevcat的博客
https://onevcat.com/#blog

唐巧的博客
http://blog.devtang.com/

阅读全文 »

计算机基础 - 2 数据库

发表于 2019-03-03 | 分类于 实习 | | 阅读次数:
字数统计: 633 | 阅读时长 ≈ 2

题目合集

数据库

一、事务

事务的概念来自于两个独立的需求:并发数据库访问,系统错误恢复。

一个事务是可以被看作一个单元的一系列SQL语句的集合。

事务的特性(ACID)

  • A, atomacity 原子性:事务必须是最小单位;对于数据修改,要么全都执行,要么全都不执行。(转账失败)
  • C, consistency 一致性:事务将数据库从一种一致状态转变为下一种一致状态。也就是说,事务在完成时,必须使所有的数据都保持一致状态(各种 constraint 不被破坏)。
  • I, isolation 隔离性 :一个事务的影响在该事务提交前对其他事务都不可见。
  • D, durability 持久性:事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命故障也一直保持。

二、索引

create index 索引名 on 数据库名(列名 DESC降序)

优点:加速查找

缺点:增删改的时候需要更新索引

三、数据库引擎

InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。

MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用。

MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。

注意,同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。

实现

B+树

实习整理 - 未完待续

发表于 2019-03-03 | 分类于 实习 | | 阅读次数:
字数统计: 351 | 阅读时长 ≈ 1

实习的资料整理。

包括银行、互联网公司。

包括各公司的福利整合。

农业银行

截止日期:3.20日

申请入口

宣传网页:

https://i.eqxiu.com/s/iqd0XQ71?eqrcode=1&share_level=5&from_user=b819b53f-2d44-49e8-aa62-fa07f712a8ef&from_id=c8995d88-6327-45bc-97dc-a4ad26ef27cb&share_time=1551152498524&from=timeline&isappinstalled=0

福利

工资17k。公积金5200。

农行总部编制 档案北京管理 北上广天成西 六地即可 扩招截止20年 这两年把握机会 进入顶级国企 全国统一待遇 当地公积金封顶

上海数据中心 部门 免费房子(一辈子)

阅读全文 »

计算机基础 - 1 计算机网络

发表于 2019-03-03 | 分类于 实习 | | 阅读次数:
字数统计: 4.2k | 阅读时长 ≈ 15

题目合集

一、TCP和UDP的区别

1.为什么握手需要三次,而挥手却需要四次?

握手的时候,A和B打个招呼,B可以直接把自己的SYN信息和对A的回应ACK信息一起带上,但是挥手的时候,A说我要断开了,B还没发完最后的数据,因此需要先回应一下A,我收到你的断开的请求了,但是你要等我把最后的内容给你,所以这里分开了2步: (1)回应A; (2)发送自己的最后一个数据

2.为什么A进入TIME_WAIT需要等待最大报文段生存的时间后,才能关闭?

原因是,担心网络不可靠而导致的丢包,最后一个回应B的ACK万一丢了怎么办,在这个时间内,A是可以重新发包的,但是超过了最大等待时间的话,就算收不到也没用了,所以就可以关闭了。

二、HTTP是什么?

  • 定义:HTTP就是一个在TCP基础上实现的,客户机与服务器之间的,请求-响应模式的双向通信协议。
  • 目的:超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信。

HTTP 协议构建于 TCP/IP 协议之上,是一个应用层协议,默认端口号是 80。

HTTP 请求的构建

image-20190421180407824

第一部分——请求行:

方法:如下。URL :www.baidu.com、版本:HTTP 1.1

  • HTTP方法有哪些?
    • GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
    • POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
    • PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
    • HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
    • DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
    • OPTIONS:查询相应URI支持的HTTP方法。
第二部分——首部字段:

Accept-Charset,表示客户端可以接受的字符集。

Content-Type是指正文的格式:POST 的请求,如果正文是 JSON。

缓存:

第三部分——请求的正文实体

HTTP 返回的构建

image-20190421180433276

一、状态行:

状态码会反应 HTTP 请求的结果;短语会大概说一下原因。

  • HTTP 状态消息
    • 1xx: 信息。100收到部分请求。
    • 2xx:成果。200 请求成功(其后是对get、post请求的应答文档)
    • 3xx:重定向。301永久重定向,302 转移至临时url(临时重定向)
    • 4xx:客户端错误。403禁止访问,404无法找到被请求页面
    • 5xx:服务器错误

二、首部:key value。Retry-After表示,告诉客户端应该在多长时间以后再次尝试。Content-Type,表示返回的是 HTML,还是 JSON。

持久连接:http1.1支持

HTTP协议采用“请求-应答”模式,当时用普通模式,即非持久连接的模式时,每个请求/应答客户端和服务器都要新建一个连接,完成之后立即断开连接(无连接的协议)

当使用Keep-Alive模式(持久连接)时,Keep-Alive功能使客户端到服务端的连接持久有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。

http管线化

通俗的讲,不用管线化的持久连接就是来一个请求就响应一个;

而管线化则是,把请求打包发过去,一起响应。

三、HTTPS是什么?SSL过程。

HTTPS并不是一个新协议,HTTPS就是HTTP加上加密处理(一般是SSL安全通信线路,TLS)+认证+完整性保护

原本HTTP先和TCP(假定传输层是TCP协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间。

HTTPS 在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的简单描述如下:

一、首先HTTP请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA加密)等进行校验;

二、客户端如果校验通过后,生成随机数,随机数使用公钥进行加密(RSA加密);

三、消息体的摘要进行MD5算法加密,此时就得到了RSA签名;

四、消息发送给服务端,只有服务端(RSA私钥)能解密。

五、解密得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)。

四、GET和POST的区别

本质:get和post就是TCP连接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

  • 1使用:get参数通过url传递,post参数放在request body中
  • 2限制:
    • get参数是有长度限制的,而post没有
    • get请求支持支持ASCII字符,而post支持标准字符集,可以传递中文字符
  • 3安全性:
    • get参数直接暴露在url中,较为不安全,不能传递敏感信息
    • get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留
  • 4数据包:✨get产生一个TCP数据包,post产生两个TCP数据包:
    • GET :浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
    • POST:浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
    • (据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。)

总结:对于get和post的区别,get传递数据如同是写在脸上,post传递数据如同放在肚子里,脸上不能放太多东西,也不能放隐私东西,肚子里就无所谓啦~

五、浏览器进行一次网络请求都需要哪些步骤?

建立TCP连接->发送请求行->发送请求头->(到达服务器)发送状态行->发送响应头->发送响应数据->断TCP连接

  • 1、域名解析:
    • 包含com的时候浏览器认为其不是关键字而是URL,未指明协议的时候开头加上HTTP
    • 浏览器查找是否存有域名的 IP 地址,没找到后发送给 DNS 服务器(本地host,电信),让它解析为 IP 地址
  • 2、TCP的三次握手:建立连接
  • 3、web浏览器向 web 服务器发送一个 HTTP 请求
    • HTTP请求格式:GET(请求) /sample/hello.jsp(URI) HTTP/1.1(版本)
    • 过程:请求行+请求头,最后发送一行空白行通知服务器结束信息发送
  • 4、Web服务器应答
    • 到达负载均衡器的IP地址之后,如果是GTTPS,则返回307告诉需要重定向,然后会发送TLS握手
    • HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码
    • 过程:应答行+应答头+发送数据
  • 4、浏览器解析html代码,并请求html代码中的资源
    • 服务器的永久重定向响应:“https://www.google.com/” 而非“http://google.com/”。
    • 解析 —— HTML,CSS,JS
    • 渲染 —— 构建 DOM 树 -> 渲染 -> 布局 -> 绘制

基础知识

  • 讲述一下计算机网络的七层

    • 应用层:发起请求的逻辑
    • 表示层
    • 会话层 TLS
    • 传输层——TCP
    • 网络层——数据路由包IP——路由器
    • 数据链路层——帧,数据包的容器——交换机
    • 物理层——比特流——网卡、集线器
  • 网际层协议:IP协议、ICMP协议、ARP协议、RARP协议
    传输层协议:TCP协议、UDP协议
    应用层协议:FTP、Telnet、SMTP、HTTP、RIP、NFS、DNS

如果将 TCP 比作成熟的社会人,UDP 则是头脑简单的小朋友。

UDP用户数据报协议: 面向无连接

包:源端口号和目标端口号+数据

UDP 是一个简单的传输层协议。和 TCP 相比,UDP 有下面几个显著特性:

  • UDP 缺乏可靠性。UDP 本身不提供确认,序列号,超时重传等机制。UDP 数据报可能在网络中被复制,被重新排序。即 UDP 不保证数据报会到达其最终目的地,也不保证各个数据报的先后顺序,也不保证每个数据报只到达一次
  • UDP 数据报是有长度的。每个 UDP 数据报都有长度,如果一个数据报正确地到达目的地,那么该数据报的长度将随数据一起传递给接收方。而 TCP 是一个字节流协议,没有任何(协议上的)记录边界。
  • UDP 是无连接的。UDP 客户和服务器之前不必存在长期的关系。UDP 发送数据报之前也不需要经过握手创建连接的过程。
  • UDP 支持多播和广播。

适合情况:

  • 流媒体的协议:直播
  • 实时游戏

  • 移动通信领域

TCP传输控制协议: 面向连接

image-20190313004353741

分析:

源端口号和目标端口号:数据知道发给哪个应用。

包的序号:那个包先来,那个后来

确认序号:发出去的包应该有确认,无确认再发一次。

状态位:SYN 是发起一个连接,ACK 是回复,RST 是重新连接,FIN 是结束连接等。是面向连接的,因而双方要维护连接的状态,这些带状态位的包的的发送,会引起双方的状态变更。

窗口大小:标识自己当前能够的处理能力,让对方根据自己窗口来确定发送速度。

拥塞控制:控制自己发送的快慢。

TCP 的三次握手

  • TCP 提供一种面向连接的、可靠的字节流服务。 TCP 也不是 100% 可靠的协议,它所能提供的是数据的可靠递送或故障的可靠通知。

作用:三次握手除了双方建立连接外,还获取TCP包的序号。

“请求 -> 应答 -> 应答之应答”

A:您好,我是 A。

B:您好 A,我是 B。

A:您好 B。

状态时序图:

image-20190324203513867

三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。在 socket 编程中,客户端执行 connect() 时。将触发三次握手。

  • 第一次握手(SYN=1, seq=x):

    客户端发送一个 TCP 的 SYN 标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号 X,保存在包头的序列号(Sequence Number)字段里。

    发送完毕后,客户端进入 SYN_SEND 状态。

  • 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):

    服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己 ISN 序列号,放到 Seq 域里,同时将确认序号(Acknowledgement Number)设置为客户的 ISN 加1,即X+1。

    发送完毕后,服务器端进入 SYN_RCVD 状态。

  • 第三次握手(ACK=1,ACKnum=y+1)

    客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1

    发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,TCP 握手结束。

以上就是TCP建立连接的三次握手过程,以上流程还需要补充的是:

  • 对于建链接的3次握手,主要是要初始化Sequence Number 的初始值。通信的双方要互相通知对方自己的初始化的Sequence Number(缩写为ISN:Inital Sequence Number)——所以叫SYN,全称(同步seq号)Synchronize Sequence Numbers。也就上图中的 x 和 y。这个号要作为以后的数据通信的序号,以保证应用层接收到的数据不会因为网络上的传输的问题而乱序(TCP会用这个序号来拼接数据)。
  • 第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。

四次挥手

A:B 啊,我不想玩了。

B:哦,你不想玩了啊,我知道了。(半关闭)

B:A 啊,好吧,我也不玩了,拜拜。

A:好的,拜拜。

image-20190324205210107

客户端或服务器均可主动发起挥手动作,在 socket 编程中,任何一方执行 close() 操作即可产生挥手操作。过程:

  • 第一次挥手(FIN=1,seq=x)

    假设客户端想要关闭连接,客户端发送一个 FIN 标志位置为1的包,表示自己已经没有数据可以发送了,但是仍然可以接受数据。

    发送后,客户端进入 FIN_WAIT_1 状态。

  • 第二次挥手(ACK=1,ACKnum=x+1)

    服务器收到 FIN 包,发送一个确认包,表明自己接受到了客户端关闭连接的请求,但还没有准备好关闭连接。

    发送后,服务器端进入 CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 状态,等待服务器端关闭连接。

  • 第三次挥手(FIN=1,seq=y)

    服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN 置为1。

    发送完毕后,服务器端进入 LAST_ACK 状态,等待来自客户端的最后一个ACK。

  • 第四次挥手(ACK=1,ACKnum=y+1)

    客户端接收到服务器端的关闭请求,发送确认包,进入 TIME_WAIT状态,等待可能需要重传的 ACK 包。

    服务器端接收到这个确认包之后,关闭连接,进入 CLOSED 状态。

    客户端等待了某个固定时间(两个最大段生命周期,2MSL)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED 状态。

四次挥手的原因:

  • TCP连接是全双工的,即一端接收到FIN报时,对端虽然不再能发送数据,但是可以接收数据,所以需要两边都关闭连接才算完全关闭了这条TCP连接。

DDOS攻击

典型的场景是DDOS攻击,也可以说是tcp的SYN Flood攻击,又叫洪水攻击; 根据上面的分析,我们知道tcp的握手环节是比较耗时的,当client端发起连接请求的时候,server端会回应,然后等待client的最终确认信息,默认情况下的linux会等待1到63s这样(如果有特殊的设置,这个时间可以到1-2min这样),默认最长是63s之后才会断开,之前这段时间内属于半连接的状态,服务器不会丢弃掉这些连接,而是会等,试想如果有一个人突然想你的server瞬间之内发送了几千万个连接请求,但是对服务端的响应不做理睬,这样很容易就导致我们正常的tcp连接进不去,从而出现服务拒绝的情况,而他只需要一个简简单单的脚本去给你丢包就可以了,这种情况就会导致服务器对正常的客户端表现为宕机。。此种攻击的成本比较低,但是防护却特别麻烦,因为你必须要保证正常的不能因为访问次数的提高而出现拒绝。

http协议

1234…7
IRIS

IRIS

64 日志
19 分类
22 标签
GitHub E-Mail
0%
© 2019 IRIS | Site words total count: 72.2k