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

Java 基础面试题——关键字

目录

  • 1.Java 中的关键字是指什么?有哪些关键字?
  • 2.instanceof 关键字的作用是什么?
  • 3.访问修饰符 public、private、protected、以及不写(default)时的区别?
  • 4.Java 中有没有 goto 关键字?
  • 5.在 Java 中,如何跳出当前的多重嵌套循环?
  • 6.switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?
  • 7.final 关键字在 Java 中的用法有哪些?
  • 8.static 关键字的用法有哪些?
  • 9.this 和 super 这两个关键字有什么区别?
  • 10.throw 和 throws 的区别是什么?
  • 11.return 与 finally 的执行顺序对返回值有什么影响?
  • 12.什么时候用 assert?如何使用 assert?

1.Java 中的关键字是指什么?有哪些关键字?

(1)Java 关键字是对 Java 编译器有特殊含义的字符串,是编译器和程序员的一个约定,程序员利用关键字来告诉编译器其声明的变量类型、类、方法特性等信息

(2)Java语言共定义了如下所示的关键字:

分类关键字
访问控制private、protected、public
类,方法和变量修饰符abstract、class、extends、final、implements、interface、native、new、static、strictfp、synchronized、transient、volatile、enum
程序控制break、continue、return、do、while、if、else、for、instanceof、switch、case、default、assert
错误处理try、catch、throw、throws、finally
包相关import、package
基本类型boolean、byte、char、double、float、int、long、short
变量引用super、this、void
保留字goto、const

(3)注意事项:

  • 所有的关键字均是小写的,并且在 IDE 中会以特殊的颜色显示;
  • 在所有关键字中,default 这一关键字较为特殊,它既属于程序控制,也属于类,方法和变量修饰符,还属于访问控制;
    • 在程序控制中,当在 switch 中匹配不到任何情况时,可以使用 default 来编写默认匹配的情况;
    • 在类,方法和变量修饰符中,从 JDK8 开始引入了默认方法,可以使用 default 关键字来定义一个方法的默认实现;
    • 在访问控制中,如果一个方法前没有任何修饰符,则默认会有一个修饰符 default,但是加上这个修饰符反而会报错

2.instanceof 关键字的作用是什么?

instanceof 严格来说是 Java 中的一个双目运算符,用来测试一个对象是否为一个类的实例,具体用法如下:

boolean result = obj instanceof Class

其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回 false。此外,编译器会检查 obj 是否能转换成右边的 class 类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。见下面的示例:

class A {}class AA extends A {}class AAA extends AA {}public class Test {public static void main(String[] args) {A a = new A();AA aa = new AA();AAA aaa = new AAA();System.out.println(a instanceof A);     //trueSystem.out.println(a instanceof AA);    //falseSystem.out.println(aa instanceof AAA);  //falseSystem.out.println(aaa instanceof A);   //trueint i = 0;System.out.println(i instanceof Integer);	//编译不通过,i 必须是引用类型,不能是基本类型System.out.println(i instanceof Object);	//编译不通过//在 JavaSE 规范中,对 instanceof 运算符的规定是:如果 obj 为 null,那么将返回 falseSystem.out.println(null instanceof Object);		//false}
}

3.访问修饰符 public、private、protected、以及不写(default)时的区别?

作用域当前类同包子类外部包
public
protected×
default××
private×××

类的成员不写访问修饰时默认为 default。默认对于同一个包中的其他类相当于公开 (public),对于不是同一个包中的其他类相当于私有 (private)。受保护 (protected) 对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。

4.Java 中有没有 goto 关键字?

(1)goto 是 Java 中的保留字,在 Java 8 中没有使用。但是其实 goto 是 C 语言中的,goto 语句通常与条件语句配合使用,可用来实现条件转移, 构成循环,跳出循环体等功能。而在结构化程序语言中一般不主张使用 goto 语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。但是在 Java 语言中,goto 只是作为了保留字,还没有使用,因为 Java 追求简单,方便。

5.在 Java 中,如何跳出当前的多重嵌套循环?

在要跳出的循环前加一个标记如 A,然后用 “break A” 可以跳出多重循环。Java 支持带标签的 break 和 continue 语句,作用有点类似于 C 和 C++中的 goto,但是就像要避免使用 goto 一样,应该避免使用带标签的 break 和 continue,因为它可能会造成程序流程的混乱。例子如下:

class Test {public static void main(String[] args) {A: for (int i = 0; i < 10; i++) {for (int j = 0; j < 10; j++) {System.out.print(j + " ");if (j == 5) {break A;}}}}
}

结果如下:

0 1 2 3 4 5 

6.switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?

在 Java 5 以前,switch(expr)中,expr 只能是 byte、short、char、int。从 Java 5 开始,Java 中引入了枚举类型,expr 也可以是 enum 类型,从 Java 7 开始,expr 还可以是字符串 (String),但是长整型 (long) 在目前所有的版本中都是不可以的。

7.final 关键字在 Java 中的用法有哪些?

(1)被 final 修饰的不能够被继承,所有的方法不可以被重写,但其内的非 final 变量可以被修改;
(2)被 final 修饰的成员变量必须要初始化,赋初值后不能再重新赋值(可以调用对象方法修改属性值),对基本类型来说是其值不可变;
(3)对引用变量来说其引用不可变,即不能再指向其他的对象,但对象中的内容可以变化;
(4)被 final 修饰的方法不能重写,但 JVM 会尝试将其内联,以提高运行效率;

8.static 关键字的用法有哪些?

(1)static 修饰变量
① 被 static 修饰的成员变量属于类,不属于某个对象(多个对象访问或修改 static 修饰的成员变量时,其中一个对象将 static 成员变量进行了修改,其他的对象的 static 成员变量值跟着改变),多个对象共享同一个 static 成员变量
② 被 static 修饰的成员,可以通过类名直接访问;
③ 在静态方法中,不能访问非静态的内容(变量),不能使用 this/super;非静态中,可以访问静态中的变量;

(2)static 修饰方法
① static 修饰的方法被称之为静态方法,也叫类方法
② 加 static 的方法,可以通过类名直接访问,也可以通过对象名访问,且不能再内部写this,因为直接用类名.方法的时候,没有当前对象。而不加 static 只能通过对象名访问;
③ 加了 static 的方法,不能在内部访问非 static 的属性和行为,因为在静态方法的内部无法确定非 static 的内容属于那个对象,它是通过类名调用。

(3)static 修饰代码块
① 静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。
② 静态代码块只在第一次 new 执行一次,之后不再执行,而非静态代码块在每 new 一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。

(4)static 修饰类
① static 有一种特殊用法是修饰内部类(普通类是不允许声明为静态的,只有内部类才可以),被 static 修饰的内部类可以直接作为一个普通类来使用,而不需实例一个外部类;
② 当一个内部类没有使用 static 修饰的时候,不能直接使用内部类创建对象,需要先使用外部类对象+ . + new内部类对象。

9.this 和 super 这两个关键字有什么区别?

(1)this:

  • 可以近似看作对象内部指代自身的引用,但不能将 super 与 this 赋给另一个对象变量;
  • 解决成员变量和局部变量同名问题;
  • 可以调用成员变量、成员方法,但是不能调用局部变量;
  • this() 可以调用本类的构造器,但只限构造方法中使用,且必须是第一条语句
  • 在普通方法中可以省略 this,但在静态方法当中不允许出现 this 关键字;

(2)super:

  • 代表对当前对象的直接父类对象的引用;
  • 可以调用父类的非 private 成员变量和方法;
  • super() 可以调用父类的构造方法,只限构造方法中使用,且必须是第一条语句
class Demo {public Demo () {System.out.println("init Demo without arg...");}public Demo (int a) {System.out.println("init Demo with an arg...");}
}public class SubDemo extends Demo{public SubDemo() {super(1);System.out.println("init SubDemo without arg...");}public SubDemo(int a) {//调用本类的无参构造方法,但注意不能在无参构造方法的第一行调用 this(1),否则会出现构造方法循环调用this();System.out.println("init SubDemo with an arg...");}public SubDemo(int a, int b) {super();System.out.println("init SubDemo with two args...");}public static void main(String[] args) {SubDemo demo1 = new SubDemo(3);SubDemo demo2 = new SubDemo(3, 4);}
}
init Demo with an arg...
init SubDemo without arg...
init SubDemo with an arg...
init Demo without arg...
init SubDemo with two args...

10.throw 和 throws 的区别是什么?

(1)throw
① 表示方法内抛出某种异常对象(只能是一个);
② 用于程序员自行产生并抛出异常;
③ 位于方法体内部,可以作为单独语句使用;
④ 如果异常对象是非 RuntimeException,则需要在方法申明时加上该异常的抛出,即需要加上 throws 语句或者在方法体内使用 try catch 处理该异常,否则编译报错;
⑤ 执行到 throw 语句则后面的语句块不再执行;

(2)throws
① 方法的定义上使用 throws 表示这个方法可能抛出某些异常(可以有多个);
② 用于声明在该方法内抛出了异常;
③ 必须跟在方法参数列表的后面,不能单独使用;
④ 需要由方法的调用者进行异常处理;

package test;import java.io.IOException;class Solution {/*** 测试 throws 关键字* @throws NullPointerException*/public static void testThrows() throws NullPointerException {Integer i = null;System.out.println(i + 1);}/*** 测试 throw 关键字抛出运行时异常* @param i*/public static void testThrow(Integer i) {if (i == null) {//运行时异常不需要在方法上申明throw new NullPointerException();}}/*** 测试 throw 关键字抛出非运行时异常,需要方法体需要加 throws 异常抛出申明* @param filePath*/public static void testThrow(String filePath) throws IOException {if (filePath == null) {//非运行时异常,需要方法体需要加 throws 异常抛出申明throw new IOException();}}public static void main(String[] args) {testThrows();Integer i = null;testThrow(i);String filePath = null;try {testThrow(filePath);} catch (IOException e) {e.printStackTrace();}}
}

上述代码中三个方法对应的异常如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11.return 与 finally 的执行顺序对返回值有什么影响?

对于 try 和 finally 至少有一个语句块包含 return 语句的情况:
① 正常情况下(例如没有系统退出、出现异常等情况)finally 语句块会执行;
② 如果 finally 语句块中没有 return 语句,则 finally 对 return 语句中变量的重新赋值修改无效
③ 如果 try 和 finally 语句块中都包含 return 语句,则 return 值会以 finally 语句块中的 return 值为准

public class Test {public static void main(String args[]) {try {int a = 10 / 0;System.out.println(a);} catch (Exception e) {e.printStackTrace();//退出程序,finally 中的代码不会被执行System.exit(0);} finally {System.out.println("finally...");}}
}

结果如下:

java.lang.ArithmeticException: / by zeroat test.Test.main(Test.java:8)
public static void main(String[] args) {System.out.println(getInt());
}public static int getInt() {int a;try {a = 200;return a;} finally {System.out.println("finally...");a = 300;}
}

结果如下:

finally...
200
public static void main(String[] args) {System.out.println(getInt());
}public static int getInt() {int a;try {a = 200;return a;} finally {System.out.println("finally...");a = 300;return a;}
}

结果如下:

finally...
300

12.什么时候用 assert?如何使用 assert?

(1)assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。一般来说,assertion 用于保证程序最基本、关键的正确性。assertion 检查通常在开发和测试时开启
(2)为了提高性能,在软件发布后, assertion 检查通常是关闭的。在实现中,断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true;如果表达式计算为 false,那么系统会报告一个 AssertionError。
(3)断言用于调试目的:

assert(a > 0); // throws an AssertionError if a <= 0

(4)断言有以下两种形式:

assert Expr1; 
assert Expr1 : Expr2;

Expr1 应该总是产生一个布尔值。 Expr2 可以是得出一个值的任意表达式;这个值用于生成显示更多调试信息的字符串消息。这两种表达形式本质是一样的,不同在于第二种方式中,可以指定输出错误的信息。

(5)断言在默认情况下是禁用的。
① 要在编译时启用断言,需使用 source 1.4 标记:

javac -source 1.4 Test.java

② 要在运行时启用断言,可使用 -ea 或者 -enableassertions 标记。
③ 要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。
④ 要在系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。

(6)可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法 的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以 在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。

相关文章:

Java 基础面试题——关键字

目录1.Java 中的关键字是指什么&#xff1f;有哪些关键字&#xff1f;2.instanceof 关键字的作用是什么&#xff1f;3.访问修饰符 public、private、protected、以及不写&#xff08;default&#xff09;时的区别&#xff1f;4.Java 中有没有 goto 关键字?5.在 Java 中&#x…...

C++——运算符重载

1、运算符重载的概念 运算符重载&#xff0c;就是对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型。运算符重载的目的是让语法更加简洁运算符重载不能改变本来寓意&#xff0c;不能改变基础类型寓意运算符重载的本质是另一种函数调用…...

前端食堂技术周刊第 70 期:Volar 的新开端、Lighthouse 10、良好的组件设计、React 纪录片、2022 大前端总结

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;黑巧克力 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 本期摘要 Volar 的新开端Chrome 110 的新功能Lighthouse 10Nuxt v3.2.0加速 JavaSc…...

react路由详解

在学习react路由之前&#xff0c;我们肯定需要安装路由。大家先运行如下命令安装路由。安装之后随我一起探索react路由。 安装 版本v6 npm i react-router-dom -S 页面准备 创建两个文件夹 pages和 router pages文件夹里面放的是页面 router文件夹里面是进行路由配置 路由…...

mysql数据库完全备份和增量备份与恢复

mysql数据备份&#xff1a; 数据备份方式 物理备份&#xff1a; 冷备&#xff1a;.冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库热备&#xff1a;一般用于保证服务正常不间断运行&#xff0c;用两台机器作为服务机器&#xff0c;一台用于实际数据库操作应用,另外…...

CF1667E Centroid Probabilities

题目描述 对于所有点数为 nnn 的树&#xff0c;如果其满足 对于所有 i∈[2,n]i\in [2,n]i∈[2,n]&#xff0c;与 iii 相连的 jjj 中有且只有一个点 jjj 满足 j<ij<ij<i &#xff0c;那么我们称其为好树 对于 1∼n1\sim n1∼n 每个点求出来有多少好树满足重心为 iii …...

全网详细总结com.alibaba.fastjson.JSONException: syntax error, position at xxx常见错误方式

文章目录1. 复现问题2. 分析问题3. 解决问题4. 该错误的其他解决方法5. 重要补充1. 复现问题 今天在JSONObject.parse(json)这个方法时&#xff0c;却报出如下错误&#xff1a; com.alibaba.fastjson.JSONException: syntax error, position at 0, name usernameat com.aliba…...

快速部署个人导航页:美好的一天从井然有序开始

很多人都习惯使用浏览器自带的收藏夹来管理自己的书签&#xff0c;然而收藏夹存在着一些问题。 经过长时间的累积&#xff0c;一些高频使用的重要网站和偶尔信手收藏的链接混在了一起&#xff0c;收藏夹因为内容过多而显得杂乱无章&#xff1b;收藏夹没有什么美观可言&#xf…...

【Python】如何在 Python 中使用“柯里化”编写干净且可重用的代码

对于中级Python开发者来说&#xff0c;了解了Python的基础语法、库、方法&#xff0c;能够实现一些功能之后&#xff0c;进一步追求的就应该是写出优雅的代码了。 这里介绍一个很有趣的概念“柯里化”。 所谓柯里化&#xff08;Currying&#xff09;是把接受多个参数的函数变换…...

ROS笔记(4)——发布者Publisher与订阅者Subscribe的编程实现

发布者 以小海龟的话题消息为例,编程实现发布者通过/turtle1/cmd_vel 话题向 turtlesim节点发送消息&#xff0c;流程如图 步骤一 创建功能包&#xff08;工作空间为~/catkin_ws/src&#xff09; $ cd ~/catkin_ws/src $ catkin_create_pkg learning_topic roscpp rospy s…...

Linux进程概念(一)

文章目录Linux进程概念&#xff08;一&#xff09;1. 冯诺依曼体系结构2. 操作系统(Operator System)2.1 考虑2.2 如何理解操作系统对硬件做管理&#xff1f;2.3 操作系统为什么要对软硬件资源做管理呢&#xff1f;2.4 系统调用和库函数概念2.5 计算机体系结构3. 进程的初步理解…...

Leetcode.1124 表现良好的最长时间段

题目链接 Leetcode.1124 表现良好的最长时间段 Rating &#xff1a; 1908 题目描述 我们认为当员工一天中的工作小时数大于 8 小时的时候&#xff0c;那么这一天就是「劳累的一天」。 所谓「表现良好的时间段」&#xff0c;意味在这段时间内&#xff0c;「劳累的天数」是严格…...

达梦数据库会话、事务阻塞排查步骤

查询阻塞的事务IDselect * from v$trxwait order by wait_time desc;--单机select * from v$dsc_trxwait order by wait_time desc;–DSC集群查询阻塞事务的会话信息select sf_get_session_sql(sess_id),* from v$sessions where trx_id69667;--单机select sf_get_session_sql(…...

sqlServer 2019 开发版(Developer)下载及安装

下载软件 官网只有2022的&#xff0c;2019使用百度网盘进行下载 安装下崽器 选择自定义安装 选择语言、以及安装位置 点击“安装” 安装 SQL Server 可能的故障 以上步骤安装后会弹出以上界面&#xff0c;如果未弹出&#xff0c;手动去安装目录下点击 SETUP.EXE 文件…...

使用Arthas定位问题

功能概述 首先&#xff0c;Arthas的常用功能大概有以下几个&#xff1a; 解决依赖冲突 sc命令&#xff1a;模糊查看当前 JVM 中是否加载了包含关键字的类&#xff0c;以及获取其完全名称。 sc -d 关键字 注意使用 sc -d 命令&#xff0c;获取 classLoaderHash命令&#xff1a…...

性能测试之tomcat+nginx负载均衡

nginx tomcat 配置准备工作&#xff1a;两个tomcat 执行命令 cp -r apache-tomcat-8.5.56 apache-tomcat-8.5.56_2修改被复制的tomcat2下conf的server.xml 的端口号&#xff0c;不能与tomcat1的端口号重复&#xff0c;不然会启动报错 ,一台电脑上想要启动多个tomcat&#xff0c…...

【手写 Vuex 源码】第十一篇 - Vuex 插件的开发

一&#xff0c;前言 上一篇&#xff0c;主要介绍了 Vuex-namespaced 命名空间的实现&#xff0c;主要涉及以下几个点&#xff1a; 命名空间的介绍和使用&#xff1b;命名空间的逻辑分析与代码实现&#xff1b;命名空间核心流程梳理&#xff1b; 本篇&#xff0c;继续介绍 Vu…...

opencv基础知识和绘图图形

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…...

15- 决策回归树, 随机森林, 极限森林 (决策树优化) (算法)

1. 决策回归树: from sklearn.tree import DecisionTreeRegressor model DecisionTreeRegressor(criterionmse,max_depth3) model.fit(X,y) # X是40个点 y是一个圆 2. 随机森林 稳定预测: from sklearn.ensemble import RandomForestClassifier # model RandomForestC…...

Flink相关的记录

Flink源码编译首次编译的时候&#xff0c;去除不必要的操作&#xff0c;同时install会把Flink中的module安装到本地仓库&#xff0c;这样依赖当前module的其他组件就无需去远程仓库拉取当前module&#xff0c;节省了时间。mvn clean install -T 4 -DskipTests -Dfast -Dmaven.c…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...