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

大数据面试总结

1、冒泡排序、选择排序
2、二分查找
3、 hashmap和hashtable的区别?hashmap的底层实现原理?
a、hashtable和hashmap的区别:

1、hashtable是线程安全的,会在每一个方法中都添加方法synchronize(同步机制)方法,所以线程是安全的,对于hashmap来说,方法中是没有同步机制,所以hashmap是线程不安全的。

2、两个继承的父类也是不同的,hashtable的父类是继承Dictionary类,然而对于hsahmap是继承AbstractMap类,但是hashmap和hashtable都实现了map接口。

3、在hashtable中的,key和value是不可以为null的,但是在hashmap中,null是可以作为主键,且只能存在一个,但是可以一个或者是多个键对应的值可以是null。

4、两者内部的数组的初始化和扩容的方式也是不同的,hashtable在不指定容量大小的前提下默认是11,hashmap默认是16。

b、hashmap的底层实现的原理:

原因是hashmap的底层是数组和红黑树组成的,通过哈希算法将映射到数值中的索引位置,从而进行快速的查询和存储。

put方法原理

put的方法主要是用于将键值对插入到hashmap中,用底层的源码可以知道,会先计算key的哈希值,并调用putval()方法进行插入。ptuval()的核心就是通过哈希码来定位同桶,然后向桶中插入数据,如果桶是空的,那么就直接向桶中插入新的节点,如果桶不是空的,就会遍历红黑树,判断key是否存在,如果存在,那个原先旧的value就会被新的value所代替。如果遍历,可以key不存在,就会将新节点插入到链表的末端,当达到链表长度的阙值就将链转化成红黑树。

hashmap自动扩容:

主要的步骤就是调用resize()方法,会创建一个新的数组,重新计算哈希码和索引位置,然后分配到新的桶中。默认扩容后的数据的容量的大小是等于原先旧的2的n倍。

get方法原理:

会根据需要查询的key通过哈希算法计算出哈希码,通过哈希码来确定对应的桶的位置,如果桶是空的,那么就返回null,值不存在,如果桶不是空的,就遍历链表或者是红黑树,通过equals()方法来比较传入的键与当前的键是否相同。相同就输出,不同就继续遍历。

4、arraylist和linklist的区别?

1、数据及其内部结构不同,arraylist的内部是使用数组的形式进行存储数据,linkedlist的内部是使用双向链表进行存储数据。

2、arraylist是线程不安全的,linkedlist是线程安全的,所以arraylist的性能会linkedlist的性能比较好。

3、根据索引查询的速度不同,arraylist的查询的速度会比linkedlist的速度要快。

5、stringbuilder和stringbuffer的区别?String的特殊性?
String的特殊性?

string的特殊性是string的不变性,一个string对象一旦被创建好就无法修改了,当对一个string对象进行修改的时候,本质还是创建了一个新的string对象用来接收,原先的string对象没有被修改。

stringbuilder和stringbuffer的区别?

1、stringbuilder和stringbuffer都是可变的,可以对其进行修改,并不会产生新的对象。

2、stringbuffer是线程安全的,stringbuilder是线程不安全的。

3、在单线程的环境下,stringbuffer的性能比stringbuilder低。

6、switch支持哪几种数据类型?跟版本相关,注意string类型的区别?

主要支持的数据类型有:整型、字符型、枚举类型、字符串类型、以及java7后面的表达式类型(switch表达式)。

7、面向对象的特点?

1、封装:封装就是将数据和操作进行封装在一起,然后对外提供一个接口供外界使用,不仅保护数据的完整性,还可以提高代码的复用性和可维护性,降低模块之间的耦合性。

2、继承:  一个类可以继承另一个类的属性和方法,也可以添加和修改自己的属性和方法,提高代码的可维护性和复用性。      

3、多态:同一个对象可以表现出多种形态。

4、抽象:将事务的本质和共性特征抽象出来,形成抽象类或者是接口。

8、字节流和字符流区别?

1、处理单元不同,字节流是以字节作为处理单元,字符流是以字符作为处理单元的,字节流主要使用处理二进制数据,对于字符流一般是用来处理文本数据。

