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

7. 系统信息与系统资源

7. 系统信息与系统资源

  • 1. 系统信息
    • 1.1 系统标识 uname()
    • 1.2 sysinfo()
    • 1.3 gethostname()
    • 1.4 sysconf()
  • 2. 时间、日期
    • 2.1 Linux 系统中的时间
      • 2.1.1 Linux 怎么记录时间
      • 2.1.2 jiffies 的引入
    • 2.2 获取时间 time/gettimeofday
      • 2.2.1 time()
      • 2.2.2 gettimeofday()
    • 2.3 时间转换函数
      • 2.3.1 ctime()
      • 2.3.2 localtime()
      • 2.3.3 gmtime()
      • 2.3.4 mktime()
      • 2.3.5 asctime()
      • 2.3.6 strftime()
    • 2.4 设置时间 settimeofday
  • 3. 进程时间
    • 3.1 times()
    • 3.2 clock()
  • 4. 产生随机数
    • 4.1 rand()
    • 4.2 srand()
  • 5. 休眠
    • 5.1 秒级休眠 sleep()
    • 5.2 微秒级休眠 usleep()
    • 5.3 高进度休眠 nanosleep()
  • 6. 申请堆内存
    • 6.1 在堆上分配内存
    • 6.2 在堆上分配对齐内存
  • 7. proc 文件系统
    • 7.1 使用cat命令读取
    • 7.2 使用read读取

1. 系统信息

1.1 系统标识 uname()

系统调用 uname() 用于获取当前操作系统内核的名称和信息。调用时先创建一个结构体类型变量,然后传入地址即可

#include <sys/utsname.h>
int uname(struct utsname *buf);

在这里插入图片描述

1.2 sysinfo()

可用于获取一些系统统计信息

#include <sys/sysinfo.h>
int sysinfo(const sysinfo *info);

在这里插入图片描述

1.3 gethostname()

可以单独获取 Linux 系统主机名

#include <unistd.h>
int gethostname(char *name, size_t len);
// 参数:用于存放主机名的缓冲区以及缓冲区大小

1.4 sysconf()

可在运行时获取系统的一些配置信息

