【初阶三】认识C语言—下
【初阶三】认识C语言—下
- 1.函数
- 2.数组
- 3.操作符
- 3.1算数操作符
- 3.2移位操作符和位操作符
- 3.3赋值操作符
- 3.4单目操作符
- 4.常见关键字
- 4.1关键字typedef
- 4.2 关键字static
- 5. define定义常宏
- 6.指针
- 6.1内存
- 6.2取地址操作符&
- 7.结构体
1.函数
函数就像一个工厂,通过输入原料(传递参数),在工厂(函数)内加工(代码执行)后返回一个成品(return一个值)
- 我们使用的scanf和printf都是C语言的库函数(C语言提供的内部函数,需要引用头文件才能使用)
- 还有一种函数是我们自己实现的函数,接下来举例说明
这是一个求a+b的和并打印的代码,在main函数中实现:
这是使用自己实现的函数求a+b的和并打印:
代码进行优化,不用定义变量num直接返回a+b也可以达到一样的效果:
形式参数和实际参数:实际上是将实际参数的值临时拷贝一份给形式参数,二者除了值相同以外,没有任何联系,他们拥有不同的存储空间,所以形参的改变对实参没有影响
大家可能有一个疑问,自己实现的函数add比main函数内实现更加繁琐,为什么还要使用自己的函数呢?
1.在main函数外实现函数会使代码层次分明,更易读
2.当我们以后实现一个大型项目时,一个功能难免会被多次使用,这时只要将这个功能写成自己的函数,就可以通过调用函数来使用这个功能,比每次都写一遍更方便快捷
2.数组
当我们想要存储100个数据时,我们不可能定义100个变量,所以C语言提供了数组
数组即为一组相同类型元素的集合,我们可以将所有相同类型的数据存储在数组里
数组规定每个元素都拥有下标,下标从0开始计数,可以通过下标来访问数组
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//存储了10个整形元素的数组
// 0 1 2 3 4 5 6 7 8 9 //整型1的下标是0,整型2的下标为1,以此类推
通过下标来访问数组:
3.操作符
3.1算数操作符
分别时加、减、乘、除、取余
加减乘与数学中一样,但乘的符号换成了 *
重点讲解 除 和 取余 两种算术操作符
C语言中除法分为整数除法和浮点数除法
整数除法:
#include<stdio.h>int main()
{int a = 7;int b = 2;int c = a / b;//整数除法中除号两边的变量必须都为整型printf("%d", c);//结果为3,而不是3.5,是因为C语言的除法是整除之后得到商return 0;
}
浮点数除法:
int main()
{int a = 7/2;printf("%d\n", a);//这里的结果为3,因为它是整数除法printf("%lf\n", 7.0 / 2);//结果为3.500000printf("%lf\n", 7 / 2.0);//结果为3.500000printf("%lf\n", 7.0 / 2.0);//结果为3.500000return 0;
只要除号左右两边至少有一个为浮点型,那它就是浮点数除法
printf中的%lf表示要打印float类型的数据(精读到小数点后6位)
取余:
#include<stdio.h>int main()
{int a = 7;int b = 4;int c = a % b;printf("%d", c);//这里得到的结果为3,1来自于7除4得1余3.return 0;
}
操作符%左右两边必须为整形
3.2移位操作符和位操作符
这里移位操作符和位操作符都是操作的二进制位,>>是右移操作符,<<是左移操作符
#include<stdio.h>int main()
{int a = 10;//10的二进制表示是00001010.a = a << 1;//左移1位后,二进制表示是00010100,右边自动补0.printf("%d", a);//a的二进制位左移后值变了,十进制对应二进制0010100是20,所以打印结果20return 0;
}
&叫做按位与, |叫按位或,^叫按位异或
#include<stdio.h>int main()
{int a = 10;//a的二进制00001010int b = 5;//b的二进制 00000100int c = a & b;//二进制按位与,只要有1就得1:00001110int e = a | b;//双方都为1才为1:00000000int d = a ^ b;//相同为0,相异为1得:00001110return 0;}
3.3赋值操作符
赋值操作符很多,但用法相近,它们的涵义是将等号右边的值赋值给等号左边的变量
先拿 = 举例:
上面这段代码会把两段话都打印出来,因为这里的if判断内容是赋值而不是相等,只是一个容易忽视的错误
=是赋值运算符,==才是比较
更改之后就可以看到如下结果:
再用 += 举例:
#include<stdio.h>int main()
{int a = 1;int b = 2;a += 1;//此代码等同于a = a + 1a += b;//次代码等同于a = a + breturn 0;
}
这时再去理解其他操作符就很好理解了
3.4单目操作符
这些操作符只作用在一个操作数上,比如我们的算术操作符 / ,它作用在除号两边的两个操作数,所以它不是单目操作符
这些单目操作符中,我们把 & 和 * 操作符放到后面的章节详细讲解
逻辑反操作符 ! ,在一个变量前面加上一个逻辑反!,它的逻辑就会颠倒
负值正值
4.常见关键字
4.1关键字typedef
typedef 是类型定义,这里理解为类型重命名
#include<stdio.h>typedef unsigned int unit;//将unsigned int 重命名为unit, 所以uit也是一个类型名int main()
{//观察num1和num2,这两个变量的类型是一样的,相当于把unsigned int改了一个名字unsigned int num1 = 0;//改名后,改名前的类型也可以使用unit num2 = 0;return 0;
}
现在学习到的int,char等类型长度比较短,使用typedef可能没有那么明显的好处,但是后期我们接触顺序表和链表后,typedef的作用就能体现出来了
4.2 关键字static
static是用来修饰变量和函数的
- 修饰局部变量:称为静态局部变量
- 修饰全局变量:称为静态全局变量
- 修饰函数:称为静态函数
#include<stdio.h>void test()test函数中创建的变量a是局部变量,所以它在我们调用一次函数结束后会把内存还给系统销毁
{int a = 5;printf("%d ", a);a++;
}int main()
{int i = 0;while (i < 10)//调用10次test函数{ test();//每次调用test函数进来就重新定义一个变量a=5,这时的a和前一次调用的a没有关系,因为上一个a已被销毁i++;}return 0;
}
这段代码不断打印5,因为调用一次test函数后a就被销毁了,a++后a变成6后的值不会保存起来,下一次调用函数时a的初始值还是5
我们再来看看用static修饰a后会出现什么变化:
#include<stdio.h>
void test()
{static int a = 5;//static修饰a后,a就不在栈区了,a就被存放在静态区了!printf("%d ", a);//打印5,6,7......a++;
}int main()
{int i = 0;while (i < 10){test();i++;}return 0;
}
5. define定义常宏
define定义宏和我们之前的定义常量有一点相似
//define定义宏
#define ADD(x, y) ((x)+(y))//Add后面括号里的x和y为参数,后面的((x)+(y))叫做宏的实现体
#include <stdio.h>int main()
{int sum = ADD(2, 3);//遇见Add()时就会自动把Add和里面的变量替换为后面的宏的实现体printf("sum = %d\n", sum);sum = 10*ADD(2, 3);//遇见Add()时就会自动把Add和里面的变量替换为后面的宏的实现体printf("sum = %d\n", sum);return 0;
}
6.指针
6.1内存
C语言中指针就是用来访问内存的,内存是电脑上特别重要的存储器,计算机中的程序都是在内存中运行的(一个比特位对应一个二进制位也就是存放一个二进制数)
为了有效地使用内存,内存被划分成一个个小内存单元,每个内存单元的大小是1个字节
为了能够有效的访问到内存的每个单元,就给内存单元进行编号,这些编号被称为该内存单元的地址
所以C语言引出了指针和地址的概念,方便我们寻找变量在内存中的位置,变量是创建内存中的(在内存中分配空间),所以变量也是有地址的
在计算机中有地址线(物理的电线),它将高低电平信号转换为数字信号1和0(二进制信息),我们的32位电脑上有32根地址线,每根地址线传达的数字信息要么为0要么为1,所以我们的一个内存单元(一个字节)可以存储二进制00000000000000000000000000000000到11111111111111111111111111111111内的任何数据,转换为10进制也就是存储到0到4,294,967,296
6.2取地址操作符&
#include <stdio.h>int main()
{int num = 10;#//取出num的地址//注:这里num的地址大小是4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)printf("%p\n", &num);//打印地址,%p是以地址的形式打印return 0;
}
char temp = 'w';
char* p = &temp;//p是char类型的指针,可以存放变量temp的地址
*p = 'z'//*p是解引用,解引用后就是temp变量,可以赋值成z
//判断自己是多少位的机器
//观察指针变量的大小
#include <stdio.h>
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{printf("%d\n", sizeof(char *));printf("%d\n", sizeof(short *));printf("%d\n", sizeof(int *));printf("%d\n", sizeof(double *));return 0;
}
7.结构体
结构体关键字:struct
结构体使得C语言有能力描述复杂类型,比如我们想描述学生,学生包含了名字、年龄、性别、学号这几项信息,如果我们用传统的方法是不能解决的,这里就能使用结构体来描述了:
struct Student
{char name[20];//名字int age; //年龄char sex[5]; //性别char id[15]; //学号
};
结构体初始化:
struct Student
{char name[20];//名字int age; //年龄char sex[5]; //性别char id[15]; //学号
};int main()
{//初始化结构体后,name里面放入的是张三,age里面为20,sex为男,id是20180101,中间用逗号隔开.struct Student s = { "张三", 20, "男", "20180101" };//这里定义结构体变量名为sprintf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id); //.为结构成员访问操作符,是结构体成员的访问struct Student* ps = &s;printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps -> id);//->操作符相当于结构体中的解引用操作return 0;
}
我们还可以在程序中定义多个结构体:
#include<stdio.h>struct Student
{char name[20];//名字int age; //年龄char sex[5]; //性别
};struct Book//描述一本书
{char name[20];//书名char author[20];//作者float price;//价格
};int main()
{struct Student s1 = { "张三", 20, "男" };struct Student s2 = { "李四", 20, "男" };struct Student s3 = { "王五", 20, "男" };struct Book b = { "《STL源码剖析》", "Hou Jie", 79.0f };printf("%s %s %f\n", b.name, b.author, b.price);return 0;
}
相关文章:
【初阶三】认识C语言—下
【初阶三】认识C语言—下 1.函数2.数组3.操作符3.1算数操作符3.2移位操作符和位操作符3.3赋值操作符3.4单目操作符 4.常见关键字4.1关键字typedef4.2 关键字static 5. define定义常宏6.指针6.1内存6.2取地址操作符& 7.结构体 1.函数 函数就像一个工厂,通过输入原…...
【C#】使用DeepSeek帮助评估数据库性能问题,C# 使用定时任务,每隔一分钟移除一次表,再重新创建表,和往新创建的表追加5万多条记录
🌹欢迎来到《小5讲堂》🌹 🌹这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。🌹 🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!&#…...
前端学习笔记(三)——ant-design vue表单传递数据到父页面
前言 善用AI,快速解决定位 原理 a-form所在的SFC(单文件)vue中需要将表单数据传递给父页面SFC文件中,使用emit方法 代码 子组件(Form.vue) <template><a-form submit"handleSubmit&qu…...
计算机视觉算法实战——驾驶员玩手机检测(主页有源码)
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 领域简介:玩手机检测的重要性与技术挑战 驾驶员玩手机检测是智能交通安全领域的核心课题。根据NHTSA数据࿰…...
C语言(23)
字符串函数 11.strstr函数 1.1函数介绍: 头文件:string.h char *strstr ( const char * str1,const char *str2); 作用:在一个字符串(str1)中寻找另外一个字符串(str2)是否出现过 如果找到…...
Python入门教程:从零开始学习Python编程
引言 Python是一种高级编程语言,因其简洁的语法和强大的功能而广受欢迎。无论你是编程新手,还是有经验的开发者,Python都是一个非常好的选择。本文将带你从零开始学习Python编程,涵盖基础语法、常用库以及一些实用的编程技巧。 目…...
SAIL-RK3576核心板应用方案——无人机视觉定位与地面无人设备通信控制方案
本方案以 EFISH-RK3576-SBC工控板 或 SAIL-RK3576核心板 为核心,结合高精度视觉定位、实时通信与智能控制技术,实现无人机与地面无人设备的协同作业。方案适用于物流巡检、农业植保、应急救援等场景,具备高精度定位、低延迟通信与强环境适应性…...
14.C语言const的使用规范,详细说明
目录 修饰变量 修饰指针 指向常量的指针 常量指针 指向常量的常量指针 修饰函数参数 修饰函数返回值 总结 在 C 语言里,const 是一个类型限定符,它的作用是将变量定义为只读,也就是不允许对其值进行修改,用来修饰函数中的…...
安装操作系统ubuntu-20.04.6-live-server-amd64
一、下载虚拟机软件、远程控制软件及操作系统镜像 下载VMware Workstation: 下载 VMware Workstation Pro 个人免费版(可能会访问不了,那就随便找个能下载的版本安装)下载XShell: XShell 家庭/学校免费版下载ubuntu操作系统 ubuntu-20.04.6-…...
使用 PaddleNLP 在 CPU(支持 AVX 指令)下跑通 llama2-7b或DeepSeek-r1:1.5b 模型(完成度80%)
原文:🚣♂️ 使用 PaddleNLP 在 CPU(支持 AVX 指令)下跑通 llama2-7b 模型 🚣 — PaddleNLP 文档 使用 PaddleNLP 在 CPU(支持 AVX 指令)下跑通 llama2-7b 模型 🚣 PaddleNLP 在支持 AVX 指令的 CPU 上对 llama 系列模型进行了…...
【Golang】第五弹----函数
笔上得来终觉浅,绝知此事要躬行 🔥 个人主页:星云爱编程 🔥 所属专栏:Golang 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 一、函数 1.1基本介绍…...
适合二次开发的Web组态软件推荐
在选择适合二次开发的Web组态软件时,需要考虑多个因素,包括开源与否、功能、社区支持、文档完整性等。以下是一些适合二次开发的Web组态软件: 1. Node-RED 简介: Node-RED 是一个基于流的编程工具,最初由IBM开发,现为…...
三、Docker 集群管理与应用
(一)项目案例 1、准备主机 (1)关闭防火墙,或者开放TCP端口2377(用于集群管理通信)、TCP/UPD端口7946(用于节点之间的通信)、UDP端口4789(用于overlay网络流…...
Spring 注解解析
一、Import 1、核心作用 Import 是 Spring 模块化配置的核心注解,用于将外部配置类、组件或动态逻辑导入当前 Spring 上下文。其核心功能包括: 配置类聚合:整合多个分散的 Configuration 类,解决大型项目中配置分散的问题。动态…...
DeepSeek-R1思路训练多模态大模型-Vision-R1开源及实现方法思路
刚开始琢磨使用DeepSeek-R1风格训练多模态R1模型,就看到这个工作,本文一起看看,供参考。 先提出问题,仅靠 RL 是否足以激励 MLLM 的推理能力? 结论:不能,因为如果 RL 能有效激励推理能力&#…...
mysql select distinct 和 group by 哪个效率高
在有索引的情况下,SELECT DISTINCT和GROUP BY的效率相同;在没有索引的情况下,SELECT DISTINCT的效率高于GROUP BY。这是因为SELECT DISTINCT和GROUP BY都会进行分组操作,但GROUP BY可能会进行排序,触发filesort&…...
阿里云操作系统控制台评测:国产AI+运维 一站式运维管理平台
阿里云操作系统控制台评测:国产AI运维 一站式运维管理平台 引言 随着云计算技术的飞速发展,企业在云端的运维管理面临更高的要求。阿里云操作系统控制台作为一款集运维管理、智能助手和系统诊断等多功能于一体的工具,正逐步成为企业高效管理…...
Linux基础开发工具—vim
目录 1、vim的概念 2、vim的常见模式 2.1 演示切换vim模式 3、vim命令模式常用操作 3.1 移动光标 3.2 删除文字 3.3 复制 3.4 替换 4、vim底行模式常用命令 4.1 查找字符 5、vim的配置文件 1、vim的概念 Vim全称是Vi IMproved,即说明它是Vi编辑器的增强…...
11 应用层的域名知识点
一、DNS 1、理解 定义:DNS(Domain Name System,域名系统)是互联网的一项核心服务,它将人类可读的域名(也叫网址,如 www.example.com)转换为机器可读的IP地址(如 192.0.…...
5-24 色彩与风格——T2IA自适应
前言: 上一节我们介绍了ControlNet中的inpaint局部重绘 主要介绍ControlNet中的T2IA自适应。 色彩风格的参考和借鉴能力,有点类似于5-17 reference参考图 或者 5-16 画面风格迁移-shuffle洗牌 。当然在硬件的要求,软件的算法实现和使用方式…...
JAVA-Thread类实现多线程
引言: 本章博客涉及进程线程内容,如果不了解的可以看:什么是进程线程-CSDN博客 线程是操作系统的概念,操作系统提供的API供程序员使用操作。但是不同的操作系统(Winodws、Linux、Unix……差别很大),但是做为JAVA程序员就不需要担心…...
顺序表,单链表,双链表,循环链表(01星球)
文章目录 数据结构前导------C语言复习程序为什么要被编译器编译之后才能运行编译器把C语言程序转换成可以执行的机器码的过程做了什么宏定义typedef 关键字全局变量和局部变量常量字符的输入输出运算符冯诺依曼架构存储器容量数据类型指针指针本质为什么需要指针 数组数组指针…...
代码社区开源协议
开源协议是一种法律文件,用于规定开源软件的使用、修改和分发条件。它平衡了开发者和使用者的权益,同时推动开放协作与技术创新。以下是常见的开源协议及其特点和适用场景: 常见开源协议列表及介绍 1. MIT License 特点:非常宽…...
[免费]微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版),分享下哈。 项目视频演示 【免费】微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版…...
树莓派:更新源
发行版本 Debian 一直维护着至少三个发行版本:“稳定版(stable)”,“测试版(testing)”和“不稳定版(unstable)”。 发行版目录 下一代 Debian 正式发行版的代号为 bullseye — 发布…...
树与二叉树的遍历
我们平时用的树都是二叉树 一、一些基础概念 1. 树就是一种:一对多的数据结构。树离不开递归,因为“树”就是“树”中有“树”。 二叉树就是 :空树 或者 每个结点的子结点个数小于等于2。 满二叉树: 除叶子结点外所有结点的…...
Web基础:HTML快速入门
HTML基础语法 HTML(超文本标记语言) 是用于创建网页内容的 标记语言,通过定义页面的 结构和内容 来告诉浏览器如何呈现网页。 超文本(Hypertext) 是一种通过 链接(Hyperlinks) 将不同文本、图像…...
异常(8)
今天补充一些异常的细节,帮助大家更好的理解异常. 注:关于异常的处理方式 异常的种类有很多,我们要根据不同的业务场景来决定. 对于比较严重的问题(例如和算钱相关的场景),应该让程序直接崩溃,防止造成更严重的结果 对于不太严重的问题(大多数场景),可以记录错误日志,并通过…...
平时作业
java作业 package zuoye; public class zuoye02 {public static int Random(int n) {return (int)(n * Math.random());}public static void main(String[] args) {int n 100;//System.out.println(Random(n));int[]random new int[50];for(int i 0; i <50; i) {rand…...
宇树人形机器人开源模型
1. 下载源码 https://github.com/unitreerobotics/unitree_ros.git2. 启动Gazebo roslaunch h1_description gazebo.launch3. 仿真效果 H1 GO2 B2 Laikago Z1 4. VMware: vmw_ioctl_command error Invalid argument 这个错误通常出现在虚拟机环境中运行需要OpenGL支持的应用…...
**ResNet-SE + MFCC** 训练框架,包括 **数据加载、训练流程**,以及 **混淆矩阵** 可视化示例
1. 依赖库安装 如果你还没安装相关库,请先执行: pip install torch torchaudio torchvision scikit-learn matplotlib tqdm2. 数据加载 这里假设你有一个 音频分类数据集,其文件结构如下: dataset/ │── train/ │ ├──…...
Golang | 每日一练 (5)
💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Golang | 每日一练 (5)题目参考答案线程与协程线程切换…...
搞定python之四----函数、lambda和模块
本文是《搞定python》系列专栏的第四篇,通过代码演示列python自定义函数、lambda和模块的用法。本文学习完成后,python的基础知识就完了。后面会学习面向对象的内容。 1、自定义函数 # 测试python自定义函数# 有参数,没有返回值 def say_he…...
算法分享———进制转换通用算法
模板一:任意(K)进制转10进制 将k进制的x转化为10进制的x ll x0; for(int i1;i<n;i) { xx*ka[i]; } cout<<x<<endl;模板二:十进制转m进制 ll x; cin>>x; while(x) { a[cnt]x%k; x/k; } reverse(a1,a1cnt);…...
Proser:新增指令批次发送功能
Proser中的批次发送功能,是通过指令集进行管理的。 起初设计时,希望指令集窗口自身包含指令的编辑功能,这部分功能与传输窗口的功能重合度高,所以设计上进行了简化,由用户在传输窗口输入指令,添加到指令集窗…...
rpc grpc
RPC Remote Procedure Call,远程过程调用,是用来屏蔽分布式计算中的各种调用细节,使得调用远端的方法就像调用本地的一样。 客户端与服务端沟通的过程 客户端发送数据(以字节流的方式);(编码)服务端接受…...
AI赋能铁道安全巡检探索智能巡检新时代,基于YOLOv7全系列【tiny/l/x】参数模型开发构建铁路轨道场景下轨道上人员行为异常检测预警系统
在交通强国的战略引领下,中国铁路网如巨龙般纵贯大江南北,将五湖四海紧密相连,极大地促进了人员出行与物流运输的便捷性。然而,随着铁路线路的不断扩展,管理层面的安全问题也日益凸显。历史上,多起与铁路相…...
Kubernetes安全:集群保护的最佳实践
随着容器化技术的广泛应用,Kubernetes已经成为企业IT基础设施的重要组成部分。然而,Kubernetes集群的复杂性也带来了独特的安全挑战。如何在动态变化的云原生环境中保障集群的安全性,成为每一位运维工程师和安全专家关注的焦点。本文将详细探…...
R+VIC模型融合实践技术应用及未来气候变化模型预测
在气候变化问题日益严重的今天,水文模型在防洪规划,未来预测等方面发挥着不可替代的重要作用。目前,无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。虽然,这些软件有各自的优点;但是&am…...
前端开发:混合技术栈的应用
目录 前言 混合技术栈的优势 移动端开发嵌入H5 1、场景描述 2、实现方法 3、源码示例 OC项目嵌入Swift的使用 1、场景描述 2、实现方法 3、源码示例 HarmonyOS开发中嵌入WebView 1、权限配置 2、加载网页 结束语 前言 随着技术的不断进步,软件开发领域…...
Machine Learning: 十大基本机器学习算法
机器学习算法分类:监督学习、无监督学习、强化学习 基本的机器学习算法: 线性回归、支持向量机(SVM)、最近邻居(KNN)、逻辑回归、决策树、k平均、随机森林、朴素贝叶斯、降维、梯度增强。 机器学习算法大致可以分为三类: 监督学习算法 (Sup…...
react实现一个列表的拖拽排序(react实现拖拽)
需求场景: 我的项目里需要实现一个垂直列表的拖拽排序,效果图如下图: 技术调研: 借用antd Table实现: 我的项目里使用了antd,antd表格有一个示例还是挺像的,本来我想用Table实现࿰…...
通过mybatis的拦截器对SQL进行打标
1、背景 在我们开发的过程中,一般需要编写各种SQL语句,万一生产环境出现了慢查询,那么我们如何快速定位到底是程序中的那个SQL出现的问题呢? 2、解决方案 如果我们的数据访问层使用的是mybatis的话,那么我们可以通过…...
【MySQL】MySQL服务器——mysqld
1.MySQL服务器 是名为 mysqld 的数据库服务器程序,和“主机”(host)不一样是一个多线程的单进程管理对磁盘和内存中数据库的访问支持并发的客户端连接支持多个存储引擎,常见的存储引擎包括InnoDB、MyISAM、Memory、Archive支持事…...
JAVA面试_进阶部分_Java JVM:垃圾回收(GC 在什么时候,对什么东西,做了什么事情)
在什么时候: 首先需要知道,GC又分为minor GC 和 Full GC(major GC)。Java堆内存分为新生代和老年代,新生代 中又分为1个eden区和两个Survior区域。 一般情况下,新创建的对象都会被分配到eden区ÿ…...
【探秘海洋伤痕】海洋环境污染损害的警世启示
在地球这个蓝色星球上,广袤无垠的海洋孕育了无数生命,支撑着地球的生态平衡与人类的生存发展。然而,随着工业化和现代化的加速,海洋环境遭受的伤害日益严重,海洋环境污染损害成为了我们必须直面的严峻问题。本文将带您…...
过滤器(Filter)与拦截器(Interceptor)
在Java Web开发中,**拦截器(Interceptor)和过滤器(Filter)**都用于在请求处理过程中拦截和处理HTTP请求或响应,但它们有不同的应用场景和工作原理。下面将详细解释它们的区别,并提供代码演示。 …...
智慧城市运行管理服务平台建设方案
随着城市化的快速发展,城市运行管理面临着前所未有的挑战。智慧城市的概念应运而生,旨在通过信息技术手段提升城市管理效率和居民生活质量。智慧城市运行管理服务平台作为智慧城市建设的核心组成部分,其建设方案的科学性和前瞻性至关重要。 …...
Java是怎么解决并发问题的?
Happens-Before规则(前言) Happens-Before规则 是 Java 内存模型(JMM)中用于定义线程间操作可见性和有序性的一种规范。它的核心目的是:确保一个线程的某些操作结果对其他线程是可见的,并且这些操作在时间上的顺序不会被重排序破…...
使用 Chrome Flags 设置(适用于 HTTP 站点开发)
使用 Chrome Flags 设置(适用于 HTTP 站点开发) 在 Chrome 地址栏输入:chrome://flags/在搜索框输入 “Insecure origins” 或 “Allow invalid certificates”。找到 “Insecure origins treated as secure” 选项(或者 #allow-…...