月度归档: 2021 年 3 月

python表情包爬虫

python表情包爬虫

 

 

文章目录

一、需要用到的模块

二、开始写代码

1.创建保存图片的文件夹

2.创建请求头

3.代码主体

4.创建循环

完整代码

一、需要用到的模块

import requests

import os

from bs4 import BeautifulSoup

 

还需要有一个 lxml库 但不需要导入

BeautifulSoup 在 beautifulsoup4 的包下

 

二、开始写代码

1.创建保存图片的文件夹

if not os.path.isdir(“./img/”): #如果当前目录下没有img文件夹

os.mkdir(“./img/”) #创建img文件夹

1

2

2.创建请求头

headers={

‘User-Agent’:’Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0′

}

 

那么为什么要创建请求头呢,因为在网站访问的过程中,有大部分网站会对当前请求做验证,来判断当前的请求是否合法(不是使用浏览器来获取网站数据的话会被认为非法请求)。如果不添加请求头的话,可能会出现当前网站没有访问权限。

 

提示:请求头的内容可用Burpsuite来抓取%title插图%num

 

 

3.代码主体

def pa(num):

url = ‘https://fabiaoqing.com/biaoqing/lists/page/’+str(num)+’.html’ #构造url

rp = requests.get(url,headers).text #请求url 用文本返回

soup = BeautifulSoup(rp,’lxml’) #构建soup

img_list = soup.find_all(‘img’,class_=’ui image lazy’) #筛选所有img标签 条件为class=xxx

for img in img_list:

img_url = img[‘data-original’] #获取这个属性的内容

img_title = img[‘title’]

print(img_url,img_title)

try:

with open(‘img/’+img_title + os.path.splitext(img_url)[-1],’wb’) as f: #图片文件

image = requests.get(img_url).content #请求img_url 以二进制返回

f.write(image)

except:

pass

 

4.创建循环

for i in range(1,201): #网站有多少页就设置多少

pa(i)

# 将每一页的图片都抓下来

 

 

%title插图%num

完整代码

import requests #请求模块

import os

from bs4 import BeautifulSoup #抓取网站内容

if not os.path.isdir(“./img/”):

os.mkdir(“./img/”)

headers={‘User-Agent’:’Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0′}

#创造头

def pa(num):

url = ‘https://fabiaoqing.com/biaoqing/lists/page/’+str(num)+’.html’ #构造url

rp = requests.get(url,headers).text #请求url 用文本返回

soup = BeautifulSoup(rp,’lxml’) #构建soup

img_list = soup.find_all(‘img’,class_=’ui image lazy’) #筛选所有img标签 条件为class=xxx

for img in img_list:

img_url = img[‘data-original’] #获取这个属性的内容

img_title = img[‘title’]

print(img_url,img_title)

try:

with open(‘img/’+img_title + os.path.splitext(img_url)[-1],’wb’) as f:

image = requests.get(img_url).content #请求img_url 以二进制返回

f.write(image)

except:

pass

for i in range(1,201):

pa(i)

 

 

Android 系统架构图

Android 是一种基于 Linux 的开放源代码软件栈,为广泛的设备和机型而创建。下图所示为 Android 平台的主要组件。

%title插图%num

Linux 内核
Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和低层内存管理。
使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序。

硬件抽象层 (HAL)
硬件抽象层 (HAL) 提供标准界面,向更高级别的 Java API 框架显示设备硬件功能。HAL 包含多个库模块,其中每个模块都为特定类型的硬件组件实现一个界面,例如相机或蓝牙模块。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块。

Android Runtime
对于运行 Android 5.0(API 级别 21)或更高版本的设备,每个应用都在其自己的进程中运行,并且有其自己的 Android Runtime (ART) 实例。ART 编写为通过执行 DEX 文件在低内存设备上运行多个虚拟机,DEX 文件是一种专为 Android 设计的字节码格式,经过优化,使用的内存很少。编译工具链(例如 Jack)将 Java 源代码编译为 DEX 字节码,使其可在 Android 平台上运行。

ART 的部分主要功能包括:
预先 (AOT) 和即时 (JIT) 编译
优化的垃圾回收 (GC)
更好的调试支持,包括专用采样分析器、详细的诊断异常和崩溃报告,并且能够设置监视点以监控特定字段
在 Android 版本 5.0(API 级别 21)之前,Dalvik 是 Android Runtime。如果您的应用在 ART 上运行效果很好,那么它应该也可在 Dalvik 上运行,但反过来不一定。

Android 还包含一套核心运行时库,可提供 Java API 框架使用的 Java 编程语言大部分功能,包括一些 Java 8 语言功能。

原生 C/C++ 库
许多核心 Android 系统组件和服务(例如 ART 和 HAL)构建自原生代码,需要以 C 和 C++ 编写的原生库。Android 平台提供 Java 框架 API 以向应用显示其中部分原生库的功能。例如,您可以通过 Android 框架的 Java OpenGL API 访问 OpenGL ES,以支持在应用中绘制和操作 2D 和 3D 图形。

如果开发的是需要 C 或 C++ 代码的应用,可以使用 Android NDK 直接从原生代码访问某些原生平台库。

Java API 框架
您可通过以 Java 语言编写的 API 使用 Android OS 的整个功能集。这些 API 形成创建 Android 应用所需的构建块,它们可简化核心模块化系统组件和服务的重复使用,包括以下组件和服务:

丰富、可扩展的视图系统,可用以构建应用的 UI,包括列表、网格、文本框、按钮甚至可嵌入的网络浏览器
资源管理器,用于访问非代码资源,例如本地化的字符串、图形和布局文件
通知管理器,可让所有应用在状态栏中显示自定义提醒
Activity 管理器,用于管理应用的生命周期,提供常见的导航返回栈
内容提供程序,可让应用访问其他应用(例如“联系人”应用)中的数据或者共享其自己的数据
开发者可以完全访问 Android 系统应用使用的框架 API。

