2013年江苏鸿信面试题
1.Android中Handler基本概念和使用:
在Android中进行与UI通信的开发时,经常会使用Handler对象来控制UI程序的界面,它的作用可以理解为与其他线程协同工作,接收其他线程的消息并通过接收到的消息更新UI界面。
当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无响应,如果时间过长,程序还会挂掉。
Handler就是把这些功能放到一个单独的线程里执行,与Activity互不影响。
Handler在android里负责发送和处理消息。
它的主要用途有:
1)按计划发送消息或执行某个Runnanble(使用POST方法);
2)把其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)
需要注意的是,在UI线程中启动Handler对象时,Handler与调用者Activity处于同一线程,也就是通常所说的UI线程。
每个Handler实例都会绑定到创建它的线程中(一般是位于主线程)。
2.实现多线程时,有两种方法,实现Thread类和Runnable接口,但是他们的区别在哪呢? 答案:抽象类和接口的区别如下:
①在类来继承抽象类时,只需实现部分具体方法和全部抽象方法,而实现接口则要实现里面的全部方法。
②在接口中无成员变量,而抽象类中可有成员变量。
在Java中引进接口主要是为了解决多继承的问题。
3.struts2的工作流程?
请求在Struts2框架中的处理大概分为以下几个步骤:
1 客户端发送一个请求;
2 这个请求经过一系列的过滤器(Filter),询问ActionMapper来决定这个请求是否需要调用某个Action
3 如果ActionMapper决定需要调用某个Action,过滤器把请求的处理交给代理(ActionProxy)
4 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action 类
5.一旦Action执行完毕,在struts.xml中的配置找到对应的返回结果。
附加面试题:
1.完全二叉树和满二叉树的区别:
答案:完全二叉树:除最后一层可能不满以外,其他各层都达到该层节点的最大数,最后一层如果不满,该层所有节点都全部靠左排。
满二叉树:所有层的节点数都达到最大。
2.树转化成二叉树:
答案:树中每个结点最多只有一个最左边的孩子(长子)和一个右邻的兄弟。
按照这种关系很自然地就能将树转换成相应的二叉树:
①在所有兄弟结点之间加一连线;
②对每个结点,除了保留与其长子的连线外,去掉该结点与其它孩子的连线。
注意:
由于树根没有兄弟,故树转化为二叉树后,二叉树的根结点的右子树必为空。
3.森林转化成二叉树:
答案:具体方法是:
①将森林中的每棵树变为二叉树
②因为转换所得的二叉树的根结点的右子树均为空,故可将各二叉树的根结点视为兄弟从左至右连在一起,就形成了一棵二叉树。
4.二叉树到树、森林的转换;
答案;把二叉树转换到树和森林自然的方式是:若结点x是双亲y的左孩子,
则把x的右孩子,右孩子的右孩子,…,都与y用连线连起来,最后去掉所有双亲到右孩子的连线。
5.求两个正整数的最大公约数和最小公倍数
class A{
main(...){
System.out.println(“最大公约数:”+gongyue(m,n));
System.out.println(“最小公倍数:”+m*n/gongyue(m,n));
private static void int gongyue(int m,int n){
while(m%n!=0){
int temp=m%n;
m=n;
n=temp;
}
return n;}
}
6.内存泄露:
答案:一般我们常说的内存泄漏是指堆内存的泄漏。
堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显式释放的内存。
应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。