代码与编程(面试与笔试java)

1.写一个Singleton出来

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

一般Singleton模式通常有几种种形式:

 public class Singleton {
     //第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
     private Singleton(){}
       //在自己内部定义自己一个实例,是不是很奇怪?
       //注意这是private 只供内部调用
        private static Singleton instance = new Singleton();
       //这里提供了一个供外部访问本class的静态方法,可以直接访问  
       public static Singleton getInstance() {
             return instance;   
       }
   }
   //第二种形式:
   public class Singleton {
       private static Singleton instance = null;
       public static synchronized Singleton getInstance() {
      //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
      //使用时生成实例,提高了效率!
         if (instance==null)
             instance=new Singleton();
         return instance;   }
     }     

其他形式:

定义一个类,它的构造函数为private的,所有方法为static的。

一般认为第一种形式要更加安全些

2.继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?


父类:

package test;
public class  FatherClass
{
    public FatherClass()
    {
     System.out.println("FatherClass Create");
 }

子类:

package test;
import test.FatherClass;
public class  ChildClass extends FatherClass
{
    public ChildClass()
    {
        System.out.println("ChildClass Create");
    }
    public static void main(String[] args)
    {
        FatherClass fc = new FatherClass();
        ChildClass cc = new ChildClass();
    }
}

输出结果:

FatherClass Create

FatherClass Create

ChildClass Create

3.Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示?


Server端程序:

package test;
import java.net.*;
import java.io.*;
public class Server
{
    private ServerSocket ss;
    private Socket socket;
    private BufferedReader in;
    private PrintWriter out;
    public Server()
    {
        try
        {
            ss=new ServerSocket(10000);
            while(true)
            {
                socket = ss.accept();
                String RemoteIP = socket.getInetAddress().getHostAddress();
                String RemotePort = ":"+socket.getLocalPort();
                System.out.println("A client come in!IP:"+RemoteIP+RemotePort);
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String line = in.readLine();
                System.out.println("Cleint send is :" + line);
                out = new PrintWriter(socket.getOutputStream(),true);
                out.println("Your Message Received!");
                out.close();
                in.close();
                socket.close();
            }
        }catch (IOException e)
        {
            out.println("wrong");
        }
    }
    public static void main(String[] args)
    {
        new Server();
    }
};

Client端程序:

 package test;
 import java.io.*;
 import java.net.*;
 public class Client
 {
     Socket socket;
     BufferedReader in;
     PrintWriter out;
     public Client()
     {
         try
         {
             System.out.println("Try to Connect to 127.0.0.1:10000");
             socket = new Socket("127.0.0.1",10000);
             System.out.println("The Server Connected!");
             System.out.println("Please enter some Character:");
             BufferedReader line = new BufferedReader(new
                 InputStreamReader(System.in));
             out = new PrintWriter(socket.getOutputStream(),true);
             out.println(line.readLine());
             in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             System.out.println(in.readLine());
             out.close();
             in.close();
             socket.close();
         }catch(IOException e)
         {
             out.println("Wrong");
         }
     }
     public static void main(String[] args)
     {
         new Client();
     }
 }; 

4.可能会让你写一段Jdbc连Oracle的程序,并实现数据查询.

 package hello.ant;
 import java.sql.*;
 public class  jdbc
 {
     String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
     String theUser="admin";
     String thePw="manager";
     Connection c=null;
     Statement conn;
     ResultSet rs=null;
     public jdbc()
     {
         try{
             Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
             c = DriverManager.getConnection(dbUrl,theUser,thePw);
             conn=c.createStatement();
         }catch(Exception e){
             e.printStackTrace();
         }
     }
     public boolean executeUpdate(String sql)
     {
         try
         {
             conn.executeUpdate(sql);
             return true;
         }
         catch (SQLException e)
         {
             e.printStackTrace();
             return false;
         }
     }
     public ResultSet executeQuery(String sql)
     {
         rs=null;
         try
         {
             rs=conn.executeQuery(sql);
         }
         catch (SQLException e)
         {
             e.printStackTrace();
         }
         return rs;
     }
     public void close()
     {
         try
         {
             conn.close();
             c.close();
         }
         catch (Exception e)
         {
             e.printStackTrace();
         }
     }
     public static void main(String[] args)
     {
         ResultSet rs;
         jdbc conn = new jdbc();
         rs=conn.executeQuery("select * from test");
         try{
             while (rs.next())
             {
                 System.out.println(rs.getString("id"));
                 System.out.println(rs.getString("name"));
             }
         }catch(Exception e)
         {
             e.printStackTrace();
         }
     }
 } 

5.将一个键盘输入的数字转化成中文输出

(例如:输入:1234567     输出:一百二拾三万四千五百六拾七)

用java语言实现,,请编一段程序实现!

