当前位置: 首页 > news >正文

网络数据库后端相关面试题(其三)

18, 传输控制协议tcp和用户数据报协议udp有哪些区别

第一,tcp是面向字节流的,基本的传输单位是tcp报文段;而udp是面向报文的,基本传输单位是用户数据报。

第二, tcp注重安全可靠性,连接双方在进行通信前,需要经过三次握手建立连接。udp是无连接的,使用最大努力交付,即不保证可靠交付。

第三,udp不需要连接等待,所以数据传输快,而tcp传输效率相对较低。

第四, tcp首部开销是20个字节;udp开销是8个字节,这也是减少网络传输开销的一方面。

第五, tcp有拥堵控制和流量控制,而udp没有拥堵控制和流量控制

第六, tcp支持点对点通信,提供全双工通信,不提供广播或多播服务;udp支持一对一,一对多,多对一,多对多的通信模式

19,从输入url到页面加载发生了什么

总体来说分为以下几个过程:

DNS解析

TCP连接

发送HTTP请求

服务器处理请求并返回HTTP报文

浏览器解析渲染画面

连接结束

20,HTTP中的请求方法和用途主要有哪些

get方法:一般用于查询

post方法:一般用于添加数据

put方法:一般用于修改全部数据

pacth方法:一般用于修改部分数据

delete方法:一般用于删除数据

21, get请求与post请求的差别

第一,get是从服务器上获取数据,post是向服务器传送数据

第二, get请求时通过URL直接请求数据,数据信息可以在URL中直接看到,比如浏览器访问;

而post请求时放在请求体中的,用户无法看到

第三, get传送的数据量小,有限制,不能大于2KB;主要是因为它受约于URL长度的限制。

post传送的数据量较大,一般被默认不受限制

22,Django的工作原理

1,用户通过浏览器请求一个页面的url

2, 请求到达Request Middlewares(中间件), 中间件对request做一些预处理或者直接response请求

3, URLconf通过urls.py文件和请求的URL找到相应的View(视图)

4,View Middlewares被访问,它同样可以对request做一些处理或者直接返回response

5,调用View中的函数

6, View中的方法可以选择 性的通过Models访问底层数据

7, 所有的Models_to_DB的交互都是通过manager完成的

8, 如果需要,View可以使用一个特殊的Context(上下文处理器)

9, Context被传给Template(存放前段文件)用来生成页面

23, 怎么理解MVC和MTV的区别

著名的MVC 模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层;他们之间以一种插件似的,松耦合的方式连接在一起。

模型负责业务对象与数据库的对象(ORM),视图负责与用户的交互(页面),控制器(C)接受用户的输入调用模型和视图完成用户的请求。

Django的MTV模式本质上就是与MVC模式没有什么差别,也是各个组件之间为了保持松耦合关系,只是定义上有些许不同。Django的MTV分别代表:

Model(模型):负责业务对象与数据库的对象(ORM)

Template(模板):负责如何把页面展示给用户

View(视图):负责业务逻辑,并在适当的时候调用Model和Template

此外,Django还有一个url分发器,它的作用是将一个个URL页面请求分发给不同的view处理,view再调用响应的Model和Template

24, 什么是缓存穿透?如何避免?

缓存穿透

一般的缓存程序,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫缓存穿透。

如何避免?

1,对查询结果为空也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存

2,对一定不存在的key进行缓存

25, 什么是缓存雪崩?如何避免?

缓存雪崩

当缓存服务器重启或者大量缓存集中在某一时间段失效,这样在失效的时候,会给后端系统带来压力。导致系统崩溃。

如何避免?

1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

2:做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期。

3:不同的key ,设置不同的过期时间,让缓存失效的时间尽量均匀。

26, Django中间件

中间件是一个用来处理django的请求和响应和框架级别的钩子。它是一个轻量,低级别的插件系统,用于在全局范围内改变django的输入输出。每个中间件组件都负责做一些特别的功能。

