一名双非本科上岸的经历

自我介绍

大家好呀,我是广东某一所比较知名的四非本科,计算机科班的同学,在2025年春招的末尾收获了字节跳动的offer,测试开发工程师。

我是从大一就开始加入比特进行学习的,是JAVA研发/测试开发方向的同学。在大二的暑期,收获了百度网盘的服务端测试开发offer,在大三期间收获了b站,小红书,滴滴,美团等大厂的测试开发实习offer。

但是秋招时候失利,只有为数不多的几个中小厂offer,但是在比特老师的鼓励下,最终在2025年5月份收获了字节跳动的offer,完美收官。

关于我的大学四年

我记得那是2021年的夏天,高中的我因为沉迷网络游戏,最终只考上了一个普普通通的双非本科的国际教育学院。在广东省的物理类排名只有6万多名,我的高考成绩应该比大多数的人都落后。后面爸妈为了让我去一个好学校,只能花多一年3,4万的学费去读我现在大学的“国际教育学院”。

这一刻,我的心里是十分难受的,如果去了肯定加重家里的负担,再加上在这样的地方读书,身边少不了的是那些富二代,作为一个普通家庭的小孩,难免有一点心理负担。

所以我在上大学之后,我就下定决定,我不能让爸妈白给我这么多钱,我想通过自己的努力去改变命运。我下定决心不可以跟那些摆烂的富二代同流合污,这也注定了我大学四年是在孤独当中度过的,大学朋友寥寥无几。

大一

在上大学之前,我就在b站上面搜“计算机大学生的专业课”。没有超高的智商,那就做一只先飞的笨鸟。高考结束的暑假,我并没有选择出去旅游放松,反而更多的是跟着鹏哥在b站发布的C语言视频,以及大学慕课里面的高等数学课程学习。

大一开学了,我最长去的地方就是我们这个小校区的图书馆,因为那里可以让我躲避整天打游戏的舍友带给我的干扰,一个清净的学习环境才可以提供给你持续学习的氛围,在这里我强推大家去图书馆学习,就算宿舍再安静那些是休息和放松的地方,在宿舍学习很容易犯困,影响你学习的效率。大一的上学期我就在图书馆和《C语言程序设计》以及《高等数学》上的陪伴当中度过。

大一下学期,我了解到学校有很多技术类型的社团,下面我称之为“工作室”。

因为我听师兄们说(伏笔一:注意这里只是听说),工作室的师兄很多都在大三阶段收获了大厂的offer,在大四秋招顺利入职大厂,因此我对这些工作室充满了憧憬和向往。幻想着进入之后,接一些项目充实自己的经历,然后就可以顺利加入大厂实习然后转正。所以一整个大一,我连四级这种基本的考试都懒得应付(伏笔二),我也要拼死加入工作室。但是结果却是遗憾落选,还因此挂了一门课。

螺旋之后,比特的老师安慰我说:这些工作室什么的,其实意义不大。因为都是“学生做的项目”,与其去这些工作室,不如早早学好比特的知识,去找实习,因为去再小的公司实习也是实打实的企业级的项目,早加入比特早实习才是王道!!!!

大二

在经历了大一的一波三折之后,我就决定静下心来认真学习比特的内容,不再好高骛远。大二时期,我顶着一周几乎满课的压力,在不上课的空余时间去图书馆学习比特的知识,只要一有时间我就去学习,图书馆的阿姨都跟我混熟了,因为他们总是发现,第一个来的人和最后一个走的人都是我。

比特的学习

比特的课程一般都是一周四节课,如果只是跟着直播上课很难一口气听下来把全部内容完全听懂。因此我宁可学习到晚上11,12点也要把直播跟上,录播也要看,直到每一分每一秒的课程都理解透彻。

然后就是一边看录播,一边写博客。博客真的很重要,一方面是因为博客可以帮你快速复习那些过往很久的知识,无论是吃饭排队的时候,还是坐地铁时候,博客是方便你随时复习的关键!大家一定要利用好自己零碎的时间

