每日java学习(12.2.27)

来源:互联网 发布:葡萄糖酸锌治痤疮 知乎 编辑:程序博客网 时间:2024/04/29 21:31

题1:介绍下Jni、NDK、SDK?

    1. jni 是java平台的一部分,它允许java代码与其他语言代码交互
    2. NDK是native developmenet kit是提供开发者快速开发C/C++的一系列工具集合
    3. SDK是source developmenet kit是Android源代码开发的一系列工具集合

android API是这么说的:

The Android NDK is a companion tool to the Android SDK that lets you build performance-critical portions of your apps in native code. It provides headers and libraries that allow you to build activities, handle user input, use hardware sensors, access application resources, and more, when programming in C or C++. If you write native code, your applications are still packaged into an .apk file and they still run inside of a virtual machine on the device. The fundamental Android application model does not change.

这是我翻译的:
        在Android NDK是一个嵌入到Android SDK的工具,可以让你在机器码构建您的应用程序中性能的关键部分。当使用C或C++编程的时候,它提供的头文件和库,允许你建立activity活动,处理用户输入的,使用硬件传感器,访问应用程序资源等。如果你编写的机器码,您的应用程序仍然打包成apk文件,他们仍然可以运行一个虚拟机内设备。不会改变基本的Android应用程序模型。(本人英语水平有限,英语好的看原文更佳)

Android NDK是一个嵌入到Android SDK的工具

题2:面向对象的特征有哪些?简述。

    1. 抽象:抽取我们需要的东西的过程
    2. 封装:把数据和方法封装起来,用户只能通过预留的接口对其操作
    3. 继承:扩充现有类的属性和方法,解决代码重用
    4. 多态:程序在执行的时候,多个不同类的对象对同一消息进行了响应

题3:Integer和int的区别?

    1. int 是基本数据类型  Integer是java提供的int的封装类
    2. 它们的默认缺省值不同,int为0,Integer为null
    3. Integer是对int的功能补充,例如list<Object>泛型指定的时候,必须为object对象,不能为int

题4:String与StringBuffer的区别?

    1. String与StringBuffer都是final类,
    2. StringBuffer相当于String的缓冲区,
    3. String创建对象不可改变,StringBuffer可以

例子:

String s =  “a”+“b” +“c”+“d”;创建了一个对象“abcd”

String b = new StringBuffer();
for(int i=0;i<10;i++){

      b.append(i);
}
创建了一个对象

String s = ”“;
for(int i=0;i<10;i++){
      s = s +i;

}

创建了11个对象

分析:

    1. 常量,编译时就直接存储它们的字面值而不是它们的引用
    2. 虚拟机的角度来说,创建对象的消耗要远高于方法的调用,因为创建对象可能需要先加载类,然后分配空间,然后初始化
    3. 方法调用,调用的都是已经加载完的方法,也就是说他的时间= 调用时间(查找数据和方法体的时间)+方法体实行时间

题5:HashMap和HashTable的区别?

    1. HashTable就是同步的,HashMap没有实现,要实现多线程要添加额外的同步实现。
    2. HashMap可以有空的”键“和”值“,但是HashTable不行
    3. HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

题6:sleep() 和 wait() 有什么区别?

    1. sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
    2. wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

    (对象锁 临界区是指程序中的一个代码段,在这段代码中,单独并发的线程对同一个对象进行访问。在Java中,用关键字“synchronized”标识一个临界区。对象锁是指Java为临界区synchronized(Object)语句指定的对象进行加锁,对象锁是独占排他锁。)

题7:forward 和redirect的区别?

    1. forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
    2. redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

题8:EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?

    1. SessionBean:Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例。
    2. EntityBean:Entity Beans能存活相对较长的时间,并且状态是持续的。只要数据库中的数据存在,Entity beans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity beans也是存活的。Entity Beans生命周期能够被容器或者 Beans自己管理。
    3. EJB通过以下技术管理实务:对象管理组织(OMG)的对象实务服务(OTS),Sun Microsystems的Transaction Service(JTS)、Java Transaction API(JTA),开发组(X/Open)的XA接口。
原创粉丝点击