八股面试2(自用)

news2024/11/27 1:39:23

mysql存储引擎

存储引擎:定义数据的存储方式,以及数据读取的实现逻辑

在以前数据库5.5默认MyISAM引擎,之后默认InnoDB引擎

MyISAM引擎的数据和索引是分开存储的,InnoDb将索引和文件存储在同一个文件。

MyISAM不支持事务,InnoDB支持事务

MyISAM只支持表锁,InnoDB支持表锁,行锁等

(补充:表锁和行锁)

表锁粒度更粗的锁,锁定整个数据表,其他事务不能对该表进行任何读写操作。并发低不会死锁

行锁粒度更细的锁,锁定数据表中的特定行,其他事务只能对该表的其他行进行读写操作,并发高,会死锁。

MyISAM不支持外键,InnoDB支持外键

如果大部分表操作是查询-->选用MyISAM,反之若是需要支持事务,使用InnoDB

ArrayList和LinkedList的区别

都是List接口下的两个实现类

1.内部实现

ArrayList使用的是数组的实现,通过索引访问元素,支持快速随机访问

LinkedList使用的是双向链表,每个元素都包含指向前一个元素和后一个元素的引用,适合插入删除操作

2.数据访问的时间复杂度不同

ArrayList时间复杂度为O(1),LinkedList需要从头部或者尾部开始遍历链表直到找到元素,故为O(n)

3.空间占用

ArrayList基于数组实现,占用空间是连续的,可能产生内存碎片;LinkedList通过链表连接元素,每个元素都包含前后节点的引用,占用的空间比较大

线程安全的集合有哪些

1.Vector 相当于 ArrayList 的翻版,是长度可变的数组,Vector的每个方法都加了 synchronized 修饰符,是线程安全的。

2.Hashtable是一个线程安全的集合,是单线程集合,它给几乎所有public方法都加上了synchronized关键字

3.ConcurrentHashMap 采用了分段锁(Segment),并非锁住整个方法,而是通过原子操作局部加锁的方法保证了多线程的线程安全,且尽可能减少了性能损耗。

设计模式

单例模式

1.提供有且仅有一个单例的实例

2.私有化它的构造方法,不让外部通过构造方法创建单例类的实例

3.提供一个公共方法给外界获取这个实例

代理模式

工厂模式

1.工厂方法模式

抽象工厂实现类只生产单一产品

2.抽象工厂(超级工厂)

抽象工厂实现类可以生产某一类的产品

观察者模式

可以理解为:我发朋友圈,其他人(观察者)可以自动立刻看到我发送的内容。

使用场景

List 元素去重 ?

该问题可以分为去重是否考虑顺序

去重不考虑顺序

1.使用循环去重,判断集合中该元素是否存在,不存在才添加

2.使用循环去重,判断集合中该元素是否有相等的,有的话则remove删除

3.使用set去重(最简单),先装进hashSet,再装进ArrayList集合

去重考虑顺序

1.使用LinkedHashSet

2.使用Stream流的distinct方法去重

判断元素是否在List里面

可以使用contains()方法来检查一个元素是否存在于一个List

线程之间通信方式 ?

1.使用volatile和synchronized关键字

volatile:告诉程序,任何对于该变量的访问都需要从共享内存中获取,并且它们的改变必须同步刷新到共享内存里面,即可保证所有线程对该变量访问的可见性

synchronized:同步方法或代码块,确保同一时间只有一个线程可以执行某个特定区域的代码。

2.等待/通知机制

等待通知机制

一个线程修改对应的一个值,另外一个线程可以感知到变化,进行相应的操作

线程是抢占式执行的,无法预知线程之间的执行顺序。但有时程序员也希望能合理协调多个线程的执行顺序。因此,在 Java 中使用了等待(wait)和通知(notify)机制,用于在应用层面上干预多个线程的执行顺序。

3.管道pipe输入/输出流

和文件/网络 输入/输出流的区别在于,主要用于线程之间的数据传输,传输的媒介是内存

4.Thread.join

用于让一个线程A等待另一个线程B执行完。

5.ThreadLocal

可以通过set方法设置值,也能通过get方法获得set的值

Mybatis一级缓存和二级缓存 ?

一级缓存:是sqlSession级别的缓存也叫本地缓存,每个用户执行查询时,都需要使用sqlSession来执行,为了避免每一次都去查询数据库,mybatis把查询出来的数据缓存到sqlSession的本地缓存里面,后续sql如果命中缓存,就可以直接从本地缓存中读取数据。

