好未来测开一面,挺简单!(0428面试原题解析)
共 9539字,需浏览 20分钟
·
2024-04-28 14:44
大家好,我是二哥呀。
今天继续给大家分享春招面试题《好未来测开一面原题》,附详细答案,我会用通俗易懂+手绘图的方式,让天下所有的面渣都能逆袭 😁
内容较长,建议正在冲刺 24 届春招和 25 届暑期实习、秋招的同学先收藏起来,面试的时候大概率会碰到,
1、二哥的 Linux 速查备忘手册.pdf 下载 2、三分恶面渣逆袭在线版:https://javabetter.cn/sidebar/sanfene/nixi.html
好未来面经(详细)
说说 HTTP和 HTTPS 的区别
-
HTTPS 是 HTTP 的增强版,在 HTTP 的基础上加入了 SSL/TLS 协议,确保数据在传输过程中是加密的。SSL/TLS 需要向 CA(证书权威机构)申请数字证书,用于验证服务器的身份。 -
HTTP 的默认端⼝号是 80,URL 以 http://
开头;HTTPS 的默认端⼝号是 443,URL 以https://
开头。
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('沉默 王二', 1, 5) AS 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(-123) AS absolute_value;
-- 向上取整
SELECT CEILING(123.45) AS ceiling_value;
-- 向下取整
SELECT FLOOR(123.45) AS floor_value;
-- 四舍五入
SELECT ROUND(123.4567, 2) AS rounded_value;
-- 余数
SELECT MOD(10, 3) AS 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 DAY) AS 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(10, 2)
);
INSERT INTO sales (product_id, sales_amount) VALUES (1, 100.00);
INSERT INTO sales (product_id, sales_amount) VALUES (1, 150.00);
INSERT INTO sales (product_id, sales_amount) VALUES (2, 200.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(NULL, NULL, 'First Non-Null Value', 'Second Non-Null Value') AS first_non_null;
用过哪些格式化函数?
-
FORMAT()
: 格式化数字为格式化的字符串,通常用于货币显示。
-- 格式化数字
SELECT FORMAT(1234567.8945, 2) AS formatted_number;
用过哪些类型转换函数?
-
CAST()
: 将一个值转换为指定的数据类型。 -
CONVERT()
: 类似于CAST()
,用于类型转换。
-- CAST函数
SELECT CAST('2024-01-01' AS DATE) AS casted_date;
-- CONVERT函数
SELECT CONVERT('123', SIGNED INTEGER) AS 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()
方法,以便它可以比较两个字符串的字符内容是否完全一样。
举个例子:
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 的基本数据类型包括八种:四种整型(byte
、short
、int
、long
)、两种浮点型(float
、double
)、一种字符型(char
)和一种布尔型(boolean
)。
String 有哪些常用方法?
我自己常用的有:
-
length()
- 返回字符串的长度。 -
charAt(int index)
- 返回指定位置的字符。 -
substring(int beginIndex, int endIndex)
- 返回字符串的一个子串,从beginIndex
到endIndex-1
。 -
contains(CharSequence s)
- 检查字符串是否包含指定的字符序列。 -
equals(Object anotherObject)
- 比较两个字符串的内容是否相等。 -
indexOf(int ch)
和indexOf(String str)
- 返回指定字符或字符串首次出现的位置。 -
replace(char oldChar, char newChar)
和replace(CharSequence target, CharSequence replacement)
- 替换字符串中的字符或字符序列。 -
trim()
- 去除字符串两端的空白字符。 -
split(String regex)
- 根据给定正则表达式的匹配拆分此字符串。
参考链接
-
三分恶的面渣逆袭:https://javabetter.cn/sidebar/sanfene/nixi.html -
二哥的 Java 进阶之路:https://javabetter.cn