跳至主要內容

大四技术复盘

fatSheep大约 5 分钟

大四技术复盘

整体回顾

之前大一的时候就开始接一些单子做,从一开始的 50,100,帮人写写脚本,做做课设作业,再到后来慢慢开始改 bug,开发功能模块,最后做完整的商单,单价也慢慢涨到 200,500,1000,也学了全套的技术栈,运维,后端,前端

期间也接触了很多方向,我认为本科期间比起学习一条专精技术栈,更重要的是培养自己的学习能力,对前沿技术的足够敏感,同时找到自己真正感兴趣的方向

wakatimeopen in new window

运维(linux 方向)

如果让我在技术栈里找一个最有前景、最有普适性的,那我一定会毫不犹豫说是 Linux,为什么?

操作系统是现代所有计算机设备的基石,这么重要的基础设施不应该属于私人,因此免费开源才是真正的发展方向,并且由于国家需要自主可控,所以政策上也会有一定的倾斜。同时 win 服务器需要一笔版权费,国际上同配置的 win 服务器往往要比 linux 服务贵(授权费)

同时熟悉 Linux 系统也可以更好地适应技术发展,简单列举几个方向

技术方向代表技术共同点
大数据方向Hadoop基本和 Linux 基础操作兼容
(文件管理,组、用户管理,管道等)
容器化docker基本和 Linux 基础操作兼容
人工智能、机器学习AIGC(stable diffusion)炼丹、AI 绘画、大模型基本都是在 Linux 下训练

如果足够熟悉 Linux,其实这些技术都可以很快上手

我的水平

linux 到目前日用了五年左右,市面上几乎所有主流的发行版我都深度体验过,他们的区别也都信手拈来

debian 系 redhat 系 arch 系甚至 opensuse 我都用过,目前我个人使用Arch,服务器使用Debian.

截至 2023-11-24, Centos 已经转换为 stream(滚动发行版)并且变成 redhat 的上游,不再稳定,强烈建议转到 Debian ,包管理器 apt 和 rpm 基本无缝衔接.并且Debian 的内存管理更加优秀,裸机内存占用不到 200M,安全性也很有保障。

nginx,docker 这些建站常用的技术栈不必说,内网穿透,隧道,ssr 加速这些我也都实际使用也踩过坑,可以说超过大部分应届生甚至水一点的三五年运维是没有问题的

软件开发

其实软件开发本质上就是抽象和封装。也就是常用的MVC模式(Model->View->Controller) 前后端分离开发,本质上解决的是如何获取数据,数据如何存储的问题 说大白话就是服务员->厨子->库房

  • 前端(服务员)
    • 用户来了找前台/服务员下单,通过菜单下单(菜单就是漂亮的前端界面/框架,react,vue),服务员拿到单子去找厨师报菜(前后端交互)
  • 后端(厨师)
    • 厨师根据单子开始协调各方(作为前端和数据库的中间层)、向库房要求做菜需要的原材料(从数仓获取数据)、做菜(数据处理,比如单纯的增删改查,或是推荐系统等)、做好的菜给服务员(处理好的数据返回)
  • 数据库(库房)
    • 仓库管理员(DBA)要保证库房始终可用,使用人数太多会不会把库房冲烂,库房里东西很值钱,如何避免丢失(灾备),如何避免用户把东西拿走了不掏钱(事务)

社会分工是一种标志人类文明飞速进步经济现象和生产方式。

这也就是为什么早期互联网开发一把梭,现在需要前后端分离开发,因为分离之后,其中每一部分负责的人水平都更高了,更加专业化

个人参与项目总览

  • 个人微信小程序项目(微信可直接搜索)
    • Abiya(蒙语学习项目,使用云开发,主要提供蒙语的元音辅音学习,内蒙古大学研究生合作项目)
    • 灵洋帮(个人2020开始运营,不断美化UI,添加功能,注册用户达2500余人,2023年停运)
    • 初心cake蛋糕外送(参与的商业项目,对接青岛某蛋糕店,累计用户达4.65w人,目前长期负责项目的运行维护)

前端开发

前端开发的技术栈主要就是Vue以及相关框架,网页做的比较少,主要集中在微信小程序开发,一开始使用原生三件套开发(html,css,js),后面开始使用uniapp和组件库/UI库(ColorUI/vant),使用组件库开发页面没有问题

后端开发

主要学习 java 后端,大二一整年从基础开始,按照后端所处的位置(前端与数据库之间)分两条路,一方面是使用数据库持久化数据,另一方面就是前后端分离之后, 面向网络请求/前端的 api 开发

  • 数据持久化
    • 从一开始的 jdbc 手搓 sql,再到后来的 orm 框架 mybatis.因为jdbc需要手动拼接sql极其容易出错,所以通过mybatis映射数据库模型,不容易出错
  • 前后端交互
    • 从 servlet 开始实现接口,分别实现get/post方法,把重复的操作提取出来,就到了springMVC,通过controller层接收请求,service层处理请求,mapper层映射数据库