自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 资源 (12)
  • 收藏
  • 关注

原创 网络协议系列十八 - 网络爬虫/HTTP缓存/IPv6

本文仅仅是常见协议的扫盲,具体技术点可参考其他相关文档。一、VPNVPN(Virtual Private Network),虚拟私人网络。它可以在公共网络上建立专用网络,进行加密通讯。1.1. 作用提高上网的安全性(加密数据)保护公司内部资料隐藏上网者的身份(VPN Server转发数据)突破网站的地域限制有些网站针对不同地区的用户展示不同的内容突破网络封锁(科学上网)因为有GWF(Great Firewall of China,中国长城防火墙)的限制,有些网站在国内上不

2021-06-25 09:54:52 897

原创 网络协议系列十七 - WebSocket/FTP

WebSocket、FTP、RESTful、SMTP、IMAP、POP等协议很多人可能仅仅听说过,但没有了解过。一、ARP/RARP/ICMPARP(Address Resolution Protocol),地址解析协议。通过IP地址获取MAC地址。RARP(Reverse Address Resolution Protocol),逆地址解析协议。使用与ARP相同的报头结构作用与ARP相反,用于将MAC地址转换为IP地址后来被BOOTP、DHCP所取代ICMP(Internet C

2021-06-25 09:50:07 825

原创 网络协议系列十六 - HTTP2/HTTP3

HTTP2、HTTP3各个版本之间的关联。一、HTTP协议的不足(HTTP/1.1)同一时间,一个连接只能对应一个请求(注意:不是建立多个连接,是多个请求只能在一个连接内队列等待)。针对同一个域名,大多数浏览器允许同时最多6个并发连接。只允许客户端主动发起请求(请求应答模式,即一个请求只能对应一个响应)。同一个会话的多次请求中,头信息会被重复传输。通常会给每个传输增加500~800字节的开销。如果使用Cookie,增加的开销有时会达到上千字节。1.1. SPDYSPDY(spe

2021-06-24 09:52:59 935

原创 网络协议系列十五 - HTTPS

HTTPS由网景公司于1994年首次提出。HTTPS是在HTTP的基础上使用SSL/TLS来加密报文,对窃听和中间人攻击提供合理的防护。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8CwE4hWY-1624499299124)(https://blog.idbeny.com/jv2po.png@normal)]一、HTTPSHTTPS(HyperText Transfer Protocol Secure),超文本传输安全协议。常称为HTTP over TLS、HTT

2021-06-24 09:50:09 762 1

原创 网络协议系列十四 - (非)对称加密/数字签名/证书

很多开发人员经常听说加解密,但对其中原理不太了解,今天我们就一起探讨一下常用的加密原理。一、对称加密在对称加密中(也叫对称密码),加密和解密使用的是同一个密钥。常见的对称加密算法:DES3DESAES1.1. DES(Data Encryption Standard)DES是一种将64bit明文加密成64bit密文的对称加密算法,密钥长度是56bit。规格上来说,密钥长度是64bit,但每隔7bit会设置一个用于错误检查的bit,因此密钥长度实质上是56bit。由于DES每次

2021-06-21 09:30:58 477

原创 网络协议系列十一 - 应用层

对于HTTP大家都不陌生,但发起HTTP请求的过程都发生了什么呢?一、应用层常见协议超文本传输协议:HTTP、HTTPS文件传输:FTP电子邮件:SMTP、POP3、IMAP动态主机配置:DHCP域名系统:DNS1.1. 域名(Domain Name)由于IP地址不方便记忆,并且不能表达组织的名称和性质,人们设计出了域名(比如baidu.com)。但实际上,为了能够访问到具体的主机,最终还是得知道目标主机的IP地址。为什么不直接用域名?IP地址固定4个字节,域名随随便便都至少10几个字

2021-06-18 10:10:29 532

原创 网络协议系列十 - 传输层-TCP连接

TCP经典面试题:三次握手四次挥手。一、序号、确认号发送HTTP请求前先建立连接(三次握手):发送方发送数据时,并不是每次发送TCP段都需要发送确认信号的,上图中每段都发送确认信号只是为了让我们更好的理解发送流程。序号是发送方为了让接收方知道当前发送的是哪一块数据。真正的序号并不是从1开始的(相对值),而是一个很大的值(原始值),只不过为了方便记忆及学习,wireshark已经计算处理。序号是在建立连接时已经确定的。ACK号是接收方告诉发送方下一次发送数据从哪一个字节开始。序号原始值为什

2021-06-16 09:12:00 180

原创 网络协议系列九 - 传输层-TCP之流量控制和拥塞控制

如果接收方的缓存区满了,发送方还在疯狂发送数据,接收方只能把收到的数据包丢掉,大量的丢包会极大浪费网络资源,所以要进行流量控制。一、流量控制流量控制:让发送方的发送速率不要太快,让接收方来得及接收处理。原理:通过确认报文中窗口字段来控制发送方的发送速率;发送方的发送窗口大小不能超过接收方给出的窗口大小;当发送方收到接收窗口的大小为0时,发送方就会停止发送数据。有一种特殊情况,一开始,接收方给发送方发送了0窗口的报文段。后面,接收方又有了一些存储空间,给发送方发送的非0窗口的报文段丢失了。此时发

2021-06-16 09:10:48 1524

原创 网络协议系列八 - 传输层-TCP之可靠传输

TCP比UDP复杂,也是一个难点,在面试过程中也是会被大概率提问的。一、TCPTCP(Transmission Control Protocol):传输控制协议。TCP的几个要点:可靠传输、流量控制、拥塞控制、连接管理(建立和释放连接)。也正因为这几点使得首部变得很复杂。1.1. 数据偏移(Reserved)占4位,取值范围是0x0101 ~ 0x1111。乘以4就是首部长度(Header Length)。所以取值范围是5 ~ 60字节,由于首部固定部分占用20字节,所以可选部分至多占用4

2021-06-15 09:25:17 755

原创 网络协议系列七 - 传输层-UDP

传输层有两个协议是每一个程序员必然知道的:UDP、TCP。一、传输层(Transport)TCP和UDP的区别:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JvlOcP1G-1623720028115)(http://blog.idbeny.com/e2hys.png@normal)]1.1. 连接性TCP是面向连接,也就是说TCP传输必须先要建立连接才能通信,建立连接就是我们熟知的“三次握手”。TCP在数据传输完毕后需要断开连接,因为服务器会有端口不断的监听本

2021-06-15 09:21:20 284

原创 网络协议系列六 - 网络层

网络层在OSI中的比重很大,几乎所有的网络请求库都会涉及到。一、网络层(Network)网络层数据包(IP数据包:Packet)由首部、数据2部分组成。数据:很多时候是由传输层传递下来的数据段(Segment)。1.1. 版本(Version)占4位(0b0100:IPv4,0b0110:IPv6)。1.2. 首部长度(Header Length)占4位,标识该IP头部有多少个32bit字(4字节),因为4位最大能表示15,所以IP头部最长是60字节。最小值:0b0101(5 * 4

2021-06-11 11:36:07 604 3

原创 网络协议系列五 - 物理层/数据链路层

OSI七层模型中的物理层和数据链路层处于模型最底部,可以说是网络协议的基层。一、物理层(Physical)物理层定义了接口标准、线缆标准、传输速率、传输方式等(比如路由器定义的接口是做什么的、水晶头怎么排布、光缆线的作用等)。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1LDeOKLA-1623382316679)(http://blog.idbeny.com/bq7lc.jpeg@normal)]1.1. 模拟信号、数字信号模拟信号(Analog Sig

2021-06-11 11:33:16 1325 1

原创 网络协议系列四 - 路由/名词解释

在不同网段之间转发数据,需要有路由器的支持。一、路由默认情况下,路由器只知道跟它直连的网段,非直连的网段需要通过静态路由、动态路由告诉它。1.1. 静态路由管理员手动添加路由信息适用于小规模网络类型C代表直连(connected)类型S代表静态(static)路由器查找路由器(下一跳):路由器0和路由器1的接口IP地址必须在同一个网段才能通信,并且IP地址不能和已连设备的IP冲突。静态路由配置时,一般情况下是配置网段。如果想指定设备IP,可以设置网络(网段)为指定IP,

2021-06-09 09:34:53 1276

原创 网络协议系列三 - MAC地址/IP地址/子网掩码

MAC/IP/子网掩码在网络中非常重要,只要有网络的地方必然都会涉及这三个概念。一、MAC每一个网卡都有一个6字节(48bit)的MAC地址(Media Access Control)。全球唯一,固化在了网卡的ROM中,由IEEE802标准规定前3个字节:OUI(Organizationally Unique Identifier),组织唯一标识符,由IEEE的注册管理机构分配给厂商后三个字节:网络接口标识符,由厂商自行分配OUI查询http://standards-oui.

2021-06-09 09:34:24 4963

原创 网络协议系列二 - 集线器/网桥/交换机/路由器

本文假设你具备HTML+CSS+JS+Java基础(知道基本语法及如何使用即可)。一、新建Java项目并部署我们自己搭建一个简单的登录页面和服务,以此了解客户端和服务端之间的数据交互流程。提示:路径、类名、资源名尽量不要出现中文或者特殊字符。1.1. 服务端(Java)新建空项目工程命名(工程名其实就是工程根目录文件夹名称)新建模块(一个工程是由多个模块组成的)在刚刚创建的模块src下新建一个java类(src是存放模块代码的)运行上.

2021-06-08 10:13:00 571 1

原创 网络协议系列一 - 基本认识

互联网的出现,彻底改变了人们的生活方式,足不出户就可以购物、聊天、看电影、买车票等。思考:数据是如何从一个设备传递到另一个设备的?这一切都是由网络协议来规定的。没有网络协议,就没有今天的互联网/物联网。一、搭建环境要想真正了解网络之间数据如何传输?协议的约束条件?就需要一套能够发起网络请求和处理请求的环境。1.1. 客户端使用浏览器即可(会基本的HTML+CSS+JS即可)。1.2. 服务端以Java为例。1.2.1. 必装工具JDK:https://www.oracle.co

2021-06-08 10:05:46 198

原创 Swift系列三十五 - 源码和第三方库

Swift 于 2015 年正式开源。一、目录简介Github:https://github.com/apple/swift几个可能会经常看的目录:docs:一些文档stdlib:Swift 源码lib:C++源码include:C++头文件标准库源码位置:https://github.com/apple/swift/tree/main/stdlib/public/core二、Metadata 分析文档:https://github.com/apple/swift/blob/m

2021-05-08 09:38:26 623 2

原创 Swift系列三十四 - 响应式编程(RxSwift的使用)

响应式编程(Reactive Programming,简称RP)也是一种编程范式,于1997年提出,可以简化异步编程,提供更优雅的数据绑定。一、初始响应式编程响应式编程一般与函数式融合在一起,所以也会叫做:函数响应式编程(Functional Reactive Programming,简称FRP)。比较著名的,成熟的响应式框架:ReactiveCocoa简称RAC,有OC、Swift版本官网:http://reactivecocoa.io/github:https://github.c

2021-05-08 09:34:49 1243 2

原创 Swift系列三十三 - 面向协议编程

面向协议编程(Protocol Oriented Programming,简称POP)是Swift的一种编程范式,Apple于2015年WWDC提出。在Swift的标准库中,能见到大量POP的影子。一、POP和OOP1.1. 回顾OOPSwift也是一门面向对象的编程语言(Object Oriented Programming,简称OOP)。OOP的三大特性:封装、继承、多态。继承的经典使用场景:当多个类(比如A、B、C类)具有很多共性时,可以将这些共性抽取到一个父类中(比如D类),最后A、B、

2021-05-08 09:33:53 789

原创 Swift系列三十二 - 函数式编程

函数式编程(Funtional Programming,简称FP)是一种编程范式,也就是如何编写程序的方法论。一、什么是函数式编程?1.1. 介绍主要思想: 把计算过程尽量分解成一系列可复用函数的调用。主要特征: 函数是"一等公民"(函数与其他数据类型一样的地位,可以赋值给其他变量,也可以作为函数参数、函数返回值)。函数式编程中几个常用的概念:Higher-Order Function、Function CurryingFunctor、Applicative Functor、Monad

2021-05-08 09:31:29 744 1

原创 Swift系列三十一 - 多线程

多线程在Swift中也是首先使用GCD。一、异步1.1. GCD开启异步线程示例代码:class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() print("主线程", Thread.current) DispatchQueue.global().async {

2021-05-07 09:42:28 1285

原创 Swift系列三十 - 从OC到Swift(二)

协议、关联对象、KVO等Swift和OC的关系。一、协议1.1. 只能被class继承的协议示例代码:protocol Runnable1: AnyObject { }protocol Runnable2: class { }@objc protocol Runnable3 { }被@objc修饰的协议,还可以暴露给OC去遵守实现。1.2. 可选协议正常情况下,Swift定义的协议内容都需要实现,如果需要可选实现,可以定义一个协议扩展,在扩展中空实现需要可选实现的协议。也可以通过@o

2021-05-07 09:40:50 636 2

原创 Swift系列二十九 - 从OC到Swift(一)

现在大部分项目还是纯OC,即使迁移到Swift也只能是一点点模块过度,那么OC和Swift有什么样的区别呢?两者之间怎样相互调用?一、注释// MARK:类似于OC中的#pragma mark// MARK: -类似于OC中的#pragma mark-// TODO:用于标记未完成的任务// FIXME: -用于标记待修复的问题#warning("msg")用来做全局提示示例代码:public class Person { // MARK: - 属性 var age =

2021-05-07 09:38:36 615

原创 Swift系列二十八 - 数组

Swift中的数组有一些高级API非常好用(用法类似JavaScript)。一、Array的常见操作基础代码:var arr = [1, 2, 3, 4]print(arr) // 输出:[1, 2, 3, 4]1.1. map(映射)遍历每一个元素,元素在函数(闭包表达式)中处理完成后把返回值放到新的数组,返回一个新数组。示例代码:var arr2 = arr.map { element -> Int in return element * 2}print(a

2021-05-06 10:16:32 619

原创 Swift系列二十七 - 字符串

Swift的字符串类型String,跟OC的NSString,在API设计上还是有较大差异的。一、字符串内容操作1.1. 字符串的拼接示例代码:// 空字符串var emptyStr1 = ""var emptyStr2 = String()var str: String = "1"// 拼接str.append("_2")// 重载运算符+str = str + "_3"// 重载运算符+=str += "_4"// \()插值str = "\(str)_5"// 长度

2021-05-06 10:15:08 521 2

原创 Swift系列二十六 - 模式匹配

一、字面量(Literal)了解模式之前,我们先看下什么是字面量。var age = 10var isShow = falsevar name = "Jack"上面代码中的10,false,"Jack"就是字面量。1.1. 字面量类型常见字面量的默认类型:public typealias IntegerLiteralType = Intpublic typealias FloatLiteralType = Doublepublic typealias BooleanLiteralTyp

2021-05-06 10:14:05 511 1

原创 Swift系列二十五 - 内存管理(二)

谈内存必然离不开指针的概念,指针既是难点也是重点。一、指针简介Swift中也有专门的指针类型,这些都被定性为Unsafe(不安全的),常见的有以下4种类型:UnsafePointer<Pointee>:类似于const Pointee *(只读的泛型指针)UnsafeMutablePointer<Pointee>:类似于Pointee *(可读可写的泛型指针)UnsafeRawPointer:类似于const void *(只读的原始类型指针)UnsafeMutabl

2021-04-30 09:43:45 479

原创 Swift系列二十四 - 内存管理(一)

和OC一样,Swift也是采取基于引用计数的ARC内存管理方案(针对堆空间)。一、引用介绍Swift的ARC中有3中引用:强引用(strong reference):默认情况下,引用都是强引用弱引用(weak reference):通过weak定义弱引用无主引用(unowned reference):通过unowned定义无主引用1.1. 强引用示例代码:class Person { deinit { print("Person.deinit") }}

2021-04-30 09:42:25 990 1

原创 Swift系列二十三 - 访问控制

在访问权限控制这块,Swift提供了5个不同的访问级别。一、访问控制关键词以下是从高到低排列(实体:被访问级别修饰的内容;模块:本项目或其他第三方库):open:允许在定义实体的模块、其他模块中访问,允许其他模块进行继承、重写(open只能用在类、类成员上)public:允许在定义实体的模块、其他模块中访问,不允许其他模块进行继承、重写internal:只允许在定义实体的模块中访问,不允许在其他模块中访问fileprivate:只允许在定义实体的源文件中访问private:只允许在定义实体

2021-04-30 09:39:48 263

原创 Swift系列二十二 - 扩展

Swift中的扩展有点类似于OC中的分类(Category)。扩展(Extension)可以为枚举、结构体、类、协议添加新功能(方法、计算属性、下标、初始化器(类只能扩展便捷初始化器)、嵌套类型、协议等等)。扩展不能做的事情:不能覆盖原有的功能不能添加存储属性、不能向已有的属性添加属性观察器不能添加父类不能添加指定初始化器,不能添加反初始化器……一、结构体1.1. Double为Double添加距离单位:extension Double { var km: Double

2021-04-29 09:45:00 900 4

原创 Swift系列二十一 - 高级运算符

如果对C++有了解的话,理解运算符重载(Operator Overload)就很简单。OC不支持运算符重载,但Swift支持。一、溢出运算符(Overflow Operator)Swift的算数运算符出现溢出时会抛出运行时错误。示例代码一:print(Int8.min) // 输出:-128print(Int8.max) // 输出:127print(UInt8.min) // 输出:0print(UInt8.max) // 输出:255var a = UInt8.maxa += 1

2021-04-29 09:43:01 344

原创 Swift系列二十 - String和Array底层分析

String和Array用起来很简单,但底层是如何存储的呢?一、String1.1. 1个String变量占用多少内存?示例代码:var str1 = "0123456789"print(MemoryLayout.size(ofValue: str1))// 输出:16print(Mems.memStr(ofVal: &str1))/* 输出: 0x3736353433323130 0xea00000000003938 */结论: 一个String变量占用16个字节。

2021-04-29 09:37:10 612

原创 Swift系列十九 - 泛型

泛型在Java,C++等多个语言中都有,C#把泛型发挥的淋漓尽致,OC中也有泛型(比如OC中的数组,你可以限制他里面装的是NSString类型),Swift中泛型的使用范围更加多元化。一、泛型函数1.1. 泛型可以将类型参数化,提高代码复用率,减少代码量示例代码:var n1 = 10var n2 = 20func swapValues(_ a: inout Int, _ b: inout Int) { (a, b) = (b, a)}swapValues(&n1, &am

2021-04-29 09:35:34 350

原创 Swift系列十八 - 错误处理

在很多编程语言中都有异常(Exception)处理,Swift官方使用的是错误(Error)来描述的。但两者定义本质是一样的。一、定义错误开发过程中常见的错误:语法错误(编译报错)逻辑错误运行时错误(可能会导致闪退,一般也叫做异常)……示例代码一:func divide(_ num1: Int, _ num2: Int) -> Int { num1 / num2}print(divide(20, 10))// 输出:2上面示例代码正常运行,但是如果把num2传值

2021-04-29 09:33:27 481

原创 Swift系列十七 - 任意类型

任意类型、泛型、强制类型转换在开发中也是经常用到。一、Any、AnyObjectSwift提供了2种特殊的类型:Any,AnyObject。Any: 可以代表任意类型(枚举、结构体、类,也包括函数类型)AnyObject: 可以代表任意类类型(在协议后面写上:AnyObject代表只有类能遵守这个协议)示例代码一:class Person { }var p: Any = 10p = "idbeny"p = Person()如果变量p后面是具体类型或不写类型就不能编译通过。示例代码二

2021-04-29 09:31:42 732

原创 Swift系列十六 - 协议

协议在Swift中极其重要,可以说任何项目开发都会用到协议。一、协议(Protocol)的定义协议可以用来定义方法、属性、下标的声明,协议可以被枚举、结构体、类遵守(多个协议之间用逗号隔开)。示例代码:// 定义协议protocol Drawable { var x: Int { get set } var y: Int { get } func draw() subscript(index: Int) -> Int { get set }}protoc

2021-04-29 09:29:56 684 1

原创 Swift系列十五 - 可选链

多个可选类型组合在一起调用就会形成可选链条。一、可选链(Optional Chaining)1.1. 什么是可选链示例代码:class Car { var price = 0 }class Dog { var weight = 0 }class Person { var name: String = "" var dog: Dog = Dog() var car: Car? = Car() func age() -> Int { 30 } func

2021-04-28 09:51:37 217

原创 Swift系列十四 - 初始化器

类、结构体、枚举都可以定义初始化器。但是枚举一般很少用来手动定义初始化器。一、初始化器类有2中初始化器:指定初始化器(designated initializer)、便捷初始化器(convenience initializer)。格式:// 指定初始化器init(parameters) { statements}// 便捷初始化器convenience init(parameters) { statements}示例代码一:class Size { var

2021-04-28 09:50:51 269

原创 Swift系列十三 - 多态及实现原理

面向对象语言三大特性:封装、继承、多态。在OC中多态是用Runtime实现的,在C++中用虚表实现多态,今天我们了解一下Swift中的多态及其原理(和**C++**类似,都是使用虚表)。什么是多态?父类指针指向子类对象就是多态。一、结构体和类函数调用比较1.1. 结构体通过汇编分析可以看到,因为不存在继承重写行为,调用的函数地址都是在编译时期确定的。1.2. 类speak函数调用栈:eat函数调用栈:sleep函数调用栈:类生成的汇编代码非常多,相比结构体复杂了很多,并且通过

2021-04-28 09:50:04 559

原创 Swift系列十二 - 继承

继承是面向对象语言的三大特性之一。一、继承特性值类型(枚举、结构体)不支持继承,只有类支持继承。没有父类的类,称为基类Swift并没有像OC、Java那样的规定:任何类最终都要继承自某个基类子类可以重写父类的下标、方法、属性,重写必须加上override关键字二、内存结构示例代码:class Animal { var age = 0}let a = Animal()a.age = 10print(Mems.size(ofRef: a)) // 输出:32

2021-04-28 09:48:58 786 1

deviceSupport_12.0(16A5288q)

could not find developer disk image Xcode配置包iOS12.0(16A5288q)

2018-06-05

deviceSupport_11.3(15E5178d)

could not find developer disk image Xcode配置包iOS11.3(15E5178d)

2018-06-05

deviceSupport_11.3(15E217)

could not find developer disk image Xcode配置包iOS11.3(15E217)

2018-06-05

deviceSupport_11.2(15C107)

could not find developer disk image Xcode配置包iOS11.2(15C107)

2018-06-05

deviceSupport_10.0

could not find developer disk image Xcode配置包iOS10.0

2018-06-05

deviceSupport_9.3

could not find developer disk image Xcode配置包iOS9.3

2018-06-05

deviceSupport_8.1

could not find developer disk image Xcode配置包iOS8.0

2018-06-05

deviceSupport_8.0

could not find developer disk image Xcode配置包iOS8.0

2018-06-05

PhpStorm官方绿色汉化包下载

PhpStorm汉化包

2017-02-07

Xcode iOS10.2配置包

Xcode iOS10.2配置包,免费下载!

2017-02-04

Xcode iOS10.0配置包

Xcode iOS10.0配置包,免费下载。 具体安装步骤请到我的csdn blog

2016-10-08

Xcode iOS9.3配置包

Xcode iOS9.3配置包,免费下载!

2016-03-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除