求书;有人他总想每天都求官方逆cpp百度云

很多同学接触Linux不多对Linux平台的开發更是一无所知。 而现在的趋势越来越表明作为一个优秀的软件开发人员,或计算机IT行业从业人员 掌握Linux是一种很重要的谋生资源与手段。

下来我将会结合自己的几年的个人开发经验及对 Linux,更是类UNIX系统及开源软件文化, 谈谈Linux的学习方法与学习中应该注意的一些事

就洳同刚才说的,很多同学以前可能连Linux是什么都不知道对UNIX更是一无所知。 所以我们从最基础的讲起对于Linux及UNIX的历史我们不做多谈,直接进叺入门的学习

Linux入门是很简单的,问题是你是否有耐心是否爱折腾,是否不排斥重装一类的大修 没折腾可以说是学不好Linux的,鸟哥说过要真正了解Linux的分区机制,对LVM使用相当熟练 没有20次以上的Linux装机经验是积累不起来的,所以一定不要怕折腾

由于大家之前都使用Windows,所以峩也尽可能照顾这些“菜鸟” 我的推荐,如果你第一次接触Linux那么首先在虚拟机中尝试它。 虚拟机我推荐Virtual Box我并不主张使用VM,原因是VM是閉源的并且是收费的,我不希望推动盗版 当然如果你的Money足够多,可以尝试VM但我要说的是即使是VM,不一定就一定好

首先,Virtual Box很小巧Windows岼台下***包在80MB左右,而VM动辄600MB虽然功能强大,但资源消耗也多何况你的需求Virtual Box完全能够满足。 所以还是自己选。

如何使用虚拟机是伱的事,这个我不教你因为很简单,不会的话Google或Baidu都可以 英文好的可以直接看官方文档。 现在介绍Linux发行版的知识

正如你所见,Linux发行版並非LinuxLinux仅是指操作系统的内核,作为科班出生的你不要让我解释 我也没时间。

(1)UBUNTU 适合纯菜鸟追求稳定的官方支持,对系统稳定性要求较弱喜欢最新应用,相对来说不太喜欢折腾的开发者

(2)Debian,相对UBUNTU难很多的发行版突出特点是稳定与容易使用的包管理系统,缺点昰企业支持不足为社区开发驱动。

(3)Arch追逐时尚的开发者的首选,优点是包更新相当快无缝升级,一次***基本可以一直运作下去没有如UBUNTU那样的版本概念,说的专业点叫滚动升级保持你的系统一定是最新的。缺点显然易见不稳定。同时***配置相对Debian再麻烦点

(4)Gentoo,相对Arch再难点考验使用者的综合水平,从系统***到微调内核编译都亲历亲为,是高手及黑客显示自己技术手段按需配置符合洎己要求的系统的首选。

(6)CentOS社区维护的RedHat的复刻版本,完全使用RedHat的源码重新编译生成与RedHat的兼容性在理论上来说是最好的。如果你专注於Linux服务器如网络管理,架站那么CentOS是你的选择。

(7)LFS终极黑客显摆工具,完全从源代码***编译系统。***前你得到的只有一份文檔你要做的就是照文档你的说明,一步步一条条命令,一个个软件包的去构建你的Linux完全由你自己控制,想要什么就是什么如果你莋出了LFS,证明你的Linux功底已经相当不错如果你能拿LFS文档活学活用,再将Linux从源代码开始移植到嵌入式系统我敢说中国的企业你可以混的很恏。

你得挑一个适合你的系统然后在虚拟机***它,开始使用它 如果你想快速学会Linux,我有一个建议就是忘记图形界面不要想图形界媔能不能提供你问题的***, 而是满世界的去找去问,如何用命令行解决你的问题

在这个过程中,你最好能将Linux的命令掌握的不错起碼常用的命令得知道,同时建立了自己的知识库 里面是你积累的各项知识。

再下个阶段你需要学习的是Linux平台的C/C++开发,同时还有Bash脚本编程如果你对Java兴趣很深还有Java。 同样建议你 抛弃掉图形界面的IDE,从VIM开始 为什么是VIM,而不是Emacs 我无意挑起编辑器大战,但我觉得 VIM适合初学鍺 适合手比较笨,脑袋比较慢的开发者

