当前位置: 首页 > news >正文

20230909java面经整理

1.java常用集合

ArrayList动态数组,动态调整大小,实现List接口
LinkedList双向链表,实现list和queue接口,适用于频繁插入和删除操作
HashSet无序,使用哈希表实现
TreeSet有序,使用红黑树实现
HashMap无序,使用哈希表
TreeMap有序,使用红黑树
LinkedHashMap有序,使用哈希表和双向链表,保持插入顺序
Queue队列
PriorityQueue优先队列,按照优先级排序
Stack栈,后进先出

2.红黑树相比b+树的区别和使用场景

应用场景:java集合中的TreeSet和TreeMap,HashMap链表大于8转化红黑树;cpp的stl中的set和map;linux虚拟内存的管理
红黑树相比b+树的优点:rbt用于内部排序而b+t用于外存是一个磁盘友好的数据结构;红黑树具有较快的插入删除查找的时间复杂度

3.ArrayList和LinkedList对比

1.ArrayList是动态数组,LinkedList是链表
2.随机访问array快,linked增加删除快
3.arraylist需要手动设置固定大小,link自由度动态变化
4.arraylist扩容到1.5倍

4.ArrayList使用注意事项

1.线程不安全问题1:两个线程同时添加元素,判断ensureCapacity都成功,导致数组越界
2.线程不安全问题2:元素值覆盖为空问题,多线程同时写入
安全处理:synchronizedList,给add加锁,copyonwirteArrayList(写时复制),使用ThreadLocal确保线程封闭性

5.java线程池核心参数

corePoolSize:核心线程数,没有任务时线程池的基本大小
maximunPoolSize:线程池最大的线程数量
keepAliveTime:大于core时,多余的空闲线程在等待时期最长存活时间
unit:keepAliveTime时间单位
workQueue:存放待执行任务的阻塞队列
threadFactory:创建新线程的工厂类
handler:当线程池到达最大线程数量且任务队列已满,常见策略有抛出一场、丢弃任务、丢弃最老任务、直接在调用者线程个中执行

6.线程池工作原理

在这里插入图片描述

1.小于core,直接创建并执行在核心线程池
2.大于等于core,加入队列等待
3.queue满,创建非核心线程并立刻执行
4.queue满,大于等于max,handler处理
5.任务执行完移除,同时取下一个线程
6.空闲时间超过alivetime,且大于core,会停止回收多出来的线程

7.为什么要用阻塞队列

1.协调和控制线程执行,防止任务丢失或积压
2.任务缓冲,确保不会立即执行,有效平衡任务的生产和消费速度
3.线程管理,当线程池线程忙碌时,新任务在队列中等待

如果使用非阻塞队列,会产生
1.线程数不受控制,耗尽资源
2.任务丢失,如果队列已满新任务立刻丢弃
3.竞态条件,可能会导致数据一致性问题

8.hashMap的rehash

每个键的hashCode处以桶数组大小len,rehash的意思就是len变大,但是还是均匀的

9.CPU密集时如何设计线程池

采用cpu核数+1个线程,+1保证发生缺页中断阻塞时,额外的线程可以顶上去
最理想cpu所有的核心都在运行线程池中的线程

10.io密集如何设计线程池

最佳线程数 = 1 + io耗时/cpu耗时,从而提高cpu和io的利用率

11.threadlocal原理和使用场景

指线程本地变量,使得每个变量副本对于每一个 线程都是独立的,实现变量隔离性。
每个线程都有一个成员变量threadlocalmap,可以用来存数据
使用场景:
1.全局存储用户信息
2.进行线程隔离的变量使用threadlocal进行封装
3.多个方法使用同一个对象时,使用threadlocal替代参数的传递,减少代码耦合;例如@transaction中的就使用了threadlocal保存了connection

12.threadlocal使用注意

内存泄漏问题:指程序中动态分配的堆内存由于某种原因没有释放或无法释放,造成内存浪费,导致系统崩溃,最后堆积导致内存溢出。

由于entry对象被弱引用修饰,会在下次垃圾回收中清除掉,实现threadlocal和线程生命周期的解绑
,这个时候entry的key是null,但是threadlocalmap中存在current thread ref强引用,因此value无法清楚。

因此,需要我们手动remove掉entry对象。

使用弱引用的原因是因为在set和getEntry过程中会对key进行判断,如果key是null,value也会设置为null,这样即使忘了调用remove,当threadlocal被销毁,value值也会被清空