 public class Reader {
     private String strNum;
     private String strNumChFormat;
     private String strNumTemp;
     private int intNumLen;
     private String strBegin;
     public Reader(String strNum) {
         this.strNum = strNum;
     }
     public boolean check(String strNum) {
         boolean valid = false;

         if (strNum.substring(0,1).equals("0")){
             this.strNum = strNum.substring(1);
         }
         try {
             new Double(strNum);
             valid = true;
         }
         catch (NumberFormatException ex) {
             System.out.println("Bad number format!");
         }
         return valid;
     }
     public void init() {
         strNumChFormat = "";
         intNumLen = strNum.length();
         strNumTemp = strNum;
         strNumTemp = strNumTemp.replace('1', '一');
         strNumTemp = strNumTemp.replace('2', '二');
         strNumTemp = strNumTemp.replace('3', '三');
         strNumTemp = strNumTemp.replace('4', '四');
         strNumTemp = strNumTemp.replace('5', '五');
         strNumTemp = strNumTemp.replace('6', '六');
         strNumTemp = strNumTemp.replace('7', '七');
         strNumTemp = strNumTemp.replace('8', '八');
         strNumTemp = strNumTemp.replace('9', '九');
         strNumTemp = strNumTemp.replace('0', '零');
         strNumTemp = strNumTemp.replace('.', '点');
         strBegin = strNumTemp.substring(0, 1);
     }
     public String readNum() {
         if (check(strNum)) {
             init();
             try {
                 for (int i = 1, j = 1, k = 1; i < intNumLen; i++) {
                     if (strNumTemp.charAt(intNumLen - 1) == '零' && i == 1) {
                         strNumChFormat = "位";
                     }
                     else if (strNumTemp.charAt(intNumLen - i) == '零' && j == 1) {
                         strNumChFormat = "位" + strNumChFormat;
                     }
                     else if (strNumTemp.charAt(intNumLen - i) == '点') {
                         j = 1;
                         k = 1;
                         strNumChFormat = strNumTemp.charAt(intNumLen - i) + strNumChFormat;
                         continue;
                     }
                     else {
                         strNumChFormat = strNumTemp.charAt(intNumLen - i) + strNumChFormat;
                     }
                     if (strNumTemp.charAt(intNumLen - i - 1) != '位' &&
                         strNumTemp.charAt(intNumLen - i - 1) != '零') {
                         if (j == 1 && i < intNumLen) {
                             strNumChFormat = '拾' + strNumChFormat;
                         }
                         else if (j == 2 && i < intNumLen) {
                             strNumChFormat = '百' + strNumChFormat;
                         }
                         else if (j == 3 && i < intNumLen) {
                             strNumChFormat = '千' + strNumChFormat;
                         }
                     }
                     if (j == 4 && i < intNumLen) {
                         j = 0;
                     }
                     if (k == 4 && i < intNumLen) {
                         strNumChFormat = '万' + strNumChFormat;
                     }
                     else if (k == 8 && i < intNumLen) {
                         k = 0;
                         strNumChFormat = '亿' + strNumChFormat;
                     }
                     j++;
                     k++;
                 }
                 while (strNumChFormat.indexOf("位") != -1) {
                     strNumChFormat = strNumChFormat.replaceAll("位", " ");
                 }
                 if (strNumChFormat.substring(0, 2) == "一拾") {
                     strNumChFormat = strNumChFormat.substring(1, strNumChFormat.length());
                 }
                 if (strNumChFormat.indexOf("点") >= 0) {
                     String rebegin = strNumChFormat.substring(0,
                         strNumChFormat.indexOf("点"));
                     String relast = strNumChFormat.substring(strNumChFormat.indexOf("点"),
                         strNumChFormat.length());
                     for (int i = 1; i <= relast.length(); i++) {
                         relast = relast.replaceAll("拾", "");
                         relast = relast.replaceAll("百", "");
                         relast = relast.replaceAll("千", "");
                         relast = relast.replaceAll("万", "");
                         relast = relast.replaceAll("亿", "");
                     }
                     strNumChFormat = rebegin + relast;
                 }
             }
             catch (ArrayIndexOutOfBoundsException ex) {
                 ex.printStackTrace();
             }
             catch (Exception ex) {
                 ex.printStackTrace();
             }
             int off = strNumChFormat.indexOf("点");
             strNumChFormat = strBegin + strNumChFormat.substring(0);
         }
         else {
             strNumChFormat = "";
         }
         return strNumChFormat;
     }
     public static void main(String args[]) {
         try {
             String number = args[0].toString();
             System.out.println("The number is: " + number);
             Reader reader = new Reader(number);
             System.out.println("Output String: " + reader.readNum());
         }
         catch (Exception ex) {
             System.out.println("Please input like that: javac Reader <number>");
         }
     }
 } 

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

以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题

