当先锋百科网

首页 1 2 3 4 5 6 7
php项目实战开发教程,如果你想学习php教程,对于零基础自学编程有疑问,分享如下:

php项目实战开发教程,零基础自学编程?

本文从以下几个方面给大家分享几本高价值书单,并不一定全面,欢迎读者补充,希望能对你有帮助。

1 关于编码与重构

1.1 代码整洁之道

英文名《Clean code》,该书出自 Robert C Martin 之手,又被称为 Bob 大叔,是一位美国著名的软件工程师和作家,他已经写了有关敏捷软件开发的书籍。书中提到众多有名的编程原则:比如 SOLID 原则、 Law of Demeter(LoD,又被称为最少知识原则)。推荐理由:每个程序员都必须拥有本书并阅读它。这是一本非常著名的书,它将完全改变您的编程风格,书中介绍的规则均来自作者多年的实践经验,涵盖从命名、数据结构、面向对象的设计原理到重构的多个编程方面,虽为一“家”之言,然诚有可资借鉴的价值。或许,真正整洁的代码真能让同行读起来像诗一样。任何傻瓜都可以编写计算机可以理解的代码。优秀的程序员编写人类可以理解的代码。— 马丁·福勒如果只能读一本书,我就推荐这本。最后,基于本书,众多开发者还推出了各种语言的整洁之道:• Javascript 整洁之道• PHP 整洁之道• ABAP 整洁之道• Java 整洁之道• .NET 整洁之道还有各大科技公司的代码风格指南:• Google 风格指南• Uber Go 语言风格指南Bob 大叔的《架构整洁之道》也值得推荐,这本书是在架构领域的登峰之作,围绕“架构整洁”这一重要导向,系统地剖析其缘起、内涵及应用场景,涵盖软件研发完整过程及所有核心架构模式。还有《程序员的职业素养》,作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来人引路,助其职业生涯迈上更高台阶。

1.2 重构(第2版)

英文名: 《Refactoring: Improving the Design of Existing Code,2nd Edition》,作者 Joshua Kerievsky。本书是理论和实践最佳组合的罕见书籍之一。重构是一个使您的工作代码更加美丽的过程,这本书可以利用已经尝试和测试的软件开发世界的模式来为您提供帮助。推荐理由:重构一词经常在各种大会上被提及,那就是这本书带来的影响。重构也就是重写软件的过程,而无需更改其功能,以提高其可读性,可检验性或可维护性。重构是使工作代码美观的过程,重构有助于改进工作代码的设计。这也是优秀程序员的必备技巧之一,通常优秀的程序员也擅长重构。本书将教你重构代码的艺术和科学。无论您是 Java 程序员、C++ 开发人员还是 Python 开发人员,每个程序员都可以从本书中受益。与《重构》经常被提及的书就是大名鼎鼎的《代码大全》,书中解释的也是久经考验的技术和策略,能有效帮助程序员和软件开发人员。笔者也曾在大学的时候把这本书图书馆借出来,发现这本书太厚,啃不动,到期就立马归还了。

1.3 代码之美

英文名:《Beautiful Code: Leading Programmers Explain How They Think》,作者:Grey Wilson。推荐理由:大牛前辈的博客合集,同时也是提高编码技能的好书之一,因为它为您提供了一个机会,让您了解专业程序员如何处理问题、编写的代码以及他们如何解决问题,并且仍然能够保持他们的代码美观。这本书是一系列案例研究的集合,揭示了 Emacs 到 Facebook 等大型网站架构秘密,讲述了那些专家程序员,包括布莱恩·克尼原,乔恩·本特利(Jon Bentley)(编程珠玑的作者),蒂姆·布雷(Tim Bray),卡尔·福格尔(Karl Fogel),迈克尔·菲瑟斯(Michael Feathers)(有效地使用旧版代码的作者),以及许多更多伟大的作者和程序员。关于二分查找,在书中数次被不同作者提及,了解不同作者的观点。无论您使用哪种编码语言,例如 Java,C#,Python 或 Ruby,都会在本书中找到有趣的东西。代码之美调查了一项努力的人类发明和创造力的范围:计算机系统的开发。每章中的美观来自发现独特的解决方案,这是作者的力量超越界限,识别他人所忽略的需求,并找到令人惊讶的解决方案,以解决令人困扰的问题。

2 关于职业成长

2.1 程序员修炼之道(第2版)

英文名《Pragmatic programmer》,作者是 Andrew Hunt & David Thomas。中文版的译者是大名鼎鼎的云风,副标题是:通向务实的最高境界。推荐理由:本书是时隔 20 年的新版,覆盖哲学、方法、工具、设计、解耦、并发、重构、需求、团队等务实话题的最佳实践及重大陷阱,以及易于改造、复用的架构技术。刚出来的时候博文出版社举办了一个推广活动,在云风和皓子叔联袂推荐下,毫不犹豫的入手了本书。程序员往往最难得就是务实主义,总想追求新技术,炒新概念。工作后才逐渐明白,编程的本质,均不依赖于特定语言、框架和方法,技术改变世界在于能够有效解决用户的真实需求。本书本质上是程序员的自助指南。它探索了良好的软件开发实践,并为您提供了出色的建议、提示和技巧,以更有效地编程。正是对经典和现代轶事、引人入胜的类比和发人深省的例子的创造性使用,使每个部分的学习都变得有趣而有趣。如果说大学期间读的都是类似于 C 语言圣经和 Head First 系统书籍的话,工作后的人才会真正懂得为什么这本书籍不厚,读起来拍案叫好,这大概就是大道至简。作者另一著作:《程序员修炼之道: 从小工到专家》也是值得推荐的

2.2 卓有成效的程序员

