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

故障分析 | Redis AOF 重写源码分析

作者:朱鹏举

新人 DBA ,会点 MySQL ,Redis ,Oracle ,在知识的海洋中挣扎,活下来就算成功…

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


AOF 作为 Redis 的数据持久化方式之一,通过追加写的方式将 Redis 服务器所执行的写命令写入到 AOF 日志中来记录数据库的状态。但当一个键值对被多条写命令反复修改时,AOF 日志会记录相应的所有命令,这也就意味着 AOF 日志中存在重复的"无效命令",造成的结果就是 AOF 日志文件越来越大,使用 AOF 日志来进行数据恢复所需的时间越来越长。为了解决这个问题,Redis 推出了 AOF 重写功能

什么是 AOF 重写

简单来说,AOF 重写就是根据当时键值对的最新状态,为它生成对应的写入命令,然后写入到临时 AOF 日志中。在重写期间 Redis 会将发生更改的数据写入到重写缓冲区 aof_rewrite_buf_blocks 中,于重写结束后合并到临时 AOF 日志中,最后使用临时 AOF 日志替换原来的 AOF 日志。当然,为了避免阻塞主线程,Redis 会 fork 一个进程来执行 AOF 重写操作。

如何定义 AOF 重写缓冲区

我知道你很急,但是你先别急,在了解AOF重写流程之前你会先遇到第一个问题,那就是如何定义AOF重写缓冲区。

一般来说我们会想到用malloc函数来初始化一块内存用于保存AOF重写期间主进程收到的命令,当剩余空间不足时再用realloc函数对其进行扩容。但是Redis并没有这么做,Redis定义了一个aofrwblock结构体,其中包含了一个10MB大小的字符数组,当做一个数据块,负责记录AOF重写期间主进程收到的命令,然后使用aof_rewrite_buf_blocks列表将这些数据块连接起来,每次分配一个aofrwblock数据块。

//AOF重写缓冲区大小为10MB,每一次分配一个aofrwblock
typedef struct aofrwblock {
unsigned long used, free;
char buf[AOF_RW_BUF_BLOCK_SIZE]; //10MB
} aofrwblock;

那么问题来了,为什么 Redis 的开发者要选择自己维护一个字符数组呢,答案是在使用 realloc 函数进行扩容的时候,如果此时客户端的写请求涉及到正在持久化的数据,那么就会触发 Linux 内核的大页机制,造成不必要的内存空间浪费,并且申请内存的时间变长。

Linux 内核从2.6.38开始支持大页机制,该机制支持2MB大小的內存页分配,而常规的内存页分配是按4KB的粒度来执行的。这也就意味着在 AOF 重写期间,客户端的写请求可能会修改正在进行持久化的数据,在这一过程中, Redis 就会采用写时复制机制,一旦有数据要被修改, Redis 并不会直接修改內存中的数据,而是将这些数据拷贝一份,然后再进行修改。即使客户端请求只修改100B的数据, Redis 也需要拷贝2MB的大页。

AOF 重写流程

不知道说什么,贴个代码先。

int rewriteAppendOnlyFileBackground(void) {
pid_t childpid;
long long start;
if (server.aof_child_pid != -1 || server.rdb_child_pid != -1) return C_ERR;
if (aofCreatePipes() != C_OK) return C_ERR;
openChildInfoPipe();
start = ustime();
if ((childpid = fork()) == 0) {
char tmpfile[256];
/* Child */
closeListeningSockets(0);
redisSetProcTitle("redis-aof-rewrite");
snprintf(tmpfile,256,
"temp-rewriteaof-bg-%d.aof"
, (int) getpid());
if (rewriteAppendOnlyFile(tmpfile) == C_OK) {
size_t private_dirty = zmalloc_get_private_dirty(-1);
if (private_dirty) {
serverLog(LL_NOTICE,
"AOF rewrite: %zu MB of memory used by copy-on-write"
,
private_dirty/(1024*1024));
}
server.child_info_data.cow_size = private_dirty;
sendChildInfo(CHILD_INFO_TYPE_AOF);
exitFromChild(0);
} else {
exitFromChild(1);
}
} else {
/* Parent */
server.stat_fork_time = ustime()-start;
/* GB per second. */
server.stat_fork_rate = (double) zmalloc_used_memory() * 1000000 / server.stat_fo
rk_time / (1024*1024*1024);
latencyAddSampleIfNeeded("fork"
,server.stat_fork_time/1000);
if (childpid == -1) {
closeChildInfoPipe();
serverLog(LL_WARNING,
"Can't rewrite append only file in background: fork: %s"
,
strerror(errno));
aofClosePipes();
return C_ERR;
}
serverLog(LL_NOTICE,
"Background append only file rewriting started by pid %d"
,childpid);
server.aof_rewrite_scheduled = 0;
server.aof_rewrite_time_start = time(NULL);
server.aof_child_pid = childpid;
updateDictResizePolicy();
server.aof_selected_db = -1;
replicationScriptCacheFlush();
return C_OK;
}
return C_OK; /* unreached */
}

一步到"胃"直接看源码相信不少同学都觉得很胃疼,但是整理过后理解起来就会轻松不少

  • 父进程
  1. 若当前有正在进行的AOF重写子进程或者RDB持久化子进程,则退出AOF重写流程

  2. 创建3个管道

  • parent -> children data
  • children -> parent ack
  • parent -> children ack
  1. 将parent -> children data设置为非阻塞

  2. 在children -> parent ack上注册读事件的监听

  3. 将数组fds中的六个⽂件描述符分别复制给server变量的成员变量

  4. 打开children->parent ack通道,用于将RDB/AOF保存过程的信息发送给父进程

  5. 用start变量记录当前时间

  6. fork出一个子进程,通过写时复制的形式共享主线程的所有内存数据

  • 子进程
  1. 关闭监听socket,避免接收客户端连接
  2. 设置进程名
  3. 生成AOF临时文件名
  4. 遍历每个数据库的每个键值对,以插入(命令+键值对)的方式写到临时AOF⽂件中
  • 父进程
  1. 计算上一次fork已经花费的时间

  2. 计算每秒写了多少GB内容

  3. 判断上一次fork是否结束,没结束则此次AOF重写流程就此中止

  4. 将aof_rewrite_scheduled设置为0(表示现在没有待调度执⾏的AOF重写操作)

  5. 关闭rehash功能(Rehash会带来较多的数据移动操作,这就意味着⽗进程中的内存修改会⽐较多,对于AOF重写⼦进程来说,就需要更多的时间来执行写时复制,进⽽完成AOF⽂件的写⼊,这就会给Redis系统的性能造成负⾯影响)

  6. 将aof_selected_db设置为-1(以强制在下一次调用feedAppendOnlyFile函数(写AOF日志)的时候将AOF重写期间累计的内容合并到AOF日志中)

  7. 当发现正在进行AOF重写任务的时候

    (1)将收到的新的写命令缓存在aofrwblock中

    (2)检查parent -> children data上面有没有写监听,没有的话注册一个

    (3)触发写监听时从aof_rewrite_buf_blocks列表中逐个取出aofrwblock数据块,通过parent -> children data发送到AOF重写子进程

  8. 子进程重写结束后,将重写期间aof_rewrite_buf_blocks列表中没有消费完成的数据追加写入到临时AOF文件中

管道机制

Redis创建了3个管道用于AOF重写时父子进程之间的数据传输,那么管道之间的通信机制就成为了我们需要了解的内容。

1.子进程从parent -> children data读取数据 (触发时机)

  • rewriteAppendOnlyFileRio

    由重写⼦进程执⾏,负责遍历Redis每个数据库,⽣成AOF重写⽇志,在这个过程中,会不时地调⽤ aofReadDiffFromParent

  • rewriteAppendOnlyFile

    重写⽇志的主体函数,也是由重写⼦进程执⾏的,本⾝会调⽤rewriteAppendOnlyFileRio,调⽤完后会调⽤ aofReadDiffFromParent 多次,尽可能多地读取主进程在重写⽇志期间收到的操作命令

  • rdbSaveRio

    创建RDB⽂件的主体函数,使⽤AOF和RDB混合持久化机制时,这个函数会调⽤aofReadDiffFromParent

//将从父级累积的差异读取到缓冲区中,该缓冲区在重写结束时连接
ssize_t aofReadDiffFromParent(void) {
char buf[65536]; //大多数Linux系统上的默认管道缓冲区大小
ssize_t nread, total = 0;
while ((nread =
read(server.aof_pipe_read_data_from_parent,buf,sizeof(buf))) > 0) {
server.aof_child_diff = sdscatlen(server.aof_child_diff,buf,nread);
total += nread;
}
return total;
}

2.子进程向children -> parent ack发送ACK信号

  • 在完成⽇志重写,以及多次向⽗进程读取操作命令后,向children -> parent ack发送"!",也就是向主进程发送ACK信号,让主进程停⽌发送收到的新写操作
int rewriteAppendOnlyFile(char *filename) {
rio aof;
FILE *fp;
char tmpfile[256];
char byte;
//注意,与rewriteAppendOnlyFileBackground()函数使用的临时名称相比,我们必须在此处使用不同的临
时名称
snprintf(tmpfile,256,
"temp-rewriteaof-%d.aof"
, (int) getpid());
fp = fopen(tmpfile,
"w");
if (!fp) {
serverLog(LL_WARNING,
"Opening the temp file for AOF rewrite in rewriteAppendOnly
File(): %s"
, strerror(errno));
return C_ERR;
}
server.aof_child_diff = sdsempty();
rioInitWithFile(&aof,fp);
if (server.aof_rewrite_incremental_fsync)
rioSetAutoSync(&aof,REDIS_AUTOSYNC_BYTES);
if (server.aof_use_rdb_preamble) {
int error;
if (rdbSaveRio(&aof,&error,RDB_SAVE_AOF_PREAMBLE,NULL) == C_ERR) {
errno = error;
goto werr;
}
} else {
if (rewriteAppendOnlyFileRio(&aof) == C_ERR) goto werr;
}
//当父进程仍在发送数据时,在此处执行初始的慢速fsync,以便使下一个最终的fsync更快
if (fflush(fp) == EOF) goto werr;
if (fsync(fileno(fp)) == -1) goto werr;
//再读几次,从父级获取更多数据。我们不能永远读取(服务器从客户端接收数据的速度可能快于它向子进程发送数
据的速度),所以我们尝试在循环中读取更多的数据,只要有更多的数据出现。如果看起来我们在浪费时间,我们会中止
(在没有新数据的情况下,这会在20ms后发生)。
int nodata = 0;
mstime_t start = mstime();
while(mstime()-start < 1000 && nodata < 20) {
if (aeWait(server.aof_pipe_read_data_from_parent, AE_READABLE, 1) <= 0)
{
nodata++;
continue;
}
nodata = 0; /* Start counting from zero, we stop on N *contiguous*
timeouts. */
aofReadDiffFromParent();
}
//发送ACK信息让父进程停止发送消息
if (write(server.aof_pipe_write_ack_to_parent,
"!"
,1) != 1) goto werr;
if (anetNonBlock(NULL,server.aof_pipe_read_ack_from_parent) != ANET_OK)
goto werr;
//等待父进程返回的ACK信息,超时时间为10秒。通常父进程应该尽快回复,但万一失去回复,则确信子进程最终会
被终止。
if (syncRead(server.aof_pipe_read_ack_from_parent,&byte,1,5000) != 1 ||
byte != '!') goto werr;
serverLog(LL_NOTICE,
"Parent agreed to stop sending diffs. Finalizing AOF...
");
//如果存在最终差异数据,那么将读取
aofReadDiffFromParent();
//将收到的差异数据写入文件
serverLog(LL_NOTICE,
"Concatenating %.2f MB of AOF diff received from parent.
"
,
(double) sdslen(server.aof_child_diff) / (1024*1024));
if (rioWrite(&aof,server.aof_child_diff,sdslen(server.aof_child_diff)) == 0)
goto werr;
//确保数据不会保留在操作系统的输出缓冲区中
if (fflush(fp) == EOF) goto werr;
if (fsync(fileno(fp)) == -1) goto werr;
if (fclose(fp) == EOF) goto werr;
//使用RENAME确保仅当生成DB文件正常时,才自动更改DB文件
if (rename(tmpfile,filename) == -1) {
serverLog(LL_WARNING,
"Error moving temp append only file on the final destinatio
n: %s"
, strerror(errno));
unlink(tmpfile);
return C_ERR;
}
serverLog(LL_NOTICE,
"SYNC append only file rewrite performed");
return C_OK;
werr:
serverLog(LL_WARNING,
"Write error writing append only file on disk: %s"
, strerror(err
no));
fclose(fp);
unlink(tmpfile);
return C_ERR;
}

