
大学
让我简要回顾一下自
大学以来的 coding 经历。大一上学期,热情满满但缺乏方向,仍然停留在高中打OI时的舒适区,沿用着那时C语言加STL的技术栈。主要精力放在争取C语言课程作业和考试的高分上,期间自学了一些内容,比如链表。还有一阵子特别想美化自己在CNBlogs上的博客,于是每天研究
CSS样式调整。大一
寒假时,临近放假萌生了学ACM的想法,于是苦练算法近两个月,最终还是放弃了。只有尝试过后才明白,自己是否对此真正感兴趣,以及是否有足够天赋。那段时间刷了一百五十多道题,但现在几乎都忘了。希望以后
面试手撕代码时能顺利通过吧,哈哈。大一结束时,我完成了C语言的大型作业。这是我首次接触多文件编译,当时没有cmake这类工具,处理各种链接问题十分棘手。项目中用到了Qt,其UI类涉及
C++的面向对象编程知识,而我当时对此一窍不通。由于缺乏
ChatGPT这样的助手,我只能依靠对C语言和STL的理解,再加上从网上搜集到的零散资料,硬是做出了一款仿
Windows Vista的桌面应用。Vista的设计确实让人印象深刻,它的美感至今令人难忘。大一
暑假:放松身心大二上学期:开学时我只会C语言加上STL,以及一点点Qt。后来学了一些
C++面向对象编程,但由于缺乏实际应用的场景,很快又忘记了。为了提升自己的基础能力,我认真研读了CS:APP这本书,并且还看了CMU的原版网课,但最后只完成了前四章的内容。不过学校正好也开设了与CS:APP相关的课程,通过课程我做了BombLab和注入攻击相关的实验,觉得非常有趣。除此之外,我还参与了两个项目。不得不说,需求确实能够很好地推动学习和产出。在这些项目的推动下,我阴差阳错地进入了Web开发领域,接触到了前后端分离的架构,学会了Golang、npm、Vue2、
MySQL、
PostgreSQL等技术,还了解了LDAP认证、Postman测试工具以及HTTP请求的处理方式。这段时间我的技术栈迅速扩展,成长飞快。当然,那个月的压力也非常大,尤其是处理那个极其麻烦的CORS跨域问题,至今印象深刻。大二
寒假:放松身心大二下学期的时候,我们有一个规模很大的课程设计项目,核心内容是Web应用开发。在技术选型上,我沿用了上学期项目的前后端分离架构:前端使用Vue 3,后端则是纯Servlet加原生
Java实现,没有引入任何框架。刚开始时一切顺利,但随着API数量的增加,问题逐渐显现——后端的Servlet类文件数量迅速膨胀到几十个,在IDEA中打开项目,满眼都是蓝色的类名。更糟糕的是,各种实体对象开始泛滥:同一个数据结构,需要为前端传入的数据定义一种类型,为中间处理过程中的转换定义另一种类型,为直接操作的数据存储定义第三种类型,还要为返回给前端的结果定义第四种类型。雪上加霜的是,这个课程设计居然明令禁止使用数据库,要求我们自己手动实现数据的增删改查功能。这让我深刻体会到什么叫最初还努力维护代码规范,最终却不得不堆砌屎山。后来我才意识到,那些被某些人轻视的
Spring Boot其实多么强大。它可以通过简单的注解轻松替代几十个重复的Servlet类,极大地简化开发流程。而
阿里Java开发规约中提到的BO、DO、DTO、VO等概念,原来就是为了帮助开发者更好地对实体对象进行分类管理。其实这个时候就应该学习
Spring Boot,尽管会花费一些时间成本,但它能节省十倍以上的精力。至于前端部分,由于我对HTML、
CSS和
JavaScript三者都不熟悉,直接上手Vue简直是一种折磨。幸运的是,
ChatGPT已经出现,帮了我不少忙。此外,我还完成了一个DNS中继
服务器的小项目,这是一个非常有趣的练习,但也让我再次领教了C语言指针问题的复杂性,差点因此崩溃。从那时起,我就彻底放弃了考虑往C或
C++方向发展。大二
暑假:尽情玩乐,同时明确
本科就业目标,开始学习IOC。大三上学期,沿着常规校招路线学习:
SpringBoot、
MySQL、MyBatis、Redis和鉴权等。这学期 coding 量不多,主要集中在个人单体项目实践。11月中旬开始投递日常实习简历,前几次
面试屡屡失利,但从第四场起逐渐收到offer。
目前已经开始日常实习,接触的业务较为核心,涵盖设计、编码、测试和运维全流程。实际开发环境与想象中不同,更多时间花在需求分析、库表及API设计上。公司重视代码规范,大幅提升了编码测试的成功率,让我受益良多。目前我对代码兴趣不大,更想提升测试和运维能力,如压测、Docker、部署等相关技能。我也曾迷茫,那时因缺乏明确目标,学习效率极低。最好的办法是找个项目,尤其是有截止日期的,立即行动。这样不仅能快速提升实战能力,还能学到很多实用知识。