计算机基础知识复习12.21

news2024/12/22 18:24:31

HashMap的put过程

1.根据要添加的键的哈希码计算在数组中的位置

2.检查该位置是否为空(即没有键值对存在)

3.如果为空,则直接在该位置创建一个新的Entry对象来存储键值对

4.如果该位置已经存在其他键值对,检查该位置的第一个键值对的哈希码和键是否与要添加的键值对相同

5.如果第一个键值对的哈希码和键不相同,则需要遍历链表或红黑树来查找是否有相同的键

6.检查链表长度是否达到阈值 默认为8  如果链表长度超过阈值,且HashMap的数组长度大于等于64,则会将链表转换为红黑树,以提高查询效率

7.检查负载因子是否超过阈值 默认为0.75

8.扩容操作,创建一个新的两倍大小的数组,将旧数组的键值对重新计算哈希码并分配到新数组中的位置,更新HashMap的数组引用和阈值参数

红黑树的数据结构

自平衡的二叉查找树,每个节点要么是黑色,要么是红色。根节点是黑色,每个叶子节点是黑色,如果一个节点是红色,则其子节点必须是黑色,从任一节点到其每个叶子节点的所有路径都包含相同数目的黑色节点

ConcurrentHashMap

CAS+synchronized来实现线程安全的,如果根据存储的元素计算结果为空,则利用CAS设置该节点,如果根据存储的元素计算结果不为空,则使用synchronized,然后遍历桶中的数据,并替换或新增节点到桶中,最后判断是否需要转为红黑树,保证并发访问时的线程安全了

索引失效场景

(1)使用like %xx 或者 like %xx% 造成索引失效

(2)对索引使用函数 length(name)

(3) 对索引进行表达式求值 where id+1=10

(4)对索引使用隐式类型转换

(5)联合索引非最左匹配原则

(6) where子句中的or语句  只有or前后的条件列都为索引列,则进行命中索引,否则索引失效

类加载过程

加载:通过类的全限定名(包名+类名),获取到该类的.class文件的二进制字节流,将二进制字节流所代表的静态存储结构,转化为方法区运行时的数据结构,在内存中生成一个代表该类的Java.lang.Class对象,作为方法区这个类的各种数据的访问入口

验证:确保class文件的字节流包含的信息,符合当前虚拟机的要求,保证这个被加载的class类的正确性,不会危害到虚拟机的安全

准备:为类中的静态字段分配内存,并设置默认的初始值,比如int类型初始值是0,被final修饰的static字段不会设置,因为final在编译时就分配了

解析:解析阶段是虚拟机将常量池的符号引用直接替换为直接引用的过程,符号引用是以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用的时候可以无歧义地定位到目标即可

初始化:初始化是整个类加载过程的最后一个阶段,初始化阶段简单来说就是执行类的构造器方法

使用:使用类或创建对象

卸载:该类所有的实例都已经被回收,Java堆中不存在该类的任何实例,加载该类的classLoader已经被回收。类对应的java.lang.class对象没有任何地方被引用,无法在任何地方通过反射访问该类的方法

线程池

通过ThreadPoolExecutor来构建线程池,corePoolSize指定工作的核心线程数量

maxPoolSize:最大线程数,线程池允许创建的最大线程数

keepAliveTime:超出corePoolSize后创建线程存活时间

unit:keepAliveTime的时间单位

workQueue:任务队列,是一个阻塞队列,当线程数达到核心线程数后,会将任务存储在阻塞队列中

threadFactory:线程池内部创建线程所用的工厂

handler:拒绝策略,当队列已满并且最大线程数量时,会调用该方法处理任务

拒绝策略:

丢弃任务,抛出运行时异常

由提交任务的线程来执行任务

丢弃任务,但是不抛出异常

从队列中剔除最先进入队列的任务,然后再次提交任务

Executors工具类提供四种线程池

FixedThreadPool:固定线程数量的线程池,该线程池中的线程数量始终不变,当有一个新的任务提交时,线程池中若有空闲线程,则立即执行。若没有,则新的任务提交时,线程池中若有空闲线程,则立即执行,若没有,则新的任务会暂存在一个任务队列中,待有线程空闲时,便处理在任务队列中的任务,使用的是有界阻塞队列LinkedBlockingQueue,其任务队列的最大长度为Integer.MAX_VALUE,可能堆积大量的请求,从而导致OOM