ThreadLocal中一个设计亮点是ThreadLocalMap中的Entry结构的Key用到了弱引用。试想如果使用强引用,等于ThreadLocalMap中的所有数据都是与Thread的生命周期绑定,这样很容易出现因为大量线程持续活跃导致的内存泄漏。使用了弱引用的话,JVM触发GC回收弱引用后,ThreadLocal在下一次调用get()、set()、remove()方法就可以删除那些ThreadLocalMap中Key为null的值,起到了惰性删除释放内存的作用。

其次就是在ThreadLocalMap会存在相应的遍历来查看key为null的槽位并且进行删除哦~

相关文章:

20230909java面经整理

1.java常用集合 ArrayList动态数组,动态调整大小,实现List接口 LinkedList双向链表,实现list和queue接口,适用于频繁插入和删除操作 HashSet无序,使用哈希表实现 TreeSet有序,使用红黑树实现 HashMap无序&…...

常用的css命名规则

一、命名规则说明: 1)、所有的命名最好都小写 2)、属性的值一定要用双引号(“”)括起来 3)、给图片加上alt标签 4)、尽量使用英文命名原则 5)、尽量不缩写,除非一看就明白的单词 二、相对网页外…...

【Linux编程Shell自动化脚本】03 shell四剑客(find、sed、grep、awk)

文章目录 一、find1. 常用expression2. 时间参数3. 其他选项参数3.1 查找深度3.2 执行命令 二、sed1. 常用命令选项2. 常用动作脚本命令2.1 s 替换2.2 已匹配字符串标记&2.3 在当前行前后插入文本 a\ 和 i\2.4 p 打印指定行2.5 匹配行的方式2.5.1 以数字形式指定行区间2.5.…...

java的springboot框架中使用logback日志框架使用RabbitHandler注解为什么获取不到消费的traceId信息?

当使用 Logback 日志框架和 RabbitMQ 的 RabbitHandler 注解时,如果无法获取消费的 traceId 信息,可能是因为在处理 RabbitMQ 消息时,没有正确地将 traceId 传递到日志中。 为了将 traceId 传递到日志中,你可以利用 MDC&#xff…...

初探Vue.js及Vue-Cli

一、使用vue框架的简单示例 我们本次的vue系列就使用webstorm来演示: 对于vue.js的安装我们直接使用script的cdn链接来实现 具体可以参考如下网址: https://www.bootcdn.cn/ 进入vue部分,可以筛选版本,我这里使用的是2.7.10版本的&#xff…...

大数据课程K21——Spark的SparkSQL基础语法

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的SparkSQL通过方法来使用; ⚪ 掌握Spark的SparkSQL通过sql语句来调用; 一、SparkSQL基础语法——通过方法来使用 1. 查询 df.select("id","name").show()…...

【实践篇】Redis最强Java客户端(三)之Redisson 7种分布式锁使用指南

文章目录 0. 前言1. Redisson 7种分布式锁使用指南1.1 简单锁:1.2 公平锁:1.3 可重入锁:1.4 红锁:1.5 读写锁:1.6 信号量:1.7 闭锁: 2. Spring boot 集成Redisson 验证分布式锁3. 参考资料4. 源…...

卫星通话过后,卫星导航产业被彻底激活

华为新手机发布后,其主打的卫星通话功能备受热议。在卫星产业链发展的背后,下一个大产业在哪里让人颇为好奇。 目前,卫星导航颇被看好,或将引领下一个技术狂潮。它的特点是产业大、发展快、参与者多。继电动汽车、新能源和芯片产…...

【算法训练-链表 七】【排序】:链表排序、链表的奇偶重排、重排链表

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【链表的排序】,使用【链表】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&am…...

LGB的两种写法

方法一 import lightgbm as lgb import pandas as pd from sklearn.model_selection import train_test_split, KFold from sklearn.metrics import accuracy_score# 读取训练集和测试集数据 train_data pd.read_csv(train.csv) test_data pd.read_csv(test.csv)# 分割特征和…...

【Unity的HDRP下ShaderGraph实现权重缩放全息投影_(内附源码)】

实现权重缩放全息投影 效果如下 效果如下 顶点位置偏移 链接: 提取码:1234...

透视俄乌网络战之二:Conti勒索软件集团(上)