3.父进程从children -> parent ack读取ACK

  • 当children -> parent ack上有了数据,就会触发之前注册的读监听
  • 判断这个数据是不是"!"
  • 是就向parent -> children ack写入"!",表⽰主进程已经收到重写⼦进程发送的ACK信息,同时给重写⼦进程回复⼀个ACK信息
void aofChildPipeReadable(aeEventLoop *el, int fd, void *privdata, int mask) {
char byte;
UNUSED(el);
UNUSED(privdata);
UNUSED(mask);
if (read(fd,&byte,1) == 1 && byte == '!') {
serverLog(LL_NOTICE,
"AOF rewrite child asks to stop sending diffs.
");
server.aof_stop_sending_diff = 1;
if (write(server.aof_pipe_write_ack_to_child,
"!"
,1) != 1) {
//如果我们无法发送ack,请通知用户,但不要重试,因为在另一侧,如果内核无法缓冲我们的写入,或
者子级已终止,则子级将使用超时
serverLog(LL_WARNING,
"Can't send ACK to AOF child: %s"
,
strerror(errno));
}
}
//删除处理程序,因为在重写期间只能调用一次
aeDeleteFileEvent(server.el,server.aof_pipe_read_ack_from_child,AE_READABLE);
}

什么时候触发AOF重写

开启AOF重写功能以后Redis会自动触发重写,花费精力去了解触发机制感觉意义不大。想法很不错,下次别想了。不然当你手动
执行Bgrewriteaof命令却发现总是报错时,疼的不只有你的头,还有你的胃。

1.手动触发
  • 当前没有正在执⾏AOF重写的⼦进程
  • 当前没有正在执⾏创建RDB的⼦进程,有会将aof_rewrite_scheduled设置为1(AOF重写操作被设置为了待调度执⾏)
void bgrewriteaofCommand(client *c) {
if (server.aof_child_pid != -1) {
addReplyError(c,
"Background append only file rewriting already in progress");
} else if (server.rdb_child_pid != -1) {
server.aof_rewrite_scheduled = 1;
addReplyStatus(c,
"Background append only file rewriting scheduled");
} else if (rewriteAppendOnlyFileBackground() == C_OK) {
addReplyStatus(c,
"Background append only file rewriting started");
} else {
addReply(c,shared.err);}
}
2.开启AOF与主从复制
  • 开启AOF功能以后,执行一次AOF重写
  • 主从节点在进⾏复制时,如果从节点的AOF选项被打开,那么在加载解析RDB⽂件时,AOF选项会被关闭,⽆论从节点是否成功加载RDB⽂件,restartAOFAfterSYNC函数都会被调⽤,⽤来恢复被关闭的AOF功能,在这个过程中会执行一次AOF重写
int startAppendOnly(void) {char cwd[MAXPATHLEN]; //错误消息的当前工作目录路径int newfd;newfd = open(server.aof_filename,O_WRONLY|O_APPEND|O_CREAT,0644);serverAssert(server.aof_state == AOF_OFF);if (newfd == -1) {char *cwdp = getcwd(cwd,MAXPATHLEN);serverLog(LL_WARNING,"Redis needs to enable the AOF but can't open the ""append only file %s (in server root dir %s): %s",server.aof_filename,cwdp ? cwdp : "unknown",strerror(errno));return C_ERR;}if (server.rdb_child_pid != -1) {server.aof_rewrite_scheduled = 1;serverLog(LL_WARNING,"AOF was enabled but there is already a child process saving an RDB file on disk. An AOF background was scheduled to start when possible.");} else {//关闭正在进行的AOF重写进程,并启动一个新的AOF:旧的AOF无法重用,因为它没有累积AOF缓冲区。if (server.aof_child_pid != -1) {serverLog(LL_WARNING,"AOF was enabled but there is already an AOF rewriting in background. Stopping background AOF and starting a rewrite now.");killAppendOnlyChild();}if (rewriteAppendOnlyFileBackground() == C_ERR) {close(newfd);serverLog(LL_WARNING,"Redis needs to enable the AOF but can't trigger a background AOF rewrite operation. Check the above logs for more info about the error.");return C_ERR;}}//我们正确地打开了AOF,现在等待重写完成,以便将数据附加到磁盘上server.aof_state = AOF_WAIT_REWRITE;server.aof_last_fsync = server.unixtime;server.aof_fd = newfd;return C_OK;
}
3.定时任务
  1. 每100毫秒触发一次,由server.hz控制,默认10

  2. 当前没有在执⾏的RDB⼦进程 && AOF重写⼦进程 && aof_rewrite_scheduled=1

  3. 当前没有在执⾏的RDB⼦进程 && AOF重写⼦进程 && aof_rewrite_scheduled=0

    AOF功能已启⽤ && AOF⽂件⼤⼩⽐例超出auto-aof-rewrite-percentage && AOF⽂件⼤⼩绝对值超出auto-aofrewrite-min-size

int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) {
......
//判断当前没有在执⾏的RDB⼦进程 && AOF重写⼦进程 && aof_rewrite_scheduled=1
if (server.rdb_child_pid == -1 && server.aof_child_pid == -1 &&
server.aof_rewrite_scheduled)
{
rewriteAppendOnlyFileBackground();
}
//检查正在进行的后台保存或AOF重写是否终止
if (server.rdb_child_pid != -1 || server.aof_child_pid != -1 ||
ldbPendingChildren())
{
int statloc;
pid_t pid;
if ((pid = wait3(&statloc,WNOHANG,NULL)) != 0) {
int exitcode = WEXITSTATUS(statloc);
int bysignal = 0;
if (WIFSIGNALED(statloc)) bysignal = WTERMSIG(statloc);
if (pid == -1) {
serverLog(LL_WARNING,
"wait3() returned an error: %s.
"
"rdb_child_pid = %d, aof_child_pid = %d"
,
strerror(errno),
(int) server.rdb_child_pid,
(int) server.aof_child_pid);
} else if (pid == server.rdb_child_pid) {
backgroundSaveDoneHandler(exitcode,bysignal);
if (!bysignal && exitcode == 0) receiveChildInfo();
} else if (pid == server.aof_child_pid) {
backgroundRewriteDoneHandler(exitcode,bysignal);
if (!bysignal && exitcode == 0) receiveChildInfo();
} else {
if (!ldbRemoveChild(pid)) {
serverLog(LL_WARNING,
"Warning, detected child with unmatched pid: %ld"
,
(long)pid);
}
}
updateDictResizePolicy();
closeChildInfoPipe();
}
} else {
//如果没有正在进行的后台save/rewrite,请检查是否必须立即save/rewrite
for (j = 0; j < server.saveparamslen; j++) {
struct saveparam *sp = server.saveparams+j;
//如果我们达到了给定的更改量、给定的秒数,并且最新的bgsave成功,或者如果发生错误,至少已经
过了CONFIG_bgsave_RETRY_DELAY秒,则保存。
if (server.dirty >= sp->changes &&
server.unixtime-server.lastsave > sp->seconds &&
(server.unixtime-server.lastbgsave_try >
CONFIG_BGSAVE_RETRY_DELAY ||
server.lastbgsave_status == C_OK)){
serverLog(LL_NOTICE,
"%d changes in %d seconds. Saving...
"
,
sp->changes, (int)sp->seconds);
rdbSaveInfo rsi, *rsiptr;
rsiptr = rdbPopulateSaveInfo(&rsi);
rdbSaveBackground(server.rdb_filename,rsiptr);
break;
}
}
//判断AOF功能已启⽤ && AOF⽂件⼤⼩⽐例超出auto-aof-rewrite-percentage && AOF⽂件⼤⼩绝对
值超出auto-aof-rewrite-min-size
if (server.aof_state == AOF_ON &&
server.rdb_child_pid == -1 &&
server.aof_child_pid == -1 &&
server.aof_rewrite_perc &&
server.aof_current_size > server.aof_rewrite_min_size)
{
long long base = server.aof_rewrite_base_size ?
server.aof_rewrite_base_size : 1;
long long growth = (server.aof_current_size*100/base) - 100;
if (growth >= server.aof_rewrite_perc) {
serverLog(LL_NOTICE,
"Starting automatic rewriting of AOF on %lld%% growt
h"
,growth);
rewriteAppendOnlyFileBackground();
}
}
}
......
return 1000/server.hz;
}

AOF重写功能的缺点

哪怕是你心中的她,也并非是完美无缺的存在,更别说Redis这个人工产物了。但不去发现也就自然而然不存在缺点,对吧~

1.内存开销
  • 在AOF重写期间,主进程会将fork之后的数据变化写进aof_rewrite_buf与aof_buf中,其内容绝大部分是重复的,在高流量写入的场景下两者消耗的空间几乎一样大。
  • AOF重写带来的内存开销有可能导致Redis内存突然达到maxmemory限制,甚至会触发操作系统限制被OOM Killer杀死,导致Redis不可服务。
2.CPU开销
  • 在AOF重写期间主进程需要花费CPU时间向aof_rewrite_buf写数据,并使用eventloop事件循环向子进程发送aof_rewrite_buf中的数据。
//将数据附加到AOF重写缓冲区,如果需要,分配新的块
void aofRewriteBufferAppend(unsigned char *s, unsigned long len) {
......
//创建事件以便向子进程发送数据
if (!server.aof_stop_sending_diff &&
aeGetFileEvents(server.el,server.aof_pipe_write_data_to_child) == 0)
{
aeCreateFileEvent(server.el, server.aof_pipe_write_data_to_child,
AE_WRITABLE, aofChildWriteDiffData, NULL);}......
}
  • 在子进程执行AOF重写操作的后期,会循环读取pipe中主进程发送来的增量数据,然后追加写入到临时AOF文件。
int rewriteAppendOnlyFile(char *filename) {
......
//再次读取几次以从父进程获取更多数据。我们不能永远读取(服务器从客户端接收数据的速度可能快于它向子级发
送数据的速度),因此我们尝试在循环中读取更多数据,只要有很好的机会会有更多数据。如果看起来我们在浪费时间,
我们会中止(在没有新数据的情况下,这会在20ms后发生)
int nodata = 0;
mstime_t start = mstime();
while(mstime()-start < 1000 && nodata < 20) {
if (aeWait(server.aof_pipe_read_data_from_parent, AE_READABLE, 1) <= 0)
{
nodata++;
continue;
}
nodata = 0; /* Start counting from zero, we stop on N *contiguous*
timeouts. */
aofReadDiffFromParent();}......
}

在子进程完成AOF重写操作后,主进程会在backgroundRewriteDoneHandler中进行收尾工作,其中一个任务就是将在重
写期间aof_rewrite_buf中没有消费完成的数据写入临时AOF文件,消耗的CPU时间与aof_rewrite_buf中遗留的数据量成正
比。

3.磁盘IO开销

在AOF重写期间,主进程会将fork之后的数据变化写进aof_rewrite_buf与aof_buf中,在业务高峰期间其内容绝大部分是重复的,一次操作产生了两次IO开销。

