Java面试常用,初级到高级(持续更新中....)

news2025/7/17 12:40:03

文章目录

  • 一、java基础
    • 1、基本类型
    • 2、String相关
    • 3、数组和list相互转换
    • 4、java中的锁
    • 5、常用的算法
  • 二、项目层面
    • 1、并发与并行的区别
  • 三、常见错误解决
    • 1、Java ConcurrentModificationException异常原因和解决方法
    • 2、 main中不能使用this
  • 四、底层的相关技术
    • 1、spring如何处理循环依赖
    • 2、jvm如何判断对象该回收
      • 2.1)jvm判断对象是否可以被回收的方式
        • 2.1.1 引用计数法
        • 2.1.2 可达性算法
        • 2.1.3 哪些对象可以作为GC Root呢?
    • 3、jdk1.8的接口优化,stream包集合优化
    • 4、线程池初始化方式有哪些?种类有哪些?参数有哪些?
      • 4.1)线程池初始化两种方式
      • 4.2)线程池五类
      • 4.2)线程池七个参数详解

面试保持一个探讨交流的心态,因为没有人什么都懂!
也就是说,互相平等,保持开发中,编写代码的状态
欢迎加入扣扣组织,783092701

一、java基础

1、基本类型

java语言中有8种基本数据类型,分类四大类型:

逻辑类型:boolean
整数类型:byte、short、int、long
浮点类型 :float、double
字符类型:char   

2、String相关

1)String是基本类型吗?
String不是基本类型,引用类型

2)String常用的方法?
split substring valueOf

3、数组和list相互转换

List list = new ArrayList();
list.add(1);
//toArray
Object[] array = list.toArray();
System.out.println("list转数组"+Arrays.toString(array));
//asList
List list2 = Arrays.asList(array);
System.out.println("数组转list2"+list2);

4、java中的锁

悲观锁与乐观锁
1)悲观锁:认为别人会修改
synchronized原始采用的是CPU悲观锁机制

2)乐观锁:认为别人不会修改
Lock 用的是乐观锁方式
实现方式:
在数据表中添加一个数据版本号version字段,表示数据被修改的次数,当数据被修改的时候,version值会加一;当线程A要重新更新数据值的时候,在读取数据的时候也会读取version值,在提交更新的时候,若刚才读取到的version值与当前数据库中的version值相等才更新,否则重新更新操作,直到更新成功

3)应用场景
乐观锁使用于写比较少(即读多)的场景,即冲突很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但是如果是写比较多的情况,一般会经常发生冲突,这就会导致上层应用会不断的进行充实,这样反倒是降低了性能,所以一般多写的场景下用悲观锁比较合适

5、常用的算法

二、项目层面

1、并发与并行的区别

并发是指一个处理器同时处理多个任务。
并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。
并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。

三、常见错误解决

1、Java ConcurrentModificationException异常原因和解决方法

1)在使用iterator迭代的时候使用synchronized或者Lock进行同步;
2)使用并发容器CopyOnWriteArrayList代替ArrayListVector

2、 main中不能使用this

因为main方法是静态方法属于类,无法直接使用对象级别的变量和方法,也就是实例属性和实例方法。而关键字“ this”用作对实例的引用,因此不能在静态方法中使用“ this”引用。

原因(个人理解,勿喷):静态方法在类加载时就会被加载到方法区中,而此时,main函数还没有执行,没有new出对象th,所以无法使用对象级别的属性和方法。

四、底层的相关技术

1、spring如何处理循环依赖

【这个有点深度,暂时需要研究一下】转载 spring循环依赖探究

2、jvm如何判断对象该回收

2.1)jvm判断对象是否可以被回收的方式

要分辨一个对象是否可以被回收,有两种方式:引用计数法可达性算法

2.1.1 引用计数法

就是在对象被引用时,计数加1,引用断开时,计数减1。那么一个对象的引用计数为0时,说明这个对象可以被清除。

这个算法的问题在于,如果A对象引用B的同时,B对象也引用A,即循环引用,那么虽然双方的引用计数都不为0,但如果仅仅被对方引用实际上没有存在的价值,应该被GC掉。

2.1.2 可达性算法

通过引用计数法的缺陷可以看出,从被引用一方去判定其是否应该被清理过于片面,所以我们可以通过相反的方向去定位对象的存活价值:一个存活对象引用的所有对象都是不应该被清除的(Java中软引用或弱引用在GC时有不同判定表现,不在此深究)。这些查找起点被称为GC Root

2.1.3 哪些对象可以作为GC Root呢?

JAVA虚拟机栈中的本地变量引用对象

方法区中静态变量引用的对象

方法区中常量引用的对象

本地方法栈中JNI引用的对象

3、jdk1.8的接口优化,stream包集合优化

问题1:接口方法必须实现,jdk1.8如何做到可以不实现?
问题2:假设一个父接口被超级多子类继承,并且子类还会被子类的子类继承……,当父接口需要添加一个方法时,因为该方法一定会在超多个子类中被覆写的,所以工作量难以想象。
回答可以使用default来定义普通方法

