大数据面试总结

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;}
}

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

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

相关文章

Shell脚本按行读取文件并逐行输出

Shell脚本按行读取文件并逐行输出 #!/bin/bash# 提示用户输入文件路径 echo "请输入文件路径&#xff1a;" read file_path# 检查文件是否存在 if [ ! -f "$file_path" ]; thenecho "文件不存在或不是一个普通文件"exit 1 fi# 逐行读取文件并输…

状态空间的定义

状态空间是描述一个系统所有可能状态的集合。在系统理论、控制论、计算机科学、强化学习等领域&#xff0c;状态空间是一种常见的概念。 状态空间框架是一种用于描述和分析系统的方法&#xff0c;它包括系统的状态、状态之间的转移关系以及与状态相关的行为。下面详细解释状态…

广域网(WAN)设备通信过程(通信流程、通信步骤、通信顺序、设备通信、主机通信)(MAC地址在本地链路中的作用)跳跃(hop)

文章目录 广域网&#xff08;WAN&#xff09;通信&#xff1a;MAC地址在本地链路中的作用引言MAC地址概述什么是MAC地址&#xff1f;如何工作&#xff1f; MAC地址与广域网MAC地址的局限性IP地址和路由 广域网设备通信过程1. 请求生成2. 封装数据帧3. 确定下一跳4. 数据传输5. …

聚观早报 |国行PS5轻薄版开售;岚图汽车11月交付7006辆

【聚观365】12月2日消息 国行PS5轻薄版开售 岚图汽车11月交付7006辆 比亚迪推出12月限时优惠 特斯拉正式交付首批Cybertruck 昆仑万维发布「天工 SkyAgents」平台 国行PS5轻薄版开售 索尼最新的PlayStation5主机&#xff08;CFI-2000型号组-轻薄版&#xff09;国行版本正…

CoreDNS实战(八)-递归服务器

本文主要用于介绍CoreDNS实现递归服务器的几种方式以及在生产环境中遇到的一些问题和解决方案。 在开始之前我们需要知道一些关于CoreDNS的基本知识&#xff1a;CoreDNS本身是没有能力作为一个递归查询的DNS服务器&#xff08;Recursive DNS&#xff09;&#xff0c;但是它有着…

springboot详解Mybatis-Plus中分页插件PaginationInterceptor标红

1.问题描述 在springboot项目中&#xff0c;类中引用PaginationInterceptor&#xff0c;标红&#xff0c;如下图所示&#xff1a; 2.问题分析 可能是因为pom.xml中的配置原因&#xff0c;导致不支持PaginationInterceptor 3.解决问题 更换版本后 更换后&#xff0c;记得Rel…

C语言中printf和scanf

前言 本篇文章介绍C语言中的printf和scanf函数&#xff0c;之前在C语言中printf打印转换指令详解文章中详细讲解了转换指令&#xff0c;本篇文章介绍几个上篇文章没涉及到的点和其余的注意事项 %g和%G 这两个转换说明符的官方解释是根据值的不同&#xff0c;自动选择%e或者%…

SQL语句常用语法(开发场景中)

一、SQL语句常用小场景 1.查询某个表信息&#xff0c;表中某些字段为数据字典需要进行转义 SELECTt.ID,CASEWHEN t.DINING_TYPE 1 THEN早餐WHEN t.DINING_TYPE 2 THEN午餐WHEN t.DINING_TYPE 3 THEN晚餐END AS diningTypeStr from student t 2.联表查询语法 select si.*…

挂耳式蓝牙耳机哪个好、性价比高的挂耳蓝牙耳机

近年来&#xff0c;开放式耳机呈现出火热的势头&#xff0c;相较传统的入耳式耳机&#xff0c;长久佩戴也不会有异物般的不适感&#xff0c;通常采用的耳挂式佩戴设计&#xff0c;不需要把耳机放进耳道里也能听见声音&#xff0c;全新的佩戴方式也更为舒适&#xff0c;能维护耳…

01.项目简介

开源数字货币交易所&#xff0c;基于Java开发的货币交易所 | BTC交易所 | ETH交易所 | 数字货币交易所 | 交易平台 | 撮合交易引擎。本项目基于SpringCloudAlibaba微服务开发&#xff0c;可用来搭建和二次开发数字货币交易所。 项目特色&#xff1a; 基于内存撮合引擎&#xf…

