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

【腾讯一面】我对我的Java基础不自信了

我对我的Java基础不自信了

  • 1、List和set的区别?
  • 2、HashSet 是如何保证不重复的
  • 3、HashMap是线程安全的吗,为什么不是线程安全的?
  • 4、HashMap的扩容过程
  • 5、Java获取反射的三种方法
  • 6、Redis持久化机制原理
  • 7、redis持久化的方式各有哪些优缺点

1、List和set的区别?

相同点:

	List和set都是继承自Collection接口。

不同点:
Set:

  • 元素无序,不可重复;
  • 只能用迭代,不能用for循环;
  • 检索效率低,增删效率高;
  • 插入和删除不会引起元素位置的变化

List:

  • 元素有序,可重复;
  • 可以用for循环遍历;
  • 检索效率高,插入效率低
  • 会引起元素位置的变化

注释:set 元素虽然无放入顺序,但是元素在set中的位置是有该元素的 HashCode 决定的,其位置其实是固定的,加入Set 的Object 必须定义 equals ()方法 。

2、HashSet 是如何保证不重复的

我们可以根据hashSet的源码来解说,以下是 HashSet 部分源码:

private static final Object PRESENT = new Object();
private transient HashMap<E,Object> map;public HashSet() {map = new HashMap<>();
}
public boolean add(E e) {return map.put(e, PRESENT)==null;
}

因为HashMap的 key 是唯一的,由上面的代码可以看出HashSet 添加进去的值就是作为HashMap 的key。所以不会 重复。(不仅要比较hash值,同时还要结合 equles 方法比较。)

3、HashMap是线程安全的吗,为什么不是线程安全的?

首先HashMap 不是线程安全的。

举个例子说明:

  1. 如果有两个线程A和B,都在做插入数据,并且刚好这俩数据经过哈希计算后得到的哈希值一样,且该位置没有别的数据。
  2. 假设有一种情况,线程A通过if语句判定,该位置没有哈希冲突,进入了if语句内,但还没有执行插入数据的时候,CPU把资源让给了线程B (你说气不气人)。
  3. 这个时候线程A停留在了if语句里面,但没有执行插入数据。
  4. 线程B获得CPU资源后,也通过if语句判定该位置没有哈希冲突,也进入了if语句。线程B使用完CPU资源后,轮到了线程A,这时候线程A直接执行插入数据操作,而无需判定。
  5. 这时候你就会发现,线程A把线程B插入的数据给覆盖掉了。

4、HashMap的扩容过程

我们都知道,在向HashMap容器里。添加元素的时候,会先判断容器内的元素个数,如果大于等于这个阈值(知道这个阈字怎么念吗?不念 fa 值,念 yu 值四声)。即当前数组的长度乘以加载因子的值的时候,就要自动扩容啦。

扩容就是重新计算容量,当然 Java 里的数组是无法自动扩容的,方法 是使用一个新的数组代替已有的容量小的数组。在扩容的时候也可能会导致数据不一致,因为扩容是从一个数组拷贝到另外一个数组。

5、Java获取反射的三种方法

  1. 通过new对象实现反射机制
  2. 通过路径实现反射机制
  3. 通过类名实现反射机制

例如:

public class Student {private int id;String name;protected boolean sex;public float score;
}
public class Get {
//获取反射机制三种方式
public static void main(String[] args) throws ClassNotFoundException {//方式一(通过建立对象)Student stu = new Student();Class classobj1 = stu.getClass(); System.out.println(classobj1.getName()); //方式二(所在通过路径-相对路径)Class classobj2 = Class.forName("fanshe.Student"); System.out.println(classobj2.getName()); //方式三(通过类名)Class classobj3 = Student.class;System.out.println(classobj3.getName());} 
}

6、Redis持久化机制原理

Redis通过持久化把内存中的数据同步到磁盘上,来保证数据的持久话。当redis重启后,就会把硬盘里的数据读取到缓存中,达到恢复数据的目的。

实现原理:

单独创建一个 fork() 子进程,把当前父进程的数据复制到子进程的内存中,然后由子进程写入到临时文件中。然后临时文件会替换掉快照文件,子进程退出,内存释放。

RDB是redis默认的持久化方式,根据一定的时间周期策略把内存的数据以快照的形式保存到硬盘上,文件名为:dump.rdb。

AOF:Redis会将每一个收到的写命令都通过Write函数追加到文件最后,类似于MySQL的binlog。当Redis重启是会通过重新执行文件中保 存的写命令来在内存中重建整个数据库的内容。

7、redis持久化的方式各有哪些优缺点

首先RDB模式下:
优点:

  • 只有一个文件 dump.rdb,方便持久化;
  • 容灾性好,一个文件可以保存到安全的磁盘。
  • 性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是 IO最大化。
  • 相对于数据集大时,比 AOF 的启动效率更高。

缺点:

  • 数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。

AOF模式下:
优点

  • 数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次命令操作就记录到 aof 文件中一次。
  • 通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof工具解决数据一致性问题。
  • AOF 机制的 rewrite 模式。(AOF 文件没被 rewrite 之前,可以删除其中的某些命令)

缺点:

  • AOF 文件比 RDB 文件大,且恢复速度慢。
  • 数据集大的时候,比 rdb 启动效率低。

相关文章:

【腾讯一面】我对我的Java基础不自信了

我对我的Java基础不自信了1、List和set的区别&#xff1f;2、HashSet 是如何保证不重复的3、HashMap是线程安全的吗&#xff0c;为什么不是线程安全的&#xff1f;4、HashMap的扩容过程5、Java获取反射的三种方法6、Redis持久化机制原理7、redis持久化的方式各有哪些优缺点1、L…...

前端都在聊什么 - 第 2 期

Hello 小伙伴们早上、中午、下午、晚上、深夜好&#xff0c;我是爱折腾的 jsliang~「前端都在聊什么」是 jsliang 日常写文章/做视频/玩直播过程中&#xff0c;小伙伴们的提问以及我的解疑整理。本期对应 2023 年的 01.16-01.31 这个时间段。本期针对「规划」「工作」「学习」「…...

每天一道大厂SQL题【Day11】微众银行真题实战(一)

每天一道大厂SQL题【Day11】微众银行真题实战(一) 大家好&#xff0c;我是Maynor。相信大家和我一样&#xff0c;都有一个大厂梦&#xff0c;作为一名资深大数据选手&#xff0c;深知SQL重要性&#xff0c;接下来我准备用100天时间&#xff0c;基于大数据岗面试中的经典SQL题&…...

Cosmos 基础教程(一) -- 不可不知的开发术语

CometBFT DOC 您可以在本节中找到几个技术术语的概述&#xff0c;包括每个术语的解释和进一步资源的链接——在使用Cosmos SDK进行开发时&#xff0c;所有这些都是必不可少的。 在本节中&#xff0c;您将了解以下术语: Cosmos and Interchain LCD RPC Protobuf -协议缓冲…...

JAVA JDK 常用工具类和工具方法

目录 Pair与Triple Lists.partition-将一个大集合分成若干 List集合操作的轮子 对象工具Objects 与ObjectUtils 字符串工具 MapUtils Assert断言 switch语句 三目表达式 IOUtils MultiValueMap MultiMap JAVA各个时间类型的转换&#xff08;LocalDate与Date类型&a…...

Spring Bean循环依赖

解决SpringBean循环依赖为什么需要3级缓存&#xff1f;回答&#xff1a;1级Map保存单例bean。2级Map 为了保证产生循环引用问题时&#xff0c;每次查询早期引用对象&#xff0c;都拿到同一个对象。3级Map保存ObjectFactory对象。数据结构1级Map singletonObjects2级Map earlySi…...

Hive 2.3.0 安装部署(mysql 8.0)

Hive安装部署 一.Hive的安装 1、下载apache-hive-2.3.0-bin.tar.gz 可以自行下载其他版本&#xff1a;http://mirror.bit.edu.cn/apache/hive/ 2.3.0版本链接&#xff1a;https://pan.baidu.com/s/18NNVdfOeuQzhnOHVcFpnSw 提取码&#xff1a;xc2u 2、用mobaxterm或者其他连接…...

IPD术语表

简称英文全称中文ABPannual business plan年度商业计划ABCactivity -based costing基于活动的成本估算ABMactivity -based management基于活动的管理ADCPavailability decision check point可获得性决策评审点AFDanticipatory failure determination预防错误决定AMEadvanced ma…...

目标检测损失函数 yolos、DETR为例

yolos和DETR&#xff0c;除了yolos没有卷积层以外&#xff0c;几乎所有操作都一样。 HF官方文档 因为目标检测模型&#xff0c;实际会输出几百几千个“框”&#xff0c;所以损失函数计算比较复杂。损失函数为偶匹配损失 bipartite matching loss&#xff0c;参考此blog targe…...

linux系统编程2--网络编程socket

在linux系统编程中网络编程是使用socket&#xff08;套接字&#xff09;&#xff0c;socket这个词可以表示很多概念&#xff1a;在TCP/IP协议中&#xff0c;“IP地址TCP或UDP端口号”唯一标识网络通讯中的一个进程&#xff0c;“IP地址端口号”就称为socket。在TCP协议中&#…...

FPGA纯Verilog实现任意尺寸图像缩放,串口指令控制切换,贴近真实项目,提供工程源码和技术支持

目录1、前言2、目前主流的FPGA图像缩放方案3、本方案的优越性4、详细设计方案5、vivado工程详解6、上板调试验证并演示7、福利&#xff1a;工程源码获取1、前言 代码使用纯verilog实现&#xff0c;没有任何ip&#xff0c;可在Xilinx、Intel、国产FPGA间任意移植&#xff1b; 图…...

华为OD机试题 - 最长合法表达式(JavaScript)| 代码+思路+重要知识点

最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - 整数分解(JavaScript) 华为OD机试题 - 单词反转(JavaScript) 使用说明 参加华为od机试,一定要注意不要完全背…...

L1-005 考试座位号

L1-005 考试座位号 每个 PAT 考生在参加考试时都会被分配两个座位号&#xff0c;一个是试机座位&#xff0c;一个是考试座位。正常情况下&#xff0c;考生在入场时先得到试机座位号码&#xff0c;入座进入试机状态后&#xff0c;系统会显示该考生的考试座位号码&#xff0c;考试…...

Obsidian + remotely save + 坚果云:实现电脑端和手机端的同步

写在前面&#xff1a;近年来某象笔记广告有增无减&#xff0c;不堪其扰&#xff0c;便转投其它笔记&#xff0c;Obsidian、OneNote、Notion、flomo都略有使用&#xff0c;本人更偏好obsidian操作简单&#xff0c;然其官方同步资费甚高&#xff0c;囊中羞涩&#xff0c;所幸可通…...

对比学习MoCo损失函数infoNCE理解(附代码)

MoCo loss计算采用的损失函数是InfoNCE&#xff1a; ​​ 下面是MoCo的伪代码&#xff0c;MoCo这个loss的实现就是基于cross entropy loss。 将k作为q的正样本&#xff0c;因为k与q是来自同一张图像的不同视图&#xff1b;将queue作为q的负样本&#xff0c;因为queue中含有大量…...

logd守护进程

logd守护进程1、adb logcat命令2、logd守护进程启动2.1 logd文件目录2.2 main方法启动3、LogBuffer缓存大小3.1 缓存大小优先级设置3.2 缓存大小相关代码位置android12-release1、adb logcat命令 命令功能adb bugreport > bugreport.txtbugreport 日志adb shell dmesg >…...

【汽车雷达通往自动驾驶的关键技术】

本文编辑&#xff1a;调皮哥的小助理 现代汽车雷达装置比手机还小&#xff0c;能探测前方、后方或侧方的盲点位置是否存在障碍物&#xff0c;但这还不百分之百实现全自动驾驶的。传统的汽车雷达分辨率都不高&#xff0c;只能“看到”一团东西&#xff0c;可以检测到汽车周围存在…...

2023实习面经

实习面经 秋招笔试面试全记录 字节-电商 字节实习一面&#xff1a; 二分类的损失函数是什么&#xff0c;怎么算&#xff1f;多分类的损失函数怎么算&#xff1f;如果文本分类的标签有多个&#xff0c;比如一个文本同时属于多个label那怎么办&#xff1f;如果文本分类里面的…...

linux shell 入门学习笔记2shell脚本

什么是shell脚本 当命令或者程序语句写在文件中&#xff0c;我们执行文件&#xff0c;读取其中的代码&#xff0c;这个程序就称之为shell脚本。 有了shell脚本肯定是要有对应的解释器了&#xff0c;常见的shell脚本解释器有sh、python、perl、tcl、php、ruby等。一般这种使用文…...

Android稳定性系列-01-使用 Address Sanitizer检测原生代码中的内存错误

前言想必大家曾经被各种Native Crash折磨过&#xff0c;本地测试没啥问题&#xff0c;一到线上或者自动化测试就出现各种SIGSEGV、SIGABRT、SIGILL、SIGBUS、SIGFPE异常&#xff0c;而且堆栈还是崩溃到libc.so这种&#xff0c;看起来跟我们的代码没啥关系&#xff0c;关键还不好…...

2026年大模型部署新趋势:Qwen2.5+云GPU实战解析

2026年大模型部署新趋势&#xff1a;Qwen2.5云GPU实战解析 本文基于通义千问2.5-7B-Instruct大型语言模型的二次开发构建实践&#xff0c;深入解析2026年大模型部署的最新趋势和技术要点 1. 引言&#xff1a;大模型部署进入新纪元 2026年的大模型部署领域正在经历深刻变革。随…...

OpenTSDB数据模型设计终极指南:掌握时间序列数据的最佳实践和常见模式

OpenTSDB数据模型设计终极指南&#xff1a;掌握时间序列数据的最佳实践和常见模式 【免费下载链接】opentsdb A scalable, distributed Time Series Database. 项目地址: https://gitcode.com/gh_mirrors/op/opentsdb OpenTSDB作为一款可扩展的分布式时间序列数据库&…...

OpenClaw+千问3.5-9B智能搜索:快速定位本地文件

OpenClaw千问3.5-9B智能搜索&#xff1a;快速定位本地文件 1. 为什么需要智能文件搜索 作为一个长期与代码和文档打交道的开发者&#xff0c;我经常陷入"文件存在但找不到"的困境。传统的文件名搜索在面对以下场景时显得力不从心&#xff1a; 只记得文档内容关键词…...

阿里Live Avatar数字人:从部署到生成视频的完整流程

阿里Live Avatar数字人&#xff1a;从部署到生成视频的完整流程 1. 引言&#xff1a;认识Live Avatar数字人 Live Avatar是阿里巴巴联合高校开源的一款先进数字人视频生成模型。这个强大的工具可以将静态图片、音频和文字描述转化为生动的数字人视频&#xff0c;实现逼真的口…...

数据库死锁的排查:从现象到根因

在软件测试工作中&#xff0c;数据库的稳定性和数据一致性是评估系统质量的关键维度。死锁问题&#xff0c;作为数据库并发控制中的“顽疾”&#xff0c;其随机性、隐蔽性和破坏性常常让测试人员感到棘手。它不仅是性能测试中的“拦路虎”&#xff0c;更可能在线上引发严重故障…...

保姆级教程:用PCL的SAC_RANSAC算法搞定点云平面分割(附完整C++代码)

从零掌握PCL点云平面分割&#xff1a;RANSAC算法实战与避坑指南 刚接触三维点云处理时&#xff0c;面对杂乱无章的数据点&#xff0c;如何快速准确地提取出平面结构&#xff1f;本文将手把手带你用PCL库中的RANSAC算法实现点云平面分割&#xff0c;从环境搭建到参数调优&#x…...

RAG大模型“外挂“揭秘:3步解锁私有数据问答,秒变“开卷学霸“!

什么是 RAG&#xff1f;一文搞懂大模型时代最火技术 &#x1f3af; 当AI遇到"失忆症"&#xff1a;RAG来拯救 相信用过 ChatGPT 的朋友都遇到过这种尴尬&#xff1a; 你问它最新新闻&#xff0c;它回答"我的知识截止到2023年"你问公司内部政策&#xff0c;它…...

Grafici-GFX:Arduino嵌入式数据可视化轻量库

1. Grafici-GFX 库概述&#xff1a;面向嵌入式显示终端的数据可视化引擎Grafici-GFX 是一个专为 Arduino 平台设计的轻量级数据可视化库&#xff0c;其核心定位并非通用图形渲染&#xff0c;而是在资源受限的微控制器上实现高效、可配置的数据曲线绘制与状态呈现。该库不直接操…...

RPA流程进阶:在Uibot中集成Python插件实现复杂数据处理

1. 为什么要在Uibot中集成Python插件&#xff1f; 很多刚开始接触RPA的朋友可能会有疑问&#xff1a;Uibot本身已经提供了丰富的自动化命令&#xff0c;为什么还要折腾Python插件&#xff1f;这个问题我在三年前第一次用Uibot处理Excel报表时就深有体会。当时需要合并20多个分公…...

leetcode 73

束手无策。题意看起来是简单的&#xff0c;但是实行起来是困难的。matrix 是行的集合&#xff0c;换句话说&#xff0c;就是一个二维数组里面存了行&#xff0c;很多个行&#xff0c;matrix 0 存的是第 0 行。其实有点难。但是我一定可以的。我是可以的。我一遍一遍地告诉自己&…...