java面试笔试题整理(学习java基础理论最好的资料)_2020Java笔试/面试题(持续收集整理更新)...

说明:java

本篇用于收集知识点方便随时巩固,持续更新与纠错。数组

关于JDK版本,若无特殊说明,默认为JDK 1.8,。缓存

关于JVM版本,若无特殊说明,默认为 HotSpot。安全

目录数据结构

1、Java 基础

1.1 Java中的基本数据类型有哪几种?各占用多少字节?

答:Java 中的基本数据类型有8种。其中:

数值型

整数类型

byte:1字节8位有符号整数

short:2字节16位有符号整数

int:4字节32位有符号整数

long:8字节64位有符号整数

浮点类型

float:4字节32位浮点数

double:8字节64位浮点数

字符型

char:2字节16位Unicode字符

布尔型

boolean:1字节8位

1.2 String 在Java中是个特殊的存在,谈谈?

答:

Sting类能够序列化。String实现了序列化接口,因此是能够被序列化与反序列化的。

String对象之间能够进行比较。实现了Comparable接口中的compareTo()方法,因此字符串之间是能够进行比较的(是根据字符串中每一个字符的ASCII码进行比较),以下图源码。

a4f8f148ccfa4a9f1bf851d8c9e8f527.png

String类不能够被继承。由于String 是一个被final所修饰的类。

String是不可变的。String类底层实际存储数据的是:private final char value[]; 也就是说 String类底层维护的是一个字符序列。这个 char 类型数组被 final 所修饰,因此一经建立,就不可修改。

String类重写了equals() 方法。先比较两个字符串的地址是否相同,是则直接返回true;若是地址不相同,再看两个字符串内容是否相同,是的话也返回true。

0603fea93431131a940179f7f9481831.png

String能够用字面量方式建立。String 是一个类,与其余类不一样的是,String可使用字面量的形式建立或赋值。

String str = "123";

/*

1 先到常量池去经过String的equals()方法去找是否存在字符串"123",

若是存在,直接将地址返回(这也保证了常量池中的字符串常量都是惟一的)。

2 若是常量池中不存在"123",则先在常量池中建立一个"123"的字符序列,而后再将其地址返回。

*/

String str = new String("123");

/*

1 先到常量池去经过String的equals()方法去找是否存在字符串"123",

若是不存在,就在常量池中建立一个。

(因此说在new字符串的时候,若是常量池中不存在,实际上会建立两次。)

2 在堆中开辟空间,建立一个Sting 对象,并返回其地址。

*/

String常量存储在方法区中的常量池,new出来的对象存储在堆内存中。

字符串之间可使用 + 号拼接。拼接产生的结果是第三个字符串,进行拼接的字符串自己是没有发生任何变化的。

String 的本地方法 intern() 能够从常量池中获取字符串。若是常量池中没有,就先建立,再将其地址返回。

1.3 谈谈 String、StringBuffer、StringBuilder 的异同。

这三个类 都被 final 锁修饰,不容许被继承。

从线程安全的角度讲:

String 实例对象是不可变的字符串常量,不存在线程安全问题,即String是线程安全的。

StringBuilder 没有使用锁机制,在多线程并发的状况下,可能会出现线程安全问题。

StringBuffer 中涉及到修改底层数据的方法,都加了 synchronized 关键字,因此StringBuffer 是线程安全的。

从对象可变性角度讲:

String 底层维护的是一个被final 锁修饰的字符数组,不可变。

StringBuffer 和 StringBuilder 底层维护的是一个可变的字符数组,因此其对象实例是可变的。

从频繁修改的性能角度:

String对象自己是不可变的,对字符串修改,其实是在产生新的对象,所以修改效率低下。

StringBuilder 底层维护的是一个可变的字符数组,能够经过扩容等机制,实现对字符序列的修改。所以修改效率较高。

StringBuffer 底层维护的也是一个可变的字符数组,但与StringBuilder不一样的是,StringBuffer中的修改操做都被加了锁,获取锁、释放锁、阻塞等因素致使了StringBuffer的性能方面可能会比StringBuilder低。

在 JDK 1.6 以后,对synchronized 进行了一些锁优化,其中的“锁消除”优化,会使得StringBuffer在某种绝对安全的状况下忽略方法上加的锁,从而其性能会有所提高。

其余方面:

StringBuffer 的 toString() 方法会对字符序列进行缓存,以减小元素复制的开销,而 StringBuilder 则是直接复制。从而从某种程度上说,推荐使用StringBuffer。

StringBuffer 与 StringBuilder 的初始容量、扩容机制等

初始容量:16

扩容:

扩容至当前的两倍加2 :int newCapacity = value.length * 2 + 2;

若是长度仍是不够,那么实际须要多长,就扩容至多长:

if (newCapacity - minimumCapacity < 0)

newCapacity = minimumCapacity;

1.4 ArrayList、Vector、LinkedList 的异同?

Vector:

底层存储数据的是Object类型的数组。

new Vector() 时,初始大小为10

每次扩容至原来的两倍(能够设定增加因子capacityIncrement)

是线程安全的

优势:底层数据结构是数组,查找效率高。

缺点:插入、删除元素等操做效率低,且因为是线程安全的,因此较ArrayList来讲总体效率较低。

ArrayList:

底层数据存储是Object类型的数组

new ArrayList() 时,底层数据指针指向一个空数组;

第一次添加元素时,将数据指针指向长度为10的数组。

每次扩容至原来的1.5倍

是线程不安全的,在多线程操做下,可能抛出:ConcurrentModificationException(并发修改异常)

优势:效率略高于 Vector ,能够在单线程下使用。

缺点:线程不安全,数组的缺点它都有。

LinkedList:

双向链表,底层存储的是 Node 类型的节点链表

线程不安全,可能会抛出:ConcurrentModificationException

优势:插入、删除节点很容易

缺点:查找元素效率较前面两个低

1.5 讲讲类的实例化过程当中静态变量、成员变量等的加载顺序

一、父类静态变量

二、父类静态代码块

三、子类静态变量

四、子类静态代码块

五、父类成员变量

六、父类构造代码块

七、父类构造方法

八、子类成员变量

九、子类构造代码块

十、子类构造方法

代码验证:

public class Main {

public static void main(String[] args) {

Son son = new Son();

System.out.println("====================");

Son son2 = new Son();

}

}

class Parent{

public static int a = 1;

private int aa = 10;

static {

System.out.println("父类的静态代码块加载了,在此以前静态变量a已经加载了,a = " + a);

}

{

System.out.println("父类的构造代码块加载了,在此以前成员变量aa已经加载了: aa = " + aa);

}

public Parent() {

System.out.println("父类的构造方法加载了");

}

}

class Son extends Parent{

public static int b = 2;

private int bb = 20;

public Son() {

System.out.println("子类的构造方法加载了");

}

static {

System.out.println("子类的静态代码块加载了,在此以前静态变量b已经加载了,b = " + b);

}

{

System.out.println("子类的构造代码块加载了(此处将【构造块】放在【构造函数】下面,可是仍然是【构造块】先加载),在此以前成员变量bb已经加载了: bb = " + bb);

}

}

打印结果:

1a85ce6e7adca0951a6f748ae852bf93.png

1.6  HashMap 你用过吗?说说你对它的认识?

HashMap空参构造,只初始化了负载因子(0.75),其余成员变量均为默认值。

经常使用的有参构造方法 HashMap(int initialCapacity),是能够设置初始化大小的,在大概知道须要多大的map时,能够考虑使用这个构造方法。

HashMap 扩容:每次扩容至原来的2倍。

使用空参构造建立的对象,在第一次添加元素的时候,才会初始化一个长度为16的Node类型的数组。

链表转红黑树的时机:链表长度大于8 , 数组长度大于64

红黑树转链表的时机:链表程度小于 6

HashMap 容许空值做为键和值

HashMap 是无序,且键不重复的

HashMap 线程不安全,多线程操做下可能会抛出 ConcurrentModificationException

未完,待续。。。

最后

本文是我本身复习并积累的过程,文中不免会有遗漏或不许确的地方

如有大佬路过发现个人错误还请指正,能够发送到个人邮箱:yangxinhufox@foxmail.com

嫌麻烦就请在下方直接评论,万分感谢!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用系统调用pipe建立一条管道线_使用Unixbench对服务器综合性能打分及测试结果...

