iOS面试备战-网络篇

iOS最新面试题(一) 1.聊下HTTP post的body体使用form-urlencoded和multipart/form-data的区别。 1)application/x-www-form-urlencoded: 窗体数据被编码为名称/值对,这是标准且默认的编码格式。当action为get时候,客户端把form数据转换成一个字串append到url后面,用?分割。当action为post时候,浏览器把form数据封装到http body中,然后发送到server。 2)multipart/form-data: multipa 阅读详情

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:130595548,不管你是大牛还是小白都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)

计算机网络是计算机科学与技术专业的必修课,也是移动端,前端,后端都会涉及并用到的知识点,可想而知它的重要性。所以它也成为了iOS面试中经常被问及的问题。准备面试的话,网络相关的知识点一定不能错过。这里总结了一些我认为有用的和最近面试遇到的网络相关知识点。

去年写过一篇《图解TCP/IP》总结的文章,也可以对着看下。

计算机网络是如何分层的

网络有两种分层模型,一种是ISO(国际标准化组织)制定的OSI(Open System Interconnect)模型,它将网络分为七层。一种是TCP/IP的四层网络模型。OSI是一种学术上的国际标准,理想概念,TCP/IP是事实上的国际标准,被广泛应用于现实生活中。两者的关系可以看这个图:

注:也有说五层模型的,它跟四层模型的区别就是,在OSI模型中的数据链路层和物理层,前者将其作为两层,后者将其合并为一层称为网络接口层。一般作为面试题的话都是需要讲出OSI七层模型的。

各个分层的含义以及它们之间的关系用这张图表示:

Http协议

http协议特性
  • HTTP 协议构建于 TCP/IP 协议之上,是一个应用层协议,默认端口号是 80
  • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  • 无状态:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
  • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传。
请求方法
  • GET:请求获取Request-URI标识的资源,请求参数附加在url上,明文展示。

  • POST:在Request-URI所标识的资源后附加新的数据,常用于修改服务器资源或者提交资源到服务器。POST请求体是放到body中的,可以指定编码方式,更加安全。

  • HEAD:请求获取由Request-URI所标识的资源的响应消息报头。

  • PUT:请求服务器存储一个资源,并用Request-URI作为其标识。

  • DELETE:请求服务器删除Request-URI所标识的资源。

  • TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断。

  • OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求。

请求和响应报文

以该链接为例:zhangferry.com/2019/08/31/…

在Chrome查看其请求的Headers信息。

General

这里标记了请求的URL,请求方法为GET。状态码为304,代表文件未修改,可以直接使用缓存的文件。远程地址为185.199.111.153:443,此IP为Github 服务器地址,是因为我的博客是部署在GitHub上的。

除了304还有别的状态码,分别是:

  • 200 OK 客户端请求成功
  • 301 Moved Permanently 请求永久重定向
  • 302 Moved Temporarily 请求临时重定向
  • 304 Not Modified 文件未修改,可以直接使用缓存的文件。
  • 400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。
  • 401 Unauthorized 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用
  • 403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因
  • 404 Not Found 请求的资源不存在,例如,输入了错误的URL
  • 500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。
  • 503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。

Response Headers:

content-encoding:用于指定压缩算法

content-length:资源的大小,以十进制字节数表示。

content-type:指示资源的媒体类型。图中所示内容类型为html的文本类型,文字编码方式为utf-8

last-modified:上次内容修改的日期,为6月8号

status:304 文件未修改状态码

注:其中content-type在响应头中代表,需要解析的格式。在请求头中代表上传到服务器的内容格式。

Request Headers:

:method:GET请求

:path:url路径

:scheme:https请求

accept:通知服务器可以返回的数据类型。

accept-encoding:编码算法,通常是压缩算法,可用于发送回的资源

accept-language:通知服务器预期发送回的语言类型。这是一个提示,并不一定由用户完全控制:服务器应该始终注意不要覆盖用户的显式选择(比如从下拉列表中选择语言)。

cookie:浏览器cookie

user-agent:用户代理,标记系统和浏览器内核

更多请求头的字段含义可以参考这里:HTTP headers

TCP三次握手和四次挥手的过程以及为什么要有三次和四次

在了解TCP握手之前我们先看下TCP的报文样式:

其中控制位(Control Flag)标记着握手阶段的各个状态。

TCP三次握手

示意图如下:

三次握手是指建立一个TCP连接时,需要客户端和服务器总共发送3个数据包。

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

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

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

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

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

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

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

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

问题一:为什么需要三次握手呢?

在谢希仁著的《计算机网络》里说,『为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误』。怎么理解呢,我们假设一种情况,有一个建立连接的第一次握手的报文段因为滞留到网络中过了较长时间才发送到服务端。这时服务器是要做ACK应答的,如果只有两次握手就代表连接建立,那服务器此时就要等待客户端发送建立连接之后的数据。而这只是一个因滞留而废弃的请求,是不是白白浪费了很多服务器资源。

从另一个角度看这个问题,TCP是全双工的通信模式,需要保证两端都已经建立可靠有效的连接。在三次握手过程中,我们可以确认的状态是:

第一次握手:服务器确认自己接收OK,服务端确认客户端发送OK。

第二次握手:客户端确认自己发送OK,客户端确认自己接收OK,客户端确认服务器发送OK,客户端确认服务器接收OK。

第三次握手:服务器确认自己发送OK,服务器确认客户端接收OK。

只有握手三次才能达到全双工的目的:确认自己和对方都能够接收和发送消息。

TCP四次挥手

示意图如下:

四次挥手表示要发送四个包,挥手的目的是断开连接。

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

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

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

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

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

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

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

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

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

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

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

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

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

问题一:为什么挥手需要四次呢?为什么不能将ACK和FIN报文一起发送?

当服务器收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端『你发的FIN我收到了』。只有等到服务端所有的报文都发送完了,才能发FIN报文,所以要将ACK和FIN分开发送,这就导致需要四次挥手。

问题二:为什么TIMED_WAIT之后要等2MSL才进入CLOSED状态?

MSL是TCP报文的最大生命周期,因为TIME_WAIT持续在2MSL就可以保证在两个传输方向上的尚未接收到或者迟到的报文段已经消失,同时也是在理论上保证最后一个报文可靠到达。假设最后一个ACK丢失,那么服务器会再重发一个FIN,这是虽然客户端的进程不在了,但是TCP连接还在,仍然可以重发LAST_ACK。

HTTPS的流程

HTTPS = HTTP + TLS/SSL,它使用的端口默认为443,它的建立可以用下图表示:

1、客户端首次请求服务器,告诉服务器自己支持的协议版本,支持的加密算法及压缩算法,并生成一个随机数(client random)告知服务器。

2、服务器确认双方使用的加密方法,并返回给客户端证书以及一个服务器生成的随机数(server random)

3、客户端收到证书后,首先验证证书的有效性,然后生成一个新的随机数(premaster secret),并使用数字证书中的公钥,加密这个随机数,发送给服务器。

