头条iOS移动端实习生面试

文章目录

    • 0.关于个人
    • 1.一面
    • 2.二面
    • 3.HR面
    • 更多


0.关于个人

广东某一本大三学生,日常咸鱼,项目做得不多,参加这次头条iOS移动端实习生面试。


1.一面

时间:2019.06.30

方式:视频面试

概述:和同学的一面差别比较大,可能因为自我介绍中说了有网易游戏的实习经历,因此问了很多网易实习过程中的实现和问题,然后再是问项目中的实现,总共面试了45分钟左右:

  • 自我介绍(讲了学业奖学金,学业绩点和大致排名,讲了项目经历,在项目负责的部分,讲了这学期参加的与头条合作的iOS实训课程,讲了在网易实习的经历)
  • 在网易也是做iOS开发?(是的)
  • 做了一些什么内容?(讲了自己参与的Feed流项目,自己参与项目的部分:横屏广告自动滚动+无限滚动的需求)
  • 如何实现这个无限滚动(UICollectionView + PageControl + ScrollViewDelegate,延拓页,无动画跳转)
  • 实训做的iOS项目是怎么样的?(仿今日头条的Feed信息流应用,负责推荐列表和新闻详情列表,主要是实现高度自适应的UITableView框架)
  • 高度自适应是如何实现的?(heightForRowAtIndexPath中返回cell.frame的高度,其中cell渲染的时候根据内容更改自身的frame高度,解释了自己在项目中这样设计的理由,以及中途遇到的bug,如何解决,如何探寻这个解决方案的过程)
  • 新闻的数据源是如何来的?(字节跳动提供了api,里面有几百条新闻数据,我们后续进行数据清洗,添加字段,由负责后端的同学写了自己的api供给客户端适用)
  • 怎么计算cell高度?要把高度写进viewmodel吗?(再次详细一点讲了一下如何实现高度自适应)
  • 网络访问有用什么库吗(AFNetWorking,回调修改viewmodel,然后渲染界面)
  • 界面布局呢?(Frame布局+自己学习了Masonry布局)
  • 如果适用Masonry布局如何实现?例如说新闻发表者这个cell,如何实现头像,用户名,用户介绍和关注按钮的布局?(如实按照布局回答)
  • 如果用户名过长不是会遮挡住右侧吗?重叠现象(Frame布局设置了宽度,设置了行数限制numberofLine=1,设置了breakmode,这样后续超长会显示…,虽然会影响美观,但也只能这样,所幸媒体名都不长)
  • 可是媒体介绍不是会继续往后吗?(这个是在另一个UILabel,如法炮制,设置样式)
  • 头像是如何实现(ImagePickerController,适用api接口上传Image转成的data,用表格形式提交,服务端存储后,返回一个url,客户端再用SDWebImage来加载url显示图片)
  • 头像是方框还是圆框,如何实现(圆框,corners)
  • 了解property各种属性?(assign,nonatimic,strong这些?没有深入了解)
  • strong和weak的区别?
  • 如果一个int,一个string,定义属性是用assign 还是 strong
  • block回调用了吗?(项目中我使用的是delegate,委托代理回调)
  • AFNetworking中不是用了block吗?(是的,success和failure针对不同响应的block回调)
  • 使用block需要注意点什么?(strongOBJ的循环引用问题,使用前先弱化__weak,例如使用self.xxx)
  • self和_下划线访问有区别吗?(没回答出来,其实self是会调用property的getter方法,而这个方法我们可以自定义的,而 _下划线就是直接返回property)
  • NSMutableArray用过吗?(是一个可变数组)
  • 怎么实现可变数组的?(慌了,不太清楚具体怎么实现的,可能长度不够会扩容?)
  • 那么怎么实现扩容的?(更加不清楚,参考Java ArrayList,猜测是新建新容量的数组,然后copy返回,大致讲了一下ArrayList的扩容机制)
  • 可以实现二维数组吗?
  • oc有指针吗?
  • 算法题1:120长度的绳子切成7端,如何保证可以组成任意长度的绳子(使用2的幂来分割长度,1,2,4,8,16,32,57,这样1-63的长度可以使用前6个绳子组成,64-120的长度y可以使用y=57+x,而x是1-63的,那么又可以用前6个绳子组成)
  • 算法题2:n级台阶,你可以跳1步或者2步,总共由多少种走法?(递归思路,斐波那契数列,第n级台阶可以由n-1级台阶跳1步,或者n-2级台阶跳2步到达,那么f(n)=f(n-1)+f(n-2),初始项f(1) = 1, f(2) = 2)
  • 有什么问题问面试官?

回顾总结:可能由于有网易游戏的iOS实习经历,主要花了一部分时间问了网易实习的过程,做的需求。然后再从项目入手进行考察,最后的两道算法题其实算是智商题,不难,总共只面了45分钟,比同批身边的同学的时间都要短,以为被面试官直接放弃了。


2.二面

时间:2019.07.02

方式:视频面试

