我的一些感悟——应聘Android开发工程师(2016届)

引言

其实我觉得关于这样的文章是没有必要出现在CSDN上面的,毕竟它压根上与技术一点也不相关。但是我还是写下了这篇文章,因为我想把自己所经历的求职这一点小事分享给大家,或许其中有些东西可以借鉴。我知道在CSDN上面有很多跟我一样刚毕业并且有一些Android开发基础知识的同学,他们可能现在困惑,也可能现在不自信,当然可能还有更多的着急。这一切的根本原因可能在于自己掌握的Android知识点少,项目经验有限。然而不用担心,一切只会变好,只要我们向前。

我的背景

我是2016届毕业的学生,我的专业是信息管理与信息系统。在大三的时候也是自己学了一点Android基础知识并且在大四的时候在某个互联网公司实习过,我想大部分人都与我差不多,都可能是同一个技术水平。当然这里排除那些在初中就会用VB的同学了。

互联网公司

在我求职的过程中,收到的面试邀请通知60%是培训机构,这个原因很可能是自己应届生的标签加上简历上的描述不够专业。20%是外包公司,剩下的20%就是纯互联网公司了。在这样的一个情况下,你可能拒绝去培训机构面试,拒绝去外包公司面试,而直接去纯互联网公司面试,这样做是不明智的,只要是面试你就去。


下面是我的一个关于面试流程以及面试问题的总结,这些面试问题不可能每个公司都是这样的,但是对于我们这些面试经验少同时技术水平有限的人来说或许会有一些借鉴意义。

HR面试

  • 自我介绍
  • 你了解过我们公司吗
  • 说说你的优势
  • 请简单介绍一下你所做的项目
  • 在这个项目里面你具体负责哪些内容
  • 你为什么离职
  • 你为什么选择Android开发而不是IOS开发
  • 当出现一个问题时你是怎样解决的
  • ……

技术面

1.项目层

技术面项目层这里要分三种:1.公司已经是A轮以上的公司或产品接近成熟了的更倾向于问你具体做的项目; 2.公司是天使轮投资的公司更倾向于从他们的一个产品出发;3.外包公司比较倾向于看你做的项目的多少了;

所以自己在接到面试通知的时候,要首先观察公司的性质,然后再去找相应的侧重点。比如,在这里我面试的是一家天使轮的公司,我在官网上把产品下载下来了,然后逐渐从App的引导页到登录页再到主页逐渐各个页面进行分析。紧接着把它其中所涉及的知识点进行抽离出来,并统一归纳。最后就是对这些知识点进行熟悉与掌握了。


比如我们举个例子:X产品是一个以社区为主的App,并且它支持微信登录、分享、收藏、支付等。然后我们就从这些简单的东西中挖掘出知识点。如下所示:

  • 微信登录、分享、收藏、支付是怎么做的?

    在这里普遍人的回答是直接进入微信开发平台然后下载相应的SDK并参考相应的技术文档一步一步进行实现。这样回答的话虽然没什么可挑剔的,但是没有突出亮点,在这里应该围绕着X产品在进行第三方登录时其内部的逻辑是什么样的?是不是先有一个在微信上的认证过程,然后认证成功后,在X产品中唤醒某个界面然后接下来又是什么操作?要具体到整个操作的细节逻辑。

  • 图片上传、压缩、裁剪、缓存处理

    因为社区类型的X产品展示了大量的图片。所以说对图片进行处理肯定是经常要遇到的,所以在这里自己就要去总结与图片相关的基础知识点了。

  • 内存优化(参考《Android开发艺术探索》)

    众所周知,每一个App都需要进行相应的优化。特别是对于那些界面非常丰富的产品了,在这个问题上我
    们可以从以下几个方面阐述内存优化。
    1.布局优化 方法:减少布局资源文件的层级;因为层级少了,Android绘制的工作量也就少了。可以采用相应的标签;
    2.不要在onDraw()方法里面创建对象和执行耗时操作,因为onDraw()被频繁调用;
    3.内存泄漏优化 方法:静态变量导致Activity无法正常销毁;属性动画导致内存泄漏;当播放动画的时候没有进行停止,这样在Activity销毁的时候就无法对Activity进行回收。
    4.ListView与Bitmap优化;
    5.线程优化 方法:采用线程池的形式这样可以避免大量线程的产生,同时在线程池里面可以对线程进行重用,并且线程池里面可以控制线程的最大并发数。这样的话避免了一定的系统开销同时也可以避免大量的线程因抢夺资源而阻塞;
    6.其它优化 方法:比如避免创建过多的对象;常量使用static final 来修饰;采用内存缓存与磁盘缓存等等;

  • 文件存储

    这一点基本算是基础知识点了,我们除了要掌握那几种存储方式还要知道它们具体的在什么情况下用?怎么用?用的时候注意什么?并且能够熟练的使用数据库,如果能够写出一些较为一点难度的SQL语句,比如子查询、多表查询等那就更好了。可能这里有的公司会直接给你几个关于SQL语句的测试题。

  • 框架

    现在一些网络请求框架、数据解析框架、数据库存储框架这也是可能要问到的问题。X产品在请求网络数据的时候若用到一些框架时那很可能是比较流行的Volley、OkHttp、Retrofit等,所以我们在这里要做好准备,比如我用过Volley,那么肯定熟悉Volley的优缺点,除了这一点外,我们还要比较这三者之间的区别,并且要熟悉它底层是具体怎么做的。

  • 其它

    刚开发出来的产品不可能是完美的,所以你就尽可能的去发现其中的不足,越是明显不足的地反就越说明是这家公司薄弱的地方,那么在面试的时候提出关于这方面的问题概率就很大。随便举个例子,比如X产品对Activity的启动模式表现出来的逻辑有点不友好,那么你发现后就得自己清楚的去熟悉Android的四种启动模式。细节很重要,多去寻找总会有收获。

2.基础层

基础层上面的话会问一些关于Java的知识点,同时也包括Android的基础知识点。这里我就不一一列举了,Java的话还是要注重在线程上,包括同步、异步等等。当然还可能问到关于集合方面的知识,常见的是ArrayList与LinkedList之间有什么区别?而关于Android方面的话基础知识也就是四大组件、数据传递、消息机制、设计模式这些了。


CEO面

关于CEO面试的话这里就不涉及到技术了,但是在这个环节我们要展示我们积极向上的心态以及勤奋好学充满激情。CEO或者是创始人最愿意跟你聊的是互联网行业,什么O2O,B2C….这些我也是晕了。可能在这一点上他是在考察你是否对互联网这个行业关注。还有问你你怎么看待这款互联网产品在大众面前这么流行的?在这个时候你就要去找到这个产品的特点并顺着这个特点一直说下去然后发表你自己的看法最后基本上没什么问题的了。我自己觉得在这一层面试上我们要尽量多发表自己的看法,表达出自己的热情,这样就可以证明我们在某个问题上是独立思考并且有主见的。

结语

这也是自己面试大概5次得出来的一个想法,一点经验,分享给大家。如果能帮助到你最好了,同时在找工作的时候没有资金来源的我们会非常没有安全感,特别是自己一个人在大城市的时候。但是大家不要灰心,也不要心冷,要充满自信。我们可以在一次一次的面试中成长这也是一件非常愉快的事情。如果在面试的时候的发现自己哪个知识点不熟悉的话回来后要立刻熟悉,立刻实战,最后共勉。

你可能感兴趣的:(杂谈)