Java面试题和笔记的分享

ArrayList和LinkedList有什么区别。 - ArraryList是基于动态数组的数据结构,LinkeList是基于链表的数据结果(LinkedList是双向链表,有next也有previous)。 - 对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。 - 对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。

应用介绍

1、JAVA中的几种数据类型是什么,各自占用多少字节。

Java语言提供了八种基本数据类型。六种数据类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

- byte:1字节,表示范围是-128~127之间。

- short:2字节,表示范围是-32768~32767之间。

- int:4字节,表示范围是负的2的31次方到正的2的31次方减1。

- long:8字节,表示范围为负的2的63次方到正的2的63次方减1。

- float:4字节,表示范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。

- double:8字节,表示范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。

- boolean:只有true和false两个取值。

- char:2字节,存储Unicode码,用单引号赋值。

**2、String类能被继承吗,为什么。**

不能被继承,因为String类有final修饰符,而final修饰的类是不能被继承的。

```java

public final class String implements java.io.Serializable, Comparable<String>, CharSequence {

    // 省略...

}

```

**3、String,StringBuffer,StringBuilder的区别。**

String为字符串常量(因为内部数组value[]有final修饰),而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的,因为StringBuffer在append()方法上添加了synchronized修饰。

String,StringBuffer,StringBuilder都被final修饰,不能继承。

String变量创建后是放入方法区的常量池(或者常量池)中,而StringBuilder和StringBuffer则是存入堆中。

构造String对象的方式有很多,String的内存分配比较特殊:

- 方式一:String str1="123";

通过引号直接创建字符串对象,先会从常量池中判断是否存在"123"对象,如果不存在,则会在常量池中创建该对象,并且返回常量池中"123"对象的引用给str;如果之前常量池存在"123"的话,则直接返回常量池中"123"的对象引用。

- 方式二:String str2=new String("123");

首先"123"是一个常量字符串,因此会先在常量池创建"123"字符串对象,然后在堆中再创建一个字符串对象,将常量池中的"123"字符串复制到堆中新创建的对象字符数组中,因此该方式不仅会在堆中,还会在常量池中创建"123"字符串对象。

- 方式三:String str3="123".intern();

该种方式通过intern方法返回一个字符串引用,intern方法是一个native方法,当常量池中存在"123"字符串常量时,则直接返回该常量池中的字符串引用;若不存在,则会先在常量池中创建"123"字符串对象,然后返回新创建对象的引用,与方式一类似。该方法常用于将某些经常访问的字符串对象保存在常量池中,避免经常创建对象。

方式四:String str4=str2.intern();

该种方式是在方式二基础上进行的,intern 方法会先判断常量池中是否存在与str2 相同字符串的对象,若有,则返回该引用;若无,则在常量池创建一个引用(CONSTAT_String_info)指向 str2,然后返回该引用,实际上返回的是 str2 的引用。

具体可以参考这篇文献:[String 对象内存分配(常量池和堆的分配)](https://blog.csdn.net/Mypromise_TFS/article/details/81504137)

**4、ArrayList和LinkedList有什么区别。**

- ArraryList是基于动态数组的数据结构,LinkeList是基于链表的数据结果(LinkedList是双向链表,有next也有previous)。

- 对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。

- 对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。

**5、讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段。当new的时候,他们的执行顺序。**

Java程序的初始化一般遵循3个原则(优先级以此递减):

- 静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次。

- 父类优先于子类进行初始化。

- 按照成员变量的顺序进行初始化。

当new时,他们的执行顺序为:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。

。。。。。。。想了解详情请下载附件

文件列表(部分)

名称 大小 修改日期
B+Tree.png36.05 KB2020-06-28
bean准备工作.png24.37 KB2020-06-28
bean初始化工作.png55.06 KB2020-06-28
BTree.png34.87 KB2020-06-28
catch多个异常情况.png41.02 KB2020-06-28
CGLIB反编译.png5.38 KB2020-06-28
DispatcherServlet工作流程.jpg359.06 KB2020-06-28
DNS查询.png74.76 KB2020-06-28
HashMap的Hash冲突.png68.32 KB2020-06-28
HashMap的PUT方法.jpg279.50 KB2020-06-28
HTTPS加密.png245.94 KB2020-06-28
HTTP响应报文.jpg26.61 KB2020-06-28
HTTP请求报文.jpg27.79 KB2020-06-28
JVM内存结构.png24.94 KB2020-06-28
MySQL主从复制.png167.61 KB2020-06-28
SSH加密.png278.94 KB2020-06-28
String变量存储位置.jpg42.71 KB2020-06-28
TCP报文段.png99.98 KB2020-06-28
七层参考网络模型.png42.13 KB2020-06-28
三次握手.png11.46 KB2020-06-28
依赖关系.png14.70 KB2020-06-28
关联关系.png12.34 KB2020-06-28
四次挥手.png436.17 KB2020-06-28
实现关系.png8.81 KB2020-06-28
线程状态.png193.32 KB2020-06-28
组合关系.png9.47 KB2020-06-28
继承关系.png17.74 KB2020-06-28
聚合关系.png9.47 KB2020-06-28
虚拟内存与物理内存关系.png102.14 KB2020-06-28
进程状态.png110.11 KB2020-06-28

立即下载

相关下载

[Java面试题和笔记的分享] ArrayList和LinkedList有什么区别。 - ArraryList是基于动态数组的数据结构,LinkeList是基于链表的数据结果(LinkedList是双向链表,有next也有previous)。 - 对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。 - 对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
[Java面试题] jstack 的功能 jstack是JVM自带的Java堆栈跟踪工具,它用于打印出给定的java进程ID、core file、远程调试服务的Java堆栈信息. jstack prints Java stack traces of Java threads for a given Java process or core file or a remote debug server.

评论列表 共有 0 条评论

暂无评论

微信捐赠

微信扫一扫体验

立即
上传
发表
评论
返回
顶部