10

双非硕士的辛酸求职回忆录:第 3 篇 谈谈如何准备开发项目的

 3 years ago
source link: https://www.cnblogs.com/yushou1su/p/14853623.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

1. 双非硕士的辛酸求职之旅--第3篇:谈谈如何准备开发项目的

在上一篇文章《双非硕士的辛酸求职之旅--谈谈我是如何同时找到 Java、Python、Go 等开发岗和国企银行的科技岗位Offer》的最后。

我最终是拿到了一家小公司的实习 offer,毕竟准备得晚,只能认了。

作为老学长,我的建议是 3、4 月的时候最好是要有知名公司的实习,这样在正式秋招为自己增加很多筹码。可能其他公司一看你的实习经历,可能就愿意给你机会让你进面试了,甚至直接免笔试,毕竟大厂 buffer 加持,人家就很想了解你在大公司的实习情况。

如果你也像我一样小公司实习,甚至说你没找实习。那也不意味着你没有了机会,我认为暑假这段时间一定要好好把握,做两个不错的项目,然后吃透一个!这里强调一下是吃透 1 个项目,为什么呢?

下文再解答...

1.1. 无论我们做什么项目,在面试官眼里都可能是 Low 的?

先说一个可能的残酷现实:无论我们做什么项目,在面试官眼里都可能是 Low 的。

你可能会反驳我,如果想。我承认你对...

比如秒杀系统,这几年都强调高并发的经验,所以大家都做,那些相关技术栈都快成八股文了,网上相关文章也一堆,你会觉得高大上,但是面试官如果问:

  • 你项目上线了吗?真实情况有人用吗?没人用你做成这样干嘛?
  • 为什么选 Redis 不选 Memcache?
  • 为什么消息队列选 RabbitMQ,不是其他?
  • 等等一堆你可能想不到的问题

其他项目就更别说了:博客系统、在线聊天工具、XX 爬虫系统、XX 管理系统...

有些读者可能会问了:我作为一个学生,那我要是能做出微信、头条、淘宝这样的项目,我还用得着来这公司上班?下一个扎克伯格怕不就是我了?

问的好,其实很多企业级项目归根结底,本质也是这些项目。那为什么我们做不太行呢?

总而言之,我说的 "Low" 不是说项目真的不好,而是想表达项目难做。什么叫难做?

1.2. 做项目不是跟着开源代码/视频敲一遍

作为学生,本来大家就不可能做的是企业级项目,所以没办法。大家都会选择一些常见的容易上手的项目来做,这些项目不是不能做,但绝对不会是你跟着开源代码或者看视频跟着敲了一遍,就说你做了这个项目。

好好思考一下。你是真的懂背后的原理吗?比如:

  • 你的项目架构是啥,了解吗?(我记得面试的时候好多面试官喜欢问,还有线下让我画架构图)
  • 为什么要做这个项目?问对业务逻辑的认识?
  • 项目用的什么数据库?问 ORM、MyBatis,或者继续深挖数据库的知识点
  • 上 Spring 的,问 AOP、IOC;问对 servlet 的理解?
  • 上前后端分离的,问如何解决跨域请求?问 session?
  • 上高并发的,问如何优化使得并发量有提升?
  • 上微服务的,问你微服务怎样设计?
  • 项目出现什么,就看你会被问什么?

有时候最怕顾此失彼,为了追最新框架、最新技术,往往忘记了对核心的技术原理的理解。

所以项目难做就在于此,你用旧技术他会觉得 low,你用新技术他会觉得你只是单纯的套用,又不是真正的懂。

所以针对这样的情况,我的看法:虽然事实是我的项目其实做的是有点 low,但是小项目也要展现出它的高大上。

那么,如何展现出高大上?

1.3. 让项目的来源上高大上

项目的来源无非几个:学校;企业(有实习的同学);网上(开源 or 付费)

1.3.1. 学校或企业做的项目

珍惜每一次锻炼的机会,用心做好每一次的项目:

  • 课程设计/毕业设计中:虽然我是小 demo ,但是我拿到优秀的项目哦(展现拿到优秀的点)
  • 比赛项目:ACM、互联网+、挑战杯、蓝桥杯(我这个项目获奖了,专家评审认可的;没获奖也可以高大上,比没有好对吧)
  • 实习项目:如果这是 BAT 的实习项目呢?(大厂实习虽然可能只是简单 CRUD,但至少来源就高大上了。)

在 2017 年本科那会,有门课需要做 Java 课程设计,我们大家都做的管理系统,全班只有一个同学做了坦克大战,然后还可以让老师体验玩一下。

你体会一下,如果是你是那门课的老师,你喜欢哪个项目?

1.3.2. 网上学来的、或开源项目达到高大上的效果

如果你觉得学校的课程设计不够好,免费的项目 GitHub 和 Gitee 上的优秀开源项目很多;付费的牛客和慕课上的针对性项目也挺高大上的。推荐大家学习:

你学了后如何体现你的项目高大上呢?

  • 比如你做的项目开源,得到了2k 以上 star ,高大上吧
  • 你对某个大牛项目有自己的贡献,发现了啥 bug 也挺高大上
  • 你的项目跟着 mou 前阿里/字节架构师/工程师学的(这个 title 的付费项目一大堆,跟着学比自己乱写的的确要高大上吧)

或者大家都是本地项目,你的项目部署上线了,然后面试官可以直接访问,看到你做的项目;比如你做了小程序的项目,打开微信就能体验,哪个项目高大上?

1.3.3. 对项目的思考要多一点,也很高大上

优秀又好做的项目好多人推荐,那么就有可能大家都做同一个项目(比如秒杀),但是你对项目有自己的思考,就很不一样的。

如何展示给面试官你的与众不同?

  • 大家都用 Java 做高并发,你来一个 Go 语言版本的。大家都上框架做 Web 开发,你自己写了一个 MVC 框架, RPC 框架等等。
  • 之前还看到一本书中的一个观点,做一些有工具也很有亮点。比如我们每天在 Linux 中都在用的 cat 命令,你有没有研究过这个命令的实现算法,你来做会怎么做?
  • 代码重构,项目优化也是很多人不会想的点,极少人做那就是高大上
  • 其他可以思考的点,大家多去网上找找。

最后,做“高大上”只是我的一个技巧而已,而且只是提供一个思路,希望大家都要好好准备一个项目,让自己吃透,这一点就足够高大上了。

1.4. 为什么我建议你做两个项目比较好

以我的经历来说,2020 年 6 月之前,简历上只做了 Python 的项目:一个在线教育平台和一个上线的个人博客。

所以只能投 Python 的岗位,根本不敢去找其他如 Java 的工作,而且投了也没有什么回馈。为什么呢?

首先,Python 不是一门企业级应用首选的语言,据说是会有一些坑和性能瓶颈,导致用 Python 做后端开发的公司较少。以前用 Python 的公司也都转 Go 语言了,貌似知乎、字节都是如此。

其次,Python 更多是作为机器学习和数据分析的首先的语言,读研期间会使用到的框架基本都和 Python 联系密切,所以找算法和数据岗可能更好一点,所以我拿着 Python 在后端开发方向( Java 和 Go )的简历中没有一点优势可言。

最后,Python 作为一门简单的解释性语言,入门时大多人都会选 Python。随着学习的深入,个人体会却是 Python 易学难精,但作为第二语言真的不错。

所以在 7 月和 8 月份的时候,每天就是恶补 Java 项目。因为感觉再做秒杀系统,我玩不出新花样了。我选择了校园微商城项目,而且小程序在那会也不算过时,毕竟时至今日,小程序开发还是很有市场的。

人真的是被逼出来的,如果不逼自己一把,就永远不知道自己什么时候可以做好。

1.5. Java 和 Python 双项目真的让我受益颇多

正因为有 Java + Python,我可以投互联网公司,可以投银行,可以投国企。

我还记得有面试官问我对这两门语言的看法?

(我在想这不是正中下怀吗?就等你问了)大概是这样答得:

  • 因为这两门语言都挺火的,Tiobe 排行都是前几名,所以我想都学习一下。
  • 再者,就像好的工程师知道用更适合的工具拧相应的螺丝。开发也是如此,编程语言也是工具,有优有劣,用不同的语言做更适合它的项目罢了。
  • 我本科学的就是 Java 做 Web 开发,Python 是在读研期间学会的。因为机器学习的课程使用,而且好用的机器学习库都离不开 Python,这时候更适合我的工具就是 Python 了。后面在这个基础上接触了 Python 的 Web 开发框架 Django,由此做了我简历上的这个项目。

大概就是这样,吹水还是要会的。

最后我在秋招中,也不限定只投某个具体的编程语言。凭着 Java + Python 的双项目拿到了 Java 开发工程师、Python 开发、C++ 游戏开发、Go 后端开发工程师的 offer...

C++ 开发那个我是说自己本科学过,但是不咋会;Golang 提的也是我正在学;离谱的是也进入了 Erlang 开发的面试,面试官说如果拿到 offer 可以培养的。

所以,这也是为什么校招中很多公司要求至少一门编程语言但不限于 C/C++、Java、Python、C#、javascript... 的原因吧。

1.6. 总结

关于如何做项目的几个点终于说完了,也不知道对大家有没有一点帮助。最后推荐几个我觉得还不错的开源项目吧:

1.6.1. 开发项目类

Java 的项目推荐:

Go 的项目推荐:

1.6.2. 知识复习类

如果你还是不知道该做什么,请参考

  1. GitHub 中文排行榜

下一篇讲讲如何准备算法吧,算法不是我的强项。其实我感觉我对面试的体会还是更多一些,后续也写文章讲讲《如何准备面试》
我是宇宙之一粟,热爱文学和技术,想文理兼修却还在探索的人。希望看到这里的同学,点个赞或关注一下,谢谢。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK