面试题1
1. 为什么做前后端分离?
前后职责分离
前端倾向于呈现,着重处理用户体验相关的问题;后端则倾向于业务逻辑、数据处理和持久化等。
在设计清晰的情况下,后端只需要以数据为中心对业务处理算法负责,并按约定为前端提供 API 接口;而前端使用这些接口对用户体验负责。
前后技术分离
前端可以不用了解后端技术,也不关心后端具体用什么技术来实现,只需要会 HTML/CSS/Java 就能入手。
而后端只需要关心后端开发技术,除了省去学习前端技术的麻烦,连 Web 框架的学习研究都只需要关注 Web API 就好。
而不用去关注基于页面视图的 MVC 技术(并不是说不需要 MVC,Web API 的接口部分的数据结构呈现也是 View),不用考虑特别复杂的数据组织和呈现。
用户体验和业务处理解耦
前端可以根据用户不同时期的体验需求迅速改版,后端对此毫无压力。同理,后端进行的业务逻辑升级,数据持久方案变更,只要不影响到接口,前端可以毫不知情。
当然如果需求变更引起接口变化的时候,前后端又需要坐在一起同步信息了。
可以分别归约两端的设计
后端只提供 API 服务,不考虑页面呈现的问题。实现 SOA 架构的 API 可以服务于各种前端,而不仅仅是 Web 前端,可以做到一套服务,各端使用。
同时对于前端来说,不依赖后端技术的前端部分可以独立部署,也可以应用于 Hybrid 架构,嵌入各种“壳”(比如 Electron、Codorva 等),迅速实现多终端。
2. rest framework作用?
3. 简述Http协议?
4. 列举rest framework组件?
5. restful 规范?
6. content-type请起头的作用?
用于告知服务端,客户端发送的请求体数据格式。
Content-Typeapplication/x-www-form-urlencoded:
请求体格式:phone=8615131255555&password=asdfasdfasdf&oneMonth=1
Content-Type: application/json;charset=UTF-8
请求体格式:{"BaseRequest":{"Uin":981579400,"Sid":"h9kV51dfCuwJy9SX","Skey":"@crypt_2ccf8ab9_edc3756c6a6adef29051ab1ae52c6cb6","DeviceID":"e037891563571357"},"Msg":{"Type":1,"Content":"test","FromUserName":"@3fd34d9c325790b34948028adc36a31f","ToUserName":"@6ba3ce1e58cfb403c9adaf8053e82e79","LocalID":"15336944955110060","ClientMsgId":"15336944955110060"},"Scene":0}
扩展:user-agent请求头?
7. django content-type组件的作用?
解决一张表和多张表做FK关联的问题。
8. 哪里使用过面向对象的封装?
class BaseRequest(object):
def __init__(self):
self.code = ..
self.data =
self.error = ...
...
def dict()
obj = BaseRequest()
obj.__dict__
9. 视图要写
- try
- 注释
- 建明之一
10. ORM
a. FK正向和反向操作
class A:
name = ..;.
clas B:
a = FK(A,related_name='xxxx')
title = ...
class C:
a = FK(A)
age = ...
b. O2O的正向和反向操作
class A:
name = ..;.
class B:
a = O2O(A)
age = ...
c. 补充:models.User.objects.filter(xx__isnull=True)
class 部门用户表:
title = ..;.
clas 用户表:
p = FK(A,related_name='xxxx')
name = ...
modes.用户表.objects.filter('name','p__title')
modes.部门用户表.objects.filter('title','用户表__name',表__isnull=False)
注意:
1. left join和inner join的区别?
2. left join是表在前和在后请求不一样?