#include <unistd.h>
long sysconf(int name);
/* name:指定要获取哪个配置信息,可以使用 man 手册查看* _SC_ARG_MAX:exec族函数的参数的最大长度,这里先不用了解exec族* _SC_CHILD_MAX:每个用户的最大并发进程数* _SC_HOST_NAME_MAX:主机名的最大长度* _SC_LOGIN_NAME_MAX:登录名的最大长度* _SC_CLK_TCK:每秒时钟滴答数,也就是系统节拍率* _SC_OPEN_MAX:一个进程可以打开的最大文件数* _SC_PAGESIZE:系统页大小* _SC_TTY_NAME_MAX:终端设备名的最大长度* ...* /

2. 时间、日期

2.1 Linux 系统中的时间

操作系统中有两个时钟,一个是系统时钟,一个是实时时钟,也叫 RTC。系统时钟在系统启动之后由内核来维护,使用 date 命令获取到的就是系统时钟,在系统关机情况下不存在;实时时钟一般由 RTC 时钟芯片提供,该芯片有相应的电池,可以保证在系统关机的情况下依旧能够继续工作。

2.1.1 Linux 怎么记录时间

在启动之后先读取 RTC 作为系统时钟的初始值,之后一直维护系统时钟,然后就不会再对 RTC 进行读取操作。系统关机后,会将系统时钟写入到 RTC,进行同步操作。

2.1.2 jiffies 的引入

内核定义的一个全局变量,使用该变量来记录系统从启动以来的系统节拍数,所以这个变量用来记录以系统节拍时间为单位的时间长度,Linux 内核在编译配置时定义了一个节拍时间,使用节拍率(一秒钟多少个节拍数)来表示,譬如节拍率为 200Hz,就表示一秒钟 200 个节拍,节拍时间为 1s/200。节拍率越低,每一个系统节拍的时间就越短,意味着 jiffies 记录的时间精度越高。 但是高节拍率会导致系统中断的产生更加频繁,会加剧系统的负担,一般默认情况下都是采用 100Hz 作为系统节拍率。
内核其实通过 jiffies 来维护系统时钟,在系统开机时会设置一个初始值,上面所说的读取 RTC就是用来初始化 jiffies 变量的。当我们需要获取到系统当前时间点时,就可以使用 jiffies 变量去计算。

2.2 获取时间 time/gettimeofday

2.2.1 time()

获取当前时间,以秒为单位,返回值是从 1970-01-01 00:00:00 +0000(UTC) 以来的秒数

#include <time.h>
time_t time(time_t *tloc);
// 如果 tloc 不是空,则返回值存储在 tloc 指向的内存中

2.2.2 gettimeofday()

time 函数只能精确到秒,而这个函数可以精确到微秒

#include <sys/time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);
// tz 直接设置为NULL即可
// 获取到的时间存储在tv中,这个结构体的有两个变量,得到的时间就是 tv_sec+tv_usec。tv_sec 的值和time获取的值相同

2.3 时间转换函数

2.3.1 ctime()

将时间转换为字符串形式

#include <time.h>
char *ctime(const time_t *timep);
char *ctime_r(const time_t *timep, char *buf);
// 成功就返回指向得到的字符串的指针,失败就返回NULl
// 但是 ctime 是一个不可重入的函数,推荐使用 ctime_r,是一个可重入函数,buf就是用于存放字符串的缓冲区地址。可重入后面再讲,_r 就一般表示可重入,也就是如果成功就返回buf
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
int main()
{char str[100]={0};time_t tm;tm=time(NULL);ctimr_t(&tm,str);cout << str<<endl;return 0;
}

2.3.2 localtime()

讲时间转换为一个 struct tm 结构体所表示的时间,对应的是本地时间

#include <time.h>
struct tm *localtime(const time_t *timep);
struct tm *localtime_r(const time_t *timep, struct tm *result);

在这里插入图片描述

2.3.3 gmtime()

将 time_t 转换为 struct tm 结构体表示的时间,但是是 UTC 时间,不是本地时间

#include <time.h>
struct tm *gmtime(const time_t *timep);
struct tm *gmtime_r(const time_t *timep, struct tm *result);

2.3.4 mktime()

将 struct tm 结构体表示的时间转换为 time_t 时间

#include <time.h>
time_t mktime(struct tm *tm);

2.3.5 asctime()

和 ctime() 一样,但是可以将时间分解转换为固定格式字符串。

#include <time.h>
char *asctime(const struct tm *tm);
char *asctime_r(const struct tm *tm, char *buf);

2.3.6 strftime()

可以根据自己的需要设定格式

#include <time.h>
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
/* s:存放生成的字符串* max:字符串的最大字节数* format:格式* tm:指向结构体的指针 * /

在这里插入图片描述
这些格式字段可以任意组合,比如:"%Y-%m-%d %H:%M:%S<%p> %B %A"可以输出"2021-01-14 16:30:25<PM> January Thursday"

2.4 设置时间 settimeofday

设置系统本地时间,而且只有超级用户才能设置时间

#include <sys/time.h>
int settimeofday(const struct timeval *tv, const struct timezone *tz);
// tz 目前已经废弃,直接设置NULL即可

3. 进程时间

进程时间指的是进程从创建后,也就是程序运行后,到目前为止这段时间内使用 CPU 资源的时间总数。内核将 CPU 时间,也就是进程时间分为两部分:

  1. 用户 CPU 时间:进程在用户空间下运行所花费的 CPU 时间,也成为虚拟时间
  2. 系统 CPU 时间:进程在内核态下运行所花费的时间。这是内核执行系统调用或代表进程执行的其他任务所花费的时间。
    一般来说,进程时间指的是这两个时间总和
    注意: 进程时间不等于程序的整个生命周期所消耗的时间,如果进程一直处于休眠状态(进程被挂起、不会得到系统调度),那么它并不会使用 CPU 资源,所以休眠这段时间不计算在进程时间中。

3.1 times()

获取当前进程时间

#include <sys/times.h>
clock_t times(struct tms *buf);
// 返回值类型实际就是long类型,成功时返回从过去任意一个时间点所经过的时钟滴答数,就是系统节拍数,将节拍数/节拍率就是秒数,返回值可能会溢出,调用失败返回-1

在这里插入图片描述

// 计算一段程序耗费的进程时间和总的时间
#include <stdio.h>
#include <stdlib.h>
#include <sys/times.h>
#include <unistd.h>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{struct tms _start;struct tms _end;clock_t start;clock_t end;long tck;int i,j;// 获取系统节拍率tck = sysconf(_SC_CLK_TCK);// 开始时间start = times(&_start);for(i=0;i<20000;i++);{for(j=0;j<20000;j++);{}}sleep(1);end = times(&_end);cout << "时间总和: << (end-start)/double(tck) << endl;// 2.910000秒,从起点到终点所经过的时间,并不是进程时间cout << "用户时间: << (_end.tms_utime-_start.tms_utime)/double(tck) << endl;// 1.900000秒cout << "系统时间: << (_end.tms_stime-_start.tms_stime)/double(tck) << endl;// 0.000000秒
}

3.2 clock()

更简单的函数获取进程时间,返回值描述了进程使用的总的 CPU 时间,也就是进程时间。

#include <time.h>
clock_t clock();
// 返回值就是到目前为止程序的进程时间,并不是系统节拍数,如果想要获取秒数,需要除 CLOCKS_PER_SEC,失败返回-1。但是此函数不能获取到单独的用户CPU时间和系统CPU时间

4. 产生随机数

4.1 rand()

#include <stdlib.h>
int rand();
// 这个函数每一次运行程序获得的随机数都是相同的,需要使用srand函数设置随机数种子。rand将1作为随机数种子

4.2 srand()

#include <stdlib.h>
void srand(unsigned int seed);

一般都是将当前时间作为种子传递给seed,因为时间是一直在变化的。

// 生成一组随机数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main()
{int random_number_arr[8];int count;srand(time(NULL));for(count = 0; count<8;count++){random_number_arr[count] = rand()%100;}for(count = 0; count<8;count++){cout << random_number_arr[count] << " ";}cout << endl;return 0;
}

5. 休眠

5.1 秒级休眠 sleep()

#include <unistd.h>
unsigned int sleep(unsigned int seconds);
// 如果休眠时长等于seconds,就返回0;如果被信号中断,返回剩余的秒数

5.2 微秒级休眠 usleep()

#include <unistd.h>
int usleep(useconds_t usec);
// 成功返回0,失败返回-1

5.3 高进度休眠 nanosleep()

#include <time.h>
int nanosleep(const struct timespec *req, struct timespec *rem);
// req:设置休眠时长,可精确到纳秒级
// rem:可以设置NULL
// 如果成功休眠设定的时长,返回0;如果被信号中断或错误,返回-1,并将剩余时间记录在rem中,如果为NULL,表示不接收剩余时间

6. 申请堆内存

6.1 在堆上分配内存

#include <stdlib.h>
void *malloc(size_t size);	// 在使用时通常需要强制类型转换,该函数不会初始化内存空间
void *calloc(size_t nmemb, size_t size);	// 分配nmemb个单位长度为size的连续空间,并初始化为0,总的大小是nmemb*size
void *realloc(void *ptr, size_t size); // 可以在原有的空间上扩容
void free(void *ptr);		// 释放堆内存空间

当进程终止时,会自动释放申请的空间,有时,因为加入了多次的 free() 调用,可能会消耗掉大量的 CPU 时间。但是依旧建议手动释放,否则容易发生内存泄漏。

6.2 在堆上分配对齐内存

#include <stdlib.h>
int posix_memalign(void **memptr, size_t alignment, size_t size);
void *aligned_alloc(size_t alignment, size_t size);
void *valloc(size_t size);// 不建议使用#include <malloc.h>
void *memalign(size_t alignment, size_t size); // 不建议使用
void *pvalloc(size_t size);

posix_memalign: 在堆上分配 size 个字节大小的对齐内存空间,将 *memptr 指向分配的空间。alignment 表示对其字节数,必须是 2 的幂次方,也是指针大小的整数倍。size 是分配的内存大小,如果为0,指向的空间值为NULL
aligned_alloc: 分配 size 个字节大小的内存空间,返回指向该空间的指针
valloc: 以 pagesize 页大小作为对齐的长度,可以通过 getpagesize() 获取页大小

7. proc 文件系统

是一个虚拟文件系统,它以文件系统的方式为应用层访问系统内核数据提供了接口,用户和应用程序可以通过 proc 文件系统得到系统信息和进程相关信息,对 proc 文件系统的读写作为与内核进行通信的一种手段。但是与普通文件不同的是,proc 文件系统是动态创建的,文件本身不存在于磁盘当中,只存在于内存中。该文件系统挂载在 /proc 目录下

7.1 使用cat命令读取

比如查看内核版本信息cat /proc/version

7.2 使用read读取

将你需要直到的信息读取到文件中

相关文章:

7. 系统信息与系统资源

7. 系统信息与系统资源 1. 系统信息1.1 系统标识 uname()1.2 sysinfo()1.3 gethostname()1.4 sysconf() 2. 时间、日期2.1 Linux 系统中的时间2.1.1 Linux 怎么记录时间2.1.2 jiffies 的引入 2.2 获取时间 time/gettimeofday2.2.1 time()2.2.2 gettimeofday() 2.3 时间转换函数…...

【重点】【滑动窗口】239. 滑动窗口最大值

题目 也可参考&#xff1a;剑指offer——面试题65&#xff1a;滑动窗口的最大值 class Solution {public int[] maxSlidingWindow(int[] nums, int k) {int[] res new int[nums.length - k 1];Deque<Integer> q new LinkedList<>();int inx 0;while (inx <…...

d3dx9_43.dll丢失原因以及5个解决方法详解

在电脑使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“d3dx9_43.dll缺失”。这个错误提示通常表示我们的电脑上缺少了DirectX的一个组件&#xff0c;而DirectX是游戏和多媒体应用所必需的软件。本文将介绍d3dx9_43.dll缺失对电脑的影响以及其原因…...

Python实现FA萤火虫优化算法优化卷积神经网络分类模型(CNN分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法&#xff08;Fire-fly algorithm&#xff0c;FA&#xff09;由剑桥大学Yang于2009年提出 , …...

不瞒各位,不安装软件也能操作Xmind文档

大家好&#xff0c;我是小悟 作为搞技术的一个人群&#xff0c;时不时就要接收产品经理发过来的思维脑图&#xff0c;而此类文档往往是以Xmind编写的&#xff0c;如果你的电脑里面没有安装Xmind的话&#xff0c;不好意思&#xff0c;是打不开这类后缀结尾的文档。 打不开的话…...

你了解Redis 的二进制安全吗

最近面试的时候被问到Redis 的二进制安全相关八股文面试题。Redis二进制安全内容比较多&#xff0c;以下是简单的总结大致的过程&#xff0c;需要深入学习的建议跳过 Redis是基于C语言进行开发的&#xff0c;而C语言中的字符串是二进制不安全的&#xff0c;所以Redis就没有直接…...

探索前端设计的新境界——介绍IVueUI工具助力Vue页面设计

在快速发展的前端领域&#xff0c;Vue.js作为一款渐进式JavaScript框架&#xff0c;一直备受开发者喜爱。然而&#xff0c;在Vue前端开发的旅程中&#xff0c;页面设计常常是一个不可避免的挑战。今天&#xff0c;我要向大家介绍一款令Vue前端开发者受益匪浅的工具——www.ivue…...

数据管理系统-week10-数据库安全

文章目录 前言一、什么是数据库安全?二、威胁三、对抗措施四、授权和认证五、访问控制(重点)自由访问控制(DAC)强制访问控制(MAC)补充一个贝尔-lapadula模型六、加密参考文献前言 数据库安全意味着保护数据库免受有意或无意的未经授权的访问,数据库安全需要保护数据库…...

MySQL笔记-第05章_排序与分页

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第05章_排序与分页1. 排序数据1.1 排序规则1.2 单列排序1.3 多列排序 2. 分页2.1 背景2.2 实现规则2.3 拓展 第05章_排序与分页 讲师&#…...

MySQL笔记-第02章_MySQL环境搭建

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第02章_MySQL环境搭建1. MySQL的卸载步骤1&#xff1a;停止MySQL服务步骤2&#xff1a;软件的卸载步骤3&#xff1a;残余文件的清理步骤4&am…...

★136. 只出现一次的数字(位运算)

136. 只出现一次的数字 这个题主要考察的知识点是位运算&#xff08;这里是异或&#xff09; 如果不要求空间复杂度为O&#xff08;1&#xff09;&#xff0c;那有很多方法。但是这里有这样的要求。 可以通过位运算 的方法来实现。 异或运算 ⊕有以下三个性质&#xff1a; 任…...

阿里云效一键部署前后端

静态站点到OSS 阿里云-云效&#xff0c;阿里云企业级一站式 DevOps&#xff0c;可以免费使用&#xff08;会限制人数、流水线数量等&#xff0c;个人项目够用了&#xff09;。相关文章 CI 持续集成 - 阿里云云效 OSS 是对象存储的意思&#xff0c;一般一个项目对应一个 Bucke…...

【算法集训】基础数据结构:一、顺序表(上)

顺序表是最基础的数组结构&#xff0c;所有数据都按顺序存储。 第一题 1464. 数组中两元素的最大乘积 https://leetcode.cn/problems/maximum-product-of-two-elements-in-an-array/description/ 第一种&#xff1a;常规解法&#xff0c;遍历两次数组根据条件比较出最大的即可…...

封装websocket并在vuejs中调用

1、创建JS文件ce-websocket-util.js class CeWebsocketUtil {websocket null;reConnectTimes 0; // 失败后重新连接次数wsInterVal null; // 重新连接定时器maxReConnectTimes 10; // 最大连接次数,默认10次reIntervalTime 60 * 1000; // 重连间隔时间&#xff0c;默认1m…...

博捷芯:半导体芯片切割,一道精细工艺的科技之门

在半导体制造的过程中&#xff0c;芯片切割是一道重要的环节&#xff0c;它不仅决定了芯片的尺寸和形状&#xff0c;还直接影响到芯片的性能和使用效果。随着科技的不断进步&#xff0c;芯片切割技术也在不断发展&#xff0c;成为半导体制造领域中一道精细工艺的科技之门。 芯片…...

BiseNet实现遥感影像地物分类

遥感地物分类通过对遥感图像中的地物进行准确识别和分类&#xff0c;为资源管理、环境保护、城市规划、灾害监测等领域提供重要信息&#xff0c;有助于实现精细化管理和科学决策&#xff0c;提升社会治理和经济发展水平。深度学习遥感地物分类在提高分类精度、自动化程度、处理…...

【SpringBoot系列】SpringBoot时间字段格式化

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

.net core 连接数据库,通过数据库生成Modell

1、安装EF Core Power Tools&#xff1a;打开Vs开发工具→扩展→管理扩展 2、(切记执行这步之前确保自己的代码不存在编写或者编译错误&#xff01;)安装完成后在你需要创建数据库实体的项目文件夹上面单击右键&#xff0c;找到EF Core 工具&#xff08;必须安装扩展之和才会有…...

开发工具idea中推荐插件

主要是记录一下idea中实用插件&#xff0c;方便开发&#xff0c;换个电脑工作的时候也可以直接在市场中下载使用。 1、Easy Javadoc 自动生成javadoc文档注释&#xff0c;基本上是按照字段名或者方法名翻译的&#xff0c;还是相当好用的。 2、EasyYapi 可以快捷生成接口文档…...

[c++]—string类___深度学习string标准库成员函数与非成员函数

要相信别人能做出来自己一定可以做出来&#xff0c;只不过是时间没到而已 目录 &#x1f6a9;string类对象capacity操作 &#x1f4bb;reserve()保留 &#x1f4bb;resize() &#x1f6a9;string类对象元素访问操作 &#x1f4bb;operator[]和at() &#x1f4bb;operator…...

PHP 双门双向门禁控制板实时监控源码

本示例使用设备&#xff1a; 实时网络双门双向门禁控制板可二次编程控制网络继电器远程开关-淘宝网 (taobao.com) <?PHPheader("content-type:text/html;charsetGBK");$ThisIpget_local_ip(); //获取电脑IP地址 $server udp://.$ThisIp.:39192; $sock…...

【源码解析】聊聊线程池 实现原理与源码深度解析(二)

AbstractExecutorService 上一篇文章中&#xff0c;主要介绍了AbstractExecutorService的线程执行的核心流程&#xff0c;execute() 这个方法显然是没有返回执行任务的结果&#xff0c;如果我们需要获取任务执行的结果&#xff0c;怎么办&#xff1f; Callable 就是一个可以获…...

本地Lambda(SAM LI)+ MySQL(Docker)环境构筑注意点

目录构成 mysql8 ├─data ├─logs └─docker├─docker-compose.yml├─.env├─config└─my.cnf .env DB_NAMEtest_db ROOT_DB_PASSroot_password DB_USERtest_user DB_PASStest_password DB_PORT3306 TZAsia/Tokyo docker-compose.yml version: "3.6" ser…...

Windows下打包C++程序无法执行:无法定位程序输入点于动态链接库

1、问题描述 环境&#xff1a;CLionCMakeMinGW64遇到问题&#xff1a;打包的exe无法运行&#xff0c;提示无法定位程序输入点于动态链接库。 2、解决思路 ​ 通过注释头文件的方式&#xff0c;初步定位问题是因为使用了#include <thread> 多线程库引起的。而且exe文件…...

Android 12 打开网络ADB并禁用USB连接ADB

平台 RK3588 Android 12 Android 调试桥 (adb) Android 调试桥 (adb) 是一种功能多样的命令行工具&#xff0c;可让您与设备进行通信。adb 命令可用于执行各种设备操作&#xff0c;例如安装和调试应用。adb 提供对 Unix shell&#xff08;可用来在设备上运行各种命令&am…...

基于Langchain的txt文本向量库搭建与检索

这里的源码主要来自于Langchain-ChatGLM中的向量库部分&#xff0c;做了一些代码上的修改和封装&#xff0c;以适用于基于问题和包含数据库表描述的txt文件&#xff08;文件名为库表名&#xff0c;文件内容为库表中的字段及描述&#xff09;对数据库表进行快速检索。 中文分词…...

vue2-router

1.基础 1.1.安装 npm install vue-router3.6.5 1.2.引入 import VueRouter from "vue-router" 1.3.注册 Vue.use(VueRouter) 1.4.创建 const router new VueRouter({routes: [{path:/page1, page1},{path:/page2, page2}]} ) 1.5.引用 new Vue({render: h >…...

css新闻链接案例

利用html和css构建出新闻链接案例&#xff0c;使用渐变色做出背景色变化 background: linear-gradient(to bottom, rgb(137, 210, 251), rgb(238, 248, 254), white); 利用背景图片&#xff0c;调整位置完成 dd { height: 28px; line-height: 28px; background-image: url(./图…...

Android wifi连接和获取IP分析

wifi 连接&获取IP 流程图 代码流程分析 一、关联阶段 1. WifiSettings.submit – > WifiManager WifiSettings 干的事情比较简单&#xff0c;当在dialog完成ssid 以及密码填充后&#xff0c;直接call WifiManager save 即可WifiManager 收到Save 之后&#xff0c;就开…...

MLIR笔记(5)

4.3.4. 图区域 在MLIR中&#xff0c;区域里类似图的语义由RegionKind::Graph来表示。对没有控制流的并发语义&#xff0c;以及通用有向图数据结构的建模&#xff0c;图区域是合适的。图区域适用于表示耦合值之间的循环关系&#xff0c;这些关系没有基本的序。例如&#xff0c;…...

三门峡网站建设电话/360网站推广怎么做

初学者应该选择学习Python还是C语言 发布时间&#xff1a;2020-11-21 14:11:31 来源&#xff1a;亿速云 阅读&#xff1a;74 作者&#xff1a;小新 小编给大家分享一下初学者应该选择学习Python还是C语言&#xff0c;希望大家阅读完这篇文章后大所收获&#xff0c;下面让我们一…...

电商平台介绍/seo文章是什么意思

看到大家都没说&#xff0c;我来补充个很重要的&#xff1a; import在Python3中默认使用绝对路径导入了&#xff0c;这是因为相对路径的导入是具有歧义的 比如文件夹结构&#xff1a;test/main.py lib/__init__.py some_func.py other_func.py 如果运行的是main.py文件&#xf…...

山东省住房城乡建设厅网站首页/朝阳网站seo

ndk android 硬件解码(2012-11-06 17:33:59)标签&#xff1a;杂谈首先&#xff0c;ndk下实现硬件解码是要针对不同的平台做多版本,将android中的头文件和源码拿出来是可以直接用的.我们设计一个IOMX的调用方式&#xff0c;因为这一层在android是统一的&#xff0c;代码的接口都…...

做网站流量/做网站比较好的公司有哪些

目标将图片进行进行镜像翻转.主要代码private fun toHorizontalMirror(bmp: Bitmap): Bitmap { val w bmp.width val h bmp.height val matrix Matrix() matrix.postScale(-1f, 1f) // 水平镜像翻转 return Bitmap.createBitmap(bmp, 0, 0, w, h, matrix, tr…...

python 做网站 套件/热点事件营销案例

Java应用程序运行时升级软件&#xff0c;无需重新启动的方式有两种&#xff0c;热部署和热加载。 热加载 热加载即在在运行时重新加载class&#xff0c;实现原理主要依赖java的类加载机制&#xff0c;是在运行时通过重新加载改变类信息&#xff0c;直接改变程序行为。在实现方…...

网站多语言包/网站运营主要做什么

拦截器(Interceptor) 拦截器可以监听程序的一个或所有方法。拦截器对方法调用流提供了细粒度控制。可以在无状态会话bean、有状态会话bean 和消息驱动bean 上使用它们。拦截器可以是同一bean 类中的方法或是一个外部类。下面介绍如何在Session Bean 类中使用外部拦截器类。Hell…...