面试题--02

粘包问题

        粘包问题是在TCP协议下,发送方发送的多个数据包在接收方接收时,数据之间没有明确的分界线,导致接收方无法正确区分每个数据包,从而无法正确读取数据

解决办法:

        1、服务器和客户端提前协商好每个消息的长度,不足的部分用空白字符补足。

        2、特殊结束符:双方协商定义一个特殊的分隔符,只要没有收到分隔符就意味着一条数据没有结束。

        3、由服务器开发者提供固定格式的协议标准,双方都按照协议进行发送和接收数据。

正向代理和反向代理

        正向代理,主要是代理客户端,隐藏客户端的信息。当一个客户端想要访问某个服务器时,它会先将请求发送到正向代理服务器,由正向代理服务器去请求目标服务器。在这个过程中,目标服务器并不知道真正的客户端是谁,它只知道请求来自正向代理服务器。通过它可以实现访问限制、提高访问速度以及隐藏客户端IP等功能。

        反向代理则是代理服务器端,隐藏服务器的信息。当客户端发送请求时,它会直接发送到反向代理服务器,然后由反向代理服务器去请求真正的服务器。在这个过程中,客户端并不知道真正的服务器是谁,可以通过它可以实现负载均衡、提高访问速度、防止恶意攻击等功能。

OSI七层协议

OSI模型是一个开放性的通信系统互连参考模型,它定义了网络通信的七层结构

        1、应用层:这是网络服务与最终用户的一个接口。应用层负责处理用户输入的命令和数据,并将其转换为网络协议可以识别的格式。

        2、表示层:表示层主要负责数据的表示、安全、压缩等。它会在发送方将数据转换为适合网络传输的格式,并在接收方将数据还原为原始格式。

        3、会话层:会话层负责建立、管理、终止会话,会话层给表示层提供服务

        4、传输层:传输层负责定义传输数据的协议端口号,以及流控和差错校验。常见的传输层协议有TCP和UDP。

        5、网络层:网络层负责提供连通性和路径的选择。它会在发送方将数据分组,并选择最佳路径将数据包发送到接收方。常见的网络层协议有IP、ICMP、IGMP等。

        6、数据链路层:数据链路层负责在物理链路上可靠地传输数据。它会在发送方将数据封装成帧,并在接收方进行差错校验和流量控制。

        7、物理层:物理层是OSI模型的最底层,负责建立、维护、断开物理连接。

数据库优化

原因:1、系统的吞吐量瓶颈往往出现在数据库的访问速度上随着应⽤程序的运⾏

           2、数据库的中的数据会越来越多,处理时间会相应变慢

           3、数据是存放在磁盘上的,读写速度⽆法和内存相⽐,

措施:

1、将字段很多的表分解成多个表,对于字段较多的表,如果有些字段的使⽤频率很低,可以将这些字段分离出来形成新表

2、需要经常联合查询的表,可以建⽴中间表以提⾼查询效率。

3、设计数据表时应尽量遵循范式理论的规约,尽可能的减少冗余字段,让数据库设计看起来精致、优雅。但是,合理的加⼊冗余字段可以提⾼查询速度

如何提高项目的并发量

可以从前端、后端、数据库、网络架构等多个方面进行优化

前端优化:

        1、使用CDN(内容分发网络)来分发JS、CSS、图片等,减少用户访问时的延迟                2、对图片进行优化,比如将多个小图片合并成一个大图,减少图片请求的次数。

        3、使用前端缓存。

后端优化:1、避免锁表操作,减少数据库访问的冲突

                  2、使用缓存技术

                  3、优化数据库查询语句,提高查询效率。

网络架构优化:1、使用高性能的Web服务器,提高处理请求的能力。

                          2、使用消息队列技术,将请求异步处理,提高系统的响应速度。

                          3、采用读写分离技术

                          4、使用分布式数据库技术,将数据分散到多个数据库服务器上存储和查询,提高数据的并发访问能力。

除了以上方法外,还可以考虑从代码层面进行优化,如使用异步编程技术、减少IO操作

排查用django查询数据库速度缓慢

1.先从程序排查: 保证数据库的操作语句不在循环体下面,核心就是减少和数据库的io操作

2.从数据库出发: 在程序不存在第一种情时,在orm查询数据库的时候,对查询条件字段在数据库种添加索引,提高该字段的查询效率

3.从数据库到程序,添加redis缓存库,原理即程序查询数据库会先进去redis缓存,如果缓存中存在,则直接返回数据,如果缓存中没有,才会进去mysql查询数据并加入缓存再返回结果给程序

并发与并行、同步与异步、阻塞和非阻塞

        并行:计算指的是在同一时刻,多个任务在多核处理器上同时进行。

        并发:是一段时间内看起来是是同时运行。在单线程模型中,每个任务执行一小段时间后,会切换到下一个任务,由于切换速度非常快,给用户的感觉是这些任务在同时运行。但实际上,在某一具体时刻,只有一个任务在执行。

        同步是指一个任务发出请求后,必须等待系统响应后才能继续执行后续的任务。在等待期间,任务会阻塞,不会执行其他任何工作。

        异步操作是指一个任务发出请求后,不必等待系统响应就可以继续执行后续的任务。系统处理完请求后,会通过某种方式通知任务。

        阻塞是指当一个线程或进程等待某个操作完成时,它不能做其他任何事情。

        非阻塞指线程或进程在执行某项操作时,不会挂起或等待,这样线程或进程可以继续执行其他任务,而不是被阻塞在原地。

        异步+非阻塞是效率最高的

为什么计算密集型用多进程,计算io密集型用多线程

计算密集型任务主要涉及到大量的计算工作,如数学运算、逻辑判断等,这类任务通常不会涉及大量的IO操作

多进程的原因是:

        1、使用多进程可以充分利用多核CPU的并行处理能力,从而提高任务的整体执行效率

        2、因为GIL会阻止同一时刻多个线程执行Python代码,而进程避免GIL锁限制

        3、每个进程有其独立的内存空间和资源,这使得资源管理和错误隔离更加容易。

IO密集型任务主要涉及到大量的输入/输出操作,如文件读写、网络通信等。在这种情况下,多线程通常是更好的选择:

        1、避免线程切换开销

        2、多线程共享同一个进程的内存空间,这意味着它们可以更容易地共享数据和状态信息,从而减少资源消耗

        3、多线程可以配合IO多路复用技术同时处理多个IO操作,从而提高整体的IO处理效率

GIL

        GIL又称全局解释器锁,简单来说是一个互斥锁,每个线程在执行的过程中都需要先获取GIL作用就是限制多线程同时执行,使得在同一进程内任何时刻仅有一个线程在执行。线程是非独立的,所以同一进程里线程是数据共享,当各个线程访问数据资源时会出现“竞争”状态,即数据可能会同时被多个线程占用,造成数据混乱,这就是线程的不安全。所以引进了互斥锁,确保某段关键代码、共享数据只能由一个线程从头到尾完整地执行

ORM

        ORM也称是对象关系映射,其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来,用ORM的好处就是你不用操作表,可以在程序中用面向对象的思路,直接操作对象即可

        INSERT INTO user1(name) VALUES("the5fire");

今日思维导图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/724796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据分析Pandas专栏---第十四章<Pandas训练题(中)>

前言: 继续上一篇: 数据分析Pandas专栏---第十三章<Pandas训练题(初)>-CSDN博客 正文: 题1: 如何将DataFrame的列按照指定的顺序进行排序? 题目: 给定一个DataFrame,包含订单编号、商品名称、商品数量等列&…

【网络安全】漏洞挖掘入门教程(非常详细),小白是如何挖漏洞(技巧篇)0基础入门到精通!

温馨提示: 初学者最好不要上手就去搞漏洞挖掘,因为漏洞挖掘需要很多的系统基础知识和一些理论知识做铺垫,而且难度较大…… 较合理的途径应该从漏洞利用入手,不妨分析一些公开的CVE漏洞。很多漏洞都有比较好的资料,分…

【四】【SQL Server】如何运用SQL Server中查询设计器通关数据库期末查询大题

数据库学生选择1122 数据库展示 course表展示 SC表展示 student表展示 数据库学生选课1122_3 第十一题 第十二题 第十三题 第十四题 第十五题 数据库学生选课1122_4 第十六题 第十七题 第十八题 第十九题 第二十题 数据库学生选课1122_5 第二十一题 第二十二题 结尾 最后&…

保留数据的重装系统教程!(win10系统)

上车警告!!! 本教程无需思考,跟着操作一步一步来就能完成系统的重装。原理是将C盘系统重装,其他盘符数据保存。适用于系统盘重装数据或更改系统版本。 重要提示!!! C盘有重要学习资…

Long-term Correlation Tracking LCT目标跟踪算法原理详解(个人学习笔记)

目录 1. 算法总览2. 算法详解2.1. 基础相关滤波跟踪2.2. 各模块详解2.2.1. 相关跟踪2.2.2. 在线检测器 3. 算法实现3.1. 算法步骤3.2. 实现细节 4. 相关讨论&总结 1. 算法总览 LCT的总体流程如上图所示,其思想为:将长时跟踪(long-term tr…

第五节 JDBC驱动程序类型

JDBC驱动程序是什么? JDBC驱动程序在JDBC API中实现定义的接口,用于与数据库服务器进行交互。 例如,使用JDBC驱动程序,可以通过发送SQL或数据库命令,然后使用Java接收结果来打开数据库连接并与数据库进行交互。 JDK…

18.四数之和

题目:给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复)&#x…

(力扣题库)字符串相乘(C++)

题意如下: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 "2"…

每日一题 — 有效三角形的个数

611. 有效三角形的个数 - 力扣(LeetCode) 思路: 双指针思想,先将数据排序 然后先固定最大的数Max,也就是数组最后的数再定义一左一右两个下标 left 、 right,当这个值相加大于最大的数,那么他两…

Pytorch学习 day05(RandomCrop、Transforms工具使用总结)

RandomCrop 将PIL或Tensor格式的输入图片,随机裁剪指定尺寸的部分输入尺寸可以为序列或单个整形数字代码如下: from PIL import Image from torchvision import transforms from torch.utils.tensorboard import SummaryWriterimg Image.open("i…

token的无感刷新

Token的无感刷新通常通过以下步骤实现: 用户登录时,服务器生成一个访问令牌(Access Token)和一个刷新令牌(Refresh Token),并将其返回给客户端。 客户端在每个请求中携带访问令牌,以…

百度换肤js

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>05 图片切换</title><style type"text/css">*{padding: 0;margin: 0;}#box{border: 1px solid #ccc;width: 430px;height: 70px…

python高级之元类

python高级之元类 一、Type创建类1、传统方式创建类2、非传统方式 二、元类三、总结 一、Type创建类 class A(object):def __init__(self, name):self.name namedef __new__(cls, *args, **kwargs):data object.__new__(cls)return data根据类创建对象 objA(‘kobe’) 1、执…

C++ 最短路 堆优化版的Dijkstra算法

给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;所有边权均为非负值。 请你求出 1 号点到 n 号点的最短距离&#xff0c;如果无法从 1 号点走到 n 号点&#xff0c;则输出 −1 。 输入格式 第一行包含整数 n 和 m 。 接下来 m 行每行包含三个…

外包干了2年,技术退步明显

先说一下自己的情况&#xff0c;研究生&#xff0c;19年进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

18个惊艳的可视化大屏(第18辑):数字资产场景

hello&#xff0c;我是贝格前端工场&#xff0c;本次分享可视化大屏在数字资产领域的应用&#xff0c;喜欢文章的别忘点赞关注&#xff0c;文章底部也有其他行业的案例&#xff0c;有需求您说话&#xff08;可私信&#xff09;。 数字资产可视化大屏可以应用于各种场景&#x…

Vue.js+SpringBoot开发森林火灾预警系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 系统基础模块2.3 烟雾传感器模块2.4 温度传感器模块2.5 历史记录模块2.6 园区数据模块 三、系统设计3.1 用例设计3.1.1 森林园区基础系统用例设计3.1.2 森林预警数据用例设计 3.2 数据库设计3.2.1 烟雾…

GO语言学习笔记(与Java的比较学习)(六)

包 标准库概述 像 fmt、os 等这样具有常用功能的内置包在 Go 语言中有 150 个以上&#xff0c;它们被称为标准库&#xff0c;大部分 (一些底层的除外) 内置于 Go 本身。 正则表达式使用&#xff1a; 以下是一些常见的正则表达式语法和元字符&#xff1a; 普通字符&#xff…

每日shell脚本之自动化备份管理镜像

每日shell脚本之自动化备份管理镜像 #!/bin/bash h_sl(){echo "-------------------" } save(){if [ ! -d "./images" ]; thenmkdir imagesficd imagesdocker images --format "{{.ID}} {{.Repository}}:{{.Tag}} {{.Size}}" > images_pull.…

Vue后台管理系统笔记-01

npm&#xff08;Node Package Manager&#xff09;和 yarn 是两个常用的包管理工具&#xff0c;用于在 Node.js 项目中安装、管理和更新依赖项。它们有以下几个区别&#xff1a; 性能和速度&#xff1a;在包的安装和下载方面&#xff0c;yarn 通常比 npm 更快速。yarn 使用了并…