虽然将C++列在了Eclipse中,但我并不推荐用IDE开发C++因为这不是Linux的文化, 容易让你忽略一些你应该注意的問题 IDE让你变懒,懒得跟猪一样 如果你对程序调试,测试工作很感兴趣GDB也得学的很好, 如果不是GDB也是必修课 这是开发的第一步,注意我并没有提过一句Linux系统API的内容 这个阶段也不要关心这个。你要做的就是积累经验在Linux平台的开发经验。

我推荐的书如下:C语言程序设計 C语言,白皮书当然更好 C++推荐 C++ Primer Plus, Java我不喜欢就不推荐了,附一个别人的书单:java 入门书籍 工具方面推荐VIM的官方手册,GCC中文文档GDB中文攵档,GNU开源软件开发指导(电子书) 汇编语言程序设计(让你对库,链接内嵌汇编,编译器优化选项有初步了解不必深度)

如果伱这个阶段过不了就不必往下做了这是底线,最基础的基础否则离开,不要霍霍Linux开发 不专业的Linux开发者作出的程序是与Linux文化或UNIX文化相褙的,程序是走不远的 不可能像Bash,VIM这些神品一样 所以做不好干脆离开。

3、UNIX环境高级编程(作者英年早逝第3版即将出版,稍等)

UNIX环境高级编程堪称神作经典中的经典

接下来进入Linux系统编程不二选择,APUE(Advanced Programming in the UNIX? Environment)UNIX环境高级编程,一遍一遍的看 看10遍都嫌少,如果你可以在大學将这本书翻烂里面的内容都实践过,有作品你口头表达能力够强, 你可以在面试时说服所有的考官
(可能有点夸张,但APUE绝对是圣經一般的读物即使是Windows程序员也从其中汲取养分, Google创始人的案头书籍扎尔伯克的床头读物。)

这本书看完后你会对Linux系统编程有相当的了解知道Linux与Windows平台间开发的差异在哪? 它们的优缺点在哪我的总结如下:做Windows平台开发,很苦微软的系统API总在扩容, 想使用最新潮最高效的功能,最适合当前流行系统的功能你必须时刻学习 Linux不是,Linux系统的核心API就100来个记忆力好完全可以背下来。 而且经久不变为什么不變,因为要同UNIX兼容符合POSIX标准。 所以Linux平台的开发大多是专注于底层的或服务器编程

这是其优点,当然图形是Linux的软肋但我站在一个开发鍺的角度,我无所谓因为命令行我也可以适应, 如果有更好的图形界面我就当作恩赐吧另外,Windows闭源系统做了什么你更本不知道, 永遠被微软牵着鼻子跑想想如果微软说Win8不支持QQ,那腾讯不得哭死 而Linux完全开源,你不喜欢可以自己改,只要你技术够

另外,Windows虽然使用嘚人多但使用场合单一,专注与桌面 而Linux在各个方面都有发展,尤其在云计算服务器软件,嵌入式领域 企业级应用上有广大前景,洏且兼容性一流由于支持POSIX可以无缝的运行在UNIX系统之上, 不管是苹果的Mac还是IBM的AS400系列都是完全支持的。 另外Linux的开发环境支持也绝对是一鋶的,不管是C/C++Java,BashPython,PHPJavascript,。。。就连C#也支持而微软除Visual Stdio套件以外,都不怎么友好不是吗?

如果你看完APUE的感触有很多希望验证伱的某些想法或经验,推荐UNIX程序设计艺术 世界顶级黑客将同你分享他的看法。

4、选择方向:网络图形,嵌入式设备驱动

网络方向:垺务器软件编写及高性能的并发程序编写

现在是时候做分流了。 大体上我分为四个方向:网络图形,嵌入式设备驱动。

如果选择网络再细分,我对其他的不是很熟悉只说服务器软件编写及高性能的并发程序编写吧。 相对来说这是网络编程中技术含量最高的也是底層的。 需要很多的经验看很多的书,做很多的项目

我的看法是以下面的顺序来看书:

(1)APUE再深读 – 尤其是进程,线程IPC,套接字
(2)哆核程序设计 - Pthread一定得吃透了你很NB
(3)UNIX网络编程 – 卷一,卷二
(4)TCP/IP网络详解 – 卷一 在看上面两本书时就该看了
(5)TCP/IP 网络详解 – 卷二 我觉得看到卷二就差不多了当然卷三看了更好,努力争取看了
(6)Lighttpd源代码 - 这个服务器也很有名了
(7)Nginx源代码 – 相较于Apache,Nginx的源码较少如果能看个大致,很NB看源代码主要是要学习里面的套接字编程及并发控制,想想都激动如果你有这些本事,可以试着往暴雪投简历为他们寫服务器后台,想一想全球的魔兽都运行在你的服务器软件上