4、服务器接收到加密后的随机数后,使用私钥进行解密,获取这个随机数(premaster secret

5、服务器和客户端根据约定的加密方法,使用前面的三个随机数(client random, server random, premaster secret),生成『对话密钥』(session key),用来加密接下来的整个对话过程(对称加密)。

有一篇由浅入深介绍HTTPS的文章可以阅读一下:看图学HTTPS

问题一:为什么握手过程需要三个随机数,而且安全性只取决于第三个随机数?

前两个随机数是明文传输,存在被拦截的风险,第三个随机数是通过证书公钥加密的,只有它是经过加密的,所以它保证了整个流程的安全性。前两个随机数的目的是为了保证最终对话密钥的『更加随机性』。

问题二:Charles如何实现HTTPS的拦截?

Charles要实现对https的拦截,需要在客户端安装Charles的证书并信任它,然后Charles扮演中间人,在客户端面前充当服务器,在服务器面前充当客户端。

问题三:为什么有些HTTPS请求(例如微信)抓包结果仍是加密的,如何实现的?

我在聊天过程中并没有抓到会话的请求,在小程序启动的时候到是抓到了一个加密内容。我手动触发该链接会下载一个加密文件,我猜测这种加密是内容层面的加密,它的解密是由客户端完成的,而不是在HTTPS建立过程完成的。

另外在研究这个问题的过程中,又发现了一些有趣的问题:

1、图中所示的三个https请求分别对应三个不同类型的图标,它们分别代表什么意思呢?

第一个图标含义是HTTP/2.0,第二个图标含义是HTTP/1.1,第三个图标加锁是因为我用charles只抓取了443端口的请求,该请求端口为5228,所以不可访问。

2、第三个请求https://mtalk.google.com:5228图标和请求内容都加了锁,这个加锁是在https之上又加了一层锁吗?

这些问题暂时没有确切的答案,希望了解的小伙伴告知一下哈。

DNS解析流程

DNS(Domain name system)域名系统。DNS是因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户通过域名访问到对应的服务器(IP地址)。具体的解析流程是这样的:

1、浏览器中输入想要访问的网站域名,操作系统会检查本地hosts文件是否有这个网址的映射关系,如果有就调用这个IP地址映射,完成域名解析。没有的话就走第二步。

2、客户端回向本地DNS服务器发起查询,如果本地DNS服务器收到请求,并可以在本地配置区域资源中查到该域名,就将对应结果返回为给客户端。如果没有就走第三步。

3、根据本地DNS服务器的设置,采用递归或者迭代查询,直至解析完成。

其中递归查询和迭代查询可以用如下两图表示。

递归查询

如图所示,递归查询是由DNS服务器一级一级查询传递的。

迭代查询

如果所示,迭代查询是找到指定DNS服务器,由客户端发起查询。

DNS劫持

DNS劫持发生在DNS服务器上,当客户端请求解析域名时将其导向错误的服务器(IP)地址。

常见的解决办法是使用自己的解析服务器或者是将域名以IP地址的方式发出去以绕过DNS解析。

Cookie和Session的区别

HTTP 是无状态协议,说明它不能以状态来区分和管理请求和响应。也就是说,服务器单从网络连接上无从知道客户身份。

可是怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

  • Cookie:Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,实际上Cookie是服务器在本地机器上存储的一小段文本,并随着每次请求发送到服务器。Cookie技术通过请求和响应报文中写入Cookie信息来控制客户端的状态。

  • Session:Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构来保存信息。当有用户请求创建一个session时,服务器会先检查这个客户端里是否已经包含了一个Session标识(session id),如果有就通过session id把session检索出来。如果没有就创建一个对应此Session的session id。这个session id会在本次响应中返回给客户端。

两者有以下区别:

1、存储位置:Cookie存放在客户端上,Session数据存放在服务器上。

2、Session 的运行依赖 session id,而 session id 是存在 Cookie 中的,也就是说,如果浏览器禁用了 Cookie ,同时 Session 也会失效

3、安全性:Cookie存在浏览器中,可能会被一些程序复制,篡改;而Session存在服务器相对安全很多。

4、性能:Session会在一定时间内保存在服务器上,当访问增多,会对服务器造成一定的压力。考虑到减轻服务器压力,应当使用Cookie

CDN是干什么用的

CDN(Content Delivery Network),根本作用是将网站的内容发布到最接近用户的网络『边缘』,以提高用户访问速度。概括的来说:CDN = 镜像(Mirror) + 缓存(Cache) + 整体负载均衡(GSLB)。

目前CDN都以缓存网站中的静态数据为主,如CSS、JS、图片和静态网页等数据。用户在从主站服务器请求到动态内容后再从CDN上下载这些静态数据,从而加速网页数据内容的下载速度,如淘宝有90%以上的数据都是由CDN来提供的。

CDN工作流程

一个用户访问某个静态文件(如CSS),这个静态文件的域名假如是www.baidu.com,而这个域名最终会被指向CDN全局中CDN负载均衡服务器,再由这个负载均衡服务器来最终分配是哪个地方的访问用户,返回给离这个访问用户最近的CDN节点。之后用户就直接去这个CDN节点访问这个静态文件了,如果这个节点中请求的文件不存在,就会再回到源站去获取这个文件,然后再返回给用户。

参考:深入理解Http请求、DNS劫持与解析

Socket的作用

socket位于应用层和传输层之间:

它的作用是为了应用层能够更方便的将数据经由传输层来传输。所以它的本质就是对TCP/IP的封装,然后应用程序直接调用socket API即可进行通信。上文中说的三次握手和四次挥手即是通过socket完成的。

我们可以从iOS中网络库分层找到BSD Sockets,它是位于CFNetwork之下。在CFNetwork中还有一个CFSocket,推测是对BSD Sockets的封装。

WebRTC是干什么用的

WebRTC是一个可以用在视频聊天,音频聊天或P2P文件分享等Web App中的 API。借助WebRTC,你可以在基于开放标准的应用程序中添加实时通信功能。它支持在同级之间发送视频,语音和通用数据,从而使开发人员能够构建功能强大的语音和视频通信解决方案。该技术可在所有现代浏览器以及所有主要平台的本机客户端上使用。WebRTC项目是开源的,并得到Apple,Google,Microsoft和Mozilla等的支持。

如果某一请求只在某一地特定时刻失败率较高,会有哪些原因

这个是某公司二面时的问题,是一个开放性问题,我总结了以下几点可能:

1、该时刻请求量过大

2、该地的网络节点较不稳定

3、用户行为习惯,比如该时刻为上班高峰期,或者某个群体的特定习惯

如果有对网络方面比较熟悉的小伙伴也可以补充。

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:130595548,不管你是大牛还是小白都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)

iOS开发笔记之八十二——2021 iOS面试总结《二》之进击篇 继上次写的2020 iOS面试总结《一》已经过去很久了,在这段时间内不断有人给我私信,问我为啥没有第二部了,主要是入职了新公司后工作比较繁忙,加上自己比较懒,一直没有继续写了,前阵子打开公众号发现,突然一下子多了那么人关注,令我有点意外,决定继续写下去。 这篇文章,我主要介绍我在面试过程中如何进行的准备、要不要找猎头等这些方面进行介绍。 ... 阅读详情

相关推荐

手把手教你自制Type-C OTG转换器(附电路图及避坑指南)

本文详细指导如何自制Type-C OTG转换器,包括核心电路设计、元器件选型及焊接技巧,特别强调硬件检测电路的关键作用。通过实测数据和避坑指南,帮助开发者解决兼容性问题,实现高效数据传输。

weixin_27038245的博客 712

ios面试准备 - 网络篇

ios工程师面试 基础知识 网络篇

HeTingwei的博客 1573

用R语言实现“中断时间序列分析” --- R code for ITS

ITS方法可用于评估一项干预措施的效果,从水平改变和斜率改变两个角度来描述干预引起的变化。

franksui的博客 4026

OC(iOS)中常见的面试题汇整(大全)

iOS/OC常见的面试题

eastWind1101的博客 8425

Jetpack Compose Navigation实战:从基础到高级导航模式

本文全面解析Jetpack Compose Navigation在Android开发中的应用,从基础导航实现到高级模式(如单任务/单顶模式),涵盖参数传递、嵌套导航、深层链接等核心功能。通过实战代码示例展示如何优化导航性能,并与ViewModel、Hilt等架构组件整合,为开发者提供高效的Compose导航解决方案。

pz890123456的博客 372

R语言实战:非正态数据下的Scheirer–Ray–Hare检验全流程解析

本文详细解析了在R语言中执行Scheirer–Ray–Hare检验的全流程。当数据不满足正态分布假设时,该非参数检验是传统双因素方差分析的有效替代方案。文章从原理、R环境配置、数据准备、代码实现、结果解读到事后比较与可视化,提供了完整的实战指南,帮助研究者稳健地分析多因素实验设计中的主效应和交互效应。

cc789的博客 406

iOS面试:1.计算机网络

HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种用于传输超文本数据(如 HTML 文档、图片、视频等)的应用层协议,是互联网上应用最为广泛的协议之一。HTTP协议建立在TCP协议之上,通过在客户端和服务器之间传输数据来实现通信。无连接性:HTTP 是一种无连接的协议,即每个请求和响应之间是相互独立的,服务器在处理完一个请求后会关闭连接。这种无连接性可以减少服务器的负担,但也会增加建立和关闭连接的开销。无状态性。

长沙火山 1571

【数据挖掘】心跳信号分类预测 之 特征工程 —— 学习笔记(三)

三、特征工程 3.1 看书 常言道,“巧妇难为无米之炊”。在 ML 中,数据和特征将作“米”,模型和算法则为“妇”。若无数量充足的数据、良好表示的特征,再强大的模型也难以得到满意的结果 (garbage in,garbage out)。对于 ML 问题,数据和特征往往决定了结果的上限,而模型、算法的选择及优化则是在逐步接近该上限。 特征工程,顾名思义,是对原始数据进行一系列工程处理,将其提炼为特征,作为输入供算法和模型使用。在本质上,特征工程是一个表示和展现数据的过程。在实际中,特征工程旨在去除...

