基础教程_python基础教程 - CSDN
  • android开发入门教程--上(完整版)

    千次下载 热门讨论 2020-07-29 15:36:11
    3.1 AndroidSDK基础 3.2 深入探寻AndroidSDK的密码 3.2.1 AndroidSDK目录结构 3.2.2 android.jar及内部结构 3.2.3 SDK文档及阅读技巧 3.2.4 先来热热身——AndroidSDK例子解析 3.2.5 SDK提供的工具介绍 3.3 Android...
  • mysql 基础教程 很全

    万次阅读 多人点赞 2018-11-02 11:27:46
    (一)数据库操作 1、创建数据库 create database 数据库名; create database runoob; 2、选择数据库 use 数据库名; use runoob; 3、删除数据库 ...CREATE TABL...

    (一)数据库操作

    1、创建数据库

    create database 数据库名;
    
    create database runoob;
    

    2、选择数据库

    use 数据库名;
    
    use runoob;
    

    3、删除数据库

    drop database 数据库名;
    
    drop database runoob;
    

    (二)数值类型
    这里写图片描述

    (三)数据表

    1、创建数据表

    CREATE TABLE 数据表名 (字段名 字段类型);
    
    CREATE TABLE `runoob_tbl`(
       `runoob_id` INT UNSIGNED AUTO_INCREMENT,
       `runoob_title` VARCHAR(100) NOT NULL,
       `runoob_author` VARCHAR(40) NOT NULL,
       `submission_date` DATE,
       PRIMARY KEY ( `runoob_id` )
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    2、删除数据表

    DROP TABLE 数据表名 ;
    
    DROP TABLE runoob_tbl ;
    

    (四)数据操作

    1、增

    INSERT INTO table_name ( field1, field2,...fieldN ) 
    VALUES 
    ( value1, value2,...valueN );
    
    INSERT INTO runoob_tbl (runoob_title, runoob_author, submission_date)
    VALUES
    ("学习 PHP", "菜鸟教程", NOW());
    

    2、删

    DELETE FROM table_name [WHERE Clause];
    
    DELETE FROM runoob_tbl WHERE runoob_id=1;
    

    3、改

    UPDATE table_name SET field1=new-value1, field2=new-value2
    [WHERE Clause];
    
    UPDATE runoob_tbl SET runoob_title='学习 C++' WHERE runoob_id=1;
    

    4、查

    SELECT field1, field2,...fieldN FROM table_name1, table_name2...
    [WHERE condition1 [AND [OR]] condition2.....
    
    SELECT * from runoob_tbl WHERE runoob_author='菜鸟教程';
    

    (五)查询

    1、WHERE
    这里写图片描述

    2、ORDER BY

    SELECT field1, field2,...fieldN table_name1, table_name2...
    ORDER BY field1, [field2...] [ASC [DESC]];
    
    SELECT * from runoob_tbl ORDER BY submission_date ASC;
    

    3、GROUP BY

    GROUP BY 语句根据一个或多个列对结果集进行分组。

    在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

    SELECT column_name, function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name;
    
    SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;
    

    4、JOIN

    JOIN 按照功能大致分为如下三类:

    INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
    LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
    RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
    这里写图片描述
    这里写图片描述
    这里写图片描述

    SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a 
    INNER JOIN tcount_tbl b 
    ON a.runoob_author = b.runoob_author
    

    (六)MySQL 事务

    1、事务介绍

    MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

    在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
    事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
    事务用来管理 insert,update,delete 语句

    2、事务控制语句

    BEGIN或START TRANSACTION;显式地开启一个事务;

    COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改成为永久性的;

    ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;

    (七)字段操作

    1、增

    ALTER TABLE 数据表名 ADD 新增字段 字段类型;
    
    ALTER TABLE runoob_tbl ADD status tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态 0正常 1删除';
    

    2、删

    ALTER TABLE 数据表名 DROP 字段名;
    
    ALTER TABLE runoob_tbl  DROP status;
    

    3、改

    #例如,把字段 c 的类型从 CHAR(1) 改为 CHAR(10),可以执行以下命令:
    ALTER TABLE testalter_tbl MODIFY c CHAR(10);
    ALTER TABLE testalter_tbl CHANGE c c CHAR(10);
    
    #修改字段类型及名称
    #在 CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型。尝试如下实例:
    #例如,把字段 c 改成 字段 j ,类型从 CHAR(1) 改为 CHAR(10),可以执行以下命令:
    ALTER TABLE testalter_tbl CHANGE c j CHAR(10);
    
    #ALTER TABLE 对 Null 值和默认值的影响
    ALTER TABLE testalter_tbl MODIFY j BIGINT NOT NULL DEFAULT 100;
    
    #修改字段默认值
    ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
    
    #修改表名
    ALTER TABLE testalter_tbl RENAME TO alter_tbl;
    
    

    (八)索引

    1、创建普通索引

    #这是最基本的索引,它没有任何限制。它有以下几种创建方式:
    #(1)创建索引
    
    CREATE INDEX indexName ON mytable(username(length)); 
    #如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。
    
    #(2)创建表的时候直接指定
    CREATE TABLE mytable(  
    	ID INT NOT NULL,   
    	username VARCHAR(16) NOT NULL,  
    	INDEX [indexName] (username(length)) 
    ); 
    

    2、创建唯一索引

    #它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它#有以下几种创建方式:
    
    #(1)创建索引
    CREATE UNIQUE INDEX indexName ON mytable(username(length)) ;
    
    #(2)创建表的时候直接指定
    CREATE TABLE mytable( 
    	ID INT NOT NULL,  
    	username VARCHAR(16) NOT NULL,  
    	UNIQUE [indexName] (username(length))  
    );  
    

    3、删除索引

    DROP INDEX [indexName] ON mytable; 
    

    4、使用ALTER 命令添加和删除索引

    有四种方式来添加数据表的索引:
    #(1)该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
    ALTER TABLE tbl_name ADD PRIMARY KEY (column_list);
    
    #(2)这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
    ALTER TABLE tbl_name ADD UNIQUE index_name (column_list);
    
    #(3)添加普通索引,索引值可出现多次。
    ALTER TABLE tbl_name ADD INDEX index_name (column_list);
    
    #(4)该语句指定了索引为 FULLTEXT ,用于全文索引。
    ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list);
    
    #添加索引实例
    ALTER TABLE testalter_tbl ADD INDEX (c);
    
    #删除索引实例
    ALTER TABLE testalter_tbl DROP INDEX c;
    

    实战应用

    1、mysql统计-关于学生成绩
    https://blog.csdn.net/mayanyun2013/article/details/50845667

    展开全文
  • 计算机基础教程(一)

    万次阅读 多人点赞 2019-07-30 11:12:01
    《大学计算机基础教程PDF》下载链接 链接:https://pan.baidu.com/s/1PGsvh1oRD1euWUedEXNl8w 密码:zt4x 推荐先看下面的两本: 计算机是怎样跑起来的 程序是怎样跑起来的 这两本百度云连接,CSDN审核不通过,...

    《大学计算机基础教程PDF》下载链接

    链接:https://pan.baidu.com/s/1PGsvh1oRD1euWUedEXNl8w 密码:zt4x

    推荐先看下面的两本:

    计算机是怎样跑起来的

    程序是怎样跑起来的

    这两本百度云连接,CSDN审核不通过,可以自己网上找pdf的

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    下面的内容是自己看《大学计算机基础教程PDF》的总结,自己可以直接下载上面的pdf电子书,自己看

    第 1 章 计算机基础知识

    1.1.1 计算机的产生与发展
    1.计算工具的发展
    在近代计算机技术的发展中,起奠基作用的是 19 世纪的英国数学家查尔斯·巴贝奇,他于 1822 年设计的差分机(见图 1.1(b)),是最早采用寄存器来存储数据的计算机,体现了早期程序设计思想的萌芽。1834年巴贝奇又提出了分析机(见图 1.1 (c))的设计。巴贝奇设计的分析机采用了三个具有现代意义的装置:使用齿轮式装置保存数据的寄存器;从寄存器中取出数据进行运算的装置,并且机器的乘法运算以累次加法来实现;控制操作顺序、选择所需处理的数据以及输出结果的装置。虽然受当时科学技术条件和机械制造工艺水平的限制未能最终实现,但分析机的结构组成和设计思想成为现代电子计算机的雏形,巴贝奇也因此被国际计算机界公认为“计算机之父”。
    2.现代计算机的发展
    在现代计算机科学的发展中,有两个最杰出的代表人物。一个是现代计算机科学的奠基人,英国科学家艾兰·图灵(AlanMathison Turing,1912 年~1954 年)。图灵在计算机科学方面的主要贡献有两个:一是建立了图灵机(TuringMachine,TM 机)的理论模型,对计算机的一般结构、可实现性和局限性都产生了深远的影响,奠定了可计算理论的基础。二是提出了定义机器智能的图灵测试(Turing Test),奠定了人工智能的理论基础。
    另一个是也被称为“计算机之父”的美籍匈牙利数学家冯·诺依曼(Johon Von Neumann,1903 年~1957 年)。他在参与研制 EDVAC(Electronic Discrete Variable AutomaticComputer,电子离散变量自动计算机)时,提出了“存储程序”的概念,并以此概念为基础确定了计算机硬件系统的基本结构。“存储程序”的工作原理也因此被称为冯·诺依曼原理。60 多年来,虽然现代的电子计算机系统从性能指标、运算速度、工作方式和应用领域等各个方面与早期的电子计算机有了极大的差别,但基本结构和工作原理并没有改变,仍属于冯·诺依曼式计算机。

    3.计算机的分代
    根据制造电子计算机所使用的电子器件的不同,通常将电子计算机的发展划分为电子管、晶体管、集成电路以及大规模集成电路等四个时代。
    ⑴ 第一代计算机(1946 年~1957 年)
    通常称为电子管计算机时代。电子管计算机因为体积庞大、笨重、耗电量大、运行速度慢、工作可靠性差、难以使用和维护,且造价极高,所以主要用于军事领域和科学研究工作中的科学计算。
    ⑵ 第二代计算机(1958 年~1964 年)
    通常称为晶体管计算机时代。晶体管计算机的体积减小、重量减轻、耗电量减少、可靠性增强、运算速度提高。应用范围已从军事和科研领域中单纯的科学计算扩展到了数据处理和事务处理
    ⑶ 第三代计算机(1964 年~1970 年)
    通常称为集成电路计算机时代。集成电路计算机的体积、重量、耗电量进一步减少,可靠性和运算速度进一步提高。开始应用于科学计算、数据处理、过程控制等多方面领域。软硬件都向通用化、标准化、系列化方向发展。
    ⑷ 第四代计算机(1971 年~至今)
    通常称为大规模、超大规模集成电路计算机时代。随着集成电路集成度的大幅度提高,计算机的体积、重量、功耗急剧下降,而运算速度、可靠性、存储容量等迅速提高。多媒体技术蓬勃兴起,将文字、声音、图形、图像各种不同的信息处理集于一身。计算机的应用已广泛地深入到人类社会生活的各个领域,特别是计算机技术与通信技术紧密结合构建的计算机网络,标志着计算机科学技术的发展已进入了以计算机网络为特征的新时代。
    ⑸ 未来新型计算机
    ① 光子计算机
    光子计算机是利用光信号进行数据运算、处理、传输和存储的新型计算机。在光子计算机中,以光子代替电子,用不同波长的光代表不同的数据,远胜于电子计算机中通过电子的“0”、“1”状态变化进行二进制运算。
    但尚难以进入实用阶段。
    ② 量子计算机
    量子计算机是根据量子力学原理设计,基于原子的量子效应构建的完全以量子比特为基础的计算机。它利用原子的多能态特性表示不同的数据,从而进行运算。
    ③ 生物计算机
    生物计算机即脱氧核糖核酸(DNA)分子计算机,主要由生物工程技术产生的蛋白质分子组成的生物芯片构成,通过控制 DNA 分子间的生化反应来完成运算。


    1.2.4 数值型数据在计算机中的表示
    ⑵ 浮点数
    小数点的位置在数中是可以变动的,这种数值表示法称为浮点表示法。目前的计算机大多采用的是浮点表示法。浮点表示法与我们日常生活中的科学计数法类似,它将任意一个二进制数表示成阶码和尾数两部分
    二进制数 N 的浮点表示法的一般形式为:N = ±M×2±E
    其中:E—是 N 的阶码 (Exponent,又称指数),E 前的正负号称为阶符;
    M—是 N 的尾数 (Mantissa),为数值的有效数字部分,M 前的正负号称为数符;2—是二进制数的基数。

    由上述表示形式可见,小数点的位置隐含在数符与尾数之间,即尾数总是一个小于 1的数。数符占一位,用于确定该浮点数的正负。阶码总为整数,用于确定小数点浮动的位数。阶符也占一位,用于确定小数点浮动的方向。若阶符为正,小数点向左浮动;若阶符为负,小数点则向右浮动。

    例如:在字长为 16 位的计算机中用浮点小数表示二进制数 (-110.011) 2。
    因为,(-110.011) 2=-0.110011×2 11,所以,(-110.011) 2在机器中的表示如下:(在
    16 位中,阶码用 4 位表示,尾数用 10 位表示,阶符和数符各占一位)

    3.原码、反码和补码
    反码加一为补码,可把减法当加法算。

     

    1.2.5 非数值型数据在计算机中的表示

    2.ASCII 字符编码
    在这 128 个字符中有 95 个编码,对应着使用计算机终端设备(如标准键盘)能够输入并且可以显示,也可以在打印机上打印出来的 95 个字符。另外,还有 33 个字符,对应的十进制编码值为 0~31 和 127。这些字符不能被显示或打印出来。它们被用作控制字符,以控制计算机某些外围设备的工作特性和某些计算机软件的运行情况。
    3.中文字符编码
    汉字的编码主要分为四类:汉字交换码、汉字机内码、汉字输入码和汉字字形码
    汉字的输入,计算机内部的处理,再到汉字输出,需要多种汉字编码的支持和相互转换才能完成。

     

    1.2.6 数据在计算机中的存储
    1.名词术语
    ⑴ 位(bit)
    位(bit)是二进制数字(binary digit)的缩写。
    ⑵ 位模式
    位模式指的是由若干位组成的一个序列。位模式的长度取决于要表示的数据的数量。
    ⑶ 字节(Byte)
    通常将长度为 8 的位模式称之为字节(Byte)。即一个字节由 8 位二进制数构成:1 Byte=8 bit。字节用大写字母 B 表示。字节是用于表示、衡量内存储器或者其他存储设备容量大小的基本单位,常用单位还有:KB、MB、GB、TB、PB、EB 等
    ⑷ 字(Word)与字长(Word Length)
    字指的是 CPU 进行数据处理和运算的单位,字长则是字的长度。字长取决于 CPU 中寄存器存储单元的长度,即 CPU 一次能够直接处理的二进制数据的位数。它的长度直接关系到计算机的计算精度、运算速度和功能的强弱,常用于衡量 CPU 的性能。一般情况下,字长越长,计算精度越高,处理能力越强。微处理器的字长已从早期的 4 位、8 位,发展到了
    16 位、32 位,目前已达到 64 位。
    ⑸ 内存地址(Memory Address)
    内存地址指的是内存储器中用于区分、识别各个存储单元的标识符。内存地址使用无符号的二进制整数表示。

    展开全文
  • Linux入门基础教程

    万次阅读 多人点赞 2018-05-29 17:52:25
    1. 1 Linux操作系统简介Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。...

    1. 1      Linux操作系统简介

    Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
    1991年的10月5日,Linux创始人林纳斯·托瓦兹(Linus Torvalds)在comp.os.minix新闻组上发布消息,正式向外宣布Linux内核的诞生,1994年3月,Linux 1.0发布,代码量17万行,当时是按照完全自由免费的协议发布,随后正式采用GPL(General Public License的缩写,是一份GNU通用公共授权)协议。
    Linux具有如下优点:
    Ø       稳定、免费或者花费少
    Ø       安全性高
    Ø       多任务,多用户
    Ø       耗资源少
    Ø       由于内核小,所以它可以支持多种电子产品,如:Android手机、PDA等。

    1. 2      Linux发展趋势

    随着IT产业的不断发展,用户对网站体验要求也越来越高,而目前主流网站后端承载系统都是Linux系统,目前Android手机全部基于Linux内核研发。企业大数据、云存储、虚拟化等先进技术都是基于Linux系统。
    2010年据有关权威部门统计:将来几年内我国软件行业的从业机会十分庞大,中国每年对软件人才的需求将达到50万人左右。而对于Linux 专业人才的就业前景,更是广阔;据悉在未来5-10年内 Linux 专业人才的需求将达到 120 万+!尤其是有经验的资深的Linux工程师目前非常的缺乏,薪资也是非常诱人,平均月薪都是15-20K,能力强的薪资更高。

    所以机会对每个人都是公平的,关键是我们每个人如何去行动,选择大于努力。
     

    1. 3      Linux系统安装

    在安装Linux系统之前,先来了解windows系统结构,windows系统一般是安装在C盘系统盘,同样Linux也有类似的系统盘(/根分区),Linux通常分区为(根分区/、swap分区),Linux系统以文件的存储方式,所有的文件都是存储在某个目录下的,类似于windows的文件夹。
    对于文件系统的属性来说,windows文件系统类型一般是ntfs、fat32等,而Linux文件系统类型则为ext2、ext3、ext4等(文件系统:是操作系统用于明确磁盘或分区上的文件的方法和数据结构,文件系统由三部分组成:与文件管理有关软件、被管理文件以及实施文件管理所需数据结构。)
    安装 Linux系统是每一个初学者的第一个门槛。在这个过程中间,最大的困惑莫过于给硬盘进行分区。虽然现在各种发行版本的 Linux 已经提供了友好的图形交互界面,但是很多人还是感觉无从下手。这其中的原因主要是不清楚 Linux 的分区规定。就好比如果我们了解了windows分区的规则,系统盘C、数据盘D等,就很好分区了。
    在 Linux 中规定,每一个硬盘设备最多只能有 4个主分区(其中包含扩展分区)构成,任何一个扩展分区都要占用一个主分区号码,也就是在一个硬盘中,主分区和扩展分区一共最多是 4 个。
    下面正式来安装Linux系统,安装系统前需要准备如下软件:
    ü       VMware workstation 10.0
    ü       CentOS 5.8 x86_i386.iso
    安装图解如下:
    第一步,新建虚拟机如下图:

    第二步,选择相关选项,如下图:

    第三步选择“稍后安装操作系统”,如下图:

    第四步,选择客户机操作系统类型如下图:

    第五步,设置虚拟机硬盘大小为20G,最低不能小于5G,如下图:

    第六步,虚拟机新建完成,如下图:

    第七步,修改虚拟机内存为512M,并添加ISO镜像,如下图:

    自此,虚拟机新建完成,接下来点击“启动此虚拟机”进行Linux系统安装,Linux系统安装图解如下:
    第一步,进入安装界面,直接按Enter回车键即可。

    第二步,光盘检测,选择SKIP跳过。


    第三步,选择安装过程中的语言,初学者可以选择“简体中文”。

    第四步,选择初始化整个硬盘,清除所有数据。

    第五步,选择分区方式为“自定义分区“。


    第五步,点击“新建“-首先创建一个swap交换分区,大小为物理内存的2倍(1024M)。

    第六步,继续创建分区,选择“新建“,然后创建根分区/,如下图选择,大小为剩余所有空间即可。


    第七步,默认点击下一步,同时默认DHCP配置,时钟选择上海,去掉UTC勾,点击下一步。



    第八步,设置root密码,至少六位,点击下一步。

    第九步,系统安装包选择,这里选择“现在定制“。

    第十步,系统安装包选择,左侧选择“开发“----右侧选择”开发工具“和“开发库”,语言选择“支持中文“,其他一概不选择。


    安装完毕会提示“reboot“,直接回车即可。

    1. 4      Linux学习技巧

    初学者可以自己安装虚拟机,然后把linux常用命令例如cd、ls、chmod、useradd、vi等等多练习几十遍,把自己敲打命令的熟练程度提升上来。
    然后根据文档搭建Linux下常见的各种服务(DHCP、SAMBA、DNS、Apache、Mysql等),遇到问题后可以在google搜索,搜索的时候多看几篇文章,综合最好的文章来解决问题。
    能够熟练的搭建服务后,理解每个服务的完整配置和优化,可以拓展思维。例如LAMP,我们一般是把所有服务放在一台机器上,如果分开多台该如何部署呢?等等。
    平时多积累shell编程,可以在网上查找前辈们写的非常好的shell,自己下载下来多练习几遍,从中吸取,不断提高。
    建立一个自己的学习博客,把平时工作学习中的知识都记录在里面,这样也可以供别人来参考同时也能提高自己的编写文档及方案的能力。
    通过以上学习能够满足企业的一般应有,需要达到资深级别,还需要深入学习集群架构、负载均衡、自动化运维、运维开发等知识。最后还是一句话:多练习才是硬道理!实践出真知!

    1.   Linux系统篇

    2.1            Linux系统管理

    通过前两章的学习,我们已经能够独立安装Linux系统,已经掌握了Linux学习的技巧,那接下来,我们将系统的来了解Linux系统各目录、权限及常用命令的使用。

    2.1. 1         Linux目录初识

    通过前面的学习,我们已经能够独立安装完一个linux系统,那接下来我们来熟悉一下Linux系统里面的各个目录文件夹的大致功能:
    主要的目录树的有/、/root、/home、/usr、/bin等目录。下面是一个典型的linux目录结构如下: (附图表)

    / 根目录 
    /bin 存放必要的命令 
    /boot 存放内核以及启动所需的文件
    /dev 存放设备文件 
    /etc 存放系统配置文件 
    /home 普通用户的宿主目录,用户数据存放在其主目录中 
    /lib 存放必要的运行库 
    /mnt 存放临时的映射文件系统,通常用来挂载使用。
     /proc 存放存储进程和系统信息 
    /root 超级用户的主目录 
    /sbin 存放系统管理程序 
    /tmp 存放临时文件
    /usr 存放应用程序,命令程序文件、程序库、手册和其它文档。 
    /var 系统默认日志存放目录

    2.1. 2         Linux必备命令

    默认进入系统,我们会看到这样的字符: [root@localhost ~]#,其中#代表当前是root用户登录,如果是$表示当前为普通用户。
    我们了解linux由很多目录文件构成,那我们来学习第一个Linux命令:
    cd命令, cd  /home  ;解析:进入/home目录
    cd /root 进入/root目录 ;cd ../返回上一级目录;cd  ./当前目录;(.和..可以理解为相对路径;例如cd /hom/test ,cd加完整的路径,可以理解为绝对路径)
    接下来继续学习更多的命令:
       ls  ./ 查看当前目录所有的文件和目录。
    ls  -a 查看所有的文件,包括隐藏文件,以.开头的文件。
     
    pwd显示当前所在的目录。
    mkdir创建目录,用法mkdir  test ,命令后接目录的名称。
    rmdir 删除空目录
    rm 删除文件或者目录,用法 rm –rf  test.txt (-r表示递归,-f表示强制)。
    cp 拷贝文件,用法,cp  old.txt  /tmp/new.txt ,常用来备份;如果拷贝目录
    需要加 –r参数。
     
    mv 重命名或者移动文件或者目录,用法, mv old.txt new.txt
    touch 创建文件,用法,touch test.txt,如果文件存在,则表示修改当前文件时间。
    Useradd创建用户,用法 useradd wugk ,userdel删除用户。
    Groupadd创建组,用法 groupadd wugk1 ,groupdel删除组。
     
    find查找文件或目录,用法 find  /home  -name  “test.txt”,命令格式为:
    find 后接查找的目录,-name指定需要查找的文件名称,名称可以使用*表示所有。
    find  /home  -name  “*.txt” ;查找/home目录下,所有以.txt结尾的文件或者目录。
    vi 修改某个文件,vi有三种模式:
    命令行模式、文本输入模式、末行模式。
    默认vi打开一个文件,首先是命令行模式,然后按i进入文本输入模式,可以在文件里写入字符等等信息。
    写完后,按esc进入命令模式,然后输入:进入末行模式,例如输入:wq表示保存退出。
    如果想直接退出,不保存,可以执行:q!, q!叹号表示强制退出。
    cat 查看文件内容,用法 cat test.txt 可以看到test.txt内容
    more 查看文件内容,分页查看,cat是全部查看,如果篇幅很多,只能看到最后的篇幅。可以使用cat和more同时使用,例如: cat  test.txt |more 分页显示text内容,|符号是管道符,用于把|前的输出作为后面命令的输入。
    echo 回显,用法 echo ok,会显示ok,输入什么就打印什么。
    echo  ok  > test.txt ;把ok字符覆盖test.txt内容,>表示追加并覆盖的意思。
    >>两个大于符号,表示追加,echo ok >> test.txt,表示向test.txt文件追加OK字符,不覆盖原文件里的内容。
    初学者常见的命令就如上所示,当然还有很多深入的命令需要学习,后面的课程会讲解。

    2.1. 3         Linux用户权限管理

    在Linux操作系统中,root的权限是最高的,相当于windows的administrator,拥有最高权限,能执行任何命令和操作。在系统中,通过UID来区分用户的权限级别,UID等于0,表示此用户具有最高权限,也就是管理员。其他的用户UID依次增加,通过/etc/passwd用户密码文件可以查看到每个用户的独立的UID。
    每一个文件或者目录的权限,都包含一个用户权限、一个组的权限、其他人权限,例如下:
    标红第一个root表示该文件所有者是root用户,第二个root代表该文件的所属的组为root组,其他用户这里默认不标出。
     [root@node1 ~]# ls -l monitor_log.sh
    -rw-r--r-- 1 root root 91 May  7 20:21 monitor_log.sh
    [root@node1 ~]#
    如果我们想改变某个文件的所有者或者所属的组,可以使用命令chown
    chown  –R  test:test  monitor_log.sh即可。
    每个Linux文件具有四种访问权限:可读(r)、可写(w)、可执行(x)和无权限(-)。
    利用ls -l命令可以看到某个文件或目录的权限,它以显示数据的第一个字段为
     准。第一个字段由10个字符组成,如下:
        [root@node1 ~]# ls -l monitor_log.sh
    -rw-r--r-- 1 root root 91 May  7 20:21 monitor_log.sh
    [root@node1 ~]#
        第一位表示文件类型,-表示文件,d表示目录;后面每三位为一组。
       第一组:2-4位表示文件所有者的权限,即用户user权限,简称u
       第二组:5-7位表示文件所有者所属组成员的权限,group权限,简称g
       第三组:8-10位表示所有者所属组之外的用户的权限,other权限,简称o
    从上面这个文件,我们可以看出,monito_log.sh文件对应的权限为:
    root用户具有读和写的权限,root组具有读的权限,其他人具有读的权限。
    为了能更简单快捷的使用和熟悉权限,rwx权限可以用数字来表示,分别表示为r(4)、w(2)、x(1)。
    Monitor_log.sh权限可以表示为:644
    如果给某个文件授权,命令为chmod:chmod 777 monitor_log.sh

    2.1. 4         Linux网络配置管理

    熟悉了常用的命令和Linux权限,那接下来如何让所在的Linux系统上网呢?管理linux服务器网络有哪些命令呢?
       Linux服务器默认网卡配置文件在/etc/sysconfig/network-scripts/下,命名的名称一般为:ifcfg-eth0 ifcfg-eth1 ,eth0表示第一块网卡,eth1表示第二块网卡,依次类推。一般DELL R720标配有4块千兆网卡。
       修改网卡的IP,可以使用命令: vi /etc/sysconfig/network-scripts/ifcfg-eth0 如果是DHCP获取的IP,默认配置如下:
    # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
    DEVICE=eth0
    BOOTPROTO=dhcp
    HWADDR=00:0c:29:52:c7:4e
    ONBOOT=yes
    TYPE=Ethernet
    如果是静态配置的IP,ifcfg-eth0网卡配置内容如下:
    # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
    DEVICE=eth0
    BOOTPROTO=static
    HWADDR=00:0c:29:52:c7:4e
    ONBOOT=yes
    TYPE=Ethernet
    IPADDR=192.168.33.10
    NETMASK=255.255.255.0
    GATEWAY=192.168.33.1
    网卡参数详解如下:
    DEVICE=eth0   #物理设备名
    ONBOOT=yes   # [yes|no](重启网卡是否激活设备)
    BOOTPROTO=static #[none|static|bootp|dhcp](不使用协议|静态分配|BOOTP协议|DHCP协议)

    TYPE=Ethernet  #网卡类型

    IPADDR=192.168.33.10 #IP 地址
    NETMASK=255.255.255.0 #子网掩码
    GATEWAY=192.168.33.1 #网关地址
    网卡配置完毕,重启网卡,命令: /etc/init.d/network restart 即可。
    查看ip命令:ifconfig 查看当前服务器所有网卡的IP,可以单独指定,ifconfig eth0 查看eth0的IP地址。
    网卡配置完毕,如果来配置DNS,首先要知道DNS配置在哪个目录文件下,vi  /etc/resolv.conf 文件:
    在该文件里面添加如下两条:
    nameserver 202.106.0.20
    nameserver 8.8.8.8
    从上到下,分别表示主DNS,备DNS。配置完毕后,不需要重启网卡,DNS立即生效。
    可以ping www.baidu.com 看看效果:

    IP配置完毕后,我们可以通过远程工具来连接Linux服务器,常见的Linux远程连接工具有:putty、secureCRT(主流)、xshell、xmanger等工具。
    下载安装secureCRT,打开工具,然后如图配置:
    点击左上角quick connect快速连接,弹出界面,然后输入IP,用户名,端口默认是22,然后点击下方的connect连接,会提示输入密码,输入即可。

    弹出输入密码框:

    进入远程界面,与服务器真实登录一样,然后可以执行命令:

    通过这几章的学习,我们已经熟练了Linux常用命令的操作,权限网络、网络配置、远程连接等知识,那接下来我们还能做什么呢?我们已经差不多入门了,接下来就是更进一步的服务配置,Linux系统到底用来做什么呢?接下来的章节将跟大家一起来学习。  
    Linux系统的应用,我们最开始介绍的时候简单介绍过,目前大中型企业都用它来承载web网站、数据库、虚拟化平台等,那接下来我们将在Linux系统安装各种服务和软件来实现Linux真正的价值。

    2.1. 5         Linux软件包管理必备命令

    2.   Linux服务篇

    3.1            Linux服务部署

    3.1. 1         构建NTP时间服务器

    NTP服务器是用于局域网服务器时间同步使用的,可以保证局域网所有的服务器与时间服务器的时间保持一致,某些应用对时间实时性要求高的必须统一时间。
    互联网的时间服务器也有很多,例如ntpdate ntp.fudan.edu.cn 复旦大学的NTP免费提供互联网时间同步。
    NTP服务器监听端口为UDP的123,那就需要在本地防火墙开启运行客户端访问123端口,vi /etc/sysconfig/iptables添加如下规则:
    -A INPUT -m state --state NEW -m udp -p udp --dport 123 -j ACCEPT
    NTP时间服务器配置:
    yum install ntp ntpdate -y 即可!
    修改ntp.conf配置文件
    cp  /etp/ntp.conf /etc/ntp.conf.bak
    vi /etc/ntp.conf 只修改如下两行,把#号去掉即可!
    server 127.127.1.0     # local clock
    fudge  127.127.1.0 stratum 10
    以守护进程启动ntpd
    /etc/init.d/ntpd start 即可
    (注意*: ntpd启动后,客户机要等几分钟再与其进行时间同步,否则会提示“no server suitable for synchronization found”错误。)
    配置时间同步客户机
    crontab -e
    增加一行,在每天的6点10分与时间同步服务器进行同步
    10 06 * * * /usr/sbin/ntpdate ntp-server的ip >>/usr/local/logs/crontab/ntpdate.log
    备注:如果客户机没有ntpdate,可以yum –y install ntp 即可!
    以下是ntp服务器配置文件内容(局域网NTP,如果需要跟外网同步,添加外网server即可)
    driftfile /var/lib/ntp/drift
    restrict default kod nomodify notrap nopeer noquery
    restrict -6 default kod nomodify notrap nopeer noquery
    restrict 127.0.0.1
    restrict -6 ::1
    server  127.127.1.0     # local clock
    fudge   127.127.1.0 stratum 10
    includefile /etc/ntp/crypto/pw
    keys /etc/ntp/keys
    下面是参数详解:

    restrict default ignore# 关闭所有的 NTP 要求封包
    restrict 127.0.0.1# 开启内部递归网络接口 lo
    restrict 192.168.0.0 mask 255.255.255.0 nomodify#在内部子网里面的客户端可以进行网络校时,但不能修改NTP服务器的时间参数。
    server 198.123.30.132#198.123.30.132作为上级时间服务器参考
    restrict 198.123.30.132#开放server 访问我们ntp服务的权限
    driftfile /var/lib/ntp/drift在与上级时间服务器联系时所花费的时间,记录在driftfile参数后面的文件内
    broadcastdelay 0.008#广播延迟时间

     
    自此NTP服务搭建完毕,然后在所有客户端crontab里面添加如下语句:
    0  0   *  *  * /usr/sbin/ntpdate  10.0.0.155 >>/data/logs/ntp.log 2>&1

    3.1. 2         构建DHCP服务器

    DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作,主要用途:给内部网络或网络服务供应商自动分配IP地址,DHCP有3个端口,其中UDP67和UDP68为正常的DHCP服务端口,分别作为DHCP Server和DHCP Client的服务端口。
    DHCP可以部署在服务器、交换机或者服务器,可以控制一段IP地址范围,客户机登录服务器时就可以自动获得DHCP服务器分配的IP地址和子网掩码。其中DHCP所在服务器的需要安装TCP/IP协议,需要设置静态IP地址、子网掩码、默认网关。
    正式安装DHCP服务:
    Yum  install  dhcp dhcp-devel –y 即可,然后修改DHCP /etc/dhcpd.conf配置文件内容如下:
    ddns-update-style interim;
    ignore client-updates;
    next-server  192.168.0.79;
    filename "pxelinux.0";
    allow booting;
    allow bootp; 
    subnet 192.168.0.0 netmask 255.255.255.0 {
    # --- default gateway
    option routers          192.168.0.1;
    option subnet-mask      255.255.252.0;
    #   option nis-domain       "domain.org";
    #  option domain-name "192.168.0.10";
    #   option domain-name-servers  192.168.0.11;
    #   option ntp-servers      192.168.1.1;
    #   option netbios-name-servers  192.168.1.1;
    # --- Selects point-to-point node (default is hybrid). Don't change this unless
    # -- you understand Netbios very well
    #   option netbios-node-type 2;
    range  dynamic-bootp  192.168.0.100 192.168.0.200;
    host ns {
    hardware ethernet  00:1a:a0:2b:38:81;
    fixed-address 192.168.0.101;}
    }
    参数解析如下:

    选    项解    释
      
    ddns-update-style interim|ad-hoc|none 参数用来设置DHCP服务器与DNS服务器的动态信息更新模式:interim为DNS互动更新模式,ad-hoc为特殊DNS更新模式,none为不支持动态更新模式。
    next-server ippxeclient远程安装系统,指定tftp server 地址
    filename开始启动文件的名称,应用于无盘安装,可以是tftp的相对或绝对路径  
    ignore client-updates为忽略客户端更新
    subnet-mask为客户端设定子网掩码
    option routers为客户端指定网关地址
    domain-name为客户端指明DNS名字
    domain-name-servers为客户端指明DNS服务器的IP地址
    host-name为客户端指定主机名称
    broadcast-address为客户端设定广播地址
    ntp-server为客户端设定网络时间服务器的IP地址
    time-offset为客户端设定格林威治时间的偏移时间,单位是秒

    注意如上配置,需要修改成对应服务器网段IP,然后重启DHCP服务,/etc/init.d/dhcpd restart即可。
    客户端要从这个DHCP服务器获取IP,需要做简单的设置,如果是linux需要把/etc/sysconfig/network-scritps/ifcfg-eth0里BOOTPROTO相改成dhcp即可,windows机器的话,需要修改本地连接,把它设置成自动获取IP即可。
    BOOTPROTO=dhcp

    3.1. 3         搭建Samba服务器

    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成,
    SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
    SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
    安装SAMBA服务器:
    Yum install  samba –y
    安装完毕,然后做如下设置(过滤#号行、空行如下命令)
    cp /etc/samba/smb.conf /etc/samba/smb.conf.bak ;egrep -v "#|^$" /etc/samba/smb.conf.bak |grep -v "^;" >/etc/samba/smb.conf
    查看smb.conf配置文件如下:
    [global]
            workgroup = MYGROUP
            server string = Samba Server Version %v
            security = share
            passdb backend = tdbsam
            load printers = yes
            cups options = raw
     
    [temp]
         comment=Temporary file space
         path=/tmp
         read only=no
         public=yes
     
    [data]
         comment=Temporary file space
         path=/data
         read only=no
         public=yes
    根据需求修改之后重启服务:
    [root@node1 ~]# /etc/init.d/smb restart
    Shutting down SMB services:                                [FAILED]
    Shutting down NMB services:                                [FAILED]
    Starting SMB services:                                     [  OK  ]
    Starting NMB services:                                     [  OK  ]
     

    workgroup =WORKGROUP 设Samba Server 所要加入的工作组或者域。
    server string = Samba Server Version %vSamba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。
     
     
     
     
    security = user
    1.share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
    2. user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
    3. server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。
    4. domain:域安全级别,使用主域控制器(PDC)来完成认证。
    comment = test是对该共享的描述,可以是任意字符串。
    path = /home/test共享目录路径
    browseable= yes/no 用来指定该共享是否可以浏览。
    writable = yes/nowritable用来指定该共享路径是否可写。
    available = yes/noavailable用来指定该共享资源是否可用
    admin users = admin该共享的管理者
    valid users = test允许访问该共享的用户
    invalid users = test禁止访问该共享的用户
    write list = test允许写入该共享的用户
    public = yes/nopublic用来指定该共享是否允许guest账户访问。

     
    在浏览器里面访问方式为:\\192.168.33.10 (SMB文件共享服务端IP),如何没有权限访问,需要注意防火墙和selinux设置,可以使用如下命令关闭:
    /etc/init.d/iptables stop ;sed  –i   ‘/SELINUX/s/enforcing/disabled’  /etc/sysconfig/selinux

    3.1. 4         搭建NFS服务器

    NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。
    NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的。
    NFS应用场景,常用于高可用文件共享,多台服务器共享同样的数据,可扩展性比较差,本身高可用方案不完善,取而代之的数据量比较大的可以采用MFS、TFS、HDFS等等分布式文件系统。
    NFS安装配置:
    Yum  install nfs*  portmap  -y 如下图,安装成功即可。

    NFS安装完毕,需要创建共享目录,共享目录在/etc/exports文件里面配置,可配置参数如下:
    /data/      192.168.33.11(rw,sync,no_hide,no_all_squash)
    在配置文件中添加如上一行,然后重启Portmap,NFS服务即可,/etc/init.d/portmap restart ;/etc/init.d/nfs restart
    第一列/data/表示需要共享的目录。
    IP表示允许哪个客户端访问。
    IP后括号里的设置表示对该共享文件的权限。
    ro                      只读访问
    rw                      读写访问
    sync                    所有数据在请求时写入共享
    hide                    在NFS共享目录中不共享其子目录
    no_hide                 共享NFS目录的子目录
    all_squash              共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
    no_all_squash           保留共享文件的UID和GID(默认)
    root_squash             root用户的所有请求映射成如anonymous用户一样的权限(默认)
    no_root_squas           root用户具有根目录的完全管理访问权限


    Linux客户端,如何想使用这个NFS文件系统,需要在客户端挂载,挂载命令为:
    Mount –t  nfs  192.168.33.10:/data/    /mnt 即可。如果有报错根据错误信息排查。常见问题有rpc服务没有启动、防火墙没关闭、selinux未关闭等问题。(拓展* 有兴趣的童鞋可以研究MFS(分布式文件系统)。)

    3.1. 5         搭建FTP服务器

    FTP 是文件传输协议,正是由于这种协议使得主机间可以共享文件。 FTP 使用TCP 生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP 连接用于数据传输。
    vsftpd是一款在Linux发行版中最主流的FTP服务器程序;特点是小巧轻快,安全易用;能让其自身特点得发发挥和掌握。
    目前在开源操作系统中常用的FTP服务器程序主要有vsftpd、ProFTPD、PureFTPd和wuftpd等,这么多FTP服务器程序,关键在于自己熟练哪一个就使用哪一个。今天我们来研究一下VSFTPD简单安装及使用。安装命令: yum  install vsftpd*  -y

    修改配置文件如下:
    #vsftpd config 2014 by wugk
    anonymous_enable=NO    //禁止匿名用户访问
    local_enable=YES  //允许本地用户登录FTP
    write_enable=YES   //运行用户在FTP目录有写入的权限
    local_umask=022   //设置本地用户的文件生成掩码为022,默认是077
    dirmessage_enable=YES //激活目录信息,当远程用户更改目录时,将出现提示信息
    xferlog_enable=YES   //启用上传和下载日志功能
    connect_from_port_20=YES  //启用FTP数据端口的连接请求
    xferlog_std_format=YES  //是否使用标准的ftpd xferlog日志文件格式
    listen=YES  //使vsftpd处于独立启动监听端口模式
    pam_service_name=vsftpd //设置PAM认证服务配置文件名称,文件存放在/etc/pam.d/目录
    userlist_enable=YES   //用户列表中的用户是否允许登录FTP服务器,默认是不允许
    tcp_wrappers=YES    //使用tcp_wrqppers作为主机访问控制方式
     
    1)    第一种方法就是使用系统用户登录FTP,但是也是比较危险的,先测试系统用户登录FTP,在Linux系统上创建useradd  test 用户,并为其设置名,然后在xp客户端打开我的电脑资源里面访问 ftp://192.168.33.10,输入用户名和密码即可访问,进行创建和删除操作。
    2)    第二种方法比较安全,配置相对复杂一点,就是使用vsftpd虚拟用户登录FTP服务器进行常见的操作。
    Ø       首先安装FTP 虚拟用户需要用到的软件及认证模块
    yum install pam* db4* --skip-broken –y
    创建并生成vsftpd数据库文件vi /etc/vsftpd/ftpusers.txt,内容如下:
    第一行为FTP虚拟用户,登录用户名,第二行为密码,第三行为用户名,依次类推。
    wugk
    1
    wugk1
    1
    Ø       生成数据库文件命令:
    db_load -T -t hash -f /etc/vsftpd/ftpusers.txt /etc/vsftpd/vsftpd_login.db
    chmod 700 /etc/vsftpd/vsftpd_login.db
    Ø       配置PAM验证文件:
    在配置文件vi /etc/pam.d/vsftpd 行首加入如下两行认证语句:(如果是32位,lib64需改成lib,如果RedHat,加入的语句不一样,需注意)
    auth    sufficient      /lib64/security/pam_userdb.so     db=/etc/vsftpd/vsftpd_login
    account sufficient      /lib64/security/pam_userdb.so      db=/etc/vsftpd/vsftpd_login
    Ø       创建vsftpd映射本地用户:
    所有的FTP虚拟用户需要使用一个系统用户,这个系统用户不需要密码,也不需要登录。主要用来做虚拟用户映射使用。
    useradd  –d /home/ftpuser –s /sbin/nologin ftpuser
    Ø       修改完整版配置文件内容如下:
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_file=/var/log/vsftpd.log
    xferlog_std_format=YES
    ascii_upload_enable=YES
    ascii_download_enable=YES
    listen=YES
     
    guest_enable=YES
    guest_username=ftpuser
    pam_service_name=vsftpd
    user_config_dir=/etc/vsftpd/vsftpd_user_conf
    virtual_use_local_privs=YES
     
       保存重启,/etc/init.d/vsftpd restart 即可使用虚拟用户登录,这时候所有的虚拟用户共同使用/home/ftpuser目录上传下载,如果想使用自己独立的目录,可以在/etc/vsftpd/vsftpd_user_conf目录创建各自的配置文件,如给wugk创建独立的配置文件:
    vi /etc/vsftpd/vsftpd_user_conf/wugk ,内容如下,建立自己的FTP目录。
    local_root=/home/ftpsite/wugk
    write_enable=YES
    anon_world_readable_only=YES
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
     重启,使用客户端登录FTP,测试即可。关于FTP讲解就到此,windows还可以使用Server-U来搭建FTP服务器端,有兴趣的童鞋可以研究一下。
    Ø       FTP主被动模式
    FTP主动模式:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的port 21命令端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
    FTP被动模式:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的port 21命令端口。然后客户端开始监听端口N+1,同时客户端提交 PASV命令。服务器会开启一个任意的非特权端口(P >1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

    展开全文
  • .NET 基础教程

    2020-07-25 23:30:28
    .NET 基础教程
  • SQL最全基础教程(有本事别看啊!)

    万次阅读 多人点赞 2018-09-21 17:09:48
    SQL基础教程 一、SQL简介 1:什么是SQL? A:SQL指结构化查询语句 B:SQL使我们有能力访问数据库 C:SQL是一种ANSI(美国国家标准化组织)的标准计算机语言 2:SQL能做什么? *面向数据库执行查询 *从数据库中取出...

    SQL基础教程

    一、SQL简介

    1:什么是SQL?

    A:SQL指结构化查询语句    B:SQL使我们有能力访问数据库     C:SQL是一种ANSI(美国国家标准化组织)的标准计算机语言

    2:SQL能做什么?

    *面向数据库执行查询   *从数据库中取出数据   *向数据库插入新的记录   

    *更新数据库中数据   *从数据库删除记录   *创建数据库   *创建表   

    *创建存储过程   *创建视图   *设置表、存储过程和视图的权限

    3:RDBMS

    RDBMS是指关系型数据库管理系统

    RDBMS是SQL的基础,同样也是所有现代数据库系统的基础,如MS SQL Server、IBM DB2、Oracle、MySQL以及Microsoft Access

    RDBMS中的数据存储在被称为表的数据库对象中

    表是相关的数据项的集合,他由列和行组成。

    二、SQL语法

    注意:SQL对大小写不敏感!!!

    1:SQL语句后面的分号

    某些数据库系统要求在每条SQL命令的末端使用分号。

    分号是在数据库系统中分隔每条SQL语句的标准方法,这样就可以在服务器的相同请求中执行一条以上的语句。

    如果使用的是MS Access和SQL Server 2000,则不必在每条SQL语句之后使用分号,不过某些数据库要求必须使用分号。

    2:SQL DML和DDL

    可以把SQL分为两个部分:数据操作语言(DML)和数据库定义语言(DDL)

    SQL(结构化查询语句)适用于执行查询的语法。但是SQL语言也包含用于更新、插入和删除记录的语法。查询和更新构成了SQL的DML部分:select、update、delete、insert into 。 数据库定义语言(DDL)部分使我们有能力创建或删除表格,我们也可以定义索引(键),规定表之间的连接,以及事假表间的约束:

    Create database、alert database、create table、alert table、drop table、create index、drop index

    三、Select

    User表里面的数据如下

     

    查询user表里面的user_name字段和user_age字段的所有数据

    Select user_name,user_age from user

     

    查询user表中所有的字段数据,用 * 表示列的名称

    Select * from user

     

    四、Distinct

    Distinct选取所有的值的时候不会出现重复的数据

    用普通的查询,查询所有

    Select * from user

     

    Select distinct user_name,user_age from user

    注意:不能有user_id,因为两个Mary的user_id不一样,加上就不算相同数据

     

    五、Where

    1:查询user_id等于1 的数据

    Select * from user where user_id = 1

     

    2:查询user_age大于等于12的数据

    Select * from user where user_age >=12

     

    3:查询user_age不等于12的数据

    Select * from user where user_age <> 12

     

    六、AND 和 OR

    And和or在where子语句中把两个或多个条件结合起来。如果需要两个条件都成立就是用and如果只需要其中一个条件成立就使用or

    Select * from user where user_name = 'mary' and user_age = 12

    需要注意的是SQL使用单引号来环绕文本值,如果是数值则不需要引号

     

    Select * from user where user_name='mary' or user_age =13

     

    结合and和or使用圆括号来组成复杂的表达式

    Select * from user where (user_name = 'mary' and user_age = 12) or(user_age =13)

     

    七、Order by

    1:对指定列进行升序排列

    Select * from user order by user_name

     

    2:按照user_id逆序排列

    Select * from user order by user_id DESC

     

    2:按照升序排列user_id逆序排列user_age

    SELECT * FROM user order by user_id ASC,user_age DESC

     

    3:按照升序排列user_id逆序排列user_age

    SELECT * FROM user order by user_age DESC,user_id ASC

     

    注意:前面的条件优先级更高!!

    八、Insert

    User表

     

    插入一行数据 user_id为2 user_name为tom,user_age为12

    注意:如果每一项都有插入的话就不需要在前面列出列名!!

    Insert into user values(2,'tom',12)

    新插入一行数据,只要求user_name为eva

    Insert into user(user_name) values('eva')

    注意:因为ID设置为自增,所以user_id不为null

     

    九、Update

    修改user_id为6的数据user_age为14

    Update user set user_age=14 where user_id=6

     

    修改user_id为1的数据user_name为ann,user_age为11

    Update user set user_name='ann',user_age=11 where user_id=1

    十、Delete

    User表中的所有数据信息如下

     

    删除user_age为12的数据

    Delete from user where user_age=12

     

    删除表中的所有数据

    Delete from user

     

    第二章 SQL高级教程

    一、Top

    Top子句用于返回要返回的记录的数目,但并不是所有的数据库都支持top子句

    1:SQL Server

    Select top 5 * from user

    2:MySQL

    Select * from user limit 5

    3:Oracle

    Select * from user where ROWNUM <= 5

    二、Like

    User表的初始数据如下

    1:找出以li开头的数据

    Select * from user where user_name like 'li%'

    2:找出以ry结尾的数据

    Select * from user where user_name like '%ry'

     

    3:找出含有a的数据

    Select * from user where user_name like '%a%'

     

    4:找出第二个字母是a第四个字母是y的数据

    Select * from user where user_name like '_a_y'

     

    三、通配符

    在搜索数据库中的数据的时候SQL通配符可以替代一个或多个字符。SQL通配符必须与like运算符一起使用

    1: _ 替代一个字符

    找出第二个字母是a第四个字母是y的数据

    Select * from user where user_name like '_a_y'

     

    2: % 替代一个或多个字符

    找出以ry结尾的数据

    Select * from user where user_name like '%ry'

     

    3: [] 字符列中的任意一个单字符

    找出以a或者l开头的数据

    Select * from user where user_name like '[al]%'

    找出不是a或者l开头的数据

    Select * from user where user_name like '[!al]%'

    四、In

    只要数据满足in里面的一个条件就可以了

    找到user_age是12或者13的数据

    Select * from user where user_age in (12,13)

     

    找到user_name是Harry和Mary的数据

    Select * from user where user_name IN ('mary','harry')

     

    五、Between

    选取两个值之间的数据

    查询年龄在12和14之间的数据

    Select * from user where user_age between 12 and 14

     

    查询字母在Alice和John之间的数据

    Select * from user where user_name between 'alice' AND'john'

     

    六、Aliases

    指定别名

    假设我们有两个表分别是user和Room 。我们分别指定他们为u和r。

    1:不使用别名

    Select room.room_name,user.user_name,user.user_age from user ,room  Where user.user_age=12 and room.room_id = 1

     

    2:使用别名

    使用别名的时候直接将别名跟在后面,不使用as也可以

    Select r.room_name,u.user_name,u.user_age from user as u,room as r  Where u.user_age=12 and r.room_id = 1

     

    七、Join

    数据库中的表可以通过键将彼此联系起来,主键是一个列,在这个列中的每一行的值都是唯一的,在表中,每个主键的值都是唯一的,这样就可以在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。

    以下为表user和表Room的数据

         

    1:引用两个表

    找出在Room of boy相关联的用户信息

    Select u.user_name,u.user_age,r.room_name from user as u,room as r 

    Where u.room_id = r.room_id and r.room_name='room of boy'

     

    2:使用关键字join来连接两张表

    Select u.user_name,u.user_age,r.room_name

    from user as u

    join room as r

    on u.room_id = r.room_id and r.room_name='room of boy'

     

    八、Inner join

    Inner join 与 join 用法一致

    Select u.user_name,u.user_age,r.room_name

    from user as u

    inner join room as r

    on u.room_id = r.room_id and r.room_name='room of boy'

     

    九、Left join

    注意:左连接以左边的表为主体,也就是说会列出左边的表中的所有的数据,无论它是否满足条件。

    1:user在左边

    Select u.user_name,u.user_age,r.room_name

    from user as u

    Left join room as r

    on u.room_id = r.room_id and r.room_name='room of boy'

     

    2:Room在左边

    Select u.user_name,u.user_age,r.room_name

    From room as r

    Left join user as u

    on u.room_id = r.room_id and r.room_name='room of boy'

     

    十、Right join

    注意:左连接以右边的表为主体,也就是说会列出左边的表中的所有的数据,无论它是否满足条件。

    1:Room在右边

    Select u.user_name,u.user_age,r.room_name

    from user as u

    Right join room as r

    on u.room_id = r.room_id and r.room_name='room of boy'

     

    2:user在右边

    Select u.user_name,u.user_age,r.room_name

    from  room as r

    Right join user as u

    on u.room_id = r.room_id and r.room_name='room of boy'

     

    十一、Full join

    1:user在左边

    Select * from user Full join room

     

    2:Room在左边

    Select * From room full join user

     

    注意:SQL错误码1054表示没有找到对应的字段名;错误码1064表示用户输入的SQL语句有语法错误

    十二、Union

    Union操作符用于合并两个或者多个SELECT语句的结果集

    请注意,UNION内部的select语句必须拥有相同数量的列。列也必须拥有相同的数据类型。同时,每条select语句中的列的顺序必须相同。

    下面是Room表和color表的数据

         

    Select room_name from room

    Union

    Select color_name from color

     

    默认的union选取不同的值,如果想要有相同的值出现就使用union all

    Select room_name from room

    Union all

    Select color_name from color

     

    十三、Create DB

    创建数据库mysqltest

    Create database mysqltest

     

    十四、Create table

    Create table sqltest(

    Id int,

    Name varchar(45),

    Age int,

    Salary float,

    Time Date,

    )

      

    十五、Constraints

    SQL约束,用于限制加入表的数据的类型

    常见约束:not noll、unique、primary key、foreign key、check、default

    十六、Not null

    Not null 约束强制列不接受NULL值。Not null 约束强制字段始终包含值,这意味着,如果不向字段添加值,就无法插入新的字段或者更新记录

    用法,在字段后面加上 not null

     

    十七、Unique

    Unique约束唯一标识数据库中的每一条记录。Primary key约束拥有自动的unique约束。需要注意的是,每个表里面可以拥有多个unique约束,但只能有一个primary key约束

    1:MySQL用法,unique(字段名)

     

    2:SQL Server 、 Oracle 、 MS Access在字段后面加

     

    3:命名约束使用constraint

     

    4:已经创建了表之后需要添加约束

    ALTER TABLE sqltest ADD UNIQUE(Age)

     

    5:给已经创建了的表添加约束并命名

    ALTER TABLE sqltest ADD constraint unique_name UNIQUE(Age,salary)

     

    6:撤销约束

    MySQL

    在没有给约束命名的情况下(上面的age约束)直接使用字段名就可以了

    ALTER TABLE sqltest DROP INDEX age

      删除后   

    在约束有名字的情况下,直接使用名字就可以了

    ALTER table sqltest  drop index unique_name

       删除后  

    SQL Server 、 Oracle 、 MS Access

    ALTER table 表名 drop constraint 约束名

     

    十八、Primary key

    Primary key约束唯一标识数据库表中的每一条记录,组件必须包含唯一的值。组件列不能包含NULL值。每个表都应该有一个主键,并且每一个表都只能有一个主键

    1:在MySQL中的用法

     

    2:在SQL Server 、 Oracle 和MS Access中的用法

     

    3:为已经创建成功的表创建primary key约束

    Alter table sqltest add primary key(id)

     

    4:为已经创建成功的表添加主键约束,以及为多个列定义主键约束

    Alter table sqltest add constraint pk_name primary key (id,name)

     

    5:在MySQL中撤销主键

    ALTER  TABLE sqltest DROP PRIMARY KEY

       删除后   

    6:在SQL Server、Oracle、MS Access中撤销主键

    Alter table 表名 drop constraint 主键名

    十九、Foreign key

    所谓的外键,即一个表的外键指向另一个表的主键

    User表

    Room表

    在user表里面room_id列指向Room表里面的id列。Room表里面的id列是主键,user表里面的room_id列是外键。外键约束用于预防破坏表之间的连接动作,外键约束也能防止非法数据插入外键列,因为他必须是他指向的那个表的值之一。

     

    二十、Check

    Check约束用于限制列中的值的范围。如果对单一的列定义check约束,那么改了只允许特定的值。如果对一个表定义check约束,那么此约束会在特定的列中对值进行限制。

     

    为已经创建成功的表添加check约束

    ALTER TABLE USER ADD CHECK (age>10)

    二十一、Default

    Default约束用于向列宗插入默认值。如果没有规定其他值,那么就会将默认值添加到所有的新纪录。

    用法:

     

    当表已经存在的时候,添加默认值

    ALTER TABLE sqltest ALTER NAME SET DEFAULT 'tom'

     

    撤销默认值

     

    二十二、Create index

    索引,你可以在表里面创建索引,一边更加快速高效地查询数据。用户无法看见索引,他们只能被用来加速搜索、查询。

    注意:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是索引本身也需要更新,因此,理想的做法是仅仅在常常被搜索的列上面创建索引。

    1:创建一个索引

    CREATE INDEX index_name ON color (color_id )

     

    2:创建一个独一无二的索引,即两行不能拥有相同的索引值。

    CREATE UNIQUE INDEX book_index ON book (book_id)

     

    3:如果索引不止一个列,你可以在括号中列出这些列的名称,用逗号隔开

    CREATE INDEX index_bank ON bank (bank_id,bank_name)

     

    二十三、Drop

    通过使用DROP语句,可以删掉索引、表和数据库

    1:删除索引

    Drop index index_name on color

     

    删除之后

     

    2:删除表

    DROP TABLE colorcopy

      删除之后   

    3:清空表

    TRUNCATE TABLE color

      删除之后  

    4:删除数据库

    DROP DATABASE mysqltest

     删除之后  

    二十四、Alert

     

    1:添加列

    Alter table user add salary float

     

    2:删除列

    Alter table user drop column room_id

     

    二十五、Increment

    定义主键自增

     

    二十六、View

    视图,一种基于SQL语句的结果集可视化表。视图包含行和列,就像一个真实的表。视图中的字段来自一个或多个数据库中的真实的表中的字段,我们可以向视图添加SQL函数、where以及join语句,我们提交数据,然后这些来自某个单一的表。需要注意的是,数据库中的结构和设计不会受到视图的函数、where或join语句的影响

    1:创建一个视图,字段来自user表和Room表

    CREATE VIEW view_test AS

    SELECT user.user_name,user.user_age,room.room_name

    FROM USER,room

    WHERE user.user_age>10

    2:查询视图

    Select * from view_test

     

    3:撤销视图

    DROP VIEW view_test

    二十七、Date

     

    二十八、Nulls

    默认的,表的列可以存放NULL值。如果表里面的某个列是可选的,那么我们可以在不想改列添加值的情况下插入记录或者更新记录,这意味着该字段以NULL值保存。注意,NULL和0是不等价的,不能进行比较。

     

    1:查询NULL值 

    select * from user where salary is null

     

    2:查询非NULL值 

    select * from user where salary  is not null

     

    二十九、数据类型

    MySQL主要有三种类型:文本、数字、日期

     

    三十、服务器 

     

    第三章 SQL函数

    一、SQL functions

    在SQL当中,基本的函数类型和种类有若干种,函数的基本类型是:

    合计函数(Aggregate function)和 Scalar函数

    Aggregate 函数,函数操作面向一系列的值,并返回一个单一的值。

    Scalar 函数,操作面向某个单一的值,并返回基于输入值的一个单一的值。

    二、Avg()

    求平均年龄

    Select avg(user_age) from user

     

    求大于平均年龄的用户

    Select * from user where user_age>(Select avg(user_age) from user)

     

    三、Count()

    返回列的值的数目(不包含NULL)

    注意,可以使用as来给count()取一个别名

     

    Select count(user_id) from user

     

    Select count(salary) from user

     

    返回值不同的有多少

    Select count(distinct user_name) from user

     

    查询所有列

    Select count(*) from user

     

    四、Max()

    返回最大值,NULL不包括在计算中

     

    Select max(price) as max_price from commodity

     

    五、Min()

    返回最小值,NULL不包括在计算中

     

    Select min(salary) poor_man from user

     

    六、Sum()

    返回该列值的总额

     

    Select sum(salary) from user

     

    七、Group By 

    用于结合合计函数,根据一个或多个列对结果集进行分组

     

    SELECT cname,SUM(price) FROM commodity GROUP BY cname

     

    八、Having

    在SQL中增加having子句的原因是where不能与合计函数一起使用。用法和where 一样

    SELECT cname,SUM(price) FROM commodity

    GROUP BY cname

    HAVING  SUM(price)>20

     

    九、Ucase()

    把函数字段的值转化为大写

     

    SELECT UCASE(user_name) FROM user

     

    十、Lcase()

    将函数字段转化为小写

     

    Select lcase(user_name) from user

     

    十一、Mid()

    从文本字段中提取字符

     

    Select mid(user_name,2,2) from user

     

    十二、Round()

    Round函数把数值字段舍入为指定的小数位数

     

    Select round(salary,2) from user

     

    十三、Now()

    返回当前时间

    SELECT NOW() FROM user

     

    示例:

    --查找emp表

    select * from emp;

    --查找emp表的sal

    select a.SAL from emp a;

    --查找emp表的ename

    select a.ename from emp a;

    --emp表的sal*10

    select a.SAL*10 from emp a;

    --emp表的sal的平均值

    select avg(a.sal) from emp a;

    --emp表的sal的总和

    select sum(a.sal) from emp a;

    --emp表的sal的max

    select max(a.sal) from emp a;

    --emp表的sal的min

    select min(a.sal) from emp a;

    --emp表中sal<1000的信息

    select * from emp where sal<1000;

    --ename中含有A的信息

    select ename  from emp where ename like'%A%';

    --emp中ename不含有A的信息

    select * from emp where ename not like'%A%';

     

     

    --查询系统时间

    select sysdate from dual;

    --计算薪资小于5000的员工的工资总和

    select sum(sal) from emp where sal<5000 ;

    --计算工资不高于平均工资的工资总和

    select sum(sal) from emp where sal<(select avg(sal) from emp);

    --计算工资小于4000的员工的平均工资

    select avg((select sum(sal) from emp where sal<4000)) from emp;

    --查询薪水低于100000的员工姓名和sal

    select ename,sal from emp where  sal<100000;

    --计算20号部门的员工的最高工资和最低工资

    select max(sal),min(sal) from emp where deptno=20;

    --查询工资大于1000,并且是20号部门的员工的全部信息

    select * from emp where sal>1000 and deptno=20;

    --求最高工资的员工的员工姓名和部门名称

    select ename,deptno,sal from emp where sal=(select max(sal) from emp);

    --将员工薪水小于5000且部门平均薪水大于1000的部门标号列出,按部门平均薪水降序排序

    select deptno from emp where sal<5000  group by deptno having avg(sal) >1000;

    select sal from emp order by sal desc;

    Order by *** desc

     

    --查找表emp

    select * from emp ;

     

    --根据用户名“Smiths”查找他所在的部门

    select deptno from emp where ename='SMITH';

     

    --查询每个部门的最高工资的人员名称

    select e.ename,e.deptno,e.sal from (select deptno as did ,max(sal) as m from emp group by deptno )  s,emp e,dept d where e.sal=s.m and s.did=e.deptno and d.deptno=e.deptno;

     

    --查询“Jones”之后第一个进入公司的人

    select * from emp where hiredate=(select min(hiredate) from emp where hiredate>(select hiredate from emp where ename='JONES')) ;

     

    --5.查找工资最高的部门名称和工资最低的部门名称及工资

    select d.dname,e.sal from emp e,dept d where e.deptno=d.deptno and sal=(select max(m) from (select deptno,max(sal) as m from emp e group by deptno) s)

    union

    select d.dname,e.sal from emp e,dept d where e.deptno=d.deptno and sal=(select min(m) from (select deptno,min(sal) as m from emp e group by deptno) s)

     

     

     

    --创建表

    create table student(

           StudentId number (6),--学号

           LoginPwd varchar(20),--密码

           StudentName varchar(50),--姓名

           Sex char(2),--性别

           Gradeld Number(6),--所在年级

           Phone number(15),--联系电话

           Address varchar2(255),--现住址

           BornDate Date,--出生日期

           Emile varchar2(50)--电子邮件

    );

    --添加数据

    insert into student values(1001,'123456','赵六','男',1507,120,'北京','23-5月-1995','@10422');

    insert into student values(1002,'123456','王五','女',1507,110,'北京','23-5月-1995','@10422');

    insert into student values(1003,'123456','张三','男',1507,120,'北京','23-5月-1995','@10422');

    insert into student values(1004,'123456','李四','女',1507,110,'北京','23-5月-1995','@10422');

    --提交

    commit;

    --查询此表

    select * from student;

    --根据条件修改

     update student set studentname='孙七',loginpwd='666666' where studentid=1001;

     select * from student;

    --根据条件删除

    delete from student where studentid=1002;

    select * from student;

    --增加字段

    ALTER TABLE 表名称 ADD(列名称 数据类型 [DEFAULT 默认值],列名称 数据类型 [DEFAULT 默认值],…)

    --删除此表

    drop table student;

    --B卷 创建表空间

    create tablespace mytestspace datafile 'e:week3.dbf' size 2M;

    --创建用户

    create user zhangsan identified by zhangsan default tablespace mytestspace

    temporary tablespace temp;

     

    --创建角色并授权

    create role fang;

    grant create table to fang;

    grant fang to zhangsan;

    grant dba to zhangsan;

     

    --创建表

    create table teacher (

    tid number primary key,

    tname varchar2(50),

    tdate date,

    address varchar2(100)

    );

    select * from teacher;

    --创建序列

    create sequence teachers_sequence minvalue 1 maxvalue 100 (最小值,最大值)cycle (循环)increment by 1(步长值) start with 1(从1开始);

    insert into teacher values(teachers_sequence.nextval,'小李','01-1月-1999','北京');

    insert into teacher values(teachers_sequence.nextval,'小张',to_date('1982-1-1','yyyy-mm-dd'),'北京');

    展开全文
  • 《Python基础教程》---值得读几遍的Python入门书

    万次阅读 多人点赞 2018-08-04 12:21:36
    《Python基础教程》看了三遍。第一遍囫囵吞枣、尝试写代码;第二遍重温,同步看《Python学习手册》、《Python Cookbook》,部分细节(如正则表达式)对照另两本书一起看,敲代码;第三遍仔细看了一遍,花了一个多月...
  • Ruby 基础教程(第5版)

    千次阅读 2019-07-05 10:04:32
    《Ruby 基础教程(第5版)》由 Ruby 之父松本行弘亲自审校并作序推荐。本书支持 Ruby 2.3,通俗易懂地讲解了编程时所需要的变量、常量、方法、类、流程控制等的语法,以及主要类的使用方法和简单的应用,让没有编程...
  • golang基础教程

    万次阅读 多人点赞 2019-05-28 21:38:58
    golang基础教程(一)、环境搭建 golang基础教程(二)、开发规范及API golang基础教程(三)、变量与数据类型概述 golang基础教程(四)、基本数据类型 golang基础教程(五)、基本数据类型的转换 golang基础教程...
  • SQL语句的基础教程(一)

    千次阅读 2019-06-18 09:41:01
    SQL语句的基础教程(一) 开发工具与关键技术:SQL Server 2014 Management Studio、SQL语句的基础教程(一) 作者:袁何恩 撰写时间:2019年6月16日 今天,我要和大家分享的技术是SQL语句的基础教程。 SQL可以面向...
  • Python基础教程视频集锦

    千次阅读 2019-02-28 16:35:21
    大多数Python 开发者从事以下三种开发:Web(38%)、通用开发(22%)、科学类开发...想找Python基础教程视频集锦?看这里! 千锋Python基础教程:http://pan.baidu.com/s/1qYTZiNE Python课程教学高手晋级视频总目录:h...
  • 这里推荐这门python编程入门基础教程,适合零基础的同学学习! python软件工程师都学什么? 自学Python,看视频学的更快、更透彻一些,给你个课程大纲! 阶段一:Python开发基础 Python全栈开发与人工智能之Python开发...
  • 软件测试基础教程

    千次阅读 2019-04-07 14:42:24
    软件测试基础教程 百度网盘链接:https://pan.baidu.com/s/1DWkrFFl1ycwI3puGRYsDjg 密码:dncq
  • 用了近3周时间,几乎每天一章的速度读完了廖雪峰《python3 基础教程》,感悟如下: 1、python入手比C/C++快的多。 C/C++需要几年时间方才上手,python可以迅速上手,6-12个月即可以应用python做项目开发。 2、...
  • Python基础教程(一)

    万次阅读 多人点赞 2019-04-23 00:42:29
    Python基础教程 一、简介 Python的历史和为什么学习Python这里就不在赘述了。处于工作原因,对Python要进行深入的学习和研究,这里主要针对的就是Python具有的丰富和强大的库。 Python目前有两个版本,Python2和...
  • 网页制作基础教程:认识HTML  在今天,做网页的工具到处都是,只要动几下鼠标,一个精彩的网页就出来了,HTML是否要学呢?答案是肯定的,因为工具就是工具,它们生成的代码是机械的,不够简洁,使网页打开的速度...
  • JavaFX2.0 基础教程(全版)

    万次阅读 2012-05-08 16:47:54
     关于JavaFX的相关基础教程内容,都是翻译自Oracle官方网站的相应内容。没有做过多的词句考量,但作为一般技术文档,读者应该都可以理解的。若有不便,还请谅解。 这部分是第一篇,关于JavaFX2.0基础教程部分,...
  • 《Python机器学习基础教程》官方中文版PDF+英文版PDF+源代码+张亮 (译者) 官方高清中文版PDF,306页,带书签目录,文字能够复制粘贴;高清英文版PDF,392页,带书签目录,彩色配图,文字能够复制粘贴; 中英文两版...
  • Python3入门精通基础教程(合集)

    千次阅读 2019-07-07 16:48:37
    Python3基础教程,持续更新中。。。 非常好的Python3基础教程合集,简单明了,快速掌握Python3核心技术! 01——Python及其开发环境的安装(Pycharm) 02——初识Python 03——整型、字符串数据类型 04——...
  • Web前端开发精品课:HTML与CSS基础教程结合大量开发实战经验,将前端开发知识系统化整理,浓缩精华,用通俗易懂的语言直指初学者的痛点。全书分为两部分:首部分是HTML基础知识,帮助读者认识和理解网页的结构;第二...
1 2 3 4 5 ... 20
收藏数 436,293
精华内容 174,517
关键字:

基础教程