2、处理数据的速度不同,字节流的读取和写入的速度比字符流的速度要快,因为字符流的底层是需要先将字符数据转化成字节数据在进行处理,然而对于字节流来说,底层是就是字节数据,所以处理速度要比字符流快。

3、数据的表现形式是不同的,字节流是以字节数据的形式读取和写入数据,所以支持的类型比较多,例如文本、视频、图像等,然而字符流底层是字符数据,所以只能读取和写入文本数据。

4、缓冲区大小是不同的,字节流的缓冲区一般比字符流的缓冲区要大,因为字节流处理的数据比字符流数据量要大,所以缓冲会比字符流要大。

9、锁的概念

提出锁的原因是在并发编程中,会出现多个进程同时运行抢占公共资源,导致出现一些并发问题。

在java中,锁是一种多线程同步机制,主要使用控制多个线程对公共资源的访问,保证线程之间的互斥性,即同一个时刻只有一个线程可以访问公共资源。

锁主要分成两种:显式锁、隐式锁。

显式锁:

显式锁是通过Java中的Lock接口及其实现类来实现的,它提供了更灵活、更强大的锁机制,相比隐式锁具有更多的优势。

隐式锁:

又被称为内置锁或synchronized锁,是Java语言提供的一种简单且方便的锁机制,可以通过在方法或代码块中使用synchronized关键字来实现对共享资源的同步访问

10、实现多线程的几种方式?

1. 继承Thread类:在Java中可以通过继承Thread类来实现多线程。通过重写Thread类中的run()方法,可以定义需要在多线程中执行的任务。

