1. JAVA中的几种基本数据类型是什么,各自占用多少字节。
    int 32bit short 16bit
    long 64bit byte 8bit
    char 16bit float 32bit
    double 64bit boolean 1bit

============================================================

  1. String类能被继承吗,为什么?
    public final class String

    implements java.io.Serializable, Comparable, CharSequence

String 被final修饰了,所有不能被继承。

1.final修饰的对象不能被修改;

2.final修饰的类不能被继承;

3.final修饰的方法不能被重写;

============================================================

  1. String,Stringbuffer,StringBuilder的区别。
    1.可变与不可变

String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。

private final char value[];

StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。

char[] value;

2.是否多线程安全

String中的对象是不可变的,也就可以理解为常量,显然线程安全。

AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。

StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。看如下源码

最后,如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。

============================================================

4 . ArrayList和LinkedList有什么区别。
ArrayList和Vector使用了数组的实现,

LinkedList使用了循环双向链表数据结构。 场景使用不同

对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。
2.在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。
3.LinkedList不支持高效的随机元素访问。
4.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间
可以这样说:当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。

============================================================

  1. 讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当new的时候,他们的执行顺序。
    类的实例化顺序:先静态再父子

父类静态数据->子类静态数据->父类字段->子类字段->父类构造函数->子类构造函数

============================================================

  1. Map区别
    用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。

最常用的Map实现类有:HashMap,ConcurrentHashMap(jdk1.8),LinkedHashMap,TreeMap,HashTable;

其中最频繁的是HashMap和ConcurrentHashMap,他们的主要区别是HashMap是非线程安全的。ConcurrentHashMap是线程安全的。

并发下可以使用ConcurrentHashMap和HashTable,他们的主要区别是:

1.ConcurrentHashMap的hash计算公式:(key.hascode()^ (key.hascode()>>> 16)) & 0x7FFFFFFF

HashTable的hash计算公式:key.hascode()& 0x7FFFFFFF

2.HashTable存储方式都是链表+数组,数组里面放的是当前hash的第一个数据,链表里面放的是hash冲突的数据

ConcurrentHashMap是数组+链表+红黑树

3.默认容量都是16,负载因子是0.75。就是当hashmap填充了75%的busket是就会扩容,最小的可能性是(16*0.75),一般为原内存的2倍

4 .线程安全的保证:HashTable是在每个操作方法上面加了synchronized来达到线程安全,ConcurrentHashMap线程是使用CAS(compore and swap)来保证线程安全的

============================================================

  1. JAVA8的ConcurrentHashMap为什么放弃了分段锁,有什么问题吗,如果你来设计,你如何设计。
    jdk8 放弃了分段锁而是用了Node锁,减低锁的粒度,提高性能,并使用CAS操作来确保Node的一些操作的原子性,取代了锁。

但是ConcurrentHashMap的一些操作使用了synchronized锁,而不是ReentrantLock,虽然说jdk8的synchronized的性能进行了优化,但是我觉得还是使用ReentrantLock锁能更多的提高性能

============================================================

  1. 有没顺序的 Map 实现类,如果有,他们是怎么保证有序的 。 顺序的 Map 实现类:LinkedHashMap,TreeMap
    LinkedHashMap 是基于元素进入集合的顺序或者被访问的先后顺序排序,TreeMap 则是基于元素的固有顺序 (由 Comparator 或者 Comparable 确定)。

============================================================

  1. 抽象类和接口的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接口么。抽象类和接口的区别:
    1.抽象类可以有自己的实现方法,接口在jdk8以后也可以有自己的实现方法(default)

2.抽象类的抽象方法是由非抽象类的子类实现,接口的抽象方法有接口的实现类实现

3.接口不能有私有的方法跟对象,抽象类可以有自己的私有的方法跟对象

类不可以继承多个类,接口可以继承多个接口,类可以实现多个接口

============================================================

  1. 继承和聚合的区别在哪。
    继承:指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;

聚合:聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;

============================================================

  1. 讲讲你理解的nio。他和bio的区别是啥,谈谈reactor模型。
    BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
    NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

reactor模型:反应器模式(事件驱动模式):当一个主体发生改变时,所有的属体都得到通知,类似于观察者模式。

============================================================

  1. 反射的原理,反射创建类实例的三种方式是什么。
    反射的原理:如果知道一个类的名称/或者它的一个实例对象, 就能把这个类的所有方法和变量的信息(方法名,变量名,方法,修饰符,类型,方法参数等等所有信息)找出来。

反射创建类实例的三种方式:

1.Class.forName(“com.A”);

2.new A().getClass();

3.A.class;

============================================================

  1. 反射中,Class.forName和ClassLoader区别。
    class.forName()除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。
    classLoader只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。

============================================================

  1. 描述动态代理的几种实现方式,分别说出相应的优缺点。

动态代理有两种实现方式,分别是:jdk动态代理和cglib动态代理

jdk动态代理的前提是目标类必须实现一个接口,代理对象跟目标类实现一个接口,从而避过虚拟机的校验。

cglib动态代理是继承并重写目标类,所以目标类和方法不能被声明成final。

============================================================

  1. 动态代理与cglib实现的区别。
    动态代理有两种实现方式,分别是:jdk动态代理和cglib动态代理

jdk动态代理的前提是目标类必须实现一个接口,代理对象跟目标类实现一个接口,从而避过虚拟机的校验。