系统应用
Android 随附一套用于电子邮件、短信、日历、互联网浏览和联系人等的核心应用。平台随附的应用与用户可以选择安装的应用一样,没有特殊状态。因此第三方应用可成为用户的默认网络浏览器、短信 Messenger 甚至默认键盘(有一些例外,例如系统的“设置”应用)。

系统应用可用作用户的应用,以及提供开发者可从其自己的应用访问的主要功能。例如,如果您的应用要发短信,您无需自己构建该功能,可以改为调用已安装的短信应用向您指定的接收者发送消息。

云计算应用现状及其发展趋势和特点

1云计算简介

   1.1云计算的产生背景

21世纪初期,崛起的web2.0让网络迎来了新的发展高峰。网站或者业务系统所需要处理的业务量快速增长,例如视频在线或者照片共享,这样的网站需要为用户储存和处理大量的数据。这类系统所面临的重要问题是如何在用户数量快速增长的情况下快速扩展原有系统,随着移动终端的智能化、移动宽带网络的普及,将有越来越多的移动设备进入互联网,意味着与移动终端相关的IT系统会承受更多的负载,而列于提供数据服务的企业来讲,IT系统需要处理更多的业务量。由于资源的有限性,电力成本、空间成本、各种设施的维护成本快速上升,直接导致数据中心的成本上升,这就面临着怎样有效地利用这些资源,以及如何利用更少的资源解决更多的问题。

同时,随着高速网络连接的衍生,芯片和磁盘驱动器产品在功能增强的同时,价格也在变得甘益低廉,拥有成百上千台计算机的数掂中心也具备了快速为大量用户处理复杂问题的能力。技术上,分布式计算的日益成熟和应用,特别是网格计算的发展通过Internet把分散在各处的硬件、软件、信息资源连接成为一个巨大的整体,从而使得人们能够利用地理上分散于各处的资源,完成大规模的、复杂的计算和数据处理的任务。数据存储的快速增长产生了以GFS (Google File System)、SAN(Storage Area Network)为代表的高性能存储技术。服务器整合需求的不断升温推动了Xen等虚拟化技术的进步还有Web2.0的实现,Saas(Software as a Service)观念方兴未艾,多核技术的普及等,所有这些技术为产生更强大的计算能力和服务提供了可能。计算能力和资源利用效率的迫切需求,资源的集中化和技术的进步,推动云计算应运而生。

1.2 云计算的定义

云计算是一种基于互联网的超级计算模式。它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和各种软件服务。云计算实质上是通过互联网访问应用和服务,而这些应用或者服务通常不是运行在自己的服务器上,而是由第三方提供。它的目标是把一切都拿到网络上,云就是网络网络就是计算机。云计算依靠强大的计算能力,使得成千上万的终端用户不担心所使用的计算技术和接入的方式等,都能够进行有效的依靠网络连接起来的硬件平台的计算能力来实施多种应用。云计算的新颖之处在于它几乎可以提供无限的廉价存储和计算能力。

   2云计算现状

发展中的云计算服务:

目前,已经涌现的云计算服务形态包括从技术、半台供应商到软件服务提供商,从成熟的应用。程序到存储服务再到垃圾邮件过滤等,不一而足。根据不同服务的特性可以将云计算分为以下几种类型:

 2.1云计算基础架构

这类云计算提供底层的技术平台以及核心的云服务,是*为全面的云计算服务。Amazon、Google等推出的云计算服务可以归于这类。这种云计算服务形态将支撑起整个互联网的虚拟中心,使其能够将内存、1.0设备、存储和计算能力集中起来成为一个虚拟的资源池为整个网络提供服务。

  2.2云计算半台服务

这种形式的云计算也被称为半台即服务PaaS(P1atfbrm asa Service),它将开发环境作为服务来提供。这种形式的云计算可以使用供应商的基础架构来开发自己的程序,然后通过网络从供应商的服务器上传递给用户。典型的实例比如Salesforce com 的Force tom开发半台。

2.3 云计算软件服务

这种类型的云计算称之为软件即服务SaaS,它通过浏览器把程序传给用户。从用户的角度,这样会省去在服务器和软件授干义上的开支;从供应商的角度看,这样只需要维持一个程序就够了,减少了维护成本。Salesforce com是迄今为止这类服务*为有名的公司。SaaS在CRM、ERP中比较常用,Google Apps和Zoho Office也提供类似的服务。

   2.4 云计算API

这类服务供应商提供API (Application Programming Interface)让开发者能够开发更多基于互联网的应用,帮助开发商拓展功能和服务,而不是只提供成熟的应用软件他们的服务范围从提供分散的商业服务到Google Maps等的全套API服务。这与软件即服务有着密切的关系。

   2.5 云计算互动半台

该类云计算为用户和提供商之问的互动提供了一个半台。例如,RightScale利用Amazon EC2网络计算服务和s3网络存储服务的API提供一个操作面板和AWS (Amazon s WebServices)前端托管服务。

  3云计算发展趋势特点

云计算在2009年获得了长足的发展,人们的态度也逐渐由疑虑向更加接受的方向转变,云计算也逐步融入了企业领域,2010年,随着云计算厂商在标准、安全性上的努力、服务品质协议的提升以及鼓励厂商接受基于软件使用而非客户数量的价格度量等多方尝试,云计算有望能够成为关键性业务应用的平台。总的来说,未来云计算的发展离不开以下这五大发展趋势:

3.1云计算定价模式简单化

定价模式的简单化有助于云计算的进一步普及,这是非常好理解的,没有人希望去购买商品的时候面对繁杂的价格计算公式,而在这一点上,目前的云计算产品显然做的还不够。而在随后的一段时间内,这样的状况有望获得改善,用户有望看到自助式定价模式,用户可以和云计算厂商签订按照小时或分钟计费的包含一系列服务的协约。

  3.2软件授权模式转变获得供应商更广泛的认可

让应用软件厂商从传统的按用户收费的授权和营收模式向计量计费模式转移有一定的难度,但在云计算时代应用厂商却不得不面对这样的转变,这对于那些通过云计算提供托管虚拟桌面服务的公司来说尤其重要。现在,国外已经有一家名为Falls Church的公司整合了使用不同授权机制软件工具,基本配置只固定收取25美元月费。

有业界观察者认为云计算促进了应用业务的发展,但前提是其需要适用新的游戏规则。

   3.3 新技术将提升云计算的使用和性能

对于将业务放在千里之外的云计算云计算服务使用者和为用户提供云服务的厂商来说,愈加先进的云技术就代表着愈强的公司实力,因此,云技术的创新将会永无止尽。比如说致力于广域网优化的Riverbed Technology公司通过将硬件设备植入虚拟系统来供云计算使用的核心服务,这种趋势将促使更多的第三方公司按照云计算环境的需求来修改数据中心技术,这其中包括削减板载成本或者将设各迁移到云计算中。

3.4 云计算服务品质协议细化服务质量

要想让用户敢于将关键业务应用放在云计算平台上,粗放的服务协议显然无法让人放心,用户需要知道云计算厂商能否快速地将数据传遍全国、网络连接状况又能好到何种程度。对于激增的商业需求而言,性能的拓展是不够的,而云计算提供商能够多块地拓展性能也事关重要。IT经理们需要那种能够让他们高枕无忧的服务品质协议,细化服务品质是必然趋势。

 3.5 云服务性能监控将无处不在

云计算的普及不可避免地为云计算服务提供商带来了更大的压力,对于一个大型的云计算提供商而言,任何一个数据中心的小问题都会立即被人察觉。提供有关问题的全部报告以及来自与日俱增第三方近乎实时监控都会让云计算提供商背负巨大压力。届时有关云计算性能监控的报告如同高峰时期实时路况播报那样平常。

另外值得指出的是,随着云计算相关技术的不断发展与完善,用户对全球云计算的标准的要求也呼声渐高。在将来,天空中不会只有一朵云,而是有多片云,云与云之间的互联要靠标准的支撑才能得以实现。当云计算被普及应用的时候,云计算的标准也应该已经成熟,至于何时会制定出来,还取决于市场的发展情况和厂商的积*推动。至少在可预见的时间内,我们看到云计算已经被很多企业和政府探讨、验证并实践,许多厂商业看到了这一趋势,正在积*推动云计算的研究和市场推广。

  4 结束语

目前,云计算还处于起步阶段,毫无疑问云计算前景光明。它可能彻底改变用户对计算资源的使用方式,使得用户从以桌面为核心转向以Web为核心。在本文中,我们已经讨论了云计算的现有服务,对比分析了现有的云计算平台、随着云计算的发展,将会有更多的平台和服务类型不断涌现。

云计算不仅仅是一个计算问题,它需要融合许多技术和成果。本文探讨了云计算的部分关键技术,还有更多的技术需要继续研究。在Google与IBM的支持下,美国的多所大学参与到云计算的研究及教学中,包括卡内基梅隆大学、麻省理工学院、斯坦福大学、加州大学伯克利分校、马克兰大学和华盛顿大学等。国内也有学校加入到这个研究计划中。

我们相信,随着越来越多的参与者加入到云计算的研究与发展中,云计算会出现一些新的结构模式、开发平台和应用软件,推动云计算及其应用日益走向成熟。

云计算的应用领域有哪些?

云计算与大数据、人工智能是当前*火爆的三大技术领域,近年来我国政府高度重视云计算产业发展,其产业规模增长迅速,应用领域也在不断的扩展,从政府应用到民生应用,从金融、交通、医疗、教育领域到人员和创新制造等全行业延伸拓展。

云计算将在IT产业各个方面都有其用武之地,以下是云计算十个比较典型的应用场景!

1. IDC云

IDC云是在IDC原有数据中心的基础上,加入更多云的基因,比如系统虚拟化技术、自动化管理技术和智慧的能源监控技术等。通过IDC的云平台,用户能够使用到虚拟机和存储等资源。还有,IDC可通过引入新的云技术来提供许多新的具有一定附加值的服务,比如,PaaS等。现在已成型的IDC云有Linode和Rackspace等。

2. 企业云

企业云对于那些需要提升内部数据中心的运维水平和希望能使整个IT服务更围绕业务展开的大中型企业非常适合。相关的产品和解决方案有IBM的WebSphere CloudBurst Appliance、Cisco的UCS和VMware的vSphere等。

3. 云存储系统

云存储系统可以解决本地存储在管理上的缺失,降低数据的丢失率,它通过整合网络中多种存储设备来对外提供云存储服务,并能管理数据的存储、备份、复制和存档,云存储系统非常适合那些需要管理和存储海量数据的企业。

4. 虚拟桌面云

虚拟桌面云可以解决传统桌面系统高成本的问题,其利用了现在成熟的桌面虚拟化技术,更加稳定和灵活,而且系统管理员可以统一地管理用户在服务器端的桌面环境,该技术比较适合那些需要使用大量桌面系统的企业。

5. 开发测试云

