Java笔试之编程题库
Java笔试题库之编程题库 总共30道编程题,掌握了就可以应付中级以内Java面试题 1 .编程实现:二分搜索算法 解答: public class SearchTest ( /**被搜索数据的大小7 private static final int size = 5000000; public static void main(String[] args) ( long[] data = new long[size]; //添加测试数据 for (int k = 0; k < data.length; k++) ( data[k] = k; ) //要查找的数据 long target = 4970002; binaryFindTest(data, target); } /** *二分搜索算法实现 * * @param data *数据集合 * @param target *搜索的数据 *@return返回找到的数据的位置,返回・1表示没有找到。 */ public static int binaryFind(long[] data, long target) ( int start = 0; int end = data.length - 1; while (start = data[middlelndex]) ( start = middlelndex + 1; } else ( end = middlelndex - 1; ) ) return -1; ) /** *二分搜索测试 * * @param data *数据集合 * @param target *搜索的数据 7 public static void binaryFindTest(long[] data, long target) ( long start = System.nanoTime(); int result = binaryFind(data, target); long end = System.nanoTime(); System.out.println( ubinary search position: “ + result); System.out.println( “binary search time: “ + (end - start)); ) ) 2. 编程实现:线程A向队列Q中不停写入数据,线程B从队列Q中不停读取数据(只要Q 中有数据)。 解答: 接口中有两个一个是向队列中写push方法一个是从队列中读。 public interface Stackinterface ( public void push(int n); public int[] pop(); ) 上边接口的实现类。 public class SafeStack implements Stackinterface ( private int top = 0; private int[] values = new int[10]; private boolean dataAvailable = false; public void push(int n) ( synchronized (this) ( while (dataAvailable) //1 try{ wait(); } catch (InterruptedException e) ( //忽略//2 ) ) values[top] = n; System.out.println(“压入数字” + n + “步骤 1 完成”); top++; dataAvailable = true; notifyAII(); System.out.println( “压入数字完成”); ) ) public int[] pop() ( synchronized (this) ( while (!dataAvailable) // 3 ( try{ wait(); } catch (InterruptedException e) ( //忽略//4 ) ) System.out.print(“弹出”); top -; int[] test = ( values[top], top ); dataAvailable = false; //唤醒正在等待压入数据的线程 notify All(); return test; ) ) } 读线程 public class PopThread implements Runnable ( private Stackinterface s; public PopThread(Stacklnterface s) ( this.s = s; ) public void run() ( while(true) ( System.out.println(+ s.pop()[0] + “v-“); try( Thread.sleep(100); ) catch (I interrupted Exception e)() ) ) ) 写线程 public class PushThread implements Runnable ( private Stackinterface s; public PushThread(Stacklnterface s) ( this.s = s; ) public void run() ( inti = 0; while(true) ( java.util.Random r = new java.util.Random(); i = r.nextlnt(IO); s.push(i); try{ Thread.sleep(100); ) catch(lnterruptedException e)() ) ) ) 3. 编程实现:使用Socket经行网络通信时,客户端和服务器端流程。 解答: 服务器,使用Serversocket监听指定的端口,端口可以随意指定(由于1024以下的端口通 常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等 待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。 客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功, 打开会话;会话完成后,关闭Socketo客户端不需要指定打开的端口,通常临时的、动态 的分配一个1024以上的端口。 4. 编写代码实现同一平面内两圆是否碰撞,其中: 第一个圆圆心坐标为(x1,y