interface INew{
	public default void fun() {//普通方法,有方法体
		System.out.println("world!");
	}
	public void print();//抽象方法
}
class Person implements INew{
	@Override
	public void print() {
		System.out.println("hello!");
	}
}
public class TestDemo {
	public static void main(String[] args) {
		INew p=new Person();
		p.print();
		p.fun();//实例化对象是可以调用fun()方法的
	}
}

另外一个特性:可以使用static来定义静态方法,通过接口名就可以调用

interface INew{
	public default void fun() {//普通方法,有方法体
		System.out.println("world!");
	}
	public static INew getInstance() {//定义静态方法
		return new Person();
	}
	public void print();//抽象方法
}
class Person implements INew{
	@Override
	public void print() {
		System.out.println("hello!");
	}
}
public class TestDemo {
	public static void main(String[] args) {
		INew p=INew.getInstance();//静态方法可以由类名称直接调用了
		p.print();
		p.fun();//实例化对象是可以调用fun()方法的
	}
}

4、线程池初始化方式有哪些?种类有哪些?参数有哪些?

误区:cpu过高,是单个线程请求过高问题。而不是线程过多造成的。

4.1)线程池初始化两种方式

在这里插入图片描述

4.2)线程池五类

  • 固定数量的线程池——newFixedThreadPool
    作用:这是一个线程数固定的,线程可以重用的线程池,用共享的无界队列方式运行这些线程。
  • 缓存线程池——newCachedThreadPool
    作用:它是根据需要,创建线程,没有核心线程,当60s内这个线程没接收到任务时,它就会被从池中收走。60s内这个线程又接收到新任务时,它就又被重用了。
  • 只有一个线程的线程池——newSingleThreadPool
    作用:这个线程池中只有1个线程,用无界队列的方式运行。如果这个线程突然挂掉了,线程池会新建一个新的线程顶替它,继续完成任务。
  • 延时线程池——newScheduleThreadPool
    作用:创建一个线程池,可以让它里面的线程延迟执行,或在规定的时间后执行。
  • 并行线程池——newWorkStealingPool
    作用:jdk1.8提供的线程池,底层使用ForkJoinPool实现,池中有多个任务队列。适用于任务多,可以并发执行的场景。

4.2)线程池七个参数详解

在这里插入图片描述

  1. corePoolSize 线程池核心线程大小
  2. maximumPoolSize 线程池最大线程数量
  3. keepAliveTime 空闲线程存活时间
  4. unit 空闲线程存活时间单位
  5. workQueue 工作队列
  6. threadFactory 线程工厂
  7. handler 拒绝策略
    如何真正理解记忆:找一台服务器,跑一下代码就行!

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

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

相关文章

54.Python的def语句自定义函数

54.def语句自定义函数 文章目录54.def语句自定义函数1.课题导入—数学中的函数1.1 计算圆的面积1.2 计算不规则图形的面积2. 什么是函数3. 函数分类3.1 内置函数3.2 自定义函数4. 计算多个矩形的面积5. 自定义函数计算矩形的面积6.自定义函数的写法1.先写函数要实现的功能2.添加…

Android设计模式详解之策略模式

前言 定义:定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 使用场景: 针对同一类型问题的多种处理方式,仅仅是具体行为有差别时;…

电磁波的达朗贝尔方程 工程电磁场P25

我们有下述两个方程 记住一定是线性介质 称为电磁波的达朗贝尔方程,是两个非齐次方程 我们下面介绍达朗贝尔方程的解 我们就用最简单的场源举例 这个方程可以写成 动态位是r和时间的函数 我们可以在球坐标系下展开成 我们再做一下变换 现在如果在这个微分方程里面…

智牛股_第7章_OAuth2+Spring Security OAuth2+GateWay+Druid+Spring Data JPA

交易平台 - Day 7 文章目录交易平台 - Day 7学习目标第1章 OAUTH2统一认证1. 目标2. 分析3. 讲解3.1 传统登陆认证3.2 单点登陆认证3.3 OAuth2简介3.4 OAuth2角色3.5 OAuth2 协议流程3.6 授权类型3.7 授权码模式流程3.8 简化模式3.9 密码模式3.10 客户端模式3.11 Spring Securi…

分治法算法

目录 一 算法简介 ①算法定义 ②算法特征 ③算法编程 二 算法应用 汉诺塔 问题描述 问题解析 问答解答 快速幂 问题描述 问题解析 问题解答 三 分治思想设计排序算法 步骤解析 归并排序 归并排序的主要操作 归并排序与交换排序 归并算法的应用:逆…

前端基础(十六)_BFC、box-shadow(盒子阴影)、text-shadow(文字阴影)

