`
tntxia
  • 浏览: 1507270 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

构造最全的Java面试题整理(编程题)

阅读更多

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;    
       } 
    } 
第二种形式
public class Singleton { 
   private static Singleton instance = null;
   public static synchronized Singleton getInstance() {
   // 这个方法比上面有所改进,不用每次都进行生成对象,只是第一次       
   // 使用时生成实例,提高了效率!
   if (instance==null)
     instance new Singleton();
     return instance; 
  

其他形式 :
定义一个类,它的构造函数为 private 的,所有方法为 static 的。
一般认为第一种形式要更加安全些  

 

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();
 }
};

 

 

将一个键盘输入的数字转化成中文输出
(例如:输入: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>");
    }
  }
}

 

4、设计 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();
}
 }
  }
}

0
2
分享到:
评论

相关推荐

    Java面试题以及答案整理.pdf

    为了在Java面试中脱颖而出,了解和掌握常见的面试题及答案至关重要。以下是一些关键知识点的详细解析: 1. **super()与 this()的区别** `super()`用于调用父类的构造器,确保子类实例化时父类的初始化;`this()`则...

    java面试题整理集合

    Java面试题整理集合 在Java领域,面试是评估求职者技术实力的重要环节。这份整理集合涵盖了Java编程语言的基础、进阶、并发、内存管理、框架等多个方面,旨在帮助准备面试的开发者全面了解并掌握Java的核心知识。...

    史上最全的Java面试题独家整理.zip

    这份“史上最全的Java面试题独家整理”无疑是准备Java面试者的宝贵资源。 面试题通常涵盖以下几个核心领域: 1. **基础语法**:包括变量、数据类型、运算符、流程控制语句(如if、switch、for、while)、类与对象...

    Java面试题和练习题

    本文将基于标题“Java面试题和练习题”以及描述中提到的内容,深入探讨Java相关的面试题和练习题,旨在帮助求职者或希望提升技能的开发者巩固知识,准备面试。 一、Java基础 1. Java的数据类型:了解Java的八种...

    2021年Java大厂面试题整理大全

    以上只是部分Java面试中常见的知识点,实际的“2021年Java大厂面试题整理大全”可能还包括设计模式、分布式、微服务、性能优化等方面的问题。通过深入学习和理解这些内容,可以有效提升面试成功的概率,为在Java大厂...

    Java基础面试题整理(附答案)

    ### Java基础面试题知识点解析 #### 一、面向对象的特征 面向对象编程(OOP)是Java编程的核心概念之一,其主要特征包括: - **封装**:将对象的状态信息(属性)隐藏在对象内部,仅对外提供有限的操作接口。封装提高...

    JAVA 面试题整理.doc

    Java 是一种广泛使用的...以上是Java面试中常见的知识点,深入理解和掌握这些内容将有助于你在面试中表现出色。同时,了解Spring框架的核心概念,如依赖注入和AOP,以及Ajax在Web交互中的应用,也会增加你的竞争力。

    Java面试题整理

    Java面试题整理主要涵盖了许多Java编程的核心概念和实践问题,这些问题可以帮助面试者检验他们的技能和对Java语言的理解程度。以下是一些重点知识点的详细说明: 1. **面向对象**:这是Java的基础,包括封装、继承...

    java中级面试题整理

    Java面试题涵盖广泛,从基础到进阶,再到算法、并发、中间件等方面,以下是根据题目内容整理出的知识点详解: 一、Java基础 1. Java的数据类型:包括基本数据类型(整型、浮点型、字符型、布尔型)和引用数据类型...

    最终JAVA面试题目汇总 Java面试题集锦 Java面试题大全 java面试100题目.pdf

    本资料集合了多个面试题库,涵盖了Java的基础、进阶及热门技术,是准备Java面试的宝贵资源。 一、Java基础 1. Java语言特性:了解Java的面向对象特性,如封装、继承、多态,以及异常处理、垃圾回收机制等。 2. ...

    Java编程题全集及面试题合集

    这份资料包括了"JAVA编程题全集(100题及答案).doc"文档和"Java面试题以及答案.pdf",两者都提供了详细的解答,使得学习者不仅能做题,还能理解解题思路。 一、Java编程题全集: 这个部分通常会包含各种难度级别的...

    Java企业面试题整理及答案

    ### Java企业面试题知识点梳理 #### 一、Java面向对象基础 **1. super()与this()的区别** - **super()**: 是指父类构造器的引用,用于调用父类的构造方法或访问父类的成员。在子类构造器中使用 `super()` 可以调用...

    高级Java经典面试题2019

    本文总结了《高级Java经典面试题2019》中关于并发编程、JVM和Spring框架等方面的重要知识点。通过深入理解这些概念和技术,可以帮助开发者更好地掌握Java核心技术,提高面试竞争力。希望本文能为读者提供有益的帮助...

    Java常见面试题208道.docx

    面试中,Java开发者需要对基础知识、容器、多线程、反射、对象拷贝、Java Web、异常处理、网络编程、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、消息中间件如RabbitMQ和Kafka、...

    java 面试题(最新最全java面试题汇总)

    Java面试题涵盖了许多核心Java知识点,这些知识点对于理解和掌握Java编程语言至关重要。以下是根据题目内容整理的一些关键知识点: 1. **非静态方法调用**: - Java中,非静态方法需要对象实例才能调用。因此,...

    2024年java面试题

    Java面试题涵盖了许多核心概念,包括基础语法、JVM、线程、Spring框架以及MySQL数据库的相关知识。以下是对这些知识点的详细解释: 1. **接口与抽象类的区别**: - 接口是完全抽象的,只能包含方法签名,不能有...

    张孝祥整理的JAVA面试题宝典

    张孝祥整理的JAVA面试题宝典,无疑为准备Java面试的求职者提供了一份宝贵的参考资料。下面,我们将深入探讨其中可能涉及的一些关键知识点。 1. **基础语法**:面试通常会从Java的基础开始,包括数据类型(原始与...

    2018年java面试题&amp;答案大全(整理全面版)

    为了帮助准备Java面试的求职者,以下是一份详细的2018年Java面试题及答案的概述,涵盖了基础到进阶的多个方面。 一、Java基础知识 1. Java的特性:Java具有跨平台性、面向对象、健壮性、安全性、高效性等特点。 2. ...

    java综合面试题 java综合面试题

    3. **内存管理**:Java的内存管理主要通过垃圾收集机制实现,面试中可能会讨论内存的分配、对象的生命周期、垃圾回收算法(如标记-清除、复制、标记-整理、分代收集)及其优缺点。 4. **多线程**:Java提供了丰富的...

Global site tag (gtag.js) - Google Analytics