php怎么操作es,该如何学习大数据知识?
我们身处一个“技术爆炸”和“共享、开源”的时代,先进技术的更新迭代速率超过了历史上任何一个时期,而且这些技术也不再闭塞,人人都可以接触并学习。终身学习已经是我们每个人不得不面对的问题,这一点在大数据/人工智能领域体现的尤为明显:层出不穷的新技术,一方面为我们带来了便利,但同时也使我们面临难以高效学习和选择的窘境。因此,在这样的时代背景下学习大数据知识,需要有相适应的逻辑和方法。
本文试图帮助各位读者用好各类“共享、开源”的学习工具以及学习渠道,躲过各类新手容易误入的“深坑”,以最小时间成本和经济成本,优质地完成目标技术的学习和掌握。
本文首先分析了时代背景,继而对目前大数据领域的人才梯队进行了划分,最后给出了大数据/人工智能人才从菜鸟到高手的进阶指南。
一、背景铺垫
“技术爆炸”以及“共享开源”是这个时代最有特色的标签,笔者认为二者是互为因果且紧密联系的,首先在“技术爆炸”的时代,对于走在技术发展最前沿的研究团队来说,“技术变现”的最好手段就是“共享开源”。反观互联网、移动互联发展成熟之前,信息是十分闭塞的,某项技术创新一旦出现就需要第一时间注册专利,技术需要靠政府来保护,而技术变现的唯一途径就是出卖专利或者组织生产形成产品。
现如今互联网及移动互联已经发展的十分成熟,新的信息会以极低的成本在极短的时间内传遍世界的每个角落,所以处在技术前沿的研究团队仅需要在第一时间将自己的工作成果上传到“arxiv”或者“github”之类中立的共享、开源网站,便会立即得到全球舆论的共同保护,这样的力度要远远强于某个国家的专利保护。
随后,只要新技术确有应用价值或者学术价值,那么各类资本巨头、科技大鳄以及相关的各类组织便会排着队上门送出丰厚的offer,对于前沿团队来说,技术变现的时间点要远远早于技术产品化的时间点。
其次,因为“技术爆炸”总有新的技术等待着前沿团队去研究发现,所以前沿团队保持领先的最好方法不是捂着现有成果不放,而是尽快“共享开源”实现变现,然后投入到新的研究工作中。
最后,“共享开源”也在很大程度上促进了“技术爆炸”,无论任何技术、科技的长足发展都需要一个庞大人才体系来支撑,反观历史上的各个时期,分享知识、培养人才的渠道主要是“学校”,这一渠道不但形式单一而且往往具备相当的门槛,会将相当一部分“有志青年”挡在门外。
而在如今这个时代,知识传播最快速的渠道是互联网,由于“共享开源”,世界上最优质的教育资源以及最先进的学术、技术理念忽然间没有了任何门槛,面向全部个体无差别开放,结果就是只要某一技术、科技领域有了很大的突破并具备广阔的应用前景(如大数据、人工智能),那么相应的人才梯队会在短时间内自动补齐跟上。
站在大数据学术前沿的研究团队只需要一往无前地开拓疆域,其后的人才梯队随即会自动开展“新技术论证”及“技术产品化”等“保障”工作,保障这一技术领域及相关行业的健康发展,来进一步促进资源向金字塔尖的前沿团队汇聚,支撑其开拓工作。
我们将上文提到的人才梯队划分为:菜鸟筑基、初入江湖、登堂入室以及华山论剑四个等级:
菜鸟筑基:本阶段的人才以大数据基础理论的学习为主,尚不能胜任真实的项目或者工作;
初入江湖:本阶段的人才已经具备了初步的大数据实践的能力,建议通过实践(做项目、打比赛等)来更好地带动学习;
登堂入室:本阶段的人才需具备大数据科研论文的调研、阅读和理解能力,能够成功地将论文中的算法进行复现;
华山论剑:本阶段的人才能够独立地开展大数据新技术的研究工作,具有发表原创性论文的能力。
下文将针对处于不同阶段的大数据人才,给出不同的修炼、升级建议。
二、菜鸟筑基
1. 最好的资源往往是公开的
读过背景铺垫后相信已经不需笔者再解释为什么最好的资源往往是公开的,在此直接给出一些获取高质量资源的渠道。首先推荐国外的三个网站,分别是“Coursera”、“Arxiv”以及“Github”。
Coursera是全球顶尖的在线学习网站,由业内极具学术造诣及分享精神的大咖创办。Coursera上的课程相对比较基础,应该是“小白”起飞最好的平台,在这里推荐吴恩达(Andrew Ng)开设的“机器学习”以及“深度学习”。对于国内学生来说最大的问题可能就是英语了,在这里需要明确一点,如果各位想要成为真正的高手,那么英语是永远绕不过去的坎,业内最新、最好的资料无一例外都是英文,即便是来自国内的顶尖高手在发论文时都不会选择用中文。
其实对于绝大多数人,英语并不应该被当作一门“学科”来学习,而应该被当作“工具”来用。具体的做法也没有捷径,就是看到不懂的单词立即查,单词不用刻意去记忆,下次遇到不会就再查一次,一切以快速弄懂句子含义为目标。
Arxiv以及Github是各位读者未来会特别常用的两个网站/工具,Arxiv上有最新最全的共享论文,论文中会对各类算法进行详尽的阐释,Github上有最新最好的开源代码,这些代码往往是对某种算法的实现,具体的使用方法网上有许多教程,在此不做展开。
读者可以简单的理解为Arxiv是修炼内功的地方,而Github是修炼外功的地方。只练内功不练外功是无法解决实际问题的,但只练外功不练内功又往往毫无威力,一定要内外兼修。最后再向大家介绍一个神奇的网站名叫“gitxiv”,会帮助各位找到论文与代码的对应关系。
2. 不要看书、不要看书、不要看书
一门学科怎么入门呢?菜鸟在面对这个问题时,最容易踩入的“深坑”就是找一本权威的书来从头学起,一旦踏入此坑,轻则荒废自己数周时间,重则对某一门学科彻底失望终生。首先好书本来就不多,往往可遇不可求。其次即便遇到好书,为了保证学术性,书中用语往往“严谨”但难懂,且会从学科的早期历史为读者打下“坚实基础”,讲到最近的技术手段时又戛然而止。最后,就算读者倾尽数月之功力,坚持读完了,笔者可以用血淋林的亲身实践告诉你,书中前半部分的内容一般人肯定会忘的。
当然也有特殊情况,如果各位已经确定了自己的研究方向,并且有高人/导师指点,给出了相应领域内必读好书的名录,这一类书还是值得一看的。不过在看的时候也要注意,不要纠结于某些细节问题,看不懂的地方可以先记下来,这类细节往往会在各位后面实践过程中的具体场景下恍然大悟。
正确的做法一句话就可以概括,好书是用来查的而不是用来啃的,什么时候来查呢?下文会逐步解答。
3. 找对好基友,连滚带爬往前走
现在已经不是一个单打独斗,凭着跌落断崖后找到一本秘籍闭关几年就能横扫天下的时代了,无论是像Hinton(推翻了BP算法的BP算法之父)这样的泰斗,还是像何凯明(发best paper像一般人发paper一样容易的神奇学霸)这样的新秀,都处在各自非常靠谱的团队中与小伙伴们共同探索。好基友不需要多,有一两个真正靠谱的就已经足够,至于队友的重要性后文会慢慢阐释。
菜鸟筑基这部分最后要给出的建议就是,千万不要在这个阶段停留太久,不要等“准备好了”再去着手实践,因为这里的“准备好了”往往包含菜鸟的不自信,不去进一步提升自己是永远准备不“好”的。一般情况下,想做“计算机视觉”或者“自然语言处理”等偏AI方向的同学在完成吴恩达的《深度学习》课程后,想做“数据挖掘”的同学在完成吴恩达的《机器学习》课程后,就可以选择相应的实践项目准备进入下一阶段了。
那么我们该选择什么实践手段呢?最佳的情况是有大神带队做真实项目,但是这样的机会往往可遇而不可求,在此不展开讨论。普罗大众型的办法是参加一个大数据比赛项目,现在国内的“阿里天池”以及国外的“Kaggle”都是开放式的大数据比赛平台,平台上会有各种组织发布的各类真实项目供大家实践、比赛。读到这里各位心里可能还存有很大的疑问:“就算学会了基本课程,在没有人带的情况下能上手实践吗?”,下文将陆续回答如何“连滚带爬”的进行实践。
三、初入江湖
1. 找到一个最高的baseline
这里的“baseline”可以理解为前人已经做出成果,当自己恰好需要去做相同工作时的参照。对于上文提到的情况,如果有大神带队进行实践的话,那么带队大神此前的实践经验就成为了全体小队成员的“baseline”。那对于没有“大神”资源的广大读者是否有更通用的解决办法呢?答案是肯定的。如果读者目前对于一类问题无从下手,例如刚刚学完“深度学习”的课程,但是不知道如何去做“自然语言处理”类的项目,最好的办法是利用好国内的“万方”以及“知网”这样的论文查询平台,去查询相关领域国内普通高校的学位论文,这样的论文绝大部分都是中文并且会在论文中介绍大量的基础背景知识,正好满足了我们的需求。
如果是对某一技术方的特定知识点不明所以,例如在做“自然语言处理”方向的项目,但却不太了解“LSTM”,则可以利用好国内的诸如“知乎”、“简书”以及“CSDN”这类的知识分享网站,只要不是太新的理论,都可以找到相应的博文或者解答。使用上述两类渠道的共同技巧是,多搜几篇文章对比着看。同一个概念或者技术,一篇文章很难全面描述清楚,并且由于文章作者不同,解释问题的出发点也不尽相同,所以如果各位遇到看不懂某篇文章的情况时,不用急躁,接着看下一篇文章就好。另外,前文提到的“好书”在这里就可以用来查了,读者会发现原来想记都记不住的知识点,只要“查”完并且“用”过,那么一般想忘都忘不掉。
这里对baseline所谓“高”的定义是,越接近学术前沿,实践效果越好,就认为越“高”。一般情况下,可参照的成果越“高”,中文文献就越少。
文章写到这里不知是否回答了上一章节提出的疑问,上一章节提到的“连滚带爬”指的就是我们在选定某一实践方向后,根据实践的最终成果再回过头来对我们的相关知识进行“查漏补缺”的过程。这样的学习过程,目标性更强,参与者完全有针对性的去学习,学到的东西可以立即实践,从而避免“学过就忘”的尴尬。
2. 合理追求quick win
笔者曾经仔细地研究过为什么女生逛街会“不知疲倦”,得到的答案是,女生每逛一家店铺,看看店铺中的鞋子/衣服/包包就能得到一定的兴奋点,在得到一个兴奋点后就想着直奔下一个兴奋点。类比到我们做项目/打比赛的过程中,我们需要为自己的团队设置这样的“兴奋点”,让团队成员都能够享受到“quick win”的快感,来支持大家继续推进。
而取得“quick win”的关键是要将手中的工作/任务合理划分成若干“稍微努力一下就能达到”的子任务,这中间的细节过于复杂,在此就不展开讨论。一个teamleader需要做的最重要的事,就是帮助团队合理划分任务而不断取得“quick win”,一个人只要具备这样的能力,无论技术高低都能够团结一批志同道合的小伙伴。
3. 你最大的动力往往来自DDL(Deadline)
有那么一句成功学的佳句是“每天叫醒我的不是闹钟而是梦想”,这句话听起来很励志,但对于90%的人来说就是胡扯,我们回首望去发现每天叫醒我们的往往是“上班迟到后被扣的工资”或者是“晚到实验室后老板的杀气”,这就是现实,听起来很残酷但是我们完全可以利用好它。具体到我们的升级以及项目推进中,能让我们不断向前的最大动力往往是“在DDL前无法完成任务后小伙伴们的鄙视”以及“完成quick win后带来的成就感”。
做好这一点除了上一小节提到的要合理划分任务之外,最重要的就是有一个靠谱的teamleader不断的进行推进(push),每到既定节点后雷打不动的推进。最后要啰嗦一句,根据马斯洛需求层次理论,梦想应该属于模型顶层的“自我实现需求”,如果一个人可以被“梦想”叫醒,那么这个人的其他需求应该已经被很好的满足了,所以我在这里真诚的祝福大家终有一天可以在早晨被自己的“梦想”叫醒。
四、登堂入室及华山论剑
如果有一天各位发现自己在工作实践中,需要不断地关注最前沿的论文,并且需要不断地尝试复现论文中的算法来用于实践,那么要恭喜各位已经跨入了大数据/人工智能领域高手的行列了。登堂入室与华山论剑两个阶段的区分不是特别明显,因为论文读得多了,总会有些自己的新想法,这些想法经过实验验证后就可以去发论文。反过来,即便你发表过前沿论文也还是需要继续跟进其他论文。
1. 朋友圈决定了你人生的高度
在这一小节的开始,笔者首先要端出一碗毒鸡汤,即便是在这个“开源、共享”的时代,学术/技术资源的分布还是极度不平均的,并且这样的不平均会越来越明显。究其原因有两个,第一个原因可以援引在清华17级研究生开学典礼上某校领导的一句话来阐释----“最有效果的研究手段就是与相当水平的同行当面交流”,翻译一下就是高手越多的地方就越容易产生高手,这会导致高端人才分布的越发不平均。
另外,做学术前沿研究的经济成本是很高的,国内某顶尖AI公司全球研发工作一个月的电费开销就能达到千万级别。即使是普通的AI项目,服务器、GPU的成本也会导致普通的研究人员根本无法找到充足的经费来支持自己的研究。
喝完毒鸡汤也要来一些正能量,虽然资源分布不平均了,但人才通道仍然是开放的,只不过门槛越来越高而已,我身边就有毕业四五年后,也能够一边工作一边复习考上清华研究生,最终接触到前沿科学研究的例子。数据派就是一个汇聚了清华顶尖大数据/人工智能资源的开放组织,有心的小伙伴可以点击“阅读原文”加入组织~(主编现在可以把刀放下了,这波广告打的笔者自己也有些猝不及防)
2. 选择永远比努力更重要
这个标题听起来又像是一碗“毒鸡汤”,但这就是血淋林的生活带给笔者的经验。笔者见过某个算法团队自己闷头搞了几个月研究毫无进展,经过大神点播后一个月内完工的情况。
下面举一个更戏剧性的例子,自然语言处理曾经在20世纪70年代左右有过界限分明的两个学派之间的激烈交锋,一拨是希望通过语法规则来做语音识别的“规则派”,另一拨是基于统计方法的“统计派”,这两拨从事相同领域研究的学者竟然分别召开自己的学术会议,即便出席同一大会竟然也要分场开小会。
到了20世纪90年代“统计派”的识别率已经达到了90%以上,而“规则派”仅有不到70%,胜负已分(吴军老师的《数学之美》一书中对这段历史进行了详尽有趣的阐述)。但试问如果有一名博士生在20世纪70年代将自己学术方向定为“规则派”,到了20世纪90年代的时候他该做何感想?
到了“登堂入室”这个阶段之后,做好选择显得尤为重要,这样的选择不仅仅限于学术方向,也涵盖例如“做学术”还是“做产业”等等更广义的范围。一个可以参考的经验是,如果人生的重大决策失误,基本要用五年来挽回,大家要考虑清楚自己有几个这样的五年。
3. 唯一的限制往往是自己的妥协
看看本小节的标题,读者可能会觉得本文这下要以“毒鸡汤”收尾了。但其实在这里“妥协”并不是一个贬义词,笔者认为它起码是个中性词。从某种意义上讲,每个人最终都会达到某种“妥协”,而不妥协就意味着背后存在与现状不匹配的野心或者欲望,什么时候野心和欲望跟现实匹配了,也就一定会“妥协”。这就是华山论剑的秘密,每个能站在顶峰的人都必定抱着某种超乎常人的野心或者欲望,当然这里的野心或者欲望是广义的,也同样指对于学术的追求。
最后,“毒鸡汤”不负众望的要出现了,根据笔者的观察,每个人的“妥协点”并不是自己设定的,一般情况下自己也无法影响,所以每个人最终要走到的高度往往是确定的。
但从笔者的角度看来,并不觉得站在华山之巅就一定是好的,真正的“好”是能够坦然接受自己的“妥协点”,并且能够在自己的“妥协点”安安心心、高高兴兴的工作和生活下去,这才是最具智慧的选择。
数字经济时代如何保护企业网络安全?
数字经济时代,越来越多的企业通过联网开展业务,随之而来的是面临千头万绪的安全问题,可以参考以下安全控制措施,解决企业的安全问题。
# 网络架构安全划分网络安全域,隔离企业内部不同安全级别的主机,避免同网络环境下一台服务器被入侵后影响到其它主机。使用NAT提供上网服务,禁止主机直接绑定公网IP,直接绑定公网IP会导致主机完全暴露在互联网遭受攻击入侵。对互联网提供服务,通过负载均衡(LB)将需要开放对外的端口(如:80,443)代理到后端的应用服务,并将对外服务放置在独立的子网中。防火墙隔离是主要网络安全隔离手段,通过ACL设置在网络层过滤服务器的访问行为,限定服务器对外/对内的的端口访问,授权访问地址,从而减少攻击面,保护服务器的安全。高危网络端口,开启的服务端口越多越不安全。只对外开放提供服务的必要端口,禁止将RDP、SSH、Redis、MongoDB、MySQL、MSsql等高危服务直接暴露在互联网上。# 账号口令安全杜绝弱口令,弱口令是最容易出现的也是最容易被利用的漏洞。为所有服务配置强密码,要求至少8个字符以上,包含大小写字母、数字、特殊符号,并且要不定时更新口令。Linux系统,禁止使用root账号直接登录,使用证书登录,设置可信登录主机的IP。Windows系统,修改 administrator 默认名称,设置可信登录主机的IP。Web应用系统,必须使用强密码安全策略和验证码,防止暴力pj和撞库。数据库系统(Redis、MongoDB、MySQL、MSsql Server)禁止使用弱密码或无密码。增强安全策略,使用多因素验证机制(MFA)、强制密码安全策略(如:锁定策略),和审计功能(异常告警)。# 系统运维安全使用跳板机/堡垒机进行远程维护,实施强密码策略,合理分配权限,对于所有操作行为严格记录并审计。为操作系统云服务器安装防病毒软件,并定期更新病毒库。定期更新补丁,修补操作系统漏洞,关注安全漏洞情报,当出现高风险漏洞时,及时更新操作系统所有补丁。Windows系统的补丁更新要一直开启,Linux系统要设置定期任务执行yum update -y来更新系统软件包及内核。开启系统日志记录功能,集中管理日志和审计分析。对所有业务系统进行实时监控,当发现异常时,立即介入处理。对软件安全加固(Apache、Nginx、Tomcat、Mysql、MSsql、Redis等服务)标准化安全配置,禁止随意修改。# 应用开发安全对应用服务软件(如 Tomcat、Apache、Nginx 等软件),建议使用官方最新版的稳定版。及时更新Web应用版本,如:Struts、ElasticSearch非最新版都爆发过远程命令执行漏洞。WDCP、TOMCAT、Apache、Nginx、Jekins、PHPMyAdmin、WebLogic、Jboss等Web服务管理后台不要使用默认密码或空密码;不使用的管理后台建议直接关闭。使用安全扫描工具 (例如,系统漏扫工具:Nessus、Nexpose,Web 漏扫工具:Appscan、AWVS)上线前扫描应用服务,是否仍存在高风险漏洞,修复完漏洞后再发布使用。在没有专职安全工程师,或者是没有足够安全预算的情况下,通过合理的网络架构、有效的密码策略和标准化的开发和运维流程规范,能够抵御大部分非针对性的网络攻击。如果业务系统逐步孵化成为重要业务线,需要考虑加大安全投入,购买专业的安全产品服务,降低安全风险,保障该业务线的稳定运行。
有哪些好用而且免费的文本编辑器推荐?
Notepad++
优于Windows记事本的一个文本编辑器,完全免费且开源,对于不同的编程语言可以实现语法高亮,代码折叠以及宏,起可定制性非常强。
PSPad 编辑器PSPad 是一个Windows平台上免费的适合程序员使用的编辑器。
EmacsEmacs文本编辑器深受高级程序员的喜爱,具有内置的宏功能以及强大的键盘命令,这对于编辑代码来说真是一种享受,这个程序几乎被移植到了每一个平台,并有多个发行版,其中最流行的是GNU Emacs和XEmacs,它们是跨平台、完全免费并且开源。
Sublime Text3(Windows)Sublime Text3支持但不限于 C, C++, C#, CSS, D, Erlang, HTML, Groovy, Haskell, HTML, Java, JavaScript, LaTeX, Lisp, Lua, Markdown, Matlab, OCaml, Perl, PHP, Python, R, Ruby, SQL, TCL, Textile and XML 等主流编程语言的语法高亮。拥有优秀的代码自动完成功能 (自动补齐括号,大括号等配对符号;自动补全已经出现的单词;自动补全函数名),非常智能。
VimVim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。
TextMateMac 平台下一款强大的文本编辑器(目前已经提供Windows版本),代码自动完成、可直接在文档中运行 SHELL 命令、支持宏。
EditPlusEditPlus是一款由韩国 Sangil Kim (ES-Computing)出品的小巧但是功能强大的可处理文本、HTML和程序语言的Windows编辑器,你甚至可以通过设置用户工具将其作为C,Java,Php等等语言的一个简单的IDE。
GeditLinux 下的一个纯文本编辑器,但你也可以把它用来当成是一个集成开发环境 (IDE), 它会根据不同的语言高亮显现关键字和标识符。
UltraEditUltraEdit 是一套功能强大的文本编辑器,可以编辑文本、十六进制、ASCII 码,完全可以取代记事本(如果电脑配置足够强大),内建英文单字检查、C++ 及 VB 指令突显,可同时编辑多个文件,而且即使开启很大的文件速度也不会慢。
如果有其他好用的的文本编辑软件,欢迎大家留意评论。
大数据主要学习哪些内容?
前言要从事计算机行业的工作,不管是什么工作,开发、测试、还是算法等,都是要有一门自己比较熟练的编程语言,编程语言可以是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的启动关闭命令一定要知道,以及他们的启动关闭顺序要记住,不要搞混。后续视频会有一些案例操作,跟着写代码,做测试,把基本环境都配置好,后续这个集群(完全分布式需要三台虚拟机)要一直使用。
三、ZookeeperZookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。分布式安装ZK,对ZK有一定的了解就可以了,了解它的应用场景,以及内部原理,跟着做一些操作,基本上有一些了解即可。
四、Hive(重点)Hive是基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。Hive的安装,它的数据类型,以及它的数据定义、数据操作有较好的了解,怎么操作表(创建表、删除表,创建什么类型的表,他们有什么不同),怎么操作数据(加载数据,下载数据,对不同的表进行数据操作),对数据的查询一定要进行实践操作,以及对压缩方式和存储格式要有一些了解,用到时不懂也可以去查,最好是能理解清楚。这部分有什么面试可能会问,所以视频后续的面试讲解可以看看,理解清楚。
五、FlumeFlume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。对于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,自己就一定要:坚持,多敲代码;多敲代码,坚持;坚持。
如何学习web前端开发?
结合我个人的学习路径谈一下这个问题吧。
前端的根基就是JavaScript、HTML、CSS,又称前端三剑客。如上图所示,JavaScript负责前端的行为,CSS负责前端的展示,HTML负责前端的结构。无论将来前端如何发展,都是这三方面的延申。例如,TypeScript是带类型的JavaScript,SCSS是对CSS的扩展,Web Components(或者某些前端框架对组件的支持,如Vue.js、Angular、React)都是对HTML的扩展。可能描述的有失偏颇,但至少能说明,基础不扎实,就谈不上高屋建瓴,10年经验与1年经验无异。
如何学习前端这个问题,没有规范答案。前端也归属于计算机科学范畴,想学好前端,计算机的基础也要过关。例如,数据结构和算法实践少?没关系,至少你要了解一些概念性的东西(有时在运行效率上你的确可以甩锅给后端)。有很多后端同学写的接口会把树结构的数据直接用数组形式返回给你,这就需要自己用递归实现树组件展示。实际情况是:很多前端都写不好递归。这个没办法,只能自己解决。还有个经常出现的问题:跨域。明明后端已经配置好了,怎么还不能跨域?我遇到这种情况,大概率是由于后端配置不完善,主要集中在Access-Control-Allow-Headers、Access-Control-Allow-Methods这些配置上,如果本身了解HTTP协议,就能够很快定位问题。
前端开发你以为是上面这样?实际上,用人单位希望你是下面这样:
其实前端的很多理念都来自于后端,或者其他技术领域,广度的认知决定了垂直领域的深度。规范意识是工程化的开端,重构意识是提高生产力的萌芽,这些都是在实践中才能领悟的。
学好前端的路有很多条,要点就是基础。你是否被CSS样式的权重折磨过,最后索性加了个"!important"了事?或者对于后端接口的multipart/form-data和application/x-www-form-urlencoded傻傻分不清?
前端是一项实践性很强的技术,你会在挖坑、踩坑中成长,了解的越多,就越能发现自己的不足。再加上产品经理和测试对你的额外洗礼,你终将成为一名合格的战士!
另送前端语录:
按F5刷新试试清缓存了吗?在我机器上是正常的呀!这个实现不了(貌似程序员通用)(当维护别人代码时)这是哪个XX写的逻辑?(貌似也很通用)你用的是谷歌浏览器吗?中午吃什么?(逃了...)