闻韶 3358

备战金三银四,2021最全100道高频iOS面试题分享上(含答案)

原作者:执笔续春秋 iOS面试题 本面试题为个人使用版本,如后续流传出去,请转发的朋友务必注释一下,答案正确性有待商榷,本人的答案不代表权威,仅仅是个人理解。 文章内部有写混乱,将就着看吧。另外大部分图片加载不出来,,MARKDown格式也不太统一(各平台不一样),由于博主太懒不想改,不过不影响最终效果, 一、硬技术篇 1.对象方法和类方法的区别? 对象方法能个访问成员变量。 类方法中不能直接调用对象方法,想要调用对象方法,必须创建或者传入对象。 类方法可以和对象方法重名。 引伸1. 如果在类

原来是泽镜的博客 6839

Codesys 3.5报警功能配置保姆级教程:从变量定义到确认方式(含REF/ACK详解)

本文详细介绍了Codesys 3.5报警功能的配置流程,从变量定义到确认方式的选择,特别解析了REF和ACK两种确认方式的底层逻辑。通过实战案例和代码示例,帮助工程师快速掌握报警系统的搭建与调试技巧,提升工业自动化项目的可靠性。

weixin_29245767的博客 458

基于Q-learning的无人机三维路径规划(含完整C++代码)

基于Q-learning的无人机三维路径规划(含完整C++代码)

weixin_54186646的博客 1万+

2021年-iOS面试进阶资料总结(备战年后)

面试基础 iOS面试基础知识 (一) iOS面试基础知识 (二) iOS面试基础知识 (三) iOS面试基础知识 (四) iOS面试基础知识 (五) 知识详解 iOS面试要点之GCD面试要点 iOS面试要点之多线程面试要点 iOS面试要点之block面试要点 iOS面试要点之Runtime面试要点 iOS面试要点之RunLoop面试要点 iOS面试要点之内存管理面试要点 iOS面试要点之MVC、MVVM面试要点 iOS面试要点之网络性能优化要点 iOS面试要点之网络编程面试要点 iOS面试要点之KVC&a.

Jul7day的博客 695

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

终极iOS面试备战指南:TimLiu-iOS基础与高级知识点汇总

TimLiu-iOS项目是iOS开发领域的宝藏资源库,汇集了大量常用三方库、插件及知名博客链接,为开发者提供了全面的学习和参考资料。本文将围绕该项目整理iOS面试中的核心知识点,帮助面试者系统梳理从基础到高级的关键内容,助力面试成功。 ## 📚 基础知识点解析 ### 数据结构与算法 在iOS开发中,数据结构与算法是基础中的基础。TimLiu-iOS项目中推荐了多个相关学习资源,如[Lear

gitblog_00617的博客 359

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

京东iOS面试题拆解:大厂核心考点与备战路线

iOS开发者想要进入大厂,底层原理的掌握程度往往是决定性分水岭。以Objective-C的Runtime消息机制为例,从objc_msgSend的查找流程,到消息转发、method swizzling在AOP埋点与崩溃治理中的应用,构成了面试中反复出现的高频考点。内存管理与多线程同样如此,Block循环引用的引用链分析、GCD同步派发导致的死锁问题,都需要从底层机制真正理解,而非背诵结论。在电商类App的实际业务中,列表流畅度、离屏渲染、网络层设计与数据一致性更是高频考察方向,这些能力直接影响高并发场景下的

weixin_34151004的博客 477

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

阿里iOS五轮面试复盘:从基础到架构的完整备战思路

移动端开发中,iOS技术栈的深度与广度往往决定职业天花板。在iOS开发面试中,内存管理、Runloop、多线程等核心机制是考察重点,而项目深挖与工程架构能力则反映候选人的实战水平。理解引用计数与GCD底层原理,掌握卡顿监控和性能优化方法,能够帮助开发者应对大厂的高强度技术面。无论是组件化拆分还是系统设计题,都需要清晰的思考路径和复盘方法。本文以阿里iOS五轮面经为例,梳理了从电话初筛到HR面的考察逻辑,总结了面试准备、现场答题和复盘的关键技巧,为准备大厂iOS岗位的开发者提供参考。

