我打死都不会相信今天4点到5点这一小时之内发生的事情。

xx大学(中上2)开了夏令营,然后里面必须填意向导师,因此我抱着试试的心态,就投了7封。

结果半小时之内7中4,2个电话,1个微信。

之前40得4封官回,差点把我整玉玉。


第一份offer拷打:电话

这是我的项目简历,因此他问了我各类项目:

Q:你的这些竞赛都是怎么来的?

A:我这些竞赛主要是分成数学建模和算法,这两个主要都是我实打实自己打出来的。

Q:你能说一下你第一个项目吗,这是有老师带的?

A:是的,底层开发主要是研究生来做,我的话主要是一个旁听,然后计算机设计大赛是我上台答辩的。

老师:那么你的简历不能写这个团队产出,因为这个跟你关系没那么大。

Q:第二个项目是怎么做的?

A:实诚的说这是一个数学建模,然后我后面完善了一下的。

老师:你对ResNet18这些很熟吗?代码都会吗?

A:我对这些原理都懂吧,但是这里面的代码大多数是AI来做的,AI太厉害了。

老师:这些机器学习代码必须要看懂哦!

Q:你还做了前端的东西,是怎么想的?

A:之前是迷茫,不知道学什么,就来学学前端锻炼一下代码能力。

老师:我那些研究生前端都丢工作了!

Q:你还有个ChatLite,这是什么?

A:这就是我的一个课设,是通信系统。

老师:里面说到GUI线程阻塞,那你知道这个是什么吗?

我完全忘了这东西,脑子里一片浆糊。

  • GUI线程阻塞的本意是:在图形用户界面(比如Windows桌面程序、Android App)中,主线程(负责绘制界面、响应点击)被耗时任务(比如网络请求、大文件读写)卡住,导致界面“假死”“无响应”。

  • 通信系统里确实会涉及这个问题——比如一个即时通讯客户端(QQ、微信),收到消息后如果直接在GUI线程里解密、渲染、存储,就可能卡界面。所以好的通信系统会把“通信逻辑”和“界面展示”分开(比如用异步线程、消息队列)。

老师:你简历的开发者建议改成主要负责人。

我现在来说,简历只改了一小部分,没有完全听取老师的建议。

可能是稍微有些较真的老师,但是这作为第一个愿意主动联系我的老师,我真的感激不尽!!!

第三份offer拷打:电话

Q:你是什么专业的?

然后还问了我第一个项目的老师是谁,你干了什么活。

所以,有科研,哪怕是混混,也比毫无强很多很多。至少有的来扯。

Q:你了解我这个研究方向吗?

首先我有了offer,所以我更自信了,有种敢于拒绝的精神了。

我实话实说:不是特别了解分布式这个词的意思。

但老师最终还是非常欢迎我联系。


另外,2个老师一个是欢迎我开放日深入了解,一个是巨年轻的导,直接给了我微信但是没说什么,跟个同辈的一样。。。

我今天经历了什么啊!

再者,我现在的任务重心回归到做自己的事情上面了,我是迫切需要面经的,而不是理论基础,理论我已经够用了,而且准备再充分也有死的时候嘛!再者,上周的压力快把我几乎压死了。所以这周开心点,这个系列就是随缘更新了。


八股合集

既然套到了些老师,就看看关于这个学校的帖子。

但学长又说这个学校说四非很难入,真的吗,他是目前对我最好的学校了呜呜呜。

Q.数据库的三个完整性约束

实体完整性约束:

  • 唯一性:数据库中的每个元组(行)必须是唯一的,这意味着没有两个完全相同的元组。
  • 主码(主键):为了维护实体的唯一性,每个关系(表)都应该有一个主码,用来唯一标识每个元组。主码是一个或一组不能取空值的属性(字段),它们的组合必须在表中唯一。

参照完整性约束:

  • 定义:参照完整性涉及两个或多个关系(表),确保一个关系中的某个属性(或属性组)的值引用另一个关系的主码。
  • 外码(Foreign Key):在参照关系(从表)中,引用目标关系(主表)主码的属性称为外码。
  • 目标关系与参照关系
    • 目标关系(被参照关系):其主码被另一个关系的外码引用的关系。
    • 参照关系(依赖表):包含引用另一个关系主码的外码的关系。

用户定义完整性约束:

它允许用户根据具体应用场景的需要设置特定的数据约束。

Q.网络的七层协议

这个我都能口答了,OSI的7层模型,TCP/IP的四层模型,教学用5层模型。

七层分别是:物理层:透明地传送比特流传输;数据链路层:帧编码和误差纠正控制;网络层:路由和寻址;传输层:为两台主机进程之间的通信提供通用的数据传输服务;会话层:管理(建立、维护、重连)应用程序之间的回话;表示层:数据处理(编码解码、加密解密、压缩解压缩);应用层:为计算机用户提供服务。

Q.进程和线程的区别

进程是资源分配的基本单位,拥有独立内存空间、文件描述符等资源,进程之间相互隔离。

线程是CPU调度的基本单位,同一个进程内的多个线程可以并发执行。

Q.你认为编译型语言和解释型语言有什么区别

我的第一反应:编译型是先编译后执行,解释型是同时进行。编译型快、解释型慢。

第一,执行过程不同。编译型语言(如C、C++、Go)需要先经过编译器生成可执行文件(.exe等),然后再运行;解释型语言(如Python、JavaScript、Ruby)没有这个步骤,由解释器直接读取源代码并执行。

第二,运行效率不同。编译型语言因为事先已经优化好了机器码,运行速度更快;解释型语言每执行一次就要翻译一次,通常更慢。

第三,跨平台能力不同。编译型语言生成的可执行文件依赖特定操作系统和CPU架构(Windows的.exe不能在Linux直接跑),需要重新编译;解释型语言只要平台上有对应的解释器(比如Python解释器),同一份代码可以直接跑,跨平台更好。

第四,开发调试体验不同。解释型语言可以逐行执行、实时看到结果,适合快速开发和调试;编译型语言修改代码后需要重新编译,迭代慢一些,但编译时会提前发现很多错误。

Q.解释一下MVC模型,已经SSM和MVC的关系(上面的项目里提到了)

第一步:先解释MVC(简洁、直白)

MVC是一种软件架构模式,把程序分成三个部分:

  • M(Model,模型):负责数据和业务逻辑,比如数据库操作、计算。

  • V(View,视图):负责界面展示,用户看到的东西。

  • C(Controller,控制器):负责接收用户输入、调用Model、更新View。

打个比方:你用浏览器登录网站,输入账号密码(View),控制器(C)收到请求后去数据库查用户信息(M),然后再把结果返回给页面(V)。目的是解耦,方便维护和扩展。

第二步:解释SSM与MVC的关系(关键点)

SSM是 Spring + Spring MVC + MyBatis 三个框架的缩写,它是MVC模式在Java Web开发中的具体实现

  • Spring MVC 就是MVC模式的一个框架级实现,它把Controller、Model、View的角色用代码定义好了。

  • MyBatis 负责Model层的数据持久化(操作数据库)。

  • Spring 负责整体对象管理和依赖注入。

一句话概括:MVC是设计思想,SSM是落地工具。就像“汽车设计图”和“造出来的某款车”的关系。

建议(如果你项目里提过SSM):

“在我做过的Web项目中,我用的就是SSM框架。它让我更直观地理解了MVC的分层思想,比如我把业务逻辑写在Service(属于Model层),前端请求打到Controller,然后通过MyBatis操作数据库。”

Q.你觉得数据结构的算法和机器学习的算法有什么区别

这个问题挺有意思,如果是我,我回答:数据结构的算法是基础性的算法,机器学习的算法是高级算法或者现代智能算法。数据结构的算法依赖定义好的数据结构,这些是最底层最基础的算法思维,比如递归回溯、动态规划这些;而机器学习的算法是相对高级的,比如模拟退火、蚁群算法,为了解决实际应用问题而产生的算法,面向的是用户,这里面可以包括这种小的dfs这些思路。

看来没回答到点子上:

第一,定位不同。数据结构的算法是基础性的,比如递归、回溯、动态规划,它们直接操作数组、链表、树这些底层数据结构,解决的是确定性的问题,结果是唯一的。而机器学习的算法更偏“高级”或“现代智能算法”,比如模拟退火、蚁群算法,也包括常见的线性回归、决策树。它们是为了解决实际应用问题而生的,结果不唯一,更面向用户。

第二,依赖不同。数据结构算法基本不依赖数据本身,你给任何输入,它都按固定逻辑执行;而机器学习算法严重依赖训练数据,数据变了,模型就变了。

不过反过来,机器学习算法内部也会用到很多基础算法思维,比如在决策树里做特征选择时,可能就用到了递归和搜索。

Q. 思考一下排序算法背后的数学模型

这个问题也很有意思,但我回答不上来。

排序的本质是把一个无序排列变成有序排列。数学上,一个序列可以看作一个排列,排序过程就是逐步减少逆序对的数量。逆序对的数量是排序问题的“距离度量”,每次交换(如冒泡)最多减少一个逆序对,所以最坏情况下至少需要 O(n²) 次交换。

更多推荐