当前位置:文档之家› Java程序员面试宝典

Java程序员面试宝典

Java程序员面试宝典
Java程序员面试宝典

实现字符串的反转一般来说有两种手段,第一是利用字符串存储字符数据的原理,取出它的char数组,进行重新排列并保存;第二则是生成StringBuffer对象,直接使用StringBuffer 的reverse()方法。String s=”abcdfesafaf”;

方法一、For(int i=s.length();i>0;i--) {System.out.print(s.charAt(i-1));}

方法二、char[] data=s.toCharArray();

For(int i=s.length;i>0;i--) {System.out.print(data(i-1));}

方法三、StringBuffer buff=new StringBuffer(s);

System.out.println(buff.reverse().toString());

5、如何使用指定的字符集创造String对象

使用带有字符集编码的String的构造方法就可以用指定的字符集来重新创造字符串对象了,该项方法的参数包括了两个:一个是byte数组;另一个则是字符集编码的字符串形式,例如:UTF-8、GBK、ISO-8859-1等。String a=”中文”;

String b=new String(a.getBytes(),”GBK”);

第5章数组和集合的使用

Java的数组

1、如何理解数组在Java中作为一个类

数组在创建的时候必须指定一个长度。

2、new Object[5]语句是否创建了5个对象?

否,只是创建了一个数组实例,长度为5,每个数组元素的值均是null,并没有创建5个Object对象。如果需要创建5个Object对象,则需要为每个数组元素分别指定。

3、如何拷贝数组的数据

Java数组其实是通过一个引用来操作数组的,如果使用简单的=操作符进行赋值的话,只是复制了引用,并没有把数组的数据复制一份。

使用System.arraycopy(arr1,0,arr2,0,arr.length)方法,或者创建一个新的数据实例,然后把数据五装填进去,不能用=赋值运算符。

4、二维数组的长度是否固定?

长度不固定。Java数组的长度是可以动态变化的,程序员可以任意扩展数组的维度,每一维度的元素个数都可以是不尽相同的。Arr.length=3,arr[i].length的值不确定。

集合框架

1、什么是集合

集合是用来也只能存储其他对象的对象,代表了一种底层结构,用于扩展数组的功能。

集合框架由一系列的接口和实现类组成,基本包括:列表(List)、集合(Set)、映射(Map)等,它们大多具有迭代性和可比较性。

2、迭代器是什么?

3、比较器是什么?

Comparable和Comparator接口都已经支持泛型了,不再需要进行类型转换。

String类是实现了Comparable接口的,它也是可比较的。

对于Comparable接口来说,它往往是进行比较类需要实现的接口,它仅包含一个CompareTo()方法,只有一个参数,返回值为int型数据。

Comparator是一个接口,它的实现者被称为比较器。它包含一个compare()方法,有两个参数,返回值与Comparable的compareTo()方法一样。不同之处是,Comparator接口一般不会

被集合元素类所实现,而是单独实现或用匿名内部类的方式实现。

4、Vector与ArrayList的区别

Vector是线程安全的,因为它操作元素的方法都是同步方法,而ArrayList则不是。

开发过程中应该根据需要进行选择,如果需要保证线程安全的地方则需要使用Vector,而不必要的时候则无需使用Vector,因为ArrayList效率会高一些。

Eg:Vector v=new Vector ();

ArrayList v=new ArrayList ();

1、HashMap和HashTable的区别

HashMap和HashTable保存元素的时候,都是无序的。

HashMap更符合Java集合框架的设计思路,更推荐使用。

HashTable中hash数组默认大小是11,增加的方式是:old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

2、集合使用泛型带来了什么好处。

集合使用泛型以后,可以达到元素类型明确的目的,避免了手动类型转换的过程,同时,也让开发者更加明确容器保存的是什么类型的数据。

3、如何把集合对象中的元素进行排序

在Java集合框架中定义的List的实现有Vecto、ArrayList和LinkedList。比较器是进行排序的基础,大多数的比较和排序功能都会使用它。

4、符合什么条件的数据集合可以使用foreach循环?

数组或者实现了Iterable接口的类实例,都是可以使用foreach循环的。Java集合框架中的集合类大多数都符合第二条,因此它们都是可以使用foreach循环的。

