JAVA企业面试题精选 Java SE 71-80

时间:2023-01-12 12:43:42

3.71.什么是标示接口(Mark Interface),它与接口的区别在什么地方,并简单列举你知道的标示接口

参考答案:

  标示接口:标示接口是没有任何方法和属性的接口.标示接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型.当一个类实现了一个标示接口之后就像是给自己打了个标签.
  区别:标识接口没有任何方法和属性;而接口有方法或属性,或者既有方法又有属性.
  举例:java.io.Serializable,java.rmi.Remote

3.72.请使用Java语言定义一个具备栈功能的类,实现以下接口:

public interface StackInterface{
void push(Object value);
Object pop();
boolean isEmpty();
}

参考答案:

public class Stack implements StackInterface{
private int capacity = 100;
private Object[] items;
private int top = 0;

//不带参数构造器
public stack(){
this(100);
}

//带参数构造器,参数为堆栈大小
public stack(int cap){
this.capacity = cap;
items = new Object[cap];
}

@Override
public boolean isEmpty(){
if*(top == 0){
return true;
}
return false;
}

@Override
public Object pop(){
Object temp = items[top];
items[top] = null;
top--;
return temp;
}

@Override
public void push(Object value){
top++;
items[top] = value;
}
}

3.73.编写一个程序,用户输入任何一个字符串之后,翻转输出其结构.其运行结果如下所示:

请输入一个字符串:我在学习Java程序设计
您输入了:计设序程avaJ习学在我

参考答案:

import java.util.Scanner;

public class Q073{

public static void main(String[] args){
System.out.println("请输入一句话");
Scanner in = new Scanner(Sytem.in);
String input = in.nextLine();
System.out.println("您输入了:")
System.out.println(reverseString(input));
}

public static reverseString(String str){
char[] chars = str.toCharArray();
StringBuilder sb = new StringBuilder();
for(int i = chars.length - 1; i >= 0; i--){
sb.append(char[i]);
}
return sb.toString();
}
}

3.74.请用面向对象的思想设计一个计算器程序,请写出程序框架(主要使用的类和方法)

参考答案:

Operation类:

public class Operation{
private double numberA = 0;
private double numberB = 0;

public double GetResult(){
double result = 0;
return result;
}

public double getNumberA(){
return numberA;
}

public void setNumberA(double numberA){
this.numberA = numberA;
}

public double getNumberB(){
return numberB;
}

public void setNumberB(double numberB){
this.numberB = numberB;
}
}

OperationAdd类:

public class OperationAdd extends Operation{

public double GetResult(){
double result = 0;
result = getNumberA() + getNumberB();
return result;
}
}

OperationDiv类:

public class OperationDiv extends Operation{

public double GetResult(){
double result = 0;
result = getNumberA() / getNumberB();
return result;
}
}

OperationMul类:

public class OperationMul extends Operation{

public double GetResult(){
double result = 0;
result = getNumberA() * getNumberB();
return result;
}
}

OperationSub类:

public class OperationSub extends Operation{

public double GetResult(){
double result = 0;
result = getNumberA() - getNumberB();
return result;
}
}

OperationFactory类:

public class OperationFactory{

public static Operation createOperate(char operate){
Operation oper = null;
switch (operate){
case '+':
Oper = new OperationAdd();
break;
case '-':
oper = new OperationSub();
break;
case '*':
oper = new OperationMul();
break;
case '/':
oper = new OperationDiv();
break;
default;
break;
}
return oper;
}
}

Calculator类:

import java.util.Scanner;

public class Calculator{

public static void main(String[] args){
Operation oper;
oper = OperationFactory.createOperate('+');
System.out.println("请输入_numberA:");
Scanner s = new Scanner(System.in);
oper.setNumberA(s.nextDouble());
System.out.println("请输入_numberB:");
oper.setNumberB(s.nextDouble());
double result = oper.GetResult();
System.out.println("结果是:" + result);
}
}

3.75.写一个函数,2个参数,1个字符串,1个字节数,返回截取的字符串,要求字符串中的中文不能出现乱码:如(“我ABC”,4)应该截为”我AB”,输入(“我ABC 汉DEF”,6)应该输出为”我ABC”而不是”我ABC+汉的半个”.

参考答案:

    public static String subString(String str, int subBytes){
int bytes = 0;//用来储存字符串的总字节数
for(int i = 0; i < str.length(); i++){
if(bytes == subBytes){
return str.substring(0,i);
}
char c = str.charAt(i);
if(c < 256){
bytes += 1;//英文字符的字节数看作1
} else {
bytes += 2;//中文字符的字节数看作2
if(bytes - subBytes == 1){
return str.substring(0,i);
}
}
}
return str;
}

3.76.日期和时间:

1)如何取得年月日,小时分秒?

2)如何取得从1970年到现在的毫秒数?

3)如何取得某个日期的当月的最后一天?

4)如何格式化日期?

参考答案:

1)创建java.util.Calendar实例(Calendar.getInstance()),调用其get()方法传入不同的参数即可获得参数所对应的值,如:calendar.get(Calendar.YEAR);//获得年
2)以下方法均可获得该毫秒数:

Calender.getInstance().getTimeInMillis();
System.currentTimeMillis();

3)取得某个日期的当月的最后一天的示例代码如下:

Calendar time = Calendar.getInstance();
time.getActualMaximum(Calendar.DAY_OF_MONTH));

4)利用java.text.DateFormat类中的format()方法可将日期格式化.

3.77.写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数

参考答案:

    public int countWords(String file,String find) throws Exception{
int count = 0;
Reader in = new FileReader(file);
int c;
while((c = in.read()) != -1){
while(c == find.charAt(0)){
for(int i = 1; i < find.length(); i++){
c = in.read();
if(c != find.charAt(i)){
break;
}
if(i == find.length() - 1){
count++;
}
}
}
}
return count;
}

3.78.写一个函数,要求输入一个字符串和一个字符的长度,对该字符串进行分割隔

参考答案:

    public String[] split(String str, int chars){
int n = (str.length() + chars - 1) / chars;
String ret[] = new String[n];
for(int i = 0; i < n; i++){
if(i < n - 1){
ret[i] = str.substring(i * chars, (i + 1) * chars);
} else {
ret[i] = str.substring(i * chars);
}
}
return ret;
}

3.79.Java类实现序列化的方法.在COLLECTION框架中,实现比较要实现什么样的接口?

参考答案:

  Java类实现序列化的方式为使用序列化的类实现java.io.Serializable接口;
  Collection框架中实现比较要实现Comparable接口或Comparator接口.

3.80.设计4个线程,其中两个线程每次对j增加1,另两个线程对j每次减少1;写出程序

参考答案:

public class TestThread{
private int j;
private Object obj = new Object();

public TestThread(int j){
this.j = j;
}

class Dec extends Thread{
public void run(){
synchronized(obj){
j--;
}
}
}

class Inc implements Runnable{
public void run(){
synchronized(obj){
j++;
}
}
}

public static void main(String[] args){
new TestThread(0).new Dec().start();
new TestThread(0).new Dec().start();
new Thread(new TestThread(0).new Inc()).start();
new Thread(new TestThread(0).new Inc()).start();
}
}