我是一只IT小小鸟

  1. 什么是基础扎实
  2. 什么是一个项目?
  3. 卷王?学校不教?
  4. 自学
  5. 自学能力的体现
  6. 习惯的养成
  7. 善于发现 多学多做
  8. 杂项

什么是基础扎实

用我LinuxC++方向举例吧,同时会附上基础的作用。

计算机网络–什么是TCP,什么是UDP。

教科书上会这样写“TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议”“UDP是无连接、不可靠的、基于数据报的传输层通信协议”。

TCP还会介绍下超时重传、拥塞避免、流量控制这三个保证可靠的相关机制。再者还有一个滑动窗口。

上面的这些内容你大可以在教科书和几乎任何一篇八股文中找到,并将其背诵,然后去参加面试。这基本算是及格线了,如果你连这些内容都不知道,面试官的印象分就会打折扣。

如何落地呢?就拿王者这种moba游戏举例吧。

TCP通过上述机制保证了传输可靠。但是,古尔丹,代价是什么呢?客户端向服务器发送了向上移动、向下移动、发送集合信号、使用了技能、给队友点了赞和给队友发了条消息以示问候等等,这些可以看成一个个独立的消息。

你按以上顺序将这些消息通过TCP发送到服务器端,有序的机制会保证这些内容按顺序交付上层,如果其中某些字节丢失了,TCP会帮你重发这些字节。假设恰巧向下移动这个消息的相关字节丢失了,但给队友点赞这个消息的相关字节服务器已经收到了,然而由于前面的相关字节存在丢失,点赞这个消息的相关字节即使服务器已经收到了,服务器也没法拿到其相关数据,必须等到丢失的字节重传完成,才会交付上层。TCP重传向下移动这个消息丢失的字节,会导致后续所有消息都被延迟交付给服务器上层。导致延迟的出现。

即使重传一个字节,在30ms的延迟下,至少需要35ms左右的时间,甚至是100ms的更长的时间。相当于你比对面多了35ms到100ms的瞬间延迟。如果重传的这个字节又丢失了,时间将会翻倍。谁也不想在你越塔强杀对面的时候出现卡顿吧。

如何解决上面的问题?

使用UDP替换TCP,额外通过一部分代码来使得UDP的可靠性达到项目的要求。UDP是基于数据报的协议,意味着每次发送消息,服务器都可以独立的收到,不受在其之前发送内容的影响。试想下如果你将向下移动这个消息发送了两次,只有一次丢失了,另一次到达了,刚才提到的额外延迟就消失了。在moba游戏中延迟比流量消耗更加重要。当然实际可能要更加复杂。

从问题的提出到问题的解决,需要对TCP和UDP的相关机制有足够的的了解。如果你能够实现一个可靠的UDP协议,不敢说会超越多少人,至少能秒杀只背诵八股文的人,你的排名就会上升。

什么是一个项目?

考虑到学C++的人要少一些,这里就用Java举例。Java最常见的项目是xx后台管理项目,一般会使用Springboot框架进行开发。数据库管理可以使用Mybatis或者SpringJpa。然后在其上堆砌业务代码就能实现一个基础的后台管理项目。这属于入门水平。

之后你可以通过引入更多的组件来让你的项目更加完善,使用redis、RabbitMq等等。最终你的项目集成了四五个组件,功能上来看是一个完善的后台管理项目,这属于及格水平。

那么差距在哪里?如果仅仅是能跑,大家都可以跑起来。当出现问题的时候,你能不能快速又准确的定位到问题在哪里,知道如何进行修复?项目性能瓶颈后,如何通过优化这些组件或替换组件,来使得项目的性能更上一层?换言之我感觉差距是在对这些框架和组件的熟悉程度上,你对其越熟悉,出现问题的时候解决就更快。体现在面试中就是你为何以及如何使用这些组件,有没有遇到什么问题,怎么解决的。

