纷享销客面试题

分享早期纷享销客的一套面试题,供大家参考。

1、设计模式原则

单一职责、里氏替换原则、依赖倒置原则、接口隔离、开闭原则、迪米特原则

2、urlsession和urlconnection区别

普通任务和上传、下载任务方式、请求方法的控制、断点续传的方式、配置信息的区别。

3、http1.0 2.0区别

  • HTTP1.1默认使用长连接,可有效减少TCP的三次握手开销。
  • HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。另外HTTP还支持传送内容的一部分。这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这是支持文件断点续传的基础。
  • HTTP1.0是没有host域的,HTTP1.1才支持这个参数。
  • HTTP2.0使用多路复用技术(Multiplexing),多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
  • “HTTP1.1在同一时间对于同一个域名的请求数量有限制,超过限制就会阻塞请求”。多路复用底层采用”增加二进制分帧层”的方法,使得不改变原来的语义、首部字段的情况下提高传输性能,降低延迟。二进制分帧将所有传输信息分割为更小的帧,用二进制进行编码,多个请求都在同一个TCP连接上完成,可以承载任意数量的双向数据流。HTTP/2更有效的使用TCP连接,得到性能上的提升。
  • * HTTP/2新增首部压缩(Header Compression):采用HPACK算法 * HTTP/2新增服务端推送(Header Compression)

4、http、https握手

  1. 第一次握手,建立连接时,客户端发送syn包到服务器,并进入SYN_SEND状态,等待服务器确认。 SYN(同步序列编号)
  2. 第二次握手,服务器收到syn包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态;
  3. 第三次握手,客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
  4. 完成三次握手,客户端与服务器开始传送数据。
  1. 第一次挥手:客户端发出释放FIN=1,自己序列号seq=u,进入FIN-WAIT-1状态
  2. 第二次挥手:服务器收到客户端的后,发出ACK=1确认标志和客户端的确认号ack=u+1,自己的序列号seq=v,进入CLOSE-WAIT状态
  3. 第三次挥手:客户端收到服务器确认结果后,进入FIN-WAIT-2状态。此时服务器发送释放FIN=1信号,确认标志ACK=1,确认序号ack=u+1,自己序号seq=w,服务器进入LAST-ACK(最后确认态)
  4. 第四次挥手:客户端收到回复后,发送确认ACK=1,ack=w+1,自己的seq=u+1,客户端进入TIME-WAIT(时间等待)。客户端经过2个最长报文段寿命后,客户端CLOSE;服务器收到确认后,立刻进入CLOSE状态

5、json xml区别

  • (1).可读性方面。JSON和XML的数据可读性基本相同,JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,XML可读性较好些。
  • (2).可扩展性方面。XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。
  • (3).编码难度方面。XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。
  • (4).解码难度方面。XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。
  • (5).流行度方面。XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)了。
  • (6).解析手段方面。JSON和XML同样拥有丰富的解析手段。
  • (7).数据体积方面。JSON相对于XML来讲,数据的体积小,传递的速度更快些。
  • (8).数据交互方面。JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。
  • (9).数据描述方面。JSON对数据的描述性比XML较差。
  • (10).传输速度方面。JSON的速度要远远快于XML。

6、AFN数据处理区别,文件上传时content type

multipart/form-data

7、contentType类型有哪些?

application/x-www-form-urlencoded、multipart/form-data、application/json

8、为什么block会循环引用?

9、block传值原理

10、方法转发,替换,覆盖,注意什么?

为了保证方法替换执行一次,我们通常会加上dispatch_once,否则当执行偶数次替换的时候,方法替换失效在子类没有实现父类方法,子类中替换父类方法的时候;我们用父类调用方法的时候会闪退
class_addMethod尝试向类添加需要替换的原方法originalMethod,添加的方法的实现是replacementMethod的实现;如果添加成功,表示类没有实现originalMethod,这时候class_replaceMethod再将replacementMethod实现改为originalMethod的实现,就达到了替换的效果;如果添加失败,就直接method_exchangeImplementations替换两个方法的实现即可。
dispatch_once+load保证替换执行一次load保证在继承关系中替换时,按照继承链来替换方法替换时检查类中是否实现了原方法,避免子类中没有实现,替换子类的方法时,将父类的方法替换了。


11、组件化是什么,项目如何拆分?

12、按行打印二叉树

public class Tree {
    TreeNode last;
    TreeNode nlast;
    public void printTree(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        last = root;
        nlast = root;
        while (!queue.isEmpty()) {
            TreeNode t = queue.peek();
            System.out.print(queue.poll().data + " ");
            if (t.left != null) {
                queue.add(t.left);
                nlast = t.left;
            }
            if (t.right != null) {
                queue.add(t.right);
                nlast = t.right;
            }
            // 如果当前输出结点是最右结点,那么换行
            if (last == t) {
                System.out.println();
                last = nlast;
            }
        }
    }

13、私有库如何通信

14、tableview scrollview嵌套时,手势冲突如何处理

15、cell卡顿原因,圆角处理方式

16、weak实现原理

17、dealloc都做什么事

  • 首先调用 _objc_rootDealloc()
  • 接下来调用 rootDealloc()
  • isTaggedPointer 是否是标记指针 是直接 return ;
    接下来会判断是否可以被直接快速释放,判断的依据主要有 5 个,判断是否有以下五种情况
    nonpointer 是否优化过isa指针
    weakly_reference 是否存在弱引用指向
    has_assoc 是否设置过关联对象
    has_cxx_dtor 是否有cpp的析构函数(.cxx_destruct)
    has_sidetable_rc 引用计数器是否过大无法存储在isa中
    如果有以上五种任意一种,将会调用 object_dispose()方法,做下一步的处理。
    如果没有之前五种情况的任意一种,则可以执行释放操作,C 函数的 free()。
  • 执行完毕。

18、class初始化过程

19、git merge rebase区别

20、分类添加属性原理

21、界面实时刷新原理

23、架构理解情况

24、说说自己优点缺点,管理风格


尊重原创内容,转载请注明出处
本文链接地址: https://www.awnlab.com/archives/604

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注