weixin_30879833的博客 341

ios面试题和知识点整理

文章目录1.RAC 1.RAC 参考: IOS RAC使用 – ReactiveObjC

baidu_40537062的博客 996

ios 主线程判断_iOS面试备战多线程篇

iOS面试中多线程绝对是最重要的知识点之一,它在日常开发中会被广泛使用,而且多线程是有很多区分度很高的题目可供考察的。这篇文章会梳理下多线程和GCD相关的概念和几个典型问题。因为GCD相关的API用OC看着更直观一些,所以这期实例就都用OC语言书写。概念篇 在面对一些我们常见的概念时,我们常有种这个东西我熟,就认为自己理解了,其实这种程度是不够的。当我们可以清晰准确的向别人描述一个东西,...

weixin_35995565的博客 501

iOS面试总结(2020年6月)已拿爱奇艺offer

前言: 都说今年互联网行情很差,作为被大家喊了好几年“iOS开发没人要了”的iOS行情更差。那真实情况是什么样的呢,以我的经历给大家分析下。 应某个朋友建议,去掉这一句啊,目前iOS岗位还是挺多的,你可以这么想只要苹果爸爸不倒,iOS开发就不会没人要。但另一方面,招聘方对iOS开发的要求是在不断提高的,我们不能固步自封,满足现状,只有不断学习,不断进步,才能保持自身竞争力。 我的面试的阶段基本都在6月份,准备的阶段则要再往前推个半个月吧。期间约到了不少一二线互联网公司面试机会,前期由于准备不足也错失了一些机

原来是泽镜的博客 1022

(最新)iOS面试,各大厂以及小公司的面试题!

前言 近期的iOS面试求职算是经历了一波小高潮,话不多说,直接切入正题,下面是我总结的2020某些大厂以及小公司的面试题! 目录 1、iOS 基础题 2、iOS 实战题 3、网络题 4、计算机系统题 5、设计模式题 6、架构 & 设计题 7、数据结构&算法题 1、iOS 基础题 1,分类和扩展有什么区别?可以分别用来做什么?分类有哪些局限性?分类的结构体里面有哪些成员? 2,讲一下atomic的实现机制;为什么不能保证绝对的线程安全(最好可以结合场景来说)? 3,被weak修饰的对象在被

D_猿员的博客 451

Cocos备战面试

Cocos相关 1. 内存管理 引用计数来管理内存,创建时计数为1,调用retain计数加1,release计数减1,为0时释放内存。 常见的addChild和removeChild会分别加1减1。autoRelease把节点加到自动释放池中, 在当前帧结束时,池中的节点会调用一次release,起到延时自动释放的作用。 2. DrawCall优化 DrawCall 是一种行为(指令),即 CPU 调用图形 API,命令 GPU 进行图形绘制。 由于 DrawCall 带来的 CPU 及 GPU 的渲染状

猿宅 3167

iOS面试总结(2020年6月)

都说今年互联网行情很差,iOS行情更差。但到底怎么样呢,不能光听别人说,而要自己走出去看一看。我的面试的阶段基本都在6月份,准备的阶段则要再往前推个半个月吧。期间约到了不少一二线互联网公司面试机会,前期由于准备不足也错失了一些机会,在之后的面试中不断总结经验,越来越有信心了,最终选择了爱奇艺。整体来看求职情况还算可以,不是很好但也不是很差,其中会带有一定运气成分,所以要换工作的话一定不要裸辞。 ...

iOS成长之路 934

iOS面试备战-多线程

iOS面试中多线程绝对是最重要的知识点之一,它在日常开发中会被广泛使用,而且多线程是有很多区分度很高的题目可供考察的。这篇文章会梳理下多线程和GCD相关的概念和几个典型问题。因为GCD相关的API用OC看着更直管一些,所以这期实例就都用OC语言书写。 概念篇 在面对一些我们常见的概念时,我们常有种这个东西我熟,就认为自己理解了,其实这种程度是不够的。当我们可以清晰准确的向别人描述一个东西,并能理...

iOS成长之路 330
上一篇: iOS(OC)面试小整理
下一篇: 【iOS面试粮食】内存管理
iOS大鑫
博客等级 码龄6年 69粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值