杭州嵌入式linux培训哪个好
现如今,Linux的应用与学习日趋广泛,各种学习内容与方式也层出不穷,我个人认为,千锋教育的教育方式就别具一格,且极为实用。
“学习Linux内核”对不同的人有不同的含义,学习方法、侧重点、投入的精力也大不相同。我大致分三类:reader、writer、hacker。reader 就是了解某个功能在内核的大致实现 how does it work,一般不关心某些极端情况下(内存不足、受到攻击)的处理方法,对于看不懂的地方也可以跳过。我自己最多算半个 reader,只看我感兴趣的一小部分代码(我只关心 TCP 收发数据,不管 IP routing/forwarding/fragment 等,更不会去关心 ethernet 层),而且读一个函数一般只看主干(happy path),不管 security/debugging/tracing,经常忽略错误处理分支。writer 是给内核加feature和改bug的人,需要更进一步的知识,写代码要考虑 how not to break it。hacker 是通过分析代码找出安全漏洞并加以利用的人,研究 how to break it,读代码恐怕更注意找出error handling分支没有覆盖的case。内核向用户态提供的接口很稳定,但是内核的具体实现变化很快,你深入钻研获得的知识很容易就过时。比方说 Linux 的 TCP 实现在2015年3月新加了 TCP_NEW_SYN_RECV 这个非标准的 TCP state,同年6月发布的 kernel 4.1 才开始用它。如果你学的是一年前的 kernel,那么建立TCP连接这方面的细节知识对于今年发布的 Ubuntu 16.04 可能已经过时了。Linux内核的编码风格不值得效仿。比如 tcp_v4_rcv 这个函数,有很多 goto:tcp_ipv4.c [linux/net/ipv4/tcp_ipv4.c]Linux内核的一些做法在 C 语言中是合理的(比方说用包含函数指针的各种 xxx_ops struct 来手工实现虚函数表,通过控制 struct 内存布局来模拟继承:tcp_sock 继承 inet_connection_sock 继承 inet_sock 继承 sock 继承 sock_common),在其他高级语言中往往有更简便的实现方式,不必生搬硬套。遇到 xxx_ops->some_func(arg) 这种代码,思路容易断线,这个 xxx_ops 到底指向哪个具体实现?最好能把代码跑起来,用调试器单步跟踪,一下子就定位到了 callee。当然,读 OO 代码也会遇到这个困难,传进来的这个 interface 在运行时到底是哪份实现?读 Python 代码就更难了,函数参数光有个名字,连 type 都没有。Linux内核比较注重代码的通用性和复用性,要照顾那些虽然你用不到但少数人会用的需求。通用性方面,虽然现在大家都用以太网,但是网络协议栈的代码还在支持 FDDI、Token Ring(从 3.5 版起已删除)、ATM 等,偶尔会扰乱视线,更在原本简单直接的做法上增加间接层,加大了理解代码的负担。复用性方面,从 3.17 版开始,IPv4 和 IPv6 共享同一个 tcp_conn_request() 函数[tcp: add tcp_conn_request • torvalds/linux@1fb6f15 • GitHub]。原来的做法是各自有 tcp_v4_conn_request() 和 tcp_v6_conn_request(),新合并的 tcp_conn_request() 为了处理 v4/v6 的不同情况,用了一个 struct tcp_request_sock_ops* 参数,这代码读起来就比原来绕了。虽然我不关心 IPv6 的实现,但读代码的时候却不能排除其干扰。Linux内核广泛采用的侵入式数据结构设计恐怕很难应用到一般程序开发中。基本上是个高维十字链表,一个节点(struct)可以同时位于多个hash/list/tree中。如果你本身就要从事内核开发,那么以上这些都不是问题。对于这用户态写server的人,学内核的目的是什么,学到的知识能不能/要不要/如何用到日常开发中,这是值得思考的。同样的情况也出现在 Java 开发者身上,一般的 Java 程序员要不要读 JVM 的实现?我记得有人对此有过精彩的论述,我完全同意他的看法。特别是当你功力不够时,强行去读源码,结果读错了地方(一个函数有多个实现,你读的那个其实没有被调用,甚至没有被编译),造成了错误的认识,回头来还跟人争论说JVM/kernel里是如何如何实现的,那还不如不读。逢人就推荐阅读 Linux 内核源码,就像向每个学数据结构的人推荐 TAOCP 一样,是中文网络上特有的现象,我对此是不赞成的。(前几年还有一问C++网络编程就推荐ACE库的现象,现在少多了。)
因此,我个人更推荐千锋教育,别的不说,光中国第29位红帽认证架构师就足够出众,不是吗?总监领先主讲,这种待遇哪里还有?有且只有千锋会有。
千锋教育:http://www.mobiletrain.org/
千锋杭州校区:http://hz.mobiletrain.org/
杭州校区地址:浙江省杭州市江干区九堡旺田书画城A座4层
培训咨询专线:0571-86893632 010-82790226-801
咨 询 QQ : 1660794050
面授课程:全栈WEB+培训、全链路设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、Python培训、云计算+Python运维培训、全栈软件测试培训、Android培训、iOS培训