热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:网编并发mysql基础题

篇首语:本文由编程笔记#小编为大家整理,主要介绍了网编并发mysql基础题相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了网编并发mysql基础题相关的知识,希望对你有一定的参考价值。



Python面试重点(进阶篇)

注意:只有必答题部分计算分值,补充题不计算分值。


第一部分 必答题



  1. 简述 OSI 7层模型及其作用?(2分)

    应用层(七层)
    表示层(六层)
    会话层(五层)
    传输层(四层)     端口 UDP TCP   四层交换机 四层路由器
    网络层(三层)     ipv4 ipv6协议 路由器 三层交换机
    数据链路层(二层) mac arp协议   网卡 (二层)交换机
    物理层(一层)


  2. 简述 TCP三次握手、四次回收的流程。(3分)



    • 第一次:客户端发送初始序号x和syn=1请求标志



    • 第二次:服务器发送请求标志syn,发送确认标志ACK,发送自己的序号seq=y,发送客户端的确认序号ack=x+1



    • 第三次:客户端发送ACK确认号,发送自己的序号seq=x+1,发送对方的确认号ack=y+1



    • 第一次挥手:客户端发出释放FIN=1,自己序列号seq=u,进入FIN-WAIT-1状态



    • 第二次挥手:服务器收到客户端的后,发出ACK=1确认标志和客户端的确认号ack=u+1,自己的序列号seq=v,进入CLOSE-WAIT状态



    • 第三次挥手:客户端收到服务器确认结果后,进入FIN-WAIT-2状态。此时服务器发送释放FIN=1信号,确认标志ACK=1,确认序号ack=u+1,自己序号seq=w,服务器进入LAST-ACK(最后确认态)



    • 第四次挥手:客户端收到回复后,发送确认ACK=1,ack=w+1,自己的seq=u+1,客户端进入TIME-WAIT(时间等待)。客户端经过2个最长报文段寿命后,客户端CLOSE;服务器收到确认后,立刻进入CLOSE状态。





  3. TCP和UDP的区别?(3分)

    TCP是面向连接的,TCP提供可靠的服务,面向字节流的,实际上是TCP把数据看成一连串无结构的字节流;通过TCP连接传输的数据不会丢失,没有重复,并且按顺序到达,

    UDP是无连接的即时通讯工具,不可靠性,UDP是面向报文的。



  4. 什么是黏包?(2分)

    当多条消息发送时接受变成了一条或者出现接收不准确的情况



  5. 什么 B/S 和 C/S 架构?(2分)

    C:client 客户端

    S:server 服务端

    B:browser 浏览器

    S:server 服务端



  6. 请实现一个简单的socket编程(客户端和服务端可以进行收发消息)(3分)

    import socket
    sk = socket.socket()
    sk.bind((‘0.0.0.0‘,9001))
    sk.listen()
    ?
    conn,addr = sk.accept()
    conn.send(b"hello")

    import socket
    sk = socket.socket()
    sk.connect((‘0.0.0.0‘,9001))
    msg = sk.recv(1024)

     



  7. 简述进程、线程、协程的区别?(3分)

    进程:一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所以进程间数据不共享,开销大。

    线程: 调度执行的最小单位,也叫执行路径,不能独立存在,依赖进程存在一个进程至少有一个线程,叫主线程,而多个线程共享内存(数据共享,共享全局变量),从而极大地提高了程序的运行效率。

    协程:是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。 协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

     



  8. 什么是GIL锁?(2分)

    全局解释器锁.同一时刻保证一个进程中只有一个线程可以被cpu调度

     



  9. 进程之间如何进行通信?(2分)

    Queue和Pipe这两种方式,Queue用于多个进程间实现通信,Pipe是两个进程的通信



  10. Python如何使用线程池、进程池?(2分)

    from concurrent.futures import ThreadPoolExecutor
    ?
    from concurrent.futures import ProcessPoolExecutor


  11. 请通过yield关键字实现一个协程? (2分)



  12. 什么是异步非阻塞? (2分)

    在此种模式下,用户进程只需要发起一个IO操作然后立即返回,等IO操作真正的完成以后,应用程序会得到IO操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的IO读写操作,因为真正的IO读取或者写入操作已经由内核完成了。



  13. 什么是死锁?如何避免?(2分)

    2个线程互相等待对方的锁,互相占用着资源不释放。

    为程序中的每一个锁分配一个唯一的id,然后只允许按照升序规则来使用多个锁



  14. 程序从flag a执行到falg b的时间大致是多少秒?(2分) 1

    import threading
    import time
    def _wait():
    time.sleep(60)
    # flag a
    t = threading.Thread(target=_wait)
    t.setDeamon(False)
    t.start()
    # flag b


  15. 程序从flag a执行到falg b的时间大致是多少秒?(2分)1

    import threading
    import time
    def _wait():
    time.sleep(60)
    # flag a
    t = threading.Thread(target=_wait)
    t.setDeamon(True)
    t.start()
    # flag b


  16. 程序从flag a执行到falg b的时间大致是多少秒?(2分) 60

    import threading
    import time
    def _wait():
    time.sleep(60)
    # flag a
    t = threading.Thread(target=_wait)
    t.start()
    t.join()
    # flag b


  17. 读程序,请确认执行到最后number是否一定为0(2分) 一定为0

    import threading
    loop = int(1E7)
    def _add(loop:int = 1):
    global number
    for _ in range(loop):
    number += 1
    def _sub(loop:int = 1):
    global number
    for _ in range(loop):
    number -= 1
    number = 0
    ta = threading.Thread(target=_add,args=(loop,))
    ts = threading.Thread(target=_sub,args=(loop,))
    ta.start()
    ta.join()
    ts.start()
    ts.join()


  18. 读程序,请确认执行到最后number是否一定为0(2分)不一定

    import threading
    loop = int(1E7)
    def _add(loop:int = 1):
    global number
    for _ in range(loop):
    number += 1
    def _sub(loop:int = 1):
    global number
    for _ in range(loop):
    number -= 1
    number = 0
    ta = threading.Thread(target=_add,args=(loop,))
    ts = threading.Thread(target=_sub,args=(loop,))
    ta.start()
    ts.start()
    ta.join()
    ts.join()


  19. mysql常见数据库引擎及区别?(3分)

    InnoDB、MyISAM和MEMORY

    1、事务安全:

    InnoDB支持事务安全,MyISAM和MEMORY两个不支持。

    2、存储限制:

    InnoDB有64TB的存储限制,MyISAM和MEMORY要是具体情况而定。

    3、空间使用:

    InnoDB对空间使用程度较高,MyISAM和MEMORY对空间使用程度较低。

    4、内存使用:

    InnoDB和MEMORY对内存使用程度较高,MyISAM对内存使用程度较低。

    5、插入数据的速度:

    InnoDB插入数据的速度较低,MyISAM和MEMORY插入数据的速度较高。

    6、对外键的支持:

    InnoDB对外键支持情况较好,MyISAM和MEMORY两个不支持外键。



  20. 简述事务及其特性? (3分)

    事务应该具有4个属性:原子性、一致性、隔离性、持续性。



  21. 事务的隔离级别?(2分)

    一个事务的执行不能被其他事务干扰。



  22. char和varchar的区别?(2分)

    char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的



  23. mysql中varchar与char的区别以及varchar(50)中的50代表的含义。(2分)

    char所占的长度依然为10,除了字符‘’外,后面用空格补全

    而varchar就立马把长度变为数据长度了



  24. MySQL中delete和truncate的区别?(2分)

    delete可以条件删除数据,而truncate只能删除表的所有数据

    delete效率低于truncate,delete是一行一行地删除,truncate会重建表结构



  25. where子句中有a,b,c三个查询条件, 创建一个组合索引abc(a,b,c),以下哪种会命中索引(3分) 没看懂(等于不会)

    (a)
    (b)
    (c)
    (a,b)
    (b,c)
    (a,c)
    (a,b,c)


  26. 组合索引遵循什么原则才能命中索引?(2分) 不会



  27. 列举MySQL常见的函数? (3分)

    count() max() min() sum() avg()



  28. MySQL数据库 导入、导出命令有哪些? (2分)

    mysqldump -u用户名 -p 数据库名 > 数据库名.sql

    mysql -u用户名 -p 数据库名 <数据库名.sql

     



  29. 什么是SQL注入?(2分)

    SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。



  30. 简述left join和inner join的区别?(2分)

    left join以左表为准

    inner join 选两张表都有的



  31. SQL语句中having的作用?(2分)

    过滤筛选



  32. MySQL数据库中varchar和text最多能存储多少个字符?(2分)



  33. MySQL的索引方式有几种?(3分)



  34. 什么时候索引会失效?(有索引但无法命中索引)(3分)



  35. 数据库优化方案?(3分)



  36. 什么是MySQL慢日志?(2分)



  37. 设计表,关系如下: 教师, 班级, 学生, 科室。(4分) 科室与教师为一对多关系, 教师与班级为多对多关系, 班级与学生为一对多关系, 科室中需体现层级关系。

    1. 写出各张表的逻辑字段
    2. 根据上述关系表
      a.查询教师id=1的学生数
      b.查询科室id=3的下级部门数
      c.查询所带学生最多的教师的id


  38. 有staff表,字段为主键Sid,姓名Sname,性别Sex(值为"男"或"女"),课程表Course,字段为主键Cid,课程名称Cname,关系表SC_Relation,字段为Student表主键Sid和Course表主键Cid,组成联合主键,请用SQL查询语句写出查询所有选"计算机"课程的男士的姓名。(3分)



  39. 根据表关系写SQL语句(10分)

     



    • 查询所有同学的学号、姓名、选课数、总成绩;



    • 查询姓“李”的老师的个数;



    • 查询平均成绩大于60分的同学的学号和平均成绩;



    • 查询有课程成绩小于60分的同学的学号、姓名



    • 删除学习“叶平”老师课的score表记录;



    • 查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分;



    • 查询每门课程被选修的学生数;



    • 查询出只选修了一门课程的全部学生的学号和姓名;



    • 查询选修“杨艳”老师所授课程的学生中,成绩最高的学生姓名及其成绩;



    • 查询两门以上不及格课程的同学的学号及其平均成绩;





 


