生成SSH密钥

参考SSH Key for Github

1
2
3
4
5
$cd ~/.ssh
$ssh-keygen -t rsa -C "wenghengcong@***.com"
....
一路回车
$ssh-add id_rsa_github

经过上面之后,得到:id_rsa和id_rsa.pub两个文件。

将公钥上传到服务器

有两种方式:scpssh-copy-id,分别如下:

##scp

1
$ scp 本地公钥路径 user@ip:authorized_keys路径

根据自己需要修改以上命令,注意ip和authorized_keys路径有个**:**号。

1
$scp .ssh/id_rsa.pub root@106.14.*****:/root/.ssh/authorized_keys
阅读全文 »

引子

库,是我们在开发中的重要角色,库的作用在于代码共享、模块分割以及提升良好的工程管理实践。

其中库又分为静态库和动态库,静态库链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。

framework-static

动态库链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

阅读全文 »

本文主要论述:

一、如何创建一个私有的索引库,类似于Cocoapod master Specs库,一众主流开源库都在此处“备案”。

二、创建私有库,需要代码共用、协同编写,创建私有库,通过Cocoapods来协作,简单易用。

目的,在于解决公司内部库代码管理,最终目的实现模块化开发。

阅读全文 »

本篇文章讲述Cocoapods的安装与使用,也可以从官方指南开始。

一、CocoaPods

CocoaPods是管理iOS项目中第三方开源库的工具,简单易用。

Cocoapods安装有Ruby环境,Mac本身配置有ruby环境,如果需要安装多个ruby版本,可以参考Tool:Ruby-install-for-Mac

二、安装

假如安装了多个Xcode,需要:

1
$ sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

2.1 安装Cocoapods

1
2
3
$ sudo gem install cocoapods
//若需要制定版本
$ sudo gem install cocoapods -v 版本号
阅读全文 »

简述

参考:RFC2109 RFC6256

HTTP Cookie(也叫Web cookie或者浏览器Cookie)是服务器发送到用户浏览器并保存在浏览器上的一块数据,它会在浏览器下一次发起请求时被携带并发送到服务器上。比较经典的,可以它用来确定两次请求是否来自于同一个浏览器,从而能够确认和保持用户的登录状态。Cookie的使用使得基于无状态的HTTP协议上记录稳定的状态信息成为了可能。

一、Cookie

参考:HTTP Cookie

阅读全文 »

简述

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTPS的主要思想是在不安全的网络上创建一安全信道,并可在使用适当的加密套件和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的防护。

HTTPS的信任继承基于预先安装在浏览器中的证书颁发机构(如VeriSign、Microsoft等)(意即“我信任证书颁发机构告诉我应该信任的”)。因此,一个到某网站的HTTPS连接可被信任,当且仅当:

  1. 用户相信他们的浏览器正确实现了HTTPS且安装了正确的证书颁发机构;

  2. 用户相信证书颁发机构仅信任合法的网站;

  3. 被访问的网站提供了一个有效的证书,意即,它是由一个被信任的证书颁发机构签发的(大部分浏览器会对无效的证书发出警告);

  4. 该证书正确地验证了被访问的网站(如,访问https://example时收到了给“Example Inc.”而不是其它组织的证书);

  5. 或者互联网上相关的节点是值得信任的,或者用户相信本协议的加密层(TLS或SSL)不能被窃听者破坏。

    阅读全文 »

URL

1. URL的组成

URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。

URL的一般语法格式为:(带方括号[]的为可选项):

scheme :// hostname[:port] / path / [;parameters][?query]#fragment

image-20190122163554579

阅读全文 »

一、请求

1.1 消息结构

img

1
2
3
4
5
6
7
GET /docs/index.html HTTP/1.1
Host: www.nowhere123.com
Accept: image/gif, image/jpeg, */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
(blank line)

注意:不管是请求还是响应,在报文格式中,每行都会有回车换行符!

阅读全文 »

一、历史

1.1 概述

超文本传输协议英文HyperText Transfer Protocol缩写HTTP)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。

HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)制定标准,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。

2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。

阅读全文 »

在上篇介绍了线程安全隐患后,也说明了同步的工具:

  • 原子操作;
  • 内存屏障和volatile变量;

这篇文章会着重介绍各种各样的锁,以及它们之间的区别与联系。

本文介绍的锁以及其他的同步方案,如下图所示:

在介绍以上同步方案的时候,示例仍然以上篇文章中提出的示例——存钱取钱和卖票为例,进行各种同步方案的演示,本文代码——线程同步方案

阅读全文 »

程序中多个线程的存在引发了多个执行线程安全访问统一资源的潜在问题。两个或多个线程同时修改同一资源有可能以意想不到的方式互相干扰。

其中,多线程访问的同一资源,但该资源又只能被一个线程访问的资源称作为临界资源

这种干扰会带来意想不到的结果:

  • 程序性能问题或崩溃;
  • 数据错乱和数据安全;

为了避免在访问同一资源引起的这种线程间干扰——保护线程安全。

涉及到线程安全时,一个好的设计是最好的保护。避免共享资源,并尽量减少线程间的相互作用,这样可以让它们减少互相的干扰。但是一个完全无干扰的设计是不可能的。在线程必须交互的情况下,你需要使用同步工具,来确保当它们交互的时候是安全的。

在macOS和iOS体系下,同步工具有下面几种:

  • 原子操作;
  • 内存屏障和volatile变量;

本文针对以上内容会进行逐一阐述。

阅读全文 »

在上一篇文章中,了解进程及线程的基础知识,我们在本文探讨在iOS开发中所遇到的多线程方案,以及方案中涉及的相关概念。

一、多线程的方案

image-20181229170008501

以上方案,除去pthread跨平台的方案,其他基于Objective-C苹果独有的方案,我们将在后面系列的文章中逐一阐述。

阅读全文 »