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

STL-string类

目录

string类的意义

        C语言原始的字符串

         字符串类题目

string类 

        string类文档

        auto和范围for

        auto是个关键字

        范围for 

        string类的接口

 string的模拟实现

浅拷贝

深拷贝 

写时拷贝 


string类的意义

        C语言原始的字符串

        字符串是以'\0'结尾的字符的合集,为了方便操作,C标准库提供了一些str系列的库函数,但是这些库函数与字符串分离开,并不符合OOP的思想,底层又需要用户自己去管理,稍不注意就会越界访问        

         字符串类题目

        在OJ题目中,并不再使用C语言库中的字符串操作函数,而是用封装好的string类函数

415. 字符串相加 - 力扣(LeetCode)415. 字符串相加 - 力扣(LeetCode)

class Solution
{
public:string addStrings(string num1, string num2) {string* max = &num1; string* min = &num2;if ((*min).size() > (*max).size()){max = &num2;min = &num1;}for (std::string::reverse_iterator rita = min->rbegin(), ritb = max->rbegin(); rita != min->rend(); ++rita, ++ritb){*ritb += *rita - '0';}int b = 0;for (std::string::reverse_iterator rita = max->rbegin(); rita + 1 != max->rend(); ++rita){b = *rita - '0';if ((*rita) > '9' && rita + 1 != max->rend());{*rita -= 10;*(rita + 1) += 1;}}if (max->front() > '9'){max->front() -= 10;max->insert(0, 1, '1');}return (*max);}
};

string类 

        string类文档

cplusplus.com/reference/string/string/?kw=string

        auto和范围for

        auto是个关键字

        早期C/C++的auto是,使用auto修饰的变量,是具有自动存储器的局部变量,后来这这个不再重要了

        在C++11中规定,auto不再是一个存储类型指示符,而是一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而来的

        当auto声明指针类型时,用auto和auto*并没有区别

        当auto声明引用时,必须用auto&

        当auto声明一整行多个变量时,这些变量必须是同一个类型

        auto不能作为函数的参数,但是可以当返回值

        auto不能用来声明数组

auto a()
{return 10;
}auto& b()
{static int num = 10;return num;
}//void c(auto a)是错误的int main()
{int c = 10;auto e = c;auto& f = e;cout << a() << endl;auto& g = b();b()++;cout << g << endl;
}

        范围for 

        对于有范围的集合,c++11引入了基于范围的for循环

        for循环后的括号由冒号":"分为两部分

        第一部分是变量,第二部分为被迭代的范围

        它会自动取数据,自动迭代,自动判断结束

        for可以用在数组和容器对象上进行遍历

        for的底层是迭代器

int main()
{char string[] = "abcdefg";for (auto it : string){cout << it << ' ';}for (auto& it : string){cout << it << ' ';}for (const auto it : string){cout << it << ' ';}
}

        string类的接口

构造

构造函数名称功能说明
string()构造空的string类对象
string(const char* s)用C-string构造stirng类对象
string(size_t n,char c)string类对象中包含n个字符c
string(const string&s)拷贝构造函数