关于博客编写方面,我个人的习惯是“图文并茂”,因为这样可以帮我快速地把所学的知识模型化,人的大脑天生就喜欢看图片,这就跟我们从小喜欢看动画片不喜欢读枯燥的文字一样,所以对于比特老师讲的知识点,除了要记住基本内容以外,更多的是以图形化的方式记录好内容,便于我们进行记忆。

关于项目

比特的项目都是很经典的项目,而不是b站上面那些烂大街的水项目,在这里推荐大家不要去b站上面看那些项目了,天下没有免费的午餐

然后,多从“项目的核心业务是怎样设计的”,“项目有哪些难点”,“难点怎样解决的”,“有没有对项目进行功能测试,性能测试,自动化测试”方面入手。尤其是测试开发方向的同学,更加要注重项目的测试!!

在这一块,我觉得大家可以使用AI大模型进行优化,看看有哪些更好的设计以及更全面的测试用例。

关于算法题

算法题一般是大厂才有的,但是现在大环境越来越卷,极个别的小公司在面试时候也会考察。

算法题一般只有全做出来这场面试才可以通过,如果做不出来,很可能本场面试就挂了,尤其是字节跳动这种很看重算法的公司,如果算法不写好,本场面试没过只是小事,还会留下“代码能力不行“的面试评价,这样其他部门也不会捞你的简历,也就相当于短期内进了公司的”黑名单“。影响时间在三个月到半年内不等。

算法题的话,建议大家多刷********的"hot100","剑指offer",以及题目排序序号在300以内的题目。

如果有时间的话,大家可以多看看比特的精品算法课程。但是无论有没有时间,都推荐大家一天至少刷一道代码题目,确保在第一次面试大厂的时候刷到至少200题********

大二下

在学习到一定阶段的时候,大家一定要及早去面试,JAVA方向的同学可以在学完JAVAEE初阶的时候,就开始在各种招聘渠道:boss直聘等等投递简历,面试越多,你就越有经验。不要觉得自己专业技术够硬就不去面试,只有面试面得多才是最好提升自己的方法。注意先从小公司开始面试:按照小公司-->中厂-->中大厂-->大厂的顺序投递和面试。注意每一场面试都要录音和记录面试问题,不要因为一两场面试没过就气馁,人生从来不少得到或者失去了什么,而是我领悟到了什么,下次怎样改进。

大二暑期&一整个大三

在这一段时间当中,我在收获了百度的实习offer之后,就去实习了。在实习过程当中,大家需要多从以下几个方面考虑:

实习的项目有哪些主要的功能,架构是什么样?

实习的项目难点在哪里?

作为测试人员:项目的测试流程是什么样的(CI/CD流水线上有哪些节点)

有没有印象深刻的bug,或者项目里面有没有发现什么风险

以上几个问题,都是面试常见的问题,大家实习时候也需要重点关注!!!!!!

实习尽可能实习久一点,至少半年以上,这样才可以学到更多技术,然后就是争取实习转正!

实习转正了,秋招基本上就只可以投递自己想去的公司。

大四秋招

秋招阶段,其实大家的水平都已经定性了,没有转正offer的同学只能进行海投了。无论是小公司,还是中厂,央企,国企,大厂。在秋招进行到10月份的时候,我只有一个很一般的小offer,看到身边很多同学都轻轻松松进入大厂,这个时候,我的内心是绝望的,感觉到前途一片黑暗。这个时候我只想找个离家近的国企躺平算了,我觉得我大学四年已经很尽力了,但是这个时候,当我点开运营商(电信,移动)的招聘网站,我发现四级居然是他们的硬性条件!!这个时候,对于我来说直接坠入人生的谷底,我从小到大从来没有这么绝望过。所以我想告诉大家的是,很多事情不要等到发生了才懂得后悔,就好像那些从大一玩到大四毕业的人发现自己大四了没找到工作才醒悟,才后悔,已经来不及了。那个时候虽然可以报名四级考试,但是我已经力不从心了......

