文章目录
- 一面
- 自我介绍
- 提问
- 算法
- 反问
- 结果
- 二面
- 提问
- 算法
- 反问
- 结果
- 主管面
- 主管面试准备
- 算法题
- 其他
- 个人提问准备
- 提问
- 数据库
- 普通索引和覆盖索引的区别
- 索引是什么?索引怎么加快数据库查询的?
- 索引具体怎么实现的?以B+树为例,节点放了什么?
- 计算机网络
- 计算机网络有哪几个层
- 为什么视频通话使用UDP,而不是TCP?为什么
- HTTP协议有什么?
- 算法题
- 反问
- 结果
一面
自我介绍
- 讲了还能多不必要的东西,这里要在私下里总结一下,形成书面文件,然后重点介绍几个和计算机相关的方面。
提问
-
内核态和用户态的切换
-
HTTTP和HTTPs的区别
-
TCP和UDP的具体区别
-
TCP为什么要三次握手?
-
数据库中的索引创建如何更快?有什么注意事项?
-
为什么要创建索引
-
基本上除了最后两个,其他的都说出来了。
算法
- 叠罗汉问题
- 最大上升子序列 + 排序
- 完美通过
反问
-
拼多多有末尾淘汰制吗?
- 没有
-
我入职之前需要提前学一些什么吗?
- 不用,java基础就够了,进去了,什么语言十二小时学不会。
结果
- 一面通过,效果还行,不过二面心里有点发怵了。
- 上述几个问题也有了清晰的认知和补充,面试官建议好好学习一下java ,然后在进行入职。
二面
- 不管怎么样,权当是经验学习,明天二面,心里很慌,加油吧,能进就进,进不了,暑假好好准备面试的。
- 二面还没开始,不过心态放平了,目前还是有很多八股没有背过,不过后续会好好准备的。能进就进,不能进就当作秋招预演了,不过每次都要总结一下,自己还有什么地方欠缺,每一次面试完,都要有所进步。
- 昨天的面试让我有了一定的经验,就是最后不要问薪资,咱们就问和工作相关的内容,主要是以下两个方面
- 如果入职的话,我想知道自己大概具体是负责哪个部分,我需要的提前学习什么?
- 如果能够保证一周六天都到的话,实习转正的概率是多少?有什么硬性的规定吗?
提问
java中string和string buffer的区别?
- 可变性和不可变性
- String对象是不可变的。一旦创建了一个String对象,它的值就不能再改变。任何对String对象的修改都会产生一个新的String对象。
- StringBuffer对象是可变的。可以对StringBuffer对象进行修改,而不会产生新的对象。
- 线程安全性
- String是不可变的,因此是线程安全的。在多个线程之间共享String对象是安全的,不需要同步。
- StringBuffer是线程安全的。它的所有修改方法都是同步的,这意味着它可以安全地用于多线程环境中。
- 性能
- 因为String是不可变的,每次对String的修改都会产生一个新的对象,这在需要频繁修改字符串的场景下会带来性能问题。
- StringBuffer是可变的,并且提供了高效的字符串修改方法,因此在需要频繁修改字符串的场景下,StringBuffer的性能更高。
java中的接口和抽象类?然后优先实现接口还是抽象类?
算法
- 找到若干个数组中,都出现的元素,并将之作为列表输出。
- 手动实现,并且没有ide,没有补全,告诉那个老师,给你执行。
- 好在通过了一个简单的方法,但是运行效率属实不行,后来他提醒我,我还没转过弯了。
反问
问题一
- 如果入职的话,我想知道自己大概具体是负责哪个部分,我需要的提前学习什么?
- 我这个组的是中间件。具体省略了。
问题二
-
如果能够保证一周六天都到的话,实习转正的概率是多少?
-
实习的话,只要去了,做出点东西了,都挺高的。
结果
- 这里预测一下,大概率是通不过的,因为第一关的面试官并没有问很多java和数据库的东西,而且算法刚好我就会。
- 意料之外,这里居然又过了,实在想不到,运气好?还是咋滴?不管了,继续准备吧。
主管面
- 心里比较慌,上次面试应该是运气好,在我身上实在没找到什么能够让我通过的地方,所以,这次主管面试更加忐忑了,这里上网搜了一下,其他年份的主管面内容,这里准备一下。
- 刚才心跳的很快,甚至说有点心悸了,因为我就这一个进了主管面,其他的都没有进主管面,这个挂了,其他的就都没有了。不过想了想,这不就是一份工作吗?我能够进主管面,就是运气,能进就进。不能进再继续学,没什么好难过的尽力就行了,坦然面对喽。
- 放宽心吧,兄弟,加油的!
主管面试准备
- 大概看了一下网上的东西,还是要好好准备一下算法,不要投入太多希望,能去就去,不能去也没有办法,我们尽力就好了。
- 很重要的一部分还是要考察你的算法能力,所以要好好做一下目前所有能做到的算法。
算法题
算法题一
- 给定一个n×2的二维数组,数组的每一行代表一个区间,如果一个区间被另一个区间包含就删掉该区间,返回剩下的所有区间。
- 比如: [1 2]被[1 ,3]。
- 这个已经做过了,具体连接如下
- 对应链接
算法题二
- dfs非递归二叉树高度,一开始写了个经典队列的bfs,意识到不对后开始改,最后没改完,就说了个暴力找到每个叶子的高度的思路。
- 这个已经做过了,具体连接如下
- 对应链接
其他
想通过实习获得什么?
九月份你会回学校吗?
个人提问准备
业务是什么?我会跟着您吗?
我先需要提前学习什么吗?
提问
数据库
- 让我写了一个sql语句,然后问我如果这个sql语句查询很慢怎么办?
- 建立索引,反问我索引是什么?底层实现是什么?
select count(*)
from stu
where sex ='male';
- 我知道是使用索引,但是索引是要自己创建的,但是复习sql语句的时候,就没有练习到创建索引,现在自己这里再复习一下
创建针对sex的索引
create index id_sex on stu(sex);
使用索引覆盖
create index idx_sex_only on stu(sex);
表分区
- 表stu很大,可以考虑按sex进行分区,查询只扫描相关分区
alter table stu partition by List(sex)(PARTITION p_male values in ('male'),PARTITION p_female values in ('female')
);
优化查询计划
- 确保查询优化起选择最优的执行计划,使用EXPLAIN分析查询执行计划
EXPLAIN select count(*) from stu where sex='male';
普通索引和覆盖索引的区别
- 普通索引
- 普通所以你是为某个或者某些列创建的索引,借此来加速这些列的操作,数据库通过索引可以快速定位到匹配的行。
- 覆盖索引
- 索引包含了查询所需要的所有的列,查询只需要访问索引,而不需要访问数据库表的数据行,提高了查询性能。覆盖索引通常是所列索引,覆盖查询中涉及的所有列。
索引是什么?索引怎么加快数据库查询的?
- 这个问题问的我真是痛心疾首,我知道B+树是MySQL中InnoDB的默认实现等等,但是他说不对,就是索引是怎么实现的,这个目录是怎么实现的,给我问懵逼了,所以挂了。不过我的底子确实太薄了。
正式回答
- 索引是一种用于快速查找数据的一种数据结构。通过索引,数据库可以更快地找到和访问表中的数据行,无需扫描整个表。
什么是索引?
- 数据库表中一列或者多列的排序副本。
- 存储在一个特殊的数据结构中,通常是B+树或者哈希表,允许快速查找、插入和删除操作
创建索引的几种方式
- 这个得会呀,不会创建索引,背了那么多没什么意义,人家问的就是怎么创建索引。
# 单列索引
create INDEX index_col on table_name(column_name);
# 多列索引
create INDEX index_cols on table_name(cols1,cols2);
# 唯一索引
create UNIQUE idx_unique on table_name(col);
# 全文索引
create FULLTEXT index idx_fulltext on table_name(column_name)
创建了索引,又是如何在select语句中使用的?
- 一般情况下,数据库管理系统DBMS会自动选择最优的索引执行查询,不需要在SELECT中显示指明所以需要哪个索引。查询优化器负责分析查询,根据统计信息选择合适的索引优化查询性能。
- 查看查询计划
- 使用explain select * from students where age = 22;查看查询的执行计划,确认索引是否被使用。
索引是如何加快查询的?
- 减少数据扫描:
- 没有索引的时候,需要扫描数据库的每一行(全表扫描),通过索引中的数据查找特定的行。
- 提供排序顺序
- 索引按照特定的顺序排序的,查询需要排序,索引不需要排序直接返回
- 实现快速搜索
- 允许通过二分查找快速定位数据
索引具体怎么实现的?以B+树为例,节点放了什么?
- 非叶子节点:只存储键值和指向子节点的指针,不存储实际数据。
- 叶子节点:存储键值及其对应的实际数据(或指向数据的指针),并且所有叶子节点通过链表连接在一起,便于范围查询。
计算机网络
计算机网络有哪几个层
- 这道题记得有点混乱,太久没看了,导致当时有点记不清楚了,不过最后又理回来了。
- OSI的七层
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 网络层
- TCP/IP网络有的时候会是四层,有的时候会是五层,这里还是记录成五层吧
- 应用层
- 网络层
- 传输层
- 链路层
- 物理层
为什么视频通话使用UDP,而不是TCP?为什么
- 大爷的,今天早上刚看过,虽然当时答的磕磕巴巴,不过还在说出来了。
- UDP具有更低的延迟,更高的实时性,可以容忍一定的丢包和乱序,保证了视频通话的流畅性和质量
- TCP虽然提供可靠的传输服务,但是链接建立、流量控制、拥塞控制和重传机制引入了额外的延迟和不稳定性,不适合实时通信的需求。
更加细致地说
实时性
- UDP
- 无连接的传输协议,不需要建立链接就可以发送数据,没有三次握手和链接维护的过程,延迟更低,视频通话需要实时传输数据,任何延迟都会影响通话质量。
- TCP
- 面向连接的协议,需要建立链接,并且数据传输过程中需要确认和重传,会导致额外的延迟
丢包处理
- UDP
- 没有丢包重传机制,重不重传由应用程序自己决定,轻微丢包对于视频影响不大
- TCP
- TCP提供可靠传输,确保数据按照顺序到达并且不丢失。
- 某一个数据包丢失了,TCP会重传这个数据包,直到这个数据包受到确认。虽然保证了可靠性,但是会引入延迟和抖动,不利于通话的流畅性。
HTTP协议有什么?
- 这部分我没有复习到,有点懵逼。
- 今天早上刚看过,难受
- 请求行
- 请求头
- 请求体
算法题
- 二叉树的后续后续遍历,以及对应的更换二叉树的连接方式。
- 这里整理了对应的链接,具体看链接。
- 对应链接
反问
- 虽然今天面试面的不好,不过还是想问一下,我需要提前学什么吗?
- springboot,自己多做一些项目。
结果
- 不知道呀,能进就进,我已经尽力了,之前几面我都没有准备,这次主管面还是准备了的。心平气和,尽力就好了,加油吧!!
- 没进,回顾一下,其实回答正确的题目没几个,人家会很失望的,不过也好,不再抱有不该有的期望了。
- 流程终止了,不知道为啥!