英文名:《The Productive Programmer》,作者:Neal Ford。推荐理由:本书就是讲述如何在开发软件的过程中变得更加高效。同时,《卓有成效的程序员》的讲述将会跨语言和操作系统:很多技巧的讲述都会伴随多种程序语言的例子,并且会跨越三种主要的操作系统,Windows(多个版本),Mac OS X 以及 *-nix (Unix 或者 Linux)。贯穿全文的思想大概就是尽量让机器做机器该做的事情,让程序和程序打交道,发挥程序员在这方面的先天优势。学会善用工具,命令行、学会写脚本,学会宏。提供效率,不去做重复单调的工作。最终的目的:成为一个“慵懒”的程序员。

2.3 软技能:代码之外的生存指南

英文名:《Soft Skills: The software developer's life manual》,作者:John Z. Sonmez推荐理由:研究生期间读过最受益的一本非技术书。程序员都知道编码很重要,这是我们吃饭的硬技能。可是实际工作上才发现不止写代码,代码之外的软技能也很重要:比如面临着与客户沟通、与产品打交道的沟通问题;比如应该关注自身发展,书中也介绍了怎么做职业突围;还有更多章节介绍了作者如何学习、如何理财、健身、自我营销等等。分享书中有趣让我印象深刻的点是作者去面试,面试官浏览过他的博客文章,两人因此相谈甚欢。 最后也想给阅读的朋友声明一下:这本书涉猎了很多方面,但是并不是没一点都是一套可以照抄的完美答案,毕竟作者也是从当时的环境和自己经历出发介绍这些内容,每个读者应该都有自己的选择,综合而言,这本书挺适合各个阶段的人阅读的,尤其大学生和初入职场的朋友。作者也出了《软技能2:软件开发者职业生涯指南》,如果说软技能关注于生活,那软技能 2 则更加关注于了软件开发职业。

3 关于黑客与开源

3.1 Unix 编程艺术

书籍英文名:《The Art of UNIX Programming》,作者:《Eric S. Raymond》从 1982 年开始就是 UNIX 开发者。推荐理由:本书涉及 Unix 系统领域中的设计和开发哲学、思想文化体系、原则与经验,由公认的 Unix 编程大师、开源运动领袖人物之一 Eric S.Raymond 倾力多年写作而成。程序会过时,编程语言会更新,代码会跟随业务不断改动,但编程思想的生命力会长盛不衰,好的编程艺术也是具有穿透力的,尽管书中的案例已经偏老,但贯穿始终的 KISS 原则、思想文化体系、设计与开发哲学一定能够给你带来醍醐灌顶的感觉。Keep it simple stupid,简称 KISS 原则。在做软件设计的工作中,很多时候都不要想得过于复杂,也不要过度设计和过早优化,用最简单且行之有效的方案也就避免了复杂方案带来的各种额外成本。这样既有利与后续的维护,也有利于进一步的扩展。另外,本书还可以与“左耳朵耗子”ef="">皓子叔推荐 过的《UNIX传奇:历史与回忆》结合着一起看,了解 UNIX 的诞生记与发展史,贝尔实验室的幕后故事!本书不但书写 Unix 的历史,而且记录作者的回忆,一探 Unix 的起源,试图解释什么是 Unix,Unix 是如何产生的,以及 Unix 为何如此重要。

3.2 大教堂与集市

英文名:《The Cathedral & the Bazaar: Musings on Linux and Open Source by an Accidental Revolutionary》, 《Unix编程艺术》作者 Eric S. Raymond 的另一封神之作,副标题是《对 Linux 和开源革命的沉思》。推荐理由:大家都知道程序员热衷于开源文化,都在说不要重复造轮子。开源时代下的软件开发可能只需要三个键盘按钮:CTRL + C + V,开个玩笑。说到开源文化,那么本书《大教堂与集市》是开源运动的《圣经》,颠覆了传统的软件开发思路,影响了整个软件开发领域。作者把软件开发思路类比于古代的大教堂文化和集市文化,讲述了集市如何变成大教堂,书中系统解释了开源软件是如何生产的,开源开发的优势在哪,开源软件的传承是如何做到的。

3.3 黑客与画家

英文名:《Hackers and Painters: Big Ideas from the Computer Age》,作者:Paul Graham,本书的译者是大名鼎鼎的阮一峰大佬。推荐理由:说到黑客文化,就不得不提到硅谷创业之父Paul Graham 的这本书,本书主要介绍黑客 Hacker,即优秀程序员的爱好和动机,讨论黑客成长、黑客对世界的贡献以及编程语言和黑客工作方法等所有对计算机时代感兴趣的人的一些话题。本书是一本为黑客正名的技术散文集,看完书后第一次将我从电影中的黑客形象颠覆过来,才了解到并不是入侵系统、制作病毒、各种解密的人就是黑客,Hacker 是专家级程序员,是一群与画家有着极大的相似性,他们都是在创造,而不是完成某个任务,“黑客”象征着第一流的能力,以及求解问题过程中产生的精神愉悦或享受。他们崇尚分享、开放、民主、计算机的自由使用和进步。而那些恶意入侵计算机系统的人更应该被称为 cracker(骇客)。

4 关于算法与设计模式

4.1 算法设计手册

英文名:The Algorithm Design Manual (2nd Ed.),作者:Steven S Skiena推荐理由:关于算法的重要性大家都知道,大家肯定都知道另外两本著名的《算法导论》和《算法4》:《算法导论》侧重与算法的数学推导,适合研究,而《算法4》侧重于算法的代码实现,适合入门。而这次推荐的《算法设计手册(第2版)》却没有那么有名气,但也不失为设计实用且高效算法的最全面指导书。该书揭密了算法的设计与分析,以简单易懂的写作风格,介绍了各种算法技术,着重强调了算法分析。目前市场上算法书层出不穷,但是经典的算法却一直在那里,不曾走远。

4.2 Head First 设计模式

