zoukankan      html  css  js  c++  java
  • 四道过滤菜鸟的面试题(我也来答一答?)

    http://www.jianshu.com/p/fd5d193f3d36 问

    http://www.jianshu.com/p/c687110e552c 答

    4道过滤菜鸟的iOS面试题

    1.struct和class的区别

    2.介绍一下观察者模式

    3.在一个https连接的网站里,输入账号密码点击登录后,到服务器返回这个请求前,中间经历了什么

    4.在一个app中间有一个button,在你手触摸屏幕点击后,到这个button收到点击事件,中间发生了什么

    说下吧。

    第一个道题,个人觉得主要是值类型和引用类型的一个问题吧。

    之前使用 OC 的时候,全部是对象,都是引用类型,一般很少使用结构体之类的数据结构。

    但是在 swift 出来之后,越来越多的讨论的是值类型和引用类型了。

    因为使用值类型更加安全,对多线程编程更加容易。

    在微博上还有人说到了一些底层的实现方式。

    对于 OC 的一个实现讨论的是比较多的,但是 swift 上的实现现在也有一些对应的讨论。但是具体的实现方式,也都只能是一个

    大致的猜测一些验证。

    第二个问题观察者模式。

    说到设计模式,

    参考这篇文章: http://www.jasongj.com/design_pattern/summary/

    设计模式是一个方便大家沟通,一个对现有问题的已有的成熟的解决方案。

    观察者模式需要解决的问题是什么:

    一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新

    故胤道长回答了这个设计模式需要解决的问题。

    然后就是设计模式在 iOS 中的实现吧。

    之前大家接触的比较多的地方NSNotificationCenter和KVO,道长也说了下该怎么使用。

    通知中心和 KVO 这两种方式也都比较常见。

    还有一个就是现在比较火的 RxSwift之类的响应式编程中,也有观察者模式的实现。

    实现对象的之间的绑定,通信。

    第三个问题, https 网站访问的问题。

    记得是在大学的时候,有一个作业是考的是 http网站访问的流程。

    这个问题,实话说,每个人了解的层次不一样。

    我们来看看道长的回答

    • 前端会打包一个请求,包括url,端口啊,你的账号密码等等。账号密码登陆应该用的是Post方式。所以相关的用户信息会被加载到body里面。这个请求应该包含三个方面:网络地址,协议,资源路径。
    • 一般会先请求DNS服务器。DNS服务器负责将你的网络地址解析成IP地址,这个IP地址对应网上一台机器。这其中可能发生Hosts Hijack和ISP failure的问题。
    • 协议是获取资源的方式HTTP,FTP,UDP,不同协议有不同的格式,有些是process-to-process的,有些是host-to-host的。
    • 你会和后台的端口之间建立一个socket连接,socket一般都是以file descriptor的方式解析请求。
    • 后台的web服务器会响应请求,数据返回到浏览器。假如路径不对,会出现404的错误。
    • 一般访问服务器之前可能会访问一下proxy。这玩意是个代理,有时候当防火墙用,有时候当cache使。如果后台是reverse-proxy结构,那么实际上有多个web服务器藏在proxy之后按需处理请求,而你访问的永远是proxy,这样可以解决过载问题。
    • 有时候访问完web服务器后还要访问一下file服务器,主要是请求数据库里的一些信息。
    • 服务器将相应打包,直接或通过proxy(大多数时候)返回给你。
    文/故胤道长(简书作者)
    原文链接:http://www.jianshu.com/p/c687110e552c
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

    理解的有一定程度了。

    按下回车键,发生了什么?

    1. 浏览的工作,完成 UI 输入到网络请求的封装。

    2. 首先进行的是域名解析。

    当然域名解析的话,浏览器有可能是缓存了一些之前的域名解析的结果的。

    从域名到IP 地址的转换。其中还要考虑 IPv4和 IPv6的地址。

    3. 网络请求的协议,有 HTTP,UDP,TCP,当然了是否要深入到 OSI 七层协议模型?

    http://blog.csdn.net/sprintfwater/article/details/8751453

    OSIVSTCP.jpg

    http://blog.sina.com.cn/s/blog_6b8629950101g0ou.html

    可以从应用层次一直说到物理层。

    我们做软件开发的一般也就了解道网络层次。

    之前个人做个一个接入网,本地网的设计。(基站到运营商机房,到汇集机房段。)

    但是如果是像在华为这类的设备厂商,无疑是要熟透到物理层次。熟透道比特流的形式。

    从浏览发出请求,电脑,手机构造的 bit 流的IP 报文,到 IP 报文的已经发送,到 IP 报文在光缆,光纤中的传输,到信号的中继,放大,恢复,复原,重发,

    信号从 电脑,手机,到交换机,到铁塔机房,到汇聚机房,到骨感机房,到IDC,到国际出口,一层一层的向上。

    而且这写完全是在数十,数百毫秒内完成的。

    中间的各种代理,浏览器代理,路由器代理,小区交换机,IPv4,IPv6网络的穿透,还有 VPN 代理,还有一些流量请求的监听。

    UI->网路请求->IP 报文->数据传输->IP 报文-->响应网络请求。

    本地浏览器代理和远端服务器的之间通讯。

    本地请求,服务器收到请求,进行数据库查询,数据库维护,响应体构造,响应报文返回,本地主机收到报文,本地应用收到报文,浏览器进行响应体解析,最后进行 DOM 渲染呈现给用户。

    这之前需要建立 Socket 连接,TCP 也好,UDP 也好,还有其他形式的 

    FTP、Telnet、SMTP、TFTP、HTTP、POP3、NNTP、IMAP4、HTTPS、SNMP、DNS、SMB、BOOTP

    第四个问题:

    4.在一个app中间有一个button,在你手触摸屏幕点击后,到这个button收到点击事件,中间发生了什么

    我记得有篇文章回答的比较深入,比较好、

    这个问题的要点,iOS 上响应链机制 。说实话,我想的比较浅层次。深入的层次可以到 RunLoop

    个人觉得一图胜千言:

    来自 YYKit 的作者郭耀源:

  • 相关阅读:
    【java】i++与++i、i--运算
    配置ssh框架启动tomcat服务器报异常Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
    jsp页面第一句话报这个错Syntax error, insert "}" to complete
    oracle忘记密码用户名被锁定_解决方案
    关于c#的单例模式,static 变量,下面一篇很不错
    Entity Framework 冲突检测,这一篇我看了比较明了
    关于lambda表达式与使用局部变量的作用域问题,下面这篇不错
    C# SelectMany 的使用
    UML类图 入门 (转载)
    VS code key shortcuts for windows
  • 原文地址:https://www.cnblogs.com/xilifeng/p/5572198.html
Copyright © 2011-2022 走看看