15道非常经典的Java面试题 附详细答案

试题如下:

参考答案:

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Created by ysc on 7/26/16.
 */
public class Interview {
 private static void one(){
 String str1 = "hello";
 String str2 = "he"+new String("llo");
 System.err.println(str1==str2);
 System.out.println("1. false");
 }
 private static void two(){
 int i = Integer.MAX_VALUE;
 System.err.println((i+1)<i);
 System.out.println("2. 存在一个i, 使得(i+1)<i");
 }
 private static void three(){
 System.err.println("gc is not a Java Thread, it is a native thread");
 Thread.getAllStackTraces().keySet().forEach(thread -> System.out.println(thread.getName()+"->"+thread.isDaemon()+" "+thread.getPriority()));
 System.out.println("3. gc线程是daemon线程");
 }
 private static volatile int count = 0;
 private static void four(){
 ExecutorService executorService = Executors.newCachedThreadPool();
 for(int j=0; j<10; j++){
  executorService.submit(()->{
  for(int i=0; i<1000000; i++){
   count++;
  }
  });
 }
 System.out.println("count should be: "+10000000+", actual be: "+count);
 System.out.println("4. volatile不能保证线程安全");
 }
 private static void five(){
 ArrayList<Integer> list = new ArrayList<>(20);
 list.add(1);
 System.out.println("debug code, not execute grow method");
 System.out.println("5. list grow 0 times");
 }
 private static void six() {
 System.out.println("BufferedReader's constructor only accepts a Reader instance");
 System.out.println("6. new BufferedReader(new FileInputStream(\"a.dat\")); is wrong");
 }
 private static void seven() {
 try{
  if(true){
  throw new IOException();
  }
 }catch (FileNotFoundException e){
  System.out.print("FileNotFoundException!");
 }catch (IOException e){
  System.out.print("IOException!");
 }catch (Exception e){
  System.out.print("Exception!");
 }
 System.out.println("\n7. IOException!");
 }
 private static void eight() {
 System.out.println("String s;System.out.println(s); error: variable s might not have been initialized\nRecompile with -Xlint:unchecked for details.");
 System.out.println("8. 由于String s没有初始化, 代码不能编译通过");
 }
 private static void nine() {
 System.out.println("5"+2);
 System.out.println("9. 52");
 }
 private static void ten() {
 int i = 2;
 int result = 0;
 switch(i){
  case 1:
  result = result + i;
  case 2:
  result = result + i * 2;
  case 3:
  result = result + i * 3;
 }
 System.out.println("result="+result);
 System.out.println("10. 10");
 }
 private static class Null{
 public static void hello(){
  System.out.println("hello");
 }
 public static void main(String[] args) {
  ((Null)null).hello();
  Null _null = (Null)null;
  _null.hello();
 }
 }
 private static class StringExample1{
 String str = new String("good");
 char[] ch = {'a', 'b', 'c'};
 public void change(String str, char[] ch){
  str = "test ok";
  ch[0] = 'g';
 }

 public static void main(String[] args) {
  StringExample1 ex = new StringExample1();
  ex.change(ex.str, ex.ch);
  System.out.print(ex.str+" and ");
  System.out.print(ex.ch);
  System.out.println();
 }
 }
 private static class StringExample2{
 public static void change(String str){
  str = "welcome";
 }

 public static void main(String[] args) {
  String str = "1234";
  change(str);
  System.out.println(str);
 }
 }
 private static class ForLoop{
 static boolean foo(char c){
  System.out.print(c);
  return true;
 }

 public static void main(String[] args) {
  int i=0;
  for(foo('A');foo('B')&&(i<2);foo('C')){
  i++;
  foo('D');
  }
  System.out.println();
 }
 }
 private static class HelloA{
 public HelloA(){
  System.out.println("HelloA");
 }

 { System.out.println("I'm A class"); }

 static {
  System.out.println("static A");
 }
 }
 private static class HelloB extends HelloA{
 public HelloB(){
  System.out.println("HelloB");
 }

 { System.out.println("I'm B class"); }

 static {
  System.out.println("static B");
 }

