程序员的学习总结

自从踏上程序开发这条不归路后,不是在折腾就在折腾路上。从事这个行业的孩子基本上是勤奋的童鞋,因为技术一直没有停止更新,基本每隔一段时间就会有新的技术出来。所以一直盲目的追从,是没有效率的。
无论哪种技术思想出来都有个基本的根,学好了这些基本功再接触这些技术就会事半功倍了。

1. 数据结构+算法

《计算机导论》先驱就有提过著名公式:程序=数据结构+算法。
数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。

数据结构
  • 线性结构

    数组,链表,队列,栈


  • 无序树,有序树两大类,二叉树、查找树、平衡树、线索树、堆

  • 图是一种复杂的非线性结构。
    在线性结构中,数据元素之间满足唯一的线性关系,每个数据元素(除第一个和最后一个外)只有一个直接前趋和一个直接后继;
    在树形结构中,数据元素之间有着明显的层次关系,并且每个数据元素只与上一层中的一个元素(双亲节点)及下一层的多个元素(孩子节点)相关;
    而在图形结构中,节点之间的关系是任意的,图中任意两个数据元素之间都有可能相关。

算法
 初级篇:记住都有哪些算法,解决什么问题去试图解决实际的问题,自然会碰到之前算法解决的问题,使用这些算法.

 高级篇:先完成中极篇分析一下算法的解决办法是如何才能想到,最核心和最精妙的地方在哪儿实际的问题如果与标准算法都不太象,仔细想想这个问题的本质,借鉴经典算法精妙之处,自己设计自己要用的算法. 

 骨灰篇:先完成高级篇忘掉所有算法解决实际问题.

2. 网络编程

  • 多进程/多线程
    了解Linux操作系统进程和线程的概念
    了解Linux进程/线程切换调度的基本知识
    了解进程间通信的基本知识,如管道、UnixSocket、消息队列、共享内存

  • SOCKET
    了解SOCKET的基本操作如accept/connect、send/recv、close、listen、bind
    了解SOCKET的接收缓存区、发送缓存区、阻塞/非阻塞、超时等概念

  • IO复用
    了解select/poll/epoll
    了解基于select/epoll实现的事件循环,Reactor模型
    了解可读事件、可写事件

  • TCP/IP网络协议
    了解TCP/IP协议
    了解TCP、UDP传输协议

  • 调试工具
    使用gdb调试Linux程序
    使用strace跟踪进程的系统调用
    使用tcpdump跟踪网络通信过程
    其他Linux系统工具,如ps、lsof、top、vmstat、netstat、sar、ss等

https://wiki.swoole.com/wiki/page/487.html

3. 分布式处理

  • 关系数据库/NOSQL 高效使用,索引,事务,锁机制,主从热备,分布式集群使用。
  • 缓存。高负载分布集群的使用。
  • 分布式web服务器。如nginx优化负载均衡,keepalived+nginx热备等。
  • 分布式消息队列。

4.学好uninx/linux

它提供了一个驱动力让你去真正掌握你应该要掌握的知识——编译原理、计算机网络、操作系统……想要用XXX功能?学啊!想要插U盘?学mount!想要定时备份文件?学crontab!每一个功能都或多或少让你明白Linux背后的机理。Linux高昂的学习成本对于开发人员来说,才是正常的。因为操作系统就是有这么复杂,就是有这么多知识要掌握,使用系统的本身和Linux正统的C语言让你把所有计算机的基础知识都串了起来,不再只是空中楼阁不可触摸。而且毫无疑问它可以提高你解决问题的能力。以致于现在每当提起Linux,我都觉得自己是个SB。

它提供了无数可以重用可以自由定制的工具。“君子生非异也,善假於物也”。以命令行而不是GUI为界面有一个巨大的好处——管道风格的重用。虽然命令行使用起来不如GUI直观,但它在可扩展性上有无与伦比的潜力;甚至连操作系统本身都是开源的,你可以定制属于自己的个性化系统。你的生产力会大大提高,而且你不必再重复发明轮子,你可以专注造你的dream car。

它提供了一个以分享、协作、创新的开源自由环境。“Linux上每个程序都是半成品。”个人撰写的程序在最初是为了满足自己的需求,而后他将他分享出来;你想要使用他的程序,但程序不够完善,你将它修改之后满足了自己的使用,而后又将它分享了出来。就是这样一个又一个的使用者和开发者双重身份的协作,让程序越来越优秀,没有止境。

它提供了一个历史悠久、经受了考验的技术框架。技术发展日新月异,今天所学明日可能已成糟粕。windows下面的技术从win32 api到.net便是一例。但从Unix上传承下来的底层技术却少有变动,一直广为使用。从知识的长期投资性价比来说,Linux也应当作为可靠的选择之一。

5. 熟悉一门,了解几种语言

编程语言有面向对象,面向函数,面向过程区分,各有优缺点,按场合使用。

但总体原则是不变的,可读性好,易维护,容易扩展。效率按开发效率,执行效率取舍。

可在熟悉一门语言基础上,再多了解几门语言,开阔视野。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值