java初级面试题(二)

11.写一个方法,用一个for循环打印九九乘法表

    /**
    *一个for循环打印九九乘法表
    */
    publicvoid nineNineMultiTable()
    {
      for (int i = 1,j = 1; j <= 9; i++) {
          System.out.print(i+"*"+j+"="+i*j+" ");
          if(i==j)
          {
              i=0;
              j++;
              System.out.println();
          }
      }
    }
12.给定一个java.util.Date对象,如何转化为”2007-3-22 20:23:22”格式的字符串
/**
    *将某个日期以固定格式转化成字符串
    *@paramdate
    *@returnstr
    */
    public String dateToStr(java.util.Date date)
    {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      String str = sdf.format(date);
      return str;
    }
13.写一个方法,能够判断任意一个整数是否素数
/**
    *判断任意一个整数是否素数
    *@paramn
    *@returnboolean
    */
    publicboolean isPrimes(int n)
    {
      for (int i = 2; i <= Math.sqrt(n); i++) {
          if(n%i==0)
          {
              returnfalse;
          }
      }
      returntrue;
    }
14.写一个方法,输入任意一个整数,返回它的阶乘
/**
    *获得任意一个整数的阶乘
    *@paramn
    *@returnn!
    */
    publicint factorial(int n)
    {
      //递归
      if(n==1)
      {
          return 1;
      }
      return n*factorial(n-1);
      //非递归
//    int multi = 1;
//    for (int i = 2; i <= n; i++) {
//        multi*=i;
//    }
//    return multi;
    }
15.写一个方法,用二分查找法判断任意整数在任意整数数组里面是否存在,若存在就返回它在数组中的索引位置,不存在返回-1
/**
    *二分查找特定整数在整型数组中的位置(递归)
    *@paramdataset
    *@paramdata
    *@parambeginIndex
    *@paramendIndex
    *@returnindex
    */
    publicint binarySearch(int[] dataset,int data,int beginIndex,int endIndex)
    {
      int midIndex = (beginIndex+endIndex)/2;
      if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex)return -1;
      if(data <dataset[midIndex])
      {
          return binarySearch(dataset,data,beginIndex,midIndex-1);
      }elseif(data>dataset[midIndex])
      {
          return binarySearch(dataset,data,midIndex+1,endIndex);
      }else
      {
          return midIndex;
      }
    }
    
    /**
    *二分查找特定整数在整型数组中的位置(非递归)
    *@paramdataset
    *@paramdata
    *@returnindex
    */
    publicint binarySearch(int[] dataset ,int data)
    {
      int beginIndex = 0;  
      int endIndex = dataset.length - 1;  
      int midIndex = -1;
      if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex)return -1;
      while(beginIndex <= endIndex) {
          midIndex = (beginIndex+endIndex)/2;
          if(data <dataset[midIndex]) {  
          endIndex = midIndex-1;  
          } elseif(data>dataset[midIndex]) {  
          beginIndex = midIndex+1;  
          }else
          {
          return midIndex;
          }
      }
      return -1;
    }
16.做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处
package com.softeem.demo;

/**
*@authorleno
*动物的接口
*/
interface Animal
{
    publicvoid eat(Food food);
}
/**
*@authorleno
*一种动物类:猫
*/
class Cat implements Animal
{
    publicvoid eat(Food food)
    {
      System.out.println("小猫吃"+food.getName());
    }
}
/**
*@authorleno
*一种动物类:狗
*/
class Dog implements Animal
{
    publicvoid eat(Food food)
    {
      System.out.println("小狗啃"+food.getName());
    }
}

/**
*@authorleno
*食物抽象类
*/
abstractclass Food
{
    protected String name;
    public String getName() {
      returnname;
    }

    publicvoid setName(String name) {
      this.name = name;
    }
}

/**
*@authorleno
*一种食物类:鱼
*/
class Fish extends Food
{
    public Fish(String name) {
      this.name = name;
    }
}
/**
*@authorleno
*一种食物类:骨头
*/
class Bone extends Food
{  
    public Bone(String name) {
      this.name = name;
    }
}

/**
*@authorleno
*饲养员类
*
*/
class Feeder
{
    /**
    *饲养员给某种动物喂某种食物
    *@paramanimal
    *@paramfood
    */
    publicvoid feed(Animal animal,Food food)
    {
      animal.eat(food);
    }
}

/**
*@authorleno
*测试饲养员给动物喂食物
*/
publicclass TestFeeder {

    publicstaticvoid main(String[] args) {
      Feeder feeder=new Feeder();
      Animal animal=new Dog();
      Food food=new Bone("肉骨头");
      feeder.feed(animal,food); //给狗喂肉骨头
      animal=new Cat();
      food=new Fish("鱼");
      feeder.feed(animal,food); //给猫喂鱼


    }
}
17.描述JAVA中异常处理的机制
?          程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。Java
?          当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
?          如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
?          程序员通常只能处理违例(Exception),而对错误(Error)无能为力。

18.做一个单子模式的类,只加载一次属性文件
package com.softeem.demo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
*@authorleno
*单子模式,保证在整个应用期间只加载一次配置属性文件
*/
publicclass Singleton {

    privatestatic Singleton instance;
    privatestaticfinal String CONFIG_FILE_PATH = "E:\\config.properties";
    private Properties config;
    private Singleton()
    {
      config = new Properties();
      InputStream is;
      try {
          is = new FileInputStream(CONFIG_FILE_PATH);
          config.load(is);
          is.close();
      } catch (FileNotFoundException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }
    }
    publicstatic Singleton getInstance()
    {
      if(instance==null)
      {
          instance = new Singleton();
      }
      returninstance;
    }
    public Properties getConfig() {
      returnconfig;
    }
    publicvoid setConfig(Properties config) {
      this.config = config;
    }
    
    

}
l    J2SE
19.拷贝一个目录(文件)到指定路径
/**
    *拷贝一个目录或者文件到指定路径下
    *@paramsource
    *@paramtarget
    */
    publicvoid copy(File source,File target)
    {
      File tarpath = new File(target,source.getName());
      if(source.isDirectory())
      {
          tarpath.mkdir();
          File[] dir = source.listFiles();
          for (int i = 0; i < dir.length; i++) {
              copy(dir[i],tarpath);
          }
      }else
      {
          try {
              InputStream is = new FileInputStream(source);
              OutputStream os = new FileOutputStream(tarpath);
              byte[] buf = newbyte[1024];
              int len = 0;
              while((len = is.read(buf))!=-1)
              {
                  os.write(buf,0,len);
              }
              is.close();
              os.close();
          } catch (FileNotFoundException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
      }
    }
20.用JAVA中的多线程示例银行取款问题
packagecom.softeem.demo;

/**
*@authorleno
*账户类
*默认有余额,可以取款
*/
class Account {
    privatefloatbalance = 1000;

    publicfloat getBalance() {
      returnbalance;
    }

    publicvoid setBalance(float balance) {
      this.balance = balance;
    }
    
    /**
    *取款的方法需要同步
    *@parammoney
    */
    publicsynchronizedvoid withdrawals(float money)
    {
      if(balance>=money)
      {
          System.out.println("被取走"+money+"元!");
          try {
              Thread.sleep(1000);
          } catch (InterruptedException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
          balance-=money;
      }
      else
      {
          System.out.println("对不起,余额不足!");
      }
    }
    
}

/**
*@authorleno
*银行卡
*/
class TestAccount1 extends Thread {

    private Account account;
    
    
    public TestAccount1(Account account) {
      this.account = account;
    }


    @Override
    publicvoid run() {
      account.withdrawals(800);
      System.out.println("余额为:"+account.getBalance()+"元!");
    }  
}
/**
*@authorleno
*存折
*/
class TestAccount2 extends Thread {

    private Account account;
    public TestAccount2(Account account) {
          this.account = account;
      }
    @Override
    publicvoid run() {
      account.withdrawals(700);
      System.out.println("余额为:"+account.getBalance()+"元!");
    }  
}

publicclass Test
{
    publicstaticvoid main(String[] args) {
      Account account = new Account();
      TestAccount1 testAccount1 = new TestAccount1(account);
      testAccount1.start();
      TestAccount2 testAccount2 = new TestAccount2(account);
      testAccount2.start();
    }
}
21.用JAVA中的多线程示例火车站售票问题
package com.softeem.demo;

/**
*@authorleno
*售票类
*/
class SaleTicket implements Runnable {
    inttickets = 100;

    publicvoid run() {
      while (tickets > 0) {
          sale();
//或者下面这样实现
//        synchronized (this) {
//            if (tickets > 0) {
//                System.out.println(Thread.currentThread().getName() + "卖第"
//                      + (100 - tickets + 1) + "张票");
//                tickets--;
//            }
//        }
      }
    }

    publicsynchronizedvoid sale() {
      if (tickets > 0) {
          System.out.println(Thread.currentThread().getName() + "卖第"
                  + (100 - tickets + 1) + "张票");
          tickets--;
      }
    }

}

publicclass TestSaleTicket {

    publicstaticvoid main(String[] args) {
      SaleTicket st = new SaleTicket();
      new Thread(st, "一号窗口").start();
      new Thread(st, "二号窗口").start();
      new Thread(st, "三号窗口").start();
      new Thread(st, "四号窗口").start();

    }
}

22.用JAVA中的多线程示例生产者和消费者问题
package com.softeem.demo;

class Producer implements Runnable
{
private SyncStack stack;

    public Producer(SyncStack stack) {
    this.stack = stack;
}

    publicvoid run() {
      for (int i = 0; i < stack.getProducts().length; i++) {
          String product = "产品"+i;
          stack.push(product);
          System.out.println("生产了: "+product);
          try
          {
            Thread.sleep(200);
          }
          catch(InterruptedException e)
          {
            e.printStackTrace();
          }


      }
    }
    
}

class Consumer implements Runnable
{
    private SyncStack stack;

    public Consumer(SyncStack stack) {
    this.stack = stack;
}
    publicvoid run() {
      for(int i=0;i <stack.getProducts().length;i++)
          {
          String product =stack.pop();
          System.out.println("消费了: "+product);
          try
          {
            Thread.sleep(1000);
          }
          catch(InterruptedException e)
          {
            e.printStackTrace();
          }

          }

      
    }
}

class SyncStack
{
    private String[] products = new String[10];
    privateintindex;
    publicsynchronizedvoid push(String product)
    {
      if(index==product.length())
      {
          try {
              wait();
          } catch (InterruptedException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
      }
      notify();
      products[index]=product;
      index++;
    }
    
    publicsynchronized String pop()
    {
      if(index==0)
      {
          try {
              wait();
          } catch (InterruptedException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
      }
      notify();
      index--;
      String product = products[index];
      return product;
    }

    public String[] getProducts() {
      returnproducts;
    }
    
    
}
publicclass TestProducerConsumer {
    
    publicstaticvoid main(String[] args) {
      SyncStack stack=new SyncStack();
      Producer p=new Producer(stack);
      Consumer c=new Consumer(stack);

      new Thread(p).start();
      new Thread(c).start();
      }
    }

猜你喜欢

转载自blog.csdn.net/tiehou/article/details/44648853