 public static void main(String[] args) {
  System.out.println("main start");
  new HelloB();
  new HelloB();
  System.out.println("main end");
 }
 }
 public static void main(String[] args) {
 one();
 two();
 three();
 four();
 five();
 six();
 seven();
 eight();
 nine();
 ten();
 Null.main(null);
 StringExample1.main(null);
 StringExample2.main(null);
 ForLoop.main(null);
 HelloB.main(null);
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 适用于Java程序员的10道XML面试题 新鲜出炉

    包括web开发人员的Java面试在内的各种面试中,XML面试题在各种编程工作的面试中很常见.XML是一种成熟的技术,经常作为从一个平台到其他平台传输数据的标准.XML面试问题包括用于转换XML文件的XSLT技术,XPATH,XQuery等各种XML技术和XML基础知识,比如DTD或者Schema. 本文将看到10道常见的XML面试问答题.这些问题大部分在Java面试中会问到,同时在C,C++,Scala或其他语言的编程面试中同样很有用处.XML并不依赖于其他编程语言,同SQL一样是编程人员所需要

  • 15个高级Java多线程面试题及回答

    Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题.在投资银行业务中多线程和并发是一个非常受欢迎的话题,特别是电子交易发展方面相关的.他们会问面试者很多令人混淆的Java线程问题.面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面.用于直接面向市场交易的高容量和低延时的电子交易系统在本质上是并发的.下面这些是我在不同时间不同地点喜欢问的Jav

  • Java面试题之基本语法(图解)

    本文的主要内容包括在下图,下面来一起看看吧. 1.&和&&的区别 2.switch switch语句能否作用在byte,能否作用在long上,能否作用在String上,还能用在哪里? switch支持的类型是byte,short,char,int.本质上说,switch仅仅只能支持int类型.(byte,short,char,会自动提升为int类型),所以,switch不支持long类型 3.final 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变 4.&

  • 关于Java集合框架面试题(含答案)上

    1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现.集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类. (2)随着使用经过严格测试的集合框架类,代

  • 最有价值的50道java面试题 适用于准入职Java程序员

    下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最新版本,去掉了EJB 2.x等无用内容,补充了数据结构和算法相关的题目.经典面试编程题.大型网站技术架构.操作系统.数据库.软件测试.设计模式.UML等内容,同时还对很多知识点进行了深入的剖析,例如hashCode方法的设计.垃圾收集的堆和代.Java新的并发编程.NIO.2等,相信对准备入职的Ja

  • JAVA实现链表面试题

    这份笔记整理了整整一个星期,每一行代码都是自己默写完成,并测试运行成功,同时也回顾了一下<剑指offer>这本书中和链表有关的讲解,希望对笔试和面试有所帮助. 本文包含链表的以下内容: 1.单链表的创建和遍历 2.求单链表中节点的个数 3.查找单链表中的倒数第k个结点(剑指offer,题15) 4.查找单链表中的中间结点 5.合并两个有序的单链表,合并之后的链表依然有序[出现频率高](剑指offer,题17) 6.单链表的反转[出现频率最高](剑指offer,题16) 7.从尾到头打印单链表(

  • 探讨Java中最常见的十道面试题(超经典)

    第一,谈谈final, finally, finalize的区别. final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 abstract的,又被声明为final的.将变量或方法声明为final,可以保证它们在使用中不被改变.被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改.被声明为final的方法也同样只能使用,不能重载 finally?再异常处理时提供 finally 块来执行任何

  • Java入门基础之Java的基本语法与Java所支持的数据类型

    Java 应用程序可以被定义为对象的集合,这些对象通过调用各自的方法来进行通信.下面让我们具体看一看类,对象,方法,实体变量是什么含义. 对象:对象具有状态和行为.例如:狗有它的状态-颜色,名字,品种,同时也有行为-摇尾巴,汪汪叫,吃东西.对象时类的一个实例. 类:类可以被定义为描述对象所支持的类型的行为和状态的模板或蓝图. 方法:方法是一种基本的行为.类中可以包含很多方法.在方法中,可以编写逻辑,操纵数据,执行动作. 实体变量:每个对象都有它的特殊的实体变量的集合,一个对象的状态是由那些实体变

  • Java实现栈和队列面试题

    面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的栈,要求min.push.pop.的时间复杂度都是O(1) (6)判断栈的push和pop序列是否一致 1.栈的创建: 我们接下来通过链表的形式来创建栈,方便扩充. 代码实现: public class Stack { public Node head; public Node current; //方法

  • 15道非常经典的Java面试题 附详细答案

    试题如下: 参考答案: import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * Created by ysc on 7/26/16. */ public class Interview {

  • 经典的Java面试题及回答集锦(基础篇)

    1.问题:如果A和B对象循环引用,是否可以被GC? 回答:可以,现在的虚拟机基本都是通过可达性分析算法来判断对象是否存活的,而不是通过简单的引用计数法来判断对象是否存活.可达性分析算法使用一系列的"GC Roots"对象(虚拟机栈中引用的对象.静态属性引用对象)作为起始点,这些节点向下搜索的路径称为引用链,当一个对象到GC Roots没有任何引用链连接,则证明对象是不可用的. 2.Java中的内存溢出是如何造成的? OutOfMemoryError: (1)PerGern Space

  • Java面试题及答案集锦(基础题122道,代码题19道)

    Java基础面试题及答案集锦(基础题122道,代码题19道),具体详情如下所示: 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象. 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性

  • 百度Java面试题 前200页精选(上)

    百度"Java面试题"前200页精选上篇 基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 什么是 ACID BS与CS的联系与区别 Cookie 和 Session的区别 fail-fast 与 fail-safe 机制有什么区别 get 和 post请求的区别 Interface 与 abstract 类的区别 IOC的优点是什么 IO 和 NIO的区别,NIO优点 Java 8 / J

  • 百度Java面试题 前200页精选(中)

    百度"Java面试题"前200页精选中篇 多线程 基本概念 什么是线程 多线程的优点 多线程的几种实现方式 1.用 Runnable 还是 Thread 什么是线程安全 Vector, SimpleDateFormat 是线程安全类吗 什么 Java 原型不是线程安全的 哪些集合类是线程安全的 多线程中的忙循环是什么 如何创建一个线程 编写多线程程序有几种实现方式 什么是线程局部变量 线程和进程有什么区别?进程间如何通讯,线程间如何通讯 什么是多线程环境下的伪共享(false shar

  • Java 面试题和答案 -(上)

    本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,第二篇主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servlet和JSP. 开始! 目录 面向对象编程(OOP) 常见的Java问题 Java线程 Java集合类 垃圾收集器 面向对象编程(OOP) Java是一个支持

  • Java 面试题基础知识集锦

    经典的Java基础面试题集锦,欢迎收藏和分享. 问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示"main方法不是public的". 问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝. 问题:如果要重写一个对象的equals方法,还要考虑什么? 答案:hashCode. 问题:Java的"一次编写,处处运行"是如何实现的? 答案:Java程序会被编译成字节码组成

  • 百度Java面试题 前200页精选(下)

    百度"Java面试题"前200页精选下篇 设计模式 什么是设计模式(Design Patterns)?你用过哪种设计模式?用在什么场合 你知道哪些商业级设计模式? 哪些设计模式可以增加系统的可扩展性 单例模式 除了单例模式,你在生产环境中还用过什么设计模式? 写 Singleton 单例模式 单例模式的双检锁是什么 如何创建线程安全的 Singleton 什么是类的单例模式 写出三种单例模式实现 适配器模式 适配器模式是什么?什么时候使用 适配器模式和代理模式之前有什么不同 适配器模式

  • 2018年java技术面试题整理

    1.servlet执行流程 客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析url并根据web.xml找到相对应的servlet,并将request.response对象传递给找到的servlet,servlet根据request就可以知道是谁发出的请求,请求信息及其他信息,当servlet处理完业务逻辑后会将信息放入到response并响应到客户端. 2.springMVC的执行流程 springMVC是由dispatchservlet为核心的分层控制

随机推荐