在《一站式学习Java网络编程 全面理解BIO/NIO/AIO》的课程群里收到不少学生的提问~ 俗话说,学生就是上帝~ 于是我半夜不睡,来给大家答答问题:
Q: 网络io在工作中用在哪里啊?毕竟我们基本不会开发聊天工具啊
A: 我们在课程中使用的例子,的确是聊天工具,但这只是因为聊天工具可以帮我们聚焦在网络io模型的实现上。实际工作中,所~有~涉及客户端与服务器端之间通过请求-响应的方式交换数据的应用,都使用了网络io,比如说,移动应用开发,API开发,消息队列开发,集群中节点之间的沟通,等等。这样说来,我相信绝大部分同学们在工作中都接触过网络io
但是---注意我们要转折了---你是不是觉得自己从来没有真的写过和网络io有关的代码呢?这是因为,市面上大量的第三方框架,已经大大简化了网络通信层面的开发难度。框架的目的是什么?绝大多数框架的目的就是:让程序员可以专 注 于 业 务 逻 辑~所以,你回想一下,就会觉得自己一直在写业务逻辑,一直都是CRUD。这不怪你,对于公司来说,只有让你专注于业务逻辑,才能给公司带来最大价值。而那些更基础,更低层,更复杂的网络io模型设计与开发,就交给专家们解决,通过框架的形式提供给大家。这对于公司来讲,当然是性价比更高的选择。
Q: 我不想当专家,就想赶快学会最热门的框架,找工作时实用最重要
A: 分两个方面说。首先,如果你想进大厂,相信我,大厂招人一定会考察你的基础知识,而不是你对于某个热门框架的熟练度。原因我之前也讲过,大厂里牛人多,为了保持自己的竞争力,以及提供更好的安全性,大厂往往倾向于自己写框架,而不是直接拿来第三方框架使用(当然有些大厂会基于第三方框架来开发内部框架)。所以大厂需要确认你的基础知识足够牢固,才能快速的上手内部框架。如果某个大厂面试时,按住你疯狂考察你对于某个框架的熟练程度,那十有八九是在招聘短期合同工,要你即插即用,用完就走人(不过合同工工资较高,如果这是你的求职目标,那就忽略我前面的话好了,笑)
当然,也有些同学说,我不进大厂,我就喜欢小团队。这个完全没问题,我本人也曾经帮朋友的创业团队做过开发,很喜欢那种灵活度和速度感。其实,不管大厂小厂,都只是我们漫长的职业生涯中,短暂停留的地方。我个人的看法,工作的首要目标,是提高自己,利用公司提供的资源,不停的提升自己的能力。但你成为能力更强的人,你自然也会为公司作出更大贡献。所以,我不希望你满足于实用性,满足于业务逻辑的开发,直到35岁时,发现自己已经换不了工作了,只能被困在一个工作岗位上了。我理想的职业发展,是把路走宽,每年都学习新知识,每年都总结新经验,每年都被猎头追着挖~
Q: 我工作中真的用不到网络io耶,你上面说的那些应用我都不做耶,那这门课是不是白买了?
A: 当~然~不~是~
网络io领域是集各种模型设计之大成者。我在课程一开始就说了,课程中讲到的很多模式,不只是用在io通信中的。比如说,网络协议的分层模型,兼顾了扩展性和可维护性。那么,你是不是可以用这种思想来优化你的业务应用模块架构呢?你自己写的应用中的各种模块之间的依赖性足够清晰了吗?改动一个模块,是否还要牵扯到其他多个模块呢?还有,java.io包里面大面积使用的装饰器模式,是否可以应用在你的应用中呢?我记得第一份工作时维护的第一个应用,是一个将各种市场交易数据进行可视化的小工具。其中,负责绘制各种不同图表的模块,就大量应用了装饰器模式,这样就可以灵活的生成具备各种不同特性的图表。这是一个和网络io完~全~无~关的业务场景,但是一样使用了java.io包所使用的设计模式。这就是知识的迁移性啊~还有从NIO模型中提炼出的reactor模式,从AIO模型中提炼出的proactor模式,我们都会在课程后面讲到,这些都是可以应用在很多不同场景中的设计模式,网络io只是一种应用而已。所以说,我们学习网络io,但不要局限于网络io,眼光要宽,逼格要高~
写到这里,我真的困了,估计大家也听烦了,那就到此结束吧,休眠去了~
写于2019.9.5凌晨
共同学习,写下你的评论
评论加载中...
作者其他优质文章