4.Fork

虽说 AOF 重写期间不会阻塞主进程,但是 fork 这个瞬间一定是会阻塞主进程的。因此 fork 操作花费的时间越长,Redis 操作延迟的时间就越长。即使在一台普通的机器上,Redis 也可以处理每秒50K到100K的操作,那么几秒钟的延迟可能意味着数十万次操作的速度减慢,这可能会给应用程序带来严重的稳定性问题。

为了避免一次性拷贝大量内存数据给子进程造成的长时间阻塞问题,fork 采用操作系统提供的写时复制(Copy-On-Write)机制,但 fork 子进程需要拷贝进程必要的数据结构,其中有一项就是拷贝内存页表(虚拟内存和物理内存的映射索引表)。这个拷贝过程会消耗大量 CPU 资源,拷贝完成之前整个进程是会阻塞的,阻塞时间取决于整个实例的内存大小,实例越大,内存页表越大,fork 阻塞时间越久。拷贝内存页表完成后,子进程与父进程指向相同的内存地址空间,也就是说此时虽然产生了子进程,但是并没有申请与父进程相同的内存大小。

参考资料:

1.极客时间专栏《Redis源码剖析与实战》.蒋德钧.2021

2.极客时间专栏《Redis核心技术与实战》.蒋德钧.2020

3.Redis 7.0 Multi Part AOF的设计和实现.驱动 qd.2022 :
https://developer.aliyun.com/article/866957

4.Redis 5.0.8源码:https://github.com/redis/redis/tree/5.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4925852.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

OLED 12864屏幕指南

原文链接&#xff1a;https://www.jianshu.com/p/7e54ebb387ee OLED12864屏幕指南 OLED 屏幕作为一种新型的显示技术&#xff0c;其自身可以发光&#xff0c;亮度&#xff0c;对比度高&#xff0c;功耗低&#xff0c;在当下备受追捧。而在我们正常的显示调整参数过程中&#…...

给定三角形三边,如何判断该三角形的形状

给定三角形三边,如何判断该三角形的形状1、前言2、公式介绍3、公式推导1、前言 我们都知道,三角形可分为直角三角形、锐角三角形、钝角三角形三种形状,而判断一个三角形具体为哪种形态,可以通过分析三角形中三个角中最大的角度得出。 假设这个最大的角度为∠C,则有 若∠C 9…...

十进制转十六进制c语言顺序栈,C语言 顺序栈实现十进制转换为二进制,八进制,十六进制...

#include #define MAX 20typedef struct{int data[MAX];int top;}SeqStack;SeqStack* Init(){SeqStack *s;s (SeqStack *)malloc(sizeof(SeqStack));s->top -1;return s;}void Destroy(SeqStack *s){free(s);}bool IsFull(SeqStack *s){return (s->top MAX - 1) ? tr...

力扣 884 比较含退格的字符串

这道题我刚开始想的是从后往前遍历&#xff0c;如果碰到#&#xff0c;就跳过前一个&#xff0c;但是发现这样的话&#xff0c;第二个样例就过不了。所以这个思路行不通。然后发现这个可以利用栈的思想&#xff0c;如果没有碰到#&#xff0c;直接追加到ret后面&#xff0c;如果碰…...

数组(九)--十进制转换为十六进制

方法一&#xff1a; 1、以60为例&#xff1a;&#xff08;假设为32位&#xff09; 60 除以 16 商 3 余。。。。。。。。12 3 除以 16 商 0 余。。。。。。。。。3 2、然后将余数倒过来&#xff0c;两位数的余数则转化为字母。 数字与字母对应&#xff1a; 10-----A 11-----B 1…...

flash player 离线版下载地址

谷歌flash 下载地址 &#xff1a;最新版 https://www.flash.cn/flashplayer/3200156/install_flash_player_ppapi_cn.exe火狐flash 下载地址&#xff1a;最新版 https://www.flash.cn/flashplayer/3200156/install_flash_player_cn.exe...

linux 检查网卡命令,linux shell查看网卡命令详解

想必很多小伙伴都不知道Linux系统有命令可以查看网卡流量吧&#xff0c;下面由学习啦小编为大家整理了linux shell查看网卡命令的相关知识&#xff0c;希望能对大家有帮助!linux shell查看网卡linux shell查看网卡方法一、nload工具源码包路径&#xff1a;http://heanet.dl.sou…...

【多图长文】古希腊式、巴洛克式、哥特式.....图说西方建筑简史

目录 两种样式体系 古典建筑的发展历程 古希腊建筑 古罗马建筑 文艺复兴建筑 巴洛克建筑 新古典主义建筑 中世纪建筑的发展历程 罗曼式建筑 哥特式建筑 哥特复兴式建筑 总结 参考 午后&#xff0c;休憩之余无意间读到了这本《图说西方建筑简史》&#xff0c;翻一翻…...

Linux下查看网卡光衰值

ethtool -g 网卡名称&#xff0c;显示网卡的接收/发送环形参数。 lldptool -t -n -i 网卡名称 收光&#xff1a;ethtool -m eth0 | grep "Receiver signal" | head -1 | awk -F / {print $2}发光&#xff1a;ethtool -m eth0| grep "Laser output power"…...

基于微信校园跑腿小程序毕业设计设计与实现毕设参考

发布任务用户效果图 跑腿接单用户效果图...

佳能R5专业微单相机介绍

目录佳能EOS R5 佳能(Canon) 佳能r5 专业微单相机 数码相机 EOS R5全画幅 Vlog相机 8K视频拍摄 R5拆单机RF70-200 F2.8镜头 官方标配   R5拆单机RF70-200 F2.8镜头   官方标配   42999元 类别选项是否支持曝光控制标准ISO感光度ISO 100-51200电源参数外接电源支持外接电源~电…...

CDN是什么呢?CDN加速有什么优势?

这边给看官讲个故事 大年初一的晚上,家里面老一辈在客厅看春晚,小一辈呢没有这样的习惯,这让他们一起去书房用电脑看电影或者打游戏,然后客户茶几上有一个放了各种坚果的果盘,小孩子嘛,一会儿起来抓一把跑回书房,过一会儿又是如此,周而复始,也不嫌累,就是这样一趟有一趟再跑.在…...

【老生谈算法】matlab实现图像压缩算法源码——图像压缩

Matlab的图像压缩技术源码 1、算法详解&#xff1a; 一&#xff0e;目的要求 掌握Matlab图像图像压缩技术原理和方法。理解有损压缩和无损压缩的概念&#xff0c;了解几种常用的图像压缩编码方式&#xff0c;利用matlab进行图像压缩算法验证。 二&#xff0e;实验内容 1、观察…...

Mac如何优雅地删除Docker

千万不要暴力删除应用程序&#xff01;&#xff01;&#xff01; 打开Docker&#xff0c;右上角与一众小图标&#xff08;如wifi等&#xff09;并列的位置 有一个Docker的图标&#xff08;我这里没显示了&#xff0c;因为我已经删除了&#xff09; &#xff0c;点击&#xff0…...

数据分析师必须掌握的 十三大数据分析方法论!

数据分析方法论 花了一个星期写的此文章&#xff0c;点个赞给杯咖啡吧&#xff01; 文章目录数据分析方法论1. 公式法拆解法2. 象限法2.1 象限法的优势3. 二八法 / 帕累托分析4. 漏斗法5. 逻辑树分析方法5.1 逻辑拆解5.2 用处5.3 如何用5.4 费米问题&#xff1a;解决思路与技巧…...

如何查询linux服务器的网卡,linux怎么查看网卡硬件信息

你们知道怎么查看电脑中的网卡型号吗?下面是学习啦小编带来的关于linux怎么查看网卡硬件信息的内容&#xff0c;欢迎阅读!Linux查看网卡信息方法一&#xff1a;1.lspci | grep -i ethernet[rootlocalhost ~]# lspci | grep -i ethernet01:00.0 Ethernet controller: Broadcom …...

html周志模板,毕业设计指导周志模板

毕业设计指导周志模板 毕业设计指导周志 来源&#xff1a; 毕业设计(论文)题目 交流电功率因数测量方法研究 指导教师姓名 刘璐玲 学生姓名 学生学号 专 业 09电气自动化1班 第 1 周 2012 年 04 月 02 日至 2011 年 04 月 08 日 本周是毕业设计的第一周&#xff0c;接到老师下达…...

[手把手一起学live555]-3.live555MediaServer学习(1)

这是[手把手一起学live555]的第4篇&#xff08;按这个序号看&#xff0c;请找正确顺序看&#xff09;。 live555工程在我的gitee下&#xff08;doc下有思维导图、drawio图&#xff09;&#xff1a; https://gitee.com/lure_ai/live555/tree/master 学习demo live555mediaserve…...

Adobe Flash Player32 离线安装包及菁苗软件打开白屏的解决方法

菁苗软件打开白屏的原因是FLASH的版本太高造成的。下载该版本后卸载系统原有FLASH PLAY&#xff0c;并安装此版本即可解决。 https://www.lanzoux.com/ifcV5giyyob...

第8章 聚合函数

1.什么是聚合函数 *聚合函数作用于一组数据、并对一组数据返回一个值。 *聚合函数的类型&#xff1a;AVG()、SUM()、MAX()、MIN()、COUNT() &#xff08;1&#xff09;AVG和SUM函数 可以对数值型数据使用AVG和SUM函数 例如&#xff1a; SELECT AVG(salary), MAX(salary),…...

java+web中上传文件夹

前言&#xff1a;因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传&#xff0c;而自己对java文件上传这一块未接触过&#xff0c;且对 Http 协议较模糊&#xff0c;故这次采用渐进的方式来学习文件上传的原理与实践。该博客重在实践。 一. Http协议原理简介 HTT…...

MDK Pack安装包下载算法BUG

MDK安装Pack包之后无法选择Pack里面对应的下载算法 背景 最近笔者准备DIY一些MCU小玩具&#xff0c;给电脑装上MDK5.36的最新版&#xff0c;和谐&#xff0c;安装上对应芯片的Pack包&#xff0c;开发完之后发现Download无法选择对应型号的下载算法。 现象 解决思路 一开始笔…...

米安网课程笔记

这个博客里面有很多是课程ppt上的东西&#xff0c;后面也没实验部分的截图。课程视频的话应该比较容易搜到。 爆破无线路由器管理页面登录密码&#xff0c;这部分加入了自己的操作&#xff0c;其他的没啥独特的。 WiFi安全简介及案例 WiFi是一种无线技术&#xff0c;常见的无…...

linux查看 网卡信息

1. ifconfig # 查看信息 此时会得到网卡编号 2. ethtool 网卡编号 就可以得到相关信息了...

STM32HAL库利用实现单击、双击、长按

要实现单片机的单击、双击、长按操作则需要理解一下他们的区别是什么 可从图中观察到单击在一定周期里有一个低电平&#xff0c;双击则是两个低电平&#xff0c;长按则是整个周期都是低电平。 本次进行的软件 STM32CubeMX Keil5 采用的方法是中断&#xff08;按键…...

linux系统下安装flash player插件下载安装,Linux16.0.4下安装Adobe Flash Player插件(Firefox)...

Linux 16.0.4下安装Adobe Flash Player插件(Firefox)#Linux下安装Adobe Flash Player插件(Firefox)flash未安装Linux系统上用自带浏览器看视频的时候发现没有装flash插件&#xff0c;无法播放视频。下载flash插件点击视频框页面中安装flash链接 自动跳转至下载链接或者点击下面…...

Android代码覆盖率平台(综述篇)

Coverage_JacocoWebServer Code coverage platform for Android project. Base on jacoco,SpringBoot,Vue,java,kotlin… 项目地址&#xff1a;https://github.com/duqian291902259/Coverage_JacocoWebServer web-vue 前端工程src后端逻辑docker&#xff1a;mvn插件自动生成…...