public class MyThread extends Thread {public void run(){// 在这里编写线程要执行的任务}
}
// 创建并启动线程
MyThread thread = new MyThread();
thread.start();

2. 实现Runnable接口:Java中还可以通过实现Runnable接口来实现多线程。与继承Thread类相比,实现Runnable接口更常用,因为它可以避免单继承的限制,并且使代码更加清晰。

public class MyRunnable implements Runnable{@Overridepublic void run(){// 在这里编写线程要执行的任务}
}
// 创建并启动线程
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();

3、实现Callable接口:实现Callable之后,需要实现call()方法,方法中写我们需要的操作,然后创建实现接口类的对象,将对象作为参数创建FurtureTask对象,再将task对象作为参数创建thread对象,调用start方法开启线程,还可以使用task对象的get方法获取返回值。他们的区别是前二者不能获取返回值,callable接口可以获得返回值,一般在实际使用中,更多使用实现接口的方式开启线程,因为接口不会占用类的继承位置

import java.util.concurrent.Callable;//1.创建一个实现Callable的实现类, 可以通过设置泛型,指定call方法返回的类型
class CallableThread implements Callable<Integer> {@Overridepublic Integer call() throws Exception {return null;}}

4、使用线程池的方式:创建一个线程池,在Java中创建一个线程池可以通过java.util.concurrent.Executors工厂类来实现

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class ThreadPoolDemo {public static void main(String[] args) {// 创建一个固定大小为5的线程池ExecutorService executorService = Executors.newFixedThreadPool(5);// 提交10个任务到线程池处理for (int i = 0; i < 10; i++) {final int taskId = i;executorService.submit(() -> {System.out.println("Executing task " + taskId + " via " + Thread.currentThread().getName());// 这里可以放置实际任务代码});}// 一旦提交了所有任务,就关闭线程池,不再接受新任务executorService.shutdown();// 注意:调用shutdown()方法并不会立即关闭线程池,而是等待所有任务执行完毕后才会关闭。// 如果需要立即关闭线程池,可以调用shutdownNow()方法,它会尝试停止所有正在执行的任务,// 并返回那些尚未开始执行的任务列表。}
}
11、单例模式:(饿汉式、懒汉式)

单例模式:保证类在程序中只存在一个实例对象,而不会创建多个实例对象,可以提高效率。在单利模式中一般只提供一个getInstance()方法来获取实例对象,不提供setInstance()方法,目的是为了避免再实例化出其他实例对象。

单例模式中有两种模式:懒汉式、饿汉式

懒汉式:

当类在加载的时候并不会直接被实例化,而是在调用的时候才会被实例化,这样就保证在不需要的时候就可以不用实例化。懒汉式在多线程模式下线程是不安全的。

package thread.example;
//单线程的懒汉模式
public class LazySingle {private static LazySingle instance = null;//只有在调用该方法的时候才实例化public static LazySingle getInstance() {if(instance == null) {instance = new LazySingle();}return instance;}
}
饿汉式:

指的是当类在加载的时候就会被实例化,后续在使用的时候只能有一个实例。在多线程的过程中,以为已经提前实例化,所以线程是安全的。

package thread.example;
//饿汉模式
public class HungrySingle {
//在类加载的时候就实例化了,类加载只有一次,所以值实例化出了一份该实例对象private static HungrySingle instance = new HungrySingle();public static HungrySingle getInstance() {return instance;}
}

相关文章:

大数据面试总结

1、冒泡排序、选择排序 2、二分查找 3、 hashmap和hashtable的区别&#xff1f;hashmap的底层实现原理&#xff1f; a、hashtable和hashmap的区别&#xff1a; 1、hashtable是线程安全的&#xff0c;会在每一个方法中都添加方法synchronize&#xff08;同步机制&#xff09…...

利大于弊:物联网技术对电子商务渠道的影响

For Better or For Worse: Impacts of IoT Technology in e-Commerce Channel 物联网技术使用传感器和其他联网设备来手机和共享数据&#xff0c;并且被视为一种可以为供应链成员带来巨大的机会的突破性技术。本文的研究背景是&#xff1a;一个提供物联网基础设备的电子商务平…...

Python 元组详解(tuple)

文章目录 1 概述1.1 性质1.2 下标1.3 切片 2 常用方法2.1 访问&#xff1a;迭代、根据下标2.2 删除&#xff1a;del2.3 运算符&#xff1a;、*2.4 计算元组中元素个数&#xff1a;len()2.5 返回元组中元素最大值&#xff1a;max()2.6 返回元组中元素最小值&#xff1a;min()2.7…...

Redis部署-主从模式

目录 单点问题 主从模式 解析主从模式 配置redis主从模式 info replication命令查看复制相关的状态 断开复制关系 安全性 只读 传输延迟 拓扑结构 数据同步psync replicationid offset psync运行流程 全量复制流程 无硬盘模式 部分复制流程 积压缓冲区 实时复…...

全栈冲刺 之 一天速成MySQL

一、为什么使用数据库 数据储存在哪里&#xff1f; 硬盘、网盘、U盘、光盘、内存&#xff08;临时存储&#xff09; 数据持久化 使用文件来进行存储&#xff0c;数据库也是一种文件&#xff0c;像excel &#xff0c;xml 这些都可以进行数据的存储&#xff0c;但大量数据操作…...

服务器运行train.py报错解决

在服务器配置完虚拟环境以及安装完各种所需库后&#xff0c;发现报错Traceback (most recent call last): File "/root/yolov5-master/yolov5-master/train.py", line 48, in <module> import val as validate # for end-of-epoch mAP File "/root/yolov5…...

Flutter开发type ‘Future<int>‘ is not a subtype of type ‘int‘ in type cast错误

文章目录 问题描述错误源码 问题分析解决方法修改后的代码 问题描述 今天有个同事调试flutter程序时报错&#xff0c;问我怎么解决&#xff0c;程序运行时报如下错误&#xff1a; type ‘Future’ is not a subtype of type ‘int’ in type cast 错误源码 int order Databas…...

Nginx(十二) gzip gzip_static sendfile directio aio 组合使用测试(2)

测试10&#xff1a;开启gzip、sendfile、aio、directio1m&#xff0c;关闭gzip_static&#xff0c;请求/index.js {"time_iso8601":"2023-11-30T17:20:5508:00","request_uri":"/index.js","status":"200","…...

hls实现播放m3u8视频将视频流进行切片 HLS.js简介

github官网GitHub - video-dev/hls.js: HLS.js is a JavaScript library that plays HLS in browsers with support for MSE.HLS.js is a JavaScript library that plays HLS in browsers with support for MSE. - GitHub - video-dev/hls.js: HLS.js is a JavaScript library …...

Ubuntu20.04部署TVM流程及编译优化模型示例

前言&#xff1a;记录自己安装TVM的流程&#xff0c;以及一个简单的利用TVM编译模型并执行的示例。 1&#xff0c;官网下载TVM源码 git clone --recursive https://github.com/apache/tvmgit submodule init git submodule update顺便完成准备工作&#xff0c;比如升级cmake版本…...

华为OD机试真题-两个字符串间的最短路径问题-2023年OD统一考试(C卷)

题目描述: 给定两个字符串,分别为字符串A与字符串B。例如A字符串为ABCABBA,B字符串为CBABAC可以得到下图m*n的二维数组,定义原点为(0, 0),终点为(m, n),水平与垂直的每一条边距离为1,映射成坐标系如下图。 从原点(0, 0)到(0, A)为水平边,距离为1,从(0, A)到(A, C)为垂…...

python try-except

相比于直接raise ValueError&#xff0c;使用try-except可以使程序在发生异常后仍然能够运行。 在try的部分中&#xff0c;当遇到第一个Error&#xff0c;就跳转到except中寻找对应类型的error&#xff0c;后续代码不再执行&#xff0c;如果try中有多个Error&#xff0c;注意顺…...

flutter开发实战-ValueListenableBuilder实现局部刷新功能

flutter开发实战-ValueListenableBuilder实现局部刷新功能 在创建的新工程中&#xff0c;点击按钮更新counter后&#xff0c;通过setState可以出发本类的build方法进行更新。当我们只需要更新一小部分控件的时候&#xff0c;通过setState就不太合适了&#xff0c;这就需要进行…...

通过时间交织技术扩展ADC采样速率的简要原理

前言 数据采集是将自然界中存在的模拟信号通过模数转换器&#xff08;ADC&#xff09;转换成数字信号&#xff0c;再对该数字信号进行相应的接收和处理。数据采集系统作为数据采集的手段&#xff0c;在移动通信、图向采集、无线电等领域有重要作用。随着电子信息技术的飞速发展…...

FluxMQ—2.0.8版本更新内容

FluxMQ—2.0.8版本更新内容 前言 FLuxMQ是一款基于java开发&#xff0c;支持无限设备连接的云原生分布式物联网接入平台。FluxMQ基于Netty开发&#xff0c;底层采用Reactor3反应堆模型&#xff0c;具备低延迟&#xff0c;高吞吐量&#xff0c;千万、亿级别设备连接&#xff1…...

计算机寄存器是如何实现的

冯诺依曼体系 冯诺依曼体系为现代计算机的设计和发展奠定了基础&#xff0c;它的核心思想和原则在当今计算机体系结构中仍然被广泛采用和应用。所以只要谈论计算机的组成就离不开冯诺依曼体系 作为核心组成部分的CPU除了由运算器和控制器组成之外&#xff0c;还有一些寄存器…...

两数之和 三数之和 哈希方法

两数之和 package com; import java.util.*; public class Test5 { //两数之和 public static void main(String[] args) { int[] arr {1,2,3,4,5,6,7,94,42,35}; int target99; Arrays.sort(arr);//快速排序 for(int i0;i<arr.length;i) { int wtarget-arr[i]; int indexA…...

Object Detection in 20 Years: A Survey(2019.5)

文章目录 Abstract1. Introduction1.1. Difference from other related reviews1.2. Difficulties and Challenges in Object Detection 2. OBJECT DETECTION IN 20 YEARS2.1. 目标检测路线图2.1.1. 里程碑:传统探测器&#xff08;粗略了解&#xff09;2.1.2. 里程碑:基于CNN的…...

Springboot 设置时区与日期格式

1.配置文件修改&#xff08;范围修改&#xff09; spring:jackson:# 东8 北京时区time-zone: GMT8# 日期格式date-format: yyyy-MM-dd HH:mm:ss 2.Java代码修改&#xff08;范围修改&#xff09; 2.1 时区 import org.springframework.context.annotation.Bean; import org.…...

从零开始学Go web——第一天

文章目录 从零开始学Go web——第一天一、Go与web应用简介1.1 Go的可扩展性1.2 Go的模块化1.3 Go的可维护1.4 Go的高性能 二、web应用2.1 工作原理2.2 各个组成部分2.2.1 处理器2.2.2 模板引擎 三、HTTP简介四、HTTP请求4.1 请求的文本数据4.2 请求方法4.2.1 请求方法类型4.2.2…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...