如果你还喜欢驱动程序设计,可以看看更底层的协议如链路层的,写什麼路由器网卡, 网络设备的驱动及嵌入式系统软件应该也不成问题了

当然一般的网络公司,就算百度级别的也该毫不犹豫的雇用你 呮是看后面这些书需要时间与经验,所以35岁以前办到吧!跳槽到给你未来的地方!

图形方向我觉得图形方向也是很有前途的,以下几个方面

(1)Opengl的工业及游戏开发,国外较成熟
(2)影视动画特效,如皮克斯也是国外较成熟。
(3)GPU计算技术可以应用在浏览器网页渲染上,GPU计算资源利用上由于开源的原因,有很多的文档程序可以参考如果能进火狐开发,或google做浏览器开发应该会很好 。

嵌入式方向:嵌入式方向没说的Linux很重要。

掌握多个架构不仅X86的,ARM的单片机什么的也必须得懂。 硬件不懂我预见你会死在半路上我也想走嵌入式方向,但我觉得就学校教授嵌入式的方法 我连学电子的那帮学生都竞争不过。 奉劝大家一定得懂硬件再去做,如果走到嵌入式应用開发只能祝你好运, 不要碰上像NokiaHp这样的公司,否则你会很惨的

驱动程序设计:软件开发周期是很长的,硬件不同很快。

每个月诞苼那么多的新硬件如何让他们在Linux上工作起来,这是你的工作 由于Linux的兼容性很好,如果不是太低层的驱动基本C语言就可以搞定,系统架构的影响不大 因为有系统支持,你可能做些许更改就可以在ARM上使用PC的硬件了 所以做硬件驱动开发不像嵌入式,对硬件知识的要求很高

可以从事的方向也很多,如家电啊特别是如索尼,日立希捷,富士康这样的厂子很稀缺的。

本文转载自微信公众号:果汁简曆

文档开发人员处理编码,更重要的是能写出完备的文档所以如果你开源了项目,一定要详细的写出说明问题这不仅体现出你的编寫文档能力,还能体现你的逻辑能力

关注,原来你可能使用 Google 来解决问题告诉你一个新方法,遇到问题可以按照自己提炼的关键字来 Github 搜索没准能找到意想不到的结果。而后呢 Fork 或者 Star 这个你得到的结果慢慢的你就真正的把 Github 用起来了。

英文试着不要给 repository起拼音名字,试着用渶文写 readme试着每一个提交都是英文,并每次都要斟酌

博客,一个 GithubPages 的博客对于有技术热忱的极客来说比每天在 CSDN 写博客要专业很多。可以沒有自己的域名自带的域名也可以带飞。不过这里需要补充一点不是一拥有了一个博客就加分,而是你是不是在持续的维护这个博客 PS: juice-resume.github.io 看起来是不是有点极客感?

简历写一份 Markdown 的简历也是一个不错的选择,极客一般都喜欢使用 Markdown 写文章写文档,有的时候就连周报也用那么你写一个 Markdown 的简历也是一个亮点诶。比如按照如下格式写一个简历放在自己的 Github

如果是早期的矿币看得准,短期投机下没毛病那么如果长期来看,个人挖矿都意义大不大不是个人挖矿才算真的‘去中心化么?

打个比方是美国那种 2% 的农业人口養活一个国家先进,还是印度 70% 的农业人口养活一个国家先进也许在大多数人眼里,印度那种农业模式才叫充分的‘去中心化’

2018年开始突然冒出很多小矿币,过去几个月涨了数倍甚至数十倍乍一看炒作得很火热,但或许暗藏风险

这些小矿币通常有以下特点:

4、智能合約+DApp平台

这些小矿币的最终目标便是成为下一个狗狗币或下一个乌鸦(Raven)。前者属于无心插柳柳成荫一个连创造者本人都戏称玩笑般的作品,且被很多区块链“大咖”公开表示“毫无价值”却硬是凭借着草根的力量,常年占据加密货币市值排名靠前位置后者则是被大资夲青睐,更是以 0 上币费上线币安平台

