python技术面试题(十三)

正文共: 3784 字 5 图 预计阅读时间: 10 分钟

每日分享

Go forth and make awesomeness.

去做一件令人敬畏的事。

小闫语录

今日烦躁,无话可说。

python技术面试题(十三)

1.Linux常用命令

1.远程登录:

ssh 用户名@IP

2.远程拷贝:

scp 用户名@ip:文件路径 本地路径

3.上传到远程:

scp 本地路径 用户名@ip:文件路径

文件远程拷贝和上传如果是对文件夹操作,在scp后加 -r参数。

查看日志:

tail -f test.log            # 日志不断的打印
sed -n '5,10p' test.log     # 查看文件的第5行到第10行

2.常用Git命令

1.创建本地仓库(新建一个空目录然后执行):

git init

2.配置个人信息:

git config user.name '张三'
git config user.email 'zhangsan@153.com'

3.查看文件状态:

git status

绿色:暂存区 红色:工作区

4.工作区文件添加到暂存区:

git add x           # 添加所有文件
git add login.py    # 添加指定文件

5.提交暂存区文件到仓库区:

git commit -m '版本描述'

6.查看历史版本:

git log
# 或者
git reflog

7.回退版本:

git reset --hard 版本号

8.撤销工作区代码:

git checkout 文件名

9.撤销暂存区代码:

# 第一步:将暂存区代码撤销到工作区
git reset HEAD 文件名
# 第二步:撤销工作区代码
git checkout 文件名

10.对比版本库与工作区:

git diff HEAD -- 文件名

11.对比版本库:

git diff HEAD HEAD^ -- 文件名

HEAD表示当前最新版本 HEAD^表示当前最新版本的前一个版本 HEAD^^表示当前最新版本的前两个版本,以此类推... HEAD~1表示当前最新版本的前一个版本 HEAD~10表示当前最新版本的前10个版本,以此类推...

12.确定删除文件:

# 删除文件
rm 文件名
# git确定删除文件
git rm 文件名
# 记录一下删除操作的版本
git commit -m '删除描述'

13.误删除:

# 删除文件
rm 文件名
# git撤销修改
git checkout -- 文件名

14.克隆项目到本地:

git clone 地址

15.推送项目到远程:

git push

16.拉取项目:

git pull

17.记住密码:

git config --global credential.helper store

18.打标签:

git tag -a 标签名 -m '标签描述'

19.推送标签到远程仓库:

git push origin 标签名

20.删除标签:

# 删除本地标签
git tag -d 标签名
# 删除远程仓库标签
git push origin --delete tag 标签名

21.查看当前分支:

git branch

22.创建并切换到分支dev:

git checkout -b dev

23.将本地分支推送到远程:

git push -u origin dev

24.合并分支:

# 切换到主分支
git checkout master
# 将dev分支合并到master
git merge dev

25.拉取对应的分支dev:

git fetch origin dev

3.Celery底层原理

celery提供了一个task装饰器,对被修饰的函数添加delay 方法(将原任务方法名和参数保存到redis的list中)。

在celery的redis消息队列中,利用了redis的列表类型的 lpushbrpop操作。任务发出者向列表中通过lpush加入任务。而任务执行者则是通过brpop操作按顺序异步执行任务。因为lpush可以形象的理解为从左向右推入元素,brpop则是从右侧取元素,保证了任务添加的顺序不会乱。

Brpop命令:

brpop <list>.... <timeout>

Redis Brpop 命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。

4.FastDFS

FaskDFS是用c语言编写的开源的分布式文件系统。FastDFS 为互联网量身定制, 充分考虑了冗余备份、负载均衡、线性扩容等机制。使用 FastDFS 很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

FastDFS 架构包括 Tracker server(调度服务器)Storage server(存储服务器)。客户端请求 Tracker server 进行文 件上传、下载,通过 Tracker server 调度最终由 Storage server 完成文件上传和下载。