英文名:《Head first design patterns》,作者:Elisabeth Freeman / / Eric Freeman / Bert Bates / Kathy Sierra / Elisabeth Robson推荐理由:这本书完整地涵盖了 GoF 版本全部23个设计模式,毫不费力地解释了世界各地熟练的软件开发人员和程序员用来构建优雅、功能齐全、灵活和可重用的软件的几种软件设计模式。。图文并茂,配有大量说明性和启发性的示例,它们将使学习同时变得高效和有趣。与其他文本繁重的编程书籍不同,这本书具有引人深思、视觉丰富的格式。Head First 系统书籍充满了幽默感,选题和编辑都很用心,值得一读。相信读完的读者逐步迈向对软件设计模式的深入了解。再来读 GoF 不失为一个不错的选择。

4.3 设计模式:可复用面向对象软件的基础

英文名:《 Design Patterns: Elements of Reusable Object-Oriented Software》,又被简称为计算机领域的 GoF ,因为本书的作者是四个人:Erich Gamma / Richard Helm / Ralph Johnson / John Vlissides。推荐理由:本书是任何使用面向对象代码的开发人员的必备入门读物。而且作者 Erich Gamma 是 jUnit、Eclipse、IBM Jazz 项目、Visual Studio、Azure 和 Office 365 的幕后推手。如果您没有很好地掌握 UML,您可能会发现很难吸收编程书中汇编的一些信息和示例。然而,这不会阻止您欣赏设计模式书中叙述的美妙之处,它既简单又内容丰富。《设计模式》一书详尽地解释了 23 种软件设计模式,可帮助软件开发人员和设计人员制作更好、更优雅、更灵活的软件。这本书讨论了针对常见软件设计问题的大量简洁明了的解决方案。如果说 GoF 太难读下去,那么就推荐程杰的《大话设计模式》,这本书通过对话的形式带领大家入门设计模式,人人都可以是好学的小菜和经验丰富的大鸟。

4.4 编程珠玑(第2版•修订版)

英文名:《More Programming Pearls,Second Edition》,作者:John Bentley推荐理由:这是一本带你真正领略计算机科学之美,融深邃思想、实战技术与趣味轶事于一炉的奇书。与大多数其他编程书籍不同,这本书侧重于基本问题和一般问题。它讨论了可以提高性能或减少内存需求的各种算法和技术。作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了历史上众大师们在探索解决方案中发生的轶事、走过的弯路和不断精益求精的历程。就如书名一样,大浪淘沙,计算机科学中的智慧正如自然界里珍珠出自细沙对牡蛎的磨砺,留下一个个编程“珠肌”。

题外话:

上面的书都是本人曾经阅读过,或者说在图书馆中有借阅翻过的书。也是计算机领域评分很高、有口皆碑的书籍。但计算机行业的经典书籍太多,本人能推荐的也只是其中一部分,想要推荐的内容也不想针对某个特定编程语言和领域,所以像《C++编程思想》和《On Java8》这类书籍没有进行推荐,推荐理由也不一定完全正确,欢迎大家批评指正。另外,看完上述的书并不能说自己就能在工作中就能运用到,看完就能成为一个顶尖的程序员。何况看书也不能完全接收前辈们的这些大智慧,但如果在某个瞬间(看书过程或者实践过程中)对自己有一种醍醐灌顶的感觉,就已足够。

参考链接:

• UNIX传奇(上篇)• 假期好读书• Top 5 Books to Improve Coding and Programming Skills• http://www.osnews.com/images/comics/wtfm.jpg

本文分享自华为云社区《【云驻共创】对于编程思想和能力有重大提升的书有哪些》,作者:宇宙之一粟 。

大数据主要学习哪些内容?

前言

要从事计算机行业的工作,不管是什么工作,开发、测试、还是算法等,都是要有一门自己比较熟练的编程语言,编程语言可以是C语言、Java、C++等,只要是和你后续工作所相关的就可以(后续用到其他语言的话,你有一门语言基础了,学起来就快了)。一般初学者入门语言大多都会选择Java、C语言、C++或者Python,而且现在网上有很多好的视频,可以供初学者学习使用。关于学习视频或者资料的选择,知乎或者百度等都有很多讲解了,也可以跟师兄师姐咨询,这样可以少走很多弯路,当然,有人说,走一些弯路总是有好处的,但是我这里说的弯路不是说不犯错误,不调bug,而是指学习资料以及一些知识点的偏重点,这样可以尽量节约一部分时间,刚开始时,总会有点迷,而且当你真正投入进去学习时,会发现时间总是不够用。

我前面是做的Java后端,后续才转的大数据,所以一些Java开发所需要的东西自己也有学习过,也都是按照正常的路线走的,JavaSE阶段,然后数据库,SSM框架,接着做了一些网上找的项目,之后发现对大数据比较感兴趣,就开始找大数据相关的资料学习,看视频,看博客,敲代码,前期大概花了3-4个月吧(公众号的这些资料就是我当时看过的),也是一步步艰难走过来的,刚刚开始接触大数据相关的东西时,一度怀疑这么多东西自己能否学得完,是不是能用得到,学完又忘了,忘了又回头看,不过还好,坚持过来了,还好没有放弃,工作也还ok,找的大数据开发岗,待遇也还不错吧。

下面就说一下我自己从Java开发到大数据开发的曲折学习之路(狗头保命.jpg)。因为我现在是做大数据相关的工作了,所以Java后端涉及到的一些SSM框架等知识点我就不介绍了,毕竟后续一段时间也没有做了。自己看过的大数据学习相关的视频+资料大概是200G-300G吧,从Linux->Hadoop->。。。->Spark->项目,还有就是一些面试文档,面经等。一些视频看了两遍或者更多,跟着学,跟着敲代码,做项目,准备面试。涉及到需要学习的东西包括:JavaSE,数据结构与算法(计算机行业必备),MySQL,Redis,ES(数据库这些可以看项目,也可以自己熟练一两个),Linux,Shell(这个可以后期补),Hadoop,Zookeeper,Hive,Flume,Kafka,HBase,Scala(Spark是Scala写的,会Scala做相关的项目会更容易入手),Spark,Flink(这个是找工作时有面试官问过几次liao不liao解,所以找完工作才开始接触学习),相关项目。

