每日分享
The brain is like a muscle. When it is in use we feel very good. Understanding is joyous.
大脑就像肌肉一样,当我们使用时会感到愉悦。理解是充满快乐的。
小闫语录:
勤于思考,别让你的小脑瓜生锈哦~
Unix
1.查询所有环境变量的命令是: env
。设置一个新变量的命令是: export
。
2.动态查看日志尾部几行的命令是:
tail -n file
查看前面的几行使用
head-n
命令。
3.查询脚本定时任务的命名是:
crontab -l
4.screen命令中,创建新会话使用:
screen -S <name>
vim test
若要终止会话,先退出 vim ,然后使用快捷键 ctrl + d
查询所有会话使用:
screen -ls
暂时离开当前 session 使用:
Crtl + a +d
保存进程并退出作业(程序在 screen 中继续运行,screen -ls 可查看)
5.批量杀掉含有 filter
名称的进程:
ps -ef|grep filter|grep -v grep|cut -c 9-15|xargs kill -9
管道符"|"用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
"ps -ef" 是 linux 里查看所有进程的命令。这时检索出的进程将作为下一条命令 "grep filter" 的输入。
"grep filter" 的输出结果是,所有含有关键字 "filter" 的进程。
"grep -v grep" 是在列出的进程中去除含有关键字 "grep" 的进程。
"cut -c 9-15" 是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
"xargs kill -9" 中的 xargs 命令是用来把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行该命令。"kill -9"会强行杀掉指定进程。
其它类似的情况,只需要修改"grep filter"中的关键字部分就可以了。
git
1.查看当前 git 仓库的状态:
git status
2.什么时候使用 git stash
:
暂存
3.如何从 git 中删除文件,并将其从文件系统中删除:
# 删除文件 rm 文件名 # git确定删除文件,对比添加文件git add git rm 文件名 # 删除后记录删除操作版本 git commit -m '删除描述'
4.本地创建并切换分支到 dev:
git checkout -b dev
5.将分支推送到远程:
git push -u origin dev
6.在本地打标签:
git tag -a 标签名 -m '标签描述'
7.将标签推送到远程仓库:
1. git push origin 标签名
Python 基础知识
1.with 是什么,适用场景?
with 语句是 Pyhton 提供的一种简化语法,with 语句是从 Python 2.5 开始引入的一种与异常处理相关的功能。
with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的『清理』操作,释放资源。
比如下面的例子:
with open('test', 'w') as f: f.write('欢迎关注 小闫笔记 ')
文件在使用后会自动关闭。
2.with 的执行原理,如何自己实现一个 上下文管理器?
上下文管理器背后工作的机制是使用Python的方法: __enter__
和 __exit__
。
__enter__
方法会在执行 with 后面的语句时执行,一般用来处理操作前的内容。比如一些创建对象,初始化等。
__exit__
方法会在 with 内的代码执行完毕后执行,一般用来处理一些善后收尾工作,比如文件的关闭,数据库的关闭等。
自己可以通过类,如下的形式实现:
class email(objec): def __enter__(self): pass def __exit__(self): pass
使用的时候:
with email():
伪代码只表示意思,具体不实现功能
3.如下代码输出什么?
def func_error(): try: IO 错误代码 except IOError: return 1 finally: return 2 test = func_error() print(test)
输出的结果为 2。
web 框架
1.在 Django 中如果有一些复杂的 SQL 指令,怎么使用原生的 SQL 命令:
第一种方式:使用游标进行操作
from django.db import connection # 创建游标 cursor = connection.cursor() # 执行 SQL 语句 cursor.execute(SQL 语句) # 返回结果 row = cursor.fetchone() row = cursor.fetchall()
第二种方式:使用 raw() 方法
模型.objects.raw(SQL 语句)
返回的是一个 RawQuerySet
2.APIView 和 View 的区别?
答:APIView 是 View 类的子类,在 View 类的基础上添加了一些额外的功能。
功能:
1.视图中 request 对象不再是 Django 原始的 HTTPRequest 类的对象,而是由 DRF 框架封装成的 Request 类的对象。比如 request.data
保存解析之后的请求体的数据,并且已经解析成了字典或者类字典,相当于包含 Django 原始 request 对象中的 request.body | request.POST | request.FILES。再比如 request.query_params
保存解析之后的查询字符串的数据,并且已经解析成了字典或者类字典,相当于 Django 原始 request 对象中的 request.GET。
2.响应时可以统一返回 Response 类的对象。传入原始的响应数据,会自动根据客户的请求头中 Accept
将响应数据转换为对应的格式进行返回,默认返回 json,仅支持 json 和 html。
3.异常处理:如果视图中抛出了未处理异常,DRF 框架会自动对异常进行处理,并且把处理之后的错误信息返回给客户端。
4.高级功能:认证、权限和限流
3.uwsgi 和 gunicorn 的区别?
说实话,我只是会使用,具体的原理或者底层没有看过,所以此处只进行简单的介绍,后期熟悉之后补充相关的内容。
uwsgi:
1.Django 的程序通常使用 uwsgi 服务器来运行
2.需要安装后,编写配置文件,然后设置 Nginx 配置文件让其将请求转发给 uwsgi 服务器。
gunicorn:
1.Gunicorn(绿色独角兽)是一个 Python WSGI 的 HTTP 服务器
2.从 Ruby 的独角兽(Unicorn )项目移植
3.该 Gunicorn 服务器与各种 Web 框架兼容,实现非常简单,轻量级的资源消耗
4.Gunicorn 直接用命令启动,不需要编写配置文件
ES
1.Elasticsearch 是怎么样的数据库,数据是如何存储的?
答:Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式。索引相当于关系型数据库中的数据库,类型对应关系型数据库中的表,文档对应关系型数据库中的记录。
2.项目中是如何向其中添加数据的?
答:在项目中首先使用 Haystack 模块对接 Elasticsearch 引擎。然后需要配置文件(比如 Elasticsearch 运行服务器的 ip 和端口,指定 Elasticsearch 建立的索引库的名称,然后设置当添加、修改、删除数据的时候自动生成索引)。下一步就是创建索引类,来指明让搜索引擎对哪些字段建立索引,也就是可以通过哪些字段的关键字来检索数据。在 REST framework中,索引类的字段会作为查询结果返回数据的来源。
手动的执行如下命令生成初始索引:
python manage.py rebuild_index
还需要创建序列化器,最后再创建视图和路由,视图继承自:
drf_haystack.viewsets.HaystackViewSet