java基础+数据库基础+系统+JVM问题

news2024/11/17 13:35:31

的哎的哎

1、基础部分

java线程池 队列的选择

答:
SingleThreadPool:适用于多个任务顺序执行的场景。
它使用的是LinkedBlockingQueue<>(),无界的阻塞队列,就意味着会有内存溢出的风险。

FixedThreadPool: 适用于任务量固定耗时长的任务。
队列同上

CachedThreadPool: 适合任务量大但耗时少的任务。
使用队列SynchronousQueue<>(),如果存在大量长时间的任务,会导致cpu占用率100%。

ScheduledThreadPool:适合固定周期的任务。
队列:DelayedWorkQueue,但无界的队列和无限的最大线程数,意味着它可能出现内存溢出和CPU占用率100%的问题

volatile 什么情况下会用到

答:
(可见性)适用一个线程写、多个线程读的场合,eg.作为状态转换标记
(线程间可见性+禁止指令重排)eg.双重检查的懒汉式单例,
对private static xxxSingleton singleton; 加volatile,可以防止内存判空和赋值的指令重排。

java 在多线程中操作共享变量的过程中,会存在指令重排序与共享变量工作内存缓存的问题。

系统用到的IO模型,各个模型的比较

答:Linux中有5中IO模型:
阻塞式IO模型
非阻塞式IO模型
IO多路复用
信号驱动的IO模型
异步IO模型

Java共支持三种网络编程模型(IO模型):
BIO 同步阻塞
NIO 同步非阻塞
AIO 异步非阻塞

应用场景:(最常用的就是同步阻塞 IO 和 IO 多路复用)
BIO:服务器启动ServerSocket;客户端启动ClientSocket,与服务器进行通讯。服务端也可以使用线程池。
NIO:位于java.nio包下,有三大核心部件:Seletor、Channel、Buffer;
IO多路复用(是NIO的一种):
如 Java 的 NIO、Redis、Nginx 的底层实现就是此类 IO 模型的应用,经典的 Reactor 模式也是基于此类 IO 模型。

RPC框架在网络通信上更倾向于哪种网络IO模型?
https://time.geekbang.org/column/article/204696?utm_source=related_read&utm_medium=article&utm_term=related_read

用到的设计模式

答:
工厂模式,在各种BeanFactory以及ApplicationContext创建中都用到了。AC是饿汉式加载,BF可设置成懒加载。

模版模式,同上,在BF\AC实现中有用到。
AbstractApplicationContext的refresh方法,就是模版模式应用。这里提供了3个扩展点,obtainFreshBeanFactory方法,postProcessBeanFactory方法,以及onRefresh方法,我们点进去这三个方法,可以看到他们并没有具体的实现,而是留给子类扩展实现。

代理模式,Spring AOP 利用了AspectJ AOP实现的。AspectJ AOP的低层用了动态代理。
动态代理有两种:目标方法有接口时,自动选用JDK动态代理。
目标方法没有接口时,选CGLib动态代理。

策略模式,加载资源文件的方式,使用了不同的方式,比如,ClassPathResource、FileSystemResource、ServletContextResource、UriResource,但他们都有公共的接口Resource.

单例模式,比如在spring创建bean的时候

建造者模式,减少参数传递,在内部创建对象,不对外直接暴露创建对象,链式调用。SpringBuilder、SpringSecurity都是用的建造者模式。

无损发布的问题?

为了发布不要影响到用户访问,为了不再在凌晨三点熬夜发布版本,无损发布就显得非常重要了。

那么能做到无损发布吗?答案是肯定的,需要nginx和web server配合完成,请看下面的流程图。

TCP连接数的问题

https://blog.csdn.net/qq_37165235/article/details/132448153
最大TCP连接数量限制有:可用端口号数量、文件描述符数量、线程、内存、CPU等。每个TCP连接都需要以下资源

1、可用端口号限制
Q:一台主机可以有多少端口号?端口号与TCP连接?是否能修改?端口号限制因素?
第一:端口号是16位的,所以总共有65535个,即可创建65535个TCP连接
第二:端口分为知名端口(01023)、注册端口(102449511)、动态/私有端口(49152~65535)
第三:端口数可以修改。

3、线程的限制
C10K:当服务器连接数达到 1 万且每个连接都需要消耗一个线程资源时,操作系统就会不停地忙于线程的上下文切换,最终导致系统崩溃。
传统的多线程并发模型:一个TCP连接就需要创建一个线程
I/O多路复用 :一个线程可以管理多个 TCP 连接的资源
解决: 不使用传统的多线程并发模型,而采用I/O多路复用技术

4、内存的限制
  TCP连接数过大可能会出现: ERROR: out of memory ,即内存溢出。
**原因:**每个TCP连接本身,以及这个连接所用到的缓冲区,都是需要占用一定内存的,现在内存已经被占满了,不够用了就会报这个错。

