zoukankan      html  css  js  c++  java
  • python面试题-1

    1.Tcp 协议和 udp 协议有什么区别?

      (1)TCP 面向连接(如打电话要先拨号建立连接);UDP 是无连接的,即发送数据之前不需要建立连接。
      (2)每一条 TCP 连接只能是点到点的;UDP 支持一对一,一对多,多对一和多对多的交互通信。
      (3)TCP 首部开销 20 字节;UDP 的首部开销小,只有 8 个字节。
      (4)TCP 的逻辑通信信道是全双工的可靠信道,UDP 则是不可靠信道。

      2.Post 和 get 区别?

      (1)GET 请求的数据会暴露在地址栏中,而 POST 请求则存在表单中提交所以 post 相对安全。
      (2)post 传输数据比 get 大。
      (3)post 比 get 安全。

      3.cookie 和 session 的区别?

      (1)cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
      (2)cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE欺骗考虑到安全应当使用 session。
      (3)session 会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能考虑到减轻服务器性能方面,应当使用 COOKIE。
      (4)单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。
      (5)建议:将登陆信息等重要信息存放为 SESSION其他信息如果需要保留,可以放在 COOKIE 中。

      4.什么是僵尸进程和孤儿进程,怎么避免僵尸进程?

      (1)孤儿进程:父进程退出,子进程还在运行的这些子进程都是孤儿进程,孤儿进程将被会被其它进程收养,不会造成影响。
      (2)僵尸进程:子进程退出,而父进程迟迟不回收,造成资源浪费。
      (3)避免僵尸进程的方法:1.fork 两次用孙子进程去完成子进程的任务。2.用 wait()函数使父进程阻塞。

          5.scrapy 和 scrapy-redis 有什么区别?

      答:scrapy 是一个 Python 爬虫框架,爬取效率极高,具有高度定制性,但是不支持分布式。而 scrapy-redis 一套基于 redis 数据库、运行在 scrapy 框架之上的组件,可以让scrapy 支持分布式策略,Slaver 端共享 Master 端 redis 数据库里的 item 队列、请求队列和请求指纹集合。

        6.描述下 scrapy 框架运行的机制?

      答:从 start_urls 里获取第一批 url 并发送请求,请求由引擎交给调度器入请求队列,获取完毕后,调度器将请求队列里的请求交给下载器去获取请求对应的响应资源,并将响应交给自己编写的解析方法做提取处理:1. 如果提取出需要的数据,则交给管道文件处理;2. 如果提取出url,则继续执行之前的步骤(发送url请求,并由引擎将请求交给调度器入队列...),直到请求队列里没有请求,程序结束。

       7.Post 和 get 区别和应用场合?

      区别:

      Get:从指定的服务器中获取数据。GET 请求能够被缓存;GET 请求会保存在浏览器的浏览记录中;以 GET 请求的URL能够保存为浏览器书签;GET 请求有长度限制;GET 请求主要用以获取数据。

      Post:POST 请求不能被缓存下来;POST 请求不会保存在浏览器浏览记录中; POST 请求的 URL 无法保存为浏览器书签;POST 请求没有长度限制;POST 请求会把请求的数据放置在HTTP 请求包的包体中,POST 的安全性比 GET的高。可能修改变服务器上的资源的请求

      应用场合:

      post:请求的结果有持续性的副作用(数据库内添加新的数据行)若使用 GET 方法,则表单上收集的数据可能让 URL 过长。要传送的数据不是采用 7 位的 ASCII 编码。

      get:请求是为了查找资源,HTML表单数据仅用来帮助搜索。请求结果无持续性的副作用。收集的数据及 HTML 表单内的输入字段名称的总长不超过 1024 个字符。

       8.说一下 mysql 数据库存储的原理?

      储存过程是一个可编程的函数,它在数据库中创建并保存。它可以有 SQL 语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。存储过程通常有以下优点:

      a、存储过程能实现较快的执行速度。

      b、存储过程允许标准组件是编程。

      c、存储过程可以用流程控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

      d、存储过程可被作为一种安全机制来充分利用。

      e、存储过程能够减少网络流量。

      9.数据库索引

      数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B_TREE。B_TREE 索引加速了数据访问,因为存储引擎不会再去扫描整张表得到需要的数据;相反,它从根节点开始,根节点保存了子节点的指针,存储引擎会根据指针快速寻找数据。

      10.数据库优化方案

      优化索引、SQL 语句、分析慢查询

      设计表的时候严格根据数据库的设计范式来设计数据库

      使用缓存,把经常访问到的数据而且不需要经常变化的数据放在缓存中,能节约磁盘 IO

      优化硬件;采用 SSD,使用磁盘队列技术(RAID0,RAID1,RDID5)等;

      采用MySQL内部自带的表分区技术,把数据分层不同的文件,能够提高磁盘的读取效率

      垂直分表;把一些不经常读的数据放在一张表里,节约磁盘 I/O

      主从分离读写;采用主从复制把数据库的读操作和写入操作分离开来

      分库分表分机器(数据量特别大),主要的的原理就是数据路由

      选择合适的表引擎,参数上的优化

      进行架构级别的缓存,静态化和分布式

      不采用全文索引

      采用更快的存储方式,例如 NoSql 存储经常访问的数据。

      11.数据库怎么优化查询效率?

      1、储存引擎选择:如果数据表需要事务处理,应该考虑使用 InnoDB,因为它完全符合 ACID 特性。如果不需要事务处理,使用默认存储引擎 MyISAM 是比较明智的

      2、分表分库,主从。

      3、对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引

      4、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

      5、应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描

      6、应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描

      7、Update 语句,如果只更改 1、2 个字段,不要 Update 全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志

      8、对于多张大数据量(这里几百条就算大了)的表 JOIN,要先分页再 JOIN,否则逻辑读会很高,性能很差。

  • 相关阅读:
    饿了么ElementUI table遇到的问题
    Window命令行杀进程
    网络监控流量工具
    记一次Linux系统被入侵的过程
    sftp ftp文件同步方案
    清除oracle归档日志
    TCP连接复用
    Sftp搭建与配置参考
    setfacl命令
    tips
  • 原文地址:https://www.cnblogs.com/yblackd/p/12141786.html
Copyright © 2011-2022 走看看