二级缓存:当多个用户在查询数据时,只要有任何一个sqlSession拿到了数据就会放入到二级缓存里面,其他的sqlSession就可以直接从二级缓存里面去加载数据。

每个sqlSession都有自己的一级缓存,不共享

二级缓存是由每个sqlSession放入组成的,共享

MyBatis的一级缓存是基于SqlSession的,也就是说,在一个SqlSession内部,如果多次查询相同的数据,MyBatis会首先从一级缓存中查找。如果一级缓存中有数据,则直接返回结果;如果没有,则查询数据库,并将结果放入一级缓存。

然而,如果有多个SqlSession都需要查询相同的数据,那么一级缓存就无法满足需求了,因为每个SqlSession都有自己的一级缓存,它们之间不共享数据。为了解决这个问题,MyBatis引入了二级缓存。二级缓存是基于mapper的namespace的,这意味着多个SqlSession可以共享同一个mapper的二级缓存。当多个SqlSession都需要查询相同的数据时,MyBatis会先检查二级缓存,如果有数据,则直接返回;如果没有,则查询数据库,并将结果放入二级缓存。

Redis为什么是单线程 ?

Redis最大的两个特点基于内存单线程模型

这个问题要先明白,redis的单线程指代的是什么

单线程指的是,如图,接收命令1,返回结果1,执行命令,接受命令2,返回结果2,这些所有的步骤,都是由1个线程来完成的。

为什么要设计成单线程:

1.单线程简化设计,避免了多线程常见问题,如锁,并发控制,单线程不存在这些问题。

2.避免锁的开销,多线程环境为了保证数据的一致性,需要使用锁来同步不同线程的操作,但是对于锁会产生额外的开销,如获取锁,释放锁,死锁

3.降低cpu的消耗,避免上下文切换

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

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

相关文章

SPOOLing技术详解,结合实际场景让你了解什么是假脱机技术。

SPOOLing技术 ​ 在手工操作阶段,主机直接从I/O设备获取数据,但是由于设备速度很慢,主机速度很快。人机速度矛盾明显,主机需要浪费很多时间来等待设备。 什么是脱机技术,脱机技术可以解决什么问题? 所谓脱…

大数据测试:Charles修改响应数据

上一篇大数据测试:Fiddler修改响应数据-CSDN博客 ,有同学反馈有没有Charles的方式修改响应数据,本篇就是Charles修改数据操作步骤,相比较fiddler,Charles相对简单,便捷,我很喜欢 1、背景&…

【笔记】【YOLOv10图像识别】自动识别图片、视频、摄像头、电脑桌面中的花朵学习踩坑

(一)启动 创建环境python3.9 打开此环境终端 (后面的语句操作几乎都在这个终端执行) 输入up主提供的语句:pip install -r requirements.txt 1.下载pytorch网络连接超时 pytorch网址: Start Locally | P…

java -jar 命令自动重启 Java 项目

一、java -jar 方式运行项目 重启Java项目通常意味着你需要先停止当前运行的Java进程,然后再次启动它。下面是在CentOS上执行这些步骤的一种常见方法: 停止Java进程 找到Java进程的PID: 使用ps命令配合grep来查找运行中的Java进程的PID&#…

【Java SE 】封装 的特性 和 static 详解

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1. 封装的概念 1.1 一个例子 2. 访问权限控制符 3. 包的概念 3.1 import 导入 3.2 常见的包 4. static 静态成员 4.1 static 使用情况 4.2 static 修…

> Invalid revision: 3.22.1-g37088a8-dirty

Android项目使用cmake 3.22.1,编译时报错: > Invalid revision: 3.22.1-g37088a8-dirty解决方法一: 升级Gradle版本和AGP的版本; 建议使用AS推荐的版本: 目前可运行的版本配置: AS:Jel…

champ模型部署指南

一、介绍 champ是由阿里巴巴、复旦大学和南京大学的研究人员共同提出的一种基于3D的将人物图片转换为视频动画的模型,该方法结合了3D参数化模型(特别是SMPL模型)和潜在扩散模型,能够精确地捕捉和再现人体的3D形状和动态,同时保持动画的时间一…

读书读到NOBEL

最近在读陈逸鹤的《程序员的自我修养》这本书,里面有这么一段话: “远古时代的人们只能创造出用于猎捕的长矛,而今天借助来自各行各业人 们的智慧,我们可以制造出高铁、大型飞机,并探索宇宙。但要更进一步解决人类所面…

2024_E_100_连续字母长度

连续字母长度 题目描述 给定一个字符串&#xff0c;只包含大写字母&#xff0c;求在包含同一字母的子串中&#xff0c;长度第 k 长的子串的长度&#xff0c;相同字母只取最长的那个子串。 输入描述 第一行有一个子串(1<长度<100)&#xff0c;只包含大写字母。 第二行为…

GPT-4o canvas不是对cursor的颠覆,而是人与AI交互的新探索

谈一下Openai新发布的canvas。 关于这个产品的介绍不多说了&#xff0c;网上已经有很多&#xff0c;主要谈下我对它以及相似竞品的比较&#xff0c;以及我的一些看法。 1、vs Claude Artifacts&#xff1a;是chatbot编程方面直接竞品&#xff0c;不过现阶段还是有很大的区别。…

二百六十八、Kettle——同步ClickHouse清洗数据到Hive的DWD层静态分区表中(每天一次)

一、目的 实时数仓用的是ClickHouse&#xff0c;为了避免Hive还要清洗数据&#xff0c;因此就直接把ClickHouse中清洗数据同步到Hive中就行 二、所需工具 ClickHouse&#xff1a;clickhouse-client-21.9.5.16 Kettle&#xff1a;kettle9.2 Hadoop&#xff1a;hadoop-3.1.3…

TH-OCR:强大的光学字符识别工具与车牌识别应用

在当今数字化的时代&#xff0c;高效准确地识别文本和图像中的字符变得至关重要。TH-OCR&#xff08;清华 OCR&#xff09;作为一款优秀的光学字符识别软件&#xff0c;以其卓越的性能和广泛的应用场景&#xff0c;受到了众多用户的青睐。其中&#xff0c;车牌识别功能更是在交…

嵌入式入门学习——6Protues点亮数码管,认识位码和段码,分辨共阴还是共阳(数字时钟第一步)

0 系列文章入口 嵌入式入门学习——0快速入门&#xff0c;Let‘s Do It&#xff01; 首先新建基于Arduino UNO的protues工程&#xff0c;见本系列第3篇文章 1 点“P”按钮找器件 2 输入“seg”或“digit”查找数码管器件 3 找到我们想要的6位7段数码管 4如图A、B…DP都是段码…

一、go入门

go入门 Go历史1.1 诞生时间1.2 里程碑1.3 团队核心人员 2. 为什么使用Go3. 安装Go5. 入门案例6. 开发工具 Go历史 1.1 诞生时间 Go 语言起源 2007 年&#xff0c;并于 2009 年正式对外发布。它从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目&#xff0c;即相关员工利用…

MATLAB小波变换图像融合系统

二、应用背景及意义 本课题利用小波变换进行图像的融合&#xff0c;然后对融合的结果进行图像质量的评价。所谓小波变换图像融合就是对多个的信息目标进行一系列的图像提取和合成&#xff0c;进而可以获得对同一个信息目标的更为精确、全面、可靠的高低频图像信息描述。并且也…

Vue2项目-二进制流预览

一、docx文档 软件&#xff1a;docx-preview&#xff1b; 版本&#xff1a;"^0.1.20"&#xff1b; 1、安装docx-preview npm i docx-preview0.1.20 2、组件配置 <template><div ref"wordContainer"></div> </template><s…

java集合进阶篇-《泛型通配符及其练习》

个人主页→VON 收录专栏→java从入门到起飞 目录 一、前言 二、泛型通配符简要概述 基本概念 无界通配符 (?)&#xff1a; 上限通配符 (? extends T)&#xff1a; 下限通配符 (? super T)&#xff1a; 三、思考 四、综合练习 Animal类及其javabeen Cat类 Dog类 H…

04 设计模式-创造型模式-建造者模式

建造者模式是一种创建型设计模式&#xff0c;它允许你创建复杂对象的步骤与表示方式相分离。 建造者模式是一种创建型设计模式&#xff0c;它的主要目的是将一个复杂对象的构建过程与其表示相分离&#xff0c;从而可以创建具有不同表示形式的对象。 设计模式&#xff0c;最近…

1. 安装框架

一、安装 Laravel 11 框架 按照官方文档直接下一步安装即可 1. 安装步骤 2. 执行数据库迁移 在.env文件中提前配置好数据库连接信息 php artisan migrate二、安装 Filament3.2 参考 中文文档 进行安装 1. 安装 拓展包 composer require filament/filament:"^3.2" -W…

操作系统 和 初识进程

目录 操作系统&#xff08;OS&#xff09; 进程 操作系统&#xff08;OS&#xff09; 概念 操作系统即os&#xff0c;是一款软件。 任何计算机系统都包含一个基本的程序集合&#xff0c;称为操作系统(OS)。 操作系统的本质是一种进行软硬件管理的软件 笼统的理解&#xf…