5、CPU的限制
  每个TCP连接都是需要占用CPU资源的,若占用CPU资源过多,则会导致死机,用户啥也干不了,然后就重启了,TCP连接也就全没了。

6、总结
在这里插入图片描述

数据库乐观锁

乐观锁的实现方式(ps:实现方式是多样的,没有定数,不过依赖的是相同的思想–要修改的数据要和读取的数据是同一数据,中途不能被修改)
1、建表时新增一个version字段,用于数据版本控制。
2、通过CAS算法实现
优点:
乐观锁适用于写比较少的情况下(多读场景),即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。
缺点:
乐观锁适用于读比较少的情况下(多写场景),如果是多写的情况,一般会经常产生冲突,这就会导致上层应用会不断的进行retry,这样反倒是降低了性能

所以一般多写的场景下用悲观锁就比较合适。

ThreadLocal 实现

https://baijiahao.baidu.com/s?id=1666270412047190730&wfr=spider&for=pc

ThreadLocal 实现,ThreadLocal应该是一个静态对象,执行set方法的时候实际上是执行的thread所持有的map的一个set方法,然后ThreadLocal 这个对象作作为map的key

最后调用remove方法删除数据,防止内存泄漏和数据混乱。

使用场景:一些ORM框架的Session管理,web系统的会话管理等
简单总结:一个ThreadLocal只能保存一个变量的副本,如果需要多个,就得创建多个变量;我们确定使用完需要执行remove避免内存泄漏。

2、数据库

如何解决慢查询

  1. 数据库表设计不佳
  2. 大量数据查询
  3. 锁竞争
  4. 查询语句的优化不足
  5. 数据库服务器性能问题

数据库回表

哪些情况下不会触发回表?

?3.1 覆盖索引
?3.2 使用聚簇索引

什么情况下会触发回表?

2.1 索引不Cover所有需要查询的字段
2.2 使用了非聚簇索引(非聚簇索引(Secondary Index)只包含了索引列的副本以及指向对应主键的引用,查询需要通过回表才能获取完整的行数据。)
2.3 使用了覆盖索引但超过了最大索引长度
在MySQL的InnoDB存储引擎中,每个索引项的最大长度是767字节,如果查询需要返回的字段长度超过了该限制,同样会触发回表操作。
需要注意的是,回表操作主要发生在读取操作(SELECT)中,写入操作(INSERT、UPDATE、DELETE)一般不会触发回表。

回表操作的问题和场景

?4.1 性能问题
回表操作通常需要访问两次索引,增加了IO开销和CPU消耗,对查询性能有一定的影响。特别是在高并发、大数据量的情况下,回表可能成为性能瓶颈。
?4.2 数据一致性
由于回表操作是基于物理地址来获取数据,如果在回表过程中发生了数据修改(如DELETE、UPDATE),则可能会读取到不一致或错误的数据。
?4.3 是否使用覆盖索引的判断
在选择是否使用覆盖索引时,需要综合考虑查询的字段以及字段长度,以及查询操作的频率和数据量。如果查询需要返回的字段较多或字段长度较长,可能需要权衡回表带来的性能损耗和数据完整性的需求。

索引怎么创建

3、建表的时候创建索引
在这里插入图片描述
1、使用CREATE INDEX创建,语法如下:
在这里插入图片描述
2、使用ALTER语句创建,语法如下:
在这里插入图片描述

主库从库的问题

https://zhuanlan.zhihu.com/p/612577857
MySQL主从同步基本流程
在这里插入图片描述
MySQL主从同步延迟原因
在这里插入图片描述
MySQL主从同步延迟原因
在这里插入图片描述
MySQL主从同步解决方案
介绍MySQL多线程同步工具(Transfer)的设计思路 以下为文字解释版
在这里插入图片描述

在这里插入图片描述

MVCC

https://blog.csdn.net/weixin_44941128/article/details/117871517
多版本并发控制
mysql会在数据表中默认添加三个隐藏列:
DB_ROW_ID:行id,若表没有主键,InnoDB 会自动生成一个隐藏主键
DB_TRX_ID:事务ID,当有事务开启时会生成这样一个全局递增的id;
DB_ROLL_PTR:回滚指针,通过这个指针可以找到该数据的历史版本,也就是所说的版本链。
版本链就是用一个单链表的结构存放每个事务版本对应的行的数据,通过我当前的事务id可以获取对应的数据。
Read View就是事务进行快照读操作的时候生产的可读视图(Read View),用来判断该数据版本是否可被访问,可读视图可以简单的理解成有三个全局属性:
trx_list:存放当前正活跃的事务ID;
low_limit_id:记录trx_list中事务ID最小的ID;
up_limit_id:可读视图生成时当前全局事务ID的最大值(也有一说是目前已出现过的事务ID的最大值+1)。

