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

C++ K2 (2)

提示:文章

文章目录

  • 前言
  • 一、背景
    • 标准库
    • 基础知识
        • 堆栈
  • 总结

前言

前期疑问:
本文目标:


一、背景

接上文

标准库

1、(单选)【STL】在以下容器中间插入一个元素,时间复杂度为O(1)的是(A)

A. list

B. vector

C. deque

D. string

考察STL

vector的访问是O(1),但在中间增删是O(n),因为会移动其他元素

list在内存中不是连续分配,在任何位置增删是常数时间

2、(单选)【STL】下面哪个容器内的数据是有序的(C)

A. vector

B. list

C. set

D. unordered_set

map和set内部实现是红黑树

list是链表

unorded_set和unorded_map是哈希表

3、(单选)【STL】关于stl库的说法错误的是 (B)

A.set是一种关联容器,内部采用红黑树的平衡二叉树存储元素

B.set每个元素的值唯一,可以直接修改set元素值,只要确保唯一性

C.set不支持随机存取

D.set适用于经常查找存储元素的场景

不能直接修改 set 容器中元素的值。因为元素被修改后,容器并不会自动重新调整顺序,于是容器的有序性就会被破坏,再在其上进行查找等操作就会得到错误的结果。因此,如果要修改 set 容器中某个元素的值,正确的做法是先删除该元素,再插入新元素。

4、(单选)【vector】关于vector使用效率提升不正确的一项©

A. emplace_back比push_back效率更高

B. emplace_back比insert效率更高

C. a.at(i)比a[i]优化

解释:at需要判断是否存在该元素,开销更大

但是实际上at更安全,这里就当是效率差吧

容器中operator[]不进行下标越界检查,不过使用operator[]就要自己承担越界风险了。如果需要下标越界检查,请使用at。直接使用下标的效率更高。

5、(单选)【vector】如下哪项不能使std::vector的性能提升(C)

A.用emplace_back()替换 push_back()

B.根据预知的长度,提前reserve内存

C.用At替换[]

D.用emplace()替换insert()

6、(单选)【vector】关于vector, 说法错误的是:(D)

A. vector适合的场景:经常随机访问其中存储的元素,但很少对中间或开始元素进行增删。

B. vector对中间和开始处进行元素的添加或删除操作,需要移动内存。

C. vector容器默认在堆中分配内存空间,元素连续存放。

D. 访问任何元素的时间复杂度是O(n).

解:vector数据的访问效率是常数级的O(1)

增删因为需要移动其他元素才是O(n)

7、(单选)【vector】对于std::vector类型的对象myVector,下面哪种方法可以正确获取myVector中所含元素的个数(D)

A. sizeof(myVector)

B. sizeof(myVector)/sizeof(int)

C. myVector.capacity()

D. myVector.size()

vector有三个指针,内容在堆上

sizeof是一个固定的值,即指针的大小

C是myVector的容量,是预先分配的

其中vector有三个指针是什么意思

vector有三个指针‌是指vector容器在底层实现中使用了三个关键的指针来管理其内存和元素。这三个指针分别是:

  1. start‌:指向vector容器中第一个元素的地址。
  2. finish‌:指向vector容器中最后一个元素之后的位置。
  3. end_of_storage‌:指向vector容器当前分配的内存空间的末尾‌12。

通过这三个指针,vector实现了许多功能,如存储元素大小、剩余空间大小、总容器空间大小等。这些指针帮助vector进行动态内存管理和元素访问‌

8、(单选)【vector】以下代码的输出是什么(B)