int main()
{string a;//空构造string b("hello");//用C字符串构造string c(b);//拷贝构造string d(5, 'a');//n个字符串cstring e(b.begin(), b.end());//指针构造}

容量 

size                                           返回字符串有效长度
length返回字符串有效长度
capacity返回空间总大小
empty检测字符串是否为空
clear清空字符串
reserve为字符串预留空间
resize将字符串的个数改成n个多处的空间用c填充

int main()
{string A = { 'a','a','c'};cout << A.size() << ' ' << A.length();cout << endl;cout << A.capacity() << endl;A.clear();cout << A.size() << ' ' << A.capacity();cout << endl;A.reserve(A.capacity() + 5);cout << A.size() << ' ' << A.capacity();cout << endl;A.resize(5, 'x');cout << A.size() << ' ' << A.capacity() << ' ' << A.empty();cout << endl;A.reserve(A.capacity() - 5);//无法减小的cout << A.size() << ' ' << A.capacity();cout << endl;A.resize(0);//可以减小sizecout << A.size() << ' ' << A.capacity() << ' ' <<A.empty();cout << endl;
}

        size()与length()底层完全相同

        clear()只是清理有效字符,不改变底层申请空间大小

        resize可以增多字符串大小也可以减小字符串大小

        reserve只会增加capacity不会减小预留空间        

遍历操作 

operator[]       返回pos位置的字符
begin+endbegin获取一个字符串的迭代器+end获取最后一个字符下一个位置的迭代器
rbegin+rendrbegin最后一个字符串的迭代器,rend获得第一个字符串上一个的位置的迭代器
forC++11提供的更简洁的遍历方式

int main()
{string A = { 'a','b','c'};cout << A[1] << endl;for (auto it : A)cout << it << ' ';cout << endl;return 0;
}

类对象修改操作 

push back在字符串末尾插入c
append追加字符串
operator+=追加字符串
c_str返回c格式字符串

find+npos

从字符串pos位置开始寻找字符c,返回该字符在字符串的位置
rfind从pos位置往前找
substr在str中从pos位置开始,截取n个字符,然后将其返回

int main()
{string A = { 'a','b','c'};A.push_back('d');A.append(" abcd");A += " bcda";cout<<A.c_str()<<endl;cout<<A.find('b')<<endl;cout << A.rfind('d') << endl;cout << A.substr(A.find('b'), A.rfind('d') - A.find('b')) << endl;
}

非成员函数

operator+传值返回
operator>>运算符重载
operator<<输出运算符重载
getline获取一行字符串
relational operators大小比较

int main()
{string A;cin >> A;for (auto it : A)cout << it;getline(cin, A);for (auto it : A)cout << it;
}

 string的模拟实现

        首先是头文件

#pragma once
#include<iostream>
using std::ostream;
using std::istream;namespace bit
{class string{friend ostream& operator<<(ostream& _cout, const bit::string& s);friend istream& operator>>(istream& _cin, bit::string& s);public:typedef char* iterator;public:string(const char* str = "");//string(const string& s);//string& operator=(const string& s)//{string tmp(s);this->swap(tmp);}~string();////// iteratoriterator begin(){return _str;}iterator end(){return _str + _size;}/// modifyvoid push_back(char c){if (_size == _capacity){reserve(_capacity * 2);}_str[_size++] = c;_str[_size] = '\0';}string& operator+=(char c){push_back(c);return *this;}void append(const char* str){*this += str;}string& operator+=(const char* str){for (int i = 0; str[i] != '\0'; i++){push_back(str[i]);}return *this;}void clear(){_size = 0;}void swap(string& s);//const char* c_str()const{return _str;}/// capacitysize_t size()const{return _size;}size_t capacity()const{return _capacity;}bool empty()const{return _size == 0 ? true : false;}void resize(size_t n, char c = '\0'){if (n > _size){if (n > _capacity){reserve(n);}memset(_str + _size, c, n - _size);}}void reserve(size_t n){if (n > _capacity){char* str = new char[n + 1];strcpy(str, _str);delete[] _str;_str = str;_capacity = n;}}/// accesschar& operator[](size_t index){return _str[index];}const char& operator[](size_t index)const{return _str[index];}///relational operatorsbool operator<(const string& s){if (this->_size < s._size){return true;}return false;}bool operator<=(const string& s){return *this < s || *this == s;}bool operator>(const string& s){return !(*this <= s);}bool operator>=(const string& s){return *this > s || *this == s;}bool operator==(const string& s){if (_size == s._size)return true;}bool operator!=(const string& s){return !(*this == s);}// 返回c在string中第一次出现的位置size_t find(char c, size_t pos = 0) const{for (int i = 0; i < _size; i++){if (_str[i] == c)return i;}return  - 1;}// 返回子串s在string中第一次出现的位置size_t find(const char* s, size_t pos = 0) const{const char* tmp = strstr(_str, s);if (tmp == nullptr){return -1;}return tmp - _str;}// 在pos位置上插入字符c/字符串str,并返回该字符的位置string& insert(size_t pos, char c){if (_size == _capacity){reserve(_capacity * 2);}*this += '\0';for (int i = _size; i > pos; i--){_str[i] = _str[i - 1];}_str[pos] = c;return *this;}string& insert(size_t pos, const char* str){for (int i = 0; i < strlen(str); i++){this->insert(pos, str[strlen(str) - i - 1]);}return *this;}// 删除pos位置上的元素,并返回该元素的下一个位置size_t erase(size_t pos, size_t len){if (len >= _size - pos){_size = 0;}else{for (int i = pos;i + len < _size;i++){_str[i] = _str[i + len];}_size -= len;}return _size - pos;}private:char* _str;size_t _capacity;size_t _size;};
};

         然后是实现文件

#define _CRT_SECURE_NO_WARNINGS
#include "my_string.h"using namespace bit;
string::string(const char* str)
{_size = strlen(str);_capacity = _size;_str = new char[_capacity + 1];strcpy(_str, str);
}string::string(const string& s)
{_str = nullptr;_size = 0;_capacity = 0;string tmp(s._str);this->swap(tmp);
}void string::swap(string& s)
{std::swap(_str, s._str);std::swap(_size, s._size);std::swap(_capacity, s._capacity);
}string::~string()
{if (_str){delete[] _str;_str = nullptr;}
}ostream& bit::operator<<(ostream& _cout, const bit::string& s)
{for (size_t i = 0; i < s.size(); ++i){_cout << s[i];}return _cout;
}istream& bit::operator>>(istream& _cin, bit::string& s)
{s._size = s._capacity = 0;char c;while (1){c = std::getchar();if (c == ' '|| c=='\n'){return _cin;}s += c;}return _cin;
}

浅拷贝

        浅拷贝,也称位拷贝,编译器只是讲对象中的值拷贝过来,如果对象中管理资源,最后机会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放的,以为还有效,所以当继续对资源进项操作时,就会发生了访问违规

可以理解浅拷贝是对类直接管理的成员变量进行一个字节一个字节的拷贝

深拷贝 

        如果一个类中涉及到资源的管理,其拷贝构造函数,赋值运算符重载以及构系函数必须要显式给出,一般请跨都是按照深拷贝方式提供

可以认为深拷贝,是用户自己写的更好的拷贝方式

写时拷贝 

        写时拷贝是在浅拷贝的基础上增加了引用计数的方式实现

        这个用来记录资源使用者的个数,在构造时,将资源的计数给成1,每增加一个对象使用该资源,就给计数增加1,当某个对象被销毁时,先给该计数减一,然后再检查是否需要释放资源,如果计数为一,说明该对象时资源的最后一个使用者,释放,否则就不能释放.

相关文章:

STL-string类

目录 string类的意义 C语言原始的字符串 字符串类题目 string类 string类文档 auto和范围for auto是个关键字 范围for string类的接口 string的模拟实现 浅拷贝 深拷贝 写时拷贝 string类的意义 C语言原始的字符串 字符串是以\0结尾的字符的合集,为了方便操作,C标准库提…...

HTML前端开发-- Iconfont 矢量图库使用简介

一、SVG 简介及基础语法 1. SVG 简介 SVG&#xff08;Scalable Vector Graphics&#xff09;是一种基于 XML 的矢量图形格式&#xff0c;用于在网页上显示二维图形。SVG 图形可以无限缩放而不会失真&#xff0c;非常适合用于图标、图表和复杂图形。SVG 文件是文本文件&#x…...

C++的一些经典算法

以下是C的一些经典算法&#xff1a; 一、排序算法 冒泡排序&#xff08;Bubble Sort&#xff09; 原理&#xff1a; 它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换…...

LNMP和Discuz论坛

文章目录 LNMP和Discuz论坛1 LNMP搭建1.1 编译安装nginx服务1.1.1 编译安装1.1.2 添加到系统服务 1.2 编译安装MySQL服务1.2.1 准备工作1.2.2 编辑配置文件1.2.3 设置路径环境变量1.2.4 数据库初始化1.2.5 添加mysqld系统服务1.2.6 修改mysql的登录密码 1.3 编译安装PHP服务1.3…...

华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架的SGD优化器案例实现

SGD优化器基本原理讲解 随机梯度下降&#xff08;SGD&#xff09;是一种迭代方法&#xff0c;其背后基本思想最早可以追溯到1950年代的Robbins-Monro算法&#xff0c;用于优化可微分目标函数。 它可以被视为梯度下降优化的随机近似&#xff0c;因为它用实际梯度&#xff08;从…...

μC/OS-Ⅱ源码学习(3)---事件模型

快速回顾 μC/OS-Ⅱ中的多任务 μC/OS-Ⅱ源码学习(1)---多任务系统的实现 μC/OS-Ⅱ源码学习(2)---多任务系统的实现(下) 本文开始&#xff0c;进入事件源码的学习。 事件模型 在一个多任务系统里&#xff0c;各个任务在系统的统筹下相继执行&#xff0c;由于执行速度极快&a…...

UnityShaderLab 实现黑白着色器效果

实现思路&#xff1a;取屏幕像素的RGB值&#xff0c;将三个通道的值相加&#xff0c;除以一个大于值使颜色值在0-1内&#xff0c;再乘上一个强度值调节黑白强度。 在URP中实现需要开启Opaque Texture ShaderGraph实现&#xff1a; ShaderLab实现&#xff1a; Shader "Bl…...

【Linux】文件管理必备知识和基本指令

【Linux】文件管理必备知识和基本指令 什么是操作系统什么是文件什么是路径01. ls 指令02. pwd命令03. cd 指令04. touch指令05.mkdir指令&#xff08;重要&#xff09;&#xff1a;06.rmdir指令 && rm 指令&#xff08;重要&#xff09;&#xff1a;rmdir指令rm指令 0…...

移远EC200A-CN的OPENCPU使用GO开发嵌入式程序TBOX

演示地址&#xff1a; http://134.175.123.194:8811 admin admin 演示视频&#xff1a; https://www.bilibili.com/video/BV196q2YQEDP 主要功能 WatchDog 1. 守护进程 2. OTA远程升级 TBOX 1. 数据采集、数据可视化、数据上报&#xff08;内置Modbus TCP/RTU/ASCII,GPS协…...

CSS 浮动定位

浮动定位 float : 浮动定位 left 左浮动right 右浮动 clear : 清除浮动 leftrightboth 浮动定位会导致 元素脱离正常文档流 、 对应的 父 元素 也可能会产生 高度坍塌 。 解决 父元素 高度坍塌的方案有&#xff1a; 1&#xff09; 父元素 添加 overflow , 值 为 除 visible 之…...

vmware vsphere5---部署vCSA(VMware vCenter Server)附带第二阶段安装报错解决方案

声明 因为这份文档我是边做边写的&#xff0c;遇到问题重新装了好几次所以IP会很乱 ESXI主机为192.168.20.10 VCSA为192.168.20.7&#xff0c;后台为192.168.20.7:5480 后期请自行对应&#xff0c;后面的192.168.20.57请对应192.168.20.7&#xff0c;或根据自己的来 第一阶段…...

Android Webview 详解

一 简介 一个基于webkit引擎、展现web页面的控件 Android 4.4前&#xff1a;Android Webview在低版本 & 高版本采用了不同的webkit版本的内核Android 4.4后&#xff1a;直接使用了Chrome内核 1.1 作用 在 Android 客户端上加载h5页面在本地 与 h5页面实现交互 & 调用…...

如何使用程序查询域名whois信息?

直接使用TCP协议向WHOIS服务器的43端口发送查询请求即可返回WHOIS信息。 一些国际域名(.COM/.NET/.CC等)需要继续向各注册商的WHOIS服务服务发送查询请求来获取详细信息。 大部分New gTLD来说&#xff0c;服务器是“whois.nic.[后缀]”&#xff0c;例如.red的WHOIS服务器为whoi…...

解决view-ui-plus 中表单验证不通过问题,select 组件开启multiple模式 总是提示错误,即使不验证也提示,有值也验证失败

&#x1f609; 你好呀&#xff0c;我是爱编程的Sherry&#xff0c;很高兴在这里遇见你&#xff01;我是一名拥有十多年开发经验的前端工程师。这一路走来&#xff0c;面对困难时也曾感到迷茫&#xff0c;凭借不懈的努力和坚持&#xff0c;重新找到了前进的方向。我的人生格言是…...

复杂系统如何架构?

一张图看懂整个后端系统架构 下图展示了整个后端系统架构&#xff0c;包括数据库、应用服务器、API网关等&#xff0c;展示了它们是如何协同工作的。 一些小贴士 CDN是现代互联网架构中不可或缺的一部分&#xff0c;特别是对于那些需要向全球用户提供高性能和高可用性服务的网站…...

leetcode 3224. 使差值相等的最少数组改动次数

题目链接&#xff1a;3224. 使差值相等的最少数组改动次数 题目&#xff1a; 给你一个长度为 n 的整数数组 nums &#xff0c;n 是偶数 &#xff0c;同时给你一个整数 k 。 你可以对数组进行一些操作。每次操作中&#xff0c;你可以将数组中任一元素替换为 0 到 k 之间的任一…...

C# 小案例(IT资产管理系统)

开发工具&#xff1a;visual studio 2022 语言&#xff1a;C# 数据库&#xff1a;Sql Server 2008 页面展示 一、登录 二、主窗体 三、用户管理 四、资产管理 五、关于 Java版地址&#xff1a;基于若依开发物品管理系统(springbootvue)_若依物品管理系统-CSDN博客 Python版…...

React第十四节useState使用详解差异

一、useState() Hook 使用 useState视图更新用法 1、写法&#xff1a; import { useState } from react const [name, setName] useState(Andy)利用数组解构写法&#xff0c; 第一个参数是自定义的属性&#xff0c;用于初始化时候渲染&#xff0c;如上面代码&#xff0c;初…...

ubuntu 安装 docker详细教程

1. 准备工作 1.1系统更新 sudo apt update sudo apt upgrade -y 1.2 检查系统版本 lsb_release -a 2.安装docker 2.1. 安装依赖 sudo apt install apt-transport-https ca-certificates curl software-properties-common 2.2 添加docker 官方GPG密钥 curl -fsSL https…...

图书管理系统|Java|SSM|JSP| 前后端分离

【一】可以提供远程部署安装&#xff0c;包扩环境 【二】提供软件相关的安装包 【三】如果需要提供java入门资料可咨询 【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、M…...

Apache Echarts和POI

目录 Apache ECharts 介绍 入门 绘制一个简单的图表 Apache POI 介绍 通过POI创建Excel文件并且写入文件内容 通过POI读取Excel文件中的内容 导出Excel表格 Apache ECharts 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#xf…...

ubuntu下的chattts 学习8(结束):长文本的语音转换优化及总结

代码 import ChatTTS import torch import numpy as np import torchaudio import re# 设置环境变量以避免内存碎片化 import os os.environ[PYTORCH_CUDA_ALLOC_CONF] expandable_segments:True# 使用 CPU 进行计算 device torch.device(cpu)chat ChatTTS.Chat() chat.loa…...

Luckysheet 实现 excel 多人在线协同编辑(全功能实现增强版)

前言 感谢大家对 Multi person online edit(多人在线编辑器) 项目的支持&#xff0c;mpoe 项目使用 quill、luckysheet、canvas-editor 实现的 md、excel、word 在线协同编辑&#xff0c;欢迎大家Fork 代码&#xff0c;多多 Start哦~ Multi person online edit 多人协同编辑器…...

最新VMware Workstation Pro领先的免费桌面虚拟化软件基于 x86 的 Windows 桌面虚拟化软件下载安装保姆级教程,直接下载,持续更新

目录 说明 安装程序下载 方法一&#xff1a;直接下载 方法二&#xff1a;官网下载 安装教程 说明 这几天重装电脑&#xff0c;想装VMware Workstation&#xff0c;搜了之后才发现它竟然对个人用户免费了&#xff0c;一个字&#xff1a;爽&#xff01;终于可以结束百度序列号…...

GitHub使用

太久不用GitHub发现自己又有些不会了&#xff0c;突发奇想为何不把每次看到的有指导意义的博客收录一下以便下次查阅呢 如何上传文件夹到GitHub上&#xff08;配图详解&#xff09;&#xff1f;_github上傳資料夾-CSDN博客 github上如何删除自己的仓库_github删除仓库-CSDN博…...

阿里云服务器Linux(centos)系统安装nginx1.20.2

阿里云服务器Linux(centos)系统安装nginx1.20.2 1.安装依赖包 一共要安装4种依赖&#xff08;基于c语言&#xff09; yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel2.下载nginx安装包并解压安装包 nginx官网下载&#xff1a;http://nginx.org/en/do…...

linux 用户名密码设置

安装linux时默认的密码最小长度是5个字节&#xff0c;但这并不够&#xff0c;要把它设为8个字节。修改最短密码长度需要编辑login.defs文件#vi /etc/login.defs PASS_MAX_DAYS 99999 #&#xff03;密码设置最长有效期&#xff08;默认值) PASS_MIN_DAYS 0 ##密…...

MySQL是否可以配合Keepalived实现高可用

MySQL是否可以配合Keepalived实现高可用 是的&#xff0c;MySQL 可以配合 Keepalived 实现高可用性。通常&#xff0c;使用 Keepalived 与 MySQL 配合的方式主要是通过配置 虚拟IP&#xff08;VIP&#xff09; 来实现主从数据库的自动切换&#xff0c;从而保证在主数据库宕机时…...

windows下 mysql开启 binlog日志

一、查看是否开启 binlog -- 方式一 show binary logs;-- 方式二 show VARIABLES like log_bin 说明没有开启 方式一 &#xff1a;you are not using binary logging 方式二&#xff1a;log_bin off 二、编辑 my.ini 配置文件 默认安装地点位于&#xff1a;C:\ProgramDat…...

59. 螺旋矩阵 II

59. 螺旋矩阵 II class Solution { public:vector<vector<int>> generateMatrix(int n) {// for(int i0;i<n;i){ 这样的遍历方式不对// for(int j 0;j<n;j){// generateMatrix[i][j] // }// } //初始化矩阵vector<vector<int&…...

XML 查看器:深入理解与高效使用

XML 查看器&#xff1a;深入理解与高效使用 XML&#xff08;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言。它通过使用标签来定义数据结构&#xff0c;使得数据既易于人类阅读&#xff0c;也易于机器解析。在本文中&#xff0c;我们将探讨 XML 查看器的功能…...

JDBC学习

配置文件 application.yml spring: datasource: username: root password: 123456 url: jdbc:mysql://localhost:3306/rbac?useUnicodetrue&characterEncodingutf-8&serverTimezoneUTC driver-class-name: com.mysql.jdbc.Driverrbac为我自己本地的数据库&…...

单元测试

junit5中五个方法为&#xff1a;Test、BeforeEach&#xff08;修饰实例方法&#xff0c;在测试方法开始之前执行&#xff09;、AfterEach&#xff08;修饰实例方法&#xff0c;在测试方法完成之后开始执行&#xff09;、BeforeAll&#xff08;修饰静态static方法&#xff0c;在…...

24/12/9 算法笔记<强化学习> PPO,DPPO

PPO是目前非常流行的增强学习算法&#xff0c;OpenAI把PPO作为目前baseline算法&#xff0c;首选PPO&#xff0c;可想而知&#xff0c;PPO可能不是最强的&#xff0c;但是是最广泛的。 PPO是基于AC架构&#xff0c;因为AC架构有一个好处&#xff0c;就是解决了连续动作空间的问…...

spring boot通过连接池的方式连接时序库IotDB

1、maven依赖 <dependency><groupId>org.apache.iotdb</groupId><artifactId>iotdb-session</artifactId><version>1.3.2</version></dependency>2、配置文件 iotdb:server:url: localhostport: 6667name: rootpwd: rootmax…...

maven多模块开发

目录 聚合 可选依赖 排除依赖 属性 打包 聚合 聚合就是将多个模块组成一个整体&#xff0c;进行项目构建。聚合工程&#xff08;也称为多模块项目&#xff09;是 Maven 的一种项目结构&#xff0c;它允许将一个大型项目拆分为多个较小的、更易于管理的子模块。每个子模块…...

Kubernetes Nginx-Ingress | 禁用HSTS/禁止重定向到https

目录 前言禁用HSTS禁止重定向到https关闭 HSTS 和设置 ssl-redirect 为 false 的区别 前言 客户请求经过ingress到服务后&#xff0c;默认加上了strict-transport-security&#xff0c;导致客户服务跨域请求失败&#xff0c;具体Response Headers信息如下&#xff1b; 分析 n…...

华为eNSP:VRRP

一、VRRP背景概述 在现代网络环境中&#xff0c;主机通常通过默认网关进行网络通信。当默认网关出现故障时&#xff0c;网络通信会中断&#xff0c;影响业务连续性和稳定性。为了提高网络的可靠性和冗余性&#xff0c;采用虚拟路由冗余协议&#xff08;VRRP&#xff09;是一种…...

linux 安装composer

下载composer curl -sS https://getcomposer.org/installer | php下载后设置环境变量&#xff0c;直接通过命令composer -v mv composer.phar /usr/local/bin/composer查看版本看是否安装成功 composer -v...

ESP32-S3模组上跑通ES8388(24)

接前一篇文章:ESP32-S3模组上跑通ES8388(23) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析完了es8388_init函数中的第8段代码,本回继续往下解析。为了便于理解和回顾,再次贴出es8388_init函数源码,在components\audio_hal\driver\es8388\es8388.c中,如下: ​ …...

类文件具有错误的版本 61.0, 应为 55.0 请删除该文件或确保该文件位于正确的类路径子目录中。

类文件具有错误的版本 61.0, 应为 55.0 请删除该文件或确保该文件位于正确的类路径子目录中。 这个错误表明你的项目尝试加载的 .class 文件&#xff08;编译好的 Java 类&#xff09;是用比你的运行环境支持更高版本的 Java 编译的。具体来说&#xff1a; 版本 61.0 对应 Ja…...

AI 的时代,新科技和新技术如何推动跨学科的整合?

在当前AI的发展中&#xff0c;我们面临的一个主要挑战就是融合的问题&#xff0c;这实际上不仅是技术上的融合&#xff0c;还有更深层次的哲学层面的思考。 或许在中国这方面的讨论较少&#xff0c;但在西方哲学和神学的语境中&#xff0c;探讨万物的根本和不同学科之间的联系…...

12.9-12.16学习周报

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract一、SNN与传统ANN的比较1.SNN概述2.SNN神经元和ANN的比较结构3.spikingjelly1.数据格式2.状态的保存和重置3.传播模式4.神经元 二、图数据库1.图数据库…...

CanFestival移植到STM32 F4芯片(基于HAL库)

本文讲述如何通过简单操作就可以把CanFestival库移植到STM32 F4芯片上&#xff0c;作为Slave设备。使用启明欣欣的工控板来做实验。 一 硬件连接 观察CAN报文需要专门的设备&#xff0c;本人从某宝上买了一个兼容PCAN的开源小板子&#xff0c;二十几块钱&#xff0c;通过USB接…...

构建安全的数据库环境:群晖NAS安装MySQL和phpMyAdmin详细步骤

文章目录 前言1. 安装MySQL2. 安装phpMyAdmin3. 修改User表4. 本地测试连接MySQL5. 安装cpolar内网穿透6. 配置MySQL公网访问地址7. 配置MySQL固定公网地址8. 配置phpMyAdmin公网地址9. 配置phpmyadmin固定公网地址 前言 本文将详细讲解如何在群晖NAS上安装MySQL及其数据库管理…...

相机(Camera)硬件组成详解

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 写在前面&#xff1a;可以去B站观看一些相机原理的视频来配合学习&#xff0c;这里推荐&#xff1a;推荐1&#xff0c;推荐2&#xff0c;推荐3 相机&#xff08;Camera&#xff09;是一种复杂的光…...

【Linux———基础IO】

每一滴眼泪&#xff0c;每一次心碎&#xff0c;什么爱能无疚无悔.......................................................................... 文章目录 前言 一、【认识文件I/O】 1.1、【回顾C语言文件I/O】 1.2、【操作系统文件I/O】 1.2.1、【open函数】 1、【open函数的三…...

WebRTC服务质量(03)- RTCP协议

一、前言&#xff1a; RTCP&#xff08;RTP Control Protocol&#xff09;是一种控制协议&#xff0c;与RTP&#xff08;Real-time Transport Protocol&#xff09;一起用于实时通信中的控制和反馈。RTCP负责监控和调节实时媒体流。通过不断交换RTCP信息&#xff0c;WebRTC应用…...

[python SQLAlchemy数据库操作入门]-10.性能优化:提升 SQLAlchemy 在股票数据处理中的速度

哈喽,大家好,我是木头左! 当处理大量数据时,如股票数据,默认的ORM操作可能会显得效率低下。本文将探讨如何通过一些技巧和策略来优化SQLAlchemy ORM的性能,从而提升其在股票数据处理中的速度。 1. 选择合适的数据类型 在定义模型时,选择合适的数据类型对于性能至关重要…...

23种设计模式之中介者模式

目录 1. 简介2. 代码2.1 Mediator &#xff08;中介者接口&#xff09;2.2 ChatRoom &#xff08;具体中介者类&#xff09;2.3 User &#xff08;同事接口&#xff09;2.4 ChatUser &#xff08;具体同事类&#xff09;2.5 Test &#xff08;测试&#xff09;2.6 运行结果 3. …...