Skip to content

网络编程杂七杂八知识点整理

Posted in 未分类

1.socket相关:

创建socket的参数:domain(我用的是根据主机名和服务名且适合任何协议族的地址),type(我用的steam TCP),protocol(默认和type匹配)

getaddressinfo,bind:把一个地址族中的特定地址赋给socket

socket阻塞与非阻塞,同步与异步:

同步异步指客户端:所谓同步,就是在c端发出一个功能调用时,在没有得到结果之前,该调用就不返回。异步的概念和同步相对。当c端一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

阻塞非阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起,非阻塞在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回(轮询,select)

正向代理,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。此时正向代理表现的像一个客户端,请求资源,返回数据。

反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器,代理请求。

2. python 中 tuple 和 list 有什么区别

tuple不可以修改,但可以拼接 使用+操作符

tuple不可以删除特定元素,但可以删除整个tuple ,使用del tuple

tuple 方法只有index() 和 count()

3. xrange() 函数用法与 range 完全相同,所不同的是生成的不是一个数组,而是一个生成器。在Python3,range()函数去除了,而 xrange()已更名为 range()。

4. 关于线程池

线程过多会带来调度开销,所以在线程池同时维护多个线程,等待管理者分配任务,限制线程数量(cpu+2最好),减少创建和销毁线程的开销。管理一个工作队列,一个线程队列,池中的线程等待队列中的任务,完成的任务放入完成队列。实现方法之一是生产者消费者模式,同步层的主线程处理工作任务并存入工作队列,工作线程从工作队列取出任务进行处理,如果工作队列为空,则取不到任务的工作线程进入挂起状态。

C++实现: 开源库Boost.Threadpool

boost::threadpool::prio_pool tp;  建线程池

tp += boost::threadpool::prio_task_func(5,   &normal_task); //执行函数

python实现:

t_pool = ThreadPool(8)
while True:
conn1,addr = server.accept()
t_pool.apply_async(work_thread, args=(conn1,))

5. Django 部分

makemigrations,用来检测数据库变更和生成数据库迁移文件。

migrate,用来迁移数据库。

sqlmigrate,用来把数据库迁移文件转换成数据库语言

自动补全app名

ORM:

object->sql部分逻辑是

object->得到表名,字段名,和值

格式化到 insert into 表 (字段) values (值) 并执行

在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。例如:模型类BookInfo –映射到–> 数据表bookinfo。使数据库设计更加简单

核心思想: 用面向对象的方式去操作数据库的创建表、增加、修改、删除、查询等操作。把面向对象中的类和数据库表一一对应,通过操作类和对象,对数据表实现数据操作

db – models -query -deletion – aggregates (用于组合sql字段模版) -complier(sql语句组合)

常用ORM语句:

order = Order.objects.all() /。get()

模块manager是一个对象,Django模块通过它进行数据库查询。 每个Django模块至少有一个manager,你可以创建自定义manager以定制数据库访问。

is_valid()函数方法,用于检查表单提交是否正确。

Django取消级联删除

user = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)

django 数据模型中 null=True 和 blank=True的区别

  • null 是针对数据库而言,如果 null=True, 表示数据库的该字段可以为空,即在Null字段显示为YES。
  • blank 是针对表单的,如果 blank=True,表示你的表单填写该字段的时候可以不填,但是对数据库来说,没有任何影响

session?

在客户端的cookies中我们只保存session id,而将完整信息以加密信息的形式保存到服务器端,这样服务器可以根据session id相对安全的在数据库中查询用户的更细致的信息和状态。

One Comment

  1. monian
    monian

    (  ̄▽ ̄)σ涉及的真多啊

    2019年4月15日
    |Reply

发表评论

电子邮件地址不会被公开。