meiboyu 发表于 2014-06-07 23:25

想往服务器开发方面发展,有些困惑,求建议!

我是个三本大三计算机专业的学生.不想考研,结合自己已经学的东西,自己想往服务器开发方面发展.
具体的方向想搞:分布式,云计算和集群.当然这只是我自己想了,具体可能还要看运气吧.
暑假准备好好准备校招,针对自己薄弱的地方进行加强,还请各位已经在职场的大神们指点指点~

介绍一下我的技能:
语言:汇编,C/C++,java,python.C最熟,函数指针,内存对齐,setjmp和longjmp,位段都算比较清楚的.C++也就是c+stl的程度..java写过一个局域网聊天程序,UI+客户端+后台.用python写过些脚本避免体力劳动,但学得很不全.学python也是看招聘网站很多服务器端要的python,所以就学了...汇编由于学校课程重新排了,所以学的比较杂....自学+学校教ARM,结果学了8086,AT&T,nasm和ARM的汇编....虽然都差不多,但也浪费不少时间.
自学过Linux编程,包括网络和多线程.但代码写的少,主要是看书和总结为主.
自学过单片机.也写了不少程序.也通过单片机了解了很多底层的运行过程.
自己大学还是以理论为主的,并且主要是学底层理论.所以代码总量不多,也就3W行的样子.
理论方面额外看了些底层代码优化和计算机的运行原理的书.算是对计算机整体运行有比较透彻的理解吧.应该对性能要求高的地方有些用.
操作系统也看了不少本书,包括<现代操作系统>,不少细节可以做到知道其底层硬件实现方式.
自己对操作系统比较感兴趣,所以自己写了个不完整的玩具操作系统,过几天准备重写(为写这个准备了好久,经验不能浪费了).
数据结构自己除开课堂和课设外还写过平衡树,堆排,优先队列之类的高级数据结构.还在OJ上刷了150+道题,跟ACMer比起来自然很水...但也练了很多东西就是了...
数据库会sql server和oracle.当然都很水就是了.跟着学校上课学的,学得不深.
网络方面对TCP/IP理论还是比较清楚的,包括路由转发等原理.就是代码写的不多,编程细节掌握比较差.
自认为基础还行~

暑假安排:
我看很多服务器开发要求python,所以我准备把python基础教程全部敲一遍,然后用python自己搭建个网站,从前端到后端.我准备花上整整一个月的.
还有就是刷leetcode,刷<程序员面试金典>和<剑指offer>.还准备看一下nginx的书的.

估计做完这些时间会有些不够..所以准备在算法和项目中进行取舍.但我很困惑到底我做到的程度够不够...

困惑:
1.针对服务器开发,我的哪方面还需要强化?暑假应当把重点放在哪?刷题,项目,还是nginx?
2.暑假是否需要学一学mysql?
3.网络方面有没必要看<TCP/IP详解>第一本?还是只用把理论搞清楚就行?


希望各位大神能提供一些建议以供参考~谢谢了~

冰封三万里 发表于 2014-06-08 09:44

新一代全能大牛即将诞生

chenzhiquan2000 发表于 2014-06-08 19:48

star_in_sky 发表于 2014-06-10 11:43

纯粹从我个人的经历角度来看:
1) 我个人觉得你的基础很好(其实,貌似多年工作的人都未必可以写个OS),基础算法都已经掌握的不错了。我觉得,你把重点放在你那个“操作系统”的项目中,不断的精炼,你会学到更多的东西:因为在开发OS的过程中,你需要研究更多高级的算法;这个比纯粹学习算法要有效果,需要考虑程序结构......。貌似达芬奇画个鸡蛋,都能成为一代大师的:D)
2)多看看数学类的书籍:绝对有助于你能力的提高。我个人觉得可以从线性代数入手。
3)其余的书籍(python类的,程序员面试金典,剑指offer)都别看了。

忌:贪多!!! 不要随随便便想着往广度方向发展,找到一个点之后,不断地深入深入(乔峰用一套太祖长拳,就可以把少林神僧打的灰头土脸)。其实计算机很多概念都是相同的,当你对一个方面非常精通后,你在学其余的话,你会学的又快又好。

至于你想往服务器方面发展,你无须这么着急。先完善你的“操作系统”,如果可能的话,为自己的操作系统写一个TCP/IP网络栈。

杂七杂八说了这么些,希望对你有帮助。

meiboyu 发表于 2014-06-11 17:20

回复 4# star_in_sky


    谢谢你的建议...感觉可以当作一个长线发展的指导,但现阶段还是以找工作为主吧..但我感觉集群,云和分布式很和数学难关联上吧,可能分布式要点数学的知识...自己原来也以为数学很重要,但是发现高数很多在应用中很难用上...即便用上很多其实也有相关的算法了..比如自动化领域的PID算法..即便没有现成的算法,找paper读一读应该就可以了,到时候再补即可...
我个人现阶段主要还是想争取进个好公司...看网上大公司的面试题很少考高数.....自己本身学历比较差...想先进个好公司先镀个金...由于自己一直学的比较底层..能去的好公司也少...感觉不太好找工作..之前3月份也找了实习的..有项目经验还是很能加些分的..面试的时候有个面试的直接就说我做的东西太乱了,不如把java学扎实....甚至直接说多久能开始写代码...所以我还是比较担心自己能不能找个好公司的....这也是我学python的原因,想快点上手,至少可以不用让公司承担过多的培养时间吧,增加点面试成功率.
我有好久没写算法了...感觉还是要看看那些书找找感觉的,而且以前学算法学的确实很水.....

