好未来测开一面,挺简单!(0428面试原题解析)

沉默王二

共 9539字,需浏览 20分钟

 · 2024-04-28

大家好,我是二哥呀。

今天继续给大家分享春招面试题《好未来测开一面原题》,附详细答案,我会用通俗易懂+手绘图的方式,让天下所有的面渣都能逆袭 😁

二哥的 Java 面试指南

内容较长,建议正在冲刺 24 届春招和 25 届暑期实习、秋招的同学先收藏起来,面试的时候大概率会碰到,

好未来面经(详细)

说说 HTTP和 HTTPS 的区别

  1. HTTPS 是 HTTP 的增强版,在 HTTP 的基础上加入了 SSL/TLS 协议,确保数据在传输过程中是加密的。SSL/TLS 需要向 CA(证书权威机构)申请数字证书,用于验证服务器的身份。
  2. HTTP 的默认端⼝号是 80,URL 以http://开头;HTTPS 的默认端⼝号是 443,URL 以https://开头。

HTTP 请求消息和响应消息的格式

HTTP 的报文结构可以分为两类:请求报文和响应报文。两者在结构上相似,都包含了起始行头部消息正文

三分恶面渣逆袭:HTTP 报文

说下 HTTP 请求报文结构?

GET /index.html HTTP/1.1
Host: www.javabetter.cn
Accept: text/html
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3

①、请求行

包括方法(如 GET、POST)、请求的 URL 和 HTTP 协议的版本。例如:GET /index.html HTTP/1.1

②、请求头部

包含请求的附加信息,如客户端想要接收的内容类型、浏览器类型等。

请求头部由键值对组成,键和值之间用冒号分隔,每一行一个键值对。例如:

  • Host: www.javabetter.cn,表示请求的主机名(域名)
  • Accept: text/html,表示客户端可以接收的媒体类型
  • User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3,表示客户端的浏览器类型

③、空行

请求头部和消息正文之间有一个空行,表示请求头部结束。

④、消息正文(可选)

请求的具体内容,如 POST 请求中的表单数据;GET 请求中没有消息正文。

说下 HTTP 响应报文结构?

HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84
<html>
  <body>沉默王二很天真</body>
</html>

①、状态行

包括 HTTP 协议的版本、状态码(如 200、404)和状态消息(如 OK、NotFound)。例如:HTTP/1.0 200 OK

②、响应头部

包含响应的附加信息,如服务器类型、内容类型、内容长度等。也是键值对,例如:

  • Content-Type: text/plain,表示响应的内容类型
  • Content-Length: 137582,表示响应的内容长度
  • Expires: Thu, 05 Dec 1997 16:00:00 GMT,表示资源的过期时间
  • Last-Modified: Wed, 5 August 1996 15:55:28 GMT,表示资源的最后修改时间
  • Server: Apache 0.84,表示服务器类型

③、空行

表示响应头部结束。

④、消息正文(可选)

响应的具体内容,如 HTML 页面。不是所有的响应都有消息正文,如 204 No Content 状态码的响应。

知道 MySQL 的哪些函数,如 order by count()

MySQL 支持很多内置函数,包括执行计算、格式转换、日期处理等。我说一些自己常用的(挑一些自己熟悉的)。

用过哪些字符串函数来处理文本?

  • CONCAT(): 连接两个或多个字符串。
  • LENGTH(): 返回字符串的长度。
  • SUBSTRING(): 从字符串中提取子字符串。
  • REPLACE(): 替换字符串中的某部分。
  • LOWER()UPPER(): 分别将字符串转换为小写或大写。
  • TRIM(): 去除字符串两侧的空格或其他指定字符。
