这篇文章是因为前段时间接到了一个360的电面
接到电话的时候其实是异常开心的
然后电面完就开始自闭了
深刻认识到自己的知识储备的不足
因此萌生了增强自身能力和知识储备的想法
也在博客中进行一些记录
此博文仅作部分基础知识的拓展
可能以后想到了更多内容也会进行更新
主要会分为以下几个内容来浅入各方面的知识
- 网路知识
- Linux
- PHP
- Python
网路知识
由于开发岗位对网络的要求并不那么高,所以在此只作粗略的内容阐述
TCP三次握手
为什么要三次握手
主要是为了防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。
三次握手建立连接的过程
- 第一次握手:客户端发送包至服务器,等待服务器确认
- 第二次握手:服务器收到包,确认客户端请求,同时发送一个包至客户端并进入Recv状态
- 第三次握手:客户端收到服务器的包,并向服务器发送确认包,发送完毕后,客户端和服务端进入连接状态,完成三次握手。
三次握手完成后,在理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持。
浏览器从输入URL到页面展示过程中发生了什么?
在浏览器地址栏输入URL到页面展示过程大致分为以下阶段:
- 域名解析(找到该域名所对应的IP地址)
- 服务器处理(找到该域名的网站)
- 网站处理(找到该域名所对应的文件)
- 浏览器处理(把文件返回浏览器)
域名解析
有注册过域名的同学一定知道域名需要云解析DNS配置
这就引出了DNS域名系统这个概念
DNS是域名和IP地址对应的映射表
用于解析域名的IP地址
通过DNS服务器后,我们所输入的地址就变成了IP地址从而进行下一步的访问
例如:我们输入www.baidu.com的时候
从DNS服务器中最先找到的IP地址115.239.211.112
当然,这些大型站点通常都有CDN服务,这些找到的IP也并非服务器真实地址
服务器处理
当我们从DNS服务器中找到IP时,我们就会请求服务器
服务器是一台安装了系统的机器,常见的系统有Linux和Windows Server
目前服务器使用的还是以Linux为主
系统中安装有处理请求的Web Server
常见的Web Server有Apache、Nginx、IIS
PHP通常使用的是Apache
通常情况下一个服务器下会部属多个网站
Web Server接收用户的请求并且根据请求的域名找到其对应的网站,然后把用户的请求交给该网站的代码进行处理
网站处理
现在的网站很多都是使用MVC框架来进行处理的
无论使用的是什么框架进行处理
网站处理其实经过的流程都是一致的
在处理客户端请求时,我们可能会对请求中的参数进行分析
连接数据库获取我们需要的内容并且通过某个编程语言来进行解释
从而最终返回我们预期返回的内容(例如Json、Html)
浏览器处理
浏览器处理的过程是一个边解析边渲染的过程
例如我们的网站使用的是PHP语言
我们在网站处理的过程中已经执行完毕了处理过程
最终返回的是一个HTML文档又或者是一个Json
浏览器处理时也有可能是直接载入Html文档或者执行js代码来分析Json从而使用
浏览器会载入我们所引入的css,js文件并且最终将结果展现至客户端的浏览器上
Linux
什么是Linux?
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
—— 百度百科
Linux系统因为其更加可靠的系统安全性等多方面原因,成为越来越流行的网站服务器
因此作为一个开发也需要了解一些Linux知识
什么是LAMP?
LAMP分别是
- L:Linux
- A:Apache
- M:Mysql(数据库)
- P:PHP、Python(脚本语言)
如何部署LAMP环境
LAMP环境的部署现在有很多方式
本文讲个人认为最简单的一种方式:Linux宝塔面板
宝塔面板从安装和管理上都较为方便,作为我这样的菜逼还是比较容易上手的
Linux的基础指令和功能
指令 | 功能 |
---|---|
cd | 切换目录 |
ls | list之意,用于查看文件和目录 |
grep | 查找内容包含指定文本的文件 |
find | 查找文件 |
cp | copy之意,复制文件和目录 |
mv | move之意,移动文件和目录 |
rm | remove之意,删除文件和目录 |
file | 辨识文件类型 |
tar | 常用于备份,可用来压缩和解压文件 |
cat | 查看文本文件内容 |
vim | 编辑文本文件内容 |
pwd | 查看当前路径 |
mkdir | 创建文件夹 |
PHP
PHP是什么?
PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。
PHP 是免费的,并且使用非常广泛。同时,对于像微软 ASP 这样的竞争者来说,PHP 无疑是另一种高效率的选项。
PHP常见的开发框架
PHP常见的框架主要有:
- ThinkPHP
- Yii
- Zend Framework
- Laravel
本文主要讲一下Laravel框架
Laravel框架是一个优雅、简洁的PHP WEB框架。
Laravel使用的是MVC的设计模式
在博客中也写了一些基础知识,可以在另一篇博文[Laravel基础知识]中查看
PHP5 和 PHP7
这个也是我电面中被提及的一个问题
就我所知PHP7和PHP5相比
在性能上有十分大的提升
通过查询相关知识得知PHP7相较于PHP5性能提升有以下原因:
- 变量存储字节减小,减少内存占用,提升变量操作速度
- 改善数组结构,数组元素和hash映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率
- 改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率
不过对于我这种菜鸡而言,只需要知道它提升了就好,便也没有深究其中的缘由
Python
什么是Python
Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。 ——百度百科
Python在现如今无论是在Web还是在脚本或者其他方面的表现都是十分的优秀
因此现在的需求也是越来越大的,从某个程度上也减少了PHP的市场需求
Python是一种强类型语言还是弱类型语言
其实一开始并不了解强弱类型的语言区别
一开始以为,嗯,Python不需要定义变量类型,那么它应该是一个弱类型语言吧
其实强类型弱类型语言只需了解以下知识便可区分:
强类型:不予许不同类型相加
例如:我们将字符串’1’将数字1相加
弱类型语言会输出结果
而强类型语言则会报typeerror的错误
因此Python是一种强类型的动态脚本语言
Python的变量类型
Python中,基本数据类型可以分为以下几种:
字符串
字符串是由数字、字母、下划线组成的一串字符
例如:1
str="abc"
则我们定义了一个名字为str的变量,其值为abc123456
字符串支持多种截取和处理方式
例如:1
2
3
4
5
6
7
8
9
10
11
12
13
14print(str) #输出字符串
>abc123456
print(str[0:-1]) #输出第一个到倒数第二个的所有字符
>abc12345
print (str[0]) # 输出字符串第一个字符
>a
print (str[2:5]) # 输出从第三个开始到第五个的字符
>c12
print (str[2:]) # 输出从第三个开始的后的所有字符
>c12345
print (str * 2) # 输出字符串两次
>abc123456abc123456
print (str + "789") # 连接字符串
>abc123456789
列表
List(列表) 是 Python 中使用最频繁的数据类型。
列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
列表截取的语法格式如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14list = ['abc', 123 , 1.23, 'Wuxie']
tinylist = [456, 'Wuxie']
print (list) # 输出完整列表
>['abc', 123 , 1.23, 'Wuxie']
print (list[0]) # 输出列表第一个元素
>abc
print (list[1:3]) # 从第二个开始输出到第三个元素
>[123, 1.23]
print (list[2:]) # 输出从第三个元素开始的所有元素
>[123 , 1.23, 'Wuxie']
print (tinylist * 2) # 输出两次列表
>[456, 'Wuxie', 456, 'Wuxie']
print (list + tinylist) # 连接列表
>['abc', 123 , 1.23, 'Wuxie', 456, 'Wuxie']
元组
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。
元组可以用()进行创建1
tuple = ('abc', 123)
和字符串以及列表一样
元组的内容是可以通过索引读取的,下标从0开始,-1为从末尾开始的位置
集合
集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 { } 或者 set() 函数创建集合
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
创建格式:1
2parame = {value1,value2,...}
parame = set()
集合可以计算差集、并集和交集1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
print(student) # 输出集合,重复的元素被自动去掉
>{'Jim', 'Rose', 'Mary', 'Tom', 'Jack'}
# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')
print(a)
>{'a', 'b', 'r', 'd', 'c'}
print(b)
>{'a', 'z', 'l', 'c', 'm'}
print(a - b) # a 和 b 的差集
>{'b', 'd', 'r'}
print(a | b) # a 和 b 的并集
>{'a', 'b', 'r', 'z', 'd', 'l', 'c', 'm'}
print(a & b) # a 和 b 的交集
>{'a', 'c'}
print(a ^ b) # a 和 b 中不同时存在的元素(对称差)
>{'b', 'l', 'd', 'r', 'z', 'm'}
添加元素
例如我们当前有一个集合 s
我们可以使用以下语法1
s.add()
或者1
s.update()
移除元素
将元素从集合 s 中移除,如果元素不存在,则会发生错误。1
s.remove()
或者随机删除一个元素(挑选一位幸运观众)并且返回删除的元素内容1
s.pop()
计算元素个数
1 | len(s) |
清空集合
1 | s.clear() |
字典
字典(dictionary)是Python中另一个非常有用的内置数据类型。
列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。
键(key)必须使用不可变类型。
在同一个字典中,键(key)必须是唯一的。
例如我们创建一个字典 dict1
2
3dict = {}
dict[0] = "0的内容"
dict['zero'] = "zero的内容"
这里需要注意的是,dict[0]中的0并不是索引下标,而是作为key进行存储
1 | print(dict[0]) #此处输出的是key为字典dict中key为0的value值 |
个人总结
在Python3中 可以使用下标来查看内容的有以下几种数据类型
- 字符串
- 列表
- 元组(亦可以理解为数组)
常用的技术论坛
全篇总结
人总归是要进步的
虽然我现在还是个菜逼
但我以后也可能就是一个大菜逼了
菜逼一时爽,一直菜逼一直爽