黑暗当中的曙光

在秋招的10-11月份,我无意间跌落摔伤住院了,身上13处骨折,我躺在病床上,一整天不能动,两银一瞪只看到了自己黑暗的前途。这个时候,我人生当中的又一个贵人出现了:他是照顾我的护工阿姨。在了解了我的处境之后,她也跟我分享了自己的人生经历:辍学,打工,再到负债180万,继续做生意赚钱,最后还清债务.....我记得她跟我说的最多的一句话就是:往前走,别回头,我们谁都不是从前的自己了。在她的鼓励下,我开始继续躺在病床上面面试,即使身体13处骨折,身上还插着几个钢钉,我依然坚定不移地面试。我现在难以想象,要是没有她的帮助,我可能很难走出来

也许是老天的眷顾吧,在2024年年底,我收获了一个中厂的offer,还算不错,但是比起大厂,还是差太远了,于是我继续面试,但是这个时候已经心里有底,不那么慌张了

关于简历更改

在大四寒假期间,我使用deepseek来为我的简历进行优化,无论是实习的项目还是面试的问答,到处都有deepseek的影子。我发现,deepseek真的讲的太完美了,他能发现我之前实习时候的诸多有待完善的地方,在这里,我强推大家熟练使用AI工具,我们要即使拥抱变化,拥抱AI,这也是未来发展的一个大趋势。

继续不断面试

大四下学期的时候,我拄着拐杖,一场场宣讲会地去跑,只要一看到宣讲会,我就迫不及待地去跑过去投简历,大家也可以多关注校园的宣讲会,因为跟HR和面试官现场沟通往往更加直接,有些宣讲会甚至可以直接拿到面试直通卡,或者现场就安排面试,这样效率会高很多。也许是冥冥之中,自有天意吧,我通过自己的努力获得了字节的offer......这个时候我发现,曾经那些工作室的同学,貌似也没有各个都拿到大厂,所以,大家还是早点加入比特学习吧哈哈哈!

写在最后

我想把照顾我的阿姨的那句话送给大家:往前走,别回头,我们谁都不是从前的自己了。

找工作的过程,就是一个不断接受自己只是平凡的人,然后仍然不甘平凡地奋斗的过程,心态要摆正。其实我现在回头看我的所有经历,仿佛都像一场梦,人生是用来体验的。一切,尽力就好!

感谢大家看到这里!愿原力与我们同在!

全部评论
主动去学习技术已经超过很多计算机本科生了广工计算机学习氛围还是挺好的
2 回复 分享
发布于 05-11 09:36 安徽
不是推销啊,本人的真实案例,仅供参考
2 回复 分享
发布于 05-09 12:46 广东
很棒
1 回复 分享
发布于 05-09 12:52 上海
小比特
点赞 回复 分享
发布于 05-11 16:11 河北
比特是什么
点赞 回复 分享
发布于 05-11 02:11 湖南
点赞 回复 分享
发布于 05-10 15:00 江西
牛的 功夫不负有心人!
点赞 回复 分享
发布于 05-10 02:44 浙江
牛的兄弟
点赞 回复 分享
发布于 05-09 23:58 广东
跪了
点赞 回复 分享
发布于 05-09 22:38 上海
师兄太强了
点赞 回复 分享
发布于 05-09 20:54 广东
跪了
点赞 回复 分享
发布于 05-09 16:16 重庆
我对于你们学校能不能不要说自己是四非 广工的地位很高的 😔那我在你们隔壁的真正四非怎么办 每每刷到什么四非院校上岸那我们这种更四非的咋办
点赞 回复 分享
发布于 05-09 14:42 广东
鹏哥不是更推荐cpp方向吗,为什么你选JAVA
点赞 回复 分享
发布于 05-09 13:11 广东

相关推荐

