前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python技术面试题(十三)

python技术面试题(十三)

作者头像
小闫同学啊
发布2019-07-18 14:58:10
7330
发布2019-07-18 14:58:10
举报
文章被收录于专栏:小闫笔记小闫笔记

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

每日分享

Go forth and make awesomeness.

去做一件令人敬畏的事。

小闫语录

今日烦躁,无话可说。

python技术面试题(十三)

1.Linux常用命令

1.远程登录:

代码语言:javascript
复制
ssh 用户名@IP

2.远程拷贝:

代码语言:javascript
复制
scp 用户名@ip:文件路径 本地路径

3.上传到远程:

代码语言:javascript
复制
scp 本地路径 用户名@ip:文件路径

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

查看日志:

代码语言:javascript
复制
tail -f test.log            # 日志不断的打印
sed -n '5,10p' test.log     # 查看文件的第5行到第10行

2.常用Git命令

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

代码语言:javascript
复制
git init

2.配置个人信息:

代码语言:javascript
复制
git config user.name '张三'
git config user.email 'zhangsan@153.com'

3.查看文件状态:

代码语言:javascript
复制
git status

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

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

代码语言:javascript
复制
git add x           # 添加所有文件
git add login.py    # 添加指定文件

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

代码语言:javascript
复制
git commit -m '版本描述'

6.查看历史版本:

代码语言:javascript
复制
git log
# 或者
git reflog

7.回退版本:

代码语言:javascript
复制
git reset --hard 版本号

8.撤销工作区代码:

代码语言:javascript
复制
git checkout 文件名

9.撤销暂存区代码:

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

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

代码语言:javascript
复制
git diff HEAD -- 文件名

11.对比版本库:

代码语言:javascript
复制
git diff HEAD HEAD^ -- 文件名

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

12.确定删除文件:

代码语言:javascript
复制
# 删除文件
rm 文件名
# git确定删除文件
git rm 文件名
# 记录一下删除操作的版本
git commit -m '删除描述'

13.误删除:

代码语言:javascript
复制
# 删除文件
rm 文件名
# git撤销修改
git checkout -- 文件名

14.克隆项目到本地:

代码语言:javascript
复制
git clone 地址

15.推送项目到远程:

代码语言:javascript
复制
git push

16.拉取项目:

代码语言:javascript
复制
git pull

17.记住密码:

代码语言:javascript
复制
git config --global credential.helper store

18.打标签:

代码语言:javascript
复制
git tag -a 标签名 -m '标签描述'

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

代码语言:javascript
复制
git push origin 标签名

20.删除标签:

代码语言:javascript
复制
# 删除本地标签
git tag -d 标签名
# 删除远程仓库标签
git push origin --delete tag 标签名

21.查看当前分支:

代码语言:javascript
复制
git branch

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

代码语言:javascript
复制
git checkout -b dev

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

代码语言:javascript
复制
git push -u origin dev

24.合并分支:

代码语言:javascript
复制
# 切换到主分支
git checkout master
# 将dev分支合并到master
git merge dev

25.拉取对应的分支dev:

代码语言:javascript
复制
git fetch origin dev

3.Celery底层原理

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

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

Brpop命令:

代码语言:javascript
复制
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):原子性、一致性、隔离性、持久性。

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

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

1.原子性(Atomicity)

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

2.一致性(Consistency)

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

3.隔离性(Isolation)

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

4.持久性(Durability)

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

6.1事务的操作

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

代码语言:javascript
复制
begin;
或:
start transaction;

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

代码语言:javascript
复制
commit;

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

代码语言:javascript
复制
rollback;

优质文章推荐:

公众号使用指南

redis操作命令总结

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

Flask框架重点知识总结回顾

项目重点知识点详解

难点理解&面试题问答

flask框架中的一些常见问题

团队开发注意事项

浅谈密码加密

Django框架中的英文单词

Django中数据库的相关操作

DRF框架中的英文单词

重点内容回顾-DRF

Django相关知识点回顾

美多商城项目导航帖

项目重要技术点介绍

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 每日分享
  • python技术面试题(十三)
    • 1.Linux常用命令
      • 2.常用Git命令
        • 3.Celery底层原理
          • 4.FastDFS
            • 5.Hs + ES
              • 6.数据库事务
                • 6.1事务的操作
            相关产品与服务
            云数据库 Redis
            腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档