编程题

1.排序算法,例如:冒泡、选择等算法

  冒泡排序代码如下:

int temp;
int a[] = { 10, 4, 3, 6, 2 };
for (int i = 0; i < a.length; i++) {
	for (int j = 0; j < a.length - i - 1; j++) {
		if (a[j] > a[j + 1]) {
			temp = a[j];
			a[j] = a[j + 1];
			a[j + 1] = temp;
		}
	}
}
-----------
    选择排序代码如下:
 
int a[] = { 10, 4, 3, 6, 2 };  
for(int i=0;i<a.length-1;i++){
	for(int j=i+1;j<a.length;j++){
		if(a[j]<a[i]){
			int temp=a[i];
			a[i]=a[j];
			a[j]=temp;
		}
	}
}
——————————————————————

2.单例例子
懒汉式线程安全性能都优的例子如下:
package cn.xxx.xxx
public class Singleton{
   //对保存实例的变量添加volatile的修饰
   private volatile static Singleton instance = null;

   //使用private修饰作用是外部不能直接new Singleton()创建实例,只能使用getInstance()方法创建实例
   private Singleton(){}
	
   public static Singleton getInstance(){
      //先检查实例是否存在,如果不存在才进行下面的同步块
      if(instance == null){
         //同步块,线程安全的创建实例
         synchronized(Singleton.class){
            //再次检查实例是否存在,如果不存在才直正创建实例
            if(instance == null){
               instance = new Sinleton();
            }
         } 
      }
     return instance;
   }
}
——————————————————————

3.一个射击运动员打靶,靶一共有10环,连开10枪打中90环的可能性有多少种?(递归算法)
import java.util.Stack;
public class First {

	static int time=10;
    /** 
     * 一个射击运动员打靶,靶一共有10环,连开10枪打中90环的可能性有多少种? 
     * 请用递归算法编程实现。[中国某著名通信企业H面试题] 
     * @param args 
     */  
    public static void main(String[] args) {
        // TODO Auto-generated method stub  
//      连续开枪的次数  
//      打枪的的总环数环数  
        int Boomcount = 0;  
        Stack<Integer> li=new Stack<Integer>();  
        Hitprobability(li,time,Boomcount);  
    }
  
    private static void Hitprobability(Stack<Integer> li, int time,int boomcount) {
        // TODO Auto-generated method stub  
        if(time>0){
            for(int i=0;i<11;i++){
                if(10*(11-time)-boomcount-i<=10){
                    li.push(i);
                    Hitprobability(li, time-1, boomcount+i);
                    li.pop();
                }
            }
        }else if(time==0){
            if(boomcount==90){
                for(int i:li){  
                    System.out.print(i+"--");  
                }
                System.out.println("");  
            }
        }
    }
}

=========================================================== 1. 写一个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;   
      } 
}   

第二种形式: 
package cn.xxx.xxx
public class Singleton{
   //对保存实例的变量添加volatile的修饰
   private volatile static Singleton instance = null;

   //使用private修饰作用是外部不能直接new Singleton()创建实例,只能使用getInstance()方法创建实例
   private Singleton(){}
	
   public static Singleton getInstance(){
      //先检查实例是否存在,如果不存在才进行下面的同步块
      if(instance == null){
         //同步块,线程安全的创建实例
         synchronized(Singleton.class){
            //再次检查实例是否存在,如果不存在才直正创建实例
            if(instance == null){
               instance = new Sinleton();
            }
         } 
      }
     return instance;
   }
}

——————————————————————

2.Java编程,打印昨天的当前时刻
 public class YesterdayCurrent { 
      public void main(String[] args){ 
  	Calendar cal = Calendar.getInstance();  
  	cal.add(Calendar.DATE, -1);  
 	 System.out.println(cal.getTime());  
	}
}  
——————————————————————

3. 给定一个日期2031-7-2,求出该日为星期几(已知2002-3-28为星期四)。只要求说明思路,不要写java code

答:算出2002-3-28 和 2031-7-2 一共相差多少天,然后 取余 7 。 就能算出来周几
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date d = sdf.parse("2031-7-2");
            sdf = new SimpleDateFormat("EEE");
            String str = sdf.format(d);
            System.out.println(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
//输出结果 : 星期三
——————————————————————

4.文件读写,实现一个计数器
public int getNum(){       
   int i = -1;       
   try{     
 String stri="";
         BufferedReader in = new BufferedReader(new FileReader(f));     
         while((stri=in.readLine())!=null){   
            i = Integer.parseInt(stri.trim());    
         }          
 in.close();     
               }catch(Exception e){
           e.printStackTrace();   
      }      
      return i;  
    }  

         public void setNum(){     
  int i = getNum();    
   i++;      
          try{       
    PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(f,false)));   
             out.write(String.valueOf(i));            //可能是编码的原因,如果直接写入int的话,将出现java编码和 windows编码的混乱,因此此处写入的是String        
    out.close() ;      
             }catch(Exception e){   
                e.printStackTrace();     
    } 
} 
——————————————————————


5.指出下面程序的运行结果:
class A{
    static{
        System.out.print("1");    
    }    
public A(){
        System.out.print("2");    
}
}

class B extends A{
    static{        
System.out.print("a");    
    }    
    public B(){
        System.out.print("b");    
    }   
}
public class Hello{
    public static void main(String[] ars){
        A ab = new B(); 
        执行到此处,结果: 1a2b    
    }
}      

//注:类的static 代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的加载,首先要执行其基类的构造,再执行其本身的构造 
——————————————————————

6.给你一个:驱动程序A,数据源名称为B,用户名称为C,密码为D,数据库表为T,请用JDBC检索出表T的所有数据
package dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Test {
 private String className="A";
 private String url="B";
 private String user="C";
 private String password="D";
 private Connection connection;
 private Statement statement;
 private ResultSet resultSet;

 public Connection getConn() {
  try {
   Class.forName(className);
   connection = DriverManager.getConnection(url, user, password);
  } catch (ClassNotFoundException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  } catch (SQLException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  }
  return connection;
 }
 
 public ResultSet executeQuery(String sql) {
  connection=getConn();
  try {
   statement = connection.createStatement();
   resultSet = statement.executeQuery(sql);
  } catch (SQLException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  }
  return resultSet;
 }
 
 public static void main(String[] args) {
  Test test = new Test();
  ResultSet set = test.executeQuery("select * from T");
 }
}
——————————————————————

7.用socket通讯写出客户端和服务器端的通讯,要求客户发送数据后能够回显相同的数据。参见课程中socket通讯例子
public class ServerSocket_1
{
    public static void main(String[] args) throws Exception
    {
        ServerSocket ss = new ServerSocket(4001);
        Socket s = ss.accept();
        BufferedReader br = new BufferedReader(new InputStreamReader(s. getInputStream()));
        PrintStream ps=new PrintStream(s.getOutputStream());
        String temp = br.readLine();

        while (true)
        {
            System.out.println("客户端:"+temp);
            ps.println(temp);

        if (temp.equals("stop"))
            {
                break;
            }
            temp = br.readLine();
        }

        br.close();
        ps.close();
        ss.close();
    }
}

public class ClientSocket
{
  public static void main(String[] args) throws Exception
  {
      Socket s = new Socket("localhost", 4001);

      PrintStream ps = new PrintStream(s.getOutputStream());

      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

      BufferedReader br_server = new BufferedReader(new InputStreamReader(s. getInputStream()));

      String temp = br.readLine();

      while (true)
      {
          ps.println(temp);
          temp = br_server.readLine();
          System.out.println("服务器的信息:" + temp);

          if (temp.equals("stop"))
          {
              break;
          }
          temp = br.readLine();
      }
      s.close();
      br.close();
      br_server.close();
  }
}
——————————————————————

8.我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,请写一个能够输出符合某种编码的字符串的小例子?
public String translate (String str) { 
  String tempStr = ""; 
  try { 
    tempStr = new String(str.getBytes("ISO-8859-1"), "GBK"); 
    tempStr = tempStr.trim(); 
  } 
  catch (Exception e) { 
    System.err.println(e.getMessage()); 
  } 
  return tempStr; 
} 
——————————————————————


9、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。
public class TestThread {

	private int j;

	public static void main(String args[]) {
		TestThread tt = new TestThread();

		Inc inc = tt.new Inc();
		Dec dec = tt.new Dec();

		for (int i = 0; i < 2; i++) {
			Thread t = new Thread(inc);
			t.start();
			t = new Thread(dec);
			t.start();
		}
	}

	private synchronized void inc() {
		j++;
		System.out.println(Thread.currentThread().getName() + "+inc:" + j);
	}

	private synchronized void dec() {
		j--;
		System.out.println(Thread.currentThread().getName() + "-dec:" + j);
	}

	class Inc implements Runnable {
		public void run() {
			for (int i = 0; i < 10; i++) {
				inc();
			}
		}
	}

	class Dec implements Runnable {
		public void run() {
			for (int i = 0; i < 10; i++) {
				dec();
			}
		}
	}

}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值