SingleThreadExecutor:只有一个线程的线程数,若多于一个任务被提交到线程池,任务会被保存在一个任务队列中,待线程空闲,按先入先出的顺序执行队列中的任务,使用的是有界阻塞队列LinkedBlockingQueue,其任务队列的最大长度为Integer.MAX_VALUE,可能堆积大量的请求,从而导致OOM

CachedThreadPool:根据实际情况调整线程数量的线程池,任务会被保存在一个任务队列中,待线程空闲,按先入先出的顺序执行队列中的任务。若所有线程均在工作,又有新的任务提交,则会创建新的线程处理任务,所有线程在当前任务执行完毕后,将返回线程池进行复用,允许创建的线程数量为Integer.Max_VALUE 如果任务数量过多,可能会创建大量的线程

ScheduledThreadPool:给定的延迟后运行任务或定期执行任务的线程池,使用无界的延迟阻塞队列

线程的状态

NEW:初始状态,线程被创建出来但没有被调用start()

RUNNABLE:运行状态,线程被调用了start()等待运行的状态

BLOCKED:阻塞状态,需要等待锁释放

WAITING:等待状态,表示该线程需要等待其他线程做出一些特定动作(通知或中断)

TIME_WAITING:超时等待状态,可以在指定的时间后自行返回而不是像waiting那样一直等待

TERMINATED:终止状态,表示该线程已经运行完毕

核心线程数和最大线程数怎么设置

CPU密集型:指的是任务主要使用进行大量的计算,没有什么导致线程阻塞,一般线程数设置为CPU核心数+1

IO密集型:当执行任务需要大量的IO,比如磁盘IO,网络IO,可能会存在大量的阻塞,所以在IO密集型任务中使用多线程可以大大加速任务的处理,一般线程数设置为2*CPU核心数

无锁: 没有开启偏向锁的状态,

偏向锁:当一个线程拿到偏向锁时,下次想要竞争锁只需要拿线程ID跟MarkWord当中存储的线程ID进行比较,如果线程ID相同则直接获取锁,不需要CAS操作

轻量级锁:有锁竞争,需要CAS操作

重量级锁:自旋失败,升级为重量级锁

缓存雪崩

即缓存同一时间大面积的失效,一大波请求都打到数据库上  通过设置随机时间,热点数据不设置过期时间

缓存击穿

一个热点key过期或被删除后,导致线上原本能命中该热点key的请求,瞬间大量打到数据库,导致数据库击垮

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

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

相关文章

压缩glb模型文件

使用?gltf-pipeline进行压缩: GitHub地址[这里是图片001]https://github.com/CesiumGS/gltf-pipeline 1. 安装gltf-pipeline npm install -g gltf-pipeline2. 在glb文件目录打开cmd进行命令行压缩: // cmd: gltf-pipeline -i glb.glb -d -s以下是 -…

创建SpringBoot项目的五种方式

1. 使用SpringBoot官方模板创建 1.1 IDEA集成创建 File > new Project 目前SpringBoot官方对于SpringBoot模板版本都比较新,所以对Java的依赖版本也很新,这里可以看到已经不支持jdk8了,并且只有SpringBoot3版本 我们选择好之后点击…

软件维护的实施

软件维护活动 (1) 维护机构 除了较大的软件开发公司外,通常在软件维护工作方面,不保持正式的维护机构。维护往往是在没有计划的情况下进行的。虽然不要求建立一个正式的维护机构,但是在开发部门,确立一个非正式的维护机构则是非常…

stm32 rtc 详解

