2019年 iOS 面试

这几天面试,看到的和想到的。

请注意,本文编写于 95 天前,最后修改于 81 天前,其中某些信息可能已经过时。

更新(2019年9月21日):

在之前正文的 2 中,我写到 “我就想问URL都没拼对的话,怎么返回 200”。
后面在评论区的老哥 @熊猫小A 提醒下,了解了在后台捕获异常之后,是可以自定义抛出异常的状态码的。

         1、浏览器依据ip,port建立与servlet容器(容器同时也是一个简单的web服务器)之间的连接。

         2、浏览器将请求数据打包(按照http协议,该数据包也称为请求数据包)。

         3、浏览器发送请求数据包给容器。

         4、容器收到请求数据包之后,解析该数据包

         5、将4中解析之后得到的数据封装到request对象上,同时,容器还要创建response对象。

         6、容器要依据请求资源路径("/web01/hello")找到servlet的配置,然后创建servlet对象。

         7、容器调用servlet对象的service方法。容器会将事先创建好的request,response作为参数传递给service方法。

         8-10、在service方法里面,可以通过request对象获得请求参数,并进行相应的处理,处理结果会放到response对象里面。

         11-13、容器从response对象中取出处理结果,然后打包(按照http协议,该数据包称之为响应数据包)。再将响应数据包发送给浏览器。

         14-15、浏览器收到响应数据包之后,解析处理结果,然后生成相应的页面。

在上面的 8-10 中,开发可以自定义抛出异常。

我本来理解是参数之类的没写好服务器是可以返回 200,没想到 URL 拼错也是可以返回 200 的,后台完全可以自定义抛出异常,但是我们项目组从来是不会这么做的。这样做的害处有:

  1. 前端判断逻辑要多添加一层,更容易出错;
  2. 在前端到服务器的众多节点中,由于 HTTP 协议语义被抛弃,无法正常工作,表现为:无法进行正常的缓存分发,无法负载均衡,监控统计无意义。

所以再提到正文里面提到的那位老哥,即使我这里理解出现错误,如果你能提到上面的内容,我肯定会被你说服,让你通过我这一面;而且即使后台做了不符合规范的 HTTP 语义返回,不清楚各状态码的语义仍旧是不应该的。

从这里看出,有时候面试官也会理解出错,但是如果通过好好的沟通,只要言之有理,面试官这一方也一定会满意的。毕竟一次面试的过程是双方互相沟通、学习的过程。


最近项目组里面招人,我负责 iOS 开发工程师的面试初试,招聘中高级水平的工程师,旁边安卓也一样。

首先,iOS 的简历就像雪片一样被 HR 转到我的邮箱,非常短的时间内就有四五十份简历发来要我筛选。大家可能对这个数字没有什么概念,但因为隔壁安卓老哥只有我这边几分之一的简历量(也就十来份),这让我非常感叹。现在已经不是几年前培训班爆炸的年代了,居然还有那么多 iOS 的面试者。因为最近网上的传闻一直是:算法、AI、机器学习等岗位才是大热,连大数据工程师都比移动端工程师火热,各大厂移动端岗位无人问津,甚至只要签约就给三个月工资当量的签名费等

直到后来……

我要开始吐槽了……

  1. 很多投来的简历,至少应该要用心检查一下错字吧?诸如:IOS,ios,Ios,HTTTP,Mansory,Masorny,SDImage 等各种 typo(正确的写法应该是 iOS,HTTP,MasonrySDWebImage),就这还好意思写精通,就这种严谨性?!拜托,现在是在求职,不是平时发朋友圈,难道不应该更严谨一点吗?出现低级 typo 的简历,在简历筛选的时候,会给我非常糟糕的印象,会排到很低的优先级。
  2. 简历上自己写的内容都理解不通。按照简历上的技能掌握点来问,比如一个哥们简历声称自己做过 iOS 的负责人,写:“精通 HTTP 和 HTTPS”,问下 HTTP 的状态码应该是不过分的。好家伙,400(由于明显的客户端错误(例如,格式错误的请求语法,太大的大小,无效的请求消息或欺骗性路由请求),服务器不能或不会处理该请求)都不知道是啥,这应该是在与后台接口联调中最常见的状态码之一了。他说请求他们后台啥时候都会返回 200response 里面会另外做状态码的处理。。(我就想问URL都没拼对的话,怎么返回 200)问到其他技能点的时候,总是停留在非常浅的理解上,比如问到怎么优化滑动列表的性能,必提到 layercornerRadius 属性,但如果想再深入问,却个个面露难色,语焉不详。一方面,简历上一水写的“熟悉这”、“精通那”;另一方面在面试稍稍问深入点,却一概摇头或者称只是听说过。浅尝辄止的态度恐怕在这条路上走不远啊(这句话也要送给自己,当头棒喝)。
  3. 基础知识的匮乏,包括数据结构与算法。如果你想问,抱歉,很多人会直接说早就还给老师了,或者干脆就坦白不太熟悉(没听说过)。还是上面那个说自己是负责人的哥们(实在不好意思,老拿您当例子,因为我可能对您期望太高,最后失望太大。简历上面还写到会Vue.js,当时就别提我多兴奋了,刚好我们项目组非常需要一个精通与 H5 进行交互的同志,我们项目组的前端同事也是用的 Vue (前阵子 Vue 的作者尤大还来过公司开分享会),面试他时却让我别问,他只是写了下demo,了解了一下而已,这就是“会”的定义?),他简历声称自己精通各种设计模式,尴尬的是,他连单例都不能手写出来(只考虑 ARC 下),非常简单的代码实现,不超过15行,api 忘了可以写伪代码啊。

有句感想送给看到鄙人文章各位,当然同时也送给自己:

现在这个时代,无论是什么行业,什么岗位,只有不断地精进自己的技能,拓宽技能的深度和广度,才能在未来的竞争与变化中,取得优势。

P.S. 我们公司薪资业界中等水平,不提倡996,一般965。

参考:

Servlet运行原理及404、500、405异常原因和解决方法总结

添加新评论

已有 4 条评论

关于返回码的问题,确实有些公司是统一返回 200,然后在返回的内容中说明 code 和 msg 的,即使 URL 都拼错了也是如此。虽然不符合规范吧,但也是现状。

kamyu kamyu 回复 @熊猫小A
0 0

啊,是我错怪他了嘛。。?
我知道有些公司在一些情况下统一返回 200,在 code 和 msg 中另作处理。
但是 URL 拼错了的话,至少应该 404 吧?
还是说你的意思是只要 host 是对的,path 拼错返回 200?

没错,只要服务器收到了请求就返回200。
但你没有错怪他,即使都返回200,各返回码的语义仍然应该知道。

这并不是招聘广告。。