概述:二面明显比一面要难了好多,感觉自己答得很差,总共面试了一个小时多一点点。

  • 了解过oc和java的内存机制吗?java垃圾回收是怎样的?oc一个数据对象的生命周期是怎么样的?在内存中具体来说它是几时开始创建,几时销毁后台的内存?

  • 项目中缓存队列,如果api拉取下来的数据,有一些新闻更改了,有一些删除了,有一些新添加了,有一些位置调换了,如果实现更优化地更新自己的缓存队列,避免全部重新渲染,你会如何来设计实现这个缓存队列。

  • 项目使用网络访问是什么库吗?这个库是基于什么协议呢?http是哪个层的协议?是基于udp还是tcp?为什么要基于tcp?如果一个超大文件用tcp传输会怎样?udp来进行可靠传输的好处是什么?

  • 对于同一个数据,多个进程或者说多个线程,如何保证线程安全?读写锁是什么样的机制?那么在实际项目中,后台的数据比如说这个新闻队列,多个线程访问的话,你会如何实现这个读写锁?

  • 多进程和多线程有什么区别?那多线程好处那么多,实际开发应用场景中,很多大型服务器都是多进程的,这是为什么呢?多进程比较多线程的好处在哪里?

  • 算法题:

    不停地输入整数,每次输入你都要返回所有输入过整数中的中位数。

    面试时,想到的解决方案是我们存储下数据,每次插入都保证这个数据是有序的,因为它是有序的,因此我们每次插入只用O(n)。面试官叫我优化,给足了我提示了,可惜自己太笨了,没想到使用堆数据结构去优化插入

  • 有什么要问面试官的吗?

回顾总结:面试完就觉得内心拔凉拔凉的,这考察相对于自己的水平来说也未免太难了一点了吧,基础一点的还回答了一下,后续的越问越深后就只能做个拨浪鼓使劲摇头了。算法题自己也蠢了,在那里折腾了快半个小时,心情复杂。


3.HR面

时间:2019.07.03

方式:视频面试

概述:真是跌宕起伏的面试,竟然撞进了hr面。

预先写好可能要问的问题:

  • 觉得字节跳动是一家怎么样的公司?

  • 字节跳动和网易相比较怎么样?

  • 大学里最骄傲的一件事是什么?

  • 你认为你是一个什么样的人?

  • 希望自己的leader是一个怎样的人?

  • 实训学到了什么?

  • 平常如何学习客户端的知识?有哪些途径?

  • 如何和组内成员合作?


更多

来自我同学同批面试的大致问题总结:

总体来说,流程依然是先个人介绍,然后再从项目入手:

1/3时间询问项目中的知识点,包括项目的难点,项目中一些步骤的实现方式,穿插对于项目语言的基础提问

1/3时间在询问项目的时候提到任何可以关联到计算机网络/数据结构/操作系统/数据库等方面的要点的时候,询问这些科目的基础要点,并且会抛出一些实际情况要你使用这些知识来解决问题。

1/3时间用来进行算法考核,询问一些比较基础的算法题,一般是2个题,要你讲解思路,或者写出代码,并描述思路:

项目知识点与语言基础:

  • Activity生命周期
  • 两个Activity通信,如何传递数据
  • Java虚拟机JVM有了解吗?
  • 项目用了什么网络请求的库,安卓retrofit+okhttp+rxjava2,iOS是AFNetworking
  • iOS strong 和 weak的区别
  • ViewController的生命周期
  • UITableView高度自适应
  • UITableView卡顿如何优化
  • 一个Android或者iOS App中有多少个线程?
  • 还了解其他的iOS控件或者库吗

计网、数据库、操作系统、数据结构

  • http与https的区别
  • http的报文格式
  • https具体的加密流程
  • 用过最熟悉的数据结构是什么
  • 前中后序是怎么遍历的
  • 什么是平衡二叉树,什么是满二叉树
  • 输入url到呈现网页的过程
  • http状态码
  • 进程线程的区别
  • 进程通信
  • 多个客户端,多进程读写数据库同时,会有什么问题?读写锁实现?
  • 设计一个缓存,需要注意哪些点
  • LRU,最近最少使用
  • udp和tcp的区别,分别适用的应用场景
  • 如果tcp进行视频传输或者视频直播,会有什么问题,如何解决呢
  • 如何用现有的数据结构来实现LRU呢

算法考核

  • 链表反转(写代码,无运行)
  • 求1-100所有的质数(写代码)
  • 前中后序遍历(写代码,无运行)
  • 快速排序(思路,原理)

少使用

  • udp和tcp的区别,分别适用的应用场景
  • 如果tcp进行视频传输或者视频直播,会有什么问题,如何解决呢
  • 如何用现有的数据结构来实现LRU呢

算法考核

  • 链表反转(写代码,无运行)
  • 求1-100所有的质数(写代码)
  • 前中后序遍历(写代码,无运行)
  • 快速排序(思路,原理)

你可能感兴趣的:(生活,面试)