B+树的描述

二分查找数–》红黑树(平衡二叉树)–》B树(多路平衡二叉树)–》B+树(mysql的索引结构)

MySQL索引是在 存储引擎层 实现的,不同的存储引擎层,有不同的索引结构,主要包含四种索引:
在这里插入图片描述

3、系统

QPS统计怎么做

QPS(Query Per Second):每秒请求数,就是说服务器在一秒的时间内处理了多少个请求。

OK,用日志来估计!那日志怎么记录呢,细分下来,有两种方式。
方式一:自己在接口里记录
方式二:调用链

我们现在估计出了单机的QPS。接下来,估算集群的QPS。(QPS = 总请求数 / (进程总数 * 请求时间))
这就要根据负载均衡的策略来估计!

比如,你部署了32台机器,负载均衡的策略恰巧为轮询,那集群的QPS就是单机的QPS乘32就好了。

所以,根据具体的策略,来估计整个集群的QPS多大!一般有2000qps已经是很高的了。

CPU高的问题如何解决

系统监控层面

系统熔断,限流

4、具体项目
能够比较清晰的描述出具体项目做的一些内容已经具体的业务场景

说明一下各个系统之间的交互,以及系统的职责

5、JVM问题
java进程启动用到了哪些jvm命令,为什么要这样设置,比如NewRatio,CMS,ParNew,survivalRatio等

是否做过JVM调优

为什么要进行JVM调优

具体case

关于JVM的一些灵魂拷问

6、类加载器
双亲委派机制

上下文类加载器(上下文类加载器是线程在初始化的时候,从父线程中继承过来的)

写一道双亲委托的题(主要考察代理模式)

线程上下文类加载器有什么作用

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

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

相关文章

QDDR究竟是什么?

QDDR究竟是什么? 在当今的高科技时代&#xff0c;我们经常遇到各种各样的缩写和术语&#xff0c;其中QDDR就是其中一个。那么&#xff0c;究竟什么是QDDR呢&#xff1f; QDDR&#xff0c;全称Quad Data Rate&#xff0c;是一种同步动态随机存储器&#xff08;SDRAM&#xff09…

验证链(CoVe)降低LLM中的幻觉10.31

验证链&#xff08;CoVE&#xff09;降低LLM中的幻觉 摘要1 引言2 相关工作3 验证链&#xff08;Chain-of-Verification&#xff09;3.1 生成基准回答3.2 计划验证3.3 执行验证3.4 最终验证的回答 4 实验&#xff08;直译&#xff09;4.1 任务4.1.1 WIKIDATA4.1.2 WIKI-CATEGOR…

应用于智慧矿山的皮带跑偏视频分析AI算法

一、引言 随着科技的发展&#xff0c;人工智能技术已经在各个领域得到广泛应用。而在智慧矿山领域&#xff0c;皮带跑偏视频分析是其中一个重要的应用方向。本文将详细介绍皮带跑偏视频分析AI算法的原理&#xff0c;以期为智慧矿山的发展提供有益的参考。 二、算法原理 1. 视…

【3妹教我学历史-秦朝史】2 秦穆公-韩原之战

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 3妹&#xff1a;2哥&#xff0c;今天下班这么早&#…

CT MR 三维重建可视化系统

前言 本文通过研究医学可视化的不同算法&#xff0c;在 vc环境下&#xff0c;以可视化软件包VTK 为平台&#xff0c;编程设计实现了三维建模系统&#xff0c;实现了 DICOM图像的三维重建。 材料与方法 使用符合 DICOM 标准的临床 CT、MRI图像数据&#xff0c;在 vc环境下&…

高等数学公式

目录 一.高中二.高数基础三.高数第一章 空间解析几何与向量代数2.向量代数6.二次曲面 第二章 多元函数的微分学第三章 重积分一、二重积分二、 三重积分直角坐标下三重积分的计算柱面坐标下三重积分的计算球面坐标下三重积分的计算曲面面积 第四章 曲线积分与曲面积分1、对弧长…

Qt常见类名关系整理

1、QAbstractItemModel与QAbstractItemView 模型的基类: The QAbstractItemModel class provides the abstract interface for item model classes. Inherited By: QAbstractListModel&#xff0c;QAbstractProxyModel,and QAbstractTableModel 视图的基类: The QAbstractIte…

代购商城源码是否可以定制开发?

定制开发&#xff0c;符合个性需求 代购商城源码是现代电子商务中的重要工具&#xff0c;它为代购商提供了建立在线店铺、管理产品和订单、处理支付和物流等功能。然而&#xff0c;对于不同的代购商而言&#xff0c;在源码的基础上进行个性化定制开发无疑是提升竞争力和用户体验…

高效办公必备:不同路径文件一键批量移动到同一目录的技巧

