Java面试常见问题总结

一、创建对象的4中方法:

1、new 关键字直接创建

example:Student s=new Student();

2、class的反射调用(使用class的newInstanse方法可以调用无参构造器创建对象)

Example:class.forName();

3、使用clone()来创建

Example: try{

Student stu3 = (Student) stu1.clone();

System.out.println(stu3);

}

catch (CloneNotSupportedException e)

{

e.printStackTrace();

}

4、使用序列化(实现Serializable接口)

Example:public class Student implements Serializable{  }

二、线程不安全/安全的类

1、 不安全:StringBuilder、HashMap、ArrayList、LinkedList

2、安全:StringBuffer 、HashTable、Vector、stack(栈先进后出

三、  HashTable和HashMap

Map 集合中不能包含重复的键 ,但可以包含重复的值

HashMap内部基于哈希表(数组)存储键值对(映射项)。

  HashMap是线程不安全的。

  HashMap根据键的哈希码值重新计算键值对(映射项)的在哈希表中的位置。

  HashMap的key可以为null ,value 也可以为 null 。

  HashMap的父类是 AbstractMap 。

Hashtable内部基于哈希表(数组)存储键值对(映射项)。

  Hashtable是线程安全的 ( 所有的方法都被 synchronized 关键词所修饰 )。

  Hashtable直接根据键的哈希码值确定键值对(映射项)的在哈希表中的位置。

  Hashtable的key和value 都不能为null 。

Hashtable的父类是 Dictionary 类。

唯一不一样的是:HashTable为线程安全和key/value不可以为null值

,四、ArrayList和LinkedList

ArrayList 内部借助于数组实现元素的存储。

  ArrayList 是线程不安全的,相对于线程安全的Vector来说可能效率较高。

  ArrayList 内部基于数组实现数据存储,因此随机访问效率较高。( 可以使用索引直接访问数组中的元素 )

  ArrayList 内部基于数组实现数据存储,因此增删元素速度较慢。( 增删元素可能需要挪动数组中大量元素 )

  LinkedList 内部基于链表实现元素的存储。

  LinkedList是线程不安全的。

  LinkedList内部基于链表实现数据存储,因此随机访问效率较低。( 需要逐个遍历链表中的结点 )

  LinkedList内部基于链表实现数据存储,因此增删元素速度较快。( 增删元素只需要修改相邻两个节点的指针 )

五、Vector类和Stack类

Vector 内部借助于数组实现元素的存储。

  Vector是线程安全的,相对于线程不安全的ArrayList来说可能效率较低。

  Vector内部基于数组实现数据存储,因此随机访问效率较高。( 可以使用索引直接访问数组中的元素 )

  Vector内部基于数组实现数据存储,因此增删元素速度较慢。( 增删元素可能需要挪动数组中大量元素 )

Stack 类是 Vector 类的子类。

  push 将元素压入栈顶

  peek 检查栈顶元素(不弹出元素)

  pop 弹出栈顶元素

  search 从栈顶开始搜索元素( 基数从 1 开始 )

  empty 判断当前栈是否为空

六、线程的五种状态:

  1、 新建状态:new Thread();

  2、 就绪状态:t.starts();等待获得CPU

  3、 运行状态:获得CPU,实现run方法

  4、 阻塞状态:执行了Thread.sleep方法、发生了IO操作、或者调用了同步锁的外套方法

  5、 死亡状态:代码执行完毕。

sleep 和 yield 的区别:

  1. sleep 不考虑线程优先级 ( 一个线程睡眠后其它线程都有机会获得CPU ),yield 要考虑线程优先级 ( 仅让位给 跟自己同等优先级或优先级比自己高的线程 )

  2. sleep 可能抛出 InterruptedException ,而 yield 不会抛出异常

  3. sleep 导致运行状态的线程进入到阻塞状态,而 yield 会导致运行状态的线程进入就绪状态

七、异常处理机制

当程序发生异常时会产生一个代表该异常的对象

  同时当前程序会把这个异常对象交给运行时系统

  运行时系统根据接受到的异常对象寻找相应代码来处理该异常。

  处理异常的方式有两种,一种是 捕获异常 ,另外一种是 抛出异常。

八、受检查异常( checked-exception ) 和 运行时异常 ( runtime-exception ) 的区别

1、运行时异常是指 直接 或 间接 继承了 java.lang.RuntimeException 类的那些 异常类,  而 受检查异常 是指从来都没有继承过 java.lang.RuntimeException 类的那些 异常类 。

2、对于受检查异常来说,必须在编译之前就显式书写异常的处理代码,可以是通过 try ... catch ... finally 语句捕获并处理异常, 也可以通过为 相应的方法 添加 throws 声明 来 声明抛出的异常类型。

3、对于运行时异常来说,在编译阶段可以不显式书写任何跟异常处理有关的代码。

受检查异常( checked-exception ) 和 运行时异常 ( runtime-exception ) 的相同点

1、都是异常( 都是 Exception 的子类型,不是 Error 的子类型 )

2、都可以被 捕获 ( try ... catch ... finally ) 或 抛出 ( throw )

九、十种常见的异常

IOException

FileNotFoundException

RunnTimeException

ArithmeticException

lllegalArgumentException

ArrayIndexOutOfBoundsException

NullPointerException

ArrayStoreException

ClassCastException

NumberFormatException

十、Mysql和ORACLE的区别

1、 Oracle是大型数据库而Mysql是中小型数据库 Mysql是开源的而Oracle价格非常高

2、 Oracle支持大并发,大访问量

3、 Oracle也Mysql操作上的一些区别

主键 Mysql一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;

Oracle没有自动增长类型,主键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。

4、     单引号的处理 MYSQL里可以用双引号包起字符串,

ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。

十一、C和Java的区别

JAVA是从可以算是从C++发展而来的,因此Java与C语言的语法比较类似的。

C在使用完一块内存时,要手动释放内存;而java有内存自动回收机制

C有指针,而java没有

C是多线继承,而java是单继承

Java有package的概念,C没有

十二、String、StringBuffer、StringBuilder的区别

String:字符串常量,字符串长度不变,是被声明程final的,一次赋值不可改变

StringBuffer:字符串变量,线程安全,如果需要频繁的对字符串内容进行修改,处于效率考虑最好使用StringBuffer;

StringBuilder:字符串变量,非线程安全,与StringBuffer的区别是StringBuilder它是在单线程环境下使用的,所以效率要比StringBuffer

十三、集合和数组的区别

数组的长度是固定的,而集合长度是可变的

数组值可以存储对象,还可以存储基本数据类型;而集合只能够只能存储对象

数组存储的数据类型是固定的,而集合存储的数据类型不固定

十四、int和Integer的区别

Integer是int提供的封装类。int是基本数据类型中的一种。

Integer的默认值是null。int的默认值是0

Integer是一个对象,需要一个引用来指向这个对象,int是基本数据类型, 直接存储在内存中。

声明为Integer的变量需要实例化,声明为int的变量不需要实例化。

十五、抽象类与接口的区别

抽象类和接口都不能直接实例化

接口是设计的结果 ,抽象类是重构的结果

抽象类里可以没有抽象方法

如果一个类里有抽象方法,那么这个类只能是抽象类

     抽象类可以有具体的方法 和属性,  接口只能有抽象方法和不可变常量
 
 
十六、单列的特点和作用
     特点:
      单例类确保自己只有一个实例。
      单例类必须自己创建自己的实例。
      单例类必须为其他对象提供唯一的实例

作用:

控制资源的使用,通过线程同步来控制资源的并发访问;

控制实例产生的数量,达到节约资源的目的。

作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信

十七、数据结构中的栈和队列的区别

栈:后进先出

队列:先进先出

Queue:先进先出

原文地址:https://www.cnblogs.com/fengfenggege/p/9858532.html

时间: 2024-11-05 18:27:12

Java面试常见问题总结的相关文章

Java面试常见问题

第一:GC是什么? 为什么要有GC?  答:GC 即垃圾回收(Gabage Collection) 在C++ .C中内存的管理是最为繁琐的事情不回收内存和错误的回收内存造成系统崩溃和内存泄露 GC会自动监测对象的作用域来判断这个对象是否超过作用域如果超过则自动的回收内存 java中没有提供显示的对已经分配内存进行回收的方法 第二:垃圾回收的优点和原理.并考虑2种回收机制.  答:GC对分配的对象进行自动的监测记录对象的作用域是否可以达到 在java中对象就不存在‘作用域’ 而是引用的这个对象的变

Java面试常见问题汇总

1 String,StringBuffer与StringBuilder的区别?? String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 S

Java面试常见问题集锦

一.Java初级 说出八种基本数据类型和三种引用数据类型 简述自动装箱和自动拆箱 ==和equals的区别 简介重载和重写,并说出它们的应用场景 面向对象的三大特征 单例模式的两种形式 有几种权限修饰符,并分别说出它们的作用范围 被static修饰的成员与普通成员有什么区别 抽象方法与接口的区别,抽象类必须要有抽象方法吗 抽象类能被final修饰吗 被final修饰的成员有什么特点 String.StringBuild.StringBuffer有什么区别 数组中可以存放什么类型的数据,知道几种给

JAVA面试常见问题之Redis篇

Redis为单线程 1.Redis 有哪些数据类型 String 哈希 list set 有序set 2.Redis 内部结构 参考:https://www.cnblogs.com/chenpingzhao/archive/2017/06/10/6965164.html 3.Redis 使用场景 缓存,会话缓存,时效性,访问频率,计数器,社交列表,记录用户判定信息,交集.并集和差集,热门列表与排行榜,最新动态等. 4.Redis 持久化机制 快照(snapshotting):将整个Redis内存

java 面试 -- 4

Java面试知识点总结 本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺(阅读本文需要有一定的Java基础:若您初涉Java,可以通过这些问题建立起对Java初步的印象,待有了一定基础后再后过头来看收获会更大).本文的问题列表来自于http://www.nowcoder.com/discuss/3043,在此感谢原作者的无私分享:) 1. Java中的原始数据类型都有哪些,它们的大小及对应

2019滴滴java面试总结 (包含面试题解析)

2019滴滴java面试总结  (包含面试题) 本人6年开发经验.今年年初找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.滴滴等公司offer,岗位是既有php也有Java后端开发,最终选择去了滴滴. 面试了很多家公司,感觉大部分公司考察的点都差不多,所以将自己的心得记下来,希望能给正在找或者准备找工作的朋友提供一点帮助.另外,目前在滴滴也做面试官的工作,身份从求职者变为面试官,看问题的很多角度也不一样,所以下文中既有求职者的视角,也有面试官的视角. 面试流程 先说下面试流程,一般大公司都有3

JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结(转)

hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用好Mybatis还是首先要先理解好Hibernate. 比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求

转:最近5年133个Java面试问题列表

最近5年133个Java面试问题列表 Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入. 在我初入职场的时候,类似于 Vector 与 Array 的区别.HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在.如今,你将会被问到许多 Java 程序员都没有看过的领域,如 NIO,

Java 面试-- 1

JAVA面试精选[Java基础第一部分] 这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童鞋们来说,当你看到这份题目的时候,你应该感动很幸运,因为,只要你把题目中的内容都搞懂了,在笔试的时候就可以游刃有余,通过面试只有半步之遥了,笔试只能反映你的JAVA技能.不管你是面试各个级别的JAVA工程师.架构师.还是项目经理,这个系列文章都是你最宝贵的资