-- 连接字符串
SELECT CONCAT('沉默'' ''王二'AS concatenated_string;

-- 获取字符串长度
SELECT LENGTH('沉默 王二'AS string_length;

-- 提取子字符串
SELECT SUBSTRING('沉默 王二'15AS substring;

-- 替换字符串内容
SELECT REPLACE('沉默 王二''王二''MySQL'AS replaced_string;

-- 字符串转小写
SELECT LOWER('HELLO WORLD'AS lower_case;

-- 字符串转大写
SELECT UPPER('hello world'AS upper_case;

-- 去除字符串两侧的空格
SELECT TRIM('  沉默 王二  'AS trimmed_string;

用过哪些数值函数?

  • ABS(): 返回一个数的绝对值。
  • CEILING(): 返回大于或等于给定数值的最小整数。
  • FLOOR(): 返回小于或等于给定数值的最大整数。
  • ROUND(): 四舍五入到指定的小数位数。
  • MOD(): 返回除法操作的余数。
-- 返回绝对值
SELECT ABS(-123AS absolute_value;

-- 向上取整
SELECT CEILING(123.45AS ceiling_value;

-- 向下取整
SELECT FLOOR(123.45AS floor_value;

-- 四舍五入
SELECT ROUND(123.45672AS rounded_value;

-- 余数
SELECT MOD(103AS modulus;

用过哪些日期和时间函数?

  • NOW(): 返回当前的日期和时间。
  • CURDATE(): 返回当前的日期。
  • CURTIME(): 返回当前的时间。
  • DATE_ADD()DATE_SUB(): 在日期上加上或减去指定的时间间隔。
  • DATEDIFF(): 返回两个日期之间的天数。
  • DAY(), MONTH(), YEAR(): 分别返回日期的日、月、年部分。
-- 返回当前日期和时间
SELECT NOW() AS current_date_time;

-- 返回当前日期
SELECT CURDATE() AS current_date;

-- 返回当前时间
SELECT CURTIME() AS current_time;

-- 在日期上添加天数
SELECT DATE_ADD(CURDATE(), INTERVAL 10 DAYAS date_in_future;

-- 计算两个日期之间的天数
SELECT DATEDIFF('2024-12-31''2024-01-01'AS days_difference;

-- 返回日期的年份
SELECT YEAR(CURDATE()) AS current_year;

用过哪些汇总函数?

  • SUM(): 计算数值列的总和。
  • AVG(): 计算数值列的平均值。
  • COUNT(): 计算某列的行数。
  • MAX()MIN(): 分别返回列中的最大值和最小值。
  • GROUP_CONCAT(): 将多个行值连接为一个字符串。
-- 创建一个表并插入数据进行聚合查询
CREATE TABLE sales (
    product_id INT,
    sales_amount DECIMAL(102)
);

INSERT INTO sales (product_id, sales_amount) VALUES (1100.00);
INSERT INTO sales (product_id, sales_amount) VALUES (1150.00);
INSERT INTO sales (product_id, sales_amount) VALUES (2200.00);

-- 计算总和
SELECT SUM(sales_amount) AS total_sales FROM sales;

-- 计算平均值
SELECT AVG(sales_amount) AS average_sales FROM sales;

-- 计算总行数
SELECT COUNT(*) AS total_entries FROM sales;

-- 最大值和最小值
SELECT MAX(sales_amount) AS max_sale, MIN(sales_amount) AS min_sale FROM sales;

用过哪些逻辑函数?

  • IF(): 如果条件为真,则返回一个值;否则返回另一个值。
  • CASE: 根据一系列条件返回值。
  • COALESCE(): 返回参数列表中的第一个非 NULL 值。
-- IF函数
SELECT IF(1 > 0'True''False'AS simple_if;

-- CASE表达式
SELECT CASE WHEN 1 > 0 THEN 'True' ELSE 'False' END AS case_expression;

-- COALESCE函数
SELECT COALESCE(NULLNULL'First Non-Null Value''Second Non-Null Value'AS first_non_null;

用过哪些格式化函数?

  • FORMAT(): 格式化数字为格式化的字符串,通常用于货币显示。
-- 格式化数字
SELECT FORMAT(1234567.89452AS formatted_number;

用过哪些类型转换函数?

  • CAST(): 将一个值转换为指定的数据类型。
  • CONVERT(): 类似于CAST(),用于类型转换。
-- CAST函数
SELECT CAST('2024-01-01' AS DATEAS casted_date;

-- CONVERT函数
SELECT CONVERT('123', SIGNED INTEGERAS converted_number;

进程和线程的区别

进程说简单点就是我们在电脑上启动的一个个应用,比如我们启动一个浏览器,就会启动了一个浏览器进程。进程是操作系统资源分配的最小单位,它包括了程序、数据和进程控制块等。

线程说简单点就是我们在 Java 程序中启动的一个 main 线程,一个进程至少会有一个线程。当然了,我们也可以启动多个线程,比如说一个线程进行 IO 读写,一个线程进行加减乘除计算,这样就可以充分发挥多核 CPU 的优势,因为 IO 读写相对 CPU 计算来说慢得多。线程是 CPU 分配资源的基本单位。

三分恶面渣逆袭:进程与线程关系

一个进程中可以有多个线程,多个线程共用进程的堆和方法区(Java 虚拟机规范中的一个定义,JDK 8 以后的实现为元空间)资源,但是每个线程都会有自己的程序计数器和栈。

平常用什么编程语言

大一上先学习的 C语言,大一下半学期开始学习 Java,中间还学过一些 Python 和 JavaScript,但整体的感受上来说还是最喜欢 Java。

因为它可以做的事情太多了,既可以用它来爬一些数据做测试,还可以用它来写 Web 后端服务,就连一些轮子也可以用它来造,比如说我之前写过一个 MYDB 的轮子,就是用的 Java。

==和 equals 的区别

在 Java 中,== 操作符和 equals() 方法用于比较两个对象:

①、==:用于比较两个对象的引用,即它们是否指向同一个对象实例。

如果两个变量引用同一个对象实例,== 返回 true,否则返回 false

对于基本数据类型(如 int, double, char 等),== 比较的是值是否相等。

②、equals() 方法:用于比较两个对象的内容是否相等。默认情况下,equals() 方法的行为与 == 相同,即比较对象引用,如在超类 Object 中:

public boolean equals(Object obj) {
    return (this == obj);
}

然而,equals() 方法通常被各种类重写。例如,String 类重写了 equals() 方法,以便它可以比较两个字符串的字符内容是否完全一样。

二哥的 Java 进阶之路,String的equals()源码

举个例子:

String a = new String("沉默王二");
String b = new String("沉默王二");

// 使用 == 比较
System.out.println(a == b); // 输出 false,因为 a 和 b 引用不同的对象

// 使用 equals() 比较
System.out.println(a.equals(b)); // 输出 true,因为 a 和 b 的内容相同

String 是 Java 的基本数据类型吗,String 有哪些方法?

不是,String 是一个类,属于引用数据类型。Java 的基本数据类型包括八种:四种整型(byteshortintlong)、两种浮点型(floatdouble)、一种字符型(char)和一种布尔型(boolean)。

String 有哪些常用方法?

我自己常用的有:

  1. length() - 返回字符串的长度。
  2. charAt(int index) - 返回指定位置的字符。
  3. substring(int beginIndex, int endIndex) - 返回字符串的一个子串,从 beginIndexendIndex-1
  4. contains(CharSequence s) - 检查字符串是否包含指定的字符序列。
  5. equals(Object anotherObject) - 比较两个字符串的内容是否相等。
  6. indexOf(int ch)indexOf(String str) - 返回指定字符或字符串首次出现的位置。
  7. replace(char oldChar, char newChar)replace(CharSequence target, CharSequence replacement) - 替换字符串中的字符或字符序列。
  8. trim() - 去除字符串两端的空白字符。
  9. split(String regex) - 根据给定正则表达式的匹配拆分此字符串。

参考链接

  • 三分恶的面渣逆袭:https://javabetter.cn/sidebar/sanfene/nixi.html
  • 二哥的 Java 进阶之路:https://javabetter.cn

浏览 114
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报