void main(){
vector<int> a(2, 3);
for(auto v : a){
cout<<v<<” ”;

A.2 2 2

B.3 3

C.2 3

D.3 2

解析:考察vector初始化方式,小括号代表两个三

9、(单选)【vector】关于vector容器类中的begin()和end()成员函数,下面说法错误的是(A)

A. end()返回一个迭代器,在容器不为空的情况下指向容器的最后一个元素

B. begin()返回一个迭代器,指向容器的起始点

C. 元素个数为0的时候,begin()和end()相等

D. end()为容器遍历提供了判断依据,只要尚未遍历到end(),遍历循环就可以继续

end指向最后一个元素的下一位

10、(多选)【vector】假如有std::vector类型的容器coll,需要对其元素从大到小排列,下列写法正确的(ABCD)

A.

std::sort(coll.begin(), coll.end(), std::greater<int>());

B.

std::sort(coll.begin(), coll.end(), [](int a, int b) { return a >b; });

C.

struct Cmp {bool operator() (int a, int b) const {return a > b;}
};
std::sort(coll.begin(), coll.end(), Cmp);

D.

bool Cmp(int a, int b)
{return a > b;
}
std::sort(coll.begin(), coll.end(), Cmp);

11、(多选)【vector】遍历vector的方式有哪些()

A.

vector< int > ivec(begin(arr),end(arr));
for(auto it=ivec.begin();it!= ivec.end();++it)

B.

vector< int > ivec(begin(arr),end(arr));
vector<int>::iterator it;
for(it=ivec.begin();it!= ivec.end();++it)

C.

vector< int > ivec(begin(arr),end(arr));
for(decltype(ivec.size()) i=0;i<4;++i)

解释:通过代码验证如下

int main()
{std::vector<int> coll{2, 5, 3, 9, 12, 6};//    std::sort(coll.begin(), coll.end(), std::greater<int>());     // greater降序
//    std::sort(coll.begin(), coll.end(), std::less<int>());          // less 升序
//    std::sort(coll.begin(), coll.end(), [](int a, int b) { return a > b; });    // 降序struct Cmp {bool operator()(int a, int b) const{return a > b;}};
//    std::sort(coll.begin(), coll.end(), Cmp());             // 降序std::sort(coll.begin(), coll.end(), Cmp2);              // 降序for (int i = 0; i < coll.size(); i++) {printf("%d ", coll[i]);}
}

12、(单选)【STL】用有序的双向链表存储一个支持“增”、“删”、“改”三个功能的键值系统,这三个功能中有几个功能能做到时间复杂度O(1)?(A)

A 3

B 2

C 1

D 0

“删”如果按照键值删除可以做到时间复杂度O(1),而“增”、“改”都需要查找,查找时间复杂度为O(n)。

13、(多选)【string】下面可以正确获得string变量str的字符串长度的是(AD)

A. str.size()

B. str.capacity()

C. sizeof(str)

D. str.length()

E. sizeof(str) – 1

解释:

Sizeof返回的是指针大小

size()和length():这两个函数会返回string类型对象的字符个数,且他们的执行效果相同

capacity():这个函数返回在重新分配内存之前,string类型对象所能包含的最大字符数。

14、(多选)【set】set中肯定有元素3,肯定没有元素4,则下列中能把元素3改成4的操作是(AC)

A.

setTest.erase(3);
setTest.insert(4);

B.

auto it = setTest.find(3);
(int)(*it) = 4;

C.

auto it = setTest.find(3);
it = setTest.erase(it);
setTest.insert(it, 4);

D.

auto it = setTest.emplace(3);
it.second = 4;

erase入参可以是值也可以是位置指针

set的修改是先删后插

B不能直接改set

D emplace和find类似 没有删除3

15、(单选)【set】以下C++17代码中,自定义类型Order将作为std::set的key值,下面正确实现重载运算符operator的代码是(A)

struct Order {
int order;
public:
Order(int o) : order(o) {}
// 选项中的代码将会插入这个位置
};int main()
{std::set<Order> s;s.insert(Order(5));s.insert(Order(6));...return 0;
}

A.

bool operator<(const Order &rhs) const
{return (order < rhs.order);
}

B.

bool operator<=(const Order &rhs) const
{return (order <= rhs.order);
} 

C.

bool operator>(const Order &rhs) const
{return (order > rhs.order);
}

D.

bool operator>=(const Order &rhs) const
{return (order >= rhs.order);
}

解释:

写了代码验证了下

struct Order {int order;
public:Order(int o) : order(o){}// 选项中的代码将会插入这个位置bool operator<(const Order &rhs) const{return (order < rhs.order);}
};int main()
{std::set<Order> s;s.insert(Order(5));s.insert(Order(6));s.insert(Order(2));for (std::set<Order>::iterator it = s.begin(); it != s.end(); it++) {printf("%d ", (*it).order);}return 0;
}

其中重载运算符函数bool operator<(const Order &rhs) const改成bool operator>(const Order &rhs) const都会报错

这个函数是什么意思呢?查了copilot得到下述解释:

bool operator<(const Order &rhs) const 函数是一个运算符重载函数,用于定义 Order 对象之间的“小于”关系。在这个函数中,rhs 是右操作数,this 是左操作数。函数返回一个布尔值,表示当前对象是否小于 rhs 对象。

在这个具体的例子中,bool operator<(const Order &rhs) const 函数比较两个 Order 对象的 order 成员变量。如果当前对象的 order 小于 rhs 对象的 order,则返回 true,否则返回 false

这个运算符重载函数在使用 std::set<Order> 时非常重要,因为 std::set 是一个有序容器,需要知道如何比较元素以保持其有序性。通过定义这个运算符重载函数,std::set 可以正确地比较和排序 Order 对象。

16、(多选)【set】set的说法正确的是(AC)

A.set的数据是有序的

B.set的数据是可重复的

C.set存储元素为结构体时,必须实现相应的比较函数

D.set内部实现的数据结构是Hash

E.set存储的key值可以修改

注:set是有序不重复的,数据结构是红黑树。Map也是

17、(单选)【map】下面输出结果正确的是(B)

int main() {
map<string ,int> mp;
mp.insert({"abc",3});
mp.insert({"def",1});
mp.insert({"abcdef",2});
for(auto iter = mp.begin();iter !=mp.end(); iter++){cout<< iter->second<<endl;
}
return 0;
}

A 3 1 2

B 3 2 1

C 2 3 1

D 2 1 3

map本身有序,这里按字符串升序,abc < abcdef < def,因此输出3 2 1

18、(多选)【map】下列代码中,删除list中某元素的操作正确的是(AD)(没搞懂)

list mapContainer;

A .

for (auto beg = _mapContainer.begin(); beg != _mapContainer.end();) {if (needToDelete(beg->first)) {beg = _mapContainer.erase(beg);} else {++beg;}
}  

B.

for (auto beg = _mapContainer.begin(); beg != _mapContainer.end(); ++beg) {if (needToDelete(beg->first)) {beg = _mapContainer.erase(beg);}
}

C.

for (auto beg = _mapContainer.begin(); beg != _mapContainer.end();) {if (needToDelete(beg->first)) {_mapContainer.erase(++beg);} else {++beg;}
}

D.

for (auto beg = _mapContainer.begin(); beg != _mapContainer.end();) {if (needToDelete(beg->first)) {_mapContainer.erase(beg++);} else {++beg;}
}

erase会返回下一个元素的位置

参考文章:C++之迭代器失效总结

19、(多选)【STL】以下关于STL库sort算法描述正确的是(ABD)

A. vector和deque的迭代器属于Random Access Iterator,适合使用sort算法

B. STL中的set和map自动排序功能,不能用sort算法

C. 对stack、queue和priority-queue容器,可以通过sort算法对元素进行排序

D. list迭代器属于Bidrectional Iterator,不适用于sort算法

关于D答案:

你说得对!std::list 的迭代器属于双向迭代器(Bidirectional Iterator),而 std::sort 算法要求使用随机访问迭代器(Random Access Iterator)。因此,不能直接对 std::list 使用 std::sort

如果你需要对 std::list 进行排序,可以使用 std::list 自带的 sort 成员函数。例如:

cpp

std::list<int> myList = {3, 1, 4, 1, 5, 9};
myList.sort();

这样就可以对 std::list 进行排序了

20、(多选)【STL】以下语句能够实现正确排序的有(AC)

A.

std::vector<int> coll;
std::sort(coll.begin(), coll.end());

B.

std::list<int> coll;
std::sort(coll.begin(), coll.end());

C.

std::deque<int> coll;
std::sort(coll.begin(), coll.end());

D.

std::queue<int> coll;
std::sort(coll.begin(), coll.end());

21、(单选)【迭代器】以下哪个选项可以表示迭代器iter当前指向的位置(D)

A. cout<<*iter;

B. cout<<(void*)iter

C. cout<<(int)iter

D. cout<<(iter - vec.begin())

奇奇怪怪的题目,写了下面的验证代码

int main()
{std::vector<int> vec{1,4,67,2,9};std::vector<int>::iterator iter = vec.end();cout << (iter - vec.begin());
}

大概意思就是确定迭代器现在在什么位置,通过和begin进行比较做差值可以得到迭代器iter距离begin的距离。

22、(多选)【迭代器】如下哪些场景可能会导致指向该容器中元素的迭代器失效(不再指向原来的元素)(BCE)

A. std::map的insert操作

B. std::vector的push_back操作

C. std::vector的erase操作

D. std::list的insert操作

E. std::deque的insert操作

解释:

vector和deque是序列式容器,进行元素的增删操作之后,迭代器失效;

对于关联式容器(map、list),删除当前的iterator只会使当前迭代失效,在erase时递增当前的iterator即可。

参考文章:C++之迭代器失效总结

这个题目和第18题都是比较懵的,上面这篇文章表述的比较清楚些。

基础知识

(字符串,函数指针,函数参数,变量生命周期与存储,类型别名,异常,作用域,数组指针引用,编译,const,mutable等)

堆栈

1、(单选)【存储】下面哪种变量定义不当,可能导致堆栈溢出(D)

A. 静态全局变量

B. 动态全局变量

C. 静态局部变量

D. 动态局部变量

2、(多选)【存储】栈一般用来存储什么(ABC)

A. 局部变量

B. 函数参数

C. 函数的返回值位置

D. const非0

栈区存放用于函数的返回地址、形参、局部变量、返回类型

Const比较特殊,放在只读数据区

3、(多选)【存储】关于定义过大的局部变量的描述正确的有哪些(BC)

A. 无不好的影响,使用简单,应该大量使用

B. 会导致内存镜像变大

C. 会导致使用栈空间变大

D. 会导致堆内存使用增加

至于为什么会导致内存镜像变大,这是因为局部变量在程序运行时会占用内存空间。当局部变量过大时,内存中需要存储的内容也会相应增多,从而导致内存镜像变大。内存镜像是程序在运行时内存中的数据结构和内容的一个副本,用于调试和分析程序。通过内存镜像,开发人员可以查看和检查程序的内存状态,帮助理解程序的行为和性能,并找出潜在的问题。

4、(多选)【存储】以下可能会导致栈溢出的是(AB)

A. char test[102410241024]

B. std::array(int, 102410241024);

C. std::vector(102410241024, 1);

D. std::string(102410241024, 1);

vector和string是在堆上申请内存的。

5、(多选)【存储】C++语言程序编译完成之后,关于bss、data数据段存放内容说法正确的有(ABD)

A. 初始化为0的全局变量一般存放在bss段

B. 初始化过(非零)的非const的全局变量一般保存在data段

C. 初始化过(非零)的const的全局变量一般保存在bss段

D. 未初始化的全局变量一般存放在bss段

BSS段(Block Started by Symbol segment):初始化为0或者未初始化的全局变量和静态变量保存在bss段。

Data段:已初始化的全局变量和静态变量以及字符串常量保存在data段

6、 (多选)【存储】下列代码都是函数内部声明的局部变量,其中可能会导致栈空间不足的有[x(1]

A. int var[1024 * 1024];

B. std::array<int, 1024 * 1024>var;

C. std::vector var(1024 * 1024);

D. std::pair<int, int[1024 * 1024]> var;

E. std::string var(1024 * 1024, ‘c’);

array和数组是在栈上的,pair是最简单的组合,成员是啥就是啥,vector在栈中保存指针,在堆中保存实际东西,string也是保存指针,具体实现参见stl

7、(单选)【存储】已知如上类声明,以下instance函数的实现中,会导致未定义行为的是(A)

A

MyClass* MyClass::Instance()
{MyClass Instance;return &Instance;
}

B

MyClass* MyClass::Instance()
{static MyClass* Instance = new MyClass;return Instance;
}

C

MyClass* MyClass::Instance()
{static MyClass Instance;return &Instance;
}

D

MyClass* g_instance = nullptr;
MyClass* MyClass::Instance()
{if (g_instance == nullptr){g_instance = new MyClass;}return g_instance;
}

A的局部变量返回时被销毁

考察static关键字

定义全局变量,同时检查全局变量是否为空

8、(多选)【存储】如下代码功能正确的是(AC)

A、

const char* GetString()
{const char* buff = “Test Buff”;return buff;                            
}

B、

char* GetString()
{char buff[] = “Test Buff”;return buff;
}

C、

char* GetString()
{static char buff[] = “Test Buff”;return buff;
}

D、

std::string& GetString()
{std::string buff(“Test Buff”);return buff;
}

这题因为返回的都是指针或者引用,所以必须找静态变量或者堆区变量。

A const char*可以这么用(必须带const),相当于指向一个静态字面常量,返回指针后不会被销毁。

B 只是用字面值给数组初始化,仍然是局部变量。D同理。

C是静态变量,也不会被销毁。

Ok:

Const char *

Char *

Static char buff[]

Not ok:

Char buff[]

Const char buff[]

Why:

字符串字面值常量具有静态存储期

9、(多选)【存储】忽略编码规范,能输出预期结果的是(ABC)

A.

const char* GetStrName()
{const char* data = “Hello World!;return data;
}

B.

char* GetStrName()
{char* data = “Hello World!;  //常量指针                                                                                         return data;
}                

C.

char* GetStrName()
{static char data[] = “Hello World!;return data;
}

D.

string& GetStrName()	
{string data = “Hello World!;return data;
}

A存在常量区,返回后不会被销毁

B也存在常量区,返回后不会被销毁,需要注意的是右边是const型,所以编译器可能会报warning

C是静态变量,返回后不会被销毁

D是局部变量,无法返回其引用

这个题目还涉及一个知识点,就是常量指针是什么。查了资料,有指向常量的指针和常量指针两个概念。看了资料也还是比较绕。。

常量指针(constant pointer)是指向常量的指针,另一个概念是指针常量

  1. 常量指针指向常量的指针:这种指针指向的值是常量,不能通过该指针修改指向的值,但指针本身可以改变指向的地址。例如:

    const int *ptr;
    int a = 10;
    int b = 20;
    ptr = &a; // 合法
    *ptr = 15; // 非法,不能修改指向的值
    ptr = &b; // 合法,可以改变指针指向的地址
    
  2. 指针常量:这种指针本身是常量,不能改变指针的指向,但可以通过该指针修改指向的值。例如:

    int *const ptr;
    int a = 10;
    int b = 20;
    ptr = &a; // 合法
    *ptr = 15; // 合法,可以修改指向的值
    ptr = &b; // 非法,不能改变指针指向的地址
    

针对B选项,c++11没有报错,只是警告【ISO C++11 does not allow conversion from string literal to 'char * '】,实际可以正常返回字符串。验证代码如下:

char* GetStrName()
{char* data = "Hello World!";  //常量指针return data;
}char* GetStrName2()
{char data[] = "Hello World!";return data;
}int main()
{char* str = GetStrName();char* str2 = GetStrName2();printf("%s\n", str);printf("%s\n", str2);
}// 打印信息
// Hello World!
// (null)

至于上面的警告,查看之后解释如下:

在C++11标准中,字符串字面量(如"hello world")通常被视为const char[]类型,即不可变的字符数组。直接将字符串字面量赋值给char*类型是不允许的,因为这样的操作会尝试去掉字符串字面量的常量性,这在C++中是不允许的。

如果你只需要读取字符串,可以使用const char* 来指向字符串字面量。


总结

未完待续

相关文章:

C++ K2 (2)

提示&#xff1a;文章 文章目录 前言一、背景标准库基础知识堆栈 总结 前言 前期疑问&#xff1a; 本文目标&#xff1a; 一、背景 接上文 标准库 1、&#xff08;单选&#xff09;【STL】在以下容器中间插入一个元素&#xff0c;时间复杂度为O(1)的是&#xff08;A&#x…...

【React】静态组件动态组件

目录 静态组件动态组件创建一个构造函数(类)使用 class 实现组件**使用 function 实现类组件** 静态组件 函数组件是静态组件&#xff1a; 组件第一次渲染完毕后&#xff0c;无法基于内部的某些操作让组件更新「无法实现自更新」&#xff1b;但是&#xff0c;如果调用它的父组…...

Spring Web MVC综合案例

承接上篇文章——Spring Web MVC探秘&#xff0c;在了解Spring Web MVC背后的工作机制之后&#xff0c;我们接下来通过三个实战项目&#xff0c;来进一步巩固一下前面的知识。 一、计算器 效果展示&#xff1a;访问路径&#xff1a;http://127.0.0.1:8080/calc.html 前端代码&a…...

OpenCV相机标定与3D重建(60)用于立体校正的函数stereoRectify()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 为已校准的立体相机的每个头计算校正变换。 cv::stereoRectify 是 OpenCV 中用于立体校正的函数&#xff0c;它基于已知的相机参数和相对位置&am…...

SDL2基本的绘制流程与步骤

SDL2(Simple DirectMedia Layer 2)是一个跨平台的多媒体库,它为游戏开发和图形应用提供了一个简单的接口,允许程序直接访问音频、键盘、鼠标、硬件加速的渲染等功能。在 SDL2 中,屏幕绘制的流程通常涉及到窗口的创建、渲染目标的设置、图像的绘制、事件的处理等几个步骤。…...

计算机网络 (42)远程终端协议TELNET

前言 Telnet&#xff08;Telecommunication Network Protocol&#xff09;是一种网络协议&#xff0c;属于TCP/IP协议族&#xff0c;主要用于提供远程登录服务。 一、概述 Telnet协议是一种远程终端协议&#xff0c;它允许用户通过终端仿真器连接到远程主机&#xff0c;并在远程…...

重拾Python学习,先从把python删除开始。。。

自己折腾就是不行啊&#xff0c;屡战屡败&#xff0c;最近终于找到前辈教我 第一步 删除Python 先把前阵子折腾的WSL和VScode删掉。还是得用spyder&#xff0c;跟matlab最像&#xff0c;也最容易入手。 从VScode上搞python&#xff0c;最后安装到appdata上&#xff0c;安装插…...

51c大模型~合集106

我自己的原文哦~ https://blog.51cto.com/whaosoft/13115290 #GPT-5、 Opus 3.5为何迟迟不发 新猜想&#xff1a;已诞生&#xff0c;被蒸馏成小模型来卖 「从现在开始&#xff0c;基础模型可能在后台运行&#xff0c;让其他模型能够完成它们自己无法完成的壮举——就像一个老…...

node安装教程及环境配置

1.下载安装包 下载的网址&#xff1a;Node.js — Download Node.js 根据自己电脑系统及位数选择&#xff0c;电脑是Windows系统、64位、想下载稳定版的.msi&#xff08;LTS为长期稳定版&#xff09;这里选择windows64位.msi格式安装包。 .msi和.zip格式区别&#xff1a; .msi…...

Temp123

MapDB&#xff1a;的持久化机制&#xff0c;以及源码分析和摘取 1、spark streaming--struct streaming 基于 时间间隔 攒批 2、kafka-connect-hdfs 控制 flush.size 和 interval.ms控制 攒批 - 完全自研 攒批机制 - 使用 embeded 版 https://lxblog.com/qianwen/share?shar…...

YOLO系列代码

Test-Time Augmentation TTA (Test Time Augmentation)是指在test过程中进行数据增强。其思想非常简单&#xff0c;就是在评测阶段&#xff0c;给每个输入进行多种数据增广变换&#xff0c;将一个输入变成多个输入&#xff0c;然后再merge起来一起输出&#xff0c;形成一种ens…...

2025.1.16——一、NewsCenter

题目来源&#xff1a;攻防世界 NewsCenter 目录 一、题目 二、sqlmap解题——bp抓包存为txt文件进行爆破 step 1&#xff1a;search框内随便输入&#xff0c;进行抓包 step 2&#xff1a;抓包后&#xff0c;存到txt文件&#xff0c;进行sqlmap step 3&#xff1a;-r获取文…...

Java中的继承

引入继承 Java中使用类对实体进行描述&#xff0c;类经过实例化之后的产物对象&#xff0c;就可以用来表示现实中的实体&#xff0c;描述的事物错综复杂&#xff0c;事物之间可能会存在一些关联&#xff0c;因此我们就需要将他们共性抽取&#xff0c;面向对象的思想中提出了继…...

vue3+ts+uniapp 微信小程序(第一篇)—— 微信小程序定位授权,位置信息权限授权

文章目录 简介一、先看效果1.1 授权定位前&#xff0c;先弹出隐私协议弹框1.2 上述弹框点击同意&#xff0c;得到如下弹框1.3 点击三个点&#xff0c;然后点设置 1.4 在1.2步骤下&#xff0c;无论同意或者拒绝 二、manifest.json 文件配置三、微信公众平台配置3.1 登录进入微信…...

在Playwright中使用PO模式

1.新建项目 安装库 npm init -y npm install -D playwright npm install -D playwright/test npm install typescript ts-node types/node npx playwright install 项目目录 2.编写代码 package.json {"name": "pom_playwright","version": …...

三台 Centos7.9 中 Docker 部署 Redis 哨兵模式

三台 Centos7.9 中 Docker 部署 Redis 哨兵模式 1. 环境规划2. 配置 Docker Compose3. 配置 Redis 密码和持久化4. 配置哨兵5. 启动服务6. 验证 Redis 哨兵模式7. 注意事项 1. 环境规划 三台服务器的角色分配如下&#xff1a; IP Address容器端口角色192.168.15.128redis-mas…...

JSON数据格式的序列化和反序列化jackson针对首字母小学的字段返回序列化后第2个大写字母也变成小写的问题处理

SpringBoot类属性”第二个字母大写“反序列化问题。key第二个字母大写会被转成小写 , 这个为 jackson 的bug。 后台 : String pName; public String getPName() { return pName; } 前台 : { pname : xxx } 解决方案&#xff1a; 使用JsonProperty("pName")…...

Android wifi列表中去自身的热点

Android wifi列表中去自身的热点 一、前言 Android wifi列表中能搜索到自身的热点wifi&#xff1f; 正常手机上都不会出现这个问题&#xff1b;可能是系统底层已经做了过滤处理。 现实开发中Android设备的Wifi能搜索到自身热点也可能会存在。 比如基于两个单独的wifi双模组硬…...

Elasticsearch:Jira 连接器教程第二部分 - 6 个优化技巧

作者&#xff1a;来自 Elastic Gustavo Llermaly 将 Jira 连接到 Elasticsearch 后&#xff0c;我们现在将回顾最佳实践以升级此部署。 在本系列的第一部分中&#xff0c;我们配置了 Jira 连接器并将对象索引到 Elasticsearch 中。在第二部分中&#xff0c;我们将回顾一些最佳实…...

单线性激光扫描、多线性激光扫描?激光扫描三维重建算法环节

分类 都属于激光扫描技术&#xff0c;但它们在光源的数量和工作方式上存在一些差异。 单线性激光扫描&#xff1a; 单线性激光扫描使用单个线状光源进行扫描。光源沿一个方向移动&#xff0c;将一条直线上的目标进行扫描。这种方式适用于需要获取目标表面在一个维度上的信息的…...

git 常用命令 git archive

git archive 是 Git 中用于创建一个包含指定提交或分支中所有文件的归档文件&#xff08;如 .tar 或 .zip&#xff09;的命令。这个命令非常适合用于分发项目快照、备份代码库或导出特定版本的文件。 git archive --formatzip --outputproject.zip HEAD …...

CMD批处理命令入门(6)——常用的特殊字符

CMD批处理命令入门&#xff08;6&#xff09;——特殊字符 本章内容主要学习要点&#xff1a;重定向符 >、>>命令管道符 |组合命令 &、&&、||转义字符 ^变量引导符 %界定符 "" 本章内容主要学习要点&#xff1a; >、>>重定向符| 命令…...

大模型WebUI:Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(6)

大模型WebUI&#xff1a;Gradio全解11——Chatbot&#xff1a;融合大模型的多模态聊天机器人&#xff08;6&#xff09; 前言本篇摘要11. Chatbot&#xff1a;融合大模型的多模态聊天机器人11.6 为LLM Agent构建UI11.5.1 使用代理构建1. 使用transformers.agents的实际示例2. 使…...

【算法】前缀和

前缀和 1.【模板】前缀和2.最大子段和3.【模板】二维前缀和4.激光炸弹 前缀的核心思想是预处理&#xff0c;可以在暴力枚举的过程中&#xff0c;快速查询出某一段区间内的和&#xff0c;从而优化时间复杂度。是经典的用空间替换时间的做法。 1.【模板】前缀和 【模板】前缀和…...

android Recyclerview viewholder统一封装

Recyclerview holder 统一封装 ViewHolder类 import android.annotation.SuppressLint import android.content.Context import android.graphics.Color import android.graphics.drawable.GradientDrawable import android.os.Build import android.os.CountDownTimer import…...

【Linux系统】Ext系列磁盘文件系统二:引入文件系统(续篇)

inode 和 block 的映射 该博文中有详细解释&#xff1a;【Linux系统】inode 和 block 的映射原理 目录与文件名 这里有几个问题&#xff1a; 问题一&#xff1a; 我们访问文件&#xff0c;都是用的文件名&#xff0c;没用过 inode 号啊&#xff1f; 之前总是说可以通过一个…...

为AI聊天工具添加一个知识系统 之46 蒙板程序设计(第一版):Facet六边形【意识形态:操纵】

本文要点 要点 (原先标题冒号后只有 “Facet”后改为“Face六边形【意识形态】” &#xff0c;是 事后想到的&#xff0c;本文并未明确提出。备忘在这里作为后续的“后期制作”的备忘) 前面讨论的&#xff08;“之41 纯粹的思维”&#xff09;中 说到&#xff0c;“意识”三…...

Vue.js组件开发-如何处理跨域请求

在Vue.js组件开发中&#xff0c;处理跨域请求&#xff08;CORS&#xff0c;即跨来源资源共享&#xff09;通常不是直接在Vue组件中解决的&#xff0c;而是需要后端服务器进行相应的配置&#xff0c;以允许来自不同源的请求。不过&#xff0c;前端开发者也需要了解一些基本的COR…...

unity学习19:unity里用C#脚本获取 gameobject 和 Componenet

目录 1 gameObject 和component 2 gameObject 与C#脚本 2.1 使用 this.gameObject 或gameObject&#xff08;注意大小写&#xff09; 2.2 获得其他信息 3 获取其他 GameObject的方法 3.1 获得自身挂载的GameObject 3.2 用find去查找其他的GameObject的名字或tag 3.3 …...

【React】插槽渲染机制

目录 通过 children 属性结合条件渲染通过 children 和 slot 属性实现具名插槽通过 props 实现具名插槽 在 React 中&#xff0c;并没有直接类似于 Vue 中的“插槽”机制&#xff08;slot&#xff09;。但是&#xff0c;React 可以通过 props和 children 来实现类似插槽的功能…...

【数据分享】1929-2024年全球站点的逐月平均气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01;本次我们为大家带来的就是具体到气象监…...

立创开发板入门第六课 音频-扬声器和麦克风 I2S驱动

音频芯片介绍 开发板上带有一个麦克风&#xff0c;一个扬声器&#xff0c;音频编解码芯片使用ES8311。麦克风直接连接到了ES8311芯片上&#xff0c;ES8311和扬声器之间&#xff0c;还有一个音频驱动放大器。ES8311通过I2S接口与ESP32-C3连接。 ES8311这个芯片不仅使用I2S接口…...

使用 Java 实现基于 DFA 算法的敏感词检测

使用 Java 实现基于 DFA 算法的敏感词检测 1. 引言 敏感词检测在内容审核、信息过滤等领域有着广泛的应用。本文将介绍如何使用 DFA&#xff08;Deterministic Finite Automaton&#xff0c;确定有限状态自动机&#xff09; 算法&#xff0c;在 Java 中实现高效的敏感词检测。…...

springboot集成websocket实现实时大量数据,效率性能高

前言 小编我将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注一下&#xff01; 也许一个人独行&#xff0c;可以走的很快&#xff0c;但是一群人结伴而行&#xff0c;才能走的更远&#xff01;让我们在成长的道路上互相学习&…...

如何在 Google Cloud Shell 中使用 Visual Studio Code (VS Code)?

Google Cloud Shell 是一个基于浏览器的命令行界面&#xff0c;它提供了一个临时的虚拟机环境&#xff0c;允许开发者在没有本地环境配置的情况下使用 Google Cloud 的各种服务。它还提供了一个免费的 5GB 存储空间以及可以在其中执行所有 Google Cloud 操作的命令行界面。 Vis…...

ChatGPT大模型极简应用开发-目录

引言 要理解 ChatGPT&#xff0c;了解其背后的 Transformer 架构和 GPT 技术一路的演进则变得非常必要。 ChatGPT 背后的 LLM 技术使普通人能够通过自然语言完成过去只能由程序员通过编程语言实现的任务&#xff0c;这是一场巨大的变革。然而&#xff0c;人类通常容易高估技术…...

ZooKeeper 核心知识全解析:架构、角色、节点与应用

1.ZooKeeper 分布式锁怎么实现的 ZooKeeper 是一个高效的分布式协调服务&#xff0c;它提供了简单的原语集来构建更复杂的同步原语和协调数据结构。利用 ZooKeeper 实现分布式锁主要依赖于它的顺序节点&#xff08;Sequential Node&#xff09;特性以及临时节点&#xff08;Ep…...

redis实现限流

令牌桶逻辑 计算逻辑&#xff1a; 代码&#xff1a; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool;/*** ClassName RedisRateLimiterTokenBucket* Description TODO* Author zhang zhengdong* DATE 2025/1/17 20:22* Version 1.0*/ public class…...

云服务器扫描出漏洞怎么办?

随着云计算技术的发展&#xff0c;越来越多的企业和个人选择使用云服务器来托管其应用和服务。然而&#xff0c;安全问题也随之而来。当云服务器的安全扫描显示存在漏洞时&#xff0c;如何正确应对成为了关键。本文将详细介绍发现漏洞后的处理步骤&#xff0c;并提供一些实用的…...

【影刀RPA_启动任务api】

影刀RPA_启动任务api #启动任务api import requests import json from time import sleepyingdao_Info{"accessKeyId":"XXX","accessKeySecret":"XXX","scheduleUuid":XXX,"robotUuid1":"XXX","r…...

Swift语言的多线程编程

Swift语言的多线程编程 在现代软件开发中&#xff0c;多线程编程是提高应用性能和响应速度的重要手段。尤其是在 iOS 和 macOS 开发中&#xff0c;由于用户界面(UI)的交互性和复杂性&#xff0c;合理利用多线程可以极大地提升用户体验。本文将深入探讨 Swift 语言中的多线程编…...

js-判断一个object(对象)是否为空

1.Object.keys() 方法 const obj {};if (Object.keys(obj).length 0) {console.log(Object is empty); } else {console.log(Object is not empty); }Object.keys() 方法返回一个包含对象自身可枚举属性名称的数组。如果这个数组为空&#xff0c;那么对象就是空的。 2.JSO…...

AI在SEO中的关键词优化策略探讨

内容概要 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;正逐渐重塑搜索引擎优化&#xff08;SEO&#xff09;行业。AI技术的快速发展使得SEO策略发生了翻天覆地的变化&#xff0c;特别是在关键词优化方面。关键词优化的基本概念是通过选择与用户搜索意图密…...

无缝过渡:将 Ansys 子结构模型转换为 Nastran

了解如何将 Ansys 子结构模型无缝转换为 Nastran&#xff0c;以满足有效载荷动态模型要求 Ansys 子结构模型的优势 Ansys 子结构模型为从事大型装配体结构分析和仿真的工程师和分析师提供了多项优势。 这些模型通过将复杂结构划分为更小、更易于管理的子结构&#xff0c;可以…...

单片机存储器和C程序编译过程

1、 单片机存储器 只读存储器不是并列关系&#xff0c;是从ROM发展到FLASH的过程 RAM ROM 随机存储器 只读存储器 CPU直接存储和访问 只读可访问不可写 临时存数据&#xff0c;存的是CPU正在使用的数据 永久存数据&#xff0c;存的是操作系统启动程序或指令 断电易失 …...

Unity3D实现WEBGL打开Window文件对话框打开/上传文件

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、效果展示👉一、unity设置👉1-1、创建Plugins文件夹👉1-2、搭建UI👉二、使用步骤👉2-1、打包webgl👉三、第二种插件实现打开文件对话框👉壁纸分享👉总结👉前言 Unity3D发布的WEBGL程序是不支持…...

探索 Transformer²:大语言模型自适应的新突破

目录 一、来源&#xff1a; 论文链接&#xff1a;https://arxiv.org/pdf/2501.06252 代码链接&#xff1a;SakanaAI/self-adaptive-llms 论文发布时间&#xff1a;2025年1月14日 二、论文概述&#xff1a; 图1 Transformer 概述 图2 训练及推理方法概述 图3 基于提示的…...

SDL2:arm64下编译使用 -- SDL2多媒体库使用音频实例

SDL2&#xff1a;Android-arm64端编译使用 2. SDL2&#xff1a;Android-arm64端编译使用2.1 安装和配置NDK2.2 下载编译SDL22.3 SDL2使用示例&#xff1a;Audio2.4 Android设备运行 2. SDL2&#xff1a;Android-arm64端编译使用 在Linux系统上使用Android NDK编译和使用arm64下…...

Ubuntu、Windows系统网络设置(ping通内外网)

一、 虚拟机VMware和Ubuntu系统的网络配置说明 1、虚拟机的网络适配器的模式有三种&#xff1a; 桥接模式NAT模式主机模式 2、虚拟机VMware的网卡配置(如何进行配置界面(虚拟机->设置)) 注意&#xff1a; 1、以上桥接模式(ubuntu有独立IP)、NAT模式(没有独立IP)都可以联…...

安全类脚本:拒绝ssh暴力破解

要求如下&#xff1a; 一个小时内&#xff0c;连续密码错误4次。 Linux lastb 命令用于列出登入系统失败的用户相关信息。 实验过程如下&#xff1a; 1. 创建两个IP地址不同的干净环境&#xff0c;分别是&#xff1a;192.168.46.101 Rocky 2 和 192.168.46.120 openEuler 2. 2.…...