1、九种基本数据类型的大小以及它们的封装类

java提供的九种基本数据类型:boolean、byte(1)、char(2)、short(2)、int(4)、long(8)、float(4)、double(8)、void 
以及它们的封装类:Boolean、Byte、Character、Short、Integer、Long、Float、Double、Void

2、switch能用string做参数吗

在java7之后可以使用string做参数

3、equals与==的区别

“==”是对比较的两个对象的地址进行比较,Object类中的equals是基于“==”实现的,因此equals方法根据用户的需求自定义来实现同类对象的比较

java中提供的其它类基本都实现了对equals的复写

4、Object有哪些共用方法

Object类有12个成员方法,按照用途可以分为以下几种 
1,构造函数 
2,hashCode和equale函数用来判断对象是否相同, 
3,wait(),wait(long),wait(long,int),notify(),notifyAll() 
4,toString()和getClass, 
5,clone() 
6,finalize()用于在垃圾回收

5、Java中的四种引用,强弱软虚,用到的场景

1、强引用

强引用不会被GC回收,并且在java.lang.ref里也没有实际的对应类型,平时工作接触的最多的就是强引用。Object obj = new Object();这里的obj引用便是一个强引用。如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它。当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。

2.弱引用(WeakReference)

如果一个对象只有弱引用,就类似一个可有可无的产品,弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期,在垃圾回收线程扫描它所管辖的区域的过程中,一旦发现了弱引用的对象,不管当前内存空间足够与否,都会回收它的存在,不过垃圾回收器是一个优先级很低的线程,因此不一定会可很快发现那些具有若引用的对象

3.软引用(SoftReference)

如果一个对象只具有软引用,那就类似于可有可无的物品,如果内存空间足够,垃圾回收器就不会回收这些对象的内存,只要垃圾回收器没有回收它,该对象就可以被程序使用,软引用可用来实现内存敏感的高速缓存,软引用可以与引用队列(ReferenceQueue)联合使用,如果软引用的对象被垃圾回收,JAVA虚拟机就会把这个软引用加入到关联的引用队列中

4.虚引用(PhantomReference)

"虚引用"顾名思义,就是形同虚设,和其他几种引用都不同,它不会决定一个对象的生命周期,如果一个对象只具有虚应用,那么他就和没有任何引用一样,任何时候都可能被垃圾回收,虚引用主要用来跟踪对象被垃圾回收的活动,虚引用和软引用和弱引用的一个区别在于:虚引用必须和引用队列联合使用,当垃圾回收器准备回收一个对象时,如果发现他还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中,程序可以判断引用队列中是否加入了虚引用,来了解引用的对象是否将要被垃圾回收,程序如果发现某个虚引用被加入到引用队列中,那么就可以在所引用的对象的内存被回收之前采取必要的行动

6、HashCode的作用

可以用来进行对象的比较,不过并不一定可靠,equals比较相同的两个对象,其hashCode一定相同,但是反之并不一定相同

用于在hashTable、HashMap等散列结构中通过hashCode来确定对象在散列结构中的位置

7、ArrayList、LinkedList、Vector的区别

1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。

2.Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。

3.LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。

4、当容量不够需要扩容时,ArrayList是扩容50%,Vector是100%

5、由于LinkedList是链式结构,因此在插入和删除方面的性能优于ArrayList,在查询方面不如ArrayList

8、String、StringBuffer与StringBuilder的区别

String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)

这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面

1.首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String

String最慢的原因:

String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。

2.再来说线程安全,在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

  如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。

9、Map、Set、List、Queue、Stack的特点和用法

  • Map

Map是键值对,键Key是唯一不能重复的,一个键对应一个值,值可以重复。 
TreeMap可以保证顺序,HashMap不保证顺序,即为无序的。 
Map中可以将Key和Value单独抽取出来,其中KeySet()方法可以将所有的keys抽取正一个Set。而Values()方法可以将map中所有的values抽取成一个集合。

  • Set

不包含重复元素的集合,set中最多包含一个null元素 
只能用iterator实现单项遍历,Set中没有同步方法。

  • List

有序的可重复集合。 
可以在任意位置增加删除元素。 
用Iterator实现单向遍历,也可用ListIterator实现双向遍历

  • Queue

Queue遵从先进先出原则。 
使用时尽量避免add()和remove()方法,而是使用offer()来添加元素,使用poll()来移除元素,它的优点是可以通过返回值来判断是否成功。 
LinkedList实现了Queue接口。 
Queue通常不允许插入null元素。

  • Stack

Stack遵从后进先出原则。 
Stack继承自Vector。 
它通过五个操作对类Vector进行扩展,允许将向量视为堆栈,它提供了通常的push和pop操作,以及取堆栈顶点的peek()方法、测试堆栈是否为空的empty方法等

  • 用法

如果涉及堆栈,队列等操作,建议使用List 
对于快速插入和删除元素的,建议使用LinkedList 
如果需要快速随机访问元素的,建议使用ArrayList

10、HashMap和HashTable的区别

1、HashTable是继承Dictionary类,而HashMap是实现的Map接口

2、HashMap是线程不安全的,HashTable是线程安全的

3、HashMap可以使用null作为key和value

HashMap可以通过下面的语句进行同步:
Map m = Collections.synchronizeMap(hashMap);

11、HashMap与ConcurrentHashMap的区别

ConcurrentHashMap是线程安全的,使用了锁分离技术,将内部分为若干段(默认情况下分为16段),通过key的hashcode来确定在哪一段,对其操作时,则对需要操作的段进行加锁,因此在默认情况下,如果理想的话可以同时有16个线程对一个ConcurrentHshMap进行操作

12、TreeMap、HashMap、LinkedHashMap的区别

TreeMap实现SortMap接口,能够把它保存的记录根据键排序。
  默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。遍历时,取得数据的顺序是完全随机的。
  HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null。
  HashMap不支持线程的同步(即任一时刻可以有多个线程同时写HashMap),可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
  Hashtable与 HashMap类似,它继承自Dictionary类。不同的是:它不允许记录的键或者值为空;它支持线程的同步(即任一时刻只有一个线程能写Hashtable),因此也导致了 Hashtable在写入时会比较慢。

LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。也可以在构造时带参数,按照应用次数排序。
在遍历的时候会比HashMap慢,不过有种情况例外:当HashMap容量很大,实际数据较少时,遍历起来可能会比LinkedHashMap慢。因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关

13、Collection包结构,与Collections的区别

Collection是集合类的一个顶级接口,其直接继承接口有List与Set

而Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

14、try/catch finally,try里面有retrun,finally还会执行吗

try里面有return,会在执行finally后再执行return,如果finally里面return,则不会执行try里面的return

finally可以对try中的非基础数据类型的结果产生影响,而基础数据类型不会有影响

15、Exception与Erro包结构,OOM你遇到过哪些情况,SOF你遇到过哪些情况

https://blog.csdn.net/gs_008/article/details/50951617

Java 面试基础总结(一)的更多相关文章

  1. JAVA面试基础

    JAVA相关基础知识1.面向对象的特征有哪些方面 ?1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂 ...

  2. java面试基础题(三)

    程序员面试之九阴真经 谈谈final, finally, finalize的区别: final:::修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此 ...

  3. Java面试基础部分合集

    写在前面:这篇文章对于在Java方面已经很牛逼的大手,就没必要看了,因为对于你们来说,这tm简直太简单了.... 面试我们都经历过,你真的懂面试吗?针对面试我只想说一点,面试的目的不是让考官知道你怎么 ...

  4. Java面试基础概念总结

    面向对象软件开发的优点有哪些? 答:开发模块化,更易维护和修改:代码之间可以复用:增强代码的可靠性.灵活性和可理解性. 多态的定义? 答:多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力. ...

  5. JAVA 面试基础

    经典的Java基础面试题________________________________________________________________________________________ ...

  6. java面试②基础部分

    2.1.3 讲一下java中int数据占几个字节 java中有几种基本数据类型? 2.1.4. 面向对象的特征有哪些方面 有四大基本特征:封装.抽象.继承.多态 1)封装,即将对象封装成一个高度自治和 ...

  7. java面试基础篇(一)

    最近想深入的理解一下java 的工作机制,也是便于后期的面试. 1.A:HashMap和Hashtable有什么区别? Q:HashMap和Hashtable都实现了Map接口,因此很多特性非常相似. ...

  8. java面试基础篇(三)

    1.Q:ArrayList 和 LinkedList 有什么区别? A:ArrayList查询快!LinkedList增删快.ArrayList是基于索引的数据接口,它的底层是数组.空间占用相对小一些 ...

  9. java面试基础必备

    一.Java基础 1. String类为什么是final的. 2. HashMap的源码,实现原理,底层结构. 3. 说说你知道的几个Java集合类:list.set.queue.map实现类咯... ...

随机推荐

  1. adb pull 文件夹到电脑

    正常来讲是支持文件夹的. 但实际执行的时候发现: pull: building file list...0 files pulled. 0 files skipped. 其实出现这个提示,归根到底还是 ...

  2. js函数内未声明变量

    <script> function test(){ testd = "Hello"; } test(); alert(testd); </script> 当 ...

  3. 防火墙/IDS测试工具Ftester

    防火墙/IDS测试工具Ftester FTester 全称Firewall Tester,是一个用来测试防火墙的过滤策略和入侵检测(IDS)能力的工具.这个工具主要是有两个perl的脚本组成: 1. ...

  4. 20172325 2018-2019-2 《Java程序设计》第九周学习总结

    20172325 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 图的定义 图是由顶点集(VertexSet)和边集(EdgeSet)组成,针对图G,顶点集和 ...

  5. Vue中出现Do not use built-in or reserved HTML elements as component id:footer等等vue warn问题

    错误示图: 原因:是因为在本地项目对应文件的<script>中,属性name出现了错误的命名方式,导致浏览器控制台报错! 诸如: name: header .  . name: menu  ...

  6. Python 多进程编程之fork()

    Python实现多进程可以用系统fork()方法和python的multiprocessing类 1,fork()方法是Unix/Linux操作系统提供的,在python的os模块中自带fork(). ...

  7. httpd安装与配置(编译安装)

    httpd简介 httpd是Apache超文本传输协议(HTTP)服务器的主程序.被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池. 通常,httpd不应该被直接调用,而应该在类 ...

  8. 从服务器角度分析RPG游戏——NPC的AI

    最近主程有些忙,甩给我一些服务器的代码,零零散散总结了一些要素. java程序架构也是层层分析,先罗列出需要做的工作,然后从主干到细节依次实现.就这点而言,程序和绘画有很多类似的地方. 关于怪物AI类 ...

  9. Ubuntu 18.04 Server上安装LAMP

    由于要进行渗透测试,所以这两天就在搭LAMP的环境(过程及其痛苦) 这里分享一些我遇到的问题. 首先介绍一下我的使用环境  VM虚拟机,ubuntu 与主机NAT连接 由于之前一直使用的是kali(默 ...

  10. PB的一些记录

    断点设置在函数内,发现返回值没有,需要取消函数内断点才正常 加密--采用矩阵乘法 行列式取+_1的矩阵与逆矩阵其元素都是整数,, 可以使用matlab来找到这些矩阵 A* I   =E       A ...