中间件类中定义了几个方法,django框架会在请求的特定时间去执行这些方法。

process_request: 进入请求路由前

process_view:进入视图函数请

process_exception: 视图函数产生异常

process_template_response: render到模板前

process_respomse: 响应到浏览器前

27,CSRF 攻击的原理和防范措施

csrf跨站点请求伪造(Cross--Site Request Forgery), 跟XSS攻击一样,存在巨大的危害性,可以这样来理解:攻击者盗用我们的身份,以我们的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以我们的名义发送邮件,发送消息,盗取我们的账号,添加系统管理员,甚至购买商品,虚拟货币转账等。

攻击原理:

i. 用户C访问正常网站A时进行登录,浏览器保存A的cookie

ii. 用户C再访问攻击网站B,网站B上有一个隐藏的链接或者图片标签会自动请求网站A的URL网站,例如表单提交,传指定参数

iii.而网站A在接受到请求之后可判断当前用户是登录状态,所以根据用户的权限做具体的操作逻辑,造成网站攻击成功。

防范措施:

i. 在请求头里添加一个随机值作为参数

ii.在响应的cookie里面设置该随机值

iii.那么用户C再正常提交表单的时候会默认带上表单中的随机值,浏览器会自动带上cookie里面随机值,那么服务器下次接受到请求之后就可以取出两个值进行校验

iv.而对于网站B来说网站B在提交表单的时候不知道该随机值是什么,所以就形成不了攻击也可以用来设置避免表单的重复提交。

28,跨域产生的原因以及解决方案

浏览器的同源策略是浏览器上为了安全性考虑实施的非常重要的安全策略

何为同源:url由协议,域名,端口和路径组成,如果两个URL的协议,域名端口相同,则表示同源

在浏览器中<script>, <img>, <iframe>, <link>等标签都可以加载跨域资源,而不受同源限制,但浏览器会限制脚本中发起的跨域请求。比如,使用XMLHttpRequest对象和Fetch发起HTTP请求就必须遵循同源策略。

不允许跨域访问并非是浏览器限制了发起跨站请求,而是跨站请求可以正常发起,但是返回结果被浏览器拦截了。

常见的跨域解决方案:Script跨域, JSON跨域, CORS(跨域资源共享), Nginx代理

29, django模型常用属性

AutoField:

映射到数据库中是int类型,可以有自动增长的特性。一般不需要使用这个类型,如果不指定主键,那么模型会自动生成一个叫做ID的自动增长的主键,如果想要指定一个其他名字的并且具有自动增长的主键,使用Autofield 也是可以的。

BooleanField:

在模型层面接受的是TRUE/False。在数据库层面是tinyint类型。如果没有指定默认值,默认值是None。

CharField:

在数据库层面是varchar。在python层面就是普通的字符串。这个类型在使用的时候必须要指定最大长度,也即必须传递max_length这个关键字参数进去。

EmailFied:

类似CharField 。 在数据库底层也是一个varchar类型。最大长度是254个字符。如果没有指定max_length, 默认使用254个字符为最大长度。并不会限制字符串一定要满足邮箱格式。

FloatField:

浮点类型。映射到数据库就是数据库中的float类型。

IntegerField:

整形, 值的区间是 -2^31——2^31-1

TextField:

大量文本类型。映射到数据库中是longtext 类型

FileField:

用来存储上传的文件

30, django常见的响应方式

HTTPresponse:可以返回一段简单的字符串,也可以返回一个流数据

render: 通过转发的方式跳转到一个django模板页面redirect:通过 重定向的方式跳转到一个路由中

FileResponse:实现文件的下载,可以自动设置头信息

JsonResponse: 返回一个json格式的数据,一般配合异步请求使用

HTTP404:快速返回一个404 错误页面(如果没有配置,返回一个django自带的404效果页面)

相关文章:

网络数据库后端相关面试题(其三)

18&#xff0c; 传输控制协议tcp和用户数据报协议udp有哪些区别 第一&#xff0c;tcp是面向字节流的&#xff0c;基本的传输单位是tcp报文段&#xff1b;而udp是面向报文的&#xff0c;基本传输单位是用户数据报。 第二&#xff0c; tcp注重安全可靠性&#xff0c;连接双方在…...

Hadoop之HDFS分布式文件系统

HDFS简介 Hadoop Distributed File System (HDFS): HDFS 是 Hadoop 的分布式文件系统,它设计用于存储大量数据,并提供 高吞吐率的数据访问,通过将数据分块存储在多个节点上,实现数据的冗余存储和容错。 HDFS重要概念 HDFS 通过统一的命名空间目录树来定位文件; 另外,它…...

插入删除单链表指定结点-偷天换日法

王道说下面的代码有BUG&#xff0c;比如当删除的结点p在最后一个元素时&#xff0c;p->nextNULL; So *q NULL; q->data就是错误的&#xff0c;我认为加个判断就行 加个判断即可 /*看着是删除q了&#xff0c;从结果上看就是把p删除了 偷天换日法*/ bool DeleteNode(LNod…...

MybatisPlus代码生成器使用案例

针对数据库中的实体类表&#xff0c;自动生成相关的pojo类&#xff0c;mapper&#xff0c;service等 1. Get-Started 基于mybatisplus&#xff0c;idea下载mybatisplus插件 sql文件 /*!40101 SET OLD_CHARACTER_SET_CLIENTCHARACTER_SET_CLIENT */; /*!40101 SET NAMES utf8 …...

数学公式编辑器(前端预研)

数学公式输入wangeditor&#xff1a; vue2使用wangeditor实现数学公式和富文本编辑器 mathjax文档&#xff1a;MathJax: 让前端支持数学公式 mathjax识别数学公式vue中使用mathjax识别latex数学公式 数学公式编辑器&#xff1a;&#xff08;少&#xff09; https://github.com…...

架构设计-如何安全地传输密码

java web 项目中经常会遇到登录或注册的场景,如果查看浏览器的 network 网络请求时,用户的密码以明文方式传输,会造成很多安全隐患,这就涉及到密码如何安全传输的问题。 数据加密的重要性不言而喻,通用的加密技术有 哈希散列、对称加密、非对称加密。 哈希散列 哈希散列是…...

【库】nprogress 顶部进度条

yarn add nprogress router文件 前置路由添加启动 后置路由添加关闭 router.beforeEach((to, from, next) > { NProgress.start() next() }) router.afterEach(() > { NProgress.done() }) App.vue 文件 引入样式 <script setup> import "nprogress/npro…...

15、架构-可靠通讯之服务安全

概述 我们已经了解了与具体架构形式无关的业界主流安全概念和技术标准&#xff08;如TLS、JWT、OAuth 2等概念&#xff09;&#xff0c;在上一章节探讨了与微服务运作特点相适应的零信任安全模型。在本节中&#xff0c;我们将从实践和编码的角度出发&#xff0c;介绍在微服务时…...

web刷题记录(5)

[羊城杯 2020]easycon 进来以后就是一个默认测试页面&#xff0c; 在这种默认界面里&#xff0c;我觉得一般不会有什么注入点之类的&#xff0c;所以这里先选择用御剑扫扫目录看看有没有什么存在关键信息的页面 扫了一半发现&#xff0c;很多都是和index.php文件有关&#xff0…...

Redis高并发高可用

1. 复制机制 在分布式系统中&#xff0c;为了解决单点问题&#xff0c;通常会将数据复制多个副本部署到其他机器&#xff0c;以满足故障恢复和负载均衡等需求。Redis提供了复制功能&#xff0c;实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础&#xff0c;后面的…...

【前端取不到cookie的的原因】http-only

某条cookie有http-only属性时&#xff0c;下面两种方法都取不到&#xff0c;还是改需求吧&#xff0c;别取了 1、 npm install js-cookie --save import Cookies from js-cookie let cookieValue Cookies.get(name)2、document.cookie...

推荐 2 个 火火火火 的开源项目

推荐两个开源项目&#xff0c;一个能让你的小爱音响更聪明。另外一个可以让你简单的下载互联网网站上的视频、文件、富文本内容。 01 MiGPT: 让你的小爱音响更聪明 让你的小爱音箱更聪明&#xff0c;提高智能家居的互动性和个性化体验的开源利器&#xff01; MiGPT 将 ChatGPT …...

从0到100:找搭子小程序开发笔记(一)

背景调查 “找搭子”小程序&#xff1a;能够解决人们在社交、休闲和约会方面的需求&#xff0c;提供方便快捷的方式来找到合适的伴侣或活动伙伴。许多人在社交场合中感到焦虑或不安&#xff0c;因此他们更倾向于使用在线平台来认识新的朋友或搭子。有些人可能生活在一个较小或…...

迷宫最短路径求解--c++

【代码】 #include<iostream> #include<queue> #include<stack> using namespace std; #define ROW 8 #define COL 8 //测试迷宫数据 int maze[ROW][COL] {{0,0,0,1,0,0,0,0},{0,1,0,1,0,1,0,1},{0,1,0,0,0,1,0,1},{0,1,0,1,1,1,0,1},{0,1,0,1,1,0,0,0},{0…...

SpringFramework总结

一.SpringFramework介绍 (一)Spring 广义上的 Spring 泛指以 Spring Framework 为基础的 Spring 技术栈。 Spring 已经不再是一个单纯的应用框架&#xff0c;而是逐渐发展成为一个由多个不同子项目&#xff08;模块&#xff09;组成的成熟技术&#xff0c;例如 Spring Frame…...

品牌与产品:消费者决策的经济逻辑与品牌宣传的战略意义

在当今日益全球化的经济环境中&#xff0c;品牌与产品之间的关系对于企业的成功与否起着至关重要的作用。然而&#xff0c;在消费者做出购买决策时&#xff0c;他们到底是在选择产品本身&#xff0c;还是在选择附着在产品之上的品牌价值&#xff1f;同样&#xff0c;当客户选择…...

MFC四种方法编写多线程

本文以四个demo为例&#xff0c;对MFC的多线程进行学习。学习的过程中写了四个demo&#xff0c;将其做成笔记&#xff0c;发布在csdn上面。 mfc多线程demo1 volatile BOOL m_bRun; CEdit* edit; void ThreadFunc(){CTime time;CString strTime;m_bRun true;while(m_bRun){ti…...

VPN简介

一、VPN 概念定义 VPN&#xff0c;即虚拟专用网络&#xff08;Virtual Private Network&#xff09;&#xff0c;依靠ISP&#xff08;Internet Service Provider&#xff09;和NSP&#xff08;Network Service Provider&#xff09;在公共网络中建立的虚拟专用通信网络&#x…...

【C/C++】用C语言写一个数据仓库,存储和修改数据

这个代码实现了一个简单的数据仓库&#xff0c;其中数据被存储在一个3x3的二维数组中。用户可以通过控制台界面与这个数据仓库进行交互&#xff0c;可以选择查看数据或者修改数据。 基础版源码&#xff1a; #include <stdio.h>#define HOUSESIZE 3 int arr[HOUSESIZE][…...

YOLO v5与YOLO v8框图比较

1. 介绍 YOLO (You Only Look Once) 是一个用于目标检测的卷积神经网络模型&#xff0c;以其高精度、高速度和易用性著称。YOLO v5 是目前最流行的 YOLO 版本之一&#xff0c;而 YOLO v8 是 YOLO 的最新版本。 2. 原理详解 YOLO 系列模型的基本原理是将目标检测任务转化为图…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...