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

八股面试2(自用)

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的消耗,避免上下文切换

相关文章:

八股面试2(自用)

mysql存储引擎 存储引擎:定义数据的存储方式,以及数据读取的实现逻辑 在以前数据库5.5默认MyISAM引擎,之后默认InnoDB引擎 MyISAM引擎的数据和索引是分开存储的,InnoDb将索引和文件存储在同一个文件。 MyISAM不支持事务&#…...

Leetcode 347 Top K Frequent Elements

题意: 求前k个出现频率最高的元素 首先得到一个频率图这是肯定的,下一步要考虑建立一个堆,堆中保存着前k个频率最大的数字,这个怎么做,可以用customized cmp来做,把数字存进去完事儿。注意这里不用 保存所有…...

[Linux网络编程]03-TCP协议

一.TCP协议数据通信的过程 TCP数据报如下,数据报中的标志位双端通信的关键。 三次握手: 1.客户端向服务端发送SYN标志位,请求建立连接,同时发送空包 2.服务端向客户端回发ACK标志位(即确认标志位,任何一端发送数据后都需要另一端…...

Windows和Linux在客户端/服务端在安全攻防方面的区别

Windows和Linux在客户端/服务端的安全攻防上存在一些显著区别,主要体现在系统架构、权限管理、安全工具、更新机制以及社区支持等方面。 一、系统架构与设计差异 1. 内核架构 Windows:Windows是一个闭源的操作系统,由微软开发和维护&#…...

VUE 仿神州租车-开放平台

项目背景: 神州租车是一家提供汽车租赁服务的公司,其API开放平台为开发者提供了访问神州租车相关服务和数据的接口。用VUE技术来仿照其开发平台。 成果展示: 首页: API文档: 关于我们:...

计算机的错误计算(一百二十九)

摘要 用错数解释计算机的错误计算(一百二十七)中的计算错误的原因。 从(一百二十七)知, 有四种形式: 四个 分别有1位、8位、8位、0位错误数字。 下面用错数解释前面3个错误计算的由来。 (1&a…...

process.platform 作用

process.platform 可以获取当前运行 Node.js 进程的操作系统平台的信息。 一、平台特定的代码执行 1. 适应不同操作系统 不同的操作系统可能有不同的行为、文件路径格式、命令行参数等。通过检查process.platform的值,可以根据当前运行的平台执行特定的代码逻辑。…...

Java项目-基于springboot框架的企业客户信息反馈系统项目实战(附源码+文档)

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…...

《深度学习》dlib 人脸应用实例 仿射变换 换脸术

目录 一、仿射变换 1、什么是仿射变换 2、原理 3、图像的仿射变换 1)图像的几何变换主要包括 2)图像的几何变换主要分为 1、刚性变换: 2、仿射变换 3、透视变换 3)常见仿射变换 二、案例实现 1、定义关键点索引 2、定…...

springboot044美容院管理系统(论文+源码)_kaic

本科毕业设计论文 题目:美容院管理系统设计与实现 系 别: XX系(全称) 专 业: 软件工程 班 级: 软件工程15201 学生姓名: 学生学号: 指导教师: 导师…...

大数据新视界 --大数据大厂之数据脱敏技术在大数据中的应用与挑战

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

Erric Gamma 关于resuable code的采访

采访地址 The risk of speculating Bill Venners: The GoF book says, “The key to maximizing reuse lies in anticipating new requirements and changes to existing requirements, and in designing your systems so they can evolve accordingly. To design a system s…...

【Ubuntu18.04命令行code打不开】可能的解决方法

目录 问题:命令行code打不开文件尝试① kimi是这么说的② sudo apt-get install apparmor apparmor_utils③ 在混沌的操作完以上一通后,sudo apt-get install snapd 我试了将近一个小时 : ( so depressed 我只是想用vscode打开个文件夹,我甚至…...

大数据毕业设计基于springboot+Hadoop实现的豆瓣电子图书推荐系统

文章目录 前言项目介绍技术介绍功能介绍核心代码数据库参考 系统效果图 前言 文章底部名片,获取项目的完整演示视频,免费解答技术疑问 项目介绍 随着开数字化阅读的普及,豆瓣电子图书推荐系统应运而生,旨在为用户提供个性化的阅…...

【进阶OpenCV】 (15)-- 人脸识别 -- EigenFaces算法

文章目录 EigenFaces算法一、算法原理二、算法流程三、算法特点四、代码步骤1. 图像预处理2. 创建Eigenfaces人脸识别器3. 训练模型4. 预测图像 总结 EigenFaces算法 EigenFaces算法是一种基于主成分分析(PCA)的人脸识别方法,其核心思想是通…...

无人机封闭空间建图检测系统技术详解

无人机封闭空间建图检测系统技术是一种集成了多种传感器、智能算法与控制系统的高级技术,旨在实现无人机在复杂封闭环境下的自主导航、精确建图与高效检测。以下是对该技术的详细解析: 一、技术概述 无人机封闭空间建图检测系统通过集成激光雷达(LiDAR…...

webpack自定义插件 ChangeScriptSrcPlugin

插件文件 class ChangeScriptSrcPlugin {apply(compiler) {const pluginName "ChangeScriptSrcPlugin";compiler.hooks.compilation.tap(pluginName, (compilation, callback) > {compilation.hooks.htmlWebpackPluginAlterAssetTags.tapAsync(pluginName,(html…...

win11 笔记本指纹驱动正常就是使用不了

去微信官网下载最新的win11重装系统后,发现笔记本上的指纹登录失效了,网上搜索各种试过不行,新版本与旧的win11有微出入,那些方法都不行。系统版本如下: 操作前确保: 1. win11能升级,默认有试用…...

表的约束

约束就是设定条条框框,保证被约束目标符合约束条件。表的约束就是对表内列数据的约束,保证列数据的正确性。 default 设置列数据的默认值。当用户添加记录的时候没有初始化该列的数据,就是使用默认值初始化。 如果创建表的时候没有设置默认…...

jmeter是怎么用的,怎么设计接口测试用例的

如何使用: Apache JMeter 是一款广泛使用的开源性能测试工具,用于对各种服务(如 Web 应用、数据库、FTP、WEB 服务等)进行负载测试和性能测试。以下是如何使用 JMeter 的基本步骤。 1. 安装 JMeter 下载 JMeter:访问…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

腾讯云V3签名

想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...