最后复述一下我是一只IT小小鸟中的一段话。倘若没有这些基础,仅仅会用这个工具、那个框架,充其量也不过是个IT民工,今后的发展必定受到制约,选择只有三条:a.做一辈子IT民工;b.将大学欠下来的债补上;C.改行。

这些基础在本文指的就是计网知识和对组件的熟悉程度。如果你不了解这些而是仅仅会用,那么你将来在解决问题的时候,欠下的熟悉程度终究是要补回来的。如果不去解决,那就是把晋升机会给了同事,把毕业机会给了自己。

遇到一个问题,询问其他人解决,属于入门水平。

遇到一个问题,自己搜寻资料解决,属于及格水平。

遇到一个问题,知晓其发生的原因并做记录,二次发生后解决更加快速,属于优秀水平。

遇到一个问题,知晓其背后发生的根本原因,从源头解决,自然是更加优秀。

卷王?学校不教?

感觉大家看完上述描述,可能会感觉了解上面的人是个卷王吧。是他们让面试的难度越来越高。如果你有这样的感觉,会怎么做呢?两手一摆,太卷了,你们卷吧,我打游戏去了?学校不教这些,所以我不了解这些,然后面试被这些卷王卷没了?

这里我再说一下高效能人士的七个习惯中的一段话。我们面对的问题可以分为三类:可直接控制的、可间接控制的和无法控制的。就面试要不要卷这个问题上。如果你是某公司的老板,大可以直接给自己发一个offer。或是你认识一些人,这些人可以让你避开卷就能拿到offer。如果这两个都没有,那就属于无法解决的问题,也就是说卷是必须的。对于无法解决的问题最好是坦然接受,抱怨和逃避是没有办法解决的,反而会让你的心态变差,最后拿到与不卷相对应的结果。

http://foryoung365.github.io/development/2016/09/08/tcpvsudp

自学

身边了解到的人全部(样本不多,所以敢说全部)都是通过自学拿到offer的,暂且还没发现只上学校课程就能拿到的。就我自己理解来说,自学是在课余时间有目的自主学习某些内容。
不过这里首先不给出自己总结的一些自学方法,而是先说一下可能出现的问题,同样以我来举例。

既然是自学,总归会从某些地方获取到一些学习路线,然后准备按照这个路线走下去。就我来说,开始找的学习路线都是最贴近我当时水平的,而不是那种从小白到最强王者的学习路线。一是后者的路线给的点太多了,根本不知道从哪里入手,要不直接劝退,要不这里学学、那里学学,都没学透。二是想着从简单的入手,一步一步的来,先学着,也就没过于追求后者。这样每次得到的路线都相对平缓,由于相对平缓基本能自己摸索出一些问题的答案,不会遇到很多天大的障碍。等到了本段路线的后期,就有了我行了的感觉,满足于当前所学,再之后就不知道继续学习什么。我能做的事局限在了我的眼界之内,就我当前所学,已经不知道往什么方向努力了。在盲目的自信或者满足于当前所学的几天乃至几周的时间里,几乎不怎么去继续学习,在外界刺激或者自觉后才想起来再去看看还有啥适合当前的路线。这时候才会发现“我凑,我怎么这么菜,我要学的还这么多,赶紧学”。这个自信和满足的时间随着我学的越来越多,时间就越来越长。说来也很奇怪,我也无法解释,但确实存在于我身上。

我查找问题解决方法的演变路线如下。问学长-》学会通过百度查找问题的答案-》学会屏蔽csdn查找问题的答案(提高效率)-》学会使用谷歌中文查找问题的答案-》学会使用谷歌英文查找问题的答案(大三上)。大三上到现在,我查找问题解决方法的能力几乎没有变化,我已经停在英文搜索问题答案这一步了。虽然渐渐的有部分问题我已经找不到合适的答案,但我也很少使用StackOverflow提问,搜不到就算了。下一阶段是啥,我也不知道,我也没去继续了解过。

自学也导致了我变的相对封闭,万事靠自己,几乎没有和他人交流过相关技术经验。当然也被动的和他人交流过,大多数时候都能收获颇丰。虽然有过收获,但也没怎么主动的和他人去交流过。

