基础面试题


平凡大酋长

1.什么是序列化以及用途,什么时候使用序列化?

序列化是指把对象转换为字节序列的过程称为对象的序列化;而反序列化是指把字节序列恢复为对象的过程称为对象的反序列化。

对象的序列化主要有两种用途:

1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

2)在网络上传送对象的字节序列。

什么时候使用序列化:

1)对象序列化可以实现分布式对象。主要应用例如:RMI要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。

2)java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。

 

2.编程题: 写一个Singleton单例模式

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在,一般Singleton模式通常有几种种形式:

第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,

在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton {

private Singleton(){}

   //在自己内部定义自己一个实例,是不是很奇怪?

   //注意这是private 只供内部调用

   private static Singleton instance = new Singleton();

   //这里提供了一个供外部访问本class的静态方法,可以直接访问  

  public static Singleton getInstance() {

     return instance;   

  } 

第二种形式: 

public class Singleton { 

  private static Singleton instance = null;

  public static synchronized Singleton getInstance() {

  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次

  //使用时生成实例,提高了效率!

  if (instance==null)

    instance=new Singleton();

return instance;

  } 

其他形式:

定义一个类,它的构造函数为private的,所有方法为static的,一般认为第一种形式要更加安全些。

 

3.用简洁的话描述一下关于Spring的IOC与AOP

IoC就是对象的创建,依赖都由Spring及配置文件控制;而AOP就是统一的给一些类似的方法加上同样的功能,比如日志,事务。

IOC:控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;

第二层是依赖注入:将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系。他们的依赖关系只在使用的时候才建立。

AOP:面向切面,是一种编程思想,OOP的延续。将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。

 

4.cookie和session的的区别有哪些?

COOKIE数据存放在客户的浏览器上,而session数据放在服务器上;COOKIE分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的COOKIE

COOKIE不是很安全,可以分析存放在本地的COOKIE并进行COOKIE欺骗,出于安全考虑应当使用session;

session会在一定时间内保存在服务器上,当访问增多时会比较影响服务器的性能,出于考虑减轻服务器性能方面,应当使用COOKIE;

单个COOKIE保存的数据不能超过4K,大多说浏览器都限制了一个站点最多保存20个COOKIE

个人观点认为将一些登录信息(重要信息)存放在session中,而其他信息如果需要保留,可以放在COOKIE中

 

5.乐观锁和悲观锁的区别

悲观锁(Pessimistic Lock), 锁如其名,字面上理解就是很悲观的意思,每次获取数据时都会认为可能造成数据变动,所以每次获取数据都会上锁,这样别人想获取时就会block直到它拿到锁。传统的关系型数据库中就使用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

乐观锁(Optimistic Lock), 顾名思义,字面上理解就是很乐观的意思,每次获取数据的时候都认为不可能造成数据变动,因此不会上锁,但是在更新的时候会判断一下,其他人有没有去更新这个数据,可以采用版本号等类似的机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实就是提供的乐观锁。

悲观锁会造成访问数据库时间较长,并发性不好,尤其是比较长的事务处理;而乐观锁在现实中使用得较多,大多数厂商较多采用乐观锁。

 

6.Java里面一个字符占几个字节?

java的字符类型char占用2个,Unicode编码

float 4 字节 32位IEEE 754单精度 

double 8 字节 64位IEEE 754双精度 

byte 1字节 -128到127 

short 2 字节 -32,768到32,767 

int 4 字节 -2,147,483,648到2,147,483,647 

long 8 字节 -9,223,372,036,854,775,808到9,223,372,036, 854,775,807 

char 2 字节 整个Unicode字符集 

boolean 1 位 True或者false

下面列举在GCC编译器下32位机器和64位机器各个类型变量所占字节数:

 C类型            32位               64位

char             1                1

short int       2                2

int             4                4

long int       4                8

long long int         8                8

char*             4                8

float             4                4

double             8                8

需要说明一下的是指针类型存储的是所指向变量的地址,所以32位机器只需要32bit,而64位机器需要 64bit 。

 

7.Java虚拟机内存的堆区(heap),栈区(stack)和静态区(static/method)

JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)

堆区:

1)存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)

2)jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身.

3)一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。

栈区:

1)每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中

2)每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。

3)栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

4)由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.

静态区别名方法区:

1)方法区又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。

2)方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

3)全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。

 

8.Java中HashMap和HashTable的区别

HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。ashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(Collections.synchronizedMap)。 

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

posted on 2016-09-17 18:51  桃子七号  阅读(236)  评论(0)    收藏  举报

导航