第二部分 补充题



  1. 什么是IO多路复用?



  2. async/await关键字的作用?



  3. MySQL的执行计划的作用?



  4. 简述MySQL触发器、函数、视图、存储过程?



  5. 数据库中有表:t_tade_date

    id tade_date
    1 2018-1-2
    2 2018-1-26
    3 2018-2-8
    4 2018-5-6
    ...
    输出每个月最后一天的ID


  6.  




推荐阅读
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 在List和Set集合中存储Object类型的数据元素 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 在重新安装Ubuntu并配置Django和PyCharm后,忘记测试MySQL连接,导致在后续配置过程中遇到错误:ERROR 2003 (HY000) - 无法连接到本地服务器 ‘127.0.0.1’ (111)。本文将详细介绍该错误的原因及解决步骤,帮助用户快速恢复MySQL服务的正常运行。我们将从检查网络配置、验证MySQL服务状态、配置防火墙规则等方面入手,提供全面的故障排除指南。 ... [详细]
  • 如何使用mysql_nd:Python连接MySQL数据库的优雅指南
    无论是进行机器学习、Web开发还是爬虫项目,数据库操作都是必不可少的一环。本文将详细介绍如何使用Python通过 `mysql_nd` 库与 MySQL 数据库进行高效连接和数据交互。内容涵盖以下几个方面: ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
author-avatar
门前西瓜飘乐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有