服务器端两个角色:

  • Tracker: 管理集群,tracker 也可以实现集群。每个 tracker 节点地位平等。收集 Storage 集群的状态。
  • Storage: 实际保存文件, Storage 分为多个组,每个组之间保存的文件是不同的。每个组内部可以有多个成员,组成员内部保存的内容是一样的,组成员的地位是一致的,没有 主从的概念。

文件上传流程:浏览器上传连接请求,Tracker Server查询可用的Storage,然后将Storage的IP和端口返回给客户端。客户端上传文件,然后Storage Server生成 file_id,将上传的内容写入磁盘,并将 file_id返回给客户端,客户端保存这个 file_id即可。 file_id保存的是文件的索引信息(组名,虚拟磁盘路径,数据两级目录,文件名)。

组名:文件上传后所在的 storage 组名称,在文件上传成功后由 storage 服务器返回,需要客户端自行保存。 虚拟磁盘路径:storage 配置的虚拟路径,与磁盘选项 storepath对应。如果配置了 storepath0 则是 M00,如果配置了 store_path1 则是 M01,以此类推。 数据两级目录:storage 服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。 文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器 IP 地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

使用的时候需要自定义Django文件存储系统,然后在Django配置中设置自定义文件存储类。通过 DEFAULT_FILE_STORAGE配置项设置。

5.Hs + ES

ES是java语言实现的一个开源的搜索引擎,很火,一般我们首选ES搜索。它的原理就是先建立索引结构数据,类似于咱们新华字典的前面索引表。在通过搜索引擎查询的时候,和咱们查字典一样,先通过拆分关键字的方式查一下这个数据在哪,然后直接就找到了。

我们使用haystack全文检索框架,它是python中的全文搜索框架,支持多种搜索引擎,能帮助开发者利用搜索引擎建立数据表的索引数据。能帮助开发者利用搜索引擎进行关键词搜索,获取对应的索引数据。还能利用索引数据查找到对应数据表的数据。也就是它什么都有了,你直接使用就好了。

6.数据库事务

事务 Transaction 是指作为一个基本工作单元执行的一系列SQL语句的操作,要么完全地执行,要么完全地都不执行。事务的四大特性(ACID):原子性、一致性、隔离性、持久性。

一个简单的例子(三个步骤打包为一个事务,任何一个失败,则必须回滚所有):

1. 检查支票账户的余额高于或者等于200美元。
2. 从支票账户余额中减去200美元。
3. 在储蓄帐户余额中增加200美元。

1.原子性(Atomicity)

一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性

2.一致性(Consistency)

数据库总是从一个一致性的状态转换到另一个一致性的状态。(在前面的例子中,一致性确保了,即使在执行语句时系统崩溃,支票账户中也不会损失200美元,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中。)

3.隔离性(Isolation)

通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。(在前面的例子中,一个事务未完成,此时有另外的一个账户汇总程序开始运行,则其看到支票帐户的余额并没有被减去200美元。)

4.持久性(Durability)

一旦事务提交,则其所做的修改会永久保存到数据库。(此时即使系统崩溃,修改的数据也不会丢失。)

6.1事务的操作

开启事务(开启事务后执行修改命令,变更会维护到本地缓存中,而不维护到物理表中):

begin;
或:
start transaction;

提交事务(将缓存中的数据变更维护到物理表中):

commit;

回滚事务(放弃缓存中变更的数据 表示事务执行失败 应该回到开始事务前的状态):

rollback;

优质文章推荐:

公众号使用指南

redis操作命令总结

前端中那些让你头疼的英文单词

Flask框架重点知识总结回顾

项目重点知识点详解

难点理解&面试题问答

flask框架中的一些常见问题

团队开发注意事项

浅谈密码加密

Django框架中的英文单词

Django中数据库的相关操作

DRF框架中的英文单词

重点内容回顾-DRF

Django相关知识点回顾

美多商城项目导航帖

项目重要技术点介绍

本文分享自微信公众号 - 全栈技术精选(Pythonnote)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券