编程语言阶段学习

  如果是零基础的话,建议还是从视频开始入门比较好,毕竟一上来就看教材,这样有些代码的来龙去脉可能不是很了解。如果是有一些编程语言基础的话,从视频开始也会更简单,一些for、while循环你都知道了,学起来也会快很多。  JavaSE我是选择的某马刘意的为主,因为刚刚开始学Java看过一本从《Java从入门到精通》,没什么感觉,后续又在看了某课网的Java初级视频,还是没感觉出来啥(当时就有点怀疑自己了。。。),可能有点没进入状态。  还好后续找了某马刘意老师的JavaSE视频(我是看的2015年版本,那时候19版还没出),觉得他讲的真的是很好很详细,每个知识点都会有例子,也都会带你敲代码,做测试,可能前面有C语言基础,然后也看过Java的一些语法,所以学起来还是比较顺利,后面的IO流、多线程等知识点时,也有看书看博客,或者看看其他老师的课程,讲解的可能自己比较容易接受就可以,反正都是多尝试(下面会给出视频链接),尽量懂一些,后续可以回头来复习。JavaSE相关的视频,先看一遍,后续有时间建议再看一遍,而且这些经典的视频,看两遍真的是享受。  如果有一定基础了的,JavaSE前面七八天的视频可以加速看,但是不懂的一定要停下开仔细想想,零基础的还是尽量不要加速吧,慢慢来稳些。后面的视频建议还是跟着视频来,尽量不要加速,代码尽量都敲一敲,第一遍基本上一个月到一个半月可以结束。  JavaSE可以说是很基础也很重要的东西,主要重点包括面向对象、集合(List、Map等),IO流,String/StringBuilder/StringBuffer、反射、多线程,这些最好是都要熟悉一些,面试也是重点。  JavaSE之后,如果你是要走前端或后端开发路线的话,可以跟着一些网上的视频继续学习,这里我就不多做介绍了。

===========分割线,Scala可以后续Spark阶段再接触学习=============

  Scala的学习,Scala是一门多范式 (multi-paradigm) 的编程语言,Scala支持面向对象和函数式编程,最主要的是后续Spark的内容需要用到Scala,所以前面学习了JavaSE,到Spark学习之前,再把Scala学习一波,美滋滋,而且Scala可以和Java进行无缝对接,混合使用,更是爽歪歪。后续Spark学习时基本都是用的Scala,也可能是和Java结合使用,所以Spark之前建议还是先学一波Scala,而且Scala用起来真是很舒服(wordcount一行代码搞定),适合迭代式计算,对数据处理有很大帮助,不过Scala看代码很容易看懂,但是学起来还是挺难的,比如样例类(case class)用起来真是nice,但是隐式转换学起来就相对比较难。学习Scala的建议:1. 学习scala 特有的语法,2. 搞清楚scala和java区别,3. 了解如何规范的使用scala。Scala对学习Spark是很重要的(后面Flink也是要用),虽然现在很多公司还是用Java开发比较多,而且Spark是Scala写的,如果要读源码,会Scala还是很重要的(至少要看得懂代码)。  Scala主要重点包括:隐式转换和隐式参数、模式匹配、函数式编程。这里我看的是某硅谷韩老师的Scala视频,韩老师讲的真的很不错,五星推荐,哈哈。  也许有人会觉得Python也是需要的,但是学习阶段,可能用Java还是比较多,面试也基本都是问Java相关的内容,所以Python后续工作会用到的话,再看看Python的内容吧。

大数据框架阶段学习

  大数据这方面的知识点自己可以说真的是从零开始的,刚刚开始学那会Linux基本都没用过,心里那个虚啊,而且时间也紧迫,想起来都是一把辛酸泪。  刚刚开始学的时候,看了厦门大学林子雨的《 大数据技术原理与应用》课程,可能这个课程是面对上课的,所以看了一些,感觉对自己帮助不是很大(并不是说课程不好,可能不太适合自己,如果是要了解理论知识,很透彻,但是俺时间紧迫啊),所以就继续在网上找视频,然后发现某硅谷的培训视频很多人去参加,而且知识点也很齐全,大数据相关组件都有讲课,还有一些项目比较好,所以就找了它相关的视频,当时看的是2018年的,所以视频不算旧。  来一张推荐系统架构的图,先看看

  一般来说,Flume+Kafka对数据进行采集聚合传输,一方面Spark对实时数据进行处理,传输给相应的数据处理模块(比如实时数据处理的算法模块,Spark也有提供常见的机器学习算法的程序库),另一方面采集的数据也可以放入数据库(HBase、MongoDB等)中,后续MapReduce对离线数据进行离线处理,数据处理完毕用于后续的使用,数据采集处理的流程大概就是这样。如果是推荐系统,实时推荐会给用户产生实时的推荐结果,让用户进行查阅选择,比如你在界面浏览了或者看了新的物品,然后刷新下界面,可能给你展示的东西就有一些变成跟你刚刚浏览的相关了。离线推荐的话主要是对离线数据进行处理,为物品或种类做出相似的推荐,如果后续用户搜索相应的物品时,给用户展示相应的产品。

  大数据学习路线:Linux -> Hadoop -> Zookeeper -> Hive -> Flume -> Kafka -> HBase -> Scala -> Spark -> 项目 - > Flink( 如果需要学习Storm,在Spark前面学习)

