1.排序算法,例如:冒泡、选择等算法
选择排序代码如下:
2.单例例子
3.一个射击运动员打靶,靶一共有10环,连开10枪打中90环的可能性有多少种?(递归算法)
冒泡排序代码如下:
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环的可能性有多少种?(递归算法)
=========================================================== 1. 写一个Singleton模式的例子Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。一般Singleton模式通常有几种种形式: 第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。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(""); } } } }
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(); } } } }