Unixbench是一个类unix系统(Unix&#xff0c;BSD&#xff0c;Linux)下的性能测试工具&#xff0c;一个开源工具&#xff0c;被广泛用与测试linux系统主机的性能&#xff0c;简称UB。Unixbench的主要测试项目有&#xff1a;系统调用、读写、进程、图形化测试、2D、3D、管道、运算…

java.io.file.sync_Java(25)IO流和File类

IO流File类File类讲IO流之前先来讲以下File类。Java的标准库Java.io提供了File类来操作文件和目录。操作可以有&#xff1a;新建、删除、重命名等&#xff0c;但是不能访问文件本身的内容&#xff0c;如果想要访问&#xff0c;需要使用IO流。新建File对象:package day01;import…

val_loss突然变很大_女朋友突然变得很冷淡是怎么回事?该怎么办

原本和女朋友恋爱之后她一直都表现得比较比较热情&#xff0c;但是最近这段时间她突然对自己冷淡起来&#xff0c;很多男生可能就会很疑惑&#xff1a;女朋友突然变得很冷淡是怎么回事&#xff1f;该怎么办呢&#xff1f;一、女朋友突然变得很冷淡原因不管怎么说&#xff0c;女…

进程调度rr算法java实现_Java实现进程调度算法(二) RR(时间片轮转)

一、概述因为这次os作业对用户在控制台的输入输出有要求&#xff0c;所以我花了挺多的代码来完善控制台的显示。也因为我这次要实现多个类似算法&#xff0c;所以将一些共性单独提取出来作为一个类。如果只想要和算法有关的核心代码&#xff0c;看RR类的calc()即可。实现思路&a…

string 长度_String源码解析

本章源码分析基于JDK1.7实现的接口String类被final修饰词修饰&#xff0c;代表不可修改的特性&#xff0c;它实现了三个接口&#xff0c;Serializable是序列化接口&#xff0c;Compareble是排序接口&#xff0c;Char是字符序列接口。主要成员变量char[]&#xff1a;String通过c…

将你一张表的值覆盖_山西联通携手华为完成长风商务区宏微协同,立体覆盖,打造5G精品网络...

近日&#xff0c;中国联通山西分公司(以下简称“山西联通”)在太原长风商务区继5G CA超高速率升级之后&#xff0c;又针对长风商务区两层活动区域进行了5G宏微协同的立体覆盖&#xff0c;实现了该区域5G网络的连续部署。长风商务区建筑结构设计新颖&#xff0c;占地面积3.06平方…

局域网内文件传输速度_详解蒲公英路由器组网 实现文件共享

蒲公英路由器&#xff0c;除了具备普通路由器的功能之外&#xff0c;如图&#xff1a;最大的特色是可以实现智能组网&#xff1a;最大的特色是可以实现智能组网&#xff1a;采用全新自主研发的Cloud VPN技术替代传统VPN&#xff0c;基于SD-WAN智能组网方案&#xff0c;快速组建…

java emoji显示乱码_Java 解决Emoji表情过滤问题

Emoji表情从三方数据中获取没有过滤&#xff0c;导致存入DB的时候报错。原因&#xff1a;UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节&#xff0c;而Mysql的utf8编码最多3个字节&#xff0c;所以数据插不进去。方法1.将已经建好的表也转换成utf8mb42&#xff0…

mongotemplate中save抛出异常_异常处理的三个好习惯 | Python 工匠

文 | piglei 编辑 | EarlGrey推荐 | 编程派(微信ID&#xff1a;codingpy)前言如果你用 Python 编程&#xff0c;那么你就无法避开异常&#xff0c;因为异常在这门语言里无处不在。打个比方&#xff0c;当你在脚本执行时按 ctrlc 退出&#xff0c;解释器就会产生一个 KeyboardI…

组态王能直接读取仪表数据吗_液晶多功能网络电力仪表PD800H

液晶多功能网络电力仪表PD800H-H44三相三线多功用电力表面&#xff0c;一般也被称作网络电力表面&#xff0c;它是一种数字化的监控设备&#xff0c;其功用集成了电量测量&#xff0c;情况监控&#xff0c;远程通讯为一体&#xff0c;作业原理上选用了现代核算机技术和数字信号…

php养老院管理系统,XYCMS养老院建站系统 v3.8

XYCMS养老院建站系统是一个专为养老院而设计的养老院建筑系统。中心信息管理&#xff1a;包括基本信息管理&#xff0c;添加&#xff0c;问答中心信息管理新闻动态管理&#xff1a;管理新闻信息内容&#xff0c;管理相关分类&#xff0c;添加或者删除生活环境内容管理&#xff…

超过响应缓冲区限制_Nginx如何限制并发连接数和连接请求数?

全网最全1500份Java学习资料、500份BAT面试真题&#xff1a;关注公众号&#xff0c;输入“面试题”&#xff0c;获取提取码&#xff01;首先讲解两个算发&#xff1a;算法思想是&#xff1a;令牌以固定速率产生&#xff0c;并缓存到令牌桶中&#xff1b;令牌桶放满时&#xff0…

跨域产生的原因和解决方法_板式家具开料机加工过程产生崩边原因及解决方法...

家具厂数控开料机加工材料的时候会遇到材料崩边的问题&#xff0c;下面我们系统的分析下产生的原因以及解决的办法产生崩边现象的原因&#xff1f;其一是材料本身问题。目前除了实木家具&#xff0c;目前使用较多的就是 板式贴皮的材料&#xff0c;板材的优点就是标准化生产&am…

facade 门面 php,php设计模式之门面(Facade)模式

该模式属于结构型模式什么是门面模式&#xff1f;定义&#xff1a;门面模式(有时候也称为外观模式)是指提供一个统一的接口去访问多个子系统的多个不同的接口&#xff0c;它为子系统中的一组接口提供一个统一的高层接口。外部与子系统的通信是通过一个门面(Facade)对象进行。其…

架构师一般做到多少岁_《迷茫中的我们该如何突破瓶颈——成长为一名架构师》...

如何成长为一名架构师&#xff1f;架构师是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。一个架构师得需要足够的想像力,能把各种目标需求进行不同维度的扩展&#xff0c;为目标客户提供更为全面的需求清单。很多程序员想成为一名架…

php-fpm初始化失败,FPM的初始化 - [ PHP7的内核剖析 ] - 在线原生手册 - php中文网

FPM的初始化接下来看下fpm的启动流程&#xff0c;从main()函数开始&#xff1a;//sapi/fpm/fpm/fpm_main.cint main(int argc, char *argv[]){... //注册SAPI:将全局变量sapi_module设置为cgi_sapi_modulesapi_startup(&cgi_sapi_module);... //执行php_module_staru…

360手柄摇杆漂移修复_彻底解决你的Switch手柄摇杆问题,最省钱的完美修复。

我想很多Switch的消费者都遇到了一个问题&#xff0c;用久了之后的手柄失灵&#xff0c;移动不精准&#xff0c;卡顿&#xff0c;自动位移等现象。玩个游戏都非常的糟心。动一下摇杆角色都会自动移动...这些问题的出现主要原因是摇杆内部进了灰尘&#xff0c;才导致各种现象的出…

libzdb 连接mysql,数据库连接池库libzdb使用教程

Libzdb挺强大&#xff0c; 支持Mysql Oracle SQLite PostgreSQL&#xff0c;支持C和C Object C&#xff0c;不能在Window下用(看源码是因为基于Linux线程机制编写实现)。遗憾的是找个资料太费劲&#xff0c;只能到Libzdb官网&#xff1a;点此进入 &#xff0c;今正看着上面英文…

数值分析方程求根实验matlab,数值分析实验之非线性方程求根(MATLAB实现)

一、实验目的1&#xff0e; 了解一般非线性方程的求根是比较复杂的事情&#xff1a;要讨论(或知道)它有无实根&#xff0c;有多少实根&#xff1b;知道求近似根常用的几种方法&#xff0c;每种方法的特点是什么。2&#xff0e; 用通过二分法(区间半分法)、不动点(也Picard)迭代…

iis php 数据库乱码,如何解决php插入数据乱码问题

php插入数据乱码的解决办法&#xff1a;首先要设置数据表的字符集为utf8&#xff1b;然后修改字符集格式&#xff1b;接着建立字符集为utf-8的数据库&#xff1b;最后通过php mysql语句插入数据即可。mysql数据库乱码问题解决办法我们在使用数据库(mysql)的时候最怕的就是数据库…