透视俄乌网络战之一:数据擦除软件 Conti勒索软件集团(上) 1. Conti简介2. 组织架构3. 核心成员4. 招募途径5. 工作薪酬6. 未来计划参考 1. Conti简介 Conti于2019年首次被发现,现已成为网络世界中最危险的勒索软件之一&#xff0…...

【华为OD机试python】拔河比赛【2023 B卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 公司最近准备进行拔河比赛,需要在全部员工中进行挑选。 选拔的规则如下: 按照身高优先、体重次优先的方式准备比赛阵容; 规定参赛的队伍派出10名选手。 请实现一个选拔队员的小程序。 输…...

05 CNN 猴子类别检测

一、数据集下载 kaggle数据集[10 monkey] 二、数据集准备 2.1 指定路径 from tensorflow import keras import tensorflow as tf import numpy as np import pandas as pd import matplotlib.pyplot as plttrain_dir /newdisk/darren_pty/CNN/ten_monkey/training/ valid_d…...

【C#】关于Array.Copy 和 GC

关于Array.Copy 和 GC //一个简单的 数组copy 什么情况下会触发GC呢[ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]public static void Copy(Array sourceArray,long sourceIndex,Array destinationArray,long destinationIndex,long length);当源和目…...

Vue前端框架08 Vue框架简介、VueAPI风格、模板语法、事件处理、数组变化侦测

目录 一、Vue框架1.1渐进式框架1.2 Vue的版本 二、VueAPI的风格三、Vue开发准备工作四、模板语法文本插值属性绑定条件渲染列表渲染key管理状态 四、事件处理定义事件事件参数事件修饰符 五、数组变化侦测 一、Vue框架 渐进式JavaScript框架,易学易用,性…...

WebStorm使用PlantUML

虽然 WebStorm 没有官方的 PlantUML 插件,但我们可以使用第三方插件 PlantUML Integration 来实现在 WebStorm 中使用 PlantUML。 以下是使用 PlantUML Integration 插件,在 WebStorm 中设计一个 Vue 模块的步骤: 安装 PlantUML Integratio…...

Python做批处理,给安卓设备安装应用和传输图片

场景:几台新安卓平板过来了,需要安4个应用并复制4张图片。手工操作其实也未尝不可,但是能自动化起来,岂不是美哉。 python调用系统命令,我选用了os.system,最简单粗暴,也能有回显,就…...

如何获取springboot中所有的bean

代码 Component public class TestS {Autowiredprivate Map<String, Object> allBean Maps.newConcurrentMap();public void testA(){System.out.println("测试下");}}这段代码是一个使用 Spring Framework 的依赖注入&#xff08;DI&#xff09;功能的示例。…...

大数据技术之Hadoop:HDFS存储原理篇(五)

目录 一、原理介绍 1.1 Block块 1.2 副本机制 二、fsck命令 2.1 设置默认副本数量 2.2 临时设置文件副本大小 2.3 fsck命令检查文件的副本数 2.4 block块大小的配置 三、NameNode元数据 3.1 NameNode作用 3.2 edits文件 3.3 FSImage文件 3.4 元素据合并控制参数 …...

用C语言实现牛顿摆控制台动画

题目 用C语言实现牛顿摆动画&#xff0c;模拟小球的运动&#xff0c;如图所示 拆解 通过控制台API定位输出小球运动的只是2边小球&#xff0c;中间小球不运动&#xff0c;只需要固定位置输出左边小球上升下降时&#xff0c;X、Y轴增量一致。右边小球上升下降时&#xff0c;X、…...

如何自己开发一个前端监控SDK

最近在负责团队前端监控系统搭建的任务。因为我们公司有统一的日志存储平台、日志清洗平台和基于 Grafana 搭建的可视化看板&#xff0c;就剩日志的采集和上报需要自己实现了&#xff0c;所以决定封装一个前端监控 SDK 来完成日志的采集和上报。 架构设计 因为想着以后有机会…...

node.js笔记

首先&#xff1a;浏览器能执行 JS 代码&#xff0c;依靠的是内核中的 V8 引擎&#xff08;C 程序&#xff09; 其次&#xff1a;Node.js 是基于 Chrome V8 引擎进行封装&#xff08;运行环境&#xff09; 区别&#xff1a;都支持 ECMAScript 标准语法&#xff0c;Node.js 有独立…...

mysql 增量备份与恢复使用详解

