java笔记02
运算符
1.隐式转换和强制转换
类型转换的分类 1.隐式转换: 取值范围小的数值 转换为 取值范围大的数值 2.强制转换: 取值范围大的数值 转换为 取值范围小的数值隐式转换的两种提升规则 取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行运算 byte short char 三种类型的数据在运算的时候,都会直接先提升为 int,然后再进行运算byte => intint => long => float => doubleshort => int
// 判断结果的数据类型: // byte b1 = 10; // byte b2 = 20; // result = b1 + b2; // 数据类型 int // // int i = 10; // long n = 100L; // double d = 20.0; // result = i + n + d; // 数据类型 double // // byte b = 10; // short s = 20; // long n = 100L; // result = b + s + n; // 数据类型 long
强制转换 如果把一个取值范围大的数值,赋值给取值范围小的变量。是不允许直接赋值的。如果一定要这么做就需要加入强制转换。 格式:目标数据类型 变量名 =(目标数据类型) 被强转的数据;
// 范例:double a = 12.3;int b = (int) a;byte b1 = 100;byte b2 = 100;byte result = (byte)(b1 + b2);System.out.println(result);// -56 结果就发生错误了 因为要转换的数据过大
2.字符串和字符的加操作
字符串的 “+” 操作 当 “+” 操作中出现字符串时,这个 “+” 是字符串连接符,而不是算术运算符了。会将前后的数据进行拼接,并产生一个新的字符串。 “123” + 123 结果为 “123123” 连续进行 “+” 操作时,从左到右逐个执行。 1 + 99 + “年黑马” 结果为 “100 年黑马”
// 当 字符+字符 或 字符+数字 时,会把字符通过 ASCII 码表查询到对应的数字再进行计算。System.out.println(1 + 'a'); //98System.out.println('a' + 'c'); //196System.out.println('a' + "abc"); //aabc
3.自增自减运算符
// 单独使用: ++ 和 -- 无论是放在变量的前边还是后边,单独写一行结果是一样的。 // 参与计算: // 先用后加int a = 10;int b = a++; // 先加后用int a = 10;int b = ++a;
4.赋值运算符和关系运算符
赋值运算符符号 作用 说明= 赋值 int a = 10,将 10 赋值给变量 a+= 加后赋值 a += b,将 a + b 的值给 a-= 减后赋值 a -= b,将 a - b 的值给 a*= 乘后赋值 a *= b,将 a × b 的值给 a/= 除后赋值 a /= b,将 a ÷ b 的商给 a%= 取余后赋值 a %= b,将 a ÷ b 的余数给 a关系运算符符号 说明== a==b,判断 a 和 b 的值是否相等,成立为 true,不成立为 false!= a!=b,判断 a 和 b 的值是否不相等,成立为 true,不成立为 false> a>b,判断 a 是否大于 b,成立为 true,不成立为 false>= a>=b,判断 a 是否大于等于 b,成立为 true,不成立为 false< a<b,判断 a 是否小于 b,成立为 true,不成立为 false<= a<=b,判断 a 是否小于等于 b,成立为 true,不成立为 false
5.四种逻辑运算符和两个短路逻辑运算符
符号 作用 说明& 逻辑与(且) 并且,两边都为真,结果才是真| 逻辑或 或者,两边都为假,结果才是假^ 逻辑异或 相同为 false,不同为 true! 逻辑非 取反&& 短路与 结果和 & 相同,但是有短路效果|| 短路或 结果和 | 相同,但是有短路效果
6.三元运算符和运算符的优先级
(三元运算符 / 三元表达式) 格式格式:关系表达式? 表达式1: 表达式2;
// 范例:求两个数的较大值int max = a > b ? a : b;System.out.println(a > b ? a : b);
计算规则首先计算关系表达式的值如果值为 true,表达式 1 的值就是运算结果如果值为 false,表达式 2 的值就是运算结果小括号()的优先级最高
判断和循环
1.顺序结构
// 顺序结构语句是 Java 程序默认的执行流程,按照代码的先后顺序,从上到下依次执行System.out.println("努力做主人喜欢的事");System.out.println("大小姐驾到!统统闪开!");System.out.println("凛冬已至,故乡的梅花开了吗");System.out.println("心怀不惧,方能翱翔于天际");
2.分支结构if
if格式if(关系表达式){语句体;}if 的注意点:大括号的开头可以另起一行书写,但是建议写在第一行的末尾在语句体中,如果只有一句代码,大括号可以省略不写如果对一个布尔类型的变量进行判断,不要用 == 号if (关系表达式) {语句体1;} else {语句体2;}执行流程:I. 首先计算关系表达式的值II. 如果关系表达式的值为 true 就执行语句体 1III. 如果关系表达式的值为 false 就执行语句体 2IV. 继续执行后面的其他语句if (关系表达式1) {语句体1;} else if (关系表达式2) {语句体2;}...else {语句体 n + 1;}执行流程:I. 首先计算关系表达式 1 的值II. 如果为 true 就执行语句体 1;如果为 false 就计算关系表达式 2 的值III. 如果为 true 就执行语句体 2;如果为 false 就计算关系表达式 3 的值IV. ……V. 如果所有关系表达式结果都为 false,就执行语句体 n+1
3.分支结构switch
switch(表达式) {case 值1:语句体1;break;case 值2:语句体2;break;...default:语句体n+1;break;}执行流程:I. 首先计算表达式的值。II. 依次和 case 后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到 break 就会结束。III. 如果所有的 case 后面的值和表达式的值都不匹配,就会执行 default 里面的语句体,然后结束整个 switch 语句。default 的位置和省略位置:default 不一定是写在最下面的,我们可以写在任意位置。只不过习惯会写在最下面省略:default 可以省略,语法不会有问题,但是不建议省略。case 穿透就是语句体中没有写 break 导致的。执行流程:首先还是会拿着小括号中表达式的值跟下面每一个 case 进行匹配。如果匹配上了,就会执行对应的语句体,如果此时发现了 break,那么结束整个 switch 语句。如果没有发现 break,那么程序会继续执行下一个 case 的语句体,一直遇到 break 或者右大括号为止使用场景:如果多个 case 的语句体重复了,那么我们考虑利用 case 穿透去简化代码。
// 用箭头简写int number = 1;switch (number){case 1 -> {System.out.println("一");break;}case 2 -> {System.out.println("二");break;}case 3 -> {System.out.println("三");break;}default -> {System.out.println("没有这种选项");break;}}
// 省略大括号switch (number){case 1 -> System.out.println("一");case 2 -> System.out.println("二");case 3 -> System.out.println("三");default -> System.out.println("没有这种选项");}
4.循环语句for
格式:for (初始化语句 ;条件判断语句 ;条件控制语句) {循环体语句;}执行流程:
① 执行初始化语句
② 执行条件判断语句,看其结果是 true 还是 false如果是 false,循环结束如果是 true,执行循环体语句
③ 执行条件控制语句
④ 回到②继续执行条件判断语句
5.循环语句while
初始化语句;while(条件判断语句){循环体语句;条件控制语句;}for 和 while 的区别:for 循环中,控制循环的变量,因为归属 for 循环的语法结构中,在 for 循环结束后,就不能再次被访问到了while 循环中,控制循环的变量,对于 while 循环来说不归属其语法结构中,在 while 循环结束后,该变量还可以继续使用
循环高级综合练习
1.无限循环和跳转控制语句
//for格式的无限循环
for(;;){System.out.println("学习");
}
//while格式的无限循环
while(true){System.out.println("学习");
}
注意事项 无限循环的下面不能再写其他代码了,因为循环永远停不下来,那么下面的代码永远执行不到
//1.continue跳过某一次循环
for (int i = 1; i <= 5; i++) {if(i == 3){//结束本次循环,继续下次循环continue;}System.out.println("小老虎在吃第" + i + "个包子");
}
//2.结束整个循环
for (int i = 1; i <= 5; i++) {if(i == 3){//结束整个循环break;}System.out.println("小老虎在吃第" + i + "个包子");
数组
1.数组的概述和静态初始化
数组:是一种容器,可以用来存储同种数据类型的多个值数组容器在存储数据的时候,需要结合隐式转换考虑格式一:数据类型 [] 数组名范例:int [] array格式二:数据类型 数组名 []范例:int array[]数组的初始化初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程。数组初始化的两种方式1.静态初始化2.动态初始化数组的静态初始化初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程完整格式:数据类型 [] 数组名 = new 数据类型 []{元素1,元素2,元素3...};范例:int [] array = new int []{11, 22, 33};范例:double [] array2 = new double []{11.1, 22.2, 33.3};简化格式:数据类型 [] 数组名 = {元素1,元素2,元素3...};范例:int [] array = {11, 22, 33};范例:double [] array2 = {11.1, 22.2, 33.3};
//需求1:定义数组存储5个学生的年龄int[] arr1 = new int[]{11,12,13,14,15};int[] arr2 = {11,12,13,14,15};//需求2:定义数组存储3个学生的姓名String[] arr3 = new String[]{"zhangsan","lisi","wangwu"};String[] arr4 = {"zhangsan","lisi","wangwu"};//需求3:定义数组存储4个学生的身高 1.93double[] arr5 = new double[]{1.93,1.75,1.73,1.81};double[] arr6 = {1.93,1.75,1.73,1.81};
2.数组的地址值和元素访问
double[] arr6 = {1.93,1.75,1.73,1.81};
System.out.println(arr6);//[D@23fc625e 地址值
扩展:
解释一下地址值的格式含义 [D@23fc625e
[ :表示当前是一个数组
D:表示当前数组里面的元素都是double类型的
@:表示一个间隔符号。(固定格式)
23fc625e:才是数组真正的地址值,(十六进制)平时我们习惯性的会把这个整体叫做数组的地址值
数组元素访问 格式:数组名[索引]; 索引:也叫做下标,角标。 索引的特点:从 0 开始,逐个 + 1 增长,连续不间断利用索引对数组中的元素进行访问 1.获取数组里面的元素 格式: 数组名[索引]
int[] arr = {1,2,3,4,5};
//获取数组中的第一个元素
//其实就是0索引上对应的元素
int number = arr[0];
System.out.println(number);//1
//获取数组中1索引上对应的数据,并直接打印出来
System.out.println(arr[1]);//2//2.把数据存储到数组当中
//格式: 数组名[索引] = 具体数据/变量;
arr[0] = 100;
System.out.println(arr[0]);//100
3.数组的遍历
int[] arr = {1,2,3,4,5};
在Java当中,关于数组的一个长度属性,length
调用方式:数组名.lengthSystem.out.println(arr.length);for (int i = 0; i < arr.length; i++) {//i: 0 1 2 3 4System.out.println(arr[i]);}扩展:
自动的快速生成数组的遍历方式
idea提供的
数组名.fori
4.数组的动态初始化和常见问题
数组动态初始化动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。格式:数据类型[] 数组名 = new 数据类型[数组长度];范例:int[] arr = new int[3];
//在创建的时候,由我们自己指定数组的长度,由虚拟机给出默认的初始化值String[] arr = new String[50]; //添加学生arr[0] = "zhangsan";arr[1] = "lisi"; //获取System.out.println(arr[0]);//zhangsanSystem.out.println(arr[1]);//lisiSystem.out.println(arr[2]);//打印出来的是默认初始化值null
数组默认初始化值的规律 整数类型:默认初始化值0 小数类型:默认初始化值0.0 字符类型:默认初始化值'\u0000' 空格 布尔类型:默认初始化值 false 引用数据类型:默认初始化值 null
int[] arr2 = new int[3]; System.out.println(arr2[0]);//0 System.out.println(arr2[1]);//0 System.out.println(arr2[2]);//0
数组动态初始化和静态初始化的区别 动态初始化:手动指定数组长度,由系统给出默认初始化值。 只明确元素个数,不明确具体数值,推荐使用动态初始化 静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度。 需求中已经明确了要操作的具体数据,直接静态初始化即可。
数组常见问题当访问了数组中不存在的索引,就会引发索引越界异常。
5.数组的内存圈
Java 内存分配 栈:方法运行时使用的内存,比如 main 方法运行,进入方法栈中执行 堆:存储对象或者数组,new 来创建的,都存储在堆内存 方法区:存储可以运行的 class 文件 本地方法栈:JVM 在使用操作系统功能的时候使用,和我们开发无关 寄存器:给 CPU 使用,和我们开发无关
方法
1.什么是方法
什么是方法?方法是程序中最小的执行单元实际开发中,什么时候用到方法?重复的代码、具有独立功能的代码可以抽取到方法中实际开发中,方法有什么好处?可以提高代码的复用性可以提高代码的可维护性
2.最简单的方法定义和调用
方法定义格式public static void 方法名 (){方法体(就是打包起来的代码);}范例public static void playGame (){七个打印语句;}方法调用格式方法名();范例playGame();注意:方法必须先定义后调用,否则程序将报错
//定义一个方法
public static void playGame(){System.out.println("选人物");System.out.println("准备开局");System.out.println("对线");System.out.println("崩盘");System.out.println("骂队友");System.out.println("送人头");System.out.println("GG");
}
//调用方法 playGame();
3.带参数的方法定义和调用
带参数的方法定义单个参数格式:public static void 方法名(参数){......}范例:public static void method(int number){......}多个参数格式:public static void 方法名(参数1, 参数2, ......){......}范例:public static void getSum(int number1, int number2){......}带参数的方法调用单个参数单个参数:方法名(参数);范例 1:method(10);范例 2:method(变量);多个参数多个参数:方法名(参数1, 参数2, ……);范例 1:getSum(10,20);范例 2:getSum(变量1, 变量2);
public static void main(String[] args) {getSum(10,20);}public static void getSum(int num1, int num2){int result = num1 + num2;System.out.println(result);}
形参和实参形参:全称形式参数,是指方法定义中的参数实参:全称实际参数,方法调用中的参数注意:方法调用时,形参和实参必须一一对应,否则程序将报错。
4.带返回值方法的定义和调用
方法的返回值其实就是方法运行的最终结果如果在调用处要根据方法的结果,去编写另外一段代码逻辑为了在调用处拿到方法产生的结果,就需要定义带有返回值的方法带返回值方法定义格式public static 返回值类型 方法名(参数) {方法体;return 返回值;}范例public static int getSum(int a, int b) {int c = a + b;return c;}带返回值方法的调用直接调用:方法名 (实参);赋值调用:整数类型 变量名 = 方法名 (实参);输出调用:System.out.println (方法名 (实参));
return 关键字方法没有返回值:可以省略不写。如果书写,表示结束方法方法有返回值:必须要写。表示结束方法和返回结果
5.方法的重载
方法的重载在同一个类中,定义了多个同名的方法,这些同名的方法具有同种的功能。每个方法具有不同的参数类型或参数个数,这些同名的方法,就构成了重载关系简单记:同一个类中,方法名相同,参数不同的方法。与返回值无关。参数不同:个数不同、类型不同、顺序不同
相关文章:
java笔记02
运算符 1.隐式转换和强制转换 类型转换的分类 1.隐式转换: 取值范围小的数值 转换为 取值范围大的数值 2.强制转换: 取值范围大的数值 转换为 取值范围小的数值隐式转换的两种提升规则 取值范围小的,和取值范围大的进行运算,小的…...
为什么视频文件需要压缩?怎样压缩视频体积即小又清晰?
在日常生活中,无论是为了节省存储空间、便于分享还是提升上传速度,我们常常会遇到需要压缩视频的情况。本文将介绍为什么视频需要压缩,压缩视频的好处与坏处,并教你如何使用简鹿视频格式转换器轻松完成MP4视频文件的压缩。 为什么…...
Nginx — Nginx处理Web请求机制解析
一、Nginx请求默认页面资源 1、配置文件详解 修改端口号为8080并重启服务: 二、Nginx进程模型 1、nginx常用命令解析 master进程:主进程(只有一个) worker进程:工作进程(可以有多个,默认只有一…...
GPT Workspace体验
GPT Workspace是一款将强大的自然语言处理模型(如 ChatGPT 和 Gemini)集成到 Google Workspace 应用(如 Google Docs, Sheets, Slides, Gmail 和 Drive)中的工具或插件。它的目标是提升用户在日常办公中的效率和创造力。 以下是对…...
1.3 斐波那契数列模型:LeetCode 746. 使用最小花费爬楼梯
动态规划解最小花费爬楼梯问题:LeetCode 746. 使用最小花费爬楼梯 1. 题目链接 LeetCode 746. 使用最小花费爬楼梯 题目要求:给定一个整数数组 cost,其中 cost[i] 是从楼梯第 i 阶向上爬所需支付的费用。你可以从下标 0 或 1 的台阶开始爬&a…...
5.0 WPF的基础介绍1-Grid,Stack,button
WPF: Window Presentation Foundation. WPF与WinForms的对比如下: 特性WinFormsWPF技术基础基于传统的GDI(图形设备接口)基于DirectX,支持硬件加速的矢量渲染UI设计方式拖拽控件事件驱动代码(简单但局限)…...
Docker 端口映射原理
在 Docker 中,默认情况下容器无法直接与外部网络通信。 为了使外部网络能够访问容器内的服务,Docker 提供了端口映射功能,通过将宿主机的端口映射到容器内的端口,外部可以通过宿主机的IP和端口访问容器内的服务 以下通过动手演示…...
SDL —— 将sdl渲染画面嵌入Qt窗口显示(附:源码)
🔔 SDL/SDL2 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 效果 使用QWidget加载了SDL的窗口,渲染器使用硬件加速跑GPU的。支持Qt窗口缩放或显示隐藏均不影响SDL的图像刷新。 操作步骤 1、在创建C++空工程时加入SDL,引入头文件时需…...
算法每日一练 (23)
💢欢迎来到张翊尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 算法每日一练 (23)最大正方形题目描述解题思路解题代码…...
UE5学习笔记 FPS游戏制作28 显式玩家子弹数
文章目录 添加变量修改ShootOnce方法,设计时减少子弹,没有子弹不能开枪在UI上显示 添加变量 在Gun类中添加BulletNum和ClipSize两个参数 BulletNum是当前还有多少子弹,ClipSize是一个弹匣多少子弹 Rifle的ClipSzie设置为30,Laun…...
2025前端八股文终极指南:从高频考点到降维打击的面试突围战
2025前端八股文终极指南:从高频考点到降维打击的面试突围战 一、2025前端八股文核心考点重构 1.1 新型响应式系统三连问 Vue3信号式响应性: // 信号式响应性底层实现 const [count, setCount] createSignal(0) effect(() > {console.log("当…...
《深入探索 Python 数据分析:用 Pandas 高效处理与可视化大型数据集》
《深入探索 Python 数据分析:用 Pandas 高效处理与可视化大型数据集》 引言:从零到分析高手 数据是当代社会最宝贵的资源,而数据分析技能是现代职业人不可或缺的一部分。在数据科学的领域中,Python 已成为当之无愧的“首选语言”,其强大的生态系统和简洁的语法让人如虎添…...
【实战】渗透测试下的文件操作
目录 Linux查找文件 Windows查找文件 查找可写目录 windows Linux 创建 Windows Linux 压缩 解压 远程解压文件 Linux查找文件 >find / -name index.php 查找木马文件 >find . -name *.php | xargs grep -n eval( >find . -name *.php | xargs grep -n ass…...
基于深度神经网络的图像防篡改检测方法研究
标题:基于深度神经网络的图像防篡改检测方法研究 内容:1.摘要 随着数字化时代的发展,图像篡改现象日益普遍,严重影响了图像信息的真实性和可靠性。本文旨在研究基于深度神经网络的图像防篡改检测方法,以有效识别被篡改的图像。通过收集大量真…...
vue如何实现前端控制动态路由
在 Vue.js 中,动态路由是一种根据不同用户权限或其他因素动态改变路由列表的功能。这种机制允许开发者根据后端提供的权限数据动态渲染前端路由,实现多用户权限系统,不同用户展示不同的导航菜单。 动态路由的配置 动态路由的配置涉及到前端…...
学成在线--day02
复习知识点 classPath: 类加载路径,也就是jvm找字节码文件的路径,我们自己写的类,以及依赖的包,都会放到这个路径下面用于加载。 跨域问题: 是由于浏览器的同源策略(协议,端口,ip…...
《构建有效的AI代理》学习笔记
原文链接:https://www.anthropic.com/engineering/building-effective-agents 《构建有效的AI代理》学习笔记 一、概述 核心结论 • 成功的AI代理系统往往基于简单、可组合的模式,而非复杂框架。 • 需在性能、成本与延迟之间权衡,仅在必要时增加复杂度…...
Go语言基础:数据类型
一、基础数据类型:Go语言的积木块 1.1 数字类型全家福 package mainimport ("fmt" )func main() {// 有符号整数类型var a int 42 // int 类型,自动选择32或64位var b int8 127 // int…...
数据处理专题(四)
目标 使用 Matplotlib 进行基本的数据可视化。 学习内容 绘制折线图 绘制散点图 绘制柱状图 代码示例 1. 导入必要的库 import matplotlib.pyplot as pltimport numpy as npimport pandas as pd 2. 创建示例数据集 # 创建示例数据集data { 月份: [1月, 2月, 3…...
【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解
【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解 文章目录 【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解前言YOLOV1的模型结构YOLOV1模型的基本执行流程YOLOV1模型的网络参数YOLOV1模型的训练方式 YOLOV1的核心思想前向传播阶段网格单元(grid cell)…...
云钥科技多通道工业相机解决方案设计
项目应用场景分析与需求挑战 1. 应用场景 目标领域:工业自动化检测(如精密零件尺寸测量、表面缺陷检测)、3D立体视觉(如物体建模、位姿识别)、动态运动追踪(如高速生产线监控)等。 核心…...
从零到一:ESP32与豆包大模型的RTC连续对话实现指南
一、对话效果演示 ESP32与豆包大模型的RTC连续对话 二、ESP-ADF 介绍 乐鑫 ESP-ADF(Espressif Audio Development Framework)是乐鑫科技(Espressif Systems)专为 ESP32 系列芯片开发的一款音频开发框架。它旨在简化基于 ESP32 芯…...
【深度学习与实战】2.3、线性回归模型与梯度下降法先导案例--最小二乘法(向量形式求解)
为了求解损失函数 对 的导数,并利用最小二乘法向量形式求解 的值 这是线性回归的平方误差损失函数,目标是最小化预测值 与真实值 之间的差距。 损失函数: 考虑多个样本的情况,损失函数为所有样本的平方误差之和&a…...
【Django】教程-2-前端-目录结构介绍
【Django】教程-1-安装创建项目目录结构介绍 3. 前端文件配置 3.1 目录介绍 在app下创建static文件夹, 是根据setting中的配置来的 STATIC_URL ‘static/’ templates目录,编写HTML模板(含有模板语法,继承,{% static ‘xx’ …...
JS判断对象是否为空的方法
在 JavaScript 中,判断一个对象是否为空对象(即没有自身可枚举属性),可以通过以下方法实现: 方法 1:使用 Object.keys() javascript function isEmptyObject(obj) {// 确保是普通对象(排除 n…...
详解list容器
1.list的介绍 list的底层结构是双向带头循环链表,允许随机的插入和删除,但其内存空间不是连续的。随机访问空间能力差,需要从头到尾遍历节点,不像vector一样高效支持 2.list的使用 构造函数 1.默认构造函数:创建一个…...
leetcode_977. 有序数组的平方_java
977. 有序数组的平方https://leetcode.cn/problems/squares-of-a-sorted-array/ 1.题目 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1…...
Spring Boot 3.4.3 基于 SpringDoc 2 和 Swagger 3 实现项目接口文档管理
在现代企业级应用开发中,前后端分离已成为主流模式,前端负责界面呈现,后端专注提供 RESTful API 接口。然而,接口文档的编写和维护往往是开发过程中的痛点。Spring Boot 3.4.3 结合 SpringDoc 2 和 Swagger 3,为开发者…...
前端面经分享(25/03/26)
北京一家做AI解决方案的公司,技术一面,15k-20k,要求3-5年 你们React项目里路由模式用的什么React里class组件和function组件都用过吗常用Hook,解释一下他们的作用useEffect第二个参数填空数组和不填有什么区别React组件通信的常用…...
Matlab基础知识与常见操作【无痛入门】
【1】Matlab基本概念 【2】Matlab程序设计 【3】Matlab图形绘制 以上三篇文章为Matlab主要的应用场景,我在学习的过程中做一下记录,方便以后回顾。 接下来介绍下Matlab的工作界面,以及如何高效率的应用Matlab的帮助手册。在我看来&#x…...
