百度 iOS 面试总结_百度ios面试-程序员宅基地

技术标签: 技术知识库  

百度移动云可穿戴部门的面试经历,面试官都非常热情友好,一上来反倒弄的我挺不好意思的。下面记录一下自己的面试过程,因为我真的没啥面试经验,需要总结下。


一面


  • Objective C runtime library:Objective C的对象模型,block的底层实现结构,消息发送,消息转发,这些都需要背后C一层的描述,内存管理。

  • Core Data:中多线程中处理大量数据同步时的操作。

  • Multithreading:什么时候处理多线程,几种方式,优缺点。

  • Delegate, Notification,KVO, other 优缺点


runtime有一点追问,category,method 的实现机制,class的载入过程。

1面整体感觉不错,40分钟不到,感觉回答的还可以。被通知一会儿二面。


二面


二面的时间非常长,差不多将近3个小时,直接面到快下班了。1面问的主要是知识点。2面问主要考察的是设计解决方案的能力,另外辅助追问的方式,考察深度和广度,回答过程中需要列出适合的具体例子,方案还需要细致到具体的关键的函数名称,方法。另外考察设计模式的理解,最后还考了算法。因为时间太长,这里记录一些重要的问题。


  1. 设计一个progress bar解决方案,追问到 Core Graphic、CGPath、maskLayer。

  2. 设计一个popup view被追问到 keyWindow、UIWindow的layer、UIView hierarchy。

  3. 从设计模式的角度分析Delegate、Notification、KVO的区别。被追问到自己写的library和开源的项目中用到哪些设计模式,为什么使用,有哪些好处和坏处,现在能否改进。

  4. 算是问题3的追问,设计一个方案来检测KVO的同步异步问题。willChange和 didChange的不同点,然后被追问到有没有其他地方也有类似情况,被追问到Core Data 中falut object。

  5. 这个是问题4的追问,设计一个KVO系统。

  6. Multithreading,什么时候采用Multithreading方案,以及理由。追问到系统还有哪些在后台运行的thread,被追问到view life cycle、iOS6之后的不同以及内存管理。

  7. Multithreading中常常遇到的问题,追问到死锁,优先级翻转,线程池等。

  8. 百度有一个亿级别的APP需要统计用户行为的日志系统。不使用数据库,只是使用普通文件,设计一个系统。被追问到内存映射文件。这个问题本来是服务器的问题,我表示从来没做过,回答很瞎。


算法考了2个。一个是如何求2个集合的交集。另一个是百亿数据中查找相同的数字以及出现的次数。


最后还补充了几个小问题


  • 自己对可穿戴设备的感受

  • 自己如果进入这个team,自己准备做那方面的事情

  • 为什么创业,自己未来规划


一会被告知3面,但是因为太晚,约到次日下午3面。


三面


3面的时间和1面差不多40分钟,问了几个问题,主要是考察精神层面的东西。


  • 为什么做Windows Mobile

  • 为什么改iOS

  • 为什么来百度

  • 为什么iPhone 可以成功,那些吸引你

  • 如何看待AppStore 现在的生态圈


后面就是他说的多一些,介绍团队遇到的困难以及14年团队的打算。最后他给了我2句话的评价,我觉得还是蛮对的。


  • 选择的时候都是经过深思熟虑的

  • 有野心,wanna make a difference


有意思的是,他说他也wanna make a difference。


总结


整体还是挺尴尬的,几乎所有的知识点都是1,2年前积累的,13年积累的东西基本上没有,都是一些虚的东西。

2面挺好的,暴露了自己不少问题,设计模式那部分几乎没有概念了。


最后


面试通过,我个人觉得2面我的问题在思考设计模式上面少,另外在window hierarchy 上面有不足。设计 KVO 上面在 didChange上面考虑不足。这些都是被当场戳穿的。

有一点疑虑的是整个面试中并没有问到Core Animation。这个还是我蛮喜欢的部分。Anyway 个人很喜欢追问的方式,很容易考察出来理解的深度和广度。


整个面试收获很大,发现了很多不足。另外1,2面的面试题目个人觉得也不错。这里分享给大家。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lishichao706/article/details/49823275

智能推荐

Ubuntu如何删除非空文件夹-程序员宅基地

文章浏览阅读1.4k次。rm -rf dir_name转载于:https://www.cnblogs.com/zdj8023/p/10810712.html_ubuntu删除整个非空文件夹

jsp数据库中文乱码处理_jsp数据库中检索中文乱码的问题-程序员宅基地

文章浏览阅读1k次。从服务器中JSP文件到浏览器显示页面的步骤为:服务器JSP------>>(告诉服务器JSP文件本身编码)服务器Servlet------>>(告诉out输出流,输出内容的类型是html,并且内容编码是GBK)服务器HTML文件------>>(告诉浏览器,接受到的这个文件是html类型的,并且文件内容的编码是GBK)浏览器HTML文件------>>浏览器解析并显_jsp数据库中检索中文乱码的问题

Redis事务失效的三种场景_redis事务失败怎么处理-程序员宅基地

文章浏览阅读2.2k次。如果发生这种类型的错误,Redis将向客户端返回包含错误提示信息的响应,同时Redis会清空队列中的命令并取消事务。watch 监控 key 所起的作用实际上是一个乐观锁,它所监控的是在事务期间有没有其他客户端对所监控的值进行修改。在事务提交之前,客户端执行的命令缓存(队列)失败,比如命令的语法错误(命令参数个数错误,不支持的命令等等)。事务提交后开始顺序执行命令,之前缓存在队列中的命令有可能执行失败。由于乐观锁失败,事务提交时将丢弃之前缓存的所有命令序列。最后发现事务里语句失效。最后发现事务里语句失效。_redis事务失败怎么处理