【概率论与数理统计(研究生课程)】知识点总结10(方差分析)

原文地址&#xff1a;【概率论与数理统计(研究生课程)】知识点总结10(方差分析) 目录单因素方差分析方差分析表关系强度多重比较问题双因素方差分析方差分析表关系强度单因素方差分析 H0:μ1μ2⋯μn;H1:μ1,μ2,⋯,μnH_0:\mu_1\mu_2\cdots\mu_n;\quad H_1:\mu_1,\mu_2,\cdots…...

flash电脑安装包_一百余款电脑软件及安装方式,忍不住收藏起来

安装软件指南免费/软件/教程/分享/人工服务这里是一个集各种汉化软件于一身的公众号哦。在这里&#xff0c;你想要什么软件都能找到&#xff0c;免费免费免费&#xff0c;无病毒恶意插件&#xff0c;简直是把妹撩汉神器。建议把此公众号置顶或收藏&#xff0c;什么时候需要什么…...

springboot 实训总结

文章目录*做了什么*:做了一个迷你电商系统*如何做的* :1.准备好前端框架2.对前端框架进行分析3.业务流程分析4.springboot工程开始实现相应功能1. 准备好数据库2. 根据数据库自动生成controller,entity ,mapper,xml,server,impl等代码3.自动生成代码的工具类如下:4.对生成的map…...

linux安装包文件格式,一般软件的安装包格式

怎么找软件的安装包&#xff1f;展开全部 塞班系统通常为SIS或SISX,Java程序通常为JAD或者JAR,Linux系统(motorola专用)大多为mtf(moto的主题文件安装包)、mpkg或pkg,Adroid系统的安装文件大多为APK&#xff0c;苹果手机则是自有系统的安装器或软件包集成安装器(Installer)或者…...

