您的位置:首页 > 理论基础 > 计算机网络

面试问题汇总(计算机网络,数据库,python编程题)

2020-03-29 12:19 891 查看

前端 / 计算机网络

  1. cookie 和 session 区别,既然 session 比 cookie 更好,那只用 session 可以吗?
    常用的会话跟踪技术是Cookie与Session
    Cookie通过在客户端记录信息确定用户身份 , Cookie机制是通过检查客户身上的“通行证”来确定客户身份
    Session通过在服务器端记录信息确定用户身份, Session机制就是通过检查服务器上的“客户明细表”来确认客户身份
    不能只有session,应用场景不同,安全性高的需要用session,不想影响服务器性能的,或者没有必要用session的(用户登陆)用cookies。

  2. http 缓存知道吗?
    浏览器第一次向一个web服务器发起http请求后,服务器会返回请求的资源,并且在响应头中添加一些有关缓存的字段如:Cache-Control、Expires、Last-Modified、ETag、Date等等。之后浏览器再向该服务器请求该资源就可以视情况使用强缓存协商缓存更多

  3. keep-alive (Http长连接)
    HTTP 协议的 长连接 意图在于连接复用,在同一个连接上串行方式传递请求-响应数据,通过设置HTTP的Connection Header来决定的,而且是需要两边都设置才有效。http1.1默认长连接。

    长连接并不是永久连接的。如果一段时间内没有请求,这个长连接就会被关闭。具体的是可以在header当中配置参数: keepalive_timeout,Content-Length,Transfer-Encoding传输编码。

  4. STP和SMTP的区别
    SMTP:简单邮件传输协议
    STP: 交换机与交换机物理上连接成一个环路的技术。

  5. 输入 url 到页面呈现的过程

    1、输入网址
    2、浏览器查找域名的 IP 地址(DNS域名解析)
    3、TCP连接
    4、浏览器向 web 服务器发起一个http请求
    5、服务器处理请求,并返回响应报文
    6、浏览器展示HTML(浏览器页面渲染)
    7、断开TCP连接

  6. 拿到 http 响应后,怎么渲染页面,html 的组成,js、css 这些静态文件是存在哪里?
    1、解析文档构建DOM树(三个部分:HTML/XHTML/SVG,CSS,JavaScript)
    2、构建渲染树
    3、布局与绘制渲染树
    HTML{head{<title></title> 网页的标题meta 代表 "元信息",用来说明网页自身的信息Body区域放各种标签,标签内放各种内容 \text{HTML}\begin{cases}\\\text{head}\begin{cases}\text{<title></title> 网页的标题}\\\text{meta 代表 "元信息",用来说明网页自身的信息}\end{cases}\\\text{Body区域放各种标签,标签内放各种内容}\end{cases} HTML⎩⎪⎨⎪⎧​head{<title></title> 网页的标题meta 代表 "元信息",用来说明网页自身的信息​Body区域放各种标签,标签内放各种内容​

  7. 服务端有很多服务,关于 http、ftp 等等,怎么知道你发的是 http 请求,我要响应的是 http 请求
    通过端口号:

      HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080
    • HTTPS服务器,默认的端口号为443/tcp 443/udp
    • FTP(文件传输)协议代理服务器常用端口号:21
    • Telnet(远程登录)协议代理服务器常用端口:23
  8. 客户端向服务器发一个 1kb 数据,怎么保证是无损传输
    (答 tcp 保证可靠传输,超时重传和 seq/ack 机制)

  9. 一个 tcp 链接最多能同时发多少个 http 请求(可能是这个问题,记不清,又引申到高并发)

操作系统

  1. 进程与线程的区别,高并发和并行,进程之间的通信方式,线程间的通信方式;
    看这里

  2. 死锁,四个必要条件,怎么避免

    条件破坏该条件
    互斥条件不可破坏
    请求与保持条件第一种方法静态分配即每个进程在开始执行时就申请他所需要的全部资源
    第二种是动态分配即每个进程在申请所需要的资源时他本身不占用系统资源。
    不可剥夺条件一个进程不能获得所需要的全部资源时便处于等待状态
    循环等待条件采用资源有序分配,将系统中的所有资源顺序编号,将紧缺的,稀少的资源采用较大的编号(一个进程只有获得较小编号的进程才能申请较大编号的进程)

    更多看这个

Linux

  1. linux 命令讲一下,打印某个进程查询出来的第二列(pid)
  2. 查找关键字的错误(grep)
  3. linux下怎么查看文件权限
  4. linux下怎么查看线程ID
  5. 用过vim吗
  6. 查看进程状态用用什么?查看电脑内存占有率用什么?

数据库

  1. 事务是什么,什么情况用到事务
    事务是一个不可分割的工作逻辑单元 ,适用于多用户同时操作的数据通信系统。例如:订票、银行转账。一个事务可能有多个sql,必须作为一个整体执行。要么都执行、要么都不执行。
    ACID ↓
    原子性:事务是最小的单位,不可分割
    一致性 :事务要求,同一事务中SQL语句,必须同时成功或同时失败
    隔离性:事务1和事务2之间具有隔离性
    持久性:事务一旦结束(commit,rollback),就不可返回

  2. 主键和外键
    主键:唯一地标识表中的每一行
    外键:外键是相对于主键说的,是用于建立表之间 的联系,外键作主关键字的表被称为主表,具有 此外键的表被称为主表的从表。用于与另一张表的关联。

    比如这里有两张,user(用户)表和qx(权限)表,user中gid是用户权限id,而gid是依赖于qx中的id。那么qx中的id就是user的外键。

  3. Mysql的行锁和表锁( 锁是计算机协调多个进程或纯线程并发访问某一资源的机制)

  4. 什么时候行锁:增删改查时匹配的条件字段带有索引时,innodb才会使用行级锁

  5. 积极锁,消极锁

  6. Mysql 2种存储引擎
    MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。

    MyISAM特点:不支持行锁,不支持事务;不支持外键

    InnoDB(MySQL的默认数据库引擎):不支持全文索引

  7. Mysql默认配置文件名:my.cnf

  8. SQL Server和MySQL的区别

      本质区别是它们所遵循的基本原则
      MySQL服务器是开放的、可扩展的存储引擎:MyISAM,Heap, InnoDB
      SQL:Sybase引擎
  9. 查询速度太慢怎么优化和排查?数据量大的话,切分表是怎么切分的? 不会

针对偶尔很慢的情况
(1)、数据库在刷新脏页,例如 redo log 写满了需要同步到磁盘。
(2)、执行的时候,遇到锁,如表锁、行锁。
一直都这么慢的情况
可能没有用上索引
内存不足
查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)
优化查询方法
纵向、横向分割表,减少表的尺寸(sp_spaceuse)
选择最有效率的表名顺序
WHERE子句中的连接顺序
  1. SQL的四个组成部分:

    (1)数据定义语言,即SQL DDL,用于定义SQL模式、基本表、视图、索引等结构。

    (2)数据操纵语言,即SQL DML。数据操纵分成数据查询和数据更新两类。

    (3)数据查询语言,即SQL DQL。

    (4)数据控制语言,即SQL DCL,这一部分包括对基本表和视图的授权、完整性规则的描述、事务控制等内容。

  2. 索引的数据结构:B-/+ tree
    怎么样知道使用了索引:explain + SQL语句

Python

怎么在系统里同时管理python2和python3
.在一个工程里需要import很多包,当不同文件需要导入同一个包的不同版本该怎么办
7.Python怎么定义全局变量
8.Python的多线程是怎么实现的
快排与其他排序算法相比的优势是什么

编程题:

  1. 斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
    改编题:[上台阶] 有n个台阶,上楼可以一步上 1 阶,也可以一步上 2 阶,问多少种走法
    动态规划

    def fab_2(n):
    # 由前往后推
    a = 1
    b = 1
    if n <= 2:
    print('fab({})={}'.format(n, b))
    return 1
    for i in range(n - 2):
    print(a, b)
    a, b = b, a + b
    print('fab({})={}'.format(n, b))
    return b
  2. 判断两个数组中是否存在相同的数字,两个已经排好序的数组,写代码判断这两个数组中是否存在相同的数字?要求时间复杂度越低越好。
    初始化两个下标,分别从两个数组的第一个元素开始,比较当前两个元素的大小,将较小元素的下标加一,如果有相同的数字,则返回True,如果直到数组末尾还没有相同的数字出现,则返回False。O(2n)

    def findSameNum(a,b):
    i = j = 0
    while i <= len(a) and j <= len(b):
    if a[i] == b[j]
    return True
    elif a[i] > b[j]:
    j += 1
    else:
    i+=1
    return False
  3. 找出一个字符串中所有回文子串(长度 >=3,长度为奇数的),并记录他的起始位置(暴力)

  4. python 用最简单的方式输出[as1,as2,as3,…,as1000]

    print '\n'.join(map(lambda x:str(x),range(1,1000)))

  5. 100层楼扔鸡蛋,最快速度找出,哪层是鸡蛋碎的临界点

    x+(x-1)+…+1=100 => 1/2(x(x+1))

  6. 网格中的路径规划问题
    有一个二维数组,row=2,col=n(要求输入),"." 表示可以走,“X” 表示障碍物,问从左上角走到右下角有多少条路。方式:只能→,↗,↘
    还是动态规划

  7. 统计一个字符串中字母、数字及其他字符的个数 和 各个字符的总数

    s = input()
    num, char, space, d = 0, 0, 0, 0     # 分别统计数字、字母、空格、其他字符个数
    for i in s:
    if i.isdigit():
    num = num + 1
    elif i.isalpha():
    char = char + 1
    elif i == ' ':
    space = space + 1
    else:
    d = d + 1
    print(num, char, space, d)
  • 点赞
  • 收藏
  • 分享
  • 文章举报
bingolina 发布了30 篇原创文章 · 获赞 0 · 访问量 1160 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: