前几天参加了武汉的一家互联网公司的面试,总体感觉一般,最后也没有获得终面资格,这次面试暴露了一些问题,也让我体会到了自己的才疏学浅,所以还是总结一下吧。
首先到了公司并没有见到面试官,直接就是笔试,要求是尽量全写,问题如下:
计算机基础类
- 线程有哪几个状态
- 状态码200,404,500分别表示什么意思
- 你知道的所有排序
Java基础类(Java我是真的不会,前几个问题也记不清楚了……)
- 手写冒泡排序算法(任何语言均可)
iOS基础类
- 属性的几个修饰词分别代表什么
- 使用ARC的好处是什么,简述ARC的基本原理
- 数组和指针的区别
- 一个C语言的指针问题
- 简述一下MVC模式
- 画一下iOS的系统架构
数据库基础
- 索引的作用是什么,缺点是什么
- 写一个sql语句,涉及到排序和选择
个人发展
- 最近在读什么技术方面的书
- 对未来的打算
- 如果入职,打算如何帮助公司更好的发展
- 对公司了解吗,使用过公司的产品吗
问题的涉及面还是很广泛的,计算机基础,iOS基础,数据库等等都有涉及,有几个问题我还真的答不上来,下面我写了部分问题的答案,如果有不对的地方欢迎大家提出来,一起学习一起进步:
线程有哪几个状态:创建,就绪,运行,阻塞,死亡。
状态码含义:(参考:HTTP状态码 - 维基百科,自由的百科全书)
- 200:请求已成功,请求所希望的响应头或数据体将随此响应返回。
- 404:请求失败,请求所希望得到的资源未被在服务器上发现。没有信息能够告诉用户这个状况到底是暂时的还是永久的。假如服务器知道情况的话,应当使用410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。
- 500:服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。
使用ARC的好处是可以让程序员不用再去手动管理内存,使得内存管理更加高效,ARC的原理很简单:一个对象被引用一次就加1,被放弃一次引用就减1,如果减为0那么该对象就被释放。
数组和指针的区别推荐大家看一下这篇文章:数组和指针的区别
MVC模式:iOS常见面试题
iOS系统架构:iOS系统架构
索引的作用和好处:数据库索引的作用和优点缺点
个人发展这块儿回答就比较轻松了,因为iOS知识更新频率太快,而且我学习的方向主要是swift,所以我一般不怎么看纸质的书,我个人更喜欢看一些比较出名的博客,例如RayWenderlich和AppCoda。
PS:如果你知道你要去面试的公司的产品的话,最好提前下载下来用一下,说不定面试官就要问你对他们公司产品的看法。
面试
笔试结束了就是面试,讲真面试时间挺短的,可能是面试官问的我都不太了解……首先就是自我介绍,接下来面试官看了我做的项目,然后问了下项目中遇到的问题(这个几乎必问),这些都还好,后面的就有点感觉力不从心了,大概问题如下:
你的这个APP与服务端有交互吗?
你之前尝试过与服务端进行过通信吗?
你熟悉那些线上的数据库?
了解Hybrid模式吗?
是否清楚Hybrid模式中Web和Native如何实现通信?
对公司的产品有什么看法和建议?
你有什么问题吗?
因为之前从来没有在正式项目中与服务端进行过交互,所有的操作都是在本地进行的,数据也是用SQLite保存在了本地,网络编程方面的东西还在学习中,所以这块基本上全崩……还需继续努力学习啊。
总的来说,第一次面试学到的东西很多,也让我清楚地认识到了自己的不足,不得不说,除了基础知识,网络编程现在基本是必备技能,而热门技术也是必须要了解的加分项。