关于项目以及灵活的题目此处并未体现,只将一些记忆深刻的通用题目汇总展示,希望可以帮助到大家。
1.Python
1.1 字符串的 find 和 index 方法有什么区别
答:find
方法会检测某一字符串片段是否在指定字符串中,如果在内,会返回开始的索引值,不存在则返回 -1;index
方法与 find
作用相同,只不过在不存在的情况下会抛出异常。
1.2 元祖不使用下标的情况下如何取值
答:可以采用如下类似字典的取值方法:
mytuple = (('a',1),('b',2)) value = dict(mytuple).get('a') print(value) # 1
这道题当时并未做出,无具体答案更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
1.3 列表推导式
问:已知列表 ['a', 'b', 'c'],需要得到列表 ['aa', 'bb', 'cc']。采用列表推导式的方式如何实现?
答:代码如下:
alist = ['a', 'b', 'c'] newlist = [x+x for x in alist] print(newlist) # ['aa', 'bb', 'cc']
1.4 三目运算符
问:C
语言中的如下代码:
表达式1 ? 表达式2 : 表达式3;
在 python
中如何实现?更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
答:代码如下:
表达式1 if 表达式2 else 表达式3
1.5 不定长参数如何定义与取值
答:下面定义一个函数,使用不定长参数并在函数内部获取参数:
def func(name, age, *args, **kwargs): print(name) print(age) print("args is {}".format(args)) print("kwargs is") for k, v in kwargs.items(): print("'{}': {}".format(k, v)) func('Ethan', 18, 2, 3, 4, m=1, n=2) """ Ethan 18 args is (2, 3, 4) kwargs is 'm': 1 'n': 2 """
1.6 多进程
问:如何开启一个进程?
答:在 python
中可以使用模块 multiprocessing
的 Process
方法开启多进程。具体代码如下:
import multiprocessing import time def run_proc(): """子进程要执行的代码""" while True: print("----2----") time.sleep(1) if __name__=='__main__': # 创建子进程 sub_process = multiprocessing.Process(target=run_proc) # 启动子进程 sub_process.start() while True: print("----1----") time.sleep(1)
执行结果如下:
----1---- ----2---- ----2---- ----1---- ----2---- ----1---- ----2---- ----1----
2.Django
2.1 Django 如何执行原生 sql 语句
答:可以使用游标的方式,也可以使用 raw
方法或者 extra
方法。
游标以及
raw
为官方文档提示的用法,另外一种来源于网络。
2.1.1 游标
from django.db import connection,connections # cursor = connection.cursor() # cursor = connections['数据库的名字,setting设置的'].cursor() with connection.cursor() as cursor: cursor.execute("要执行的sql语句") row = cursor.fetchall() # fetchone,dictfetchall(cursor) print(row) # ((xxx,xxx),(xxx,xxx)...)
2.1.2 raw
obj = 模型类.objects.raw("原生sql")
2.1.3 extra
模型类.objects.extra(可选择执行select后条件还是直接执行where后条件)
Entry.objects.extra(select={'new_id': "select col from sometable where othercol > %s"}, select_params=(1,)) Entry.objects.extra(where=["foo='a' OR bar = 'a'", "baz = 'a'"]) Entry.objects.extra(select={'new_id': "select id from tb where id > %s"}, select_params=(1,), order_by=['-nid'])
2.2 如果需要给数据库插入1000条数据,如何操作
我回答使用循环,面试官轻蔑一笑我只能投降。
答:可以使用模块 pymysql
中游标的一个方法 executemany
。
execute(sql) - 可接受一条语句从而执行 executemany(templet,args) - 能同时执行多条语句,执行同样多的sql语句比execute()快得多,强烈建议执行多条语句时使用executemany - templet:sql模板字符串 - 例如: ‘insert into table(id,name) values(%s,%s)’ - args:模板字符串中的参数,是一个列表,列表中的每一个元素必须是元组!!! - 例如:[(1,'小明'),(2,'小红'),(3,'琦琦'),(4,'韩梅梅')]
2.3 Django 一个请求的执行过程
答:当请求访问后端服务器时,会先根据 url
在项目总的 urls.py
文件中进行匹配,然后截取剩余路径到单个应用的 urls.py
文件中进行匹配(如果匹配不到直接返回404)。路由到具体视图后,可以与模型类进行交互,也可以与模板进行交互填充等。在完成具体的业务逻辑后,视图将填充好的页面返回给客户端进行渲染展示。
可以结合
MVT
进行说明,也可以具体到代码细节进行阐释。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
2.4 Django 获取参数的两种方法
问:现在有两种方式向服务器传递参数,一种是路径方式传递,一种是表单类型传递。请说明一下在视图中如何取到这些参数,假设参数为 a
和 b
。
答:如果是路径方式传递的参数,可以使用如下方式获取:
url(r'^example/(?P<a>[a-z]+)/(?P<b>\d{4})/$', views.example), def example(request, a, b): print('a=%s' % a) print('b=%s' % b) return HttpResponse('OK')
如果是表单类型传递,则利用下面的代码:
def get_body(request): a = request.POST.get('a') b = request.POST.get('b') print(a) print(b) return HttpResponse('OK')