在高效办公中&#xff0c;文件的批量移动和管理是一项常见的任务。有时候&#xff0c;我们需要将文件从不同的路径移动到同一个目录中&#xff0c;以便于管理和查找。手动一个一个地移动文件不仅耗时而且容易出错。因此&#xff0c;掌握一键批量移动不同路径文件到同一目录的技…

【CSDN 每日一练 ★☆☆】【二叉树/递归】二叉树的最小深度

【CSDN 每日一练 ★☆☆】【二叉树/递归】二叉树的最小深度 二叉树 递归 题目 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明&#xff1a;叶子节点是指没有子节点的节点。 示例 示例 1&#xff1a; 输入…

visio中没有的图标怎么找以及如何导入

1、收藏夹&#xff1a;再也不用担心找不到图标位置了 很多人也许都不知道&#xff0c;Visio自带一个收藏夹&#xff0c;类似于浏览器的书签栏&#xff0c;可以将常用的图标收藏起来&#xff08;通过拖拉的方式&#xff09;&#xff1a; 注意&#xff1a;收藏夹里面不仅可以收藏…

图数据库Neo4j——Neo4j简介、数据结构 Docker版本的部署安装 Cypher语句的入门

前言 MySQL是一种开源的关系型数据库管理系统&#xff0c;使用SQL作为其查询语言&#xff0c;常见的关系型数据库有MySQL、Oracle、SQL Server、PostgreSQL等。相关博客文章如下&#xff1a; 【合集】MySQL的入门进阶强化——从 普通人 到 超级赛亚人 的 华丽转身PostgreSQL数…

分享程序员赚钱的一些门路

引言 实现财务自由几乎是每一个人的梦想&#xff0c;程序员也不另外。都梦想着在工作之外找一个副业&#xff0c;边上着班&#xff0c;边“开启自己的事业”。 可是&#xff0c;很多人都只是停留在想想而已&#xff0c;或者总是在等待一个机会&#xff0c;如此而已。时间一天…

因存在色情内容,夸克被罚50万元

媒体经济的繁荣、自媒体、直播等各种形式的信息传播疯狂发展&#xff0c;但是各种形式的信息资源大规模生产时&#xff0c;“色情”&#xff0c;“暴力”的图像和视频不可控的滋生&#xff0c;特别是某些 APP 或浏览器。一旦打开&#xff0c;满屏都是“哥哥&#xff0c;快来啊”…

Linux学习第27天:Platform设备驱动开发(一): 专注与分散

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 专注与分散是我在题目中着重说明的一个内容。这是今天我们要学习分离与分层概念的延伸。专注是说我们要专注某层驱动的开发&#xff0c;而对于其他层则是芯片厂商…

在centos服务器中完成jdk,tomcat,MySQL的安装以及前后端分离项目中后端的部署

目录 一. jdk&#xff0c;tomcat的安装 1.将要安装的软件压缩包放入到centos服务器上 2. 解压对应的安装包 3. jdk环境变量配置 4. tomcat启动 5. 关闭防火墙 二. MySQL安装 1. 卸载mariadb&#xff0c;否则安装MySql会出现冲突(先查看后删除再查看) 2. 将MySQL安装包解…

【新品】数字化电子智能标签!支持定制服务!!

6年专业研发生产工厂 【NFC防水款】 2.9寸无源NFC电子墨水屏 采用新型无源NFC技术 无须内置电池耗电&#xff0c;没有续航烦恼 新型无源NFC无线刷图技术 采用无源NFC方案&#xff0c;无须内置电池 没有繁琐接线&#xff0c;工作稳定 【电子日历款】 7.5寸单面日历电子墨水屏…

注意力机制 - Transformer

文章目录 1. 简介2. 多头注意力3. 有掩码的多头注意力4. 基于位置的前馈网络5. 层归一化6. 信息传递7. 预测 1. 简介 基于编码器-解码器架构来处理序列对跟使用注意力的seq2seq不同&#xff0c;Transformer是纯基于注意力 2. 多头注意力 对同一key&#xff0c;value&#xff…

竞赛 深度学习手势检测与识别算法 - opencv python

文章目录 0 前言1 实现效果2 技术原理2.1 手部检测2.1.1 基于肤色空间的手势检测方法2.1.2 基于运动的手势检测方法2.1.3 基于边缘的手势检测方法2.1.4 基于模板的手势检测方法2.1.5 基于机器学习的手势检测方法 3 手部识别3.1 SSD网络3.2 数据集3.3 最终改进的网络结构 4 最后…

合肥中科深谷嵌入式项目实战——人工智能与机械臂(五)

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 作者&#xff1a;爱吃饼干的小白鼠。Python领域优质创作者&#xff0c;2022年度博客新星top100入围&#xff0c;荣获多家平台专家称号。…