我的Android面试经历
Android面试经历
最近我参加了一家公司的Android开发岗位面试。这次面试主要包括笔试和面试两个环节,考察了我的专业技能、开发经验和综合素质。
笔试环节中,我需要根据面试官给出的一些需求和条件,完成一个实现简单功能的Android小应用。我写了一个登录应用,包括输入用户名和密码、校验登录信息、跳转到主界面等功能。在编写代码的过程中,我不断通过注释清晰地讲解了代码实现原理和方法。
面试主要分为两部分,一部分是问答环节,另一部分是实操环节。
在问答环节中:
面试官主要考察了我的专业技术知识和开发经验。他询问我对于设计模式、Android各个组件的生命周期、内存泄漏、性能优化等方面的掌握情况。我结合自己的开发经验和阅读学习得来的知识,一一回答并且举例子,与面试官进行了广泛的交流。
能记得起来的面试题目如下:
- 谈谈你对Android系统架构的理解?
- 说说你在Android开发中用到的设计模式?
- 虚拟机是什么,与真实机有哪些区别?
- 掌握哪些数据库操作的技巧?可以谈谈你的经验。
- 怎么保证Android程序的安全性?
- Android的单元测试框架用过吗?回答一下可以带来哪些好处?
- 解释一下什么是AIDL(Android Interface Definition Language)?它有什么作用?
- 谈谈你对Android中的异步任务机制(AsyncTask)的理解?
- 什么是BroadcastReceiver(广播接收器)?在什么情况下使用它?
- 说说你对Android中的Service(服务)的理解?
- 谈谈你对Android中的Fragment(碎片)的理解?
- 谈谈你对Android中的布局文件的理解?
- 谈谈你对Android中网络编程的理解?
- 解释一下Android中的MVP模式,以及它的优点有哪些?
- 谈谈你对RxJava(响应式编程框架)的理解。
在实操环节中:
面试官提供给我一个需求,让我基于这个需求完成代码的编写和调试。这个需求是关于一个带动画的ViewPager的实现。我用我之前的代码作为模板,根据面试官的需求进行了修改和调试。在这个过程中,我不断地与面试官进行交流、汇报当前的进度和存在的问题,同时在合理的时间范围内完成了任务。
如何实现带动画的ViewPager。 首先我们需要在xml布局中新增一个自定义的ViewPager:
<com.example.animationviewpager.MyViewPagerandroid:id="@+id/myViewPager"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"/>
然后在Java代码中,我们需要继承ViewPager,实现带动画的效果:
public class MyViewPager extends ViewPager {private static final String TAG = "MyViewPager";private int mLastPosition = -1;private int mCurrPosition = -1;private int mPrevPosition = -1;private float mMarginX = 0f;public MyViewPager(Context context) {super(context);}public MyViewPager(Context context, AttributeSet attrs) {super(context, attrs);}@Overridepublic void setPageTransformer(boolean reverseDrawingOrder, ViewPager.PageTransformer transformer) {super.setPageTransformer(reverseDrawingOrder, transformer);}@Overrideprotected void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {super.onPageScrolled(position, positionOffset, positionOffsetPixels);if (mCurrPosition == position || mCurrPosition == -1) {mCurrPosition = position;mPrevPosition = mCurrPosition - 1;mLastPosition = getChildCount() - 1;if (mPrevPosition >= 0 && mPrevPosition <= mLastPosition) {View view = getChildAt(mPrevPosition);mMarginX = view.getWidth() / 2 * positionOffset;view.setTranslationX(-mMarginX);}if (mCurrPosition >= 0 && mCurrPosition <= mLastPosition) {View view = getChildAt(mCurrPosition);mMarginX = view.getWidth() / 2 * positionOffset;view.setTranslationX(mMarginX);}} else if (mCurrPosition < position) {if (mPrevPosition >= 0 && mPrevPosition <= mLastPosition) {View view = getChildAt(mPrevPosition);view.setTranslationX(-view.getWidth() / 2);mPrevPosition = mCurrPosition;}if (mCurrPosition >= 0 && mCurrPosition <= mLastPosition) {View view = getChildAt(mCurrPosition);mMarginX = view.getWidth() / 2 * positionOffset;view.setTranslationX(mMarginX);mCurrPosition = position;}} else if (mCurrPosition > position) {if (mPrevPosition >= 0 && mPrevPosition <= mLastPosition) {View view = getChildAt(mPrevPosition);view.setTranslationX(view.getWidth() / 2);mPrevPosition = mCurrPosition;}if (mCurrPosition >= 0 && mCurrPosition <= mLastPosition) {View view = getChildAt(mCurrPosition);mMarginX = view.getWidth() / 2 * positionOffset;view.setTranslationX(-mMarginX);mCurrPosition = position;}}}
}
上述代码中,我们重写了onPageScrolled()方法,实现了ViewPager的动画效果。每次滑动时,我们都会计算出上一个页面和当前页面的位置,然后通过设置上一个页面和当前页面的平移量,实现一个带动画的滑动效果。 需要注意的是,如果你想实现自己的ViewPager,并且为其设置自定义的动画效果,你需要在调用setAdapter()方法之前,先调用ViewPager的setPageTransformer()方法,将自定义的动画效果设置到ViewPager中。
如有需要面试资料及答案 请点击免费