【Java基础】面试题汇总

  • Java基础面试题
    • 1. JVM vs JDK vs JRE
    • 2. 什么是字节码?采用字节码的好处是什么?
    • 3. 为什么说 Java 语言“编译与解释并存”?
    • 4. AOT 有什么优点?为什么不全部使用 AOT 呢?
    • 5. Java 和 C++ 的区别?
    • 6. Java 中的基本数据类型?
    • 7. 基本类型和包装类型的区别?
    • 8. 包装类型的缓存机制了解么?
    • 9. 自动装箱与拆箱了解吗?原理是什么?
    • 10. 为什么浮点数运算的时候会有精度丢失的风险?
    • 11. 如何解决浮点数运算的精度丢失问题?
    • 12. 超过 long 整型的数据应该如何表示?
    • 13. 成员变量与局部变量的区别?
    • 14. 静态方法为什么不能调用非静态成员?
    • 15. 重载和重写有什么区别?
    • 16. 什么是可变长参数?
    • 17. 面向对象和面向过程的区别?
    • 18. 构造方法有哪些特点?是否可被 override?
    • 19. 面向对象三大特征
    • 20. 接口和抽象类有什么共同点和区别?
    • 21. 深拷贝和浅拷贝区别了解吗?什么是引用拷贝?
    • 22. == 和 equals() 的区别
    • 23. hashCode() 有什么用?
    • 24. 为什么要有 hashCode?
    • 25. 为什么重写 equals() 时必须重写 hashCode() 方法?
    • 26. String、StringBuffer、StringBuilder 的区别?
    • 27. String 为什么是不可变的?
    • 28. 字符串拼接用“+” 还是 StringBuilder?
    • 29. String的equals() 和 Object的equals() 有何区别?
    • 30. 字符串常量池的作用了解吗?
    • 31. String s1 = new String("abc");这句话创建了几个字符串对象?
    • 32. intern 方法有什么作用?
    • 33. String 类型的变量和常量做“+”运算时发生了什么?
    • 34. Java异常体系结构?
    • 35. try-catch-finally 如何使用?
    • 36. 如果在try或catch块中出现return,finally还会执行吗?
    • 37. finally 中的代码一定会执行吗?
    • 38. 什么是泛型?有什么作用?
    • 39. 泛型的使用方式有哪几种?
    • 40. 项目中哪里用到了泛型?
    • 41. 什么是序列化?什么是反序列化?
    • 42. I/O 流为什么要分为字节流和字符流呢?
    • 43. 值传递问题
    • 44. 什么是泛型擦除机制?为什么要擦除
    • 45. Unsafe 类有什么作用

Java基础面试题

1. JVM vs JDK vs JRE

答:

  • JVM :是运行Java字节码文件的虚拟机。字节码文件不同系统的JVM实现是Java “一次编译,随处运行” 的关键。
  • JRE:是 Java 运行时环境。包含:JVM、Java基础类库等。
  • JDK:是 Java 开发工具包,用于编写、编译Java程序。包含:JRE、javac、javap等工具。

在这里插入图片描述

2. 什么是字节码?采用字节码的好处是什么?

答:

  • 字节码: Java 程序编译后(javac)得到的扩展名为 .class 的文件。
  • 好处: 跨平台,可移植性好。 “一次编译,随处运行

3. 为什么说 Java 语言“编译与解释并存”?

答:

  • 由 Java 编写的程序需要先经过编译步骤,生成字节码(.class 文件),这种字节码必须由 Java 解释器来解释执行。

4. AOT 有什么优点?为什么不全部使用 AOT 呢?

答:

  • AOT(Ahead of Time Compilation):是JDK 9 引入的一种新的编译模式。
  • 和 JIT 不同的是,这种编译模式会在程序被执行前就将其编译成机器码,属于静态编译(C、 C++,Rust,Go 等语言就是静态编译)。
  • 优点:AOT 可以提高Java 程序的启动速度减少内存占用,适合云原生场景。
  • 为什么不全部使用AOT: AOT 编译无法支持 Java 的一些动态特性,如反射、动态代理、动态加载等。很多框架和库(如 Spring、CGLIB)都用到了这些特性。如果只使用 AOT 编译,那就没办法使用这些框架和库了。

在这里插入图片描述

5. Java 和 C++ 的区别?