一、Linux(基本操作)

  一般我们使用的都是虚拟机来进行操作,所以要安装VM( Virtual Machine),我使用的是CentOS,所以VM和CentOS都要跟着安装好,跟着视频操作,一定要动手实践,将一些Linux基本命令熟练掌握,一些VIM编辑器的命令也要会用,做相应的一些配置,使用SecureCRT来做远程登录操作(也可以使用其他的,自己顺手就行)。再强调一遍,基本操作命令尽量熟练一点,如果一下记不住,打印一些常用的,自己看看,多用多实践,慢慢就会用了。还有一些软件包的下载安装卸载等,跟着操作一遍,熟悉下,后续都会使用,Shell编程可以后续补。

二、Hadoop(重点中的重点)

  Hadoop是一个分布式系统基础框架,用于主要解决海量数据的存储和海量数据的分析计算问题,也可以说Hadoop是后续整个集群环境的基础,很多框架的使用都是会依赖于Hadoop。主要是由HDFS、MapReduce、YARN组成。这个部分安装Hadoop,Hadoop的三个主要组成部分是重点,对他们的概念要理解出来,知道他们是做什么的,搭建集群环境,伪分布式模式和完全分布式模式的搭建,重要的是完全分布式的搭建,这些部分一定要自己动手实践,自己搭建集群,仔细仔细再仔细,Hadoop的NameNode,DataNode,YARN的启动关闭命令一定要知道,以及他们的启动关闭顺序要记住,不要搞混。后续视频会有一些案例操作,跟着写代码,做测试,把基本环境都配置好,后续这个集群(完全分布式需要三台虚拟机)要一直使用。

三、Zookeeper

  Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。分布式安装ZK,对ZK有一定的了解就可以了,了解它的应用场景,以及内部原理,跟着做一些操作,基本上有一些了解即可。

四、Hive(重点)

  Hive是基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。Hive的安装,它的数据类型,以及它的数据定义、数据操作有较好的了解,怎么操作表(创建表、删除表,创建什么类型的表,他们有什么不同),怎么操作数据(加载数据,下载数据,对不同的表进行数据操作),对数据的查询一定要进行实践操作,以及对压缩方式和存储格式要有一些了解,用到时不懂也可以去查,最好是能理解清楚。这部分有什么面试可能会问,所以视频后续的面试讲解可以看看,理解清楚。

五、Flume

  Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。对于Flume,对它的组成架构,以及对Flume Agent的内部原理要理解清楚,Source、Channel、Sink一定要知道它们的各种类型以及作用,有哪些拓扑结构是常见常用的,例如一对一,单Source、多Channel、多Sink等,它们有什么作用,要理解清楚。还有一个重点,就是对Flume的配置文件一定要了解清楚,不懂的可以上官网查看案例,对于不同的情况,它的配置文件要做相应的修改,才能对数据进行采集处理,视频中的实践案例一定要跟着做。

六、Kafka(重点)

  Kafka是一个分布式消息队列,用来缓存数据的。比如说实时计算中可以通过Flume+Kafka对数据进行采集处理之后,Spark Streaming再使用Kafka相应的Topic中的数据,用于后续的计算使用。对于Kafka,要理解Kafka的架构,什么是Kafka,为什么需要Kafka,应用场景。基本的命令行操作要掌握,比如怎么创建删除Topic,怎么通过生产者生成数据,消费者怎么消费数据等基本操作,官网也是有一些案例可以查阅的。

七、HBase(重点)

  HBase是一个分布式的、基于列存储的开源数据库。HBase适合存储PB级别的海量数据,也可以说HBase是很适合大数据的存储的,它是基于列式存储数据的,列族下面可以有非常多的列,列族在创建表的时候就必须指定。所以对HBase的数据结构要有一定的理解,特别是RowKey的设计部分(因为面试被问到过,咳咳,所以点一下),对于它的原理要了解,一些基本操作也要都会,比如创建表,对表的操作,基本的API使用等。

八、Spark(重点中的重点)

  Spark是快速、易用、通用的大数据分析引擎。一说到Spark,就有一种哪哪都是重点感觉,哈哈。  Spark的组成可以看下图

  Spark是基于内存计算的,对于数据的处理速度要比MapReduce快很多很多,而且数据挖掘这些都是要对数据做迭代式计算,MapReduce对数据的处理方式也不适合,而Spark是可以进行迭代式计算,很适合数据挖掘等场景。Spark的Spark SQL能够对结构化数据进行处理,Spark SQL的DataFrame或DataSet可以作为分布式SQL查询引擎的作用,可以直接使用Hive上的表,对数据进行处理。Spark Streaming主要用于对应用场景中的实时流数据进行处理,支持多种数据源,DStream是Spark Streaming的基础抽象,由一系列RDD组成,每个RDD中存放着一定时间段的数据,再对数据进行处理,而且是基于内存计算,速度快,所以很适合实时数据的处理。Spark MLlib提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能。对Spark的核心组件、部署模式(主要是Standalone模式和YARN模式)、通讯架构、任务调度要有一定了解(面试问到了可以说一波),Spark Shuffle要好好理解,还有内存管理要知道,对Spark的内核原理一定要好好理解,不仅面试可能要用,以后工作也是有帮助的。

九、Flink(重点中的重点)

  Flink是一个框架和分布式处理引擎,用于对无界(有开始无结束)和有界(有开始有结束)数据流进行有状态计算。现在主要是阿里系公司使用的比较多,很多公司使用的还是Spark居多,而且Flink基本上都是和Spark很多功能大体上一样的,但是以后Flink和Spark孰强孰弱还有待时间的考验,不过Flink近几年越来越火了这是事实,所以如果有时间有精力的话,可以学一学Flink相关的内容也是很不错的。Spark和Flink主要都是在数据处理方面应用,在数据处理方面的话,离线数据处理:Flink暂时比不上Spark,Spark SQL优点在于可以和Hive进行无缝连接,Spark SQL可以直接使用Hive中的表;Flink暂时做不到这一步,因为官方不支持这一操作,Flink只能将数据读取成自己的表,不能直接使用Hive中的表。对于实时数据的处理:Flink和Spark可以说是平分秋色吧,而且Flink是以事件为驱动对数据进行处理,而Spark是以时间为驱动对数据进行处理,在一些应用场景中,也许Flink的效果比Spark的效果还要好些,因为Flink对数据更加的敏感。比如一秒钟如果触发了成千上万个事件,那么时间驱动型就很难对数据做细致的计算,而事件驱动型可以以事件为单位,一个个事件进行处理,相比而言延迟更低,处理效果更好。现在使用Flink的公司越来越多,有时间学习下,也算是有个准备。

