本帖最后由 Jim-剣◆﹏ 于 2016-6-7 00:30 编辑
挑战公司:insta360深圳岚锋创视网络科技有限公司 公司规模:150~500人 公司地址:深圳市宝安区新安街道海秀路23号龙光世纪大厦B栋17楼1702 面试时间:5月5日 15:00 AM. 面试结果:成功获得14Koffer 面试时没有拍照,盗图一张 关于笔试:java:单例模式(最常考),冒泡法排序,抽象类和接口的区别,string相关的问题,强引用/弱引用/虚引用/软引用的区别,二叉树排序,int越界问题。 android:四大组件,activity的生命周期,activity启动模式(基本每分都有这一题),intentService和service的区别,handler机制,事件分发问题,contentValue,android有哪些布局方式,什么时候用什么布局方式。
关于技术面试 旁白:如果有笔试题的,技术面通常就是由笔试题开始问,技术总监会挑一些你在笔试题里面做错的,或者不会的来问,如果是做错的,他会再给你一次机会或者引导一下你看你会不会,如果遇到了自己实在不会的,你可以说做过,但是已经记不太清楚了,对于比较冷门的知识可以用。因为人脑嘛,又不是机器,忘记了也很正常。 如果没有笔试题的,通常会从你的简历开始面,挑一些知识点来问,所以,简历上面的知识点一定要了解表述清楚,这一点是比较重要的。然后是关于项目的东西,个人感觉我问项目的东西还是偏少一点,会让你说说你负责哪个模块,整体是怎么搭建框架的(独立开发或者参与框架搭建)。因为毕竟你现在展示的那个app估计已经被改得面目全非了(这个是一个技术总监说的,有点逗)。 接着可能就问一些跟他们公司相关的技术问题了,比如说,我面的一家金融股票软件开发的公司,就会问过,怎么绘制那些蜡烛图,以及防止内存爆掉。
总的来说,技术面也还是比较注重基础的,都是问一些基础知识,然后在基础知识的基础上再进行扩展。 面试官:说一下接口和抽象类的区别(这个真的很喜欢问,多次面试都被问) 我:概念里的区别这个就不用说了,熟悉java基础的都应该知道,我所理解的他们两的区别是在于,抽象类是描述一个对象,描述的是一个个体的抽象,而接口是用来描述一组动作或者行为,它描述的是个体的一部分。其实有时候在使用上严格来说,用抽象类或用接口,你发现这两者没有什么区别,都能完成需求,这只是一个更严格的规范。但是我们都知道,系统的程序设计到了后期,当系统的复杂度提升到一定的量级后,这些规范的重要性就会凸显出来。 面试官: #说一下栈和堆的区别,栈的运行机制,为什么log会打印一条条的指令 我:#(这个一时说不上来,越基础的东西越难说) 面试官:#说一下static关键字,在哪些地方会用到他 我:#static在java中,是一个表示静态的关键字。在定义静态变量时时常会用到。 面试官:#说一下组合和继承的优劣 我:#组合和继承是一个整体和部分的关系,这个比较难说明白。 面试官:#那说一下继承类和实现接口的区别 我:#刚刚说到接口是属于一个整体的一部分,实现接口,这让我们实现了很大灵活性,有点类似搭建积木,而接口就是一块一块的积木。而继承类,就是一个整体的雏形。而且java不支持多继承,其实也很容易理解,任何一个事物的雏形应该都只有一个而不应该有多个。 面试官:#说一下你懂的设计模式,说一下观察者模式,说一下工厂模式 我:#观察者模式,这个我自己没有写过,但是我有了解过他的实现方式,EventBus这个解耦框架中就是用的观察者模式,他简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过**EventBus**实现。 而工厂模式,这个应该是最多人用的,但是同时也是最多人有误解的,我们常见的某某Factory,在方法里写一个getInatance()方法,这种并不是工厂模式,这只是一种简单的工厂方法,我认为真正的工厂模式应该是抽象工厂,即在类的内部以抽象方法的形式定义,且使用,具体实现留给子类。其实很多开源框架都是基于抽象工厂来写的,我项目中的框架也是大量使用了抽象工厂。 面试官:#说一下android的广播机制 我:#广播有两种,有序广播和无须广播。他们的区别是一个接收有序可拦截,一个接收无序不可拦截。市面上很多短信&电话拦截器都是基于广播来开发。android中定义和很多的动作,每个动作都对应着一个广播,谷歌定义广播是为了方便我们去操控和识别手机的状态,更好地做出反应。但我一般很少用。 面试官:#说一下android的存储方式,在什么时候用什么方式 我:#android5大存储方式...(列举)。最常用的是数据库存储,他有强大的api方法,易于我们操作数据,sp也常用,只适用于存储一些简单的配置键值对。 面试官:#说一下android的启动模式 我:#你说的activity的启动模式?嗯...列举了一下四大启动模式,用项目中回退栈的例子讲了启动模式的应用场景和它是如何影响用户体验的(听不清题意时要大胆确认) 面试官:#说一下crash机制 我:#crash是指程序的崩溃,这个没有我深入研究过。但是应该是建立在Exception的体系之上,程序crash会以Exception的形式呈现。 面试官:#说一下android的动画方式有几种 我:#android的动画方式,矢量动画,属性动画。 面试官:#说一下内存溢出和内存泄漏有什么区别,什么时候会发生内存泄漏,什么时候会发生内存溢出,怎么解决 我:#概括一下可以这么讲:内存泄露最终会导致内存溢出,内存泄露的概念是内存中有某块空间被占用无法被释放,我们对他失去了控制,在而内存溢出是指我们向系统申请的内存超过了可使用的内存大小,这时候就会溢出。不同页面上的上下文context不能随便传递,因为有可能会导致该页面无法被释放。内存溢出,最常见的就是在处理图片的时候,没有及时做回收操作。 面试官:#说一下三级缓存 我:#三级缓存,是指网络,内存,本地这三级。一般来说,都不需要我们自己实现三级缓存,常用的那几个开源框架,像imageLoader就是基于这个... 面试官:#说一下Binder机制,以及运行过程(只有腾讯问过,问得非常细) 我:(这个确实没有仔细研究过,几乎答不上了,忘了当时怎么回答) 面试官:#说一下你平时是用什么框架进行网络访问的,说一下okhttp和volley的区别 我:#因为项目组里用的就是okhttp,volly也有一点了解,看过一些文章,volley所谓的封装就是封装了一堆的request和response,实际应用中除了加载图片,这几个封装都比较鸡肋,requestBody还是得自己根据实际情况去继承封装(比如要加密什么的,有指定header什么)。而且它的网络请求过程还就直接封装成异步的了。
拓展性比较高的是okhttp,数据流还是用okio来优化的,请求过程有同步,也有异步方法,响应体保持同步阻塞,大大的方便了有进行连续多次网络请求的需求。拿掉volley的imageview封装部分,两个库的使用方法和用法其实是一样的,okhttp还比volley有更多的选择。 面试官:#说一下activity和fragment的区别,为什么要用fragment 我:#Activity 代表了一个屏幕的主体,而Fragment可以作为Activity的一个组成元素。其实更好的理解是,把fragment理解错activity的一个特殊控件,这个控件的特殊性在于他的生命周期,与activity的生命周期联系的非常紧密,随着activity生命周期的变化而变化。至于为什么要用fragment,使用fragment能够让我们在一个activity中操控多个UI面板,同时能带来性能上的提高。 面试官:#说一下饿汉式和懒汉式的区别,哪个更安全,为什么懒汉式要用两个同步 我:#从安全性上来说的话,当然是饿汉式。懒汉式用了两个同步锁并且加了双重判断,是为了提高效率。 面试官:#说一下viewpager预加载是加载几个页面的,在哪里可以设置title 我:#据我所知,是预加载前后两个页面。 面试官:#说一下asyntask的线程管理,里面是开了几个线程的 我:#asyntask开了5个线程,同属一个线程池。而且这个线程池是一个全局静态的线程池,所以无论我们创建多少个asyntask对象,由此至终都只有一个线程池。 面试官:#说一下线程池有哪几类,有什么不同 我:#这个没有深入了解过,只用过普通的线程池。 面试官:#说一下你有没有用过什么开源框架,有没有修改过源码 我:#我经常有关注一些热门开源框架。也有尝试过修改和封装一些开源框架。 旁白:技术面基本决定了你能不能去这家公司了,所以如果遇到不会的,你可以说这个我没有接触过,不太了解,回去研究研究。基本上如果技术面80%的问题你能够回答上来,并且解释清楚,你离拿到offer已经不远了。 关于CEO面 CEO:#对加班问题,你怎么看。(主要看你愿不愿意加班) 我:#这个我不排斥,如果我能够在工作时间内完成工作,我相信是不需要加班。 CEO:#你以前在团队中扮演什么角色。(主要看你是不是核心人物) 我:#在上一家公司是项目主力程序员,负责项目的大部分模块的实现。 CEO:#你在项目开发过程中遇到的最大难题(主要看你有没有实践经验,经常会问的,早有准备) 我:# CEO:#你未来的职业规划是什么(主要看你对自己的要求) 我:#我对技术比较感兴趣,未来几年,准备专研技术,以后准备走技术这条路,做技术总监,哈哈。 CEO:#你觉得程序员应该具备什么样的素质。(主要看你遇到问题怎么解决) 我:#遇到问题,愿意解决问题,能承受压力...有强烈的好奇心吧 CEO:#挺好,挺全面,你期望的薪资是多少? 我:#14K CEO:#这个没什么太大的问题,具体的可以和HR再谈... (CEO面结束) HR接着聊了下薪资和入职安排...给了14Koffer。
关于简历
专业问题,如果不是工科,尽量忽略不写
知识点,你不会的不要写,可以写一些冷门的知识
自我评价,尽量些写你去看哪些网站,有没有写博客,回答其他人的问题,以及怎么样修复bug,有些废话就不用写了
项目,写三个以上,不然简历太空洞,有独立开发能力的一定要写出来
关于公司
目前很多公司都处在转型阶段,很多公司都会分设子公司或者新开发部门搞互联网的,并且现在硬件公司也很多,所以offer真的很多。不过要注意一下对口问题,如果是搞硬件的,最好看看相关的知识,可能会问到。现在做视频类的公司比较多,所以相关的知识要了解了解。社交类的公司偏少了现在。做金融类的公司也很多。
总结
面试还是比较注重基础的,如果基础还不扎实的得先补一补。本人也是把基础看了一遍,《android开发艺术探索》看了两遍才去面试的,强烈推荐这本书,回答技术面的时候很多知识点可以用上。祝各位早日找到满意的工作。
|