答:

  • Java 有垃圾回收机制(GC),C++需要手动释放内存。
  • Java 的类是单继承的,C++ 支持多重继承。
  • C ++同时支持方法重载和操作符重载,Java 只支持方法重载

6. Java 中的基本数据类型?

答:

Java 中有 8 种基本数据类型,分别为:

  • 6种数字类型:
    • 4种整型:byteshortintlong
    • 2种浮点型:floatdouble
  • 1种字符类型:char
  • 1种布尔类型:boolean

在这里插入图片描述

7. 基本类型和包装类型的区别?

答:

  • 用途::包装类型可用于泛型,而基本类型不可以。
  • 存储方式: 基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量存放在 Java 虚拟机的堆中。包装类型属于对象类型,是存在于堆中。
  • 占用空间: 包装类型属于对象类型,占用的空间比基本类型要大
  • 默认值: 基本类型有各自的默认值,包装类型的默认值为null
  • 比较方式: 对于基本数据类型来说,== 比较的是值。对于包装数据类型来说 == 比较的是对象的内存地址。包装类型的比较,使用 equals() 方法。

8. 包装类型的缓存机制了解么?

答:

  • Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据
  • Float,Double 没有实现缓存机制。
  • Character 创建了数值在 [0,127] 范围的缓存数据

9. 自动装箱与拆箱了解吗?原理是什么?

答:

  • 装箱:将基本数据类型用它们对应的包装类型包装起来。
  • 拆箱:将包装类型转换为基本数据类型。
  • 原理:
    • Integer i = 10 等价于 Integer i = Integer.valueOf(10) 装箱
    • int n = i 等价于 int n = i.intValue() 拆箱

10. 为什么浮点数运算的时候会有精度丢失的风险?

答:

  • 无限循环的小数存储在计算机时(小数转换成二进制,小数部分需要一直乘2,直到为0),只能被截断,所以就会导致小数精度发生损失的情况。

11. 如何解决浮点数运算的精度丢失问题?

答:

  • 可以使用 BigDecimal 类来进行浮点数的运算。

12. 超过 long 整型的数据应该如何表示?

答:

  • 可以使用BigInteger类存储任意大小的整数。
  • BigInteger 内部使用 int[] 数组来存储数据。

13. 成员变量与局部变量的区别?

答:

  • 语法形式: 成员变量可以被public,private,static 等修饰符所修饰,局部变量不能被修饰符修饰。
  • 存储方式: 成员变量存储在堆中,局部变量存储在栈中。
  • 默认值: 成员变量有默认值,局部变量没有默认值。

14. 静态方法为什么不能调用非静态成员?

答:

  • 静态方法是属于类的,随着类一起加载
  • 静态方法加载的时候,还没有非静态成员。非静态成员是在对象实例化之后才存在。

15. 重载和重写有什么区别?

