前端可以自己做网站么/网络优化工程师简历
一、C语言和C++有什么区别
- C语言是面向过程,强调用函数将问题分解为多个子任务,按顺序逐步进行。数据和操作分开
- C++则是面向对象,面向对象是一种基于对象和类的编程范式,关注如何利用对象来抽象和模拟现实世界的实体。因此引入了类,封装,继承,多态。将数据和操作紧密绑定。
- C++的标准库丰富,包含了STL(标准模版库),且有命名空间,避免命名冲突。
- 在动态内存管理方面也有不同
- C语言使用malloc和free进行动态内存管理。
- C++提供了new和delete运算符,支持对象的构造和析构。
二、C语言里的结构体和C++里的类有什么区别?
- 默认访问控制
- 在C语言中,结构体中的成员默认是公有的(没有访问控制)。
- 在C++中,类中的成员默认是私有的,即外部代码不能直接访问类的成员,除非显式声明为public。
- 函数成员
- C语言的结构体只能包含数据成员(变量),不能包含函数成员。如果你想在结构体中关联函数,只能通过函数指针的方式实现。
- C++的类可以包含函数成员(即方法),这允许类不仅存储数据,还可以直接操作数据,提供更丰富的行为。
- 继承和多态
- C语言的结构体不支持继承,也不支持多态。
- C++类支持继承(一个类可以从另一个类派生),并通过虚函数实现多态性,允许你通过基类指针或引用调用派生类的行为。这是面向对象编程的核心特性。
三、什么是运算符重载
- 运算符重载(Operator Overloading)是面向对象编程中的一种技术,它允许程序员重新定义或扩展已有的运算符(如 +、-、*、/ 等)在自定义类或对象上的行为。
#include <iostream>
using namespace std;class Complex {
public:int real, imag;Complex(int r = 0, int i = 0) : real(r), imag(i) {}// 重载加法运算符(+)Complex operator + (const Complex& other) {return Complex(this->real + other.real, this->imag + other.imag);}void display() {cout << real << " + " << imag << "i" << endl;}
};int main() {Complex c1(3, 4), c2(1, 2);Complex c3 = c1 + c2; // 使用重载的 + 运算符c3.display(); // 输出 4 + 6ireturn 0;
}
四、 同类型设备使用网线直连对线序的要求
- 在网络中,如果要将同类型的设备(如两台电脑、两台交换机)通过网线直连,使用的是交叉线(crossover cable)。
- 交叉线的线序要求是:
- 一端的1和2脚与另一端的3和6脚交叉连接
一端的1号针脚(发送数据 +)连接到另一端的3号针脚(接收数据 +)
一端的2号针脚(发送数据 -)连接到另一端的6号针脚(接收数据 -)
- 现代网络设备一般都支持Auto-MDIX,可以自动检测网线的类型并调整发送和接收线路,因此可以直接使用普通的直通线(Straight-through Cable)连接。
五、进程间的通信方式
- 管道:用于父子进程间的数据传递,分为匿名管道和命名管道(FIFO)。
- 信号(Signal):一种异步通知机制,用于向进程发送信号。
- 消息队列(Message Queue):通过消息的方式在进程间传递数据,按顺序存储消息。
- 共享内存(Shared Memory):多个进程共享同一块内存,直接读写内存中的数据,速度快。
- 信号量(Semaphore):用于控制进程对共享资源的访问,通常与共享内存结合使用。
- 套接字(Socket):通过网络协议进行进程间通信,支持跨主机通信。
六、什么是嵌入式或你对嵌入式的理解是什么?
- 嵌入式系统是一种专门为执行特定任务或功能设计的计算机系统,通常嵌入到更大的设备或系统中。
- 嵌入式系统的特点包括资源有限、对实时性的要求高、功耗低以及高度定制化。
七、C语言里的volatile关键字有什么作用
- volatile关键字用于告诉编译器不要对标记为volatile的变量进行优化。
- 读取volatile变量时,编译器会直接从内存中读取,而不是使用寄存器中的缓存值。
八、对多态的理解
- 多态是面向对象编程的特性之一,允许使用相同的函数名调用不同的函数,实现不同的功能。
- C++中多态通过虚函数来实现,基类中的虚函数在子类中可以被重写。
class Animal {
public:virtual void sound() {cout << "Some animal sound" << endl;}
};class Dog : public Animal {
public:void sound() override {cout << "Bark" << endl;}
};Animal* a = new Dog();
a->sound(); // 输出 "Bark",因为调用的是Dog类的sound函数。
九、如果一个类中含有纯虚函数能不能实例化该类?
- 不能。包含纯虚函数的类称为抽象类,不能实例化。如果一个类包含一个或多个纯虚函数,它只能作为基类供其他类继承,不能直接创建对象。
十、C++里的新特性有哪些?
- 智能指针,自动类型推导(auto关键字),lambda表达式,范围for循环:for(auto& element : container)。
十一、什么是僵尸进程?
- 僵尸进程是指一个已经终止但仍然存在于进程表中的进程。它的父进程还没有读取它的退出状态,因此系统仍然保留它的进程表项。父进程需要调用**wait()或waitpid()**来回收子进程的资源,避免系统资源浪费。
十二、管道的通信原理是什么?
- 管道(pipe)是一种用于进程间通信(IPC)的机制,它允许一个进程将数据写入管道,另一个进程从管道中读取数据。
- 数据在管道中以先进先出(FIFO)的方式传输。管道是单向的,如果需要双向通信,则需要使用两个管道。
十三、什么是端口号?
- 端口号是计算机网络中用于标识特定进程或服务的数字,用于区分同一设备上不同的网络应用。
十四、 IP地址和MAC地址有什么区别?
- IP地址:是一种逻辑地址,用于标识网络中的设备。可变
- MAC地址:是设备的物理地址,硬编码在网卡中,用于局域网内设备的标识,通常不会改变。
十五、常见的排序方法和原理
- 冒泡排序(Bubble Sort):通过重复比较相邻元素并交换,直到整个数组有序。时间复杂度为O(n²)。
- 选择排序(Selection Sort):每次从未排序部分选择最小(或最大)元素,放到已排序部分末尾。时间复杂度为O(n²)。
- 插入排序(Insertion Sort):将数组分为已排序和未排序部分,逐一将未排序元素插入到已排序部分的正确位置。时间复杂度为O(n²)。
- 归并排序(Merge Sort):采用分治法,将数组递归分为两半,分别排序后合并。时间复杂度为O(n log n)。
- 快速排序(Quick Sort):选择一个基准元素,将数组分为比基准小和大的两部分,递归排序。平均时间复杂度为O(n log n)。
- 堆排序(Heap Sort):利用堆数据结构将数组构建为最大堆或最小堆,然后逐步取出堆顶元素。时间复杂度为O(n log n)。
- 基数排序(Radix Sort):将数字分为若干位,从低位到高位依次进行计数排序。时间复杂度为O(n * k),k为数字的位数。
十六、编写实现数组排序的一种算法。说明为什么你会选择用这样的方法?
- 快速排序的实现
#include <iostream>
using namespace std;// 快速排序的分区函数
int partition(int arr[], int low, int high) {int pivot = arr[high]; // 选择最后一个元素作为基准int i = low - 1; // 小于基准的元素的索引for (int j = low; j < high; j++) {if (arr[j] < pivot) {i++;swap(arr[i], arr[j]); // 将小于基准的元素放到前面}}swap(arr[i + 1], arr[high]); // 将基准元素放到正确位置return i + 1; // 返回基准元素的位置
}// 快速排序的主函数
void quickSort(int arr[], int low, int high) {if (low < high) {int pi = partition(arr, low, high); // 获取分区点quickSort(arr, low, pi - 1); // 对左半部分排序quickSort(arr, pi + 1, high); // 对右半部分排序}
}int main() {int arr[] = {10, 7, 8, 9, 1, 5};int n = sizeof(arr) / sizeof(arr[0]);quickSort(arr, 0, n - 1);cout << "Sorted array: \n";for (int i = 0; i < n; i++)cout << arr[i] << " ";cout << endl;return 0;
}
十七、请实现strcpy函数
- 参数使用const修饰,防止函数内部修改. 参数需要检测,测量你的代码规范问题.
- 在 while ((*dest++ = *src++)); 这段代码中,并不需要显式地加入 \0(空字符),因为这段代码在复制字符串时,实际上已经处理了 \0 的情况。
- 当 *src++ 取到 \0 后,条件变为 0(因为 \0 的值为 0),循环结束。\0被复制了
#include <stdio.h>char *strcpy(char *dest, const char *src) {char *original_dest = dest;//保存目标字符串 dest 的原始地址。// 逐个字符复制,直到遇到字符串结束符 '\0'while ((*dest++ = *src++));return original_dest;
}
十八、memcpy、strcmp、strlen、strstr(看看就好)
- memcpy
#include <stdio.h>// 实现memcpy函数,将源内存区域的n个字节复制到目标内存区域
void *memcpy(void *dest, const void *src, size_t n) {// 将void指针转换为字符指针,便于逐字节操作char *d = dest;const char *s = src;// 按字节逐个复制,直到n个字节被复制完while (n--) {*d++ = *s++;}// 返回目标内存区域的指针return dest;
}
- strcmp
#include <stdio.h>// 实现strcmp函数,比较两个字符串,返回差值
int strcmp(const char *str1, const char *str2) {// 当两个字符串的字符相等且未到字符串末尾时,继续比较while (*str1 && (*str1 == *str2)) {str1++; // 移动到下一个字符str2++; // 移动到下一个字符}// 比较不相等的字符或到达字符串末尾,返回它们的差值return *(unsigned char *)str1 - *(unsigned char *)str2;
}
- strlen
#include <stdio.h>// 实现strlen函数,计算字符串的长度
size_t strlen(const char *str) {const char *s = str; // 保存原始指针// 遍历字符串直到遇到字符串结束符 '\0'while (*s) {s++; // 移动到下一个字符}// 返回字符串的长度,等于 s - strreturn s - str;
}
- strstr
#include <stdio.h>// 实现strstr函数,在主字符串中查找子字符串
char *strstr(const char *haystack, const char *needle) {// 如果子字符串为空,返回主字符串的起始地址if (!*needle) return (char *)haystack;// 遍历主字符串for (; *haystack; haystack++) {const char *h = haystack;const char *n = needle;// 比较主字符串和子字符串的字符while (*h && *n && (*h == *n)) {h++; // 移动到主字符串的下一个字符n++; // 移动到子字符串的下一个字符}// 如果子字符串遍历结束,表示找到匹配if (!*n) return (char *)haystack;}// 如果没有找到匹配,返回NULLreturn NULL;
}
十九、中断是什么,简述中断工作流程. 请描述中断的边沿触发和电平触发的区别,中断函数处理需要注意什么?
- 中断是指计算机系统中,当某些外部或内部事件发生时,处理器暂时中断当前正在执行的任务,转而处理该事件的一个机制。
- 中断的目的是让处理器可以响应外部设备或内部异常情况,避免轮询等待,提升系统效率。
- 工作流程
中断请求
处理中断请求
跳转中断服务程序
处理中断
恢复执行
- 边沿触发和电平触发的区别
- 边沿触发(Edge-triggered):中断信号由电平变化(从低到高或从高到低的边沿)引发
- 电平触发(Level-triggered): 中断信号由电平状态(高电平或低电平)引发。适合需要持续响应某些信号的场景(如设备准备好数据)。
- 中断函数处理需要注意的事项
- 中断处理要尽量简短
- 避免阻塞操作
- 中断优先级和嵌套
- 共享资源的同步问题
- 清除中断标志
- 保护上下文
- 简述 串口 i2c spi 总线的区别
串口通常指的是串行通信接口(UART),它是一种异步通信协议,两根信号线TX、RX,仅支持一对一通信I2C 是一种用于芯片之间的低速、短距离通信的同步串行总线,广泛用于传感器、EEPROM 和小型外围设备。
同步通信,需要时钟信号。主设备通过时钟控制数据传输。仅需两根线:数据线(SDA)和时钟线(SCL)
支持多主多从通信,一条 I2C 总线上可以挂接多个设备。每个设备都有唯一的地址,主设备根据地址选择从设备进行通信。SPI 是一种高速、全双工、同步的串行通信协议,常用于高速数据传输,如存储器、显示设备、AD/DA 转换器等。
同步通信,需要时钟信号。支持全双工通信(数据可以同时发送和接收)。
引脚数量:主设备输出的数据(MOSI:Master Out Slave In)从设备输出的数据(MISO:Master In Slave Out)时钟信号(SCK:Serial Clock)片选信号(CS/SS:Chip Select/Slave Select,用于选择从设备)
单主多从SPI:用于高速、短距离的通信,如存储设备、显示屏、ADC/DAC 等设备。
二十、简述adc原理,adc是如何测量电压的. 有时候会出计算题,求解电压数值.
- ADC(Analog-to-Digital Converter)是一种将模拟信号(如电压)转换为数字信号的电子设备。
- 工作步骤:抽样–>保持–>量化–>编码
- 公式:
二十一、定时器, pwm原理是什么?
-
定时器是一种用于计时或生成特定时间间隔的硬件模块,广泛应用于微控制器中。定时器的工作原理基于计数器,通过对时钟信号进行计数来实现定时功能。
-
溢出/中断:当计数器达到预设的最大值时,定时器会发生溢出,重新开始计数。在溢出时,定时器可以触发中断
-
PWM(Pulse Width Modulation,脉宽调制)是一种调节信号占空比的方法,通过调节脉冲信号中高电平持续时间与周期的比例来控制输出功率或模拟信号。
-
PWM用于电机控制、LED亮度调节、模拟信号生成
二十二、友元函数
- 友元函数是 C++ 中的一种机制,允许特定函数访问类的私有和保护成员。
- 可以实现类之间的紧密合作,而不需要通过公共接口访问数据。
二十三、接口和虚函数的区别
- 接口在 C++ 中并没有专门的语法,它通常通过纯虚函数(pure virtual function)来实现。
- 接口的特点
- 一个类如果所有的成员函数都是纯虚函数,并且没有数据成员,我们可以把它看作接口。
- 接口类不能实例化,只能被继承。
- 任何派生类必须实现所有的纯虚函数,才能被实例化。
- 区别:
- 接口用于定义一组行为或功能,任何实现该接口的类必须提供这些行为的具体实现。接口是为了强制派生类实现某些功能。
- 虚函数用于实现运行时多态,使得基类指针或引用可以在派生类中调用重写的函数。
- 一个类可以继承多个接口(多继承),这在定义类的行为时非常有用。
- 接口用于定义行为规范,使得不同类可以实现相同的功能。
二十四、Makefile的作用
- Makefile 是一个自动化构建工具的配置文件,主要用于管理项目的编译过程。它通过定义目标(target)、依赖(dependency)和命令(command),来描述如何从源代码生成可执行文件或其他目标。
- 在 Makefile 中,@ 符号用于抑制命令的回显。当你在 Makefile 中使用命令时,默认情况下,Make 会在执行命令之前将该命令打印到终端。如果你希望执行命令时不显示该命令,可以在命令前加上 @ 符号。
二十五、shell通道符的作用
- 在 Shell 中,通道符(|)用于将一个命令的输出作为另一个命令的输入。这个功能称为“管道”,可以将多个命令组合在一起,形成一个更复杂的操作。
ls -l | grep ".txt"
这个命令列出当前目录下的所有文件,然后通过 grep 筛选出包含 .txt 的文件。
二十六、链接库的参数
-l
- 用于链接库文件。格式为 -l<库名>,其中 <库名> 是去掉前缀 lib 和后缀 .a 或 .so 的库名。
gcc main.c -o my_program -lm # 链接数学库 libm.so
-L
- 指定库文件搜索路径。默认情况下,链接器会在系统的标准库路径中查找库文件,使用 -L 可以添加自定义路径。
gcc main.c -o my_program -L/path/to/lib -lmylib # 链接自定义路径中的 libmylib.so
二十七、open和fopen
- open是一个系统调用,用于打开文件并返回一个文件描述符(file descriptor),这是一个用于标识打开文件的非负整数。
- fopen 是一个标准库函数,用于打开文件并返回一个指向 FILE 结构的指针,提供更高级别的文件操作接口。
- 对于简单的文件操作,通常使用 fopen 更为方便。
- fopen有缓冲区
二十八、fopen的第一个参数
- fopen函数的第一个参数是文件名(路径),它指定了要打开或创建的文件的名称和位置。这个参数可以是一个相对路径或绝对路径,具体取决于你的需求。
二十九、多重继承会有什么问题
- 可能导致歧义:当两个父类有共同的祖先时,子类继承了这两个父类,可能导致歧义。
- 命名冲突
- 内存开销
每个父类的实例变量会被包含在子类中,这可能会导致子类占用更多的内存空间。
三十、如何实现服务器并发
- 实现服务器并发可以通过多种方法,常见的有多线程、多进程和异步 I/O 等.
相关文章:

面试知识点总结篇一
一、C语言和C有什么区别 C语言是面向过程,强调用函数将问题分解为多个子任务,按顺序逐步进行。数据和操作分开C则是面向对象,面向对象是一种基于对象和类的编程范式,关注如何利用对象来抽象和模拟现实世界的实体。因此引入了类&a…...

【计算机网络 - 基础问题】每日 3 题(二十五)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…...

【第十八章:Sentosa_DSML社区版-机器学习之协同过滤】
【第十八章:Sentosa_DSML社区版-机器学习之协同过滤】 1.算子介绍 协同过滤是推荐系统中常用的一种方法。该算法旨在填补用户-产品关联矩阵中缺少的项。在算法中,用户和产品都是通过一组少量的潜在因素描述,这些潜在因素可以用于预测用户-产…...
TDOA方法求二维坐标的MATLAB代码演示与讲解
引言 时间差定位(Time Difference of Arrival, TDOA)是一种用于确定信号源位置的技术,广泛应用于无线通信、声学定位等领域。通过测量信号到达多个接收器的时间差,可以计算出信号源的二维坐标。本文将通过MATLAB代码演示如何使用TDOA方法来求解二维坐标。 TDOA原理 TDOA…...

基于微信的原创音乐小程序的设计与实现+ssm论文源码调试讲解
第二章 开发工具及关键技术介绍 2.1 JAVA技术 Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterrise JavaBeans)的全面支持,java servlet AI,JS(java server ages&…...

基于大数据技术的颈椎病预防交流与数据分析及可视化系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…...

Spring MVC中实现一个文件上传和下载功能
说到文件上传和下载,相信每个开发者都有或多或少的接触过文件上传的功能吧,文件上传和下载是我们在学习计算机网络应用常见的一个功能,主要涉及到用户和服务器之间的数据传输。 我们来对文件上传和下载功能的进行相关概述吧! 文…...

Webpack 介绍
Webpack 介绍 Date: August 29, 2024 全文概要 Webpack概念: Webpack是一个静态的模块化的打包工具,可以为现代的 JavaSript 应用程序进行打包。 1-静态:Webpack可以将代码打包成最终的静态资源 2-模块化:webpack支持各种模块…...

在Linux实时监控某个应用是否运行,未运行,执行运行命令
1、shell脚本(每隔30秒检测一次) 脚本要注意的地方是:在Nodepad编辑的时候要使用Unix(LF)格式,避免在Linux无法执行命令 #!/bin/bash# RabbitMQ进程名称(可能需要根据你的安装进行调整) RABBITMQ_PROCE…...

Serilog文档翻译系列(六) - 可用的接收器、增强器、格式化输出
01、提供的接收器 Serilog 使用接收器将日志事件以各种格式写入存储。许多接收器由更广泛的 Serilog 社区开发和支持;可以通过在 NuGet 上搜索 serilog 标签找到。 02、增强器 日志事件可以通过多种方式增强属性。通过 NuGet 提供了一些预构建的增强器ÿ…...

傅里叶级数在机器人中的应用(动力学参数辨识)
B站首发!草履虫都能看懂的【傅里叶变换】讲解,清华大学李永乐老师教你如何理解傅里叶变换,辨清美颜和变声原理,!!_哔哩哔哩_bilibiliB站首发!草履虫都能看懂的【傅里叶变换】讲解,清…...

前端框架Vue、React、Angular、Svelte对比
在对比 React、Vue.js、Angular 和 Svelte 时,除了在高层次的特性上有显著差异,它们在核心设计理念和底层实现机制上也有明显的不同。为了清晰地理解这些框架,我们可以从以下几个方面来分析它们的核心不同点和底层不同点。 1. 框架类型和设计…...

深度学习后门攻击分析与实现(二)
前言 在本系列的第一部分中,我们已经掌握了深度学习中的后门攻击的特点以及基础的攻击方式,现在我们在第二部分中首先来学习深度学习后门攻击在传统网络空间安全中的应用。然后再来分析与实现一些颇具特点的深度学习后门攻击方式。 深度学习与网络空间…...

boost 的lockfree 使用
boost 的lockfree 使用 // test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <mutex> #include <memory> #include <condition_variable> #include <…...

基于Hexo个人博客界面优化
基于Hexo个人博客界面优化 怎么搭建个人博客 选择主题 经过多个对比,选择简单一点的的yilia 1.将主题文件下载解压到 你的博客目录的 themes下 下载yilia主题文件 2.改写配置 打开你的_config.yml #theme: landscape 这是原来的,改成下面这个 theme: yil…...

vue3+ts不能将类型“Timeout”分配给类型“null”不能将类型“Timeout”分配给类型number
在设置有setTimeout() 函数时,一般是需要进行清除计时器操作的; 常用的做法是定义一个全局变量timer,在onMounted或者有需要的地方进行赋值,在onBeforeUnmount进行clear,一般在定义timer变量时,使用 numbe…...

如何给多台Linux机器设置时间同步
文章目录 1,使用chrony时间同步服务1.1 修改chrony配置文件 2,使用ntpdate服务 1,使用chrony时间同步服务 Centos7默认已安装,另外基于centos7的统信OS,中科OS也会默认安装这个。如果你机器上没有这个服务,…...

忘写return有什么现象?
使用C语言,一直觉得没有return无所谓,直到被制裁。。 参考: 非void函数缺失返回值导致crash或结果异常的分析 - 知乎 (zhihu.com) 可以分析出: 没有写return 的话,eax的内容是在预期之外的。 例如更新参考内容的解…...

大数据新视界 --大数据大厂之 Druid 实时数据分析平台在大数据中的应用
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

MySQL --基本查询(下)
文章目录 3.Update3.1将孙悟空同学的数学成绩变更为 80 分3.2将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分3.3将总成绩倒数前三的 3 位同学的数学成绩加上 30 分3.4将所有同学的语文成绩更新为原来的 2 倍 4.Delete4.1删除数据4.1.1删除孙悟空同学的考…...

vue3实现自定义主题色切换功能
目录 1.添加theme样式文件2.引入样式文件3.使用变量设置css样式4.设置主题样式5.切换方法 1.添加theme样式文件 文件内容如下: html[data-theme"light"]{--text-color: #000000;/* 写需要切换的样式 */ } html[data-theme"dark"]{--text-color…...

不懂性能测试,被面试官挂了...
性能测试旨在检查应用程序或软件在特定负载下工作时的响应性和稳定性,从而检测应用程序/软件在响应速度、可扩展性和稳定性方面是否达到预期的要求。 简而言之,性能测试目标就是为了识别并消除应用程序中的性能瓶颈。 本文将为大家详细介绍性能测试主要…...

JS逆向基础-谷歌浏览器调试技巧(详细)
概述 浏览器的调试工具在 JavaScript 逆向工程中,帮助开发者分析和理解代码执行流程、变量值及其变化,从而揭示隐藏逻辑和加密机制,为破解、修改或复现代码提供重要支持。 调试面板详解 谷歌浏览器的调试面板概览: 顶部操作栏 …...

那年我双手插兜,使用IPv6+DDNS动态域名解析访问NAS
估计有很多科技宅和我一样,会买一个NAS存储或者自己折腾刷一下黑群晖玩玩,由于运营商不给分配固定的公网IP,就导致我在外出的时候无法访问家里的NAS,于是远程访问常常受到IP地址频繁变动的困扰。为了解决这一问题,结合…...

CSS的弹性盒子模型(Flex box)
弹性盒子模型是CSS3的一种新的布局模式,弹性盒是一种当页面需要适应不同的屏幕大小以及设备类型时确保拥有合适的布局方式,引入弹性盒子模型的目的时提供更加有效的方式来对一个容器中的子元素进行排列,对齐和分配空白空间。 弹性盒子由弹性容…...

django drf 分页器
自定义分页器代码: from django.core.paginator import InvalidPage from django.core.paginator import Paginator as DjangoPaginator from django.utils.functional import cached_property from rest_framework.exceptions import NotFound from rest_framewor…...

SpringBoot整合JPA实现CRUD详解
SpringBoot版本是2.0以上(2.6.13) JDK是1.8 一、依赖 <dependencies><!-- jdbc --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><!--…...

干部画像——精准辅助干部选拔的核心利器
干部画像,作为现代干部管理体系中的一项重要创新,已逐步成为精准辅助干部选拔的核心利器。通过综合运用多维度信息收集、系统化整理与科学化分析的方法,全面、客观、真实地勾勒出每位干部的综合素质与能力画像,为干部选拔工作提供…...

linux网络编程9
24.9.26学习目录 一.Web编程1.Javascript3.CGI 一.Web编程 1.Javascript 是一种基于对象并具有安全性能的脚本语言,是由浏览器内解释器翻译成可执行格式后执行; 即是网页与用户完成各种交互动作; 特点:基于对象的语言、简单性、…...

RabbitMQ应用
RabbitMQ 共提供了7种⼯作模式, 进⾏消息传递 一、七种模式的概述 1、Simple(简单模式) P:生产者,就是发送消息的程序 C:消费者,就是接收消息的程序 Queue:消息队列,类似⼀个邮箱, 可以缓存消息; ⽣产者…...