一、面试基本情况本次面试主要围绕 React 相关技术、流式传输以及算法与 React Hook 实现展开,包含技术原理问答和两道代码实现题。二、技术问题回顾与解答1. React Router 的实现机制React Router 基于 HTML5 的 history API 实现单页面应用的路由功能。它通过监听浏览器的 popstate 事件(当用户点击浏览器的前进、后退按钮时触发)以及手动调用 history.pushState()、history.replaceState() 方法来更新 URL 地址,同时不触发页面刷新。在 React 组件中,通过 BrowserRouter(基于 history API)、HashRouter(基于 URL 的 hash 部分,兼容性更好)等组件包裹应用,结合 Route 组件定义不同路径对应的渲染组件。当 URL 变化时,React Router 会根据当前路径匹配相应的 Route 并重新渲染对应的组件,从而实现页面内容的更新 。不过在本次面试中,我对这块知识掌握不够扎实,未能完整清晰作答。2. React memo 是做了什么React.memo 是一个高阶组件,用于对函数式组件进行性能优化。它会对组件的 props 进行浅比较,如果前后两次传入的 props 浅比较结果相同,就直接复用之前渲染的结果,不再重新执行组件函数,从而避免不必要的重复渲染。但需要注意,它仅对 props 变化进行比较,当组件内部状态(如通过 useState 创建的状态)变化时,即使 props 未变,组件仍会重新渲染。3. React Suspense 怎么实现的React Suspense 用于处理组件的异步加载情况,让开发者可以指定在异步操作(如数据获取、动态导入组件)进行时显示的加载状态。它通过在组件树中标记一个“等待”区域,当子组件中有异步操作未完成时,会先渲染 Suspense 组件指定的 fallback 内容(如加载动画),直到异步操作完成,再渲染实际的子组件内容。内部实现依赖于 React 的 Fiber 架构,利用 Fiber 的可中断、可恢复特性,在等待异步操作完成期间释放 CPU 资源,不阻塞主线程,提高应用的响应性能 。4. 流式传输相关讨论在讨论流式传输时,我提出可以在前端利用 Server-Sent Events(SSE)实现。SSE 是一种单向的、由服务器向客户端推送数据的技术,适合用于实时数据传输场景。同时,对于 JSON 数据的处理,采用流式解析会更加高效,比如在处理阶乘等数据量较大且逐步生成的场景下,流式解析无需一次性将所有数据加载到内存中,而是边接收数据边解析处理,减少内存占用,提升数据处理效率。三、代码题实现1. 大数相减(考虑负数结果)function subtractLargeNumbers(num1, num2) {    function compare(num1, num2) {        if (num1.length > num2.length) return 1;        if (num1.length < num2.length) return -1;        for (let i = 0; i < num1.length; i++) {            if (num1[i] > num2[i]) return 1;            if (num1[i] < num2[i]) return -1;        }        return 0;    }    const sign = compare(num1.split(''), num2.split(''));    let larger = sign >= 0? num1 : num2;    let smaller = sign >= 0? num2 : num1;    let result = '';    let carry = 0;    for (let i = 0; i < larger.length; i++) {        let diff = parseInt(larger[larger.length - 1 - i]) - (parseInt(smaller[smaller.length - 1 - i]) || 0) - carry;        if (diff < 0) {            diff += 10;            carry = 1;        } else {            carry = 0;        }        result = diff + result;    }    while (result[0] === '0' && result.length > 1) {        result = result.slice(1);    }    return sign < 0? '-' + result : result;}2. 实现一个可暂停、继续的倒计时 React Hookimport { useState, useEffect } from'react';function useCountdown(initialTime) {    const [time, setTime] = useState(initialTime);    const [isRunning, setIsRunning] = useState(true);    let intervalId;    useEffect(() => {        if (isRunning && time > 0) {            intervalId = setInterval(() => {                setTime(prevTime => prevTime - 1);            }, 1000);        } else {            clearInterval(intervalId);        }        return () => clearInterval(intervalId);    }, [isRunning, time]);    const start = () => {        setIsRunning(true);    };    const pause = () => {        setIsRunning(false);    };    return {        time,        start,        pause    };
查看6道真题和解析
点赞 评论 收藏
分享
评论
25
18
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务