目录 一、前言 二、数据备份策略 2.1 全备 2.2 增量备份 2.3 差异备份 三、mysql 增量备份概述 3.1 增量备份实现原理 3.1.1 基于日志的增量备份 3.1.2 基于时间戳的增量备份 3.2 增量备份常用实现方式 3.2.1 基于mysqldump增量备份 3.2.2 基于第三方备份工具进行增…...

9月5日上课内容 第一章 NoSQL之Redis配置与优化

本章结构 关系型数据库和非关系型数据库 概念介绍 ●关系型数据库&#xff1a; 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。 SQL 语句&#xff08;标准数据查询语言&#xff09;就是…...

QT 第四天

一、设置一个闹钟 .pro QT core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend…...

nrf52832 GPIO输入输出设置

LED_GPIO #define LED_START 17 #define LED_0 17 #define LED_1 18 #define LED_2 19 #define LED_3 20 #define LED_STOP 20设置位输出模式&#xff1a; nrf_gpio_cfg_output(LED_0); 输出高电平:nrf_gpio_pin_set(LED_0); 输…...

MyBatis 动态 SQL 实践教程

一、MyBatis动态 sql 是什么 动态 SQL 是 MyBatis 的强大特性之一。在 JDBC 或其它类似的框架中&#xff0c;开发人员通常需要手动拼接 SQL 语句。根据不同的条件拼接 SQL 语句是一件极其痛苦的工作。例如&#xff0c;拼接时要确保添加了必要的空格&#xff0c;还要注意去掉列…...

CSS 斜条纹进度条

效果&#xff1a; 代码&#xff1a; html: <div class"active-line flex"><!-- lineWidth&#xff1a;灰色背景 --><div class"bg-line"><div v-for"n in 30" class"gray"></div></div><div…...

JavaScript(1)每天10个小知识点

​ 目录 1. JavaScript 有哪些数据类型&#xff0c;它们的区别&#xff1f;**2. 数据类型检测的方式有哪些**3. null 和 undefined 区别**4. intanceof 操作符的实现原理及实现**5. 如何获取安全的 undefined 值&#xff1f;**6. Object.is() 与比较操作符 “”、“” 的区别*…...

石家庄政府网站建设/四川专业网络推广

摘要极端梯度提升 (eXtreme Gradient Boosting) 是一种基于决策树的集成机器学习方法&#xff0c;适用于分类和回归问题。其优点是速度快、效果好、能处理大规模数据、支持自定义损失函数等。极端梯度提升(XGBoost)XGBoost算法是运用提升法(boosting)建立多个CART回归树进行预测…...

网站为什么被挂马/seo快排

分组查询 一、语法 select 分组函数&#xff0c;分组后的字段 from 表 【where 筛选条件】 group by 分组的字段 【having 分组后的筛选】 【order by 排序列表】 二、特点 使用关键字 筛选的表 位置 分组前筛选 where 原始表 grou…...

网站建设开发团队介绍/比百度好用的搜索引擎

author:skate time:2008/2/18 oracle如何得到32位的世界唯一随机数 我们在创建表的时候一般都用序列生成的数字来保证数据的唯一&#xff0c;但这只能保证在单个实例中&#xff0c;无法适合并行或远程的环境的主关键字 因为在各自环境理里可能生成的数字重复&#xff0c;从而会…...

网站首页的尺寸做多大/厦门百度竞价推广

现在条形码无处不在&#xff0c;几乎用于所有业务领域的识别。在业务流程中实施条形码时&#xff0c;可以自动执行程序以减少人为错误并提高生产率。条形码入门指南就是介绍IDAutomation旗下的条形码产品以及条形码符号和符号的标准。本篇教程将会介绍条形码的应用程序。 点击下…...

设置网站字体/3000块钱在朋友圈投放广告

E 题意&#xff1a; 就是给你一个图&#xff0c;不过点只有300个&#xff0c;然后问你最多能删掉多少边&#xff0c;可以使得这个图任意两点的最短路不发生改变。 思考&#xff1a; 以前那种cf上删边加边的题都是特别难的&#xff0c;感觉没法做。其实这个题&#xff0c;300的…...

做网站一般需要多久/全球疫情最新消息

如何使用远程服务器跑项目 内容精选换一换远程桌面协议(Remote Desktop Protocol&#xff0c;RDP)&#xff0c;是微软提供的多通道的远程登录协议。本节为您介绍如何使用RDP文件远程登录Windows弹性云服务器。从管理控制台下载的RDP文件对应唯一的云服务器&#xff0c;当前RDP文…...