目录 L151 RTC 唤醒代码 方式一 通过 RTC Alarm Interrupt:(基本和F1系列一样): L151 RTC 唤醒代码 方式二 通过 RTC WakeUp Interrupt F103VE RTC 闹钟唤醒代码 (103RC 没有闹钟中断): RTC(real time…

arcgisPro相接多个面要素转出为完整独立线要素

1、使用【面转线】工具,并取消勾选“识别和存储面邻域信息”,如下: 2、得到的线要素,如下:

机器人国际会议IROS论文latex模板

机器人国际会议IROS论文latex模板 文档 root.tex 可以配置为 US Letter 纸或 A4。请注意以下重要行:\documentclass[letterpaper, 10 pt, Conference]{ieeeconf} % 如果需要 a4paper,请注释掉此行%\documentclass[a4paper, 10pt, Conference]{ieeeconf} …

JVM和数据库面试知识点

JVM内存结构 主要有几部分:堆、栈、方法区和程序计数器 堆是JVM中最大的一块内存区域,用于存储对象实例,一般通过new创建的对象都存放在堆中。堆被所有的线程共享,但是它的访问时线程不安全的,通常通过锁的机制来保证线…

数据结构:栈和队列的实现

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。 栈中的数据元素遵守后进先出 LIFO ( Last In First Out )的原则。 压栈:栈…

实现 WebSocket 接入文心一言

目录 什么是 WebSocket? 为什么需要 WebSocket? HTTP 的局限性 WebSocket 的优势 总结:HTTP 和 WebSocket 的区别 WebSocket 的劣势 WebSocket 常见应用场景 WebSocket 握手过程 WebSocket 事件处理和生命周期 WebSocket 心跳机制 …

开源轮子 - Logback 和 Slf4j

spring boot内置:Logback 文章目录 spring boot内置:Logback一:Logback强在哪?二:简单使用三:把 log4j 转成 logback四:日志门面SLF4J1:什么是SLF4J2:SLF4J 解决了什么痛…

MFC/C++学习系列之简单记录13

MFC/C学习系列之简单记录13 前言memsetList Control代码注意 总结 前言 今天记录一下memset和List control 的使用吧! memset memset通常在初始化变量或清空内存区域的时候使用,可以对变量设定特定的值。 使用: 头文件: C&#…

Layui table不使用url属性结合laypage组件实现动态分页

从后台一次性获取所有数据赋值给 Layui table 组件的 data 属性,若数据量大时,很可能会超出浏览器字符串最大长度,导致渲染数据失败。Layui table 结合 laypage 组件实现动态分页可解决此问题。 HTML增加分页组件标签 在table后增加一个用于…

网络方案设计

一、网络方案设计目标 企业网络系统的构成 应用软件 计算平台 物理网络及拓扑结构 网络软件及工具软件 网络互连设备 广域网连接 无论是复杂的,还是简单的计算机网络,都包括了以下几个基本元素 : 应用软件----支持用户完成专门操作的软件。…

QT QWidget 背景颜色 鼠标hover 背景颜色研究

自定义控件 UserAvatarWidget 的样式问题及解决方案 场景描述 我开发了一个继承自 QWidget 的自定义控件 UserAvatarWidget&#xff0c;并在 .ui 文件中引入了该控件。引入代码如下&#xff1a; <item><widget class"UserAvatarWidget" name"userAv…

javaScriptBOM

1.1、BOM概述 1.1.1、BOM简介 BOM&#xff08;browser Object&#xff09;即浏览器对象模型&#xff0c;它提供了独立于内容而与浏览器窗口进行交互的对象&#xff0c;其核心对象是window。 BOM由一系列的对象构成&#xff0c;并且每个对象都提供了很多方法与属性 BOM缺乏标准…

【Lua热更新】上篇

Lua 热更新 - 上篇 下篇链接&#xff1a;【Lua热更新】下篇 文章目录 Lua 热更新 - 上篇一、AssetBundle1.理论2. AB包资源加载 二、Lua 语法1. 简单数据类型2.字符串操作3.运算符4.条件分支语句5.循环语句6.函数7. table数组8.迭代器遍历9.复杂数据类型 - 表9.1字典9.2类9.3…

AJAX与Axios

什么是 AJAX ? AJAX 是异步的 JavaScript 和 XML&#xff08;Asynchronous JavaScript And XML&#xff09;。 简单理解AJAX&#xff1a;是一种客户端与服务器进行网络通信技术&#xff0c;AJAX通常使用XMLHttpRequest 对象来发送请求和接收响应 现代开发中我们通常使用 JS…

1.gitlab 服务器搭建流程

前提条件&#xff1a; 一、服务器硬件水平 搭建gitlab服务器最低配置要求2核4G,低于这个配置的服务器运行效果很差。 gitlab官网&#xff1a;https://about.gitlab.com/ 下载地址&#xff1a;gitlab/gitlab-ce - Packages packages.gitlab.com 本机ubuntu 二、安装依赖 su…

springboot462学生心理压力咨询评判(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装学生心理压力咨询评判软件来发挥其高效地信息处理的作用&am…

git分支管理及策略

Git 的默认分支就是 master。你所作的commit会在master分支上自动移动。 在多次提交操作之后&#xff0c;master分支指向最后那个commit object&#xff08;提交对象链&#xff09;。 Git 的 “master” 分支并特殊&#xff0c;跟其它分支没有区别。 之所以几乎每一个仓库都有…