一面
1. JAVA的堆和栈的区别
栈内存储的是局部变量,堆内存储的是实体
- 栈内存存储的是局部变量而堆内存存储的是实体
- 栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短
- 栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收
2.JAVA的GC垃圾回收机制
- 垃圾回收机制就是JVM利用一些列算法对内存进行管理
- 回收内存空间,删除无用实例(没有被引用的对象)
- 自动进行,减少了内存溢出.但同时也牺牲了一定的性能
优化:将不用的变量和指针置位null
3.垃圾回收机制和调用 System.gc()的区别?
- gc函数的作用是程序员提醒虚拟机,希望进行一次垃圾回收,但是虚拟机并不保证垃圾回收一定会进行。什么时候进行依然取决于虚拟机
4.什么是多态
- 一个程序中存在多的同名的不同方法,包括
- 通过子类对父类的覆盖来实现(重写)
- 通过在一个类中方法的重载来实现(重载)
- 向上继承:通过子类对象转化为父类对象来实现
5.重写和重载的区别
- 重写:子类和父类的一种关系,子类继承父类的方法
- 重载:同一个类中(包括父类)有多个同名的不同方法
6.进程和线程的区别,线程独有什么?
- 进程是程序的一次执行,进程包含线程,线程是进程中的代码段。
- 进程通过线程来实现同时运行不同段的代码。
- 线程的内存范围不允许越过进程。
线程共有的部分:方法区和堆
线程独有的部分:虚拟机栈,本地方法栈,线程计数器
7.你在项目中做过哪些性能优化
- 代码优化:
- 尽量重用对象,出现字符串连接时应该使用StringBuilder/StringBuffer代替
- 尽量使用局部变量(用过释放)
- 将常量声明为static final
- 字符串变量和字符串常量equals的时候将字符串常量写在前面
- 数据库优化:建立一个具有良好表结构的数据库
- 等等
8.如何优化页面卡顿
- 拆分代码段
- 尽量减少使用layout
- 简化DOM结构
9.Handler消息机制
- 将耗时的操作放在子线程中处理,handler用来在主线程和子线程中传递信息
10.Android自定义View
- View是用于创建交互式用户界面组件(按钮、文本等)的基础类
- View是所有控件(包括ViewGroup)的父类,它里面有一些常见的方法,如果我们要自定义View,最简单的只需要重写onDraw(android.graphics.Canvas)即可。
11.常用的开源框架及其原理
- Spring框架