项目阶段

  其实某硅谷的视频里面有很多大数据相关的项目,而且都是文档配代码的,B站上也有视频,学习期间可以跟着视频做两到三个项目,自己理清思路,把项目理解透彻,还是可以学到很多东西的。  根据自己情况,选择两到三个项目重点跟着做,理解透彻一点

大数据项目实战

  某硅谷的视频里面有很多大数据相关的项目,而且都是文档配代码的,学习期间可以跟着视频做两到三个项目,自己理清思路,把项目理解透彻,还是可以学到很多东西的。根据自己情况,选择两到三个项目重点跟着做,理解透彻一点。相关项目文档资料我已经放到网盘,GongZhongHao回复相应关键字获取领取方式。   相关项目、涉及技术框架及其B站链接(B站链接主要是为了有些小伙伴网盘速度限制,这样就下载文档资料即可)

书籍

  书籍部分直接云盘链接保存即可,这里我放两张Java开发和大数据开发我自己的书单(很多,路漫漫,吾将上下而求索~)  Java后端书架:

  大数据书架:

  大概就这些,看完就需要很久了,大部分我也是需要的时候看相应的部分,所以有时间可以好好看下,不然就需要哪一部分看哪一部分,有助于学习即可。

最后

  大数据开发也是需要编程基础的,并不是学会使用这些框架怎么样就可以了,所以对于编程语言,数据结构与算法,计算机网络这些基础也是要的,这些基础知识也有助于自己以后的发展,如果是应届生校招的话,面试基本上都是JavaSE和数据结构与算法等的知识点,还有大数据组件相关的知识点,以及对项目的理解,这些都是要自己面试前准备好的,多看面经,多找面试题看,面几次,心里有谱了,后续面试就好了。  不管是从事什么样的计算机相关的岗位,编程都是很重要的,数据结构与算法特别重要,还有就是leetcode等编程网站刷题,提升自己的编程思维,后续笔试面试都要要的。  要将一行行代码看做一叠叠rmb,但是一行行代码能不能转换成一叠叠rmb,自己就一定要:坚持,多敲代码;多敲代码,坚持;坚持。 

初学者如何高效学习一门编程语言?

首先谢邀。既然是为初学者所写,那么,我们首先需要进行的一个分辨是:TA是怎样的初学者?没有任何编程经验?有其他语言方面的编程经验,但没有接触过这门语言?针对不同类型的初学者,显然其学习的途径和侧重点,还是会略有所不同的。这篇文章所针对的,主要是一些共性的方法和技巧。

亮独观其大略

《魏略》记载,诸葛亮在荆州,与石广元、徐元直、孟公威俱游学,“三人务于精熟,而亮独观其大略。”

简简单单的一句话,其实正是在学习方法上,诸葛亮比其他人的高明所在。那回到编程语言,什么又是编程语言的“大略”呢?我个人觉得,其核心就是:

了解清楚这个语言“当前”的应用生态

一门语言能不能用在很多不同的领域?除了极少数专有化语言外,很多语言都可堪此任。

但“能不能用在”,和“是不是已经用在”,却是两个截然不同的问题。比如说,能不能用C++来写机器学习中所需要用的各种程序(脚本)?答案当然是可以的,但业界是不是在大面积的用?情况并不乐观,Python仍然是这个领域的“第一语言”。为什么?这其实就是一个生态的问题。在Python下,机器学习所需要的各种类库,成熟而完整,因此,无论是学习者,还是应用者,可以快速的进入到状态,并完成手头的工作。甚至于,因为Python2所构建的这个生态太成熟了,从而导致了整个业界,从Python2切换到Python3的过程,痛苦而又漫长。所以,作为一个初学者,在学习的一开始,就去“打听”一下(事实上,我觉得老师的作用,也应该在这里),你所要学习的这门语言,现在一般都拿来干什么,并且是不是和你想学习的方向(哪怕只有一个模糊的概念),在目标上高度契合,我觉得是最紧要和事半功倍的事情了,能为你的后期学习,节约太多的时间,从而少走很多的弯路。

工欲善其事,必先利其器

人类似乎总是很欣赏那些在公众中,表演用记事本,在没有任何代码提示情况下,“手写”代码的大神。

其实要实现这些并不难,万事无他,唯手熟尔!哪怕你要用的那个函数,参变量再多,你这天天写,总有熟到可以信手拈来的地步。但向观众,尤其是初学者表演,甚至是传达这样的理念,我觉得就是一种“罪恶”。恰恰相反,我觉得,作为一个经验丰富的老手,我们最应该向初学者推荐的,应该是一款经过精心调教的“工具”。还是以Python和数据分析的学习为例,怎样开始学习最好?上手就开始来学怎样撸代码?如果你问我,那我一定会告诉你:> 先去装个Anaconda再说

为什么?

省时省心啊

从此,近千个数据科学相关的开源包,你再也不用担心你应该去哪里找到他们,并且是不是和你现在用的版本会有冲突,等等等等这样一些听上去很琐碎,但绝对会浪费你大量时间的事情了,而是能专注于学习。

因为一切都已经在那里了!

实际上,在真正的软件生产过程中,可以说绝大多数的开发,都是严重依赖于工具的,你想想,为什么类似Docker这样的工具会盛行?抛开在虚拟化等方面的具体技术不谈,这东西对于开发和运维人员而言,一个巨大的好处,其实不就在于它的:几乎零配置么?