第8章多线程编程

对于并发来说,一般可以有多进程和多线程两种方式。进程是占用的CPU、内存等系统的基本单位,而线程又是进程的执行单元。多进程的并发对于数据的共享是很困难的,而多线程却是相当的容易,因此大多数时候说的并发指的就是多线程。Java的多线程是语言级的,并不依赖任何的操作系统API,而且Java的多线程编程能力是很强大且好用的。

多线程编程的基本概念

1、什么是多线程

每个正在系统上运行的程序都是一个进程,每一个进程包含一个或多个线程。

线程是进程中的一个执行单元,又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度。而多线程是这样一种机制:它允许在程序中并发执行多个指令流,每个指令流都称为一个线程。多线程进制下的线程彼此间互相独立,比较容易共享数据,通过并发执行的方式来提高程序的效率和性能。

使用多线程的好处:

1、使用线程可以把占据长时间的程序中的任务放到后台去处理。

2、用用户界面可以更加吸引人。如用户单击了一个按钮去触发事件的处理,可以弹出一个进度条来显示处理的进度。

3、程序的运行速度可能加快。

4、在一些等待的任务实现上如用户输入、文件读写和网络传输数据等,线程就比较空闲了。在这种情况下可以释放一些珍贵的资源,如内存占用等。

2、解释进程和线程的区别。

1、线程的划分尺度小于进程,线程隶属于某个进程。

2、进程是程序的一种动态形式,是CPU、内存等资源占用的基本单位,而线程是不能

独立的占有这些资源的。

3、进程之间相互独立,通信比较困难,而线程之间共享一块内存区域,通信比较方便。

4、进程在执行过程中,包含比较固定的入口、执行顺序和出口,而线程的这些过程会

被应用程所控制。

Java中的多线程编程

1、如何让一个类成为线程类

方法1:实现https://www.doczj.com/doc/db2395879.html,ng.Runnable接口

方法2:继承自https://www.doczj.com/doc/db2395879.html,ng.Thread类,Thread是实现了Runnable接口的。

Thread类的run()方法的默认实现为空实现,也就是什么也不做。

线程执行的代码需要写在run()方法中。

2、解释Runnable接口和Thread类的区别

1、线程类继承自Thread则不能继承自其他类,而Runnable接口可以。

2、线程类继承自Thread相对于Runnable来说,使用线程的方法更方便一些。Thread 提供了很多关于线程的方法。

3、实现Runnable接口的线程类的多个线程,可以更方便的访问同一变量,而Thread 类则需要内部类来进行替代。

3、如何启动一个线程

T1的定义可以写成:Thread t1=new ThreadTest();

继承自Thread类的线程类,可以通过new关键字创建一个线程对象以后,执行start()方法开始一个线程。而实现了Runnable接口的线程类,需要用它的对象实例,作为Thread 类构造方法的参数,创建一个Thread对象,然后调用start()方法开始一个线程。

4、如何用sychronized来让线程同步

Sychronized关键字代表要为某一段代码加上一个同步锁,这样的锁是绑定在某一个对象上边的。如果是同步代码块,需要为该sychronized关键字提供一个对象的引用;如果是同步方法,只需要加一个sychronized关键字的修饰。

Sychronized为某段代码加上锁以后,某个线程进入该段代码之前,首先需要检查该锁是否被占用,如果没有被占用则继续执行;如果已经被占用,则需要等到该锁被释放以后才能继续执行。其中,线程执行完成该段代码就是释放锁的标志。

5、编写一个生产者与消费者模型的多线型例子程序。

在所有的Java根类https://www.doczj.com/doc/db2395879.html,ng.Object中,包含了3个重载的wait()方法以及notify()和notifyAll()方法。它们主要的作用在于让当前的线程进入等待池或从等待池中唤醒一个或多个线程继续执行。

6、如何使用Java的线程池?

Java提供了java.util.concurrent.ThreadPoolExecutor类来使用线程池,通过它构造的对象,可以很容易地管理线程,并把线程代码与业务代码进行分离。

线程池是一个或多个线程的集合,有以下几个部分:1、完成任务的一个或多个线程;2、用于调度管理的管理线程;3、要求执行的任务队列。

相关主题
文本预览
相关文档 最新文档