答:

  • 重载: 在同一个类中,方法名要相同,参数列表要不同,方法返回值和访问修饰符可以不同。
  • 重写:
    • 在子类中,方法名、参数列表必须相同(两同
    • 返回值类型比父类方法返回值类型更小或相等,抛出的异常范围小于等于父类(两小
    • 访问修饰符范围大于等于父类方法(一大

16. 什么是可变长参数?

答:

  • Java5 开始,Java 支持定义可变长参数
  • 可变长参数就是允许在调用方法时传入不定长度的参数(0个或多个)。
  • 注意: 可变参数只能作为函数的最后一个参数,但其前面可以有也可以没有任何其他参数。

17. 面向对象和面向过程的区别?

答:

  • 面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。
  • 面向对象会先抽象出对象,然后用对象执行方法的方式解决问题。
  • 面向对象更易维护易复用易扩展

18. 构造方法有哪些特点?是否可被 override?

答:

  • 名字与类名相同。
  • 没有返回值,但不能用 void 声明构造函数。
  • 构造方法不能被 override(重写),但是可以 overload(重载)

19. 面向对象三大特征

答:

  • 封装: 把属性和方法封装到一个对象内部。
  • 继承: 是一种类之间的扩展关系。子类拥有父类对象的属性和方法(包括私有属性和私有方法,但无法访问)。可以重写父类的方法。
  • 多态: 具体表现为父类的引用指向子类的实例。(编译看左边,运行看右边

20. 接口和抽象类有什么共同点和区别?

答:

共同点:

  • 都不能被实例化,虽然抽象类有构造方法。
  • 都可以包含抽象方法。
  • 都可以有默认实现的方法(Java 8 可以用 default 关键字在接口中定义默认方法)。

区别:

  • 子类可以继承抽象类,子类可以实现接口。
  • 抽象类有构造方法,接口没有
  • 接口中的成员变量都是由 public static final 修饰的
  • 一个类只能继承一个类,但是可以实现多个接口。接口与接口之间是可以多继承

21. 深拷贝和浅拷贝区别了解吗?什么是引用拷贝?

答:

  • 浅拷贝: 会在堆上创建一个新的对象,但如果对象内部的成员变量是引用类型的话,会复用这个引用地址。也就是说拷贝对象和原对象共用同一个内部对象。
  • 深拷贝: 深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。
  • 引用拷贝: 两个不同的引用指向同一个对象

在这里插入图片描述

22. == 和 equals() 的区别

答:

== 对于基本类型和引用类型的作用效果是不同的:

  • 对于基本数据类型来说,== 比较的是
  • 对于引用数据类型来说,== 比较的是对象的内存地址

equals() 方法存在两种使用情况:

  • 类没有重写 equals()方法:通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象,使用的默认是 Object类equals()方法。
  • 类重写了 equals()方法:一般会重写equals(),判断如果对象的属性相同,才认为是同一个对象。

23. hashCode() 有什么用?

答:

  • hashCode() 的作用是获取哈希码,确定该对象在哈希表中的索引位置。
  • hashCode() 定义在 Object 类中,任何类都包含有 hashCode() 函数

24. 为什么要有 hashCode?

答:

  • 有 hashCode,才能快速的找到对象在哈希表中的位置。
  • 比如:在使用 HashSet 时,要求元素不能重复,如果没有 hashCode,则在添加元素时,需要一个一个的与集合中的元素进行比较。有了 hashCode 后,先判断对应哈希位置是否有元素,如果没有,则认为集合中没有这个元素。如果有,则再调用 equals()方法,比较元素的属性是否相同。
  • 这样就大大减少了 equals 的次数,相应就大大提高了执行速度。

25. 为什么重写 equals() 时必须重写 hashCode() 方法?

答:

  • 重写 equals() 方法用来比较对象的属性是否相同。
  • 重写了 equals() 了,但没有重写 hashCode() 方法,hashCode() 还是根据地址值生成的哈希码。那么在使用 HashSet 集合时,有2个不同的对象,他们的属性值相同,但是地址不一样,但还是会加入到HashSet集合中。

26. String、StringBuffer、StringBuilder 的区别?

答:

  • String: 是不可变的,即变量指向对象的地址不能改变
  • StringBuffer: 继承 AbstractStringBuilder 类,AbstractStringBuilder 类中使用字符数组保存字符串,并且定义了许多修改字符串的方法(append())。StringBuffer 对方法加了同步锁,保证线程安全。
  • StringBuilder: 同样也继承 AbstractStringBuilder 类,方法没有加锁,不能保证线程安全。

27. String 为什么是不可变的?

答:

  • String 类中使用 private 关键字修饰字符数组来保存字符串,没有提供/暴露修改这个字符串的方法。
  • String 类被 final 修饰导致其不能被继承,进而避免了子类破坏 String 不可变。

28. 字符串拼接用“+” 还是 StringBuilder?

答:

  • 字符串对象通过“+”的字符串拼接方式,实际上是通过 StringBuilder 调用 append() 方法实现的,拼接完成之后调用 toString() 得到一个 String 对象 。
  • 注意:在循环内使用“+”进行字符串的拼接的话,会创建多个的 StringBuilder 对象。

29. String的equals() 和 Object的equals() 有何区别?

答:

  • String 中的 equals 方法是被重写过的,比较的是 String 字符串的值是否相等。 Object 的 equals 方法是比较的对象的内存地址。

30. 字符串常量池的作用了解吗?

答:

  • 字符串常量池是 JVM 为了提升性能和减少内存消耗针对字符串(String 类)在堆上专门开辟的一块区域。
  • 主要目的是为了避免字符串的重复创建

31. String s1 = new String(“abc”);这句话创建了几个字符串对象?

答:

会创建 12 个字符串对象。

  • 如果字符串常量池中没有 “abc” 的引用,则会在堆中创建2个字符串对象,将其中一个引用保存到字符串常量池中。
  • 如果字符串常量池有了“abc”的引用,则会在堆中创建1个字符串对象,局部变量s1会指向这个对象。

32. intern 方法有什么作用?

答:

  • intern() 是一个 native(本地)方法,其作用是将指定的字符串对象的引用保存在字符串常量池中,可以简单分为两种情况:
    • 如果字符串常量池中保存了对应的字符串对象的引用,就直接返回该引用。
    • 如果字符串常量池中没有保存了对应的字符串对象的引用,那就在常量池中创建一个指向该字符串对象的引用并返回。

33. String 类型的变量和常量做“+”运算时发生了什么?

答:

  • 如果是2个字符串常量做 +, 则在编译期间会将2个字符串拼接,之后 JVM 会放入到字符串常量池中。
  • 如果字符串常量和变量做 +,因为引用的值在程序编译期是无法确定,所以编译器无法对其进行优化。还是会在堆中创建对象。
  • 注意:字符串变量使用 final 关键字声明之后,可以让编译器当做常量来处理。
String str1 = "str";
String str2 = "ing";
String str3 = "str" + "ing";
String str4 = str1 + str2;
String str5 = "string";
System.out.println(str3 == str4);//false
System.out.println(str3 == str5);//true

final String str1 = "str";
final String str2 = "ing";
// 下面两个表达式其实是等价的
String c = "str" + "ing";// 常量池中的对象
String d = str1 + str2; // 常量池中的对象
System.out.println(c == d);// true

34. Java异常体系结构?

答:

异常的基类是Throwable类,它有2个子类:

  • Exception:用户程序可以捕获的异常。
  • Error: 程序无法处理的错误。例如:StackOverflowError 堆栈溢出错误等。

Exception 又分为 Checked Exception (受检异常,必须处理) 和 Unchecked Exception (非受检异常,可以不处理)

  • 受检异常:必须使用 try-catch 进行捕获,或是用 throws 向上抛出。
    • IOException
    • FileNotFoundException
  • 非受检异常:程序不需要进行处理,就可以通过编译。
    • NullPointerException
    • ClassCastException
    • IllegalArgumentException
    • IndexOutOfBoundsException

35. try-catch-finally 如何使用?

答:

  • try块:用于捕获异常。其后可接零个多个 catch 块,如果没有 catch 块,则必须跟一个 finally 块
  • catch块:用于处理 try 捕获到的异常。
  • finally 块:无论是否捕获或处理异常,finally 块里的语句都会被执行。当在 try 块或 catch 块中遇到 return 语句时,finally 语句块将在方法返回之前被执行。

36. 如果在try或catch块中出现return,finally还会执行吗?

答:

  • 会执行,执行完finally后,再去执行 try 或 catch 块中出现return。
  • 注意: 如果 finally 中有 return,则在 finally 中会直接结束,不再执行 try 或 catch 块中出现return。

37. finally 中的代码一定会执行吗?

答:

不一定

  • 在 finally 语句中发生了异常,不会执行
  • 程序所有的线程死亡,不会执行
  • 关闭CPU,不会执行

38. 什么是泛型?有什么作用?

答:

  • 使用泛型参数,可以增强代码的可读性以及稳定性。
  • 比如:可以使用泛型,指定往集合中存哪种类型的数据。编译器可以对泛型参数进行检测。

39. 泛型的使用方式有哪几种?

答:

  • 泛型一般有三种使用方式:泛型类泛型接口泛型方法

40. 项目中哪里用到了泛型?

答:

  • 自定义接口通用返回结果 ResponseResult 通过参数 T 可根据具体的返回类型动态指定结果的数据类型
  • 工具类

41. 什么是序列化?什么是反序列化?

答:

如果我们要把Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。

  • 序列化:将对象转换成二进制字节流的过程
  • 反序列化:将二进制字节流转换成对象的过程

注意: 使用 static 修饰的变量不会被序列化。

42. I/O 流为什么要分为字节流和字符流呢?

答:

问题本质想问:不管是文件读写还是网络发送接收,信息的最小存储单元都是字节,那为什么 I/O 流操作要分为字节流操作和字符流操作呢?

  • 如果接收方不知道字符编码类型的话,解码会出现乱码问题。例如:UTF-8的编码,中文占3个字节,GBK,中文占2个字节。
  • 所以,直接使用字符流避免乱码。

43. 值传递问题

答:

Java 中将实参传递给方法(或函数)的方式是 值传递

  • 如果参数是基本类型的话,传递的就是基本类型的字面量值的拷贝,会创建副本。
  • 如果参数是引用类型,传递的就是实参所引用的对象在堆中地址值的拷贝,同样也会创建副本。

44. 什么是泛型擦除机制?为什么要擦除

答:

  • 泛型擦除:是指在编译期间,会把泛型擦除为 Object 或将 T extends xxx 擦除为其限定类型 xxx 。
  • 为什么要擦除:保证引入泛型机制但不创建新的类型,减少JVM运行开销

45. Unsafe 类有什么作用

答:

  • Unsafe 类可以直接访问系统内存资源自主管理内存资源。一般不建议直接使用Unsafe类。
  • 用途:
    • 内存操作:可以直接对内存进行读写操作,包括获取对象字段的偏移量、设置对象字段的值、获取和设置数组元素的值等。
    • 类的加载和初始化:可以手动加载和初始化类,执行类构造器等操作
    • CAS操作:提供了对CAS(Compare And Swap)操作的支持
    • 线程调度:可以手动创建和操作线程

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法第三十九天-验证二叉树的前序序列化

验证二叉树的前序序列化 题目要求 解题思路 方法一:栈 栈的思路是「自底向上」的想法。下面要结合本题是「前序遍历」这个重要特点。 我们知道「前序遍历」是按照「根节点-左子树-右子树」的顺序遍历的,只有当根节点的所有左子树遍历完成之后&#xf…

代码随想录第32天|455.分发饼干 376. 摆动序列

理论基础 贪心算法核心:选择每一阶段的局部最优,从而达到全局最优。 455.分发饼干 455. 分发饼干 - 力扣(LeetCode)代码随想录 (programmercarl.com)455. 分发饼干 - 力扣(LeetCode) 贪心算法理论基础&am…

LeetCode:1483. 树节点的第 K 个祖先(倍增 Java)

目录 1483. 树节点的第 K 个祖先 题目描述: 实现代码与解析: 倍增 原理思路: 1483. 树节点的第 K 个祖先 题目描述: 给你一棵树,树上有 n 个节点,按从 0 到 n-1 编号。树以父节点数组的形式给出&#…

【Vue】Vue3中的OptionsAPI与CompositionAPI

文章目录 OptionsAPICompositionAPI对比总结 OptionsAPI 中文名:选项式API通过定义methods,computed,watch,data等属性方法&#xff0c;处理页面逻辑。以下是OptionsAPI代码结构 实例代码: <script lang"ts">// js或者tsimport { defineComponent } from vu…

HubSpot如何通过自动化和优化客户服务流程,提升客户满意度和忠诚度?

HubSpot通过自动化和优化客户服务流程&#xff0c;可以有效地提升客户满意度和忠诚度。以下是HubSpot实现这一目标的几个关键步骤&#xff1a; 建立清晰的服务流程&#xff1a;首先&#xff0c;HubSpot帮助企业建立清晰、标准化的客户服务流程。这包括明确的服务阶段定义&…

git分支 - 分支简介

分支 几乎每个版本控制系统都有某种形式的分支支持。分支意味着偏离了主开发线&#xff0c;并继续进行工作&#xff0c;而不会影响到主开发线。在许多版本控制系统工具中&#xff0c;这是一个比较昂贵的过程&#xff0c;通常需要创建源代码目录的一个新副本&#xff0c;对于大…

第7章 数据安全

思维导图 7.1 引言 数据安全包括安全策略和过程的规划、建立与执行&#xff0c;为数据和信息资产提供正确的身份验证、授权、访问和审计。虽然数据安全的详细情况(如哪些数据需要保护)因行业和国家有所不同&#xff0c;但是数据安全实践的目标是相同的&#xff0c;即根据隐私和…

链表之双向链表的实现

铁汁们大家好&#xff0c;我们上一篇博客学习了单链表&#xff0c;这节课让我们继续往深学习&#xff0c;学习一下双线链表&#xff0c;话不多说&#xff0c;我们开始吧&#xff01; 目录 1.双向链表 2.顺序表和链表的优缺点 3.双向链表的实现 1.双向链表 1.我们要实现的双线…

Elasticsearch快速上手

基本概念 索引&#xff08;Index&#xff09; 索引是文档的容器&#xff0c;就像关系数据库中&#xff0c;要存储行记录必须先创建数据库和表一样。 类型&#xff08;Type&#xff09; ES6 及之前的版本还存在”类型“的概念&#xff0c;一个索引下可以存储多个类型的文档&am…

探索数据结构:特殊的双向队列

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 双向队列的定义 **双向队列(double‑ended queue)**是一种特殊的队列…

Ant Design Pro | 前端项目初始化

初始化项目 环境确认 这里使用的版本如下&#xff1a; 新建文件夹&#xff08;fapi&#xff09; 执行项目初始化命令 cmd进入命令行执行项目初始化命令&#xff0c;参考官网https://pro.ant.design/zh-CN/ # 使用 npm npm i ant-design/pro-cli -g # fapi-frontend是项目…

树莓派固件烧录教程(2024)

一、烧录工具准备 硬件准备&#xff1a; 16G及以上TF卡和读卡器&#xff0c;TF卡建议高速卡&#xff08;卡的读写速度直接影响树莓派的运行速度&#xff09;。 软件准备&#xff1a;&#xff08;下面二方法选其一即可&#xff09; 方法1&#xff1a;raspberry官方烧录工具R…

【高校科研前沿】中国科学院南京地理与湖泊研究所肖启涛博士为一作在Sci. Bull发文:我国湖泊二氧化碳从大气的源向汇转变

目录 1.文章简介 2.研究内容 3.文章引用 1.文章简介 论文名称&#xff1a;Lakes shifted from a carbon dioxide source to a sink over past two decades in China 第一作者及通讯作者&#xff1a;肖启涛&#xff08;博士生&#xff09;&#xff0c;段洪涛&#xff08;研究…

JavaSE继承和多态(下)

在了解多态之前我们先弄清以下三个概念&#xff1a; 方法的重写向上转型和向下转型动态绑定和静态绑定 一.方法的重写 重写(override)&#xff1a;也称为覆盖。重写是子类对父类非静态、非private修饰&#xff0c;非final修饰&#xff0c;非构造方法等的实现过程 进行重新编写,…

如何使用 langchain 与 openAI 连接

上一篇写了如何安装 langchain https://www.cnblogs.com/hailexuexi/p/18087602 这里主要说一个 langchain的使用 创建一个目录 langchain &#xff0c;在这个目录下创建两个文件 main.py 这段python代码&#xff0c;用到了openAI&#xff0c;需要openAI及FQ。这里只做…

c++的学习之路:16、string(3)

上章有一些东西当时没学到&#xff0c;这里学到了将在补充&#xff0c;文章末附上代码&#xff0c;思维导图。 目录 一、赋值重载 二、带模板的创建 三、析构函数 四、代码 五、思维导图 一、赋值重载 这里的赋值重载就是直接利用交换函数进行把传参生成的临时数据和需要…

IDEA中的Debug功能介绍

说明&#xff1a;本文介绍IDEA中的Debug功能&#xff0c;基于2023.2&#xff08;Ultimate Edition&#xff09;版本 简单介绍 首先&#xff0c;在程序需要停止的所在行号上&#xff0c;鼠标左键&#xff0c;可设置一个断点&#xff0c;是一个红色圆点标志&#xff0c;表示程序…

2023年下半年中级软件设计师上午真题及答案解析

01 02 03 04 05 06 07 08 09 10 篇幅有限&#xff0c;私我获取免费完整 pdf文件

php反序列化题目

[NewStarCTF 公开赛赛道]UnserializeOne 分析代码&#xff0c;最终需要调用到 file_get_contents 即可获得flag 从后往前分析 触发 __invoke 需要 以调用函数的方式调用一个对象 可以找到Start类 里的__isset中可以将类当作函数调用 所以需要调用到 __isset 就需要 isset()…

Steam上线真人乙游,女性玩家还愿意买单吗?

Steam上线了一款真人乙游《糟糕&#xff01;他们太爱我了怎么办&#xff1f;》&#xff08;以下简称《糟糕&#xff01;&#xff09;。 乍一听这个游戏名&#xff0c;似乎和《完蛋&#xff01;我被美女包围了&#xff01;》有异曲同工之妙&#xff0c;事实也确实如此&#xff…