我要搭一个LAMP的Web的开发环境,我不需要自己劳心费力的去一个个的装Apache + MySQL + PHP,还不能保证能不能装上,一个image即可。

编程学习也一样,尤其是针对初学者而言,不要因为看到“大神”们,都是手写代码,就觉得:把时间分配在掌握一个好的IDE工具上,是在浪费时间!

实际上,这反而是能够让你学的更快的利器!

这里有一个小小的推荐,就是Visual Studio Code,微软的这款产品,经过这几年的大力发展,其扩展的丰富程度,真心足堪大任了,如果不是很特别的语言需求,基本上都可以在其应用商店中,找到对应的开发扩展。

最后才是语言学习本身,但只40%

在充分了解了所需要学习的语言本身,现在主要拿来干什么,并且也用上了“高大上”的工具以后,整个学习的旅程,就算可以正式开始了。

这里,有一个小小的建议,叫“只40%”。我觉得,这是所有高效学习的关键所在!

什么意思?

举一个例子,比如在很多语言中,提供了各种各样的处理字符串的方法(或函数),以Python为例,哪怕比如就是一个简简单单的,从“Hello World!”中,截取相应的子字符串,也有很多的技巧,比如:

林林总总,好吧,作为初学者,面对这些东西怎么办?我就看到有很多的“大部头”的号称面向初学者的书,会洋洋洒洒的为此大书特书一番,好像,不把所有的可能性穷尽,初学者不算学完一样。

但在我看来,这恰恰是最“糟糕”的一种写法和学法了。两个字:

没用!因为有习惯和遗忘曲线的存在。

所以,即便是你当时花了大把的时间,去学习了这种种的技巧,今后,随着你自己编程风格的形成,你还是会逐步趋向于用一种固定的方式,去处理问题,当然,我不是说这个例子,毕竟它太简单了,简单到这么多风格,完全可以让人接受 :),但我也不是没有看到过,就是有人愿意在他/她的代码的某个地方,先声明一个类似这样的函数:

为什么他/她要这么做?这不等于是为开发增加了一种“方言”么?其实无他,就是因为这可能是他/她在另外的语言环境(比如JavaScript)下,已经用熟了的一种方式而已,这是人的天性使然。

这也就提醒初学者,当你在学习一门计算机语言的过程中,下面的两个“经验”,可能能帮助到你,更为高效的进行学习,那就是:

1. 克制自己,不要试图去了解这门语言的全部,只学自己当前需要和能明白的

比如说,你就是准备用Ren'Py做一个可视小说的游戏出来,里面只是需要一点点的Python知识,那你也捧一本大部头,然后费劲吧啦的去看那些你根本用不上的函数的用法,并试图去“深入”的理解OOP和函数式,这两种不同的范式,在Python下的实现(这可能是很多教程非常引以为傲的“高级”货),何苦来哉?

等你这一切都完成,人家可能早就做出来了好几个游戏了,并且竟然发现:语法要求从来可能就没超过大部分Python教程顶多第三章的要求(一般的教程,到第三章,从最基本的变量定义,到函数应用等等,一般都会写完了)。

当然,我这样讲,不是在鼓吹说,深入系统的学习不重要,但我能保证,那绝不高效!

2. 在一开始,就要培养形成在线查阅文档的能力

我们已经处在了网络高度发达的时代,这是一个没有办法改变的事实!这个时代,最鲜明的特点之一是什么?我觉得就是:

知识开始也一定会经常以索引的形式存在!

当然,你也可以说成是人类的整体记忆能力在退化,但我个人不这样认为,实际上,索引式的好处,反而是人类可以记住更多东西了。

回到编程的学习,最高效的方式也应该是这样,学习的目标,应该从“完全记住”,转变为在脑子里大概留个印象,然后可以在遇到问题时,能快速的根据这个印象,通过在线的文档查找,迅速定位到问题的清晰的解决方案。

40%,足矣~

最后借此风水宝地,插播一个小广告,本人正在准备着进行编程教育自媒体方面的创业中,当前主要的想法,是针对K12年龄阶段,并主要和初等数学和物理,以及主流的一些算法等结合在一起,提供难易程度不同的,各种或好玩、或实用的编程教程和培训,同时,也会逐步的开讲一些整个计算机和软件发展历程中的故事,以及我自己的一些小小的思考,欢迎大家多多关注哈。

php前端和后端如何零基础学习?

首先来说,现在的前端越来越偏后端化了。以前的前端更多的就是排排版、切切图、改个特效,而当下的前端逐渐后端化了,如服务端渲染等,也有了“大前端”的概念。

PHP作为一门脚本语言,有着快速易于扩展的特性,既可以作为后端开发语言也可作为前端“胶水”语言。

那么PHP零基础的新手该如何学习相关的前后端知识呢?我从事PHP开发近10年了,给出我的建议如下:

1、学习方法

为什么我先讲的是学习方法而不是具体的学习路径呢?因为方法的掌握比具体学什么要重要!

不管是看视频还是文字教程,看完之后一定要手动把相关代码写出来,不要一味的照抄。 千万不要求快,每学一个章节就思考如何应用,将之前的知识结合起来应用,这叫学以致用。

2、前端的学习路径

HTML => DIV+CSS => JavaScript => jQuery => Vue

3、后端的学习路径

数据库:MySQL PHP:基础语法 => 背常用函数 => 面向对象 => 常见的坑 框架:YII、TP 项目实践:自己动手开发个完整的项目

以上就是我给的思路,如果其他网友有不同的见解,欢迎在下方留言评论 ~

学计算机专业将来可以从事什么工作?

1

最近总是在头条问答中看到有关计算机专业在毕业之后可以从事什么工作的问题,那我作为一名计算机专业毕业生来谈一谈我的感受。

