`
ppeter
  • 浏览: 18897 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

(转) java程序员面试150++ (下)

阅读更多
}
        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>");
    }
  }
}

 149、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;
}

  答案: 正确。在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) 和上面一题只有一个地方不同,就是多了一个final。下面这段代码有错吗?

class Something {
  final int i;

  public void doSomething() {
    System.out.println("i = " + i);
  }
}

  答案: 错。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的名字必须和文件名相同,错误,main一定是public的。

  (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");"这里显示有错。

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

分享到:
评论

相关推荐

    2018年java-程序员面试宝典+题库

    2018java程序员面试宝典+题库,很全。压缩的文档,打开是PDF版

    JAVA程序员面试宝典++第4版

    《JAVA程序员面试宝典++第4版》是一本专为准备Java编程面试的开发者量身定制的指南。这本书深入探讨了Java语言的核心概念、高级特性以及在实际开发和面试中常遇到的问题。作为第四版,它反映了最新的Java版本特性,...

    Java 面试题库,2018-2019年黑马最新版Java程序员面试宝典+题库pdf.zip

    Java 面试题库,2018-2019年黑马最新版Java程序员面试宝典+题库pdf。 我们培训班刚发的面试题,2018年黑马最新程序员面试宝典+题库,内容包含大量java程序员初级知识点,以及框架的应用,js的基础。需要的赶紧下载...

    Java程序员面试宝典+题集(最新)

    《Java程序员面试宝典+题集》是一份针对Java开发者准备面试的重要参考资料,它涵盖了Java编程语言的基础知识、进阶概念、设计模式、框架应用、并发处理、性能优化等多个方面,旨在帮助求职者全面理解并掌握Java技术...

    Java程序员面试宝典+.rar

    Java程序员面试宝典是一本专为Java开发者准备的面试指南,涵盖了从基础知识到高级概念的全方位内容,旨在帮助求职者顺利通过技术面试。这本书对于正在寻找Java开发职位的程序员来说,是一份非常实用的参考资料。 在...

    Java程序员面试宝典+笔试题(最新)

    Java程序员面试宝典是每一位Java开发者在求职过程中不可或缺的参考资料,它涵盖了广泛的Java技术知识点,旨在帮助应聘者准备各类面试和笔试。这份“Java程序员面试宝典+笔试题(最新)”显然是一份集合了诸多知名IT...

    2018最新版Java程序员面试宝典+题库

    《2018最新版Java程序员面试宝典+题库》是针对Java程序员精心编纂的一本面试必备参考资料,共计500多页,涵盖了Java编程领域的诸多核心知识点和常见面试问题。这本书由"黑马程序员"机构出品,专门针对Java开发者在...

    Java程序员面试资料及简历模版

    Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历...

    Java 程序员面试宝典 + 程序员面试宝典

    金三银四马上就要到了,一边是大批同学涌入职场,另一边是大群职场人打算跳槽,在这个重要的节点,Java...除了掌握扎实的专业技能之外,还需要一份《Java 程序员面试宝典》才能在万千面试者中杀出重围,成功拿下offer。

    java程序员面试交流项目经验

    java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流...

    2018-2019年黑马最新版Java程序员面试宝典+题库pdf

    《2018-2019年黑马最新版Java程序员面试宝典+题库pdf》是一份集合了近年来Java编程领域重点知识和面试常见问题的综合资源。这份资料主要针对初级Java程序员,旨在帮助他们巩固基础知识,掌握面试技巧,以便在求职...

    java程序员面试宝典+java EE面试题

    Java程序员面试宝典和Java EE面试题是两本至关重要的资源,专为应届毕业生和寻求职业转变的程序员设计,帮助他们准备面试并提升在技术面试中的表现。这两本书涵盖了广泛的Java编程和Java企业级应用开发的知识点,...

    【书】Java程序员面试宝典+杨磊

    本书《Java程序员面试宝典》由杨磊等编著,由清华大学出版社出版,是Java程序员在求职面试前不可或缺的准备材料。它集结了200个Java技术面试的真题,并对这些题目进行了详细解析,旨在帮助应聘者掌握企业招聘Java...

    Java程序员面试宝典

    《Java程序员面试宝典》主要内容简介:目前许多开发者对Java语言及其底层原理掌握不牢固,在面试过程中经常漏洞百出,无法取得好成绩。而招聘单位为了得到高素质的员工往往使出浑身解数,采用各种形式的面试考察求职...

    Java程序员面试宝典+第二版.pdf

    这本书非常有名,对于毕业生来说应聘程序员是非常有帮助的。

    2021最新Java程序员面试题

    在当前的IT行业中,Java程序员面试已经逐步升级为考察应聘者对多个技术栈的综合理解和应用能力。以下内容根据提供的文件信息整理出的Java程序员面试知识点: 1. MyBatis框架 - MyBatis定义:MyBatis是一个支持定制...

    Java程序员面试笔试宝典-何昊pdf版

    根据提供的文件信息,我们可以推断出这是一本关于Java程序员面试和笔试准备的书籍,作者为何昊。本书可能包含了大量关于Java编程语言的基础知识、高级特性以及与面试相关的技巧和策略等内容。下面将对可能涉及的重要...

    java程序员面试笔试宝典 + 115个Java面试题和答案+进入IT行业必读的324个java面试题

    Java程序员在面试和笔试过程中,会遇到各种各样的问题,这些问题涵盖了Java语言的基础、进阶、多线程、网络编程、数据库操作、设计模式、框架应用等多个方面。本篇文章将根据提供的资料,深入探讨其中的一些关键知识...

Global site tag (gtag.js) - Google Analytics