自学能力的体现

不知道各位玩不玩游戏,我是很喜欢的,也喜欢加一些游戏的讨论群。在群里能看到有人会问一些问题,有的问题相对基础,有的问题相对复杂。对于这些基础问题能不能自己解决,或者是有没有尝试过自己解决,我感觉也是自学能力的体现。就我来说,喜欢去游戏的wiki中找问题的答案,因为我玩的都是相对热门的一些游戏,wiki的建设都是非常完善的,如碧蓝航线、原神、FF14等等。除了wiki还有Nga、贴吧等等地方,或许你的问题已经有人问过N次了。

再讲一个小例子,我在某厂实习的时候,厂内的论坛由于某些原因加上了禁止复制。之后有人就发帖调侃,大概意思是:“我们好歹是技术公司,你整这个是看不起我们吗?也就能拦拦PM之类的吧。不会真的有开发人员不会解决吧,面试遇到了直接给他挂了。”

禁止复制这个问题我感觉90%的人都遇到过,那么这些人在遇到这个问题后,有没有尝试过去解决这个问题呢?我也没做过调研,或许这90%的人都会解决吧。这件事我感觉就体现了一个人在遇到问题的时候(这个问题很重要,直接影响到了你能不能复制!),有没有尝试过去解决。解决方法自然是百度一搜就一堆,学一次终身受用。

习惯的养成

这里的内容是在我大四实习后想到的,大四下学期尝试改正了改正,不过比较难改,成效有限。

善于发现 多学多做

脚本 也是遇到问题后主动看看有没有解决方法

杂项

眼界问题–就他所学,他已经不知道自己该继续往什么方向努力了。在封闭的环境里,几乎不能得到来自外界环境关于我方向的信息,久而久之就养成了一种处处都自己摸索的习惯,更要命的是这个过程一直没什么障碍,导致盲目的自信。

崇尚自学,但由于缺乏必要的引导,走了不少弯路。后悔吗?不,我从不吃后悔药。遗憾吗?那是肯定的。

自学能力–在大学里能学习到的唯一的东西就是学习,毕业之后在公司看来大家都是一张白纸,不同的是这张白纸的吸墨能力有多强。

分不清重点,关注了太多无关紧要的东西。


不懂平衡术,高考付代价–高效能人士的七个习惯 要事第一

快想 快说 快干

题目是这么要求的吗?你从题目能看出什么要求?你认为最重要的要求是什么?将一个简单的问题考虑复杂了,貌似我一直没有抓到重点。考虑过了吗?考虑过没有?怎么实现?

平时没有怎么去想,脑子之前没有转过,现场去转总会犯傻的。

知其然而不知其所以然。

加强实践与执行力。不要欠生活,不要欠工作。出来混,总是要还的,你不会的知识,你懒于想通的东西,总是会在一个必要的时候提醒你、惩罚你。将没有搞懂的、希望做到的东西,写在纸上、贴在面前,认真实践,当你做到的越来越多的时候,你就会越来越自信,你的层次会提到的。相信我,人与人之间的差距很大,原因在于自我控制力有差距。


有人说,大学的本科阶段,是一个人的性格最终成型的阶段,同时也是为将来的工作打好基础、做知识方面积累的最好的时光。可惜我没抓住。

大学跟中学最大的一个不同之处就是,课堂上的知识只是一个引子,更大的功夫在课堂外面–在图书馆里、在自习室里。因此,原来差不多的我们一时间因为勤奋程度的不同而拉开了差距,

计算机行业在十年前就已经是热门行业,每年都有一大批学生选择计算机作为大学专业,全国几乎每个综合性大型都有计算机系。到底是什么让某些人出类拔萃?是深度。
每个人都会在自己简历上写会C++,但真正分析过STL源代码的人不多;每个人都会声称自己精通各类操作系统,但是真正能说清楚Linux系统启动流程的也不多。
如果一个事情比别人多付出5%的努力,就可能拿到别人200%的汇报