就个人的感受而言计算机就是一个工具而已,只不过它出现的时间相对于其他工具要晚一些,加之发展速度超乎人们的想像,

因此,此专业的开设更像是为了让更多的人掌握这个工具的一门学科而已。至于你掌握的程度如何还是得靠你自己。

计算机专业曾一度成为中国各类院校的热门专业,未来好就业的一门技能,我也因为某种原因未能选择自己最喜欢的专业而最终读了计算机专业。

想必这也是许多人在选择此专业时的一个原因吧——适应时代发展,毕业后易于就业。

不过就我读下来的最大感受而言,计算机专业算得上是一门比较大的学科。

它包含的内容,或者说是涉及的领域实在太多了,比如大家最常见的办公软件、平面设计、工程制图、编程等等。

而学校开设的课程并没有把所涉及的领域学科进行细致的分类,这就使我们在学习期间学得内容过于杂乱无章,或者说是它更像是一个计算机应用初级入门课程。为什么这么说呢?

我们每个学期都会开设一些课程来学习不同的应用软件。理论+上机实操,一个软件刚学会了一些基础操作,并有掌握了的感受后,期末考试也就到了,而等到新学期开学后又单另学其它的软件。

而之前学过的软件似乎从期末考试之后就和我们再无关联,那对于原本就对软件掌握不好的同学来说很快也就忘记怎么操作了,这就难怪会有学计算机的朋友感到迷茫,不知道毕业之后自己可以做些什么样的工作问题出现。

说实话这样的迷茫我和我的同学都曾有过,而上述提到的一些内容也是我们最真实的写照与感受。

学一门课程,忘一门,最终该做什么、能做什么工作?我们真的不太清楚。

2

那眼看着我也毕业有十余年的时间,我最大的感受便是读这门专业的朋友要会提前为自己打算,做一些规划,什么意思呢?

就是在各种学科之中选择自己比较感兴趣的领域,至于具体该从哪一方面进行发展的话,我觉得还是以个人的兴趣爱好为出发去进行选择,这样才能够有足够的耐心将所学的领域知识学透,并运用好,也只有这样今后才有利于我们在工作中的一个发展。

就比如说你对PS比较感觉兴趣,你就想方设法的去学习有关PS方面的知识。当然PS也算是一门比较大的学科,它包括图像合成,后期制作,还有一些简单的海报之类的设计,你进行一段时间的基础学习后再来具体的分工,给自己在平面设计领域做一个定位。比如说专门做海报设计,或是人体精修等等。

学习方式可以通过自己买专门的教程,找这方面比较优秀的老师对你进行单独辅导。当然现如今要比我们当时方便很多,现在有很多网络课程,价格适中,授课老师也是一线实战老师,授课内容也非常的适用。

因此,不怕没有地方学习,就怕你自己不愿意去学习。

那除了平面设计以外在工程制图和编程方面都可以进行发展,最重要的是要搞清楚自己究竟喜欢什么,切记不要三天两头的更换,也不要随波逐流的看其他同学选择什么,自己就跟着选择。

其实没有哪个软件,或者哪个领域更好发展,更容易找工作。当然这样的说法也是很多人选择的一个依据,可是有太多看似很不起眼的领域,人人都会用的软件就有人从中脱颖而出,收获令人羡慕的收入,比如说之前火爆朋友圈做PPT做出名的帅哥。

说实话这一消息对许多专业人士来说简直的刺激到不行,这些年谁还不会做几个PPT呀?

可人家就能够把一个大众都易学的软件做好、做精、做出名。

可见,再饱和的领域中也阻止不了人才的出现。

3

当然啦,在这当中也有很多暂时找不到定位,或是阴差阳错的选择此专业的朋友。

对于这样的朋友来说我想告诉大家的是不要灰心,只因大学里许多学习的内容都是来帮助我们提高学习能力的,只要我们加强这样的能力培养,即便毕业之后,我们要更换专业也具备一定的学习能力,不至于感到太过于吃力。

就拿我来说吧,毕业之后所从事的是文员工作,在学校里所学习的课程运用最多的就是办公软件,其他的基本都用不上。

而随着计算机的普及,许多非专业的人都会用办公软件,只不过说他们一些复杂的功能不会用,即便学会了也不知道其中的原理。

这一点在我刚开始工作的时候并没有意识到,我也因为非专业的同事轻松应用办公软件而质疑自己所学专业的意义。

然而等到了工作中需要进一步学习一些操作系统时,自己上手比其他同事快时我才感受到和其他同事的不同之处。这是专业课程所为我打下的基础,是有别于非专业朋友的地方。

另外,当我决定从其它方面发展之后,因自己已经掌握了自学的能力,所以我知道自己该通过什么样的途径去进行学习,以及在学习过程中清楚地知道自己和他人之间的差距,并想方设法去弥补。

这都是上学期间所给予我潜在的一种能力,因此,对于还在学校时学习的朋友试图走出迷茫,找到自己所感兴趣,或者所擅长的领域,沉下心去好好学习。

还有一点比较重要,那就是不要忽视相关领域的学习,就还拿平面设计来举例吧,不要就软件学软件,如果是这样的话你顶多是会玩软件的高手而已,始终难于突破自我。

可如果你增加对美学的学习,或增加自己审美能力的提高,这就会大不一样了。就如同我的一位PS老师一样,他在学习人体精修时专门去找了一位都中医去学习不同年龄阶段的人,他们的白眼仁所呈现出来的状态。

其实很多学科之间的知识都是相通的,只要你用心专研进去便会知晓其中的奥秘。

因此,在校期间与其迷茫,不如沉下心思、脚踏实地学习一些自己感兴趣的知识,相信这些知识迟早能够在你的身上发挥出意想不到的作用。

以上就是关于php项目实战开发教程以及零基础自学编程的相关回答,有更多疑问可以加微。