 public class ThreadTest1{
     private int j;
     public static void main(String args[]){
         ThreadTest1 tt=new ThreadTest1();
         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<100;i++){
                 inc();
             }
         }
     }
     class Dec implements Runnable{
         public void run(){
             for(int i=0;i<100;i++){
                 dec();
             }
         }
     }
 } 

7.JAVA代码查错

1.

abstract class Name {

   private String name;

   public abstract boolean isStupidName(String name) {}

}

答案: 错。abstract method必须以分号结尾,且不带花括号。

2.

public class Something {

   void doSomething () {

       private String s = "";

       int l = s.length();

   }

}

有错吗?

答案: 错。局部变量前不能放置任何访问修饰符 (private,public,和protected)。final可以用来修饰局部变量

(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。

3.

abstract class Something {

   private abstract String doSomething ();

}

这好像没什么错吧?

答案: 错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstract

method封锁起来呢? (同理,abstract method前不能加final)。

4.

public class Something {

   public int addOne(final int x) {

       return ++x;

   }

}

这个比较明显。

答案: 错。int x被修饰成final,意味着x不能在addOne method中被修改。

5.

public class Something {

   public static void main(String[] args) {

       Other o = new Other();

       new Something().addOne(o);

   }

   public void addOne(final Other o) {

       o.i++;

   }

}

class Other {

   public int i;

}

和上面的很相似,都是关于final的问题,这有错吗?

答案: 正确。在addOne method中,参数o被修饰成final。如果在addOne method里我们修改了o的reference

(比如: o = new Other();),那么如同上例这题也是错的。但这里修改的是o的member vairable

(成员变量),而o的reference并没有改变。

6.

class Something {

    int i;

    public void doSomething() {

        System.out.println("i = " + i);

    }



有什么错呢? 看不出来啊。

答案: 正确。输出的是"i = 0"。int i属於instant variable (实例变量,或叫成员变量)。instant variable有default value。int的default value是0。

7.

class Something {

    final int i;

    public void doSomething() {

        System.out.println("i = " + i);

    }

}

和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?

答案: 错。final int i是个final的instant variable (实例变量,或叫成员变量)。final的instant variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为"final int i = 0;"。

8.

public class Something {

     public static void main(String[] args) {

        Something s = new Something();

        System.out.println("s.doSomething() returns " + doSomething());

    }

    public String doSomething() {

        return "Do something ...";

    }

}

 看上去很完美。

答案: 错。看上去在main里call doSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。static method不能直接call non-static methods。可改成"System.out.println("s.doSomething() returns " + s.doSomething());"。同理,static method不能访问non-static instant variable。

9.

此处,Something类的文件名叫OtherThing.java

class Something {

    private static void main(String[] something_to_do) {        

        System.out.println("Do something ...");

    }

}

 这个好像很明显。

答案: 正确。从来没有人说过Java的Class名字必须和其文件名相同。但public class的名字必须和文件名相同。

10.

interface  A{

   int x = 0;

}

class B{

   int x =1;

}

class C extends B implements A {

   public void pX(){

      System.out.println(x);

   }

   public static void main(String[] args) {

      new C().pX();

   }

}

答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时import java.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为 public static final.所以可以通过A.x来明确。

11.

interface Playable {

    void play();

}

interface Bounceable {

    void play();

}

interface Rollable extends Playable, Bounceable {

    Ball ball = new Ball("PingPang");

}

class Ball implements Rollable {

    private String name;

    public String getName() {

        return name;

    }

    public Ball(String name) {

        this.name = name;        

    }

   public void play() {

        ball = new Ball("Football");

        System.out.println(ball.getName());

    }

}

这个错误不容易发现。

答案: 错。"interface Rollable extends Playable, Bounceable"没有问题。interface可继承多个interfaces,所以这里没错。问题出在interface Rollable里的"Ball ball = new Ball("PingPang");"。任何在interface里声明的interface variable (接口变量,也可称成员变量),默认为public static final。也就是说"Ball ball = new Ball("PingPang");"实际上是"public static final Ball ball = new Ball("PingPang");"。在Ball类的Play()方法中,"ball = new Ball("Football");"改变了ball的reference,而这里的ball来自Rollable interface,Rollable interface里的ball是public static final的,final的object是不能被改变reference的。因此编译器将在"ball = new Ball("Football");"这里显示有错。

代码与编程(java基础)的更多相关文章

  1. Java基础(二十三)GUI图形界面编程(Java基础完)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  2. 【代码笔记】Java基础:Java的方法和类

    面向过程与面向对象都是我们编程中,编写程序的一种思维方式.例如:公司打扫卫生(擦玻璃.扫地.拖地.倒垃圾等), 按照面向过程的程序设计方式会思考“打扫卫生我该怎么做,然后一件件的完成”,最后把公司卫生 ...

  3. 【代码笔记】Java基础:类的继承(构造器)

    在Java中,创建对象的格式为: 类名 对象名 = new 类名(): 如: 1 JFrame jf = new JFrame(); 一个对象被创建出来时,经常要先做一些事这个对象才能正常使用,也可以 ...

  4. Java基础学习-- 继承 的简单总结

    代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...

  5. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  6. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  7. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  8. JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)

    本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...

  9. JAVA基础——编程练习(二)

    JAVA编程练习(二) 今天我为了巩固之前的java基础知识的学习,再次进行实战演习,编写了一个小小的java控制台程序,主要是运用java面向对象的思想来完成这个小项目. 一.项目背景介绍 根据所学 ...

随机推荐

  1. 深入理解HTTP协议—HTTP协议详解(真的很经典)

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  2. 使用Coding.net+Hexo+node.js+git来搭建个人博客

    使用Coding.net来搭建基于Hexo的博客 一.准备工作 什么是Coding.net Coding可以说,就是国产的Github,但是,有一个功能使它似乎超越了GitHub-那就是 Web ID ...

  3. Java基础---IO(三)--IO包中的其他类

    第一讲     对象序列化 一.概述 将堆内存中的对象存入硬盘,保留对象中的数据,称之为对象的持久化(或序列化).使用到的两个类:ObjectInputStream和ObjectOutputStrea ...

  4. JSON取值(key是中文或者数字)方式详解

    JSON取值(key是中文或者数字)方式详解 先准备一个json对象用于演示 var json = {'name':'zhangsan', '年龄':23, 404:'你可能迷路了'}; 使用JS中w ...

  5. 第2阶段——编写uboot之编译测试以及改进(3)

    编译测试: 1.将写好的uboot复制到linux下面 2.make编译,然后将错误的地方修改,生成boot.bin (编译出错的解决方案:http://www.cnblogs.com/lifexy/ ...

  6. 【全面总结】js获取元素位置大小

    [js获取元素位置+元素大小]全面总结 目录 1.关于offset offsetParent(只读) offsetTop(只读) offsetLeft(只读) offsetHeight(只读) off ...

  7. Swiper 滑动

    1.http://www.swiper.com.cn/download/  下载Swiper.JS  Swiper.CSS 2.引入项目,添加html <div class="cont ...

  8. Java线程调度—休眠

    线程休眠的方法是Thread.sleep(long millis) 和Thread.sleep(long millis, int nanos) ,均为静态方法,那调用sleep休眠的哪个线程呢?简单说 ...

  9. ABB-robotstudio离线编程-Smart组件资料-笔记

    Smart组件 目录: 1.“信号与属性”子组件. 2.“参数与建模”子组件. 3.“传感器”子组件. 4.“动作”子组件. 5.“本体”子组件. 6.“其他”子组件. 一.“信号与属牲”子组件 1. ...

  10. MPLS LDP随堂笔记1

    LDP 的使用原因(对于不同协议来说) LDP的四大功能 发现邻居 hello 5s 15s 224.0.0.2 发现邻居关系 R1 UDP 646端口 R2 UDP 646端口 此时形成邻居 建立邻 ...