基于多目标粒子群优化算法的冷热电联供型综合能源系统运行优化(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…...

如何下载flash离线安装包

如何下载flash离线安装包 CreateTime--2018年4月14日16:02:13 Author:Marydon 1.下载地址 UpdateTime--2018年5月13日16点55分 ppapi格式安装包&#xff1a;http://flash.2144.com/?ppapi activex格式安装包&#xff1a;http://flash.2144.com/?activex npapi格式安装包&…...

JavaCV - 灰度图像归一化到0-255

归一化后效果预览 原图 归一化后 函数代码 /*** 图像的归一化,目的是使不同成像条件(光照强度,方向,距离,姿势等)下拍摄的同一张照片具有一致性。* @return*/private static Mat one(Mat gray) {Mat clone = gray.clone();int height = gray.rows();int width = gray.…...

Nginx------nginx-rewrite、if、浏览器分离、防盗链

文章目录Rewritenginx的rewrite功能在企业里应用非常广泛rewrite配置Rewrite Rewrite和apache等web服务软件一样&#xff0c;rewrite的主要功能是实现URL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持&#xff0c;即通过perl兼容正则表达式语句进行规则匹配的。默认参数…...

linux 查看网卡以及开启网卡

1、查看并分配虚拟网络 我们首先要知道 VMware 三种网络模式的区别。 ①、Bridged&#xff08;桥接模式&#xff09;&#xff1a;就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下&#xff0c;类似于把物理主机虚拟为一个交换机&#xff0c;所有桥接设…...

Linux查看网卡带宽

当我们做一些性能测试或者性能分析时&#xff0c;想看看我们当网络带宽是否成为瓶颈&#xff0c;那么这个时候我们就有必要查看网卡带宽了。 ifconfig 查看网卡信息&#xff0c;获取网卡名称 执行命令&#xff1a;ethtool 网卡名称&#xff0c;例&#xff1a;ethtool eth1 输出…...

【车机控制】线性底盘控制--CAN协议通讯

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、CAN通讯的相关学习二、CAN相关的调试工具参考资料前言 认知有限&#xff0c;望大家多多包涵&#xff0c;有什么问题也希望…...

FFmpeg入门详解之79:FFmpeg转码器Java版之Java Tomcat Eclipse开发环境配置

Java项目通常会在像eclipse这样的集成开发工具上进行高效的开发&#xff0c;开发之前需要进行一系列的安装及配置&#xff0c;会经过以下几个步骤&#xff1a; 1、官网上下载jdk、tomcat、eclipse 2、安装上面下载的软件 3、分别配置jdk、tomcat、eclipse 我已经把所有的软件…...

CSS学习笔记 06、背景与渐变

文章目录前言一、背景1.1、背景颜色(background-color)1.2、背景图片(background-image)1.2.1、基本认识1.2.2、重复模式(background-repeat)四种模式演示水平垂直平铺案例1.2.3、背景尺寸(background-size)1.2.4、背景裁切(background-clip)1.2.5、background-attachment属性1…...

flash activex java_Flash Activex NPAPI PPAPI 各种网页插件完整安装包下载地址

内容全部是自己手工原创写作的参考内容&#xff0c;完全排除从其他网站COPY的内容信息。如有雷同实属巧合。奉献给有需求的人士&#xff0c;也给各位解决FLASH安装头疼的问题&#xff0c;正常在线下载安装运气不好的安装半天。运气好的也许一会就搞定了。以下内容主要是送给那些…...

新闻推荐系统-项目介绍(PRD)

新闻推荐系统b站链接制作不易,6月后开源全部代码以及数据,记得一键三联哦!开源代码: github代码库mysql:链接&#xff1a;https://pan.baidu.com/s/1jLzfYbpsfHEjS4S17IyQnQ提取码&#xff1a;1234环境介绍 语言环境: 1.java1.8 2.scala2.1.1 IDE: eclipse2015(java) myecli…...

vue定时器问题(单个定时器和循环定时器)

有两种情况&#xff1a; 一、单个定时器&#xff0c;比如发送验证码后&#xff0c;显示倒计时60秒 二、在循环中创建多个定时器&#xff0c;比如美团未支付页面有多个订单&#xff0c;都是从下单时间开始倒计时15分钟 第二个情况有点复杂&#xff0c;弄了很久&#xff0c;算是踩…...

并发编程 | Netty - [常用预设 Handler]

INDEX1 心跳检测器2 事件处理3 日志4 编解码器5 WebSocket1 心跳检测器 IdleStateHandler 自动对空闲时长进行判断触发空闲超长后&#xff0c;抛出 IdleStateEvent 事件IdleStateEvent 事件自动 交由此 handler 后的下一个 handler 进行处理 参数 readerIdleTime&#xff1…...

vue定时器问题

我在a页面写一个定时&#xff0c;让他每秒钟打印一个1&#xff0c;然后跳转到b页面&#xff0c;此时可以看到&#xff0c;定时器依然在执行。这样是非常消耗性能的 解决方法1&#xff1a; 首先我在data函数里面进行定义定时器名称&#xff1a; data() { return { …...

Python函数调用的九大方法,鲜为人知

咦&#xff0c;调个函数&#xff0c;竟然有这么多种方法&#xff1f;请评论区告诉我你用过几种。1还是2&#x1f60a;&#x1f60a; 1. 直接调用函数&#xff08;__call__&#xff09; 最简单最直接的使用方法&#xff1a; def func():print(Hello, world!) func() # Hello,…...

米安代码审计 05 文件上传漏洞

本文记录 PHP 代码审计的学习过程&#xff0c;教程为暗月 2015 版的 PHP 代码审计课程 PHP 代码审计博客目录 1. 简介 危害 如果不对被上传的文件进行限制或者限制被绕过&#xff0c;该功能便有可能会被利用于上传可执行文件、脚本到服务器上&#xff0c;进而进一步导致服务器沦…...

【PDN仿真笔记8-使用Sigrity 进行DCR仿真的方法】

PDN仿真笔记8-使用Sigrity 进行DCR仿真的方法 使用Sigrity进行DCR仿真有两个方法&#xff1a;用PowerDC或者PowerSI进行仿真 1、使用PowerDC进行DCR仿真的方法 打开PowerDC&#xff0c;选择Resistance Measurement Generation 然后点击“Create New Single……”新建一个wor…...

Java实现的企业员工考勤管理系统

目录 一、引言 2 编写目的 2 项目背景 2 二、总体设计 3 2.1运行要求 3 2.2接口设计 3 2.3构架设计 3 2.4基本设计概念和处理流程 3 2.5结构 5 2.6功能需求与各模块之间关系 6 2.6.1基本信息管理模块 6 2.6.2个人出勤管理模块 10 2.6.3出勤管理模块 14 三、数据的逻辑描述 17 …...

获取Adobe Flash 及Reader安装包

如题&#xff0c;之所以写此方法是因为公司需要大量更新Adobe的软件。原先官网还能下载到离线安装包&#xff0c;现在下载的只是一个1MB左右的下载器&#xff0c;安装时才进行自动下载&#xff0c;等到安装完后还会自动删除。 经过多次测试我给出一个成功率比较高的方法如下。 …...

QT学习C++(4)

内联函数 宏函数&#xff08;带参数的宏&#xff09;的缺点&#xff1a; 为了保持预处理宏的效率且增加安全性&#xff0c;还能像一般成员函数一样在类里访问自如&#xff0c;C引入内联函数 宏的本质是完全的替换 内联函数本身是一个真正的函数 任何在类内部定义的函数会自动…...

基于Open3D的Lidar-Segment

1. Open3D-ML安装和使用 首先对于Open3d&#xff0c;我们要先对源码下载 # make sure you have the latest pip version pip install --upgrade pip # install open3d pip install open3d然后选择要安装兼容版本的PyTorch或TensorFlow&#xff0c;Open3d中提供了两种安装方式…...

eslint 的配置 自用

{"eslint.enable": true,"eslint.run": "onType","eslint.options": {"extensions": [".js",".vue",".jsx",".tsx"]},"editor.codeActionsOnSave": {"source.fixA...

linux中查看网卡型号的命令

转载文章&#xff0c;亲测有效&#xff0c;仅供参考&#xff1a; Linux如何查看网卡型号-百度经验 (baidu.com)https://jingyan.baidu.com/article/fcb5aff75de13bedaa4a71cf.html...

米安代码审计 01 php.ini 安全配置

本文记录 PHP 代码审计的学习过程&#xff0c;教程为暗月 2015 版的 PHP 代码审计课程 PHP 代码审计博客目录 0. 简介 配置php.ini让我们执行让php能够更安全。 整个PHP中的安全设置主要是为了防止phpshell和SQL Injection的攻击 php.ini配置文件的设置指令的格式如下&#…...

linux下如何查看网卡ip,linux下如何查看某个网卡当前使用的IP

打开终端&#xff0c;输入命令&#xff1a;ifconfig -a即可查看网卡对应的ipeth0 Link encap:Ethernet HWaddr 84:2b:2b:ae:9d:7binet addr:192.168.1.102 Bcast:192.168.1.255 Mask:255.255.255.0inet6 addr: fe80::862b:2bff:feae:9d7b/64 Scope:LinkUP BROADCAST RUNNING MU…...

使用 ggsegExtra 对大脑分区统计结果进行可视化,如在Glasser360分区模板,Yeo2011模板,Schaefer分区模板上统计结果可视化

ggsegExtra 对大脑分区统计结果进行可视化 简介ggseg的使用说明安装创建自定义图集可用的分区模板实例说明ggsegGlasser实操加载绘图可视化分区统计结果读取数据核心代码绘制Glasser360分区模板的统计量的完整代码效果图参考文献简介 人们越来越重视以更直观的方式可视化神经影…...

用Python玩转数据(一)

寻找第n个默尼森数 代码格式如下&#xff1a; def prime(num): ... def monisen(no):… … return xxx print(monisen(int(input()))) #此处不需要自己输入&#xff0c;只要写这样一条语句即可&#xff0c;主要完成monisen()函数&#xff08;4分&#xff09;经典程序设计问题&a…...

Linux 查看网卡配置速率

ifconfig 查看网卡名称 ethtool "网卡名称" | grep "Speed:" #显示“网卡”的速率...

计算机专业论文周记20篇,毕业论文工作周记6篇

毕业论文工作周记6篇填完中期检查表也就意味着我们的论文已经进行到一半了&#xff0c;越往后我们的任务也就越来越艰巨&#xff0c;对自己的要求也就越来越高。这段时间的工作主要是对研究工具进行修改&#xff0c;一次次的跟我的指导老师讨论研究内容和问卷的维度&#xff0c…...

【YBT2023寒假Day6 B】树的计数(贪心)(DP)(拉格朗日插值)

树的计数 题目链接&#xff1a;YBT2023寒假Day6 B 题目大意 定义无标号树的大小是节点个数&#xff0c;权值是最大独立集大小&#xff0c;树的儿子有序&#xff0c;然后给你 n&#xff0c;要你求对于每个 i1~n&#xff0c;j0~n&#xff0c;大小是 i 权值是 j 的不同树的数量…...

动手深度学习笔记(四十四)8. 循环神经网络

动手深度学习笔记(四十四)8. 循环神经网络 8. 循环神经网络8. 循环神经网络 到目前为止,我们遇到过两种类型的数据:表格数据和图像数据。 对于图像数据,我们设计了专门的卷积神经网络架构来为这类特殊的数据结构建模。 换句话说,如果我们拥有一张图像,我们需要有效地利…...

十种“软件滤波“程序,以及特点

1、限副滤波 /* A值可根据实际情况调整 value为有效值&#xff0c;new_value为当前采样值 滤波程序返回有效的实际值 */ #define A 10 char value; char filter() { char new_value; new_value get_ad(); if ( ( new_value - value > A ) || ( value - new_value > A …...

NLP发展关键模型

文章目录NLP中Bert的进展历史word embeddingELMOGPTBertNLP中Bert的进展历史 从Word Embedding到Bert模型——自然语言处理中的预训练技术发展史 word embedding word embedding:每个单词one-hot编码的向量矩阵&#xff0c;在大语言训练之后&#xff0c;该矩阵可以直接提取出…...

数学,千万别学过火

从网上看到有一本书叫《千万别恨数学》的书&#xff0c;是《千万别学英语》的姊妹篇。作者是韩国尖端技术研究院的博士。他以前对数学反感之极&#xff0c;大学的时候为了赚生活费&#xff0c;开始做家教&#xff0c;辅导高中学生学数学。因为读书的时间长&#xff0c;这种日子…...

leetcode栈和队列系列总结

这一部分其实就是关于这两个结构的特性&#xff0c;栈是先入后出&#xff0c;队列是先入先出&#xff1b; 大部分时候还是用数组和切片来实现的&#xff0c;go中有一个list&#xff0c;可以pushback等&#xff0c;但是主要在二叉树章节会用到&#xff0c;这里不怎么用 20 有效…...

第12章 MongoDB 删除集合教程

第12章 MongoDB 删除集合教程 本章节咱们为大家介绍如何使用 MongoDB 来删除集合。 MongoDB 中使用 drop() 方法来删除集合。 语法格式&#xff1a; db.collection.drop()参数说明&#xff1a; 无 return 值 如果成功删除选定集合&#xff0c;则 drop() 方法return true&…...

【面试题】对象、原型、原型链与继承 ,你了解多少?

前言原型、原型链、类与继承似乎无时无刻的出现在我们身边,无论你是在面试中亦或是平常学习和工作中都有它的身影。那么这个是又是什么东西呢 ? 我曾通过 avaScript高级程序设计、你不知道的JavaScript、MDN文档以及教学视频。但似乎仍是半知半解,但我依然相信能通过这篇文章能…...

js如何实现继承

1&#xff0c;原型链继承 让构造函数的原型&#xff08;prototype&#xff09;是另一个类型的实例&#xff0c;那么该构造函数new出来的实例就具有该实例的属性&#xff1b;缺点&#xff0c;每一个对象实例共享所有的继承和方法&#xff0c;无法向父类传参 function father&a…...

【动态规划】01背包问题(手画图解)

经典dp动规问题&#xff0c;01背包问题关键在于遍历顺序与初始化这两步的推导。 目录 文章目录 一、01背包问题 二、确定dp数组及其下标含义 三、确定递推公式 四、确定初始化 五、确定遍历顺序 六、举例推导dp数组 总结 一、01背包问题 有n件物品&#xff0c;每件的价值…...

JS 闭包

JS 闭包 一、如何产生闭包&#xff1f; 当一个嵌套的内部&#xff08;子&#xff09;函数引用了嵌套的外部&#xff08;父&#xff09;函数的变量&#xff08;函数&#xff09;时&#xff0c;就产生了闭包&#xff1b; 二、闭包到底是什么&#xff1f; 理解一&#xff1a;闭…...

13薪|架构师[北京市 - 朝阳区]-20k-35k

"众推职聘”以交付结果为宗旨的全流程化招聘服务平台&#xff01;今日招聘信息↓【工作内容】1、负责公司千万级数据、用户的产品平台整体技术规划、系统架构设计及优化&#xff1b;2、对设计系统的最终性能和稳定性、扩展性负责&#xff1b;3、参与各种技术方案评审&…...

Windows磁盘克隆软件推荐

把原有硬盘克隆到另一个更大的硬盘&#xff0c;你只需要一个好用的硬盘克隆软件。如果你不知道硬盘克隆软件怎么选&#xff0c;你可以尝试下傲梅轻松备份&#xff0c;这个磁盘克隆软件适用于Windows 11、Windows 8、Windows 7、Windows XP、Windows Vista。以下是它的一些优点&…...

一文搞清商旅酒店数据治理——酒店数据问题分析及治理方案

问题背景 对于商旅用户而言&#xff0c;通过商旅系统进行酒店预订时&#xff0c;都希望酒店预订体验良好。并且商旅用户通过预订页面进行酒店预订时希望所见即所得&#xff08;也就是说&#xff0c;所看见的酒店相关信息就是用户最终预订的结果&#xff09;&#xff0c;包括能…...

TOOM品牌公关与舆情管理怎么做,品牌舆情监控工作制度是什么?

品牌舆情是指关于某一品牌的公共讨论、评价和看法。品牌舆情可以通过社交媒体、新闻媒体、博客、论坛等多种途径表现出来。监测品牌舆情是品牌公关和舆情管理的重要组成部分&#xff0c;可以帮助公司了解公众对品牌的看法&#xff0c;以及在遇到舆情危机时采取有效的应对措施。…...

SVG 语法入门教程(绘制矩形、圆形、椭圆、多边形等)

文章目录一、SVG 简介1.1 什么是 SVG &#xff1f;1.2 SVG 的历史和优势1.3 查看 SVG 文件1.4 创建SVG文件1.5 学习之前应具备的基础知识二、SVG 实例三、在 HTML 中嵌入 SVG3.1 使用 \<embed> 标签3.2 使用 \<object> 标签3.3 使用 \<iframe> 标签3.4 直接在…...

从0开始学python -23

Python3 条件控制 Python 条件语句是通过一条或多条语句的执行结果&#xff08;True 或者 False&#xff09;来决定执行的代码块。 可以通过下图来简单了解条件语句的执行过程: 代码执行过程&#xff1a; if 语句 Python中if语句的一般形式如下所示&#xff1a; if conditi…...

访问学者申请信标准模版

今天知识人网访问学者小编为大家分享一封标准的申请信模版&#xff0c;希望大家注意格式的书写&#xff1a;意向导师名称(如Dr. XXX)意向单位名称意向单位地址(如XXX号XX路XX市XX省)年月日开头(Dear XXX)&#xff0c;第一部分结合自己的研究兴趣向该单位的访学职位表示浓厚的兴…...

数字时代,VR云招聘“零见面”火了

招聘信息刷了又刷&#xff0c;上班谈、下班聊&#xff0c;终于到了可以预约时间来公司面试时&#xff0c;一句“我考虑下”或干脆没回音了&#xff0c;直接把HR打回原地。新年伊始&#xff0c;随着疫情的放开&#xff0c;金三银四的求职、招聘旺季仿佛也提前到来&#xff0c;但…...

Hudi(20):Hudi集成Flink之可以离线进行的操作

目录 0. 相关文章链接 1. 离线 Compaction 1.1. 设置参数 1.2. 原理 1.3. 使用方式 1.3.1. 执行命令 1.3.2. 参数配置 1.3.3. 案例演示 2. 离线 Clustering 2.1. 设置参数 2.2. 原理 2.3. 使用方式 2.3.1. 执行命令 2.3.2. 参数配置 2.3.3. 案例演示 0. 相关文章…...

【Spring-Security】详细使用用指南

Spring-Security使用详细指南简介简单入门认证登录校验流程原理解读认证流程登录校验&#xff1a;授权授权基本流程授权实现限制访问资源所需的权限简介 Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。 在安全框架中&#xff0c;我们最常提到的两个概…...

sd卡图片损坏怎么修复?

在旅途中&#xff0c;正常情况下用相机拍的照片都是存在相机的SD卡里的。等到我们需要时&#xff0c;在进行导出。但如果是出现意外导致sd卡图片遭到损坏&#xff0c;遇到这种情况&#xff0c;sd卡图片损坏怎么修复呢?这里小编将为大家分享一些图片修复技巧。操作很简单。相信…...

博物馆ar景点创意化交互体验的优点

一直以来&#xff0c;博物馆注重展览深度的拓展和藏品价值的挖掘&#xff0c;而缺少传播与推广。“博物馆的研究成果和藏品价值应该让公众有更多机会和渠道了解。 在博物馆中&#xff0c;为了保护古代文物不受到破坏而收藏到展柜中&#xff0c;参观者因受到展柜的距离限制无法近…...

一道经典面试题透彻理解面向对象编程思想和简单工厂模式

一道经典的面试题如下&#xff1a; 用一种面向对象编程语言实现一个计算器来满足整数的加减乘除运算。 大部分人的代码如下&#xff1a; 1.0版本 #include<iostream> using namespace std; #include<string> //1.0版本 int main() {int num1 0;int num2 0;st…...

Java软件开发需要掌握的技术分阶-2023版

简单的东西考虑全面&#xff0c;复杂的东西分成简单&#xff0c;枪在手&#xff0c;路在前&#xff0c;独闯难关&#xff0c;大破无往 第一阶段 计算机理论基础&#xff1a;操作系统、网络安全、数据结构与算法、硬件与软件基本常识 Java&#xff1a;各环境部署与程序运行原理…...

使用 React hooks 怎么实现类里面的所有生命周期?

在 React 16.8 之前&#xff0c;函数组件也称为无状态组件&#xff0c;因为函数组件也不能访问 react 生命周期&#xff0c;也没有自己的状态。react 自 16.8 开始&#xff0c;引入了 Hooks 概念&#xff0c;使得函数组件中也可以拥有自己的状态&#xff0c;并且可以模拟对应的…...

shell脚本简介+编写

1、常用Linux命令 2、Linux下脚本编写 3、windows下CMD常用命令 文章目录一、变量1、系统预定义变量2、自定义变量3、特殊变量&#xff1a;n、n、n、#、∗、*、∗、、$?二、运算符三、条件判断1、两个整数之间比较2、文件权限判断3、文件类型判断4、多条件判断四、流程控制1、…...

新项目如何提交代码到已有仓库,并创建新分支

1、步骤 2、创建远程仓库或者打开已有仓库页面 3、打开工程&#xff0c;创建本地git仓库 4、本地仓库与远程仓库关联 1、新建项目&#xff0c;此时的项目工程如下图所示 2、创建远程仓库或者打开已有仓库页面 此时在新建仓库或者已有仓库页面复制好仓库地址&#xff08;仓库…...

分享36个JS滚动,29个JS进度条,12个JS日历代码,总有一款适合您

分享36个JS滚动&#xff0c;29个JS进度条&#xff0c;12个JS日历代码&#xff0c;总有一款适合您 36个JS滚动29个JS进度条12个JS日历代码下载链接&#xff1a;https://pan.baidu.com/s/1zvSK9EAPd4dnMRl7V4Cc1g?pwdsu9i 提取码&#xff1a;su9i Python采集代码下载链接&a…...

ElasticSearch-学习笔记03【ElasticSearch集群】

Java后端-学习路线-笔记汇总表【黑马程序员】ElasticSearch-学习笔记01【ElasticSearch基本介绍】【day01】ElasticSearch-学习笔记02【ElasticSearch索引库维护】ElasticSearch-学习笔记03【ElasticSearch集群】ElasticSearch-学习笔记04【Java客户端操作索引库】【day02】Ela…...

MySQL面试题:保证MySQL隔离性的MVCC

文章目录一、MVCC是什么二、为什么需要MVCC三、InnoDB中的MVCC学习视频&#xff1a;后端面试问题系列参考文章&#xff1a;MVCC 机制的原理及实现一、MVCC是什么 MVCC机制&#xff1a;生成一个数据快照&#xff0c;并用这个快照来提供一定级别的一致性的读取&#xff0c;也称为…...

基于RNN文本生成 为男朋友写诗歌 附代码 详细教程

一、亮出效果 世界上美好的事物很多,当我们想要表达时,总是感觉文化底蕴不够。 看到大海时,心情舒畅,顿时感觉激情澎湃,想了很久,说了句:真大啊!看到鸟巢时,心情舒畅,顿时感觉激情澎湃,想了很久,说了句:真大啊!看到美女时,心情舒畅,顿时感觉激情澎湃,想了很久…...

2.5 Java基础 day06 数组 九层妖塔数组实现 字符串的拼接、比较等方法

数组 一维数组&#xff1a; String[] nums new String[3]; // //nums[0] 1; // for (Object num : nums) { // System.out.println(num); // } // String[] names {"zhangsan", "lisi", "wangwu"}; …...

中创教育带你了解培训机构投诉退费纠纷增多原因

教育培训机构纠纷近年来案件越来越多&#xff0c;主要聚焦于退费问题。交费容易&#xff0c;退费难上加难&#xff0c;为此&#xff0c; 提醒各位学员在选择学历提升、学科类或职业技能、职业资格类教育培训机构时要注意查看对方是否已经取得教育行政部门或人力社保部门颁发的…...

【CSDN竞赛26】题解

文章目录等差数列题目描述解题思路AC代码阿波罗的魔力宝石题目描述解题思路AC代码任务分配问题题目描述解题思路AC代码单词逆序题目描述解题思路AC代码CSDN编程竞赛报名地址&#xff1a;https://edu.csdn.net/contest/detail/40 等差数列 题目描述 一个等差数列是一个能表示成…...

Visual Transformer算法汇总总结

深度学习知识点总结 专栏链接: https://blog.csdn.net/qq_39707285/article/details/124005405 此专栏主要总结深度学习中的知识点&#xff0c;从各大数据集比赛开始&#xff0c;介绍历年冠军算法&#xff1b;同时总结深度学习中重要的知识点&#xff0c;包括损失函数、优化器…...

【2】深度学习之Pytorch——数据类型、索引张量、Numpy的互通性的概念、序列化张量

目录数据类型创建时指定数据类型转换数据类型索引张量numpy与pytorch的互通性序列化张量保存加载将张量转移到GPU上运行张量常见的API总结每文一语本期文章我们继续介绍张量的数据类型和一些基本的操作 数据类型 张量构造函数&#xff08;即tensor、ones、zeros之类的函数&am…...

Pandas读取excel合并单元格的正确姿势(openpyxl合并单元格拆分并填充内容)

问题介绍&#xff08;ffill填充存在的问题&#xff09; 在pandas读取excel经常会遇到合并单元格的问题。例如&#xff1a; 此时使用pandas读取到的内容为&#xff1a; 如果去百度&#xff0c;几乎所有人会说应该用如下代码&#xff1a; df[班级] df[班级].ffill()这样看起来…...

jsp员工管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 员工管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开 发&#xff0c;数据库为Mysql&#xff0c;使用ja…...

Shebang Line解释行

Shebang Line Shebang Line也被叫做 Hashbang Line&#xff0c;主要是一个由井号#和叹号!开头&#xff0c;并构成的字符序列&#xff0c;如#! xx/xx/x就叫做 Shebang Line。在开头字符之后&#xff0c;可以有一个或数个空白字符。这个字符串&#xff0c;通常只出现在 Script 文…...

片内和片间时间同步,时间戳

时间同步的概念给出几个应用场景&#xff1a;GPS授时车载系统 传感器与处理器之间的时间同步汽车上的各个ECU基本都是实时性非常强的控制器&#xff0c;在关联ECU之间或ECU内部各个软件模块之间通常需要在大致同步的时间节拍上运行&#xff0c;特别是在某些高速场景&#xff0c…...

通过 Microsoft Visual Studio 构建NotepadFree

通过 Microsoft Visual Studio 构建NotepadFree 前置要求: Microsoft Visual Studio 2019 (C/C Compiler, v142 toolset for win32, x64, arm64) 由一个 Visual Studio 解决方案构建的三个组件&#xff1a; notepad.exe: (包含 libSciLexer.lib) libScintilla.lib : 基于 Sc…...

给大家推荐一些非常实用的JavaScript、TypeScript一行代码,建议收藏

给大家推荐一些非常实用的JavaScript、TypeScript一行代码&#xff0c;建议收藏一、数组相关1、数值类型转数组2、校验数组是否为空3、将对象数组转为单个对象4、两个数组比较5、将字符串数组转为数字6、统计一个值在数组出现的次数二、日期处理1、两个日期相差月份2、两个日期…...

One-Hot 的使用

Sklearn 中 OneHotEncoder 的使用&#xff1a; import numpy as np from sklearn.preprocessing import OneHotEncoder samples np.array([ [1, 3, 2], [7, 5, 4], [1, 8, 6], [7, 3, 9] ]) # 独热编码 sparse 是否采用稀疏矩阵 ohe OneHotEncoder(sparseFalse, dtype&quo…...

Springboot整合AOP和注解,实现丰富的切面功能

简介 我们在文章《Spring AOP与AspectJ的对比及应用》介绍了AOP的使用&#xff0c;这篇文章讲解一下AOP与注解的整合&#xff0c;通过注解来使用AOP&#xff0c;会非常方便。为了简便&#xff0c;我们还是来实现一个计时的功能。 整合过程 首先创建一个注解&#xff1a; Re…...

【Flutter入门到进阶】跨平台相关

1 跨平台 1.1 跨平台概念 1.1.1 概念 跨平台概念是软件开发中一个重要的概念&#xff0c;即不依赖于操作系统&#xff0c;也不依赖硬件环境。一个操作系统下开发的应用&#xff0c;放到另一个操作系统下依然可以运行。相对而言如果某种计算机语言不用修改代码即可做到高度跨…...

阿里前端一面必会react面试题总结

React中怎么检验props&#xff1f;验证props的目的是什么&#xff1f; React为我们提供了PropTypes以供验证使用。当我们向Props传入的数据无效&#xff08;向Props传入的数据类型和验证的数据类型不符&#xff09;就会在控制台发出警告信息。它可以避免随着应用越来越复杂从而…...

各国政府成为量子投资“狂热”主力军!

&#xff08;图片来源&#xff1a;网络&#xff09;即使在资本寒冬&#xff0c;量子计算也吸引着投资者的极大兴趣。今年&#xff0c;尤其是美国以外的初创公司吸引了投资者的目光&#xff0c;获得了巨额投融资。2023年1月&#xff0c;总部位于澳大利亚悉尼的量子计算初创公司Q…...

Makefile 整理

1 简介 一个工程中的源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff0c;哪些文件需要先编译&#xff0c;哪些文件需要后编译&#xff0c;哪些文件需要重新编译&#xff0c;甚至于进行更复杂的功能…...

全局事务服务 GTS

目录 1.什么是全局事务服务GTS 2.为什么需要全局事务服务 3.产品架构 4.应用场景 SOA 和分布式事务 消息事务 通用分布式事务管理 共享出行 5.产品功能 跨数据库分布式事务 跨服务的分布式事务 消息队列分布式事务 混合的分布式事务 多种事务模式 6.产品优势 超强…...

【C#项目】图书管理系统-WinForm+MySQL

文章目录前言一、业务梳理与需求分析1.功能描述2.实现步骤3.功能逻辑图二、数据库设计1.实体-关系&#xff08;E-R图&#xff09;概念模型设计2.数据表设计三、WinForm界面交互设计四、通用类设计五、系统代码实现与分析总结前言 图书馆管理系统主要功能有普通用户&#xff08…...

STK + C# + Cesium联合编程(一):技术路线验证

概述本文演示了一个基于STK C# Cesium联合编程的应用实例。关于STK和Cesium编程网上在线资料丰富&#xff0c;本文主要解决了如果配置IIS服务以使得远程客户端能访问、初始化、以及执行服务器端STK的接口服务。请参考本作者之前关于STK、Cesium&#xff08;CZML&#xff09;、…...

2023-02-07 mysql创建user并配置权限

查询数据库版本 select version 查询所有ip和用户 select * from mysql.user; mysql> select * from mysql.user; mysql> select host,user from mysql.user; ---------------------------------------- | host | user …...

STM32CubeMX学习笔记(51)——读写内部Flash

一、简介 在STM32芯片内部有一个 FLASH 存储器&#xff0c;它主要用于存储代码&#xff0c;我们在电脑上编写好应用程序后&#xff0c;使用下载器把编译后的代码文件烧录到该内部 FLASH 中&#xff0c;由于 FLASH 存储器的内容在掉电后不会丢失&#xff0c;芯片重新上电复位后…...

互斥锁、读写锁、自旋锁

目录 为什么需要加锁&#xff1f; Demo1 分析原因 解决方法一&#xff1a;互斥锁(mutexlock) 解决方法二&#xff1a;自旋锁(spinlock) 自旋锁与互斥锁效率对比 Linux自旋锁与互斥锁的区别 Linux自旋锁与互斥锁的选用原则 C/CLinux服务器开发/后台架构师【零声教育】-学…...

Linux 项目使用命令整理

一. 从一个服务器到另一个服务器拷贝命令 拷贝单个文件命令&#xff1a; scp file usernameip:filepath 说明&#xff1a; username: 远程登录的用户名&#xff0c; 拷贝文件夹命令如下(多加上一个-r 参数即可)&#xff1a; scp -r file usernameip:filepath 二. 常用命令积…...

@Aspect注解背后的奥秘--下

Aspect注解背后的奥秘--下前言手动化进行到自动化靠的是什么自动代理创建器如何搜寻并对增强器集合进行过滤1.寻找所有可用的候选advisor1.1 isEligibleBean两种分支情况2.过滤候选增强器3.扩展增强器4.对增强器进行排序搜寻所有切面类并完成解析转换过程创建代理对象拦截器链执…...

Dlib+Opencv进行人脸识别检测

本案例主要用于对图片中的人脸进行检测&#xff0c;并用矩形进行框出import dlibimport cv2# 需要被识别的图片img_path "D:\\xxx.jpg"imgcv2.imread(img_path)#转换为灰阶图片graycv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 正向人脸检测器detector dlib.get_frontal…...

汽车行业进入「换帅+换将」周期,2023年关键词:变

「换帅换将」&#xff0c;成为汽车制造商进入下一个行业十年发展周期的新常态&#xff0c;同时也是解决企业现阶段难题&#xff08;包括新能源转型、智能化技术升级、市场销量疲软等等&#xff09;的不二之选。 1月30日&#xff0c;小鹏汽车宣布&#xff0c;原长城汽车总经理王…...

Android---PhotoView

目录 准备工作 1、双击放大和缩小 2、惯性滑动 3、双指放大和缩小 4、完整DEMO 准备工作 自定义PhotoView 自定义 PhotoView 继承(extends)自 View。并在最中间显示后面操作的图片。绘制图片可以重写 onDraw()方法&#xff0c;并在里面通过Canvas.drawBitmap()来要绘制图片…...

NetSuite CSV更新子列表的关键

今朝谈一个Know How问题。 假如有个Sales Order&#xff0c;其中有一行&#xff0c;SKU001&#xff0c; 数量为1000个。 希望能够在这个SO上&#xff0c;再增加4行同样的Item&#xff0c;用于不同的发运日期&#xff0c;每行5000个。 我们准备了如下的CSV文件&#xff1a; CS…...

3GPP release#17和一些新功能

截止2021年9月&#xff0c; 3GPP协议最新版本为Release 17。 该版本于2021年6月完成&#xff0c;其中包括了5G和LTE网络的新功能和更新。在Release 17中&#xff0c;重点关注了5G的进一步发展&#xff0c;包括更高的数据速率、更低的时延、更广泛的应用场景等。此外&#xff0c…...

大数据分析工具Power BI(十五):制作地图分析图表

制作地图分析图表 一、地图 地图的功能比较单一,适用于只创建一个地图来展示不同地理位置的数据情况。需求:使用地图展示"2022年点播订单表"不同城市的总营收金额。 新建页面并命名为地图,在可视化区域点击"地图",然后按照如下配置:...

Object类讲解

目录 和equals的对比 equals方法 String类的equals的源码分析 Object类的equals的源码分析 Integer类的equals的源码分析 equals例题 第一题 第二题 hashCode方法 toString方法 基本介绍 finalize方法 和equals的对比 1.&#xff1a;既可以判断基本类型&#xff0c;又…...

Flink 中的处理函数-第七章

借鉴《尚硅谷Flink1.13版本笔记.pdf》中第七章 Flink 中的处理函数 之前所介绍的流处理 API&#xff0c;无论是基本的转换、聚合&#xff0c;还是更为复杂的窗口操作&#xff0c;都是基于 DataStream 进行转换&#xff1b;所以可以统称为 DataStream API&#xff0c;这是 Flin…...

UnityHDRPLog_Unity_HDRP 默认场景资源解析

Unity Version2019.4.18f1HDRP Version7.5.2里面有些资源我暂时不知道是做什么的&#xff0c;后期补充喽就这样喽 Hierachy 主摄像机_MainCamera 官方文档 https://docs.unity3d.com/cn/Packages/com.unity.render-pipelines.high-definition10.4/manual/HDRP-Camera.htmlGe…...

ssm入门

文章目录1.介绍ssm2.Spring篇基础内容&#x1fa85;什么是IOC&#xff08;控制反转&#xff09;Spring和IOC之间的关系IOC容器的作用以及内部存放IoC入门案例&#x1f4ec;DI&#xff08;Dependency Injection&#xff09;依赖注入依赖注入的概念IOC容器中哪些bean之间要建立依…...

代码随想录刷题-字符串-剑指 Offer 05. 替换空格

文章目录剑指 Offer 05. 替换空格习题新建字符串保存结果replace 函数双指针剑指 Offer 05. 替换空格 本节对应代码随想录中&#xff1a;代码随想录&#xff0c;讲解视频&#xff1a;暂无 习题 题目链接&#xff1a;剑指 Offer 05. 替换空格 - 力扣&#xff08;LeetCode&…...

MVCC + next-key Lock(行锁 + 间隙锁)解决mysql幻读

文章目录 行级锁临键锁(Next-Key Locks)MVCC能解决了幻读问题?RR隔离级别+无索引RR隔离级别+普通索引RR隔离级别+唯一索引间隙锁的配置查看是否开启间隙锁补充表锁和行锁已经保证了事务的隔离性,确保数据一致,那么为什么还要使用意向锁呢?总结行级锁 对于行级锁,主要分…...

操作系统宏观

文章目录1.概览1.1 [6.828]目标1.2 操作系统的目的是什么1.3 操作系统设计的方法1.4 组织结构1.5 操作系统提供的一些服务类型1.6 一个操作系统抽象起来是什么样的1.7 为什么操作系统设计与实现很难或者很有趣1.概览 1.1 [6.828]目标 了解操作系统的设计与实现手写一个小型操…...

kkfileview阿里云安全扫描:威胁类型敏感信息回显 (Sensitive Information Response)

在阿里云部署的kkfileview&#xff0c;阿里云安全性扫描有漏洞 网络流量内容GET /getCorsFile?urlPathfile:///etc/passwd HTTP/1.1 Host: XXX.XXX.XXXX.XXX:80XX User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.…...

linux系统安装JDK(我的系统是ubunut20.04)

一、下载jdk包 # 下载解压wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gztar -zxvf jdk-17_linux-x64_bin.tar.gz # 将jdk-17改名为javamv jdk-17 java# 拷贝到/usr/local目录下sudo cp -rap java /usr/local 二、添加环境变量 # 进入profile文…...

BGP 十一条选路原则与BGP路由传递的注意事项介绍

十一条选路规则 1.优选Preferred-Value 属性值最大的路由。 2.优选Local_Preference 属性值最大的路由。 3.本地始发的BGP路由优于从其他对等体学习到的路由&#xff0c;本地始发的路由优先级&#xff1a;优选手动聚合>自动聚合>network>import>从对等体学到的。…...

Android10.0 系统Framework发送通知流程分析

1.前言 在android 10.0的系统rom定制化开发中,在systemui中一个重要的内容就是系统通知的展示,在状态栏展示系统发送通知的图标,而在系统下拉通知栏中展示接收到的系统发送过来的通知,所以说对系统framework中发送通知的流程分析很重要,接下来就来分析下系统通知从framew…...

数据库:关系数据库标准语言SQL(一)

终于开始实战了&#xff0c;首先我这里是下载的SQL server&#xff0c;因为oracle和SQLserver的部分语法不同&#xff0c;所以本文出现的代码可能在oracle中报错 一、了解SQL语言的特色 SQL的特点 综合统一&#xff1a;SQL语言集数据定义语言DDL、数据操纵语言DML、数据控制语…...

【消息队列】为什么使用消息队列,以及Kafka基本架构

为什么使用消息队列 一般学习一个技术 我们都要先理清楚为什么需要消息队列 而消息队列的出现又解决了那些工程应用中的问题。 消息队列作为中间件中比较常用的。而通信问题的出现衍生出消息队列&#xff0c;解决了系统收发消息。队列 在数据结构中 是一种先进先出的特殊结构。…...

Adobe Photoshop 2018(PS2018)安装包下载及安装教程

[软件名称]: Adobe Photoshop 2018 [软件大小]:1.56 GB [安装环境]: Win11/Win 10/Win 7 [软件安装包下载]:https://pan.quark.cn/s/afa74eca3833 “一般而言,ps软件通常指的是Adobe Photoshop,简称“PS”,是由Adobe Systems开发和发行的图像处理软件。Photoshop主要处理以像素…...

CQOI2023游记

前情提要&#xff1a; 2021 年进了基科班CSP2021&#xff0c; 思考了半小时想到了一个绝妙的A题做法&#xff0c;半小时rush完&#xff0c;半小时对拍。然后觉得 B 是个傻逼题&#xff0c;连写三种 dp 全假&#xff0c;最后只剩了不到一个小时&#xff0c;边抓头发边rush暴力&…...

第4章 封装组件中级篇

1.导航菜单 2.进度条(progress) --components/progress--src/index.vue--index.tssrc/index.vue <template><el-progress :percentage"p" v-bind"$attrs"></el-progress> </template><script langts setup> import { onM…...

Leetcod169—多数元素

文章目录题目思路一思路二题目 多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a…...

163种中草药(中药材)数据集说明(含下载地址)

163种中草药(中药材)数据集说明(含下载地址) 目录 163种中草药(中药材)数据集说明(含下载地址) 1. Chinese-Medicine-163数据集说明 2. Chinese-Medicine-163数据集下载 3. 深度学习实现中草药(中药材)识别 本文将分享一个大规模的中草药(中药材)图片数据集(Chinese-Medic…...

shell系列1:统计 /proc 目类下 Linux 进程相关数量信息

1、关于ps aux的STAT状态解释 不管在面试中还是平时排查进程相关问题中总会使用到ps这个命令&#xff0c;会显示很多进程相关信息&#xff0c;其中STAT栏的在问题排查中是比较重要的&#xff0c;面试中也经常遇到【反正我遇到过几次&#xff0c;强行解释&#xff0c;哈哈】&am…...

abaqus子程序vumat安装使用

一、Win11配置ABAQUS2022VS2022oneAPI2023编译环境 VUMAT是要用到Fortran的&#xff0c;否则添加.for文件会报错 ifort 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。出现这个问题时可以在command中输入命令查看是否有fortran编译器 abaqus infosystem可…...

进程和线程之间的区别和联系

1. 什么是进程 我们说, 躺着的一个.exe文件就是一个未被执行的程序, 是一个可执行文件, 当它被执行的时候就成了一个进程. 进程是正在运行的程序的实例, 同时进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元&#xff0c;在传…...

C++:explicit关键字

C中的explicit关键字只能用于修饰只有一个参数的类构造函数&#xff0c;它的作用是表明该构造函数是显示的&#xff0c;而非隐式的&#xff0c;跟它相对应的另一个关键字是implicit&#xff0c;意思是隐藏的&#xff0c;类构造函数默认情况下即声明为implicit(隐式)。那么显示声…...

【FPGA实验5】两位比较器

用case语句写出比较电路&#xff1a; 推出一个2位较大数判断电路的真值表 用case语句编写判断电路 1、给出程序 2、给出仿真程序 3、给出RTL图 4、给出仿真结果 目录1、真值表2、比较电路程序3、RTL图4、测试程序5、仿真结果6、完成本设计时的错误总结&#xff08;1&#xff09…...

广州大学第十七届ACM大学生程序设计竞赛(同步赛)

A-萤火虫 思路&#xff1a; 我们只用操作1&#xff0c;是不是能贪心都前面n-k个数都是0。如果我们对于1<i<n&#xff0c;归为k个集合&#xff0c;即s[j]s[i%k],我们每操作一次操作1&#xff0c;s[0]~s[k-1]都会一起加1或者减1&#xff0c;如果我们最后能减到都同时0&am…...

LeetCode 每日一题 2023/3/27-2023/4/2

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录3/27 1638. 统计只差一个字符的子串数目3/28 1092. 最短公共超序列3/29 1641. 统计字典序元音字符串的数目3/30 1637. 两点之间不包含任何点的最宽垂直区域3/31 2367. 算术三…...

ChatGPT与文心一言对比思考

ChatGPT与文心一言对比思考1. 目前在国内比较广泛被认知的ai模型有什么 我目前通过各种渠道注册到的账号有3个,按照了解到然后注册的顺序分别是 ChatGPTnewbing文心一言 3种ai的注册渠道 ChatGPT注册: 科学上网注册寻找外网手机号发送短信 newbing注册: 科学上网注册微软账…...

机器学习12(Scikit-Learn)

目录简介Scikit-Learn概念LinearRegression实用函数超参数参数求解方法常用功能数据集读取标准化与归一化标准化归一化逻辑回归评估器机器学习流简介 前面我们通过 算法理论手动实现 的方式&#xff0c;深入了解了机器学习的基本原理这种方式不仅深化了对基础原理的理解&#…...

小驰私房菜_09_应用集成Raw域算法流程

[小驰私房菜] [算法集成] [raw域算法] 本篇文章分下面几点展开: 1)什么是raw域算法? 2)为什么需要采用raw域算法,为什么需要在应用上集成? 3)应用上如何集成raw域算法? 一、什么是raw域算法 算法处理的是camera的流数据,camera流比较常见的有yuv流,还有从sensor直…...

【Redis从入门到进阶】第 7 讲:基于 Redis 实现分布式锁

本文已收录于专栏&#x1f345;《Redis从入门到进阶》&#x1f345;专栏前言 本专栏开启&#xff0c;目的在于帮助大家更好的掌握学习Redis&#xff0c;同时也是为了记录我自己学习Redis的过程&#xff0c;将会从基础的数据类型开始记录&#xff0c;直到一些更多的应用&#xf…...

buu 异性相吸 yxx

异性相吸 题目描述&#xff1a; 题目分析&#xff08;两种解法&#xff09;&#xff1a; 第一种&#xff1a; 文件中并没有过多提示&#xff0c;只有异性相吸这一提示&#xff0c;那么便想到了异或 异或&#xff1a; 逻辑算符异或&#xff08;exclusive or&#xff09;是对两…...

PVE下安装Centos8系统

1.从阿里云镜像下载 下载地址&#xff1a;https://mirrors.aliyun.com/centos/8/isos/x86_64/CentOS-8.5.2111-x86_64-boot.iso 2.上传镜像文件到PVE虚拟机【后面安装centos需要用到】 3.在PVE中创建虚拟机 4.设置虚拟机名称 5.选择镜像文件 6.设置虚拟机系统 7.设置虚拟机硬…...

七、加载数据集

①准备数据集 还是拿那个糖尿病数据集(diabetes.csv)为例&#xff0c;数据集免费下载&#xff0c;仅供学习使用。 下载完解压&#xff0c;将解压后得到的压缩包放到指定的路径下&#xff0c;我这边放到了我的jupyter里面了 数据集是一个以逗号分割的数据集&#xff0c;有九个…...

Zephyr out of tree board

文章目录前言自定义 board 目录目录结构添加目录至构建系统前言 在Zephyr中使用west工具进行编译时&#xff0c;会从zephyr/boards目录下寻找用户输入的board&#xff0c;查找成功后再继续进行后续工作&#xff0c;但是在一些情况下&#xff0c;现存的board中存在的配置并不能…...

golang应用程序使用prometheus监控

Prometheus 是一个开源的监控和警报工具包&#xff0c;用于收集和处理应用程序和系统的指标数据。Go 语言&#xff08;Golang&#xff09;是一种快速、简洁和并发友好的编程语言&#xff0c;非常适合开发高性能的后端服务。为了使用 Prometheus 监控 Go 语言编写的应用程序&…...

华为OD机试用Python实现 -【打折买水果】

最近更新的博客 华为 od 2023 | 什么是华为 od,od 薪资待遇,od 机试题清单华为 OD 机试真题大全,用 Python 解华为机试题 | 机试宝典【华为 OD 机试】全流程解析+经验分享,题型分享,防作弊指南华为 od 机试,独家整理 已参加机试人员的实战技巧本篇题目:打折买水果 题目 …...

D. AquaMoon and Chess(组合数学)

Problem - D - Codeforces Cirno给了AquaMoon一个大小为1 n的棋盘&#xff0c;它的单元格从左到右用从1到n的整数编号。在开始时&#xff0c;一些单元格最多被一个兵占据&#xff0c;而其他单元格则是空的。在每个操作中&#xff0c;AquaMoon可以选择一个带有卒的单元格i&…...

3.30--Redis之常用数据结构--跳表之总结篇(总结篇)------加油呀

跳表 跳表是在链表基础上改进过来的&#xff0c;实现了一种「多层」的有序链表&#xff0c;这样的好处是能快读定位数据 优势是能支持平均 O(logN) 复杂度的节点查找。 只有 Zset 对象的底层实现用到了跳表,zset 结构体里有两个数据结构&#xff1a;一个是跳表&#xff0c;一个…...

【进阶C语言】各大常用库函数的模拟实现

前言 今天恒川带给大家的是平常应用的库函数&#xff0c;恒川来给大家都模拟实现一下&#xff0c;希望对大家有帮助&#xff01;&#xff01; 各大常用库函数的模拟实现1. 模拟实现strlen2. 模拟实现strcpy3. 模拟实现strcat4. 模拟实现strstr5. 模拟实现strcmp6. 模拟实现memc…...

LeetCode笔记:Weekly Contest 338

LeetCode笔记&#xff1a;Weekly Contest 338 1. 题目一 1. 解题思路2. 代码实现 2. 题目二 1. 解题思路2. 代码实现 3. 题目三 1. 解题思路2. 代码实现 4. 题目四 比赛链接&#xff1a;https://leetcode.com/contest/weekly-contest-338/ 1. 题目一 给出题目一的试题链接如…...

ZooKeeper 集群部署

目录 1、下载apache-zookeeper包 2、修改配置 3、添加服务器id 4、启动ZooKeeper集群 5、客户端连接 6、添加新节点&#xff1a; 部署ZooKeeper集群之前请先部署jdk 使用hadoop用户部署ZooKeeper集群 1、下载apache-zookeeper包 部署机器&#xff1a; 192.168.20.11 no…...

Uni-Mol+:Highly Accurate Quantum Chemical PropertyPrediction with Uni-Mol+

Uni-Mol&#xff1a;高精度的量子化学性质预测 Uni-Mol 预印论文&#xff1a;https://github.com/dptech-corp/Uni-Mol/blob/main/unimol_plus/paper/unimol_plus_preprint.pdf Uni-Mol 代码&#xff1a;Uni-Mol/README.md at main dptech-corp/Uni-Mol GitHub 基础概念&…...

★LDO相关

1.型号 TPS79501 TPS79301 2.PSRR值&#xff0c;频率 TPS795_50dB&#xff0c;10kHz TPS793_70dB&#xff0c;10kHz 电源抑制比&#xff1a;供电电压纹波对输出电压影响&#xff0c;值越高越好&#xff08;某个频段的AC从输入到输出的衰减程度&#xff0c;衰减越高&#x…...

Python常用语句学习

人生苦短&#xff0c;我用Python。 ——吉多范罗苏姆 文章目录前言一、判断语句&#xff08;一&#xff09;if语句1. 作用2. 构成3. 语法4. 样例5.说明&#xff08;二&#xff09;if嵌套二、循环语句&#xff08;一&#xff09;while循环1. 作用2. 语法3. 样例4. 说明&#xff…...

【面试】MySQL面试题

文章目录数据库基础知识为什么要使用数据库什么是SQL&#xff1f;什么是MySQL?MySql, Oracle&#xff0c;Sql Service的区别数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式&#xff1f;分别有什么区别&#xff1f;数据库经常使用的函数数据类…...

Android ART虚拟机 Space类体系

前言 在ART虚拟机实现中&#xff0c;内存分配和释放的算法是封装在不同的Space中来完成的。而外部使用者只能借助Space及派生类的接口来完成内存的分配与释放。通过阅读这些Space的实现&#xff0c;可以看出ART虚拟机的一个重要的特点就是大量使用映射内存&#xff0c;相较于D…...

针对慢查询如何进行sql优化?

慢查询 SQL 是指执行时间超过一定阈值的 SQL 查询语句&#xff0c;一旦出现慢查询 SQL&#xff0c;会导致系统性能下降&#xff0c;甚至会造成系统崩溃。因此&#xff0c;对慢查询 SQL 进行优化是提高数据库性能的关键之一。下面是对慢查询 SQL 进行优化的一些步骤和方法。 1.找…...

2、Linux下编译并搭建AzerothCore服务端

目录一、VM虚拟机1 - 初始化虚拟机2 - 安装ubuntu-20.04-desktop-amd643 - 系统设置4 - root用户设置5 - 查看ip地址二、编码源码1 - Ubuntu with MySQL 8.x2 - 拉取源码3 - CMake编译三、提取客户端资源1 - 共享目录设置2 - 提取客户端数据3 - 配置修改四、启动服务端1 - 刷入…...

Nginx到底能干嘛?!Nginx是做什么用的?通俗易懂,前端必看!

一. Nginx介绍 1. Nginx到底是什么&#xff0c;干什么用&#xff1f; Nginx是一个 轻量级/高性能的反向代理Web服务器&#xff0c;它是由C语言写的&#xff0c;所以速度非常快、性能非常优秀。它的主要功能就是反向代理、负载均衡、配置SSL证书、防盗链、解决跨域问题、缓存、限…...

八股(第一天)

java有哪几种方式创建线程&#xff1f; 五种&#xff0c;分别是 1.使用Thread创建 2.使用Runnable接口实现run方法再使用Thread开启线程 3.使用Callable接口实现call方法将它放入FutureTask中实现然后开启线程 4.因为Runnable只有一个方法声明&#xff0c;所以它为函数式接…...

C++笔记——第九篇 C++的IO流 文件操作搞不懂?来这里看看吧!

目录 一、 C语言的输入与输出 二、 流是什么 三、CIO流 1 C标准IO流 2 C文件IO流 3 stringstream的简单介绍 1. 将数值类型数据格式化为字符串 2. 字符串拼接 一、 C语言的输入与输出 scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据&#xff0c;并将值存放在…...

STM32单片机入门学习笔记——MPU6050

笔记整理自B站UP主江科大自化协教程《[10-2] MPU6050简介_哔哩哔哩_bilibili》&#xff0c;所用单片机也为教程推荐单片机。 MPU6050简介 如果芯片里再集成一个3轴的磁场传感器&#xff0c;测量XYZ轴的磁场强度&#xff0c;那就叫做9轴姿态传感器&#xff0c;如果再集成一个气…...

为什么基础矩阵F的自由度是7

一、基础矩阵的定义&#xff1f; 基础矩阵是对极几何中&#xff0c;将左图中的一个点的像素坐标&#xff0c;映射到右图中对应极线坐标的矩阵。 二、为什么基础矩阵的自由度是7&#xff1f; 首先&#xff0c;对极几何中&#xff0c;基础矩阵的维度是33&#xff0c;也就是有9个元…...

Java连接SqlServer错误

Java连接SqlServer错误 &#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目…...

C/C++开发,linux下OpenCV+gcc+cmake编译环境搭建

目录 一、源码下载 二、源码编译 2.1 OpenCV源码下载 2.2 cmake安装(非必要) 2.3 opencv安装依赖及支持模块查看 2.4 安装pkgconfig包 2.5 安装opencv依赖包 2.6 真正安装opencv包开始 2.7 opencv环境路径配置 三、案例测试 3.1 案例设计 3.2 编译测试 一、源码下载 opencv可…...

NestJS入门及实战(一)NestJS入门、RESTful API

NestJS是什么 Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架 JS 届的 Spring 框架支持 TypeScript 语言构建高效可伸缩装饰器风格模块加载采用依赖注入 IOC 方式 &#xff08;Spring 与 AngularJS&#xff09;配套功能齐备&#xff08;鉴权、…...

【分享】如何写出整洁的代码?

文章目录前言1.为什么要保持代码整洁?1.1 所以从一开始就要保持整洁1.2 如何写出整洁的代码?2.命名3.类3.1单一职责3.2 开闭原则3.3 内聚4.函数4.1 只做一件事4.2 函数命名4.3 参数4.4 返回值4.5 怎样写出这样的函数?4.6 代码质量扫描工具5.测试5.1 TDD5.2 FIRST原则5.3 测试…...

vue中Number方法将字符串转换为数字

写法&#xff1a;Number(变量名)。例如&#xff1a; var a"100"; //字符串 alert(Number(a)100); //结果是200 具体情况&#xff1a; 1、如果字符串前面带有0或者其他符号&#xff0c;JS自动忽略 例如&#xff1a; var a"000100"; alert(Number(a…...