cglib动态代理是继承并重写目标类,所以目标类和方法不能被声明成final。

小编分类整理了许多java进阶学习材料和BAT面试题,需要资料的请转发此文章后再私聊小编回复【java】就能领取2019年java进阶学习资料和BAT面试题以及《Effective Java》(第3版)电子版书籍。也可以加群:712263501领取海量学习资料进行学习。

Java面试之Java基础上册(含答案)相关推荐

  1. 精选 2021 年大厂高频 Java 面试真题集锦(含答案),面试一路开挂

    本文涵盖了阿里巴巴.腾讯.字节跳动.京东.华为等大厂的 Java 面试真题,不管你是要面试大厂还是普通的互联网公司,这些面试题对你肯定是有帮助的,毕竟大厂一定是行业的发展方向标杆,很多公司的面试官同样 ...

  2. 精选2022年大厂高频Java面试真题集锦(含答案),面试一路开挂

    本文涵盖了阿里巴巴.腾讯.字节跳动.京东.华为等大厂的Java面试真题,不管你是要面试大厂还是普通的互联网公司,这些面试题对你肯定是有帮助的,毕竟大厂一定是行业的发展方向标杆,很多公司的面试官同样会研 ...

  3. 精选历年大厂高频Java面试真题集锦(含答案),助力面试一路开挂

    秋招接近尾声,最近接二连三收到一些朋友的喜讯,求职和跳槽都有很不错的结果.虽然总说今年情况不太好,但还是有一部分成功上岸的,和大家分享一个典型例子:学弟工作一年半,薪资9K出头,最开始目标是跳槽到货拉 ...

  4. 【面试】Java面试常见问题汇总(不含答案)、面试指导学习笔记

    面试常见问题角度 String是基本数据类型吗? int和Integer有什么区别? HashMap和HashTable的区别,及其实现原理. ArrayList/HashMap的源码.如何实现源码 ...

  5. [Java面试三]JavaWeb基础知识总结.

    [Java面试三]JavaWeb基础知识总结. 1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Int ...

  6. 去腾讯等BAT面试完的Mysql面试55题总结,含答案大赠送!

    [BAT面试:mysql 面试55题] 1.一张表里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把mysql重启,再insert一条记录,这条记录的ID是18还 ...

  7. 32位计算机通常是指控制总线,“三校生”对口升学计算机应用试卷计算机基础知识(含答案)...

    "三校生"计算机应用基础试卷(含答案) 课程名称:计算机应用基础 题 五 六 总分 统分 号 一 二 三 四教师 得 分 :名一.是非选择题(对的选A,错的选B.本大题共15小题, ...

  8. very very good,Java面试宝典+Java核心知识集

    这几天刚整理出炉的两份最全"Java面试宝典+Java核心知识集"(very very good!!!),因此有了今天咱这篇文章,没错,我又来分享干货了!!! Java面试宝典 说 ...

  9. 微型计算机主存可以分为,计算机基础试题 (含答案)

    计算机基础试题 (含答案) 一.填空题(每空1分,共30分) 1.计算计的软件系统通常分成______软件和______软件. 2.字长是计算机______次能处理的______进制位数. 3.1KB ...

  10. 量子计算机的核心元件简称,计算机文化基础复习题(含答案).doc

    计算机文化基础复习题(含答案)整理 计算机文化基础复习题第一套 一.单项选择题(每题1分,共30分) 1.在Powerpoint2003中,若为幻灯片中的对象设置"驶入效果",应选 ...

最新文章

  1. Reboot分享第三期(已结束)
  2. python编写程序-Python 编程速成(推荐)
  3. OLTP 数据库特点
  4. 【js实例】Array类型的9个数组方法,Date类型的41个日期方法,Function类型
  5. 设置虚拟机上的redis可以被windows的环境下的python访问连接
  6. Android仿美团加载数据、小人奔跑进度动画对话框(附顺丰快递员奔跑效果)
  7. php 制作日记本,photoshop制作精美日记本
  8. 趣学 C 语言(十二)—— 文件操作
  9. python烟花代码
  10. 2020年西南交通大学数据仓库与数据挖掘期末考试题
  11. 使用 ReportLab 绘制 PDF
  12. CentOS 7 安装Dukto(局域网通信工具)
  13. easywechat 网页授权登录
  14. Python自动化运维之1、Python入门
  15. 耐磨钢球磨耗计算方法
  16. 什么是溢出?补码加法运算如何判断是否溢出?
  17. 基于MATLAB分析,基于Matlab对信号进行频域分析的方法
  18. 用java实现一个算术测试软件,最新Java算术测试
  19. 有道云笔记不同步_有道云笔记无法同步如何处理?笔记无法同步解决方法介绍...
  20. 一款常用文档生成工具:Doxygen

热门文章

  1. 网络模型mAP计算实现代码
  2. CPU消耗,跟踪定位理论与实践
  3. Waymo的自主进化
  4. CSS 选择器:BeautifulSoup4解析器
  5. Cocos事件监听(JS)
  6. FastThreadLocal吞吐量居然是ThreadLocal的3倍
  7. 25个增强iOS应用程序性能的提示和技巧 — 中级篇
  8. Python3-Cookbook总结 - 第一章:数据结构和算法
  9. 【线段树分治 线性基】luoguP3733 [HAOI2017]八纵八横
  10. Log4Net的控制台,WinForm,WebApplication使用