2023/9/13 -- C++/QT
作业:
1> 将之前定义的栈类和队列类都实现成模板类
栈:
#include <iostream>
#define MAX 40
using namespace std;template <typename T>
class Stack{
private:T *data;int top;
public:Stack();~Stack();Stack(const Stack &other);Stack &operator=(const Stack &other);//判空bool empty();//判满bool full();//获取栈的大小int size();//入栈void push();//出栈void pop();//获取栈顶元素T get_top();
};template <typename T>
Stack<T>::Stack():data(new T[MAX]),top(-1){cout<<"无参构造"<<endl;
}
template <typename T>
Stack<T>::~Stack(){delete []data;cout<<"析构函数"<<endl;
}
template <typename T>
Stack<T>::Stack(const Stack &other){top = other.top;data = new T[MAX];memcpy(data,other.data,sizeof(other.data[0])*(other.top+1));cout<<"拷贝构造"<<endl;
}
template <typename T>
Stack<T>&Stack<T>::operator=(const Stack &other){top = other.top;memcpy(data,other.data,sizeof(other.data[0])*(other.top+1));cout<<"拷贝赋值"<<endl;
}
//判空
template <typename T>
bool Stack<T>::empty(){return top == -1;
}
//判满
template <typename T>
bool Stack<T>::full(){return top == MAX-1;
}
//获取栈的大小
template <typename T>
int Stack<T>::size(){return top+1;
}
//入栈
template <typename T>
void Stack<T>::push(){if(full()){cout<<"栈满!入栈失败!"<<endl;return;}T value;cout<<"请输入入栈的元素:";cin>>value;top++;data[top] = value;cout<<value<<" 入栈成功"<<endl;
}
//出栈
template <typename T>
void Stack<T>::pop(){if(empty()){cout<<"栈空!出栈失败!"<<endl;return;}T temp = data[top--];cout<<temp<<" 出栈成功"<<endl;
}
//获取栈顶元素
template <typename T>
T Stack<T>::get_top(){return data[top];
}int main()
{Stack<int> s;s.push();s.push();s.push();cout<<"s.size = "<<s.size()<<endl;s.pop();cout<<"s.get_top = "<<s.get_top()<<endl;s.pop();s.pop();s.pop();return 0;
}
队列:
#include <iostream>
#define MAX 40
using namespace std;template<typename T>
class Queue{
private:T *data;int front;int back;
public:Queue();~Queue();Queue(const Queue &other);Queue &operator=(const Queue &other);//判空bool empty();//判满bool full();//获取队列大小int size();//入队void push();//出队void pop();
};
template <typename T>
Queue<T>::Queue():data(new T[MAX]),front(0),back(0){cout<<"无参构造"<<endl;
}
template <typename T>
Queue<T>::~Queue(){delete []data;cout<<"析构函数"<<endl;
}
template <typename T>
Queue<T>::Queue(const Queue &other){front = other.front;back = other.back;data = new T[MAX];memcpy(data,other.data,sizeof(other.data[0])*((other.back+MAX-other.front)%MAX));cout<<"拷贝构造"<<endl;
}
template <typename T>
Queue<T>&Queue<T>::operator=(const Queue &other){front = other.front;back = other.back;memcpy(data,other.data,sizeof(other.data[0])*((other.back+MAX-other.front)%MAX));cout<<"拷贝赋值"<<endl;
}
//判空
template <typename T>
bool Queue<T>::empty(){return front == back;
}
//判满
template <typename T>
bool Queue<T>::full(){return (back+1)%MAX == front;
}
//获取队列大小
template <typename T>
int Queue<T>::size(){return (back+MAX-front)%MAX;
}
//入队
template <typename T>
void Queue<T>::push(){if(full()){cout<<"队满!入队失败!"<<endl;return;}T value;cout<<"请输入要入队的元素:";cin>>value;data[back] = value;back = (back+1)%MAX;cout<<value<<" 入队成功"<<endl;
}
//出队
template <typename T>
void Queue<T>::pop(){if(empty()){cout<<"队空!出队失败!"<<endl;return;}T temp = data[front];front = (front+1)%MAX;cout<<temp<<" 出队成功"<<endl;
}int main()
{Queue<int> q;q.push();q.push();q.push();cout<<"q.size = "<<q.size()<<endl;q.pop();q.pop();q.pop();q.pop();cout<<"q.size = "<<q.size()<<endl;return 0;
}
2> 将继承和多态的课堂代码敲一遍
一、继承过程中的特殊成员函数
1.1 构造函数
1> 父子类中的构造函数不是同一个构造函数,父子类中拥有各自的构造函数
2> 需要在子类的构造函数初始化列表中,显性调用父类的有参构造完成对子类从父类中继承下来成员的初始化,否则系统会自动调用父类的无参构造来完成对其初始化,此时,如果父类中没有无参构造,则子类的构造函数会报错
3> 构造顺序:先构造父类再构造子类
1.2 析构函数
1> 父子类中会拥有各自的析构函数
2> 无需在子类的析构函数中显性调用父类的析构函数,当子类对象消亡时,系统会自动调用父类的析构函数,完成对子类从父类继承下来成员的内存回收工作,
3> 析构顺序:先析构子类再析构父类
1.3 拷贝构造
1> 父子类中拥有各自的拷贝构造函数
2> 需要在子类的拷贝构造函数初始化列表中,显性调用父类的拷贝构造函数完成对子类从父类中继承下来成员的初始化,如果没有显性调用父类的拷贝构造函数,系统会自动调用父类的无参构造来完成对其进行初始化工作,如果父类中没有无参构造,则子类的拷贝构造会报错
3> 如果父类中有指针成员指向堆区空间,则父类的拷贝构造需要使用深拷贝,如果子类有指针成员指向堆区空间,则子类需要使用深拷贝
1.4 拷贝赋值
1> 父子类中拥有给中的拷贝赋值函数
2> 需要在子类的拷贝赋值函数体内,显性调用父类的拷贝赋值函数,来完成对子类从父类中继承下来成员的赋值,如果没有显性调用父类的拷贝赋值函数,则系统啥也不干,子类从父类继承下来的成员的值保持不变。
3> 拷贝赋值也涉及深浅拷贝问题
二、多重继承
2.1 含义
所谓多重继承,就是可以由多个类共同派生出一个子类,该子类会继承所有父类的特征
2.2 继承格式
class 子类名:继承方式1 父类1,继承方式2 父类2,。。。,继承方式n 父类n
{//子类拓展成员
}
三、虚继承
3.1 菱形继承(钻石继承)问题
A --> 公共基类/ \B C --> 中间子类\ /D --> 汇聚子类
在继承过程中,由一个公共基类,派生出多个中间子类,再由这若干个子类的一部分共同派生出一个汇聚子类,就会导致汇聚子类中保留多份由公共基类传下来的成员,使得子类内存冗余、并且访问起来也比较麻烦
3.2 虚继承
1> 为了解决以上的菱形继承问题,我们可以引入虚继承:就是在生成中间子类时,在继承方式前加关键字virtual,那么,再由这些中间子类生成汇聚子类时,汇聚子类中就只保留一份公共基类传下来的数据
2> 一般的继承,需要在子类的构造函数初始化列表中,显性调用直接父类的构造函数,完成对继承下来成员的初始化。但是,在虚继承中,由于汇聚子类中只有一份公共基类的成员,不能确定由哪个直接父类对公共基类继承下来成员进行初始化,索性不使用直接父类对其进行初始化工作,直接调用公共基类的构造函数来完成对从公共基类中继承下来成员的初始化工作,如果没有显性调用公共基类的有参构造,那么系统会自动调用公共基类的无参构造完成初始化工作,此时,如果公共基类中没有无参构造,则汇聚子类的构造函数会报错。
#include <iostream>using namespace std;class A
{
protected:int value_a;
public:A() {cout<<"A::无参构造"<<endl;}A(int a):value_a(a) {cout<<"A::有参构造"<<endl;}
};//虚继承格式:再生成中间子类时,继承方式前加virtual关键字
class B:virtual public A
{
protected:int value_b;
public:B() {cout<<"B::无参构造"<<endl;}B(int a, int b):A(a), value_b(b){cout<<"B::有参构造"<<endl;}
};class C:virtual public A
{
protected:int value_c;
public:C() {cout<<"C::无参构造"<<endl;}C(int a, int c):A(a), value_c(c){cout<<"C::有参构造"<<endl;}
};//由中间子类生成汇聚子类
class D:public B, public C
{
private:int value_d;
public:D() {}D(int a1, int a2, int b, int c, int d):A(a2),B(a1,b), C(a2,c), value_d(d) {cout<<"D::有参构造"<<endl;}void show(){cout<<"value_b = "<<value_b<<endl;cout<<"value_c = "<<value_c<<endl;cout<<"value_d = "<<value_d<<endl;
// cout<<"value_a = "<<B::value_a<<endl;
// cout<<"value_a = "<<C::value_a<<endl;cout<<"value_a = "<<value_a<<endl;}
};
四、多态
4.1 概念
所谓多态,就是一种形式的多种状态,多态是实现泛型编程的重要部分,能够实现“一条语句多用”
泛型编程:试图以不变的程序执行可变的功能
4.2 多态实现条件
1> 继承:没有继承就没有多态
2> 虚函数:实现函数重写,保证父子类中使用同一个函数
3> 父类指针或引用指向子类对象,调用子类中重写的父类的虚函数
4.3 虚函数
1> C++中可以将成员函数定义成虚函数,定义格式:在定义成员函数前加关键字virtual
2> 作用:以保证父类空间能够寻找到子类中重写的跟父类函数原型相同的函数
4.4 虚函数的底层实现
4.5 虚析构函数
1> 引入目的:正确引导delete关键字,在释放父类指针空间时,将子类空间一并释放
2> 定义格式:在析构函数前面加关键字virtual
3> 如果类中某个函数设置成虚函数,那么该类的子子孙孙类中的该函数都是虚函数
4> 在特殊的成员函数中,只有析构函数能设置成虚函数
5> 在定义类的时候,要养成将析构函数定义成虚析构函数,以便于内存的管理工作
#include <iostream>using namespace std;class Father
{
protected:string name;int age;public:Father() {}Father(string n, int a):name(n), age(a) {cout<<"Father::有参构造"<<endl;}virtual ~Father() {cout<<"Father::析构函数"<<endl;}
};class Son:public Father
{
private:string toy;public:Son(){}Son(string n, int a, string t):Father(n,a), toy(t) {cout<<"Son::有参构造"<<endl;}~Son(){cout<<"Son::析构函数"<<endl;}
};int main()
{//定义父类指针,指向堆区的子类对象Father *p = new Son("张三", 18, "car");//释放堆区空间delete p;return 0;
}
4.6 纯虚函数
1> 引入背景:对于一个类而言,某些函数没有实现的必要,或者实现这些函数没有意义。定义这些函数,纯粹为了让子类对其进行重写,以便于后期可以使用父类的指针或引用指向子类对象,去调用子类中重写的该函数,此时就可以将该函数定义成纯虚函数
2> 纯虚函数的定义格式:将虚函数的函数体去掉,用=0进行替换:virtual 函数类型 函数名(形参列表) = 0;
3> 包含纯虚函数的类称为抽象类,抽象类不能实例化对象
4> 纯虚函数必须由子类进行重写,如果子类中没有重写纯虚函数,那么在子类中该函数还依然是纯虚函数,子类也是抽象类
#include <iostream>using namespace std;class Shape
{
protected:double perimeter;double area;public:Shape():perimeter(0), area(0) {}//定义两个虚函数virtual double get_p() = 0; //该函数就是纯虚函数virtual double get_a() = 0;};//定义圆形类
class Circle:public Shape
{
private:double radius;
public:Circle(double r = 0):radius(r){}//重写父类中提供的虚函数double get_a() override{area = 3.14*radius*radius;return area;}double get_p() override{perimeter = 2*radius*3.14;return perimeter;}
};//定义矩形类
class Rectangle:public Shape
{
private:double width;double height;
public:Rectangle(double w=0, double h=0):width(w), height(h){}//重写父类中提供的虚函数double get_a() override{area = width*height;return area;}double get_p() override{perimeter = 2*(width+height);return perimeter;}
};//定义全局函数输出给定图形的周长和面积
void show(Shape &s)
{cout<<"周长 = "<<s.get_p()<<" 面积 = "<<s.get_a()<<endl;//cout<<"周长 = "<<s.Shape::get_p()<<" 面积 = "<<s.Shape::get_a()<<endl;
}int main()
{//实例化一个圆形Circle c1(2);show(c1);Rectangle r1(3,4);show(r1);cout<<"*******************************"<<endl;//Shape s; //包含纯虚函数的类称为抽象类,抽象类不能实例化对象return 0;
}
五、泛型编程之模板(template)
模板是能够将数据类型进一步抽象,我们之前所接触的抽象,都是完成对数据的相关抽象
模板分为模板函数、模板类
5.1 模板函数
1> 程序员有时定义函数时,会因为函数参数类型不同,导致同一功能的函数需要定义多个,即使有函数重载,系统会自动匹配相应的函数,也会造成代码的冗余
2> C++提供函数模板机制:使用函数时,形参的类型也由实参进行传递,定义模板函数时,模板函数的参数,不仅能接收实参的值,也能接收实参的类型
3> 定义格式
template <typename 类型形参1,typename 类型形参2,。。。,typename 类型形参n>
函数返回值类型 函数名(形参列表){函数体内容}注意
template是定义模板的关键字
<>:中是类型的参数,用于接收实参传递的类型
typename:用于定义类型形参变量的,也可以使用class
函数体中,可以使用模板中的类型作为函数返回值、函数形参、局部变量的类型
4> 调用方式
1、隐式调用:调用时跟普通函数调用一样,系统会自动根据传进来的实参类型,推导出模板的类型参数
2、显式调用:在函数名后,实参括号前,加<>,传递类型形参的值,调用原则:尖找尖、圆找圆
3、一般模板函数要求显式调用
5> 注意事项
一个模板下面只能定义一个函数,如果要定义多个模板函数,需要定义多个模板
#include <iostream>using namespace std;//定义一个模板函数
template<typename T>
T sum(T m, T n)
{return m+n;
}//定义新的模板函数,不能多个模板函数共同使用一个模板
template<typename T>
T div(T m, T n)
{return m-n;
}int main()
{cout << sum<int>(3.3,5) << endl; //8 显式调用模板函数cout << sum(3.2,5.3) << endl; //8.5cout << sum(string("hello"),string("world")) << endl;return 0;
}
6> 模板函数的特化
当基础模板和特化模板同时出现时,如果是隐式调用,默认调用基础模板,如果是显式调用,则会调用特化模板
5.2 模板类
1> 引入背景:程序员有时定义类时,可能由于数据类型的不同,导致同样功能的类,需要定义多个,造成代码冗余问题
2> C++引入模板类,类中的一些类型可以是由调用时给定,由实参进行传递
3> 定义格式
template <typename 类型形参1,typename 类型形参2,。。。,typename 类型形参n>
class 类名
{//成员可以使用模板中的类型
};
4> 调用方式:只能显式调用,不能隐式调用
5> 在定义模板时,模板类外,但凡使用到类名,都需要重新再定义模板,并且使用类名时,需要给定类型
#include <iostream>using namespace std;template<typename T>
class Node
{
private:T data; //数据域Node *next; //指针域public:Node():next(NULL) {} //无参构造Node(T d):data(d), next(NULL){} //有参构造void show();};//在模板类外,但凡使用到模板类,都必须显性调用给定类型,需要重新定义模板
template <typename T>
void Node<T>::show()
{cout<<"data = "<<data<<endl;
}int main()
{Node<int> n1(520); //模板类的使用必须显性调用n1.show();Node<double> n2(3.14);n2.show();return 0;
}
相关文章:
2023/9/13 -- C++/QT
作业: 1> 将之前定义的栈类和队列类都实现成模板类 栈: #include <iostream> #define MAX 40 using namespace std;template <typename T> class Stack{ private:T *data;int top; public:Stack();~Stack();Stack(const Stack &ot…...
mybatis mapper.xml转建表语句
从网上下载了代码,但是发现没有DDL建表语句,只能自己手动创建了,感觉太麻烦,就写了一个工具类 将所有的mapper.xml放入到一个文件夹中,程序会自动读取生成建表语句 依赖的jar <dependency><groupId>org.d…...
封装使用Axios进行前后端交互
Axios是一个强大的HTTP客户端,用于在Vue.js应用中进行前后端数据交互。本文将介绍如何在Vue中使用Axios,并通过一个企业应用场景来演示其实际应用。 Axios简介 公众号:Code程序人生,个人网站:https://creatorblog.cn A…...
SOA、分布式、微服务
SOA: SOA是一种软件设计架构,用于构建分布式系统和应用程序。它将应用程序拆分为一系列松耦合的服务,这些服务通过标准化的接口进行通信,并能够以可编程方式组合和重用。SOA的目标是提高系统的灵活性、可扩展性和可维护性。 特点&…...
json数据传输压缩以及数据切片分割分块传输多种实现方法,大数据量情况下zlib压缩以及bytes指定长度分割
json数据传输压缩以及数据切片分割分块传输多种实现方法,大数据量情况下zlib压缩以及bytes指定长度分割。 import sys import zlib import json import mathKAFKA_MAX_SIZE 1024 * 1024 CONTENT_MIN_MAX_SIZE KAFKA_MAX_SIZE * 0.9def split_data(data):"&q…...
移动端APP测试-如何指定测试策略、测试标准?
制定项目的测试策略是一个重要的步骤,可以帮助测试团队明确测试目标、测试范围、测试方法、测试资源、测试风险等,从而提高测试效率和质量。本篇是一些经验总结,理论分享。并不是绝对正确的,也欢迎大家一起讨论。 文章目录 一、测…...
【Redis】深入探索 Redis 主从结构的创建、配置及其底层原理
文章目录 前言一、对 Redis 主从结构的认识1.1 什么是主从结构1.2 主从结构解决的问题 二、主从结构创建2.1 配置并建立从节点2.2.1 从节点配置文件2.2.2 启动并连接 Redis 主从节点2.2.3 SLAVEOF 命令2.2.4 断开主从关系 2.2 查看主从节点的信息2.2.1 INFO REPLICATION 命令2.…...
CSS 滚动驱动动画 scroll-timeline ( scroll-timeline-name ❤️ scroll-timeline-axis )
scroll-timelinescroll-timeline-name❤️scroll-timeline-axis 解决问题语法 animation-timeline-nameanimation-timeline-axis scroll-timeline ( scroll-timeline-name ❤️ scroll-timeline-axis ) 在 scroll() 的最后我们遇到了因为定位问题导致滚动效果失效的情况, 当…...
9.19号作业
2> 完成文本编辑器的保存工作 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QFontDialog> #include <QFont> #include <QMessageBox> #include <QDebug> #include <QColorDialog> #include <QColor&g…...
Mybatis学习笔记9 动态SQL
Mybatis学习笔记8 查询返回专题_biubiubiu0706的博客-CSDN博客 动态SQL的业务场景: 例如 批量删除 get请求 uri?id18&id19&id20 或者post id18&id19&id20 String[] idsrequest.getParameterValues("id") 那么这句SQL是需要动态的 还…...
element表格 和后台联调
1.配置接口 projectList:/api/goods/xxx,//产品列表2.请求接口(get请求默认参数page) // 产品列表 pageprojectList(params){return axios.get(base.projectList,{params})}3.获取数据 直接放到created里边去了 刷新页面就可以看到 async projectList(page){let res await t…...
基于SSM的智慧城市实验室主页系统的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
怒赞,阿里P8推荐的Java面试宝典:41个专题PDF(史上最全+面试必备)
《尼恩Java面试宝典》 40岁老架构师 尼恩 经过对大量 Java面试题 的不断梳理、迭代, 编著成5000页的《尼恩Java面试宝典》,致力于体系化, 系统化,形象化 梳理,形成一个大的知识体系,从而帮助大家 进大厂&a…...
线程池各个参数设置说明
1. corePoolSize 核心线程数 看处理业务属于IO密集型还是属于cpu密集型IO密集型: 通常设置为N1,还有一个计算公式:线程数 cpu数*(线程等待时间/线程总的处理时间) 但是由于服务器除了这个服务可能还部署有其他服务,…...
springBoot对接多个mq并且实现延迟队列---未完待续
mq调用流程 创建消息转换器 package com.wd.config;import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.context.annotation.Bean; import o…...
Pytorch从零开始实战04
Pytorch从零开始实战——猴痘病识别 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——猴痘病识别环境准备数据集模型选择模型训练数据可视化其他模型图片预测 环境准备 本文基于Jupyter notebook,使用Python3.8,Pytor…...
北大C++课后记录:文件读写的I/O流
前言 文件和平常用到的cin、cout流其实是一回事,可以将文件看作一个有限字符构成的顺序字符流,基于此,也可以像cin、cout读键盘数据那样对文件进行读写。 读写指针 输入流的read指针 输出流的write指针 注:这里的指针并不是普…...
详解Linux的grep命令
2023年9月19日,周二晚上 先写这么多吧,以后有空再更新,还要一些作业没写完.... 目录 概述查看grep命令的所有选项grep的常用选项选项-i选项-v选项-n选项-c编辑选项-l组合使用 概述 grep命令在Linux系统中是一个很重要的文本搜索工具和过…...
spark6. 如何设置spark 日志
spark yarn日志全解 一.前言二.开启日志聚合是什么样的2.1 开启日志聚合MapReduce history server2.2 如何开启Spark history server 三.不开启日志聚合是什么样的四.正确使用log4j.properties 一.前言 本文只讲解再yarn 模式下的日志配置。 二.开启日志聚合是什么样的 在ya…...
glibc: strlcpy
https://zine.dev/2023/07/strlcpy-and-strlcat-added-to-glibc/ https://sourceware.org/git/?pglibc.git;acommit;h454a20c8756c9c1d55419153255fc7692b3d2199 https://linux.die.net/man/3/strlcpy https://lwn.net/Articles/612244/ 从这里看,这个strlcpy、st…...
如何在 Buildroot 中配置 Samba
在 Buildroot 中配置 Samba 在 Buildroot 中配置 Samba 可以通过以下步骤完成: 1. 进入 Buildroot 的根目录。 2. 执行 make menuconfig 命令,打开 Buildroot 的配置菜单。 3. 在配置菜单中,使用键盘导航到 "Target packages" 选…...
SSM02
SSM02 此时我们已经做好了登录模块接下来可以做一下学生管理系统的增删改查操作 首先,我们应当有一个登录成功后的主界面 在webapp下新建 1.main.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"&…...
day3_QT
day3_QT 1、文件保存2、始终事件 -闹钟 1、文件保存 2、始终事件 -闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { clas…...
js-map方法中调用服务器接口
在 Array.prototype.map() 方法中调用服务器接口时,可以使用异步函数来处理。 示例: async function fetchData() {try {const response await fetch(https://api.example.com/data); // 通过 fetch 发送请求const data await response.json(); // 解…...
docker 已经配置了国内镜像源,但是拉取镜像速度还是很慢(gcr.io、quay.io、ghcr.io)
前言 国内用户在使用 docker 时,想必都遇到过镜像拉取慢的问题,那是因为 docker 默认指向的镜像下载地址是 https://hub.docker.com,服务器在国外。 网上有关配置 docker 国内镜像源的教程很多,像 腾讯、阿里、网易 等等都会提供…...
[linux(静态文件服务)] 部署vue发布后的dist网页到nginx
所以说: 1.windows下把开发好的vue工程打包为dist文件然后配置下nginx目录即可。 2.linux上不需要安装node.js环境。 3.这样子默认访问服务器ip地址,就可以打开,毕竟默认就是:80端口。...
智华计算机终端保护检查系统使用笔记
使用说明 【智华保密检查右键管理员运行后粘贴密码】—— 点击脚本更改系统时间【智华计算机终端保护检查系统】—— 打开检测软件进行保密检查 检测文件格式 .pdf .doc .docx .xls .pptx 检测时间日志 2023年9月14日A:【34:03秒】2023年9月14日B:【…...
前端面试话术集锦第 15 篇:高频考点(React常考进阶知识点)
这是记录前端面试的话术集锦第十五篇博文——高频考点(React常考进阶知识点),我会不断更新该博文。❗❗❗ 1. HOC 是什么?相比 mixins 有什么优点? 很多人看到高阶组件(HOC)这个概念就被吓到了,认为这东西很难,其实这东西概念真的很简单,我们先来看一个例子: func…...
汽车电子——产品标准规范汇总和梳理(适应可靠性)
文章目录 前言 一、电气性能要求 二、机械性能要求 三、气候性能要求 四、材料性能要求 五、耐久性能要求 六、防护性能要求 总结 前言 见《汽车电子——产品标准规范汇总和梳理》 一、电气性能要求 《GB/T 28046.2-2019(ISO 16750-2:2012&#…...
计算机是如何工作的(上篇)
计算机发展史 世界上很多的高科技发明,来自于军事领域 计算机最初是用来计算弹道导弹轨迹的 弹道导弹 ~~国之重器,非常重要 两弹一星 原子弹,氢弹,卫星(背后的火箭发射技术) 计算弹道导弹轨迹的计算过程非常复杂,计算量也很大 ~~ 但是可以手动计算出来的(当年我国研究两弹一…...
一个网站怎样做两个后台/软文推广是什么
欢迎加入我们的开源流媒体服务器项目:EasyDarwin,EasyDarwin是在Apple开源流媒体服务器Darwin Streaming Serverv6.0.3)基础上进行开发和维护的免费开源、高效、易扩展的面向企业级的流媒体平台框架,EasyDarwin开始于2013年,遵循 …...
建设网站的HTML代码/网站做优化一开始怎么做
听说99%的同学都来这里充电吖 本系列为线下学员学习笔记整理分享,如有想要报名参加线下培训,可以点击以下超链接文章了解,购买开发板可以到叁芯智能科技企业淘宝店下单。 各类研修班 | FPGA就业研修班,短期班…… 叁芯智能FPGA开发板,初学小白必备!...
最牛黑客做的白粉交易网站/google官方下载安装
Matlab求解方同轴波导的截止波长和特性阻抗作者:金静逯迈陈小强来源:《现代电子技术》2008年第03期摘要:采用有限差分法利用Matlab求解了方同轴波导的特性阻抗和高次模的…...
贵阳企业网站建设/网络销售好做吗
mybatis需要定位到执行哪条sql语句: 针对注解通过Mapper.java的全限定类名加方法名定位,例如: package com.xh.mapper; import com.xh.Admin; //接口方法必须与xml的id相同 xml代替注解作用 public interface AdminMapper {Select("se…...
口红做网站多少钱/微信广告平台推广
解决方法,在改py的头部第一行添加下面的代码即可 # -*- coding: utf-8 -*...
湖北大网站建设/google推广工具
微信小程序使用 腾讯位置服务插件 实现 地图选点和路线规划 效果图: 实现过程 点击“开发指南”,根据对应打开网页中的接入指引进行开发实现。 腾讯位置服务地图选点:开发指南 腾讯位置服务路线规划:开发指南 实现代码 1.app.json中添加如下代码 &…...