最近在换工作,大大小小面试了数家公司,对于技术面试官提的问题回答了80%以上,在此记录一下最近遇到的面试题。对于找工作,我的建议是你觉得自己准备好了再去投,如果仓促投一个公司,就少一次面试机会。
Java部分
- String str = “a”;和 String str = new String(“a”);有什么区别?
- String、StringBuilder和StringBuffer的区别是什么?
- ArrayList与Vector的区别?
- 解释一下volatile的用途
- 用synchronized修饰一个静态方法,锁的是什么?
- 重写与重载的区别是什么?
- wait和sleep的区别?
- 接口和抽象类的区别?
- 说一下List和Set的区别?
Android部分
- Activity销毁时会执行onDestroy()方法吗?
- 启动Service的方式
- 如何判断一个Service关闭了?
- 多线程通信有哪些方式?
- 进程间通信的方式
- AIDL的使用及用在进程间和线程间有什么区别?
- Handler的机制及原理
- 介绍一下HandlerThread
- 简单说一下事件分发
- view的自定义,如何自定义一个方形的View?
- Binder传输的数据类型是什么?
- Android的内存管理有了解吗?
- Activity和Fragment的区别
- 平时开发时使用过哪些开源框架,讲一讲它的实现原理。
- 导致内存泄漏的原因有哪些?
- 如何分析内存泄漏的?
设计模式
- 说一下你知道的设计原则
- 你知道哪些设计模式,有哪些在你的项目中使用过?
计算机网络
- 说一下OSI七层网络模型
- 知道TCP/IP的4层网络模型吗?
- 讲一下tcp的3次握手和4次挥手
- http与https的区别?
操作系统
- 进程和线程的区别?
- windows系统和linux系统区别是什么?(面试官提示windows有用到注册表,而linux没有)
算法(要可以口述其原理,必要时可以手写)
- 冒泡算法
- 快速排序
项目经验
- 这块是我比较薄弱的,因为之前的工作新需求的开发并不多,可能我太菜了,但是通过面试我发现这一环节往往在面试打分中占比较高的比重,这里我建议就是多了解自己项目中的一个大的需求的开发,即使不是自己做的,把它深入了解了,感觉给自己依然能够写出来这个方案的时候,那么这个方案它可以是你写(^ - ^)。
- 对自己所负责的模块要熟悉,可以画出其架构图(如果不行,也要能够画出其UML图),我在一家外企3面的时候,面试官应该是项目组的架构师,和他的沟通让我收益匪浅,在我画UML的过程中,他仅凭着多年软件开发的经验,就已经构思出我工作中负责的模块的框架,并且还从面向对象及设计模式的角度跟我深入交流了一番。