什么是BFC? 1、块级格式化上下文,web页面可视化css视觉渲染的一部分,是页面中一个独立的渲染区域; 2、用于决定块盒子的布局和浮动相互影响范围的一个区域,可以改变父级元素的渲染规则; 3、无论里面怎么折…

轻松入门基因表达式编程 (GEP)

0 引言 基因表达式编程 GEP (Gene Expression Programming) 是一种基于生物基因结构和功能发明的一种新型自适应演化算法。GEP 是从遗传算法(geneticalgorithms ,简称 GAs)和遗传程序设计(genetic pro2gramming ,简称 GP)中发展而…

Android GB∕T 19056-2021 汽车行驶记录仪-定位性能测试

最近在做汽车相关的项目,然后要根据最新发布的新国标接入,我们这边之前没有做过的,我是第一个,好惨啊。远程调试不通,后来还专门到现场进行了测试,来到刚刚转正没几天就开始出差了,命太苦了。 …

前沿系列--Transform架构[架构分析+代码实现]

文章目录前言总体架构总体任务使用输入部分EmbeddingPosition Encodingwhy实现注意部分注意力机制/自注意力掩码作用如何工作形状解释完整实现多头注意力实现Norm处理FeedForward 以及连接编码器解码器中间层组装输出层模型组装总结前言 Transform这玩意的大名我想就不用我多说…

2022年笔记本电脑市场总结:华为份额激增95%,联想、苹果均下滑

2022年即将过去,又来到了进行今年笔记本市场总结的环节。 今年笔记本电脑行业依然没有突破天花板。可以看到,2022年上半年期间市场还保持着良好的增长态势,到了下半年则出现了需求萎靡的状态。从一整年的数据来看,笔记本电脑行业还…

安装nnpy出现错误以及解决

今天在安装P4C的时候,参考了这篇博客 P4语言环境安装-前端编译器p4c、后端编译器p4c-bm2-ss、交换模型bmv2、Tutorial-张华Guido 在进行到这一步时,出现了错误 #安装python-pip sudo apt install python-pip #我是安装在/home/guido(user_name)/路径下…

阿里云斩获2022全球分布式云大会两项大奖

12 月 21日,“2022 全球分布式云大会深圳站”正式举办。阿里云弹性计算团队凭借在算力领域的创新突破与全面的分布式云产品矩阵布局,荣获“2022 年度中国算力先锋 TOP3”、“2022 年度分布式算力市场领导力企业”两项大奖。 图一:2022年度中国…

智能勘探 | AIRIOT智慧油田管理解决方案

石油勘探和开采地处偏远地区,涉及面广且生产规模大。特殊的作业环境下,使得工作人员作业条件艰苦,仅靠人工值守难度很大,不可避免的遇到一系列硬核挑战: 1、设备维护难度较高; 2、采油厂分布地域广、分散…

北面羽绒服成热议产品,小红书透露出哪些营销新趋势?

小红书浓厚的种草氛围,为品牌创造了良好的营销环境,想要在小红书做好内容种草,需要洞察用户的真实需求来推广产品,实现营销效果的最大化。那如何发现小红书上的热门品类?制定品牌营销策略?挑选优质合作达人…

面试题题review

面试题 已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。给定一个int数组A,同时给定A的大小…

多准则决策问题评估方法 | 层次分析法(含代码)

目前多准则决策问题的评估方法主要分为定性分析方法和定量分析方法两类。定性分析方法主要包括专家咨询、熵权法、案例研究和德尔菲法等;定量分析法主要包括层次分析法、主成分分析法、因子分析法、模糊综合评价法、色综合评价法以及数据包络分析法(DEA法…

启科 QuSaaS 真随机数解决方案与 Amazon Braket 结合实践

作者:1.丘秉宜,2.邵伟,3.黄文,4.郭梦杰 1.亚马逊云科技 HERO;2.开发者生态负责人;3.DEVOPS 工程师;4.资深研发工程师 1、概述 随机性(Randomness)是偶然性的一种形式&…

【JavaEE】Tomcat

努力经营当下,直至未来明朗! 文章目录【Tomcat】:http服务器THINK努力成为你想成为的人一定很酷! 【Tomcat】:http服务器 http客户端就是我们平时使用的浏览器,但是我们还需要开发实现一个服务器来搭建网…

[FireshellCTF2020]Caas

打开界面,是一个运行代码的*框,然后我们输入 本来以为会是一个ssti模板,{{8*8}}却仍然还是报错,print echo 等输出都不行 只能分析分析报错信息看看有没有什么有用的东西 /tmp目录下的,class_7eamm1tu3.c后缀名是c&…

【论文阅读】(2020)Knapsack polytopes: a survey(上)

文章目录一、Abstract 摘要二、Introduction 介绍三、General polyhedral structure 一般多面体结构3.1 Basic properties 基本性质3.2 Covers 覆盖不等式四、Binary formulations based on strong covers 基于强覆盖的二元公式五、Lifting 提升5.1 Sequential up-lifting5.2 S…