几乎所有稍火的小矿币,其必不可缺的特质是抗 ASIC有些甚至连 GPU 都能抗。实现的方法多是通过以下幾种手段:

1、共识算法。常见的有X11X22i,X16R 还有Cryptonight Lite等。通过打断哈希算法串联顺序等方式抵抗ASIC矿机

2、内存联合挖矿。用内存+CPU而不是单单CPU的方式来挖矿因为ASIC矿机在内存上并不比普通PC有优势。

3、闲置硬盘空间挖矿这个最好理解,当前的ASIC矿机相对于PC来说在硬盘空间上最没有优势

今天,我尝试从一个网络工程师的视角来谈谈区块链算力在未来可能的发展趋势

抗ASIC就一定是对的吗?

先说第一件事最近一些区块链峰会上,大家谈到一个现象:一些客户的设备被植入了木马,倒是没有什么大的危害因为这些木马的唯一作用,是利用这些设备的处悝器和内存进行加密货币的挖矿。

挖的都是什么币呢当然不是比特币或以太坊了,因为这些设备的算力相对于比特币或以太坊全网算仂实在太小根本挖不动。

这就引出一个问题如果某个PoW共识算法的币种和比特币一样火爆,同时做到了所谓理想的“去中心化”你觉嘚会有多少“家庭用户版矿工”会每天开着自己的电脑不间断的24小时挖矿?100万、1000万或是更多

目前全球黑客手里的“僵尸主机”(因中网絡病毒而被黑客控制的主机或是网络设备)有多少么?据相关统计2016年这个数字是670万。随着智能手机等电子设备5G网络,物联网普及这個数字在未来几年达到上千万甚至数千万,应该也不会感到意外

如果比特币是由这样100万个家庭矿工组成的网络,很有可能几个大的黑客團体联合起来便可以轻松对比特币发起51%攻击。

那现在的小矿币怎么没有被黑客攻击呢也许市值太小根本入不了黑客的眼,也许是攻击帶来的收益不够高也许还有其他的原因。但不管怎么说任何一个所谓“抗ASIC”攻击的PoW矿币,其实都潜在的把自己暴露在几百万僵尸主机嘚“虎视眈眈”之下随时都有被黑客利用众多僵尸主机发起攻击的风险。

而反观当下火热的和数家佳保II代智能矿机在底层系统方面借助区块链技术公平透明、不可篡改的特性可以让存储、计算、带宽资源量化与流通,最终促进闲置计算资源的充分利用无论BTC、ETH或是LKL,虽嘫它们大多数算力由头部矿机掌握看起来中心化程度高,但家佳保II代较I代性能提升60%采用i7系列八代处理器,最高超频4.1Ghz显存容量达到8G 16GB超夶内存运行千兆位运行速度提升至10倍以上,一台家佳保II代智能矿机的算力相当于数万甚至更多被淘汰的老矿机品牌换句话说,一台看上起毫不起眼的和数家佳保II代智能矿机可以抵得过数十或数百台僵尸主机的算力,而你如果拥有数千数万台和数家佳保II代智能矿机的矿场即便黑客联合起来发动所有僵尸主机,都无法与之匹敌的更不要说用这点算力对抗比特币或比特现金全网算力了。

以PoW算力为例它的咹全性是最为重要的。再者换个角度,如果某个PoW共识算法的币种和比特币一样火爆那么:

1、如果算法上是抗ASIC的,也许会慢慢的有针对此算法的ASIC矿机被研发出来

2、如果是用内存或是硬盘,大型的磁盘阵列或是专门的大内存主机,也一定会在效率上秒杀其它小型矿机

3、即便单纯不考虑以上因素,把机器集中到数据中心电力便宜的地方,也总是会比家用PC性价比高得多长期看来,算力(无论是CPU还是內存,还是硬盘)总是会趋向集中化正如现在的BTC三兄弟一样。

毕竟以PoW算力为例——Proof of Work,所代表的是自由资本主义算力的竞争的本质是資本的竞争,以它为算力的家庭作坊在面对工业流水线时总是那么无力。

如果你认同PoW是自由资本主义的话PoS(权益证明)便是如贵族世襲一般的封闭系统内的竞争,孰优孰劣一目了然。

互联网协议升级与利好区块扩容

再来说第二件事。公司可以给用户分配的IPV4的地址池已经接近枯竭。目前的地址池储备可能只能再撑2~3年左右。

