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

java第二周课前提问

一、代码引入

public class Main {static void changeStr(String x) {x = "xyz";}static void changeArr(String[] strs) {for (int i = 0; i < strs.length; i++) {strs[i] = strs[i]+""+i;}}public static void main(String[] args) {    String x = "abc";changeStr(x);System.out.println(x);changeArr(args);System.out.println(Arrays.toString(args));}
}

1.changeStr 与 changeArr 的功能

changeStr方法:尝试将传入的字符串参数修改为 "xyz"(但实际不会影响原字符串)。
changeArr方法:遍历传入的字符串数组,将数组中每个元素修改为 “原元素 + 其索引值”(例如,若原元素为 "a" 且索引为 0,则修改为 "a0")。

2.main方法的x有没有被改变?不会

原因:Java 中方法参数传递是 “值传递”。
main方法中的x是一个字符串引用,指向 "abc"。
调用changeStr(x)时,实际传递的是x的副本(即指向 "abc" 的引用副本)。
changeStr方法内部将副本指向 "xyz",但原x(main中的x)仍然指向 "abc",因此x的值不会改变。

3.main方法的args数组的内容有没有被改变?会

main方法中的args是数组引用,指向一个字符串数组对象。
调用changeArr(args)时,传递的是args的引用副本,该副本与原args指向同一个数组。
changeArr方法中对数组元素(strs[i])的修改,本质是对同一个数组对象的修改,因此main方法中的args数组内容会被改变。

4.args数组中的值是从哪里来的?

值的来源:args数组是main方法的命令行参数,其值来自程序运行时用户在命令行输入的参数。

5.要怎么才能给args赋值?

赋值方式:运行 Java 程序时,在类名后跟随参数,参数之间用空格分隔。例如:
在命令行中执行 java Main hello world 123,则args数组的值为 {"hello", "world", "123"},其中args[0] = "hello",args[1] = "world",args[2] = "123"。

二、数组

参数传递的特点

int[] arr = new int[3];
arr[0] = 1; arr[1] = 1;
int[] arrX = arr;
arr[0] = 2;
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(arrX));

原因

Java 中数组是引用类型,当执行int[] arrX = arr;时,并不是创建一个新的数组副本,而是让arrX和arr指向同一个数组对象(即两者共享同一块内存空间)。
因此,当通过arr[0] = 2修改数组元素时,本质上是修改了arr和arrX共同指向的那个数组对象的内容。所以无论通过arr还是arrX访问数组,看到的都是修改后的结果。

区分字符串的不可变性与数组元素的引用修改

String[] strArr = {"aa","bb","cc"};
strArr[1] = "xx";
System.out.println(Arrays.toString(strArr));

原因

字符串的不可变性指的是:字符串对象本身的内容一旦创建就无法被修改(例如 "bb" 这个字符串对象,它的字符序列 "bb" 不能被直接改成 "xx")。
但在代码中,strArr[1] = "xx" 并不是在修改原字符串对象 "bb",而是在修改数组元素的引用指向:
初始时,strArr[1] 存储的是指向 "bb" 对象的引用;
赋值后,strArr[1] 存储的引用被更新为指向新的字符串对象 "xx"。
原字符串 "bb" 并没有被修改(依然存在于内存中,只是不再被strArr[1]引用),因此这与字符串的不可变性并不矛盾。数组元素存储的是字符串的引用,引用本身是可以被重新赋值的。

三、遍历数组

数组的创建

使用int[5][]定义一个二维数组,其第二维到底有多长?

在 Java 中,int[5][] 定义了一个包含 5 个元素的一维数组,每个元素又是一个 int 类型的数组(第二维数组)。但此时第二维数组并未被初始化,它们的长度是不确定的(默认值为 null),需要手动为每个第二维数组分配空间,且它们的长度可以不同(这就是 Java 中支持的 "不规则数组")。

代码(foreach实现)