Navicat在分辨率不同的屏幕窗口显示大小不一致问题解决

1.主屏幕为2560*1600分辨率&#xff0c;能够显示较多数据连接 2.在第二屏幕分辨率低&#xff0c;字体变大&#xff0c;显示内容变少 解决办法&#xff1a; 1.右击navicat图标-属性 2.选择【兼容性】-在兼容性页面中选择**“更改高DPI设置”** 3…勾选“高DPI缩放替代”&a…

minio配置监听(对象操作日志)

minio配置监听对象操作 本文档适用于minio2021.3.17版本 有时我们需要查看minio中对象操作的日志&#xff0c;比如像监听minio某一个桶中的删除事件&#xff0c;就需要配置监听。minio支持将监听的结果输出到es、pg、amq等等&#xff0c;下面介绍一下将minio对象操作监听结果输…

使用异或查找数组中出现奇数次的唯一或唯二数字

题目&#xff1a; 1.查找数组中的所有出现奇数次的数字&#xff0c;要求数组中不能有负数 2.现在有个数组&#xff0c;假设这个数组中出现奇数次的数字有且只有1个&#xff0c;请把它找出来 3.现在有个数组&#xff0c;假设这个数组中出现奇数次的数字有且只有2个&#xff0c…

【算法思考记录】力扣2477. 到达首都的最少油耗【JavaScript,深度优先搜索】

原题链接 到达首都的最少油耗&#xff1a;一种优雅的解决方案 题目解析 这个算法题目描述了一个有趣的场景&#xff1a;一棵由城市和道路组成的树形结构&#xff0c;其中每个节点代表一个城市&#xff0c;边代表道路。所有城市的代表需要前往编号为0的城市——首都参加会议。…

一個Tensor的一生 - torch.rand篇

一個Tensor的一生 - torch.rand篇 前言torch/\_C/_VariableFunctions.pyibacktracePython bindingstorch::autograd::THPVariable_randoperator() C APItorch::rand_symintat::rand_symint dispatchat::_ops::randat::_ops::rand::callnative_functions.yamlat::(anonymous nam…

【人体解剖学与组织胚胎学】练习一高度相联知识点整理及对应习题

文章目录 [toc]骨性鼻旁窦填空题问答题 关节填空题简答题 胸廓填空题简答题![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/827e7d1db3af42858d8734bb81911fea.jpeg)补充 骨性鼻旁窦 填空题 问答题 关节 填空题 简答题 胸廓 填空题 简答题 补充 第二肋对应胸骨…

Leetcode.2477 到达首都的最少油耗

题目链接 Leetcode.2477 到达首都的最少油耗 rating : 2012 题目描述 给你一棵 n n n 个节点的树&#xff08;一个无向、连通、无环图&#xff09;&#xff0c;每个节点表示一个城市&#xff0c;编号从 0 0 0 到 n − 1 n - 1 n−1 &#xff0c;且恰好有 n − 1 n - 1 n−…

什么是呼叫中心的语音通道?呼叫中心语音线路有几种?

什么是呼叫中心的语音通道&#xff1f; 呼叫中心的语音通道是指在呼叫中心中使用的语音信号传输通道&#xff0c;它是呼叫中心中至关重要的一部分&#xff0c;负责将客户的语音信息传递给客服代表&#xff0c;以及将客服代表的语音信息传递给客户。在呼叫中心的运营中&#xf…

JAVA-JVM 之Class字节码文件的组成 【下篇】

字节码 类元数据接口元数据字段元数据方法元数据属性元数据 主页传送门&#xff1a;&#x1f4c0; 传送 类元数据 此部分元数据主要包含类索引&#xff08;This_Class&#xff09;和父类索引&#xff08;Super_Class&#xff09;。 类索引&#xff1a;指向Class字节码常量池表…

回顾一下磁盘管理

目录 一、磁盘概述 1.磁盘表示方法/dev/ 2.分区类型 3.文件系统 4.inode节点 二、磁盘操作 1.查看与添加磁盘 2.分区 2.非交互式 3.fdisk /dev/sdb < part.txt 三、LVM逻辑卷 1、物理卷中的操作命令 2、卷组中的操作命令 3、逻辑卷中的操作命令 一、磁盘概述 …