上面这句话听着比较硬核尝试用大白话翻译一下。

简单来说在互联网仩,设备之间通信是基于一个叫做IP地址的东西,目前的版本号是v4所以也叫IPv4。它长得什么样子呢比如“192.168.1.1”。

一个IP代表什么呢很简单,就像互联网上的门牌号码我们淘宝买东西需要填家庭或是公司地址。计算机之间发消息同样需要这些“互联网门牌号”来连接彼此。比如你家的IP是21.33.13.5,就类似于“中国深圳,龙华民治大道567号,优城商务大厦”

IPv4总共就只有不到40亿的可用地址,原本大家估计在2010年之前肯萣就用完了毕竟全球的网络设备早就超过这个数量了,但是在各种技术加持下硬是撑到了现在。最常见的就是NAT也叫做地址转换。这東西是干嘛的呢 它相当于一个传达室老大爷,当快递投递到“中国深圳,龙华民治大道567号,优城商务大厦”之后就交给这位老大爺,再由他把东西交给具体的人因为567号里面可能有N多个楼层,每栋楼层里面还有着不同的公司及办公的人也许还会分商用或居住。

一镓公司一个家庭,或者一个网吧基本就只共享一个真正的公共IP地址,放到出口路由器上里面的设备用的,都是私有或者说内部IP地址,比如说“优城北区A座、13楼08室,和数软件”这样子而路由器呢,就好比传达室老大爷几乎每个网络的入口处,都有这么个老大爷帮着把消息传递到具体的人手上,从而节省下来好多IP地址

然而再怎么节省,终于还是拖到了快用完的那一天20年前就开始开发的IPv6协议,也陆续登场相信在未来2年内会越来越多。预计3年之后国内公司将面临着要么强制要求使用IPv6,要么高价去收购市场上仅剩的极少量IPv4地址的尴尬局面

IPv6是什么呢?它是IPv4下一代协议长这样:“:85a3:a2e:”。这玩意看着就很反人性但是它能提供地址数为2的128次方,号称可以为地球上嘚每一粒沙子分配一个IPv6地址还绰绰有余。

使用IPv6“传达室老大爷”要下岗了!每台设备在互联网上的地址是“中国,深圳龙华,民治夶道567号优城商务大厦,北区A座1308深圳和数软件有限公司”甚至会再具体到XX人这样类似的格式,快递可以直接投递到个人手上再也不需偠走传达室了。

说了这么多这跟区块链,或者说算力甚至数字货币有什么关系呢?

第一现阶段,黑客随机扫描一个IPv4的网段比如说幾万个地址,可能花个几个小时就搞定然后根据扫描的结果,看看哪些机器存在漏洞可以攻击,装个病毒或是木马什么的实施攻击嘚第一步,通常是扫描

但是IPv6网络大太多啊!按照现在的扫描速度,扫一个网段里面可能几亿几十亿个地址,花的时间要远远大于IPv4这樣一来,要找到新的僵尸主机所花时间和成本将会大大提高,这对于网络安全无形是个大的利好。

第二CSW(国内用户戏称其为澳本聪)在介绍BSV的Metanet时,单独说到了IPv6的问题他表示,IPv6是可以直接集成到BTC或是BSV里的这样做有以下好处:

1、可以直接通过比特币的支付来分配IPv6地址。在这种情况下网络攻击者必须预先存入一笔保证金,只有他们遵守规则时才能收回这笔钱;如以任何方式违反规则,钱将丢失简單来说,设备要想顺利上网 就得先拿到一个IPv6的地址,而拿地址需要自动交纳一点比特币做押金要是不乖的话,押金可就没了

所以,嫼客哪怕是发起DDOS这种简单的攻击(利用大量僵尸网络对目标发起分布式拒绝服务攻击)也必须先充值足够多的钱才能发起,这将大大提升黑客发起网络攻击的难度

2、IPv6支持高达4GB的巨型帧,所以在扩容之后(这个就真的没1M小区块的BTC什么事儿了)可以把IPv6集成到比特币交易中讓数据可以经过支付通道而流动,从而可以使文件整份传输就能很好的解决这个问题。

比如Alice通过LikeLib公链系统给Bob发了一份重要文件这个文件可以直接走其通道传过去(前提是区块大小足够大),而真正上链的只是这个文件的哈希值被矿工当成交易验证一下就好。

参考资料

 

随机推荐