public class TwoDimensionalArray {public static void main(String[] args) {// 定义一个第一维长度为5的二维数组int[][] arr = new int[5][];// 为第二维数组分配不同的长度(可以不同)arr[0] = new int[3];   // 第1个子数组长度为3arr[1] = new int[2];   // 第2个子数组长度为2arr[2] = new int[4];   // 第3个子数组长度为4arr[3] = new int[1];   // 第4个子数组长度为1arr[4] = new int[5];   // 第5个子数组长度为5// 为数组元素赋值int value = 1;for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {arr[i][j] = value++;}}// 方法1:使用foreach循环遍历System.out.println("使用foreach遍历:");for (int[] subArray : arr) {  // 遍历第一维,得到每个子数组for (int num : subArray) { // 遍历子数组中的元素System.out.print(num + " ");}System.out.println(); // 每个子数组换行}// 方法2:使用普通for循环遍历(通过length属性)System.out.println("\n使用普通for循环遍历:");for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");}System.out.println();}}
}

类与对象

类的定义

类是抽象的模板,定义了一组对象共同的属性(数据)和方法(行为)。它是对某一类事物的抽象描述,不占用实际内存空间。例如,“汽车” 类可以定义属性(颜色、品牌)和方法(启动、刹车),但它本身不是一辆具体的车。

对象的定义

对象是类的具体实例,是根据类创建的具体个体,具有实际的状态(属性值)和行为(调用方法),占用内存空间。例如,“我的黑色特斯拉 Model 3” 就是 “汽车” 类的一个对象,它有具体的颜色(黑色)、品牌(特斯拉),并且可以执行启动、刹车等操作。

Math 类有对象吗?没有。

在 Java 中,Math类是一个工具类,专门提供数学运算相关的静态方法(如Math.random()生成随机数、Math.max(a,b)求最大值)。为了防止被实例化(因为工具类不需要具体对象),Math类的构造方法被设计为private(私有),外部无法通过new Math()创建对象。因此,Math类没有对象,所有方法都通过类名直接调用(如Math.sqrt(4))。

String 类的私有属性、公共方法及设计原因

String类是 Java 中用于表示字符串的类,其设计核心是不可变性(字符串创建后无法被修改),这一特性通过私有属性和公共方法的配合实现。

1. 私有属性

String类的核心私有属性是存储字符的容器,例如:

private final char[] value;  

设计原因:
private修饰确保外部无法直接访问或修改字符数组,避免字符串内容被意外篡改。
final修饰确保数组引用不可变(虽然数组本身是可变的,但String类没有提供修改数组的方法),进一步保证字符串的不可变性。

2. 公共方法(举例)

String类提供了大量public方法用于操作字符串,例如:
public int length():返回字符串的长度(即字符数组的长度)。
设计原因:外部需要知道字符串的长度,但无需直接访问内部的value数组(封装实现细节)。通过方法提供统一接口,即使未来String内部存储方式改变(如从char[]改为byte[]),外部调用方式也无需修改。
public char charAt(int index):返回指定索引位置的字符。
设计原因:允许外部获取特定位置的字符,但不暴露整个字符数组。同时,方法内部会检查索引是否越界(如index < 0 || index >= length()),抛出StringIndexOutOfBoundsException,保证访问安全性,这是直接暴露数组无法实现的。

3.不可变性的好处(设计初衷)

String的不可变性通过私有属性 + 公共方法的设计实现,带来了诸多优势:
线程安全:多个线程同时访问字符串时,无需担心内容被篡改。
可缓存哈希值:String的hashCode()结果会被缓存,作为HashMap的键时效率更高。
安全性:避免字符串在传递过程中被意外修改(如网络请求参数、文件路径等)。

public(类的属性)和用setter/getter模式对对象的属性进行访问

(常用setter/getter模式对对象的属性进行访问)

setter和getter

public class Person {private int age; // 私有属性,外部无法直接访问// setter:控制年龄的修改逻辑public void setAge(int age) {if (age < 0 || age > 150) { // 验证:年龄必须在合理范围throw new IllegalArgumentException("年龄必须在0-150之间");}this.age = age; // 仅当验证通过时才修改}// getter:控制年龄的读取逻辑(可选)public int getAge() {return age;}
}

setter/getter模式的核心优势(与封装性的关系)

封装性的核心思想是 “隐藏对象的内部状态,仅通过公共接口对外提供访问”。setter/getter正是这一思想的具体实现,主要体现在以下方面:

1. 控制数据访问权限,保证数据合法性

setter方法可以对输入值进行验证或过滤,确保属性值始终符合业务规则,这是public属性无法做到的。
例如,Person类的age属性通过setter控制:

public class Person {private int age; // 私有属性,外部无法直接访问// setter:控制年龄的修改逻辑public void setAge(int age) {if (age < 0 || age > 150) { // 验证:年龄必须在合理范围throw new IllegalArgumentException("年龄必须在0-150之间");}this.age = age; // 仅当验证通过时才修改}// getter:控制年龄的读取逻辑(可选)public int getAge() {return age;}
}

此时,外部代码必须通过setAge()修改年龄,确保了数据的合法性 —— 这就是封装性中 “保护内部状态” 的体现。

2. 隐藏内部实现细节,降低耦合度

getter方法可以隐藏属性的实际存储方式,仅对外提供统一的访问接口。当内部实现变化时,外部代码无需修改。
例如,User类的 “全名” 可能实际存储为firstName和lastName,但通过getFullName()对外提供拼接后的结果:

public class User {private String firstName; // 私有:隐藏存储细节private String lastName;// getter:对外提供统一的“全名”访问接口public String getFullName() {return firstName + " " + lastName; // 内部拼接逻辑可随时修改}// setter:分别控制姓和名的修改public void setFirstName(String firstName) {this.firstName = firstName;}public void setLastName(String lastName) {this.lastName = lastName;}
}

外部代码只需调用getFullName(),无需关心 “全名是如何存储的”。即使未来存储方式改变(例如直接存储fullName字段),只要getFullName()的返回结果不变,外部代码就无需调整 —— 这体现了封装性中 “隐藏实现,稳定接口” 的优势。

3. 支持额外业务逻辑嵌入

setter/getter可以在访问或修改属性时嵌入额外逻辑(如日志记录、事件通知等),而public属性无法扩展这些功能。
例如,修改用户密码时,setter可以自动记录修改时间:

public class User {private String password;private LocalDateTime passwordUpdateTime;public void setPassword(String password) {this.password = password;this.passwordUpdateTime = LocalDateTime.now(); // 嵌入“记录修改时间”逻辑// 还可以加入密码加密、日志打印等逻辑}
}

4. 符合框架与工具的约定

许多 Java 框架(如 Spring、Hibernate)或工具(如 JSON 序列化库)依赖setter/getter进行反射操作(例如通过getXxx()读取属性、setXxx()注入值)。使用public属性可能导致框架无法正常工作。

为什么不用public

数据安全性无法保证
例如,一个Person类的age属性若为public,外部可能会将其设置为负数(person.age = -10)或不合理的大值(person.age = 200),而类本身无法阻止这种无效数据的产生。
内部实现暴露,难以维护
若属性直接暴露,当类的内部逻辑需要修改时(例如将age的存储方式从 “出生年份计算” 改为
“直接存储年龄”),所有直接访问该属性的外部代码都需要同步修改,导致 “牵一发而动全身”。

对象属性的初始化

一、声明属性时直接初始化(最基础的方式)

在定义属性的同时直接为其赋值,这是最简单的初始化方式。
执行时机:在对象创建时,先于构造方法和初始化块执行(按代码中属性声明的顺序依次执行)。

public class Person {private String name;private int age;// 实例初始化块{name = "初始化块设置的姓名";age = 20;// 可以包含更复杂的逻辑,如条件判断if (age < 18) {age = 18; // 确保年龄不小于18}}
}

二、构造方法初始化(最常用的方式)

在构造方法中为属性赋值,是实际开发中最常用的初始化方式。

public class Person {private String name;private int age;// 无参构造方法:设置默认值public Person() {name = "默认姓名";age = 18;}// 有参构造方法:通过参数动态初始化public Person(String name, int age) {this.name = name;this.age = age; // 可以根据外部传入的参数灵活赋值}
}

三、通过setter方法初始化(对象创建后)

public class Person {private String name;private int age;// setter方法public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}
}// 使用时:先创建对象,再通过setter初始化
Person p = new Person();
p.setName("张三"); // 此时才初始化name属性
p.setAge(25); // 此时才初始化age属性

相关文章:

java第二周课前提问

一、代码引入 public class Main {static void changeStr(String x) {x = "xyz";}static void changeArr(String[] strs) {for (int i = 0; i < strs.length; i++) {strs[i] = strs[i]+""+i;}}public static void main(String[] args) { String x = …...

java GC

java GC...

Redis最佳实践——性能优化技巧之监控与告警详解

一、监控体系构建1. 核心监控指标矩阵指标类别 关键指标 计算方式/说明 健康阈值(参考值)内存相关 used_memory INFO Memory 获取 不超过 maxmemory 的 80%mem_fragmentation_ratio 内存碎片率 = used_memory_rss / used_memory 1.0-1.5命中率 keyspace_hits INFO Stats 获取…...

week1

任务一,编码规范: 我在网上找到了华为公司C++编码规范,我摘下几点我觉得我应该注意的 1、程序块要采用缩进风格编写, 缩进的空格数为4个 2、不允许把多个短语句写在一行中, 即一行只写一条语句 3、 if、for、do、while、case、switch、default等语句自占一行, 且if、for、do…...

EF Core 与 MySQL:迁移和关系配置详解

EF Core 与 MySQL:迁移和关系配置详解 1. EF Core 中的关系类型 Entity Framework Core 支持三种主要的关系类型: 一对一关系 (One-to-One) 一个实体实例只与另一个实体实例相关联。例如:一个用户有一个用户资料。csharppublic class User {public int Id { get; set; }pub…...

《原子习惯》-读书笔记2

2025.09.15 Day2 1、目标和体系有什么不同?我最初是从“呆伯特漫画”的创作者斯科特亚当斯(Scott Adams)那里了解到两者的区别的。目标是关于你想要达到的结果,而体系是涉及导致这些结果的过程。2、争取每天都有进步是你走向成功唯一的方法。3、如果你想要得到更好的结果,那…...

CF1626D 题解

CF1626D 题解 貌似题解区没有这种解法。 题面 CF1626D Martial Arts Tournament - 洛谷 (luogu.com.cn) 思路 问题就是把 \(a\) 分成 \(3\) 个子集(可以为空),每两个子集里的数并不重复,把每个子集的大小补到 \(2^x\) 最少要补的数的个数。 先把 \(a\) 给排序,那么就可以转…...

Python 集合运算:并集、交集、差集全解析

在 Python 中,集合(set)是一种无序的、不包含重复元素的数据结构。集合提供了丰富的运算方法,包括并集、交集、差集等。这些运算在数据处理、数学计算和算法设计中非常实用。今天,就让我们一起深入学习 Python 集合的运算方法,并通过实例代码展示它们的使用。 一、集合的…...

第一周数据可视化作业

一、个人介绍 My name is Ou Qi. (🙂) 我性格阳光开朗,始终保持着对学习的热忱和对未知事物的探索欲,尤其从小就对数学有着浓厚兴趣 —— 课堂上会紧跟老师的思路深度思考,课后也常主动琢磨题型、尝试举一反三,在不断推导中把知识学扎实。 二、我的专业选择与学习历程 步…...

用 C++ + OpenCV + Tesseract 实现英文数字验证码识别

本文展示如何用 C++ 结合 OpenCV 做图像预处理,再调用 Tesseract OCR 识别验证码。适用于希望在高性能后端或本地服务里集成 OCR 的场景。方案包含: 更多内容访问ttocr.com或联系1436423940 环境与依赖安装 图像预处理(灰度、二值化、形态学去噪、放大) 使用 Tesseract API…...

java 第一节课课前提问

一、使用Java能编写的程序 企业级后端应用 Java 在企业级开发中占据重要地位,常被用于构建大型服务器端应用,如电商平台、银行交易系统、CRM(客户关系管理)系统等。这类应用通常需要处理高并发、复杂业务逻辑和海量数据,Java 凭借稳定的性能、丰富的企业级框架(如 Spring…...

二进制解码器、选通器和分配器

二进制解码器 3比特的二进制解码器可以由下图表示。每种组合方式对应着解码器的不同输出。3-8解码器可以用三个非门和三个与门构成解码器可以拼接起来组成更大的解码器,比如两个3-8解码器可以拼起来组成一个4-16解码器。选通器和分配器。 选通器 一个8选1的选通器如下图所示。…...

2025最新版 Photoshop软件免费下载安装完整教程(PS2025)超详细安装教程

Adobe Photoshop 2025 凭借升级的 AI 编辑功能、更优的图像处理效率,成为设计与摄影领域的热门工具。但不少用户在安装时,易因路径选择、安全软件拦截等问题卡壳。本教程聚焦安装全流程,从前期准备到后续配置,用清晰步骤帮你避开误区,顺利完成安装,快速解锁 PS 2025 的创…...

nac一键卸载软件脚本

将下面的代码保存为uninstall.sh: echo delete shit.app..need your root pwd; sudo rm -rf /Applications/dvc-manageproxy-exe.app; sudo rm -rf /Applications/LVSecurityAgent.app; echo script is fighting...; sudo chflags noschg /opt/LVUAAgentInstBaseRoot; sudo chf…...

交叉编译openharmony版本的openssh

sudo mkdir /systemsudo chmod 777 /system/export CC=aarch64-linux-gnu-gcc编译zlib./configure --prefix=/systemmake && make install 编译openssl./config linux-aarch64 --prefix=/system/ --openssldir=/system/etc/ssl --libdir=…...

为什么不建议在 Docker 中跑 MySQL

前言 今天我们来聊聊一个很有趣的话题:为什么我不建议在Docker中运行MySQL数据库? 有些小伙伴在工作中可能为了部署方便,习惯将所有组件都容器化,但数据库真的适合放在容器里吗? 今天就专门跟大家一起聊聊这个话题,希望对你会有所帮助。 一、容器化与数据库:天生的矛盾?…...

CFD

算例汇总 1、一维Sod激波管 2、二维平板 3、NACA0012 4、高马赫数喷流 5、双马赫反射 6、二维Riemann 7、二维Rayleigh-Taylor 8、TENO算例...

[MCP][05]Elicitation示例

Elicitation能让工具在关键时刻暂停执行,并向用户请求特定信息前言 如果你之前接触过LangGraph的"Human in the loop"概念,那么理解MCP的Elicitation机制就会容易很多。这两个功能非常相似,都是让AI在需要时停下来,礼貌地向人类寻求帮助或确认。 想象一下,当你正…...

Warsaw主题关闭导航条

\setbeamertemplate{headline}{}...

Python Socket网络编程(2)

进程:提供计算资源的单位 线程:真正工作的单位(cpu调度最小单元) GIL锁:全局解释器锁(是CPython解释器特有的,平时说的Python解释器一般都是CPython解释器,还有GPython等等) 让一个进程中同一时刻只能有一个线程可以被CPU调动。所以Python中应该是没有严格意义的多线程…...

PS2025安装包下载及PS2025安装包安装教程详细步骤(包含安装包下载链接)

在图像处理领域,Adobe Photoshop 一直占据着举足轻重的地位,而 PS 2025 更是汇聚前沿技术与实用功能,成为众多设计师与图像处理爱好者的得力工具。但初次安装这款软件,可能会因步骤繁杂、细节众多而让人感到棘手。别担心,本教程将以清晰、简洁的方式,带你一步步完成 PS 2…...

Nature Genetics | 本周最新文献速递

Multiancestry brain pQTL fine-mapping and integration with genome-wide association studies of 21 neurologic and psychiatric conditions 中文标题: 多祖先脑蛋白遗传调控解码!pQTL精细映射揭示神经精神疾病机制 关键词: 脑蛋白定量性状位点、精细映射、多祖先整合、…...

关于go里切片作为函数参数时是引用传递还是值传递

go语言中切片参数的值传递问题问题起因 写一道回溯算法题,把ans二维数组作为函数参数传入,想在函数里面,不停地append,最后返回ans 实际发现ans打印出来是空的,就很奇怪,因为我是事先分配好空间的,理论上不会发生扩容,底层数组是共用的,咋回事 func permute(nums []in…...

DRAN读写循环

DRAM读写循环 以一个8 * 8 的二维阵列为例子,假设部分存储单元为1,部分为0,现在要读写其中某一个cell的值。为了确定存储的位置,我们需要内存地址,为了传输内存地址,我们需要地址总线。8 * 8阵列一共有64个cell,我们需要6线地址总线,一共能表示64种二进制值。三根地址总…...

数据结构操作相关

堆 1、插入元素上滤每一次与父亲比较,满足大小就往上交换,直至不能往上为止。每次往上交换不会影响下面的性质2、删除/输出堆顶下滤假设大根堆,根节点换入末尾节点,每次先找出大儿子,若大儿子比自己大,则往下和他交换,直至不能往下为止。 3、建堆 1)初始为空,逐个inse…...

Neisbitt 不等式的证法

\(a,b,c\in R^+求证:\frac{a}{b+c}+\frac{b}{a+c}+\frac{c}{a+b}\geq\frac{3}{2}\) 证明: \(\because a,b,c\in R^+,\therefore\exists x,y,使得b=ax,c=ay\) \(\therefore LHS=\frac{1}{x+y}+\frac{x}{1+y}+\frac{y}{1+x}\) \(\therefore 令f(x,y)=\frac{1}{x+y}+\frac{x}{1+…...

端口转发神器Rinetd:轻量级安装与配置指南

什么是Rinetd? Rinetd(Redirection Internet Daemon)是一款轻量级的TCP端口转发工具,可以将来自一个IP地址和端口的连接转发到另一个IP地址和端口。它配置简单、资源占用少,是系统管理员和开发人员进行端口转发的理想选择。 Rinetd的主要特点轻量级:体积小,资源占用低 配…...

C语言中递归思想的应用

C语言中递归思想的应用 一、递归思想 在C语言中,函数是程序的基本单位,每个函数负责解决特定问题。但如果程序中出现n个相同的问题,就需要调用对应函数n次,这会导致程序冗长、可读性差。那么,有没有更简洁的解决方案呢? 答案是递归函数。递归函数并非万能,它更适用于解决…...

WITH RECURSIVE 递归公用表表达式(CTE)

生成一个从 1 到 12352 的连续数字序列SQL server SQL Server 对递归 CTE 有默认的递归深度限制(默认是 100),当递归次数超过这个限制时会报错。当远超默认限制时,需要在查询前使用 OPTION (MAXRECURSION 0) 来取消递归深度限制。WITH RECURSIVE num_sequence AS (SELECT 1…...

#java作业

1方法相关问题、 public class Main { static void changeStr(String x) { x = "xyz"; } static void changeArr(String[] strs) { for (int i = 0; i < strs.length; i++) { strs[i] = strs[i]+""+i; } } public static void main(String[] args) { …...

leetcode 3541. 找到频率最高的元音和辅音 便捷

leetcode 3541. 找到频率最高的元音和辅音 便捷pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !…...

匿名递归与不动点组合子

先贴上 CS61A Homework 3 Recursion, Tree Recursion 中的最后一道思考题题面: ​Q6: Anonymous FactorialThis question demonstrates that its possible to write recursive functions without assigning them a name in the global frame.The recursive factorial function…...

Markdown学习Day01

Markdown学习第一天 【【狂神说Java】Java零基础学习视频通俗易懂】https://www.bilibili.com/video/BV12J41137hu?p=6&vd_source=e3ba980d960d7d6c98e4872bba8cf225 Markdown学习 二级标题 字体 her hus hou KLI 引用选择不需要辩护。分割线插图超链接 学Java 表格年级 班…...

flutter compass结构代码分析

1.config文件夹:1.1assets.dart返回一个Assets类,包含activities和destinations两个静态属性。两个静态属性分别代表虚拟数据存放的路径。在assets文件夹下1.2 dependencies.dart使用provider绑定远程访问和本地访问所需要的数据 2.data文件夹2.1 repositoriesactivity文件夹a…...

25.9.15

应该都知道我退役了吧。 我对于这一段竞赛生涯呢,情感太复杂了。 (话说退役半年才回来写是不是有点晚了) 怎么说呢,这段竞赛让我有了一段快乐的时光,也让我彻底改变了。 想说很多,但是又说不出口。 先说说坏处吧 我的抑郁症可以说是被竞赛加深的,以至于我在初三下和高一…...

二十八、共享内存多处理器的基本概念

目录1. 核心定义2. 两种主要的共享内存架构a) 均匀内存访问b) 非均匀内存访问3. 共享内存多处理器的核心挑战与解决方案a) 缓存一致性b) 内存一致性4. 编程模型与同步5. 优势与劣势优势:劣势:总结共享内存多处理器是多处理器系统中最常见和直观的一种架构,也是现代多核CPU设…...

详细介绍:【ARMv7】系统复位上电后的程序执行过程

详细介绍:【ARMv7】系统复位上电后的程序执行过程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospac…...

C#高级语法

https://www.cnblogs.com/NotEnough/p/7426853.html https://juejin.cn/post/7100033147101773831...

配置Maven

IDEA配置Maven原文链接:https://blog.csdn.net/leah126/article/details/132020904 一、Maven下载 首先我们进入maven官方网站,进入网页后,点击Download去下载。下载免安装版,解压即可,解压至磁盘任意目录,尽量不要取中文名如下图: 二、配置Maven环境变量 打开cmd命令行,…...

那两年的回忆录

小引 我的OI之路是短暂且波折的,像是一则故事,曲曲折折,却又很是有趣,或许那两年是我最愉快的时光吧。 我总是问自己当初为什么要学OI,许是一腔热血,许是奔赴热爱。仔细想想,从最开始接触scratch,到后来的Python,最后的C++,前面两个都是觉得好玩,觉得有趣,可C++呢,…...

DDR4基本介绍

DDR4简介 DRAM的存储原理 DRAM的基本存储单元:cell 一个cell由一个晶体管和一个电容(约为30pF)组成,电容存储了电量代表1,电容放空电量代表0,晶体管作为电容的充放电开关,以便实现1bit数据的读写,cell的结构如下图所示 :读的过程:首先打开MOS管,根据电容的充放电信息…...

网络同步预测-Prediction

预测(Prediction) 是解决网络延迟问题、提升玩家操作流畅度的核心机制客户端接收玩家输入玩家操作(如 WASD 移动、跳跃)被捕获为输入事件(FInputActionValue)。客户端本地预测执行客户端不等服务器响应,直接基于输入在本地模拟角色行为(如移动、动画播放),并立即更新…...

二十五、多处理器的基本概念 (SISD/SIMD/MIMD)

目录1. SISD - 单指令流单数据流2. SIMD - 单指令流多数据流3. MIMD - 多指令流多数据流总结与对比简单类比多处理器体系结构中的三个基本概念:SISD、SIMD 和 MIMD,这些概念由迈克尔弗林(Michael Flynn)于1966年提出,被称为弗林分类法(Flynns Taxonomy)。它根据指令流(…...

java课堂问题2

1.1changeStr(String x):方法内部尝试将传入的字符串参数重新赋值为 "xyz",但该操作仅在方法内部有效,不会影响外部实参 changeArr(String[] strs):遍历传入的字符串数组,对数组中的每个元素进行修改,在原字符串后拼接其索引值(例如将第 0 个元素改为 "原…...

集训总结(六)

9.15 听 CEO 讲了 sb 树,不知道该写什么,挂个祂博客的链接吧。 https://www.cnblogs.com/Augenstern-/p/18964066...

GAS_Aura-Prediction GAS

1讲了关于GAS中的网络之间,Client-Server的网络同步时,需要使用预测...

PromptPilot 产品发布:火山引擎助力AI提示词优化的新利器

周六非常荣幸参加了火山引擎官方举办的PromptPilot产品发布会。其实早在8月份,我就有幸参与了该产品的内测阶段,并撰写了一些体验心得和感受。此次发布会当天,不仅深入聆听到了产品负责人以及工程师们对PromptPilot的全新解读和详细介绍,还现场感受到了他们对产品未来发展方…...

安装window版本docker

下载 下载链接:https://hub.docker.com/?overlay=onboarding 在 Windows 上部署 Docker 的方法都是先安装一个虚拟机,VMware版本17.0以上可以兼容安装docker 另一个可以下载 Hyper-V,Hyper-V 是微软开发的虚拟机,类似于 VMWare 或 VirtualBox 选中Hyper-V 也可以通过命令…...

已严肃完成今日特征多项式大学习

何为特征值与特征向量 古人云:特征向量,乃方阵与线性变换之特征也。 盖线性变换,千变万化,寻不变其所向之向量,乃特征向量也。注意 0 向量不是特征向量。 何为特征值?线性变换中特征向量的伸长倍数,称该特征向量属于该特征值。 容易知道与一个特征向量共线的向量均为特征…...

docker部署Gitlab社区版,步骤以及外网访问出现502的解决方式 - 实践

docker部署Gitlab社区版,步骤以及外网访问出现502的解决方式 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier Ne…...