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

共 9539字,需浏览 20分钟

 ·

2024-04-28 14:44




大家好,我是二哥呀。


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





二哥的 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






浏览 138
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报