主要还是比较困惑服务器开发的要求...对于TCP/IP和数据库至于要到什么程度,网上的一些招聘要求都写的很笼统...搞的我很迷茫...

还是谢了..

star_in_sky 发表于 2014-06-12 14:17

回复 5# meiboyu


    如果你不想只当码农,数学真的很重要;如果你需要解决一个现实问题,良好的数学功底,可以让你的眼界远远高于其他人。至于你说的那几个方向(分布式,集群),每个领域都有很扎实的数学基础才能有真正的做深。
   看看下面的链接: http://www.matrix67.com/blog/
   人家也是写程序的;但是我可以这么说, 我们能解决的问题,他能够解决;反过来,就不一定了。你感觉数学没有用处, 是因为你遇到的问题还是太少。等你工作几年之后,你就有体会了,但是希望那个时候不会太迟。
   如果只是用用现有的东西,那么数学不重要。

    说点实际的:
    1)关于找工作:在简历中你确实需要突出你的优点(比如说:你熟练使用C语言);让面试的人知道你有什么特长。至于其他的,你需要提到;但一定要有重点(投“面试官”所好)。
    2)关于服务器开发:我确实不太清楚你指的是哪个方面?指网站类开发?还是说使用socket编写网络程序(Web服务器等)。
      如果是前者:那么你需要熟悉 Java语言和开发网站的基本技术。
      如果是后者:那么你需要熟悉 OS层面,特别是有关I/O方面的基本模型:select, I/O完成端口,epoll模型,异步读写,多线程/多进程。
                        会阅读RFC协议。
      (其实无论前者/后者,熟悉TCP/IP协议都是需要的)
    3)数据库方面:基本的SQL技能是必不可少的。

hexilanlan 发表于 2014-06-12 14:32

赞一个。。。

meiboyu 发表于 2014-06-12 22:02

回复 6# star_in_sky


    嗯,谢谢再次回复.数学的话现阶段肯定是不考虑的,以后再仔细考察一下对于我这些方向是否真的有那么重要...第一点我在其他地方也看到很多次了.....我认为有些公司就是准备压榨实习生工资的,招聘上写着是要求C经验,但是去了还是要求你搞java,然后各种打击你........关于第二点.具体的我还没实习,不太清楚网站开发和web服务器的差别...可否详细说明一下?

我看服务器开发招python也比较多,相对于java而言,python开发比较快,还可以调用C/C++的库,感觉我学过的东西不会浪费...学java的话,又得重新开始学jvm一套相关的东西....虽说java库中也是用的C/C++写的,但对于面试的话,还是先学python比较好吧.

网络方面主要想问面试需要学习哪些内容..服务器开发能搜到的面试题目比较少,而且都是基本理论比较多...这一块哪些具体的方面需要扎实一下.比如哪些协议过程要详细了解,需要了解哪些比较重的协议的功能,底层的一些容错机制,丢包处理之类的...感觉在学校学的东西,除了知道一些常识以外,其余用的很多的协议了解的都比较少,基本直接带过.....搞得我不知道从何下手....希望从工作中用到的内容谈一谈~


数据库的话对于开发应该会用select就够了吧?是否需要了解详细的处理过程?感觉很多是DBA做的事情...不知道为什么很多服务器开发招聘上面还写着说熟悉mysql之类的..还是希望给些具体一些...

我个人是希望去游戏公司的,但是游戏服务器开发比较少,web服务器开发比较多..所以暂时按照web的来准备...两种开发转换应该不难吧?

star_in_sky 发表于 2014-06-13 11:17

网站开发更加注重业务流程,所以掌握数据库知识是必不可少的;而且你是绕不开Java的。

说说数据库方面的事情:
1)一般公司中的开发,也许会有DBA;但是很多时候这个角色是程序员来兼任的。而且,如果公司交给你一个模块开发,你需要做些测试,你总不能老是让DBA帮你管理数据库的。实际的场景是:你需要独立处理。
2)如果你仅仅认为会select就够了。我可以这么说,你在开发工作中会被老板,经理骂的。
3)在实际的开发工作中,数据库是必不可少的技能之一;而且绝对可以为你找工作加分的。
4)熟练使用数据库,可以很好的帮助你的职业生涯。现实世界中,基于数据库的应用是非常多的。

至于我说的WEB服务器开发,我仅仅是举个例子。这类开发主要是基于socket的网络编程,但是大部分涉及到的是基于应用协议的开发,一般不会涉及到TCP/IP这么底层的东西。

一些个人经验,自己斟酌:
面试题目这种东西,基本无用。一般公司(无良的除外)招应届生,考虑下面几点:
1)个人基础。
2)性格(需要能交流沟通,承担责任)
3)学习能力,适应环境的能力。
还有,找到好的公司需要一点运气。

如果你有时间,多写代码。

meiboyu 发表于 2014-06-13 12:30

回复 9# star_in_sky


    嗯.谢谢你的建议.我再重新想想我的安排吧.
页: [1]
查看完整版本: 想往服务器开发方面发展,有些困惑,求建议!