开发测试云可以解决开发测试过程中的棘手问题,其通过友好的Web界面,可以预约、部署、管理和回收整个开发测试的环境,通过预先配置好(包括操作系统,中间件和开发测试软件)的虚拟镜像来快速地构建一个个异构的开发测试环境,通过快速备份/恢复等虚拟化技术来重现问题,并利用云的强大的计算能力来对应用进行压力测试,比较适合那些需要开发和测试多种应用的组织和企业。

6. 大规模数据处理云

大规模数据处理云能对海量的数据进行大规模的处理,可以帮助企业快速进行数据分析,发现可能存在的商机和存在的问题,从而做出更好、更快和更全面的决策。其工作过程是大规模数据处理云通过将数据处理软件和服务运行在云计算平台上,利用云计算的计算能力和存储能力对海量的数据进行大规模的处理。

7. 协作云

协作云是云供应商在IDC云的基础上或者直接构建一个专属的云,并在这个云搭建整套的协作软件,并将这些软件共享给用户,非常适合那些需要一定的协作工具,但不希望维护相关的软硬件和支付高昂的软件许可证费用的企业与个人。

8. 游戏云

游戏云是将游戏部署至云中的技术,目前主要有两种应用模式,一种是基于Web游戏模式,比如使用JavaScript、Flash和Silverlight等技术,并将这些游戏部署到云中,这种解决方案比较适合休闲游戏;另一种是为大容量和高画质的专业游戏设计的,整个游戏都将在运行云中,但会将*新生成的画面传至客户端,比较适合专业玩家。

9. HPC云

HPC云能够为用户提供可以完全定制的高性能计算环境,用户可以根据自己的需求来改变计算环境的操作系统、软件版本和节点规模,从而避免与其他用户的冲突,并可以成为网格计算的支撑平台,以提升计算的灵活性和便捷性。HPC云特别适合需要使用高性能计算,但缺乏巨资投入的普通企业和学校。

10. 云杀毒

云杀毒技术可以在云中安装附带庞大的病毒特征库的杀毒软件,当发现有嫌疑的数据时,杀毒软件可以将有嫌疑的数据上传至云中,并通过云中庞大的特征库和强大的处理能力来分析这个数据是否含有病毒,这非常适合那些需要使用杀毒软件来捍卫其电脑安全的用户。

以上是云计算的十大应用场景,随着云计算的发展,其应用范围不断拓展,相信,在不久的将来会有更多的应用形式的出现!
————————————————

原文链接:https://blog.csdn.net/lmseo5hy/article/details/79625745

云计算的应用有哪些?

人类文明在不断变化,科学技术也在不断变化,为现代人创造了新的生活模式,特别是计算机的诞生,也完全解释了现代技术的进步。关于计算机的使用有一定的历史,那么云计算的应用领域是什么?

现代云计算有着广泛的应用,特别是各种软件的诞生也创造了一种更好的使用方式,现在也有各种各样的云计算。

不同的软件功能,这些软件在实际使用中的效果也很好。特别是,它还为教育的沟通提供了大量保障。如云荣中云智学软件的使用,对教育也是一个很大的推动。
同时,云计算应用还包括各个方面,如管理、制造、服务等功能在其应用中的作用也会更大,所以在使用上也是多方面的。
在云计算中,我们还必须注意使用这些方面也必须给予更大的帮助,其实际作用会更大。

杭州云容科技致力于为企业客户提供专业的云咨询、云建设和云定制开发等全方位的专业云服务。

转载于:https://blog.51cto.com/14226451/2366798

FTP服务器:如何创建FTP服务器(一)

  1. 在开始屏幕下打开“搜索”-进入控制面板
  2. 在控制面板窗口中找到“”程序”,点击打开

%title插图%num

  1. 点击“启用或关闭windows功能”

%title插图%num

  1. 在打开的“Windows功能”中找到Internet信息服务,并选中“FTP服务”、““FTP拓展性“和”IIS管理控制台”,点击确定

%title插图%num

  1. 配置完成后,在开始屏幕的搜索中输入“IIS”,然后点击打开“IIS管理器”,在打开“”打开IIS管理器“后,在左栏的“网站”上点击右键,打开”添加FTP站点”

%title插图%num

  1. 点击下一步,按照下图所示绑定和SSL设置,在“IP地址”处,可以用内网IP也可是使用外网IP访客自然也根据你的IP设定来决定

%title插图%num

  1. ‘点击下一步,设置“身份验证和授权信息”

%title插图%num

  1. 设置完成后,点击完成,即可在左栏“网站“下看到多了一个你设置的FTP站点,然后浏览器输入”ftp://你设置好的IP“即可进行访问

%title插图%num

云计算开源软件有哪些?

云计算中心是与云计算伴生的一项基于超级计算机系统对外提供计算资源、存储资源等服务的机构或单位,以高性能计算机为基础面向各界提供高性能计算服务。当前,云计算中心主要面向大规模科学计算及工程计算应用,并在商业计算、互联网、电子政务、电子商务等领域拥有巨大发展潜力。

%title插图%num

我们已经知道,一个完整的云系统包含 5 个角色,其中云服务提供商和云服务消费者是*主要的角色,这两个角色缺少任意一个都不能成为“云”。由这两者组成的“云”,算是*基本的“云”,如本地私有云就是只有供需双方的基本云。

云端、通信协议(加上网络)和云终端简称为云计算的“云”、“管”、“端”。在建设具体的云端时到底采用什么技术,这与终端用户的类型密切相关,终端用户的类型间接决定了云服务的模式,以及需要在云端运行的软件种类。总之,要根据云服务消费者的需求来选择技术并组建相应的云端,需求不同,组建云端的技术也不尽相同。

云端是云计算的核心,必须紧贴用户需求,同时应具备水平伸缩性——在需要的时候可随时增加服务器,从而扩充云端计算能力;在不需要的时候可自动让多余的机器睡眠,以达到节能减排的目的。

与其在家闲着,不如立即开始学习,当机遇爆发式来临时,能不能把握住,只看我们是否已经准备好了,是否足够强大。所以,现在开始,千锋900G+视频教程免费送!领取方式在下方留言即可,希望可以帮助你在“逆境”中成长,从容开启新的一年。

软件是让 CPU 来完成某项任务的步骤,云端是软件运行的场所,因此可以这样说:云端是运行各种软件来完成相应任务的地方。云端采用的技术与任务的大小有关,大型任务(如核爆模拟、天气预报)和小型任务(如四则运算计算器、文字编辑等)采用的技术明显不同,前者很难用一台物理计算机按时完成任务,所以需要联合多台计算机(称为集群)共同完成任务;而后者占用一台物理计算机就浪费了资源,所以需要对单台物理计算机进行分割(称为虚拟化)。
%title插图%num

将单台物理计算机分割成多台虚拟机,每台虚拟机完成一个任务,这意味着一台物理计算机并行执行多个任务。如果一个任务需要由一台物理计算机来完成,那么就直接分配一台物理计算机给此任务,这样的任务就是中型任务。

对一台物理计算机做分割(虚拟出很多更小的计算机),然后给小型任务分配一台虚拟机,从而充分利用资源。虚拟机的大小是由 CPU 速度、内存大小、硬盘容量和每月的网络带宽定义的,当然虚拟机越大,租金就越高。由一台物理计算机无法完成的大型任务,就要采用多台物理计算机集群在一起组成分布式系统。
————————————————

原文链接:https://blog.csdn.net/qfyangsheng/article/details/107912172

我的iOS自学之路

学习一门语言需要坚持的毅力,本篇分享一下我的iOS自学之路,以及学习中总结的经验!

1. 为什么要学习iOS?
2014年11月左右进入某家公司,使用Java语言进行移动App接口开发工作,工作中认识了以为iOS开发同事,后来逐渐了解到iOS的市场行情和薪资待遇,大概是在培训机构培训4个月*份工作大概能拿到1万左右,瞬间感觉做Java开发的受到一万点伤害!大学刚毕业都能拿到1W,我做Java 已经工作X年了还不如刚毕业的,那时开始慢慢关注iOS,了解到那时移动开发很火,以后发展应该很好!从那时开始决定自己要自学iOS技术!

2. 学习iOS要先学啥呢?
经过百度,有人说直接学习Objective-C语言就行了,也有人说要先学习C语言,因为Objective-C语言是对C语言的封装,可以在Objective-C中的任意地方使用C语言,学会C语言基础才能更牢固, 于是开始学习C语言。

3. iOS学习*步:先学习C语言
学什么东西确定了,那么该如何学习呢?
我学习技术一般是先从网上下载一些视频教程,视频教程学习快,一般视频知识体系不够完整,我一般学习完视频教程完之后还要在网上买一本书再来体系的学习!这样 视频教程+书籍 学下来应该就差不多了。

2014年12 学习C语言

百度一下C语言视频教程有很多,下哪一套好呢?*终选择了千锋iOS培训机构的一套视频,于是从2014年12月正式开始学习C语言,视频学习完买了本书《C Primer Plus(第五版)中文版》继续学习C语言

%title插图%num

%title插图%num

4. C语言学习完了,接下来学习Objective-C语言
2015/2月开始学习Objective-C
学习Objective-C需要Xcode 集成开发工具,Xcode是安装在苹果系统上的,苹果系统哪里来呢???

刚一开始在Windows上装了虚拟机,搞了几天终于把虚拟机装上了,发现卡的要死,放弃
接下来想在我的笔记本上装个黑苹果,后来发现对笔记本的显卡有要求,我的笔记本显卡不支持,放弃
要不买个mac min吧,发现好贵,就那么一个小方块便宜的也接近4千,放弃
*终花的大概1万大洋托关系买了个13寸的mac pro
老规矩先从视频教程开始,然后再看书

%title插图%num

%title插图%num%title插图%num

5. Objective-C学习完了,接下来学习UIKit
2015/5月学习UIKit

OC是用来控制业务逻辑的,UIKit是用来展示用户界面的,学了那么长时间,终于要学界面了
老规矩先从视频教程开始,然后再看书

%title插图%num%title插图%num

6. OC也学了,UIKit也学了,是时候来个项目实战一下了
2015/6月份开始项目实战

%title插图%num

7. 项目实战中发现Core Data我竟然没听说过
2015-08-24开始学习《Core Data应用开发实践指南》
关于CoreData视频百度上的视频教程不是很多,所以我直接看都是书籍

%title插图%num

8. 听说Objective-C要被淘汰了,Swift是新趋势
2015-09-24 开始学习Swift

还是老规矩从视频教程开始学习, 然后再看书《Swift语言实战入门(第2版)》

%title插图%num%title插图%num

9. 学的差不多了能胜任工作不?找份面试题看一下
发现面试题10题会一题, 我的心瞬间哇凉哇凉的, 找了一些面试视频恶补一下

%title插图%num

10. 真机调试、App上架、推送通知 都需要真机???
之前学习和真机相关的功能真的是接触的很少,发现这部分自己一无所知
于是买了ipad min2 大概1900元左右吧,开始学习 必须使用真机才能调试的技术

11. 一直想找到这样的书:从iOS开发的*步到提交应用的整个过程
当当网上找的这本书,这本书还算凑合, 和理想中的有些差距