Shell脚本中获取uci配置文件参数_config_foreach-程序员宅基地

文章浏览阅读3.3k次。/lib/function.sh函数其中定义的主要函数功能如下:_config_foreach

vue路由中设置滚动行为(scrollBehavior)_vue 路由 scrollbehavior-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏27次。 在文档页面(http://localhost:8080/document)拉动滚动条,然后刷新浏览器会发现滚动条依然在原来的位置,这是浏览器的默认行为,会记录浏览器滚动条默认位置。 但是点击浏览器“前进/后退”按钮,会发现当初那个页面的滚动条从0开始了,没有记录上一次滚动条的位置。现在要求点击浏览器“前进/后退”按钮,页面滚动条要记录上一次的位置,这时需要设置它的的滚动行为。 ..._vue 路由 scrollbehavior

CodeForces - 1401D - Maximum Distributed Tree (贪心 + 树上dfs)_codeforces maximum distributed tree-程序员宅基地

文章浏览阅读3.2k次。Maximum Distributed Tree题意为一棵树的边添加权值 要求如下权值大于 000所有边权值之积等于 kkk边权值中 111 的个数尽可能少kkk 以质因数分解的形式给出求∑i=1n−1∑j=i+1nf(i,j)\sum\limits_{i=1}^{n-1} \sum\limits_{j=i+1}^n f(i,j)i=1∑n−1​j=i+1∑n​f(i,j)的值最大是多少 其中 f(u,v)f(u,v)f(u,v) 表示从 uuu 到 vvv 的简单路径上边的权值之和思路_codeforces maximum distributed tree

随便推点

Html.ActionLink 添加样式[email protected] 点击后样式修改-程序员宅基地

文章浏览阅读3.7k次。正确 @Html.ActionLink("修改", "ModifyAdminUser", new { Id = item.Id },new { @class = "a_purse" })错误 @Html.ActionLink("修改", "ModifyAdminUser", new { Id = item.Id , @class = "a_purse" })[email protected] 点击后样式修改

计算机网络实验Cisco Packet Tracer使用_packet tracer sign in using one of the following o-程序员宅基地

文章浏览阅读1w次,点赞25次,收藏323次。Cisco Packet Tracer使用前言1)Cisco Packet Tracer简介2)下载安装一.Cisco Packet Tracer 实验1.直接连接两台 PC 构建 LAN前言我们先了解 VLSM、CIDR、RIP、OSPF、VLAN、STP、NAT 及 DHCP 等概念,以能够进行网络规划和配置。(可以参考博主前面的博客)1)Cisco Packet Tracer简介简介:Cisco Packet Tracer是Cisco公司发布的一个辅助学习工具,为学习思科网络课程的初学者去设计_packet tracer sign in using one of the following options

页面跳转样式错位刷新又好了的情况_跳转路由,样式不生效,刷新才生效-程序员宅基地

文章浏览阅读1.3k次。页面跳转样式错位,刷新又好了???一、问题:从一个页面返回到另外一个页面,样式出现了错位,但是刷新一下就好了。二、原因:在跳转时页面的样式并没有加载,而是保留了前面一个样式,或者前面已经加载过页面的样式,样式的id 或者 class 冲突了,也就是说很多页面都用到了相同的class和id属性,是一样的样式,再次跳转便不会进行变化。三、解决方法:1、在起名的时候注意一下,都给一个class,那么就可以最大程度避免属性相同问题。2、在css里面进行scoped穿透,这样就会锁定到当前组件的样式,不_跳转路由,样式不生效,刷新才生效

并发 _tmultireadexclusivewritesynchronizer 死锁-程序员宅基地

文章浏览阅读1.7k次。翻译:taowen(taowen.bitapf.org)原文:《Indy In Depth》 Concurrency在多线程的环境,资源必须得到保护,使得它们不会因为一次允许多于一个线程访问而受损。 并发和线程是相互纠缠的问题,选择先学哪个也许很难。本文将先讲讲并发,它将为后面学习线程准备一些该先了解一下的知识。 术语 并发 并发是这样一个状态——许多Task同时启动。当并发被实现得恰恰当当时,它_tmultireadexclusivewritesynchronizer 死锁

雨天的尾巴(bzoj3307)(线段树合并+树上差分)-程序员宅基地

文章浏览阅读76次。\(N\)个点,形成一个树状结构。有\(M\)次发放,每次选择两个点\(x,y\)对于\(x\)到\(y\)的路径上(含\(x,y\))每个点发一袋\(Z\)类型的物品。完成所有发放后,每个点存放最多的是哪种物品。Input第一行数字\(N\),\(M\)接下来\(N-1\)行,每行两个数字\(a,b\),表示\(a\)与\(b\)间有一条边再接下来\(M\)行,每行三个数字..._353. 雨天的尾巴

AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation Framework-程序员宅基地

文章浏览阅读556次。本技术报告介绍了一种新的框架AutoGen,它可以使用多个代理来开发LLM应用程序,这些代理可以相互对话以解决任务。AutoGen代理是可定制的、可对话的,并且无缝地允许人类参与。它们可以在各种模式下运行,这些模式采用LLM、人工输入和工具的组合。AutoGen的设计提供了多种优势:a)它优雅地驾驭了这些LLM强大但不完美的生成和推理能力;b) 它利用人类的理解和智慧,同时通过代理之间的对话提供有价值的自动化;c) 它简化并统一了作为自动化代理聊天的复杂LLM工作流的实现。_autogen: enabling next-gen llm applications via multi-agent conversation

推荐文章

热门文章

相关标签