公司业务理解:
Nginx: 没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器,基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。
spark:
1.0 Python常见的内置模块: 就是.py文件, 此代码可以试类函数和变量等,常见的sys、random、datatime、JSON
2.0 数组和列表的区别:他们是具有相同的数据存储方式 数组:只能包含单个数据类型的元素、 列表:可以包含任意数据类型的函数
3.0 lambda匿名函数:减少代码行数,提高执行效率,是指一类无需定义 函数名 的函数或子程序。
lambda x, y: x*y;函数输入是x和y,输出是它们的积x*y
dict={'2':'b', '1':'a', '3':'c'}
2.0 字典排序: sorted(dict.items(), key = lambda x:x[1])
3.0 列表排序 sorted(list, keylambda x:x['age'], reverse = True)
4.0 深拷贝和浅拷贝的区别:
深拷贝是将一个对象拷贝做出改变时,不会影响到原来的对象,copy.deepcopy()
浅拷贝是在拷贝过程中改动会影响原来的对象,copy.copy()
浅拷贝只拷贝一层的数据,深拷贝拷贝数据集合的所有层,对于只有一层数据来说,深浅拷贝都是一样的
对于不可变对象来说,赋值操作其实就可以满足上面说的实际应用场景
所以!后面要讲的浅拷贝、深拷贝对于不可变对象来说,和赋值操作是一样的效果!
记住!浅拷贝、深拷贝只针对可变对象,即列表、集合、字典!
5.0 可变数据类型与不变数据类型:
定义: 当改变变量值时,地址发生的变化,称为不可变数据类型,
当改变变量值, 地址不发生变化, 是可变数据类型
可变数据类型:列表,字典,集合
不可变数据类型:整型,浮点型,字符串,布尔值,元组
**常添加全局变量和局部变量的关系**
6.0 cookie:Cookie使Web服务器能够在用户的设备上存储状态信息
Cookie 是浏览器访问服务器后,服务器传给浏览器的一段数据。
此后每次浏览器访问该服务器,都必须带上这段数据。
储存在浏览器中,是客户端, 储存时间长,可以设置日期
Session:是另一种保存客户状态的机制,他是保存在服务器上的,SessionID是session的唯 一标识
4.0 get和post的区别:
携带请求时: get是在url中,请求参数会完整保存在浏览器中,
post是在body请求体中,请求参数不会保留,
所以get不安全,post安全 get请求参数的长度是有限制的,post没有限制
6.0 闭包: 指的是定义一个函数内部的函数,被外层包裹着,特点是内部函数可以访问外部函数的变量
1.0 必须有一个内嵌函数
2.0 内嵌函数必须引用外部变量
3.0 外部函数的返回值必须是内嵌函数
def outer():
num = 1
def inner():
print(num) #可以访问外层函数的变量,
return inner func = outer() # 输出结果是1
7,0 is 和 == 的区别和联系
**is** 用于判断两个变量引用对象是否为同一个, **==** 用于判断引用变量的值是否相等。
相当于 id(a)==id(b),指的是判断地址是否是指向同一个
8.0 装饰器、迭代器、生成器、可迭代的
装饰器: 可以在不修改原有代码的情况下,为被装饰的对象增加新的功能或者附加限制条件或者帮助输出,一般为登录用的,Flask中的路由也就是装饰器
迭代器:可以被next函数调用,并返回下一个值的对象称为迭代器,列如生成器就是迭代器
生成器:使用了 yield 的函数被称为生成器(generator)
可迭代的:列表是可以迭代的,但不是迭代器, 可以通过 iter() 转换为迭代器
列表是一下子生成的,不是一个一个生成的
```
def fib(max): # 斐波那契数列
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return 'done'
```
9.0 进程、线程、协程
进程:进程就是一个程序在一个数据集上的一次动态执行过程。进程由程序,数据集,进程控制块三部分组
成。程序用来描述进程哪些功能以及如何完成;数据集是程序执行过程中所使用的资源;
进程控制块用来保存程序运行的状态
线程:线程又叫轻量级进程,是一个基本的cpu执行单元,也是程序执行过程中的最小单元。
一个进程最少也会有一个主线程,在主线程中通过threading模块,在开子线程
协程:又称微线程,子程序,或者称为函数,在所有语言中都是层级调用,
比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,
最后是A执行完毕。所以子程序调用是通过栈实现的,一个线程就是执行一个子程序
**进程线程的关系**
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程
(2)资源分配给进程,进程是程序的主体,同一进程的所有线程共享该进程的所有资源
(3)cpu分配给线程,即真正在cpu上运行的是线程
(4)线程是最小的执行单元,进程是最小的资源管理单元
**并行和并发**
并行处理是指计算机系统中能同时执行两个或多个任务的计算方法,并行处理可同时工作于同一程序的不同方面
并发处理是同一时间段内有几个程序都在一个cpu中处于运行状态,但任一时刻只有一个程序在cpu上运行。
并发的重点在于有处理多个任务的能力,不一定要同时;而并行的重点在于就是有同时处理多个
任务的能力。并行是并发的子集
10.0 为什么使用 args,* kwargs?**
当我们不确定将多少个参数传递给函数,或者我们想要将存储的列表或参数元组传递给函数时,我们使用*
args。**当我们不知道将多少关键字参数传递给函数时使用kwargs,或者它可以用于将字典的值作为关键字
参数传递。标识符args和kwargs是一个约定,你也可以使用* bob和** billy。
11.0 谈下python的GIL锁
GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占
python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。
如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后
顺序的,并不是同时进行。多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,
所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大
12.0 mysql优化和正则匹配,自己写的方法有哪些,restful风格, 常用的数据库,设计模式
mysql优化:最大化利用索引;尽可能避免全表扫描;减少无效数据的查询;
**1. 尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描。** 如下:
SELECT * FROM t WHERE username LIKE '%陈%' (第一个 % 会导致全表查询)
优化方式:尽量在字段后面使用模糊查询。如下:
SELECT * FROM t WHERE username LIKE '陈%'
**2. 尽量避免使用in 和not in,会导致引擎走全表扫描。** 如下:
SELECT * FROM t WHERE id IN (2,3)`
优化方式:如果是连续数值,可以用between代替。如下:
SELECT * FROM t WHERE id BETWEEN 2 AND 3
**3. 尽量避免使用 or,会导致数据库引擎放弃索引进行全表扫描。** 如下:
```
SELECT * FROM t WHERE id = 1 OR id = 3
```
优化方式:可以用union代替or。如下:
```
SELECT * FROM t WHERE id = 1
UNION
SELECT * FROM t WHERE id = 3
```
[https://developer.aliyun.com/article/779151 ](url)
13.0 MongoDB的优化
加索引,减少无效查询,(“_id”="")
限制查询结果的数目,来减少网络的需求,例如加 limit()
```
db.posts.find().sort( { timestamp : -1 } ).limit(10)
```
## 使用映射只返回需要的数据
当你仅仅需要文档字段的子集,你可以通过只返回你需要的字段来获取更好的性能。
例如,如果对于 `posts` 集合的查询,你只需要 `timestamp`, `title`, `author` 和 `abstract` 字段,你可以使用如下命令:
db.posts.find( {}, { timestamp : 1 , title : 1 , author : 1 , abstract : 1} ).sort( { timestamp : -1 } )
```
14.0 MVC和MTV区别联系
- Modle 代表数据存储层,是对数据表的定义和数据的增删改查;
- View 代表视图层,是系统前端显示部分,它负责显示什么和如何进行显示;
- Controller 代表控制层,负责根据从 View 层输入的指令来检索 Model 层的数据,并在该层编写代码产生结果并输出。
- Model:数据存储层,处理所有数据相关的业务,和数据库进行交互,并提供数据的增删改查;
- Template:模板层(也叫表现层)具体来处理页面的显示;
- View:业务逻辑层,处理具体的业务逻辑,它的作用是连通Model 层和 Template 。
15.0 restful风格的代码风格
restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。
它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制
(1)每一个URI代表一种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
16.0 开发模式: 模式是固定的套路,所有语言共有的模式,
单例模式:创建一个实例开辟一个内存
工厂模式:
https://github.com/DasyDong/developer-roadmap/blob/master/code/design_pattern/%E5%88%9B%E5%BB%BA%E5%9E%8B%E6%A8%A1%E5%BC%8F-%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F.py
17.0 正则匹配:记录文本规则的代码,在字符串中,匹配手机号,邮箱号,匹配需要的字符串,(通用性强,java,php都行)
18.0 linux的模糊查询:
19.0 Flask、常见问题
常用的第三方插件:werkzurg、DBUtils、wtforms、SQLAlchemy、jinjia2、redis
蓝图:储存一组视图方法的容器对象,
### SQLAlchemy如何执行原生SQL
第一种是:
"""
session = scoped_session(SessionFactory)
session.execute('insert users(name) values(:value)', params={'value': 'thanlon'})
"""
第二种是:
"""
conn = engine.raw_connection()
cursor = conn.cursor()
cursor.execute('select * from users')
什么是WSGI:Web Server Gateway Interface,Web 服务器网关接口)则是Python语言中1所定义的
Web服务器和Web应用程序之间或框架之间的通用接口标准。WSGI就是一座桥梁,桥梁的一端称为服务端或网关端,
另一端称为应用端或者框架端,WSGI的作用就是在协议之间进行转化。WSGI将Web组件分成了三类:Web 服务器
(WSGI Server)、Web中间件(WSGI Middleware)与Web应用程序(WSGI Application)。
13. Flask框架依赖组件?
- Route(路由)
- templates(模板)
- Models(orm模型)
- blueprint(蓝图)
- Jinja2模板引擎
14. Flask蓝图的作用?
- 将不同的功能模块化
- 构建大型应用
- 优化项目结构
- 增强可读性,易于维护(跟Django的view功能相似)
20.0 http中常见的问题 定义:HTTP 是超文本传输协议
列举Http请求中常见的请求头?
•Accept:浏览器可接受的MIME类型
•Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
•Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip
•Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。可以在浏览器中进行设置。
•Host:初始URL中的主机和端口
•Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面
•Content-Type:内容类型
•If-Modified-Since: Wed, 02 Feb 201112:04:56 GMT利用这个头与服务器的文件进行比对,如果一致,则从缓存中直接读取文件。
•User-Agent:浏览器类型.
•Content-Length:表示请求消息正文的长度
•Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接
•Cookie:这是最重要的请求头信息之一
•Date:Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT
————————————————
原文链接:https://blog.csdn.net/qq_41891803/article/details/81272575
21.0 ip地址:ifconfig ping
流程:1.0 通过ip地址找到网络中的设备,
2.0 通过端口号找到对应好的进程端口
3.0 传输协议是通过tcp进程协议,保证数据的可靠性
4.0 socket传输数据
IPv4 和 ipv6
ip地址: 标识网络设备的唯一的设备,ip地址是唯一的,
ifconfig查看ip地址 ens33是唯一的ip地址 lo 是本机的
域名: 就是ip地址的别名
端口: 进程传输数据的一个通道,
端口号: 区分和管理不同的端口,分为两类,知名端口号和动态端口号
tcp协议: 就相当于打电话,先建立连接,传输信息,关闭连接
《1》tcp 发送应答机制
《2》超时重传
《3》错误校验
《4》流量控制和阻塞处理,
socket概念:是进程之间通信的工具,相当于现实中的插座,简称:套接字 是数据的搬运工,
22.0 自己搭建一个静态web服务器
是以http协议发送的,基于tcp协议