%title插图%num
12. 基础应该都差不多了,iOS核心技术一点都不会
2016-05-28继续学习《iOS 5核心框架》

%title插图%num

13. 自我感觉iOS学的差不多了,如果再上一个台阶呢???
2016-04-17 开始学习《iOS开发进阶》

%title插图%num

14. 学习第三方框架
公司在开发App中会经常集成第三方框架、开源库等,使用这些框架更够更快的开发。
如 AFNetworking, SDWebImage、 Masonry、 fmdb、MJExtension、MJRefresh、Realm, WKWebView、SVProgressHUD、MBProgressHUD、GPUImage、ReactiveCocoa(RAC)、环信即时通讯、七牛云存储、*光推送、友盟统计、社会化分享、第三方登录、百度地图、高德地图等

15. 偶然的机会发现小马哥11期iOS全套视频教程
一直学习到2016-11 月才大概算是学完

%title插图%num
16. 工作之余可以关注iOS的一些公众号和微博,注意要有技术写作能力
如何提高自己的眼界呢?

通过关注iOS的一些微信公众号来了解*新的技术动态,如 iOS大全、CocoaChina等,这里的订阅号每天都会推荐一些iOS技术文章

%title插图%num
关注一些大牛的iOS微博: 他们经常分享iOS技术

 

要有自己的技术博客,如简书等,使用MarkDown语法总结记录自己的对技术的理解
如果有能力可以在GitHub上构建自己的开源项目,这在找工作时是个加分项
17. iOS已经学习差不多了,达到初级工程师的能力了
历时2年自学时间,终于算是修成正果了。同样2年中iOS市场也经历着巨大变化,由于中国这几年出现了一大批iOS培训机构,培训的大部分是大学刚毕业的学生,而这些学生很多不是计算机专业的,培训机构每4个月就会培训出来一批,就这样让培训机构在这几年批量生产了很多很多很多很多初级程序员,再加上*近一两年很多小型创业公司倒闭会导致一些iOS程序员失业,造成的现状是iOS远远是供大于求,供大于求的后果就是本身的价值就会变低,也就是iOS程序员的薪资变低了,同样由于iOS程序员众多,现状企业招聘iOS的要求越来越高,现在工作经验都要求4年的工作经验,导致很多初级程序员失业转行。

对于初级iOS工程师的出路

继续深入学习iOS技术,达到中高级工程师的能力才有出路
还有一部分同学转行了,有的学习前端了
17. iOS继续学习之Road
现在iOS开发流行混合模式,如Native Rect 听说这个技术是个坑,还有Weex框架还挺火的,可以了解一下。
HTML5 也是需要掌握的
JavaScript *近非常活,也需要掌握的
微信小程序先了解一下
iOS的开发*终是高效和低价的,使用原生开发速度慢,使用web开发速度快,他们*终要折中融合在一起,如果只会原生开发我想估计会被淘汰的!

多线程

多线程

多线程的简单应用–可用于网络爬虫爬取分段的视频文件

阻塞进程:等待子进程全部结束在运行主进程

__Author__ = ‘Jiudan’
import random
import threading
import time

# 模拟执行任务的函数
def run(n):
print(‘task {} 开始’.format(n))
time.sleep(2 + random.randint(1, 3)) # 模拟线程运行
print(‘task {} done 线程编号:{} 线程数量: {}’.format(n, threading.current_thread(), threading.active_count()))

t_ob = []
for i in range(1, 6): # 开启五个进程
t = threading.Thread(target=run, args=(‘a{}’.format(i),)) # 注意这里的函数运行方式及传参(元组形式)
t_ob.append(t) # 将线程加入到列表
t.start() # 启动线程

for t in t_ob:
t.join() # 阻塞进程,等待子进程全部结束才继续进行主进程

# 主线程
print(‘主线程: {} 结束 数量: {}’.format(threading.current_thread(), threading.active_count()))

守护进程:主线程结束即结束所有子进程

__Author__ = ‘Jiudan’
import random
import threading
import time

# 模拟执行任务的函数
def run(n):
print(‘task {} 开始’.format(n))
time.sleep(2 + random.randint(1, 3)) # 模拟线程运行
print(‘task {} done 线程编号:{} 线程数量: {}’.format(n, threading.current_thread(), threading.active_count()))

for i in range(1, 6): # 开启五个进程
t = threading.Thread(target=run, args=(‘a{}’.format(i),)) # 注意这里的函数运行方式及传参(元组形式)
t.setDaemon(True) # 守护线程,主进程结束即结束所有字进程
t.start() # 启动线程

# 主线程

GIL锁:防止数据同时被多个线程修改

__Author__ = ‘Jiudan’
import threading
import time
import random
num = 0

def run(n):
global num
# 模拟时长
time.sleep(random.randint(1, 3))
# 获取锁
Lock.acquire()
# 修改 num 的数据(意为未修改完成则不释放锁,在获取锁的同时,其他线程不能启动修改数据,以防止数据被两个线程同时修改)
num += 1
if num <= 50:
print(‘当前已修改为:{}’.format(num))
# 释放锁
Lock.release()
else:
print(‘当前进程 {} 未释放锁–其他线程不得执行–线程数量:{}’.format(threading.current_thread(), threading.active_count()))

# 创建锁的实例
Lock = threading.Lock()

for i in range(1, 101): # 开启100个进程
t = threading.Thread(target=run, args=(‘a{}’.format(i),))
t.start()

设置信号量

__Author__ = ‘Jiudan’

import random
import threading
import time

def run(n):
semaphore.acquire() # 获取锁
time.sleep(random.uniform(2, 4))
print(‘task {}’.format(n))
if n <= 50:
semaphore.release()

