-
?
第一节 WordPress 新手入门教程之准备工作篇
郜柔
展开
至于 WordPress 的介绍及优缺点我就不再重复说明,既然来到这,说明你已经心有所属,我只想说一句,WordPress 是拥有世界上最强大的插件和主题模板,还同时拥有数量最多、种类最多的各种教程,这一切已足矣让我们为之倾心。既然我们选择了 WordPress 来建站,那么在建站前,我们需要做一些准备工作,具体如下:赣州seo:http://yunmoseo
1 、为自己的博客网站起名
站点名称就好比我们每一个人的名字一样,这也是一个个人品牌,所以为了重视起见,我们还是在建站前就要想好大概要建立什么样的站点?这个站点应该起什么名字? 建议站点名称尽量跟域名相对应,所以建议先搜索所想要的域名是否存在,是否能买到手,这些都是肯定的条件下再进一步设置站点关键词、描述、文章分类名称和描述等等。
2 、申请注册属于自己的域名
一个独立的域名对于独立博客是至关重要的,这个域名也相当于我们的门牌号,这也是一个个人品牌,所以在建站前期购买域名的时候一定要想清楚。建议购买的域名与站点名称和站点内容相对应。具体如何注册请看《SEO建站小白入门知识:域名选购与空间选购》。
3 、根据注册的域名或博客名字设计博客 logo 和头像
博客站点的 logo 和头像也是可以在建站前期确定好的,而且这个 logo 和头像相当于我们对外宣传的形象,所以建议最好设置一个独一无二的,跟自己博客站点相关联的 logo 和头像,这两者在以后的宣传推广中会起到至关重要的作用。
4 、下载安装 Notepad++ 、WampServer 、FTP 软件等软件
玩 WordPress 的,或多或少都要会一点点修改主题的能力,所以我们必须会搭建 WordPress 的本地环境和安装一款编辑软件(本站用的是 Notepad++),修改好后我们还需要通过 FTP(本站用的是 flashfxp)上传安装包和其他文件图片,所以一款 FTP 还是很有必要的。
5 、查找(设计)一套自己喜欢的主题模板WordPress
有一个很大的优势就是网络上分享有很多免费的主题模板,包括博客、CMS、淘宝客、图片等类型。而主题模板就好比我们的衣服,所以在建站前很有必要选一套自己喜欢的衣服。
6 、购买一个合适的 Linux (WordPress )主机空间
主机空间就好比我们的房子,我们在建站前就必须先购买一个(当然有朋友送的也行),对于建站初期,云墨不建议大家购买 VPS 或 ECS 服务器,虚拟主机足够使用(当然,土豪例外)。因为我们用的是 WordPress 建站,所以建议购买 Linux 主机(搭配 MYSQL 数据库),不想备案的可以购买香港主机,想备案的可以申请万网的6元或9.9元主机。
7 、国内主机的先备案(国外主机可省略)
如果所购买的是国内主机,就一定要备案才能正常访问。备案其实也非常简单,只需要拍照提交几份材料就搞定了,唯一不爽的就是等待审核的时间比较长,正规备案一般都需要一个月左右,但是本博主首次备案也就用了十天左右。具体可见《赣州网站建设教你如何做网站的备案》。当然,如果购买的是国际域名,主机又是香港或国外的,就跳过此步。
8 、将域名解析到主机中
登录阿里云后台,将第 2 步注册的域名解析到第 7 步所购买的主机中,以便开展下一步建站工作,具体解析还是挺简单的,也可以参考本站这篇文章:《新后注册域名和域名解析步骤》只需要输入我们的主机 IP 点击提交即可。
最后,我们总结一下,这一节课我们讲解了 WordPress 建站前的一些准备工作,下一节,我们将给大家讲解《第二节 WordPress 新手入门教程之上传安装篇》
-
?
第一天 Java基础入门【悟空教程】
孤悟
展开
第一天 Java基础入门【悟空教程】
精心收集整理的教程笔记
第01天 Java基础入门
第1章 计算机基础
1.1 计算机
计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件系统和软件系统所组成,没有安装任何软件的计算机称为裸机。
1.2 计算机应用的领域(了解)
1.2.1 科学计算
科学计算也称数值计算。计算机最开始是为解决科学研究和工程设计中遇到的大量数学问题的数值计算而研制的计算工具。例如,人造卫星轨迹的计算,房屋抗震强度的计算,火箭、宇宙飞船的研究设计都离不开计算机的精确计算。就连我们每天收听收看的天气预报都离不开计算机的科学计算。
1.2.2 数据处理
在科学研究和工程技术中,会得到大量的原始数据,其中包括大量图片、文字、声音等信息处理就是对数据进行收集、分类、排序、存储、计算、传输、制表等操作。
1.2.3 自动控制
自动控制是指通过计算机对某一过程进行自动操作,它不需人工干预,能按人预定的目标和预定的状态进行过程控制。例如,无人驾驶飞机、导弹、人造卫星和宇宙飞船等飞行器的控制,都是靠计算机实现的。
1.2.4 计算机辅助设计
计算机辅助设计(Computer Aided Design,简称CAD)是指。借助计算机的帮助,人们可以自动或半自动地完成各类工程设计工作。目前CAD技术已应用于飞机设计、船舶设计、建筑设计、机械设计、大规模集成电路设计等。在京九铁路的勘测设计中,使用计算机辅助设计系统绘制一张图纸仅需几个小时,而过去人工完成同样工作则要一周甚至更长时间。可见采用计算机辅助设计,可缩短设计时间,提高工作效率,节省人力、物力和财力,更重要的是提高了设计质量。
1.2.5 人工智能
人工智能(Artificial Intelligence,简称AI)是指计算机模拟人类某些智力行为的理论、技术和应用。例如,用计算机模拟人脑的部分功能进行思维学习、推理、联想和决策,使计算机具有一定“思维能力”。我国已开发成功一些中医专家诊断系统,可以模拟名医给患者诊病开方。 还有就是机器人也是计算机人工智能的典型例子。
1.2.6 多媒体应用
随着电子技术特别是通信和计算机技术的发展,人们已经有能力把文本、音频、视频、动画、图形和图像等各种媒体综合起来,构成一种全新的概念—“多媒体”(Multimedia)。比如一些flash广告,网页游戏等。
1.2.7 计算机网络
计算机网络是由一些独立的和具备信息交换能力的计算机互联构成,以实现资源共享的系统。如在全国范围内的银行信用卡的使用,火车和飞机票系统的使用等。
1.3 计算机硬件
计算机硬件(Computer Hardware)是指计算机系统中由电子,机械和光电元件等组成的各种物理装置的总称。这些物理装置按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础。
计算机通常由CPU、主板、内存、电源、主机箱、硬盘、显卡、键盘、鼠标,显示器等多个部件组成。
1.4 计算机软件
计算机软件是使用计算机过程中必不可少的东西,计算机软件可以使计算机按照事先预定好的顺序完成特定的功能,计算机软件按照其功能划分为系统软件与应用软件
系统软件:DOS(Disk Operating System), Windows, Linux, Unix, Mac,Windows Phone,Symbian Android, iOS
应用软件:office QQ聊天 YY语音扫雷 LOL
1.5 软件开发
软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。
软件开发是一项包括需求捕捉,需求分析,设计,实现和测试的系统工程。
软件一般是用某种程序设计语言来实现的。通常采用软件开发工具可以进行开发。
1.6 人机交互方式
软件的出现实现了人与计算机之间更好的交互。
交互方式
图形化界面:这种方式简单直观,使用者易于接受,容易上手操作。
命令行方式:需要有一个控制台,输入特定的指令,让计算机完成一些操作。较为麻烦,需要记录住一些命令。
1.7 键盘功能键及快捷键介绍
1.7.1 键盘功能介绍(详见功能键文档)
Tab
Shift
Ctrl
Alt
空格
Enter
Window
上下左右
PrtSc(PrintScreen)屏幕截图
1.7.2 键盘快捷键
Ctrl+A全选
Ctrl+C复制
Ctrl+V粘贴
Ctrl+X剪切
Ctrl+Z撤销
Ctrl+S保存
1.8 常用的DOS命令
1.8.1 打开DOS命令行的方式
1:开始--程序--附件--命令提示符
2:开始--运行—cmd—回车
3:win+r—cmd--回车
1.8.2 常用DOS命令
d: 回车盘符切换
dir(directory):列出当前目录下的文件以及文件夹
md (make directory) : 创建目录
rd (remove directory): 删除目录
cd (change directory)改变指定目录(进入指定目录)
cd.. : 退回到上一级目录
cd\: 退回到根目录
del (delete): 删除文件,删除一堆后缀名一样的文件*.txt
exit : 退出dos命令行
cls : (clear screen)清屏
1.8.3 通用快捷键
通用快捷键适用于广泛的环境,在例如Windows的操作系统以及绝大部分的软件中都适用。需要熟练这些
Ctrl+C 复制选中内容
Ctrl+V 粘贴
Ctrl+X 剪切
Ctrl+A 全选
Ctrl+Z 撤销操作
Ctrl+Y 恢复操作(恢复上一步操作)
Ctrl+S 保存
第2章 Java概述
2.1 java简介
2.1.1 Java语言介绍
计算机语言:(Computer Language)指用于人与计算机之间通讯的语言。计算机语言是人与计算机之间传递信息的媒介。计算机系统最大特征是指令通过一种语言传达给机器。为了使电子计算机进行各种工作,就需要有一套用以编写计算机程序的数字、字符和语法规划,由这些字符和语法规则组成计算机各种指令(或各种语句)。这些就是计算机能接受的语言。程序员通过这些指令来指挥计算机进行各种工作。计算机语言主要由机器语言、汇编语言、高级语言,组成。机器语言:毋庸置疑是计算机可以直接识别和使用的语言。但是在编程的时候,通常不会选择机器语言,因为机器语言都是由二进制0或1组成的编码。不便于编程人员的记忆与识别。那么汇编和高级语言是编程人员常用的语言.汇编语言:采用英文缩写的标识符,容易识别和记忆。那么为什么不都用汇编语言编程,这就要解释什么是高级语言。高级语言:采用更接近人类的自然语言进行编程,进一步简化了程序编程的过程,所以,大多数编程者会选择高级语言。现在我们讲解的Java语言就是高级语言的一种。2.1.2 Java语言发展史(了解)
詹姆斯·高斯林(James Gosling) SUN – (Stanford University Network斯坦福大学网络公司) 1995年5月23日,Java语言诞生 1996年1月 JDK1.01997年2月 JDK1.11998年12月 JDK1.2(将Java分成了J2SE,J2EE,J2ME)2000年5月 J2SE1.32002年2月 J2SE1.4(1.4.2版本很多公司在使用)2004年10月 JDK1.5(改名JavaSE5.0,JavaEE,JavaME)2006年12月 JavaSE6.02009年04月20日,甲骨文(Oracle)74亿美元收购Sun。 2011年7月 JavaSE7.0(市场主流版本)2014年3月 JavaSE8.02017年9月 JavaSE9.0java语言的特点是,简单易用、安全可靠、主要面向Internet编程。从问世以来,发展的就非常迅速。 现在市场上绝大多数企业应用采用Java作为编程语言,Java语言应用于服务器开发,智能家居,网站的后台维护,手机应用后台等等。
SUN公司为了让使用Java语言的开发人员可以针对特定的市场进行开发,SUN公司将Java划分为三个版本,分别是 JavaSE JavaME JavaEE
JavaSE (Java Platform Standard Edition——Java平台标准版)标准版是为开发普通桌面和商务应用程序提供的解决方案,JavaSE是三个平台最核心的部分,JavaEE和JavaME都是从JavaSE的基础上发展而来的,JavaSE平台包括了Java最核心的类库,包括,如集合,IO,数据库连接以及网络编程等。
JavaEE(Java Platform Enterprise Edition 企业)企业版,是为了开发企业级应用程序提供的解决方案。JavaEE可以被看做一个技术平台,该平台用于开发、装配以及部署企业及应用程序,其中主要包括Servlet、JSP、JavaBean、JDBC、EJB、WebService等技术。
JavaME(Java Platform Micro Edition 微型)小型版是为了开发电子消费产品和嵌入式设备提供的解决方案。JavaME主要用于小型数字电子设备上的软件程序的开发。例如,为家用电器增加智能化控制和联网功能,为手机增加新的游戏和通讯录管理功能。此外,JavaME提供了HHTTP等高级Internet协议,是移动电话能以Client/Server方式直接访问Internet的全部信息,提供最高效率的无线交流。
(Java有这些功能,现在基本退出舞台,由安卓 ios等移动端操作语言替代,安卓和Java的关系大家下去可以去了解一下,简单的说安卓学习也是要必须先学JavaSE的)
2.1.3 Java技术应用领域
1.Android应用
许多的Android应用都是Java程序开发者开发。虽然Android运用了不同的JVM以及不同的封装方式,但是代码还是用Java语言所编写。相当一部分的手机都支持Java游戏,这就使得很多非编程人员都认识了Java。
2.金融应用的服务器程序
Java在金融服务业的应用非常广泛,很多第三方交易系统、银行、金融机构都选择用Java开发,因为相对而言,Java较安全。大型跨国投资银行用Java来编写前台和后台的电子交易系统,结算和确认系统,数据处理项目以及其他项目。大多数情况下,Java被用在服务器端开发,但多数没有任何前端,他们通常是从一个服务器(上一级)接收数据,处理后发向另一个处理系统(下一级处理)。
3.网站
Java在电子商务领域以及网站开发领域占据了一定的席位。开发人员可以运用许多不同的框架来创建web项目,springmvc,Struts2.0以及framework(框架,三个主要部分: 服务端、客户端和Linux驱动)。即使是简单的servlet,jsp和以struts为基础的网站在征服项目中也经常被用到。例如医疗救护、保险、教育、国防以及其他的不同部门网站都是以Java为基础来开发的。
4.嵌入式领域
Java在嵌入式领域发展空间很大。在这个平台上,只需130KB就能够使用Java技术(在只能卡或者传感器上)。
5.大数据技术
Hadoop(Apache05年开发分布式系统基础架构)以及其他大数据处理技术很多都是用的Java,例如Apache的技术Java的HBase(一个分布式的、面向列的开源数据库,HBase是Apache的Hadoop项目的子项目)和Accumulo(是一个可靠的、可伸缩的、高性能的排序分布式的 Key-Value 存储解决方案,基于单元访问控制以及可定制的服务器端处理)以及ElasticSearch(ES是一个基于Lucene并采用Restful API 标准的高可扩展性和高可用性的实时数据分析的全文检索工具。)说没有Java就没有大数据一点也不为过。
6.高频交易的空间
Java平台提高了这个平台的特性和即时编译,他同时也能够想C++一样传递数据,正是由于这个原因,Java成为程序员编写交易平台的首选语言,虽然性能不比C++,但开发人员可以避开安全性,可移植性和维护性等问题。
7.科学应用
Java在科学应用中是很好的选择,包括自然语言处理。最主要的原因是因为Java比C++或者其他相对安全性、便携性、可维护性以及其他高级语言的并发性更好。
2.1.4 Java语言特点
Java应用广泛,受到大众的欢迎,其根本原因是Java语言的众多突出优点(优点肯定是与其他高级语言相比较得来的)
介绍几个主要的特点
2.1.4.1 简单:
Java看起来设计的很像C++,但是为了是语言小和容易熟悉,设计者把C++语言种许多可用的特征去掉了,这些特征是一般程序员很少使用的,例如:Java不支持go to语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(重载overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,(垃圾回收机制)使用户不必为存储(内存)管理问题烦恼,能把更多的时间和精力花在研发上。
2.1.4.2 面向对象:
Java是一个面向对象的语言,对程序员来说,这意味着要注意应用数据和操作数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法和集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用来组织的。
为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字implements)。Java语言全面支持动态绑定,而C++语言只对函数使用动态绑定。
Java还包括一个类的扩展集合,分别组成各种程序包(package),用户可以在自己的程序中使用。例如,Java提供产生图形用户接口的类(java.awt包),这里awt是抽象窗口工具集(abstract windowing tookit)的缩写,处理输入输出的类(java.io包)和支持网络功能ç...
-
?
写给自学者的入门指南
明月碎
展开
在 IT 工程师和培训机构多如牛毛的时代,拜师学艺并不难。但自学编程对于毫无基础的同学来说却可能是个问题,相信有过类似经历的朋友都有一把辛酸泪和一肚不吐不快的体会。让我们从一个故事说起…
故事
某君在一个普通大学读着自己不喜欢的专业,以打游戏、刷段子和睡觉度日,突然有一天想学点什么。学编程好像挺酷,而且听说IT行业充满了机会,没准一不小心就和大佬一起“改变世界”了。
那么第一个问题来了,他该选择什么语言?
是世界上最好的语言 PHP?还是语言之母的 C?幸好还知道个编程语言排行榜,找到一看、几十种不带重样,这要逼死天秤座的小朋友。选 PHP 吧?上非诚勿扰都要被灭灯,而且就只能做个网页。万般纠结之后我们选 C 吧,听起来既高级又底层,说不准还能考个计算机二级。
接下来得干正事儿了。在这个便捷的网络时代,自学可选择的方式非常丰富。除了在网络上收集资料、阅读干货外,某君还向一些前辈咨询了自学的方法。
网络上流传的编程学习方式有:
看书(这是最容易想到的方法)
观看视频教程
阅读官网文档
读源码
到大学蹭课或者报名培训(不知道还算不算自学,没交学费都算吧?)
某君又得纠结一番了,大学蹭课和培训并不一定有合适条件,且不符合自学的气质;观看视频教程,前辈们觉得比较low;阅读官网文档和源码,这不适合初学者。总得来说看书算是比较中肯的方法,至于看什么书呢,前辈推荐了《C Primer Plus》,据说是学习C语言的经典之作。
好吧,不再纠结,直接啃这本大部头,虽然有人说看原版好一些,但是实在能力有限、还是看中文版吧。一口气花了一周时间读完这本书,果然是经典,变量、语句、条件判断甚至指针都知道怎么回事了。
某君决定按照书中的说法实践一下了,于是打开了记事本,折腾很久装了GCC,把书上的第一个例子抄了下来,在控制台的小黑窗输出了“Hello World”,成就感满满。决定上手写点高级的的东西一试身手,合上书。咦,为什么会报错?哦,原来少个分号。不禁陷入思考:为什么学了两个月还是只能在这个黑窗口算算秋水仙数?网友还说要看官网文档、要读源码、要看英文原版,我一样都不能做到,我一定是能力不够,编程果然是天才做的事情……
正经话
上面的故事是我编的,但其中的纠结却是自学者或多或少都经历过的。实际上,IT从业者并不像传说中那样需要天才般的智商,要点在于能否找到合适的入门途径,再加上一点点坚持和思考。比较可惜的情况是一些人没能找到适合自己的学习方法,并在纠结和碰壁后失去信心,然后沮丧的认定自己并不适合干这行。学编程很多时候就是一个趟坑的过程,但不是每一个坑都有必要趟,写这篇文章的目的是希望能够帮助初学者尽量少趟一些坑。
IT世界的地图
初学者遇到的一个典型问题是对IT世界没有一个大的图景。比如大多数的Java书籍,教完你基础语法知识和秋水仙数的求法后就结束了,并没告诉你接下来能干什么。我曾经为此感到非常困惑,学完Java SE后做了一个非常简陋的GUI demo,就失去了后续的Java学习方向,带着对Java的偏见,这成为了我一段令人沮丧的学习经历。关于这个话题一本书可能都不够,简单来说,我尝试从计算机科学知识和技术实践两方面来聊聊成为一名IT工程师需要具备哪些东西。
计算机科学基础
首先初学者要具备一些非常基础的知识,这些知识在你踏上工作岗位后能被实际的用到,比如计算机运行原理、网络的传输、常用数据结构和算法等。这部分属于计算机科学,也是应该被计算机专业本科课程涵盖的,不要伤心错过了大学本科的相关课程,我会分享一些有用的资源。
这里我罗列了一些计算机专业的学生一般需要学习的课程,当然每个学校专业设计都不一样,甚至采用的教材名字也不一样,仅供参考。大学计算机科学课程往往包括:《高等数学》、《离线数学》、《电子电路》、《数据结构》、《程序设计》、《计算机组成原理》、《编译原理》、《计算机网络》、《软件工程》、《数据库原理》等。有些学校会有一些额外的课程,例如《通信原理》、《汇编语言》、《线性代数》、《C语言》、《Java 语言》等。
图片来源于网易计算机专业的课程体系
尽管IT行业知识更迭非常快,但是基础知识并不容易过时,因此有大量的资料可以选择。可以选择从计算机经典丛书系列开始,比如佛罗赞和莫沙拉夫的《计算机科学导论》,甚至可以阅读一些计算机科普类读物例如《穿越计算机的迷雾》。另一种直观的方式是观看大学精品课和去跟慕课课程,比较推荐的有几个:
中国大学精品开放课程,高等教育出版社的精品课程项目,有全国大量的名校授课视频和课件
中国大学MOOC ,这个是中国大学MOOC和网易合作的,提供了上文附图中计算机课程体系中所有课程
果壳网的MOOC学院,主打翻译全球名校的优秀课程,比如斯坦福的《编译原理》和MIT的《Python》
从知识到实践
除此之外,还需要了解实际应用于设计软件或者开发网站中的实践类知识,包括某个特定语言以及周边的库、框架和工具等。 我们可以把特定需求中用到的语言、库和框架以及其他的工具称为技术栈,在技术选型上通常也是被这样考虑的,HR常常会根据技术栈来寻找需要的工程师。比如需要学习SSH 三大框架和Java的Java技术栈;为服务器web开发而生的PHP技术栈;在移动开发领域流行的IOS、安卓技术栈等。当然这里面有一些重合和共用的技术也需要学习,比如版本管理器Git、SVN就是每个合格的工程师需要去学习的。
换句话说,大学课程主要定位在上面说到的计算机科学基础知识,而市面上的培训机构主要是告诉你在怎么在实际工作中运用,所以大学和培训机构都有他们的价值。
想要更加详细的了解这部分内容,这里有一些开源的技能图谱可以参考:
图片来自: http://skill-map.stuq.org/
如何挑选你的兵器?
在介绍完计算机领域的大致图景后,就需要选择一门合适的编程语言,一个较为形象的例子是把编程语言比喻成兵器,因为我们深知编程语言对于工程师而言是实实在在的工具,我们不是为了学它而学,学编程不仅仅是学语言特性,一般来说我们也不用知道赋值语句像“茴香豆蔻”的“茴”字有四种写法。
当然语言之争从来没有停止过,如果把编程语言比喻江湖武器的话十分有趣。
C语言是M1式加兰德步枪,很老但可靠。
C++是双截棍,挥舞起来很强悍,很吸引人,但需要多年的磨练来掌握,很多人希望改用别的武器。
Perl语言是燃烧弹,曾经在战场上很有用,但现在很少人使用它。
Java是M240通用弹夹式自动机枪,有时它的弹夹是圆的,但有时候不是,如果不是,当你开火时,会遇到NullPointerException问题,枪会爆炸,你就会被炸死。
JavaScript是一把宝剑,但没有剑柄。
— 来自网络
老实来讲IT行业的最终目的是交付可用的软件,编程语言也是适应市场的。这对于初学者或许有些残酷,在工作中我们发现最好的语言是用来处理工作任务或者构建合适的应用,并不是出于爱好或者某种Geek精神。
对于初学者而言,在选择合适的入门语言时至少需要考虑两点:
是否能适用于构建你想要的应用。如果你的目标是创建一个运行在IPhone上的APP,那么最好选择 Object C 或者 Swift,学习web开发可以选择PHP 或者JAVA。实际上我们仍然可以用汇编做出网页,但是这样做成本高昂。
是否容易学习,在满足第一点的条件下请尽量选择容易学习的语言。容易不仅仅指语法简单,包括环境搭建、部署等都需要考虑在内,以及能不能容易找到好的学习资料,因此尽可能的选择主流语言。
别忘了非常重要的一点,学习编程语言还包括平台提供的API,比如Win 32 之于C++/C#/VB,以及周边的库和框架(这些库、框架和工具能在上面说的技术图谱中找到)。IT历史上甚至出现框架和库引领编程语言走向的情况:JQuery 和Angular 改变了前端开发的思想; Rails 抢走了Ruby的名气;而SSH三大框架一度代表了Java世界。
最后我为初学者整理了一个流行编程语言和用途的表:
另外还需要注意的是开发工具,可以选用IDE和有代码提示的编辑器,但尽量不要在这上喋喋不休,这就像用来盛放你锋利兵器的架子,用着顺手就行,也不推荐使用纯文本编辑器,这看起来像赤手空拳。 推荐一些编辑器和IDE
挑选合适的资料和有效的阅读
对初学者而言,我仍然推荐好的视频教程,虽然我已经听到不下5个人声称是靠阅读官方文档或者看源码学会编程的,而且认为观看视频教程见效太慢。但这个思想对初学者很危险,不得不承认阅读文档和源码能更准确找到自己想要的信息,这对深入技术原理非常有用,但视频能比文字传达出更丰富的内容,有更直观的演示和细致的讲解,我想没有比这个更适合初学者了。
除了上面提到的精品课程和慕课教程,国内有像网易云课堂,国外有lynda这种在线学习视频网站,甚至在优酷和土豆都能找到足够的教程资源。
如果选择了阅读技术类书籍,我们来聊聊怎么有效的阅读一本技术书籍。
读IT类书籍和读考试类书籍的方式不同,初学者需要选择更接地气、并且能告诉你最终能做出什么案例的书籍。你不需要通读整本书,而是需要搭建好和书中版本一致的环境,然后把书中的每行代码敲入电脑,观察这些代码怎样被运行,在遇到问题时去请教朋友或者到搜索引擎中寻找解决办法,直到示例程序能被正确运行。
可能一个月才能读完一本书,但慢点并没什么坏处,敲过一遍的代码才能算是你的,否则永远存在于纸上的代码清单中。对于关键的概念和知识点,可以在阅读的同时做一些笔记,去尝试使用思维导图来做你的笔记吧,这让你的笔记跟上你的思考,并形成一个知识网络。
自我激励
自学无疑是寂寞的。编程学习耗时较长,如何保证在这个阶段能坚持下去?
我们知道很多人都能对游戏产生强烈的兴趣、愿意为之投入时间,这其中的秘密就是游戏的奖励规则。杀死一个怪物就能得到一些金币,通过完成任务获得满足感,通过关卡的设计产生持续吸引力,进而形成正向的反馈。
其实学习编程也一样,实现一小段程序并运行,足以让人感到成就感和满足,借鉴这个简单的心理学技巧,定期给自己设定一些有实际意义但是不太难的目标和任务。太难会让人失去耐心,太简单又很无聊,最好设定一个跳起来刚好摸得着的任务。每完成一个目标就给予自己奖励,可以是完成任务的成就感,也可以是其他的物质奖励。
这个时候一个代办记事的清单就可以帮上忙了,可以是一个to do list的软件,或者自己手写一张卡片贴到墙上,关键在于不要忘了在任务达成后给予自己适当的奖励。
图片来源:https://appadvice
那如果真的遇到一些麻烦的任务呢,如何顺利解决而不至于丧失信心?笛卡尔在《方法论》一书中告诉了我们研究复杂问题的方法和步骤:
尽量将其分解为多个比较简单的小问题,一个一个地分开解决
将小问题从简单到复杂排列,先从容易解决的问题着手
子问题被解决后,进行联调测试,看是否能协同运行
在敏捷开发这种工程思想中我们正是这样做的,我们需要把业务需求进行拆分然后评估工作量,不仅可以直观的看到任务进展,手上的工作也不会看起来庞大得难以完成。
最后多说几句
非科班出身的工程师入门是有一定痛苦的,不像武侠世界里面的名门正派弟子,也没有机缘遇到骨骼精奇的世外高人,如何选择合适自己的学习方式并自我管理是很重要的一方面。没有任何Low的学习方式,只要直接而又高效,而且要能达到我们的目的就好。以我为例,从大专学校毕业并没有机会参加本科课程,曾经也在网上攫取各种视频教程,去别的学校蹭课,甚至带上礼物去一个老师那里登门拜访补课。
另一方面是如何上桌,吃上编程这碗饭。学习的成果如果无处施展便成为屠龙之技,参加一些开源项目和一些公益活动,谁不喜欢一个热心的人呢。也可以尝试去实现自己的一些idea,当做一个小项目来开发,有了一些项目实践后去找一个公司实习会容易的多。
我不知道算是有幸还是不幸经历了这一个过程,矫情一点来说是有一些曲折,但是我知道“聪明”从来不是这个行业的门槛。引用流行于知乎的一句老话“以大多人的努力程度,还轮不到拼天赋的程度”,在Thoughtworks有大量优秀的工程师,从他们身上我能看到聪明不是学习编程成功的关键,坚持和勤于思考才是。
-
?
NLP入门学习教程
单迎夏
展开
自然语言处理(NLP)是计算机科学领域和人工智能领域中的一个分支,它与计算机 和 人类之间使用自然语言进行互动密切相关。NLP的最终目标是使计算机能够像人类一样理解语言。它是虚拟助手、语音识别、情感分析、自动文本摘要、机器翻译等的驱动力。在这篇文章中,你将学习到自然语言处理的基础知识,深入了解到它的一些技术,了解到NLP如何从深度学习的最新进展。
1.简介
自然语言处理(NLP)是计算机科学、语言学和机器学习的交叉点,它关注计算机与人类之间使用自然语言中的沟通交流。总之,NLP 致力于 让计算机能够理解和生成人类语言。NLP技术应用于多个领域,比如 天猫精灵 和Siri这样的语音助手,还有机器翻译和文本过滤等。 机器学习是受NLP影响最深远的领域之一,尤为突出的是深度学习技术 。该领域分为以下三个部分:
1. 语音识别 : 将口语翻译成文本。
2. 自然语言理解 : 计算机理解人类的能力。
3. 自然语言生成 : 计算机生成自然语言。
2.为什么NLP很难
人类语言有其特殊性。人类语言专门用于传达讲话者和写作者的意思,即使小孩子能够很快学会,它依然是一个复杂的系统。它的另一个显著之处在于它完全与符号有关。Chris Manning(斯坦福教授)表示,它是一个离散的、象征性的、绝对的信号系统,这意味着人们可以通过使用不同的方式传达相同的含义,比如演说,手势,信号等。人类大脑对这些符号的编码是持续的激活模式,在这个模式中,符号通过声音和视觉的连续信号实现传输。
由于其复杂性,理解人类语言被认为是一项艰巨的任务。例如,在句子中排列单词有无数种不同的方法。此外,一个单词可以有多种含义,并且正确解释句子需要恰当的语境信息。每种语言或多或少都是独特且含糊的。比如:“The Pope’s baby steps on gays ”,这句话显然有两种截然不同的解释,这是反映NLP中的困难之处的一个很好的例子。
随着计算机对语言的理解愈渐完美,将会产生可以处理互联网上全部信息的人工智能(AI),继而产生强人工智能(AGI)。
3.句法和语义分析
句法分析和语义分析是理解自然语言的两种主要方法。语言是一组意义的语句,但是什么使语句有意义呢?实际上,你可以将有效性分为两类:句法和语义。术语“句法”是指文本的语法结构,而术语“语义”是指由它表达的含义。但是,句法上正确的语句不必在语义上正确。只需看看下面的例子。语句“cow kow supremely”在语法上是有效的(主语-动词-副词),但没有任何意义。
句法分析:
句法分析,也称为语法分析或解析,是通过遵循正式语法规则来分析自然语言的过程。语法规则适用于单词和词组,而不是单个单词。语法分析主要为文本分配语义结构。
语义分析:
我们理解他人的语言是一种无意识的过程,依赖于直觉和对语言本身的认识。因此,我们理解语言的方式很大程度上取决于意义和语境。计算机却不能依赖上述方法,需要采用不同的途径。“语义”这个词是一个语言术语,意思与意义或逻辑相近。
因此,语义分析是理解单词、符号和语句结构的含义和解释的过程,这使计算机能够以人类的方式理解部分涉及意义和语境的自然语言。为什么说只能部分理解呢?是因为语义分析是NLP中最棘手的部分之一,仍未完全解决。例如,语音识别技术已非常成熟,并且工作近乎完美,但仍然缺乏在自然语言理解(例如语义)中的熟练程度。手机基本上可以理解我们所说的内容,但通常无法用它做任何事情,因为它不了解其背后意义。
4.理解文本的技巧
下面我们将讨论多种用于自然语言处理的现行技术。
什么是 解析 ?首先,让我们看一下词典释义:
解析—“将句子分解为其组成部分,并阐述各部分的句法角色。”
实际上解释的已经非常到位,但它可以更全面一些。解析是指计算机对句子的形式分析,其结果是一个解析树,这个解析树可以可视化地显示句子成分之间的句法关系,用于进一步处理和理解。
在下面你可以看到句子“The thief robbed the apartment”的解析树,以及由它传达的三种不同信息类型的描述。
我先看单个单词正上方的字母,它们用于显示每个单词的词性(名词-N,动词-V和限定词-DT)。我们再看解析树中更高的层级,一些单词进行层次分组组成短语。例如,“the thief”是一个名词短语(NP),“robbed the apartment”是一个动词短语(VP),这些短语一起形成一个句子(S),在树中标记在更高的层级。
这些短语以名词为主体,包含一个或多个单词,可能还包含描述性词语、动词或副词,简言之,就是把把名词和与其相关的单词组合在一起。
从解析树中还能看出,单词的表述结构影响其在句中的语法关系。例如,在此结构中,“thief”是“robbed”的主语。
结合结构来看,动词“robbed”,上方标有“V”,更上一级标有“VP”;主语“thief”,上方标有N和“NP”,通过“S”联系在一起。这就像主语—动词关系的模板,同样还有许多其他类型的关系。
词干提取:
词干提取 是一种来自形态学和信息检索的技术,在NLP中用于预处理和效率提升。但是,我们首先看一下词典中的释义:词干— “起源于或由其引起。”
基本上,“词干提取”是将单词进行缩减得到词干的过程,而“词干”的实际意义是是在删除单词的所有的前缀后缀之后保留的一部分。例如,“touched”,它的词干是“touch”,同时“touch”也是“touching”等词的词干。
为什么需要词干?因为我们会遇到不同的词汇变形,而实际上它们具有相同的词干和意义。举例来说:
# I was taking a ride in the car
# I was riding in the car.
这两个句子意思是一致的,ride和riding的用法也是相同的。
词汇表中所有的单词有不同的注释,其中还包括大量实际意义相同的单词,要存储它们,需要一个庞大数据库,但是通过词干提取,仅关注单词的词干,可以很好地解决这个问题。现行的通用算法之一是1979年的“Porter Stemming Algorithm”(波特词干算法),非常使用便捷。
文字分割:
NLP中的 文本分割 是将文本转换为有意义的单元的过程,可以是单词、句子、也可以是不同的主题或潜在的意图等。在文本分割中,文本根据不同语种被分割为成份单词,由于人类语言的复杂性,通常比较难。举个例子,在英语中利用空格来分隔单词,相对高效实用,但是也有像“ice box”这类词语的例外,ice和box这两个由空格隔开的词合并一起使用才有原本含义的,所以人们有时把它写作“ice-box”,那么就给文字分割带来了难题。
命名实体识别:
命名实体识别 (NER)用于确定文本中哪些词条属于命名实体,这些词条可以被定位并归入预定义的类别,类别的范围包括人名,组织,地点,还有货币价值和百分比。
看下面的例子:
NER之前:Martin bought 300 shares of SAP in 2016.
NER 之 后:[Martin]Person bought 300 shares of [SAP]Organization in [2016]Time.
关系抽取:
关系提取 采用“命名实体识别(NER)”的命名实体,并识别它们之间的语义关系。这可能意味着它能够发现文本中词语之间的关联性,例如谁与谁结婚,某人在哪个公司工作等。这个问题也可以转换为分类问题,然后为每种关系类型训练机器学习模型。
情感分析:
通过情感分析,我们想要确定例如说话者或作者关于文档,互动或事件的态度(例如情绪)。因此,需要理解文本以预测潜在意图是一种自然语言处理问题。情绪主要分为积极,消极和中性两类。通过使用情感分析,我们希望根据他撰写的关于产品的评论来预测客户对产品的看法和态度。因此,情感分析广泛应用于评论,调查,文档等等
如果你对使用Python中的某些技术感兴趣,可以查看我创建的Python的自然语言工具包(NLTK)的Jupyter Notebook。你还可以查看我的博客文章,了解如何使用Keras构建神经网络,我将训练神经网络进行情感分析。
5.深度学习和NLP
深度学习和自然语言的核心是“词义”,在这里,单词用一个实数向量来表示。因此,通过向量来代表单词单词,我们可以将单词置于高维度的空间中,由向量表示的单词起到语义空间的作用。这仅仅意味着在该高维向量空间中,形近意近的单词倾向于聚集在一起。下图中,可以看到单词含义的直观展示:
在此空间中,如果想要知道某一组聚集成类的单词的含义,可以通过使用主成分分析法(PCA),也可以使用降维法。但这些方法太简单并且会遗漏了周边的大量信息,因而产生误差。在研究的初始阶段,这些方法很好用,(如数据科学中的逻辑或线性回归)但并不是前沿技术。
我们还可以将单词的一部分当作向量,这些向量可以代表单词的含义。想象一下“undesirability”这个词。使用“形态学方法”,它涉及一个词所具有的不同部分,我们认为它由词素(单词部分)构成:“Un + desire + able + ity” 。每个语素都有自己的向量。这允许我们构建一个神经网络,它可以构成一个更大的单位的意义,而更大的单位又由所有这些语素组成。
深度学习还可以通过创建句法分析器来理解句子的结构,谷歌正在使用这样的依赖解析技术,在他们的“McParseface”和“SyntaxNet”(两种语言解析器),不过更加宏大,更加复杂。
通过分析句子结构,我们开始理解句子的意义,可以从单词的含义开始,也可以从整个短语和句子开始,无论单词的意义、短语还是句子,都用向量来表示。如果想知道句子之间的关系,我们可以创建神经网络来帮助分析。
深度学习 也适用于情感分析。请看这个电影评论:“ 这部电影不在乎是不是巧妙,也不在乎幽默与否 ”。传统的机器学习算法会认为这是一个积极的评论,因为“聪明”和“幽默”是积极的词汇,但是神经网络能够识别出它的真正含义。
另外,深度学习算法实现的机器翻译中,它从句子开始翻译,并生成一个向量,然后用另外一种语言生成所需要的信息。
总而言之,NLP与深度学习相结合,就是表示单词、短语的向量,以及它们的含义。
-
?
Docker之小白都可入门教程
Hayle
展开
什么是Docker?
docker
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。上面所说挺balabala。
用简单的例子来说下,以前水运装载货物,就是把闲散的货物放入船里,然后运输,在二十世纪四十年代后,出现了集装箱这个东西,货物对于空间的利用得到极大的提高,导致运输能力得到极大的提高与方便,船运能力得到了非常大的改进。
docker是一种虚拟化技术,虚拟化就是把一台电脑变成多个电脑来用。传统的虚拟机虚拟化相较docker就如上段例子所讲的集装箱未出现的时期,docker则是集装箱,在例子中就说明了docker比原有虚拟机的虚拟化对资源利用率大大的提高了。有文章说在一台物理机上可以很容易建立成百上千的容器(docker),而只能建立几个虚拟机,就足以说明问题了。
转自其他资料——docker技术为什么能快速吸引到技术业界的注意?
易用性: Docker能够为潜在受众带来出色的易用性——开发者、系统管理员以及架构师等等——从而帮助其充分利用容器技术优势以快速构建并测试可移植应用程序。每个人都可以在自己的笔记本上打包应用程序,并将其直接运行在任何公有云、私有云甚至是裸机之上。其座右铭是:一次构建,随处运行。
速度: Docker容器具备轻量化与高速特性。由于容器本身属于运行在内核之上的沙箱环境,因为其对资源的需求量极低。大家可以在数秒钟内完成容器的创建与运行,而虚拟机则由于需要引导完整的虚拟操作系统而耗费更多时间。
Docker Hub: Docker用户还能够享受由Docker Hub带来的丰富生态系统支持,我们可以将其理解成“Docker镜像的应用商店”。Docker Hub提供成千上万由社区开发的公共镜像,且可立即加以使用。我们可以轻松根据需要搜索到合适的镜像,将其提取并稍加修改即加以使用。
模块性与可扩展性: Docker允许我们轻松将应用程序的功能拆分成多个独立容器。举例来说,我们可以将自己的Postgres数据库运行在一套容器当中,并将Redis服务器运行在另一容器内,而Node.js也拥有自己的容器系统。在Docker的帮助上,大家能够轻松将这些容器对接起来以创建完整的应用程序,这就让未来的规模伸缩或者组件更新得以通过相互独立的方式完成。
Docker安装注意(windows) :
1.这里为什么不讲Unix 类系统以及OSX系统,小编觉得类unix 天生比较好装,OSX系统小编没有,目测也是和win7一样,百度下命令即可,别跟我扯google,何必装,又不是撒贝宁。
2.win7 安装去官网的这个地址 docker/products/docker-toolbox下载套件,支持win7 与OSX。
3.win10 安装则去这个网站 docker/docker-windows,前提得先在程序功能中开启Hyper-V,如这些都成功则会在屏幕右下方出现Docker小鲸鱼标志。
docker小图标
4.安装镜像,因为国内墙的原因我们使用镜像加速器 ,我使用的是win10 ,用的阿里云镜像加速点击小鲸鱼然后点击setting如图,当然你也可以使用配置文件 /etc/docker/daemon.json(unix 系统 没有时新建该文件)我用的win10,也是找这个文件只是路径不一样而已。找到这行填写如下 registry-mirrors": [ "https://o6xg2fvj.mirror.aliyuncs" ]。
阿里云镜像配置
Docker常用命令:
1. 使用docker run创建docker容器,(docker命令都是以docker开头的)安装完docker后,大多数情况下,本机上面一般没有docker镜像的,执行docker run的时候一般先查看本地镜像,如果本地没有,则会自动去Docker Hub上下载镜像。Docker的域名解析服务器是google的,因此需要将8.8.8.8和8.8.4.4的DNS服务器IP添加到域名系统中去。Ubuntu下的操作是打开/etc/resolv.conf,添加两行nameserver 8.8.8.8和nameserver 8.8.4.4。
2. 接下来使用命令docker run -i -t 镜像名字 /bin/bash创建一个容器,比如
docker -i -t ubuntu /bin/bash,其中使用-t参数是指定一个交互是命令行,
执行这个命令,如果本地有镜像,则用本地镜像创建一个容器,如果没有则会去docker hub下载镜像,下载时间可能有点长。
命令执行完毕后,会创建启动一个容器,并进入容器内部的shell中。在这个容器里面和普通的Linux操作完全一样。
3. 容器常用的管理命令
docker run 创建并启动一个容器,在run后面加上-d参数,则会创建一个守护式容器在后台运行。
docker ps -a 查看已经创建的容器
docker ps -s 查看已经启动的容器
docker start con_name 启动容器名为con_name的容器
docker stop con_name 停止容器名为con_name的容器
docker rm con_name 删除容器名为con_name的容器
docker rename old_name new_name 重命名一个容器
docker attach con_name 将终端附着到正在运行的容器名为con_name的容器的终端上面去,前提是创建该容器时指定了相应的sh
执行这个命令后,按下回车键,会进入容器的命令行Shell中。
docker logs con_name 获取容器名为con_name的容器日志
docker inspect 查看容器的详细信息
docker top con_name 查看容器名为con_name的容器内部的进程
docker exec 可以用来在容器中运行一个进程
总结:docker的管理命令都是以docker开头,加上一个容易理解的单词,对一个命令的参数不熟悉,可以使用docker command --help查看相关参数意义,还有就是多练习多敲,比如说去创建一个nginx 的web应用,通过网络,没事多练习。小编通过这两天的摸索配置成功,小编写的这篇文章不深,但是可以看看。谢谢大家,如有错漏帮忙指正,有问题可以私聊。
-
?
MySQL数据库安装及使用入门
堪东蒽
展开
MySQL是目前最火的开源关系型数据库,其市场占有率仅次于关系数据库的大佬Oracle,比DB2和SQL Server高出一大截。本文作为MySQL的入门教程,介绍如何安装MySQL及基本使用。
MySQL的安装
Linux系统安装MySQL
在Linux上安装MySQL非常简单,以Ubuntu为例,只需要执行如下命令即可:
sudo apt-get updatesudo apt-get install mysql-server
安装的过程中会提示输入root用户的密码,安装完成后就可以基本使用了。在实际生产环境应用的时候为了安全,需要做一些配置,本文暂时不做介绍。
如果在CentOS发行版,安装方法基本类似,具体执行如下命令:
sudo yum install mysql-serversudo systemctl start mysqld
Windows系统安装MySQL
在Windows环境下安装也不负载,直接双击安装文件按照向导安装即可。如果作为学习,直接选择默认值即可。
A. 打开安装包,同意协议,下一步
B. 选择服务器安装
develop 是指服务器为开发机【推荐】server only只安装服务器client only 只安装客户操作端full 全部安装custom 自定义
C. 服务器参数修改
这一步MySQL server会在界面中显示,由用户勾选完成最后的安装配置文件的自动配置。
其中:
Config Type(配置文件类型)
Development Machine 是指开发服务器Server Machine 服务器Dedicated Machine 专用服务器仅作为数据库服务器使用TCP/IP是指开放的端口,mysql 默认的端口是3306。
D. 设置密码
会提示密码的安全状态
E. 日志文件存放位置确认
Bin log是二进制文件Error Log 是指错误文件slow Query Log 是慢查询日志
F. 启动服务
数据库的基本使用
数据库安装完成后就可以使用了,我们以Linux系统下为例进行演示。这是因为MySQL在Linux上部署也是最为普遍的。
登录数据库
对于开发人员,在实际使用的时候可能通过程序访问比较多;而对于运维人员则通常是直接登录到数据库系统内部进行操作。我们以直接登录操作为例进行介绍,后面会介绍如果通过程序访问数据。在Linux系统登录数据库非常简单,假设我们数据库的用户名为root,密码是111111,执行如下命令:
mysql -u root -p111111
如果用户,密码没有问题,就可以进入数据库系统,具体如下所示。
数据库实例操作
MySQL可以同时支持多个数据库实例,数据库系统安装完成后里面已经有一些系统数据库实例用于记录其私有数据。通过如下命令可以查看具体有哪些数据库实例:
show databases;
可以看到有如下数据库实例:
在没有创建自己实例的情况下,数据库实例都是系统数据库实例,我们可以创建一个自己的数据库实例,用于学习。创建数据库很简单,具体操作如下:
create database test;
如果要基于该数据库工作,需要切换到该数据库,使用如下命令进行切换:
use test;
表操作
我们知道关系型数据库的存储实体就是表,任何数据都存储在表中。MySQL数据库实例中就是表,新的数据库没有任何表。通过如下命令可以创建一个新的表,我们这里创建一个学生表,包含学号,名字和性别等内容。
CREATE TABLE IF NOT EXISTS `student`( `std_id` INT UNSIGNED AUTO_INCREMENT, `std_name` VARCHAR(100) NOT NULL, `std_sex` VARCHAR(40) NOT NULL, PRIMARY KEY ( `std_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8;
创建表的基本语法如下,其中CREAT TABLE为关键字,table_name为创建的表名,后面跟着每个字段及字段的类型。
CREATE TABLE table_name (column_name column_type);
完成表的创建之后,可以查看数据库有哪些表:
show tables;
有了数据库表之后,我们就可以向表中插入数据了,具体示例如下:
insert into student(std_id, std_name, std_sex) values (1, "sunnyzhang", "m") ;
数据插入的语法格式如下,其中大写字符是关键字。
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
通过下面SQL语句可以查询表中的数据。
select * from student;
我们有条数据添加错误了,比如学号2的性别错了,需要修改一下(m-f)。
update student set std_sex="f" where std_id=2;
到此我们介绍了MySQL数据库的最基本用法,甚至都没有到入门的级别,今天先到这里,后续再逐一详细介绍。
相关搜索
- 数据库基础知识
- mysql数据库语句
- mysql数据库
- web服务器
- mysql
- 数据库系统有哪些
-
?
一条数据的HBase之旅,简明HBase入门教程-开篇
日13
展开
一些常见的HBase新手问题:什么样的数据适合用HBase来存储?既然HBase也是一个数据库,能否用它将现有系统中昂贵的Oracle替换掉?存放于HBase中的数据记录,为何不直接存放于HDFS之上?能否直接使用HBase来存储文件数据?Region(HBase中的数据分片)迁移后,数据是否也会被迁移?为何基于Spark/Hive分析HBase数据时性能较差?
NoSQL漫谈开篇
用惯了Oracle/MySQL的同学们,心目中的数据表,应该是长成这样的:
Table For RDBMS这种表结构规整,每一行都有固定的列构成,因此,非常适合结构化数据的存储。但在NoSQL领域,数据表的模样却往往换成了另外一种"画风":
Table For NoSQL行由看似"杂乱无章"的列组成,行与行之间也无须遵循一致的定义,而这种定义恰好符合半结构化数据或非结构化数据的特点。本文所要讲述的HBase,就属于该派系的一个典型代表。这些"杂乱无章"的列所构成的多行数据,被称之为一个"稀疏矩阵",而上图中的每一个"黑块块",在HBase中称之为一个KeyValue。
Apache HBase官方给出了这样的定义:
Apache HBase is the Hadoop database, a distributed, scalable, big data store.
即:Apache HBase是基于Hadoop构建的一个分布式的、可伸缩的海量数据存储系统。
HBase常被用来存放一些海量的(通常在TB级别以上)结构比较简单的数据,如历史订单记录,日志数据,监控Metris数据等等,HBase提供了简单的基于Key值的快速查询能力。
HBase在国内市场已经取得了非常广泛的应用,在搜索引擎中,也可以看出来,HBase在国内呈现出了逐年上升的势态:
百度指数HBase搜索结果从Apache HBase所关联的github项目的commits统计信息来看,也可以看出来该项目非常活跃:
开发活跃度Github Commits(需要说明的一点:HBase中的每一次commit,都已经过社区Commiter成员严格的Review,在commit之前,一个Patch可能已经被修改了几十个版本)
令人欣喜的是,国内的开发者也积极参与到了HBase社区贡献中,而且被社区接纳了多名PMC以及Committer成员。
本文将以一条数据在HBase中的“旅程”为线索,介绍HBase的核心概念与流程,几乎每一部分都可以展开成一篇独立的长文,但本文旨在让读者能够快速的了解HBase的架构轮廓,所以很多特性/流程被被一言带过,但这些特性在社区中往往经历了漫长的开发过程。至于讲什么以及讲到什么程度,本文都做了艰难的取舍,在讲解的过程中,将会穿插解答本文开始所提出的针对初学者的一些常见问题。
本文适用于HBase新手,而对于具备一定经验的HBase开发人员,相信本文也可以提供一些有价值的参考。本文内容基于HBase 2.0 beta 2版本,对比于1.0甚至是更早期的版本,2.0出现了大量变化,下面这些问题的答案将揭示部分关键的变化(新手可以直接跳过这些问题):
HBase meta Region在哪里提供服务?HBase是否可以保证单行操作的原子性?Region中写WAL与写MemStore的顺序是怎样的?你是否遇到过Region长时间处于RIT的状态? 你认为旧版本中Assignment Manager的主要问题是什么?在面对Full GC问题时,你尝试做过哪些优化?你是否深究过HBase Compaction带来的“写放大”有多严重?HBase的RPC框架存在什么问题?导致查询时延毛刺的原因有哪些?
本系列文章的整体行文思路如下:
介绍HBase数据模型基于数据模型介绍HBase的适用场景快速介绍集群关键角色以及集群部署建议示例数据介绍写数据流程读数据流程数据更新负载均衡机制HBase如何存储小文件数据
这些内容将会被拆成几篇文章。至于集群服务故障的处理机制,集群工具,周边生态,性能调优以及最佳实践等进阶内容,暂不放在本系列文章范畴内。
约定
1. 本文范围内针对一些关键特性/流程,使用了加粗以及加下划线的方式做了强调,如"ProcedureV2"。这些特性往往在本文中仅仅被粗浅提及,后续计划以独立的文章来介绍这些特性/流程。
2. 术语缩写:对于一些进程/角色名称,在本文范围内可能通过缩写形式来表述:
术语缩写数据模型
RowKey
用来表示唯一一行记录的主键,HBase的数据是按照RowKey的字典顺序进行全局排序的,所有的查询都只能依赖于这一个排序维度。
通过下面一个例子来说明一下"字典排序"的原理:RowKey列表{"abc", "a", "bdf", "cdf", "defg"}按字典排序后的结果为{"a", "abc", "bdf", "cdf", "defg"}也就是说,当两个RowKey进行排序时,先对比两个RowKey的第一个字节,如果相同,则对比第二个字节,依此类推...如果在对比到第M个字节时,已经超出了其中一个RowKey的字节长度,那么,短的RowKey要被排在另外一个RowKey的前面。
稀疏矩阵
参考了Bigtable,HBase中一个表的数据是按照稀疏矩阵的方式组织的,"开篇"部分给出了一张关于HBase数据表的抽象图,我们再结合下表来加深大家关于"稀疏矩阵"的印象:
稀疏矩阵看的出来:每一行中,列的组成都是灵活的,行与行之间并不需要遵循相同的列定义, 也就是HBase数据表"schema-less"的特点。
Region
区别于Cassandra/DynamoDB的"Hash分区"设计,HBase中采用了"Range分区",将Key的完整区间切割成一个个的"Key Range" ,每一个"Key Range"称之为一个Region。
也可以这么理解:将HBase中拥有数亿行的一个大表,横向切割成一个个"子表",这一个个"子表"就是Region:
RegionRegion是HBase中负载均衡的基本单元,当一个Region增长到一定大小以后,会自动分裂成两个。
Column Family
如果将Region看成是一个表的横向切割,那么,一个Region中的数据列的纵向切割,称之为一个Column Family。每一个列,都必须归属于一个Column Family,这个归属关系是在写数据时指定的,而不是建表时预先定义。
Column FamilyKeyValue
KeyValue的设计不是源自Bigtable,而是要追溯至论文"The log-structured merge-tree(LSM-Tree)"。每一行中的每一列数据,都被包装成独立的拥有特定结构的KeyValue,KeyValue中包含了丰富的自我描述信息:
KeyValue看的出来,KeyValue是支撑"稀疏矩阵"设计的一个关键点:一些Key相同的任意数量的独立KeyValue就可以构成一行数据。但这种设计带来的一个显而易见的缺点:每一个KeyValue所携带的自我描述信息,会带来显著的数据膨胀。
适用场景
在介绍完了HBase的数据模型以后,我们可以回答本文一开始的前两个问题:
什么样的数据适合用HBase来存储?既然HBase也是一个数据库,能否用它将现有系统中昂贵的Oracle替换掉?
HBase的数据模型比较简单,数据按照RowKey排序存放,适合HBase存储的数据,可以简单总结如下:
以实体为中心的数据实体可以包括但不限于如下几种:
自然人/账户/手机号/车辆相关数据用户画像数据(含标签类数据)图数据(关系类数据)
描述这些实体的,可以有基础属性信息、实体关系(图数据)、所发生的事件(如交易记录、车辆轨迹点)等等。
以事件为中心的数据
监控数据时序数据实时位置类数据消息/日志类数据
上面所描述的这些数据,有的是结构化数据,有的是半结构化或非结构化数据。HBase的“稀疏矩阵”设计,使其应对非结构化数据存储时能够得心应手,但在我们的实际用户场景中,结构化数据存储依然占据了比较重的比例。由于HBase仅提供了基于RowKey的单维度索引能力,在应对一些具体的场景时,依然还需要基于HBase之上构建一些专业的能力,如:
OpenTSDB 时序数据存储,提供基于Metrics+时间+标签的一些组合维度查询与聚合能力GeoMesa 时空数据存储,提供基于时间+空间范围的索引能力JanusGraph 图数据存储,提供基于属性、关系的图索引能力
HBase擅长于存储结构简单的海量数据但索引能力有限,而Oracle等传统关系型数据库(RDBMS)能够提供丰富的查询能力,但却疲于应对TB级别的海量数据存储,HBase对传统的RDBMS并不是取代关系,而是一种补充。
HBase与HDFS
我们都知道HBase的数据是存储于HDFS里面的,相信大家也都有这么的认知:
HBase是一个分布式数据库,HDFS是一个分布式文件系统
理解了这一点,我们先来粗略回答本文已开始提出的其中两个问题:
3. HBase中的数据为何不直接存放于HDFS之上?HBase中存储的海量数据记录,通常在几百Bytes到KB级别,如果将这些数据直接存储于HDFS之上,会导致大量的小文件产生,为HDFS的元数据管理节点(NameNode)带来沉重的压力。4. 文件能否直接存储于HBase里面?如果是几MB的文件,其实也可以直接存储于HBase里面,我们暂且将这类文件称之为小文件,HBase提供了一个名为MOB的特性来应对这类小文件的存储。但如果是更大的文件,强烈不建议用HBase来存储,关于这里更多的原因,希望你在详细读完本系列文章所有内容之后能够自己解答。
集群角色
关于集群环境,你可以使用国内外大数据厂商的平台,如Cloudera,Hontonworks以及国内的华为,都发行了自己的企业版大数据平台,另外,华为云、阿里云中也均推出了全托管式的HBase服务。
我们假设集群环境已经Ready了,先来看一下集群中的关键角色:
集群角色相信大部分人对这些角色都已经有了一定程度的了解,我们快速的介绍一下各个角色在集群中的主要职责:
ZooKeeper在一个拥有多个节点的分布式系统中,假设,只能有一个节点是主节点,如何快速的选举出一个主节点而且让所有的节点都认可这个主节点?这就是HBase集群中存在的一个最基础命题。利用ZooKeeper就可以非常简单的实现这类"仲裁"需求,ZooKeeper还提供了基础的事件通知机制,所有的数据都以 ZNode的形式存在,它也称得上是一个"微型数据库"。NameNodeHDFS作为一个分布式文件系统,自然需要文件目录树的元数据信息,另外,在HDFS中每一个文件都是按照Block存储的,文件与Block的关联也通过元数据信息来描述。NameNode提供了这些元数据信息的存储。DataNodeHDFS的数据存放节点。RegionServerHBase的数据服务节点。MasterHBase的管理节点,通常在一个集群中设置一个主Master,一个备Master,主备角色的"仲裁"由ZooKeeper实现。 Master主要职责:①负责管理所有的RegionServer。②建表/修改表/删除表等DDL操作请求的服务端执行主体。③管理所有的数据分片(Region)到RegionServer的分配。④如果一个RegionServer宕机或进程故障,由Master负责将它原来所负责的Regions转移到其它的RegionServer上继续提供服务。⑤Master自身也可以作为一个RegionServer提供服务,该能力是可配置的。
集群部署建议
如果基于物理机/虚拟机部署,通常建议:
部署建议1. RegionServer与DataNode联合部署,RegionServer与DataNode按1:1比例设置。
这种部署的优势在于,RegionServer中的数据文件可以存储一个副本于本机的DataNode节点中,从而在读取时可以利用HDFS中的"短路径读取(Short Circuit)"来绕过网络请求,降低读取时延。
2. 管理节点独立于数据节点部署
如果是基于物理机部署,每一台物理机节点上可以设置几个RegionServers/DataNodes来提升资源使用率。
也可以选择基于容器来部署,如在HBaseCon Asia 2017大会知乎的演讲主题中,就提到了知乎基于Kubernetes部署HBase服务的实践。
对于公有云HBase服务而言,为了降低总体拥有成本(TCO),通常选择"计算与存储物理分离"的方式,从架构上来说,可能导致平均时延略有下降,但可以借助于共享存储底层的IO优化来做一些"弥补"。
HBase集群中的RegionServers可以按逻辑划分为多个Groups,一个表可以与一个指定的Group绑定,可以将RegionServer Group理解成将一个大的集群划分成了多个逻辑子集群,借此可以实现多租户间的隔离,这就是HBase中的RegionServer Group特性。
示例数据
以我们日常生活都熟悉的一类数据的存储为例,先简单给出示例数据的字段定义:
字段定义本文力求简洁,仅给出了几个简单的字段。如下是"虚构"的样例数据:
数据样例在本文大部分内容中所涉及的一条数据,是上面加粗的最后一行"Mobile1"为"13400006666"这行记录。
写数据之前:创建连接
Login
在启用了安全特性的前提下,Login阶段是为了完成用户认证(确定用户的合法身份),这是后续一切安全访问控制的基础。
当前Hadoop/HBase仅支持基于Kerberos的用户认证,ZooKeeper除了Kerberos认证,还能支持简单的用户名/密码认证,但都基于静态的配置,无法动态新增用户。如果要支持其它第三方认证,需要对现有的安全框架做出比较大的改动。
创建Connection
Connection可以理解为一个HBase集群连接的抽象,建议使用ConnectionFactory提供的工具方法来创建。因为HBase当前提供了两种连接模式:同步连接,异步连接,这两种连接模式下所创建的Connection也是不同的。我们给出ConnectionFactory中关于获取这两种连接的典型方法定义:
Create Connection APIConnection中主要维护着两类共享的资源:
线程池Socket连接
这些资源都是在真正使用的时候æ‰...
-
?
分享一本CMS入门的教程《SiteServer CMS新手入门》
昌峻熙
展开
教程地址:http://docs.siteserver/getting-started/index.html
一、书的目录
前言1.1. 写在前面的话概念2.1. 什么是站点?2.2. 什么是栏目?2.3. 什么是内容?2.4. 什么是页面?2.5. 什么是模板?2.6. 什么是STL语言?2.7. 什么是插件?快速上手3.1. 如何安装 SiteServer CMS?3.2. 如何登录CMS?3.3. 如何创建站点?3.4. 如何切换站点?3.5. 如何发布和修改内容?3.6. 如何修改栏目?3.7. 如何修改站点名称和Logo?3.8. 如何生成页面?3.9. 如何浏览站点页面?附录4.1. 附录一、SiteServer CMS 官方资源4.2. 附录二、安装IIS4.3. 附录三、安装.NET Framework4.4. 附录四、安装SQLSERVER 数据库4.5. [附录五、安装MYSQL 数据库]4.6. [附录六、安装PostgreSql 数据库]4.7. [附录七、安装ORACLE 数据库]二、书的部分内容
1、什么是模板?
模板,就是负责把CMS后台管理的内容按一定的表现形式组织起来形成前台页面的一种技术。按一定的表现形式组织起来,这就是模板的内容,模板决定后台内容显示到前台页面后的效果。既然页面一般分成网站首页、栏目页、内容页以及单页,同理模板也就对应分别有首页模板、栏目模板、内容模板以及单页模板。
2、 模板主要作用
模板的主要作用主要有:
决定前台页面显示哪些后台数据;决定前台页面的风格、样式等表现形式;多条内容采用相同的模板可以产生表现形式类似的多个静态页面,如果需要调整页面的表形形式,只需要统一调整模板即可。以内容模板为例,假设后台一个栏目下有两篇内容,如下图所示:
这两篇内容使用了一个相同的内容模板,最后产生的两个前台页面分别如下两图:
以上两个前台内容页面,除了文章的标题和文章内容不同之外,其他信息都是一样的。这就是模板的作用,把后台的内容以一定的表现形式组织起来从而形成前台页面。
3、嵌套好的模板
嵌套好的模板和静态页面(Html)并无差别,就是在Html中夹杂着STL标签语言。如下图所示:
4、什么是插件?
SiteServer CMS 插件是扩展 SiteServer CMS 产品核心功能的代码包,SiteServer CMS 插件由.NET代码和其他文件(如图片、CSS和JavaScript等)组成。 通过制作你自己的插件,你可以扩展 SiteServer CMS,在 SiteServer CMS 已经提供的功能基础上构建额外的功能。
5、插件的作用
SiteServer CMS 并非仅仅是一个简单的网站管理平台,同时也是一个功能极其强大并且有着无限扩展能力的 CMS 内容管理平台。SiteServer CMS 的无限扩展能力正是通过插件机制来实现的。借助于 SiteServer CMS 的模板和插件机制,你几乎可以把 SiteServer CMS 配置成任何类型的站点。
因为插件的所有的功能都是通过灵活的模块和自定义配置开发出来的,可以说,通过插件你可以实现任何你希望在站点中实现的功能,插件的唯一限制就是你的想象力,插件的可能性是无限的!
例如,你可以编写一个插件来控制对应栏目的内容模型,采用自定义的字段提交并显示内容文章;或者,你可以编写一个插件,创建一个带有短信通知、支持第三方支付的全功能票务系统。
6、插件的组成
大多数的 SiteServer CMS 插件都是由许多文件组成的,但是一个最简化的插件实际上只需要两个文件:一个主文件(插件名称.dll)以及一个插件配置文件(plugin.config)。
作为 SiteServer CMS 插件的开发者,你可以创建插件并公开出来,插件将被展现到广大的 SiteServer CMS 用户面前,安装、使用并提交反馈。你所需要做的就是把你的好想法变成代码。
-
?
SQL入门,初学者教程
雁玉
展开
SQL简介
SQL(聆听i/s kju l/, or 聆听i/sikwl/;结构化查询语言)是一种特定目的编程语言,用于管理关系数据库管理系统(RDBMS),或在关系流数据管理系统(RDSMS)中进行流处理。
SQL基于关系代数和元组关系演算,包括一个数据定义语言和数据操纵语言。SQL的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。尽管SQL经常被描述为,而且很大程度上是一种声明式编程(4GL),但是其也含有过程式编程的元素。
语法:
select * from table ; 查询表table里所有数据;
select name from table;查询表table列名为name下的数据;
select name,ID,from table;查询表table里列名为name和ID下的数据;
外部学习练习网址:https://sqlbolt/
-
?
mysql基础入门教程
权凝珍
展开
数据库是软件开发人员要掌握的基本工具,软件的运行的过程就是操作数据的过程,数据库中的数据无非就是几个操作:增-删-查-改。
数据库是软件开发人员要掌握的基本工具,软件的运行的过程就是操作数据的过程,数据库中的数据无非就是几个操作:增-删-查-改。Mysql安装完成后,需要配置变量环境,找到配置路径path,然后把mysql安装目录bin文件导入就可以了。然后运行cmd进入dos。进入dos后输入:mysql -uroot -p密码
然后就可以进入mysql的操作环境了。如下图:登录后我执行了一条:show databases命令,查看所有的库。
创建一个表,然后查看表的数据结构
删除一个字段
添加一个字段
添加两条数据
数据修改成功
数据修改失败了,但是无错误,后来发现了判断是否为空要执行的是 is null而不是=null
改为is null后修改成功
修改字段成功
添加了多条数据,表格完成了
查询id=1的表格
通过别名输入id=1的表格数据
查询是否有job为null的老师
查询指定日期的女老师
多条件查询
查询name末尾为e结尾的id
查询指定字符开头的
查询名字中带有z的
id倒叙排列
多值排序
男女分组
查询总记录数
limit分页查询
数据库入门教程
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
初入新手村 — 演示者视图的操作步骤 0102
-
初入新手村 — 鼠标的交互的方法 0103
-
初入新手村 — 如何快速访问工具栏 0104
-
初入新手村 — 文件选项卡、保存等基础 0105
-
第二关 :内容整理与处理 — 导航区操作技巧 0201
-
第三关 :文字工具与段落 — 如何给你的文字加特效 0301
-
文字工具与段落— 段落工具使用 0302
-
第四关:绘图与形状效果 — 基本形状的绘制方法 0401
-
绘图与形状效果 — 给你的图形加特效 0402
-
绘图与形状效果 — 快速排列多种图形 0403
-
第五关:合并形状与图标 — 用好合并形状轻松获得更多创意图形 0501
-
第六关:图片的神奇 — 教你PPT如何实现抠图 0601
-
图片的神奇 — 使用图片裁剪让图片为你所用 0602
-
第七关:表格与逻辑图表 — 教你画一个简洁大方的表格 0701
-
表格与逻辑图表 — SmartArt快速生成逻辑图表 0702
-
表格与逻辑图表 — 一招SmartArt走遍天下 0703
-
第八关:形象化市场数据 — PPT中数据图表怎么做?0801
-
形象化市场数据 — 教你做好看的条形图和柱状图 0802
-
形象化市场数据 — 饼图的美化技巧 0803
-
第十关:终成商务演示高手
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101