semaphore = threading.BoundedSemaphore(5) # 信号量,同时开启5个线程(线程结束即开启新的线程,保证时刻有五个线程在运行)
for i in range(1, 100): # 开启100个进程
t = threading.Thread(target=run, args=(i,))
t.start()

 

自学 iOS 开发的一些经验

不知不觉作为 iOS 开发也有两年多的时间了,记得当初看到 OC 的语法时,愣是被吓了回去,隔了好久才重新耐下心去啃一啃。啃了一阵,觉得大概有了点概念,看到 Cocoa 那么多的 Class,又懵了,怎么才能调用系统的相机?怎么保存信息?怎么做一个像 Twitter 个人页那样的页面?总之就是不知道该从哪切入。

现在回想起来,其实路一直都在,而且有很多条,当初如果有人能够指出一条还不错的道,或许就能走得不那么艰难。于是就有了这篇文章,希望对后人能有所帮助吧。

基础

一定的编程经验

这里说的编程经验是至少熟练一门编程语言,对 OOP 有一定的了解,*好熟悉一些基本的设计模式。遇到过的好多 iOS 开发,大多是从别的语言转过来的,所以有一定的编程基础,学起来会更容易 get the point.

如果是*次接触编程,当然也是没问题的,只是要做好心理准备,可能会比想象的难。

英语

发现不少开发对于英语似乎有点接受不能,通常都是中文优先,除非迫不得已,才硬着头皮看看 StackOverflow,英文文章,文档等。忘了是谁说过「难走的路越走越好走」,通常如此。其实只要稍微 push 一下自己,那些技术文章啃下来应该不会有太大的问题,有过几次成功的体验后,这种恐惧感就会减少很多。优质的文章、视频、书籍,多是英文的,不迈过这个 坎,将来要么成为瓶颈,要么花更大的成本去填补。

入门

书籍

要学习 iOS 开发,自然要先学 Objective-C (当然现在也可以直接上 Swift,不过如果多人协作的话,OC目前还是主流),因为 OC 是 C 语言的超集,所以了解 C 语言对于学习 OC 肯定会有帮助,不过就算不了解,直接学 OC 也没太大问题。

这里推荐 BNR (Big Nerd Ranch) 的这本 Objective-C Programming The Big Nerd Ranch Guide,讲解地比较细致,能帮助你更好的理解 OC,更重要的是教你遇到问题时,如何去解决问题,以及这个问题对应的一些知识点,如何使用文档等等。

来到一个新的世界,肯定会对这个世界充满好奇,想订阅一大堆博客,买一堆书,看各种教程和视频,然后就变得浮躁,不知该从哪下手,这会导致拖延症。 我渴了,给我倒一杯水,这个很直接,马上就可以做,但如果是给我买一瓶饮料,而自己对那些饮料又不怎么熟悉时,就纠结了,不如刷会微博,看看朋友圈,玩个小游戏先。

所以一本好的入门教材很重要,要契合自己当前的水平,且常常会有收获,这种成就感会激励着你继续学下去。

在看书的过程中,往往会有这样的经历:书中提到某个人、观点、知识点、书、文章,然后就顺着它提到的这些东西出去了,可能某个知识点又牵扯到另一些内容,然后就这样越走越远。想起了一个故事——

三只猎狗追一只土拔鼠,土拔鼠逃跑时钻进了一个树洞。这个树洞只有一个出口,不一会儿,忽然从树洞里跑出一只兔子。兔子飞快地向前跑,并爬上另一棵大树。兔子因为慌乱在树上没站稳,掉了下来,砸晕了正仰头看的三只猎狗,*后,兔子终于逃脱。

对于这个故事可以从不同的角度去解读,我更愿意以初心去解读。兔子为什么会爬树?为什么能砸晕三只猎狗?这不是重点,重点是,之前追赶的土拨鼠哪去了?看书时难免会有延伸阅读,这个深度我觉得不宜超过 2 层,不然很容易就回不来了。

还有就是如果有可能,*好每天都看点,这其实是很难的,因为总是会有优先级更高的事,或者之前的某些习惯在干扰。一旦断了几天,就不想再拿起来了。

还有,苹果官方的 Start Developing iOS Apps Today 也是很不错的入门材料。

视频

推荐斯坦福老头子(Paul Hegarty)的 Developing iOS 7 Apps for iPhone and iPad ,当初也是看的这个(那时还是更老的版本),Paul 是资深的 Mac/iOS 开发(前苹果员工?),很多知识点讲得很到位,学生们的提问也大都在点上,同时配有Demo,总之听下来会对 iOS 开发有比较全面的了解。

同时推荐一本小册子:objc-zen-book,花不长时间就能看完,里面是一些 Best Practices,对于编写优质代码会很有帮助。

笔记

这是一个持久的过程,任何阶段都适用。以前也没太在意这个,觉得概念性的东西,脑子过一遍,就大概知道了,然后就去啃其他的东西了,现在看来,如果有记笔记的话,会更有助于消化概念、知识点,也可以记录自己的思考过程。达芬奇就记录了10000多页的笔记。

记笔记可以加深对知识点的理解,而成为编程巨星的唯一秘诀就是:对所做的事情理解地越深,就会做得越好。同时如果遵循遗忘曲线去复习的话,效果更佳。对知识点了解地足够透彻后,Debug 时才更有可能知道问题出在哪,解决问题也更容易有思路。

笔记不仅可以记知识点,也可以记录调试过程,比如这篇笔记,有一种调试方法:小黄鸭调试法

许多程序员都有过向别人(甚至可能向完全不会编程的人)提问及解释编程问题,就在解释的过程中击中了问题的解决方案。一边阐述代码的意图一边观察它实际上的意图并做调试,这两者之间的任何不协调会变得很明显,并且更容易发现自己的错误。

生活中我们可能不会真的这么去做,这时抽离出另一个自己,记录下跟ta的对话,也是个发现问题的好方法。

练习

这也是一个持续的过程,知道了些概念或原理后,总是会想着去验证下是不是这样,无论结果是否如自己预期,实践的过程会降低对语言的陌生感,慢慢地培养一种驾驭这门语言的自信,如果出了错,正好可以重新梳理一下。

目标

如果静下心来看完了 BNR 的这本书,以及斯坦福的 iOS 开发视频,那么对 OC 应该比较了解了,一些常用的 UIKit 用起来也没什么问题了,比如 UIViewController / UIView / UIScrollView / UIImageView / UITableView。也熟悉一些概念,如 KVO / MVC / Delegate / DataSource。

这个阶段下来,应该会有:哦,iOS 开发也就这样嘛,多翻翻文档,熟悉 Cocoa Touch 的一些 Class,差不多也能做出一个简单的 App 了。

进阶

入门之后,接下来可以折腾的东西还会有不少。

书籍

Effective Objective-C 2.0,里面提到了 52 种提高 iOS App 质量的途径。涉及了 API 设计、protocols / category 的使用、写出更模块化的代码等,读下来应该会有不少收获。

iOS Programming: The Big Nerd Ranch Guide (4th Edition),又是一本 BNR 的书,这本书的特点是通过 Demo 来引出知识点,然后提一些问题,并且会细说解题思路。看书的过程中,对于元学习能力的提升也会有一定帮助。

— update —

发现巧哥的 iOS开发进阶 已经可以在京东买到了,虽然没有细看,但巧哥出品质量肯定有保障。

其他资源

进入这个阶段后,可以去探索更大的世界了,现在的资源已经很丰富了,但还是要遵循「少而精」的原则。以下是我觉得挺不错的资源

iOS Dev Weekly 每周一期,内容多为这一星期里值得关注的Github项目、文章、工具等。

iOS 移动开发周报 这是唐巧大大整理的每周不错的 iOS 开发相关的内容,多为中文。

RayWenderlich 很多详细又全面的教程,不容错过。

iOS Dev Slack 国内不少 iOS 开发(包括大大们)都在这里,不过现在好像不怎么能拿到邀请了。

中文 iOS/Mac 开发博客列表,打开工具订阅吧。

还有,如果可能的话,多去分享自己学到的东西,教是*好的学,我试过几次,效果真的很不错。

目标

这个阶段下来,对于常用的设计模式、内存管理、Blocks 的使用、图像操作、网络请求和管理、多线程应该比较熟悉了。对于 CALayer、Animation、UIScrollView、UITableView、UICollectionView、 ViewController Container 则非常熟悉,对「非常熟悉」的定义是:不打开 Xcode,脑子里就能把相应的知识点复述出来 80% ,比如这个类有哪些方法,Delegate / DataSource 有哪些方法,怎么使用,如果要实现某个效果,应该怎么做(好吧, UICollectionView 除外)。

高级

其实高级、进阶、入门并没有严格的界限,在入门阶段也可以探究高级阶段的一些东西。我觉得支撑我们不断探索和前进的动力不是兴趣,而是永不满足的好奇心,和对优雅代码的追求。

If your standards are low, you’re going to stop pretty early on in the process.

BNR 的这篇 Leveling Up 已经讲得很好了,也更加细致。

书籍

iOS 7 Programming Pushing the Limits 这本书对 iOS 7 的一些特性会讲解地比较深入,当然也不仅仅是 iOS 7。只叹 iOS 更新实在太快,书籍往往跟不上,一本好书往往需要很长时间来撰写,等书可以出版了,iOS 又出新版本了。

源码

看优秀的源码,可以学到很多东西,使用过程中遇到问题也更容易解决。这些是我觉得值得细看的源码:AFNetworking(NSOperation, HTTP, Block), SDWebImage(Image Handle, Cache, NSOperation, Block),SVPullToRefresh(UIScrollView, State Handle), JSONModel(runtime)

如果有兴趣,也可以翻翻 CoreFoundation / OC runtime 的源码。

资源

oleb

NSHipster

objc.io || objcio.cn

WWDC 视频

工具

chisel Facebook 出品的 LLDB 助手,用于调试很方便

Reveal 每当好奇某个 App 的实现时,都会打开它一窥究竟,用于调试自己的 App 也很方便

Aspects steipete 大大出品的一款方便使用 method swizzling 的工具,可以在运行时动态添加代码到某个方法

class-dump 从 Mach-O 文件生成 OC 头文件,有时想看看某个 App 大概是如何组织的会比较方便

Hopper 可以对二进制文件进行反编译,甚至可以生成伪代码!有时想看看 UIViewController 里某个方法大概是怎么实现的,就可以用它。

Instruments 这个内置的工具对于发现 App 的各种问题很有帮助,如内存占用、泄露,渲染问题等。

目标

这个阶段,对于底层的实现会有更深入的了解,各种 Core 开头的 Framework 至少可以说出个大概,工具也能熟练使用,「正经的代码」写过数万行,可能天天在翻 Dash。如果别人让你实现某个功能,能在较短的时间内给出不错的实现方案,并且足够细致,甚至精细到如何使用 Core Graphic 去画某个图像。

其他

我觉得无论学习什么,「速成」的心态是*要不得的,这只会让自己变得浮躁,一知半解,整个过程也很难让自己的元学习能力得到提升。慢慢来,攻占一个城后,再去打下一个,这时心态也会平和许多。

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速