LINUX 精通 1——2.1.1 网络io与io多路复用select/poll/epoll

LINUX 精通 1

day12 20240509

算法刷题: 2道高精度 耗时 107min

课程补20240430 耗时:99 min

day 13 20240512 耗时:200min

课程链接地址

前言

  1. 工作5-10年 够用

  2. 费曼:不要直接抄,自己写;不要一个截图

    总之自己总结一个心得,以后回来还能更新不断

    实事求是骗不了自己的心吧,这个技术还是比较纯粹,让我找回了从前学习的感觉, 比科研这个乌烟瘴气的东西好多了

    与阿里云合作了,>60篇,有专家博主的认证

    即使以后工作还能交流

  3. 学完了:

    简历面试前给老师看,可以了投

    问老师能拿到多少薪资,作为参考

    offer选择

零声linux c/c++如何学

  1. 切记:不要2倍速看, 每天看一点点,养成习惯,慢就是快

    😆 和拉小提琴的老师说的话一摸一样,这才是真正学一样东西的规律,而不是像现在科研环境,都被赶鸭子上轿,被折磨的非要搞出划时代的东西,搞笑呢,那不怪有造假 每天一点点不会磨灭对一件事情的热情,反而越来越想要做,会上瘾尤其是一旦有正向反馈以后 就像看历史讲座一样,我喜欢历史

  2. 课程能不能写到简历

    1. 项目做到上线

    2. 如何写?

      1. 名字自行命名 不要写课程里的一模一样的

        比如:图床 (大量的cv存图)用到这个

        用课上的技术,解决现实的具体问题

        but我做轨迹预测貌似没啥关系, 总之就可以搞一个变种,在课程项目的外面包一层壳, 问gpt

        1. 存储车辆轨迹数据:将每辆车的历史轨迹数据以键值对的形式存储在KV存储中。每个键可以是车辆ID或其他唯一标识符,而值则是该车辆的历史轨迹数据。
        2. 查询相关上下文信息:除了轨迹数据外,还可以将与轨迹预测有关的上下文信息存储在KV存储中。这些上下文信息可以包括道路状况、天气情况、交通流量等。通过相应的键来查询特定上下文信息。
        3. 轨迹预测模型训练:使用存储在KV存储中的历史轨迹数据和相关上下文信息作为训练集,构建轨迹预测模型。模型可以根据当前车辆状态和环境条件,预测出未来的行驶路径。
        4. 实时轨迹预测:当有新的实时输入(例如传感器数据)时,将其与相关的上下文信息一起查询,并输入到训练好的模型中进行实时预测。根据预测结果,可以调整车辆的行驶策略和决策。
        5. 数据更新和删除:当有新的轨迹数据生成或某些数据过期时,需要及时将其更新或从KV存储中删除,以保持存储数据的准确性和实时性。
  3. 简历

    1. 最多3个,2-3个项目够了

    2. 语言,语法本身不是重点,重点是用技术解决具体问题,什么问题用什么合适的语言

      为了应付面试可以看八股C++,从项目出发:比如项目功能里用了什么vector什么特性,虚表怎么继承,说自己理解,别全背,是用八股来提取自己项目的重点

    3. 参照大纲写你熟练 掌握 了解技术点

    4. 然后要在业务项目里 细节写你的那些功能用到了这些技术点。光写一堆技术点,你没实现过没用

      没技术点只有业务场景,就是产品经理

      只有技术没业务,没法解决什么问题

  4. 怎么看 好多啊!

    第一遍看好多好多,多看几遍+笔记整理,就这些东西+提取细节自己薄弱的地方,跟以前上学一样

    1. 第一章:先不用看

      什么时候看:因为后面工程里覆盖了这里的知识点

      因为有的知识点在压根无code,or不够,看了也没用,比如设计模式,git使用,后面都用到了,再回头看

      理论 老师喜欢用source insight, gdb调比较笨重,vscode可以。 书上不是用于开发,是原理,强调逻辑定义等。 开发是工业界,落地

      1. 红黑树:能用在哪里,三种? 作业
        1. 数据库系统:许多数据库系统使用红黑树来实现索引结构,如B+树。红黑树提供了快速的插入、删除和查找操作,并保持数据有序。
        2. C++ STL中的map和set容器:STL(标准模板库)中的map和set容器通常基于红黑树实现。这些容器支持高效的查找操作,并保持元素按照键值有序。
        3. 路由表:网络路由器通常使用红黑树来存储路由表信息。通过使用红黑树,可以高效地进行IP地址匹配以确定数据包的最佳转发路径。
        4. 计算机图形学:在计算机图形学中,红黑树可用于空间分区(如二维范围查询)和光线追踪等算法中。
        5. 任务调度器:操作系统中的任务调度器可以使用红黑树来管理任务队列,以便高效地选择下一个要执行的任务。

      开发 2-5

    2. 第二章:网络开发

      要做笔记(犯困走神的时候), 就是写技术博客,以后再次总结

      费曼plan,重在参与嘛,很不错,督促自己,就想去学呀

      细节+模棱两可的问题问老师, 发截图给老师

      以后9.1 kv存储 自行命名写简历

    3. 第三章:基础组件

      可以用api调,轮子:线程池,日志等,类似英语的基础语法,必须掌握

      看完混沌,不知道怎么用,只是自己可以实现

      1. 对于在职 拆解公司的项目:反推出哪些模块用了这些功能,面试可以说出来,即使轮子不需要你写
      2. 对于在校:9.5 魔兽世界, 连的不是魔兽server 是零声的server
    4. 第四章 中间件

      开起来就是一个线程,不是api 用网络和它交互

      每种掌握一个就ok了

      看9.2 图床 存我喜欢的东西——小鸟各种小鸟,还有风景,还有有意思的图

    5. 第五章:framework开源框架

      自选3-4个 行业相关的,其他选看

      5.1游戏的 skynet

      9.3 即时通讯 是一个万金油

      使用场景有什么:和其他人聊天, 比如boss聊天;游戏聊天区

      可以自己开发一个上线,**加自己的巧思——树洞,心灵树洞?**随机匹配陌生人聊天? 无心理负担聊天

      运维——部署、测试、性能分析 6-8

    6. 第六章 云原生

    7. 第七章 性能分析

    8. **第八章 分布式架构 **

      多台

第1章 2.1.1 网络io与io多路复用select/poll/epoll

这个在入门课里讲过啊,but我云里雾里的第8节

有的地方可以快进,大部分开1.25正好,1.5也行稍微有点快 脑子来不及反应

引入

网络应用,底层都是网络

  1. 使用微信,发送文字,视频,如何通过网络IO实现
  2. 使用抖音,视频资源如何到达手机的app上
  3. 使用github,gitlab.0voice.com上,git clone为什么能到本地
  4. 为什么共享单车扫了以后就能开锁
  5. 为什么能通过手机远程操作你家的空调

有意思啊,能解决实际需求

具体

client通过网络连接server,类似水管,但是具体内容不限的

网络是连接client和server的fd(file descriptor) :在计算机编程中,socketfd是指套接字描述符(socket file descriptor)。套接字描述符是一个整数值,用于标识操作系统内核中打开的套接字(socket)对象。它可以用来进行对网络通信的读写操作以及其他相关的操作。通过使用套接字描述符,程序可以与网络上的其他主机进行通信。

fd对应的userinfo可以改

在/share下
mkdir 20404	
cd 20404	
mkdir 2.1.1-network-io
touch networkio.c

或者直接在本地ftp里操作

开发环境搭建:
  1. 编写代码:代码编辑器(记事本也行),老师用source insight太卡了,我喜欢用vscode而且里面可以直接命令行调试,不用再额外开一个xshell
  2. 编译:linux下gcc/g++
  3. 运行:Ubuntu
  4. 终端工具ssh:xshell,putty,crt,mobaxterm,vscode里
  5. linux文件与windows映射,samba在装linux时候自带的,回去自己看入门课程的第一节笔记
编写:
配置
  1. linux在应用层里网络通信的实现,不论什么语言实现,底层都是socket无其他方法

  2. 老师敲代码为什么有提示:因为加载了内核源码 01:27:29处

    1. soureinsight里新建project然后synchronize files

    2. vscode成功啦啦啦啦啦

      这个include不要自己找,代码里放在问题上,点快速修复可以看到含头文件的路径复制过去

      ctrl+shift+p——>c++配置json
      "includePath": [
          "${workspaceFolder}/**",
          "/usr/include/**"
      ],
      

      VSCODE中C/C++ 自动提示、补全 配置_vscode c语言代码提示-CSDN博客

      【c++代码提示】VScode c++ 代码自动补全/智能提示设置_vscode c++ 提示-CSDN博客

code
  1. // 创建socket
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    
  2. // 绑定本地端口
    struct sockaddr_in servaddr;
    servaddr.sin_family = AF_INET; 
    servaddr.sin_addr.s.addr = htons(INADDR_ANY); // 默认0.0.0.0 绑本地地址;htons转成网络字节序
    

    本地网卡

    ifconfig
    
    ens33     Link encap:Ethernet  HWaddr 00:0c:29:31:b3:43  
              inet addr:192.168.243.128  Bcast:192.168.243.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe31:b343/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:353041 errors:0 dropped:0 overruns:0 frame:0
              TX packets:223361 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:238434200 (238.4 MB)  TX bytes:81289772 (81.2 MB)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:298113 errors:0 dropped:0 overruns:0 frame:0
              TX packets:298113 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1 
              RX bytes:57946571 (57.9 MB)  TX bytes:57946571 (57.9 MB)
    

    一张网卡ens33,没有二段网桥接,直接NAT映射的

    lo是回环地址

    0.0.0.0表示这两个任何一个网卡都可以使用

  3. 解释

    tcp server是酒店提供服务

    ​ 门口迎宾的人:socketfd,client跑来先碰到迎宾,安排和client绑定地址 端口,绑定;socketfd干嘛?迎宾然后正式上岗,listen监听(client发给server的data)

    ​ 点菜的人

  4. 编译

    gcc -o networkio networkio.c
    然后想找头文件
    man 函数名看在哪
    
    ./networkio
    

    绑——listen——连接

    1. netstat非常常用,看服务有没有起来:比如redis,sql等等起来没

      netstat -anop用于列出当前所有网络连接的详细信息。-a 选项表示显示所有连接和监听端口,-n 选项表示以数字形式显示地址和端口号,而不进行域名解析。-o 选项可以显示与每个连接关联的进程 ID(PID),最后的 p 选项用于显示与 PID 相关的进程名称。

      grep 2000则用于在结果中筛选出包含 “2000” 的行。 2000前面设的端口sin_port 2000(Global Regular Expression Print”,它是一个强大的文本搜索工具)

      此时0.0.0.0:2000已经起来了,说明socketfd正式工作了

    2. 端口绑完不能再,此时还想:./networkio不行,因为端口2000已经bind被绑了
      在这里插入图片描述

    3. 绑完进入listen以后可以被连接,且会产生新的连接,用netassist.exe连接,上面是用命令行连接,注意端口号和tcp client

      此时2000是2条io不是连接,但不完全是io,因为还没分配io
      在这里插入图片描述

    4. 连接以后io能通信,可以send,也能receive只是没打印

      网络助手里send以后,下面可以看到发了多少字节

    5. 用accept分配io:tcp协议的连接与io:不一样的,我懂了,连接是连了,但是数据无法解析出来,需要用io来操作数据

      再加分配io编译

      printf("listen finished\n");
      
      // 分配io
      struct sockaddr_in clientaddr;
      socklen_t len = sizeof(clientaddr);
      
      // 前面sock fd,Await a connection on socket FD. When a connection arrives, open a new socket to communicate with it,
      int clientfd = accept(sockfd, (struct sockaddr*)&clientaddr, &len);
      
      
      char buffer[1024] = {0};
      int count = recv(clientfd, buffer, 1024, 0); //Read N bytes into BUF from socket FD.
      printf("recv: %s\n", buffer);
      
      
      getchar();// 阻塞在这里,一直等命令行给东西进来
      
      

      ./networio以后阻塞在accept()这行,已listen,sockfd上岗了

      netassist.exe连接后,阻塞recv()这行,点send以后就会recv有反应了

      加日志打印信息, client回传server收到的buffer大小

          // 分配io
          struct sockaddr_in clientaddr;
          socklen_t len = sizeof(clientaddr);
      
          // 前面sock fd,Await a connection on socket FD. When a connection arrives, open a new socket to communicate with it,
          printf("accept\n");
          int clientfd = accept(sockfd, (struct sockaddr*)&clientaddr, &len);
          printf("accept finished\n");
      
          char buffer[1024] = {0};
      	int count = recv(clientfd, buffer, 1024, 0); 
      	//Read N bytes into BUF from socket FD.
          printf("recv: %s\n", buffer);
      
      	// client回传server收到的buffer信息,server会打印收到的信息,client端打印buffer大小
          count = send(clientfd, buffer, count, 0);
          printf("send: %d\n", count);
      
    6. 跟着老师捋了一遍流程

      ./networkio以后,client遇到了tcp酒店的迎宾小姐sockfd,小姐建立了listen,上岗开始分配tcp server酒店的端口与地址和client绑定

      网络助手是client点连接就完成tcp连接 accept finished

      然后client发server:2000数据,打印同时也收到server send回来的数据

      在这里插入图片描述

    7. fd就是io与tcp连接信息一一对应:

      如果有accept两者生命周期极其类似,当accept后返回fd io

      如果无accept函数,就会连接,但是io fd没有晚很多

      虽然没有调用aceept()但也可以建立TCP链接,只要服务器listen()了就可以。只不过建立好了TCP链接,但没有办法获取和客户端之间的文件描述符FD。

      而accept()的作用就是获取已经建立连接的FD描述符IO

      sockfd是0.0.0.0:2000 默认两个卡都行

      clientfd是192.168.243.128:2000

      但是代码只有一个accept send分配不了多个client与server的io,所以加while多个io数据弄出来 可以起多个client网络助手连接

      在这里插入图片描述

      用#if 0编译的时候可以屏蔽

    8. 多个client问题——多路IO阻塞

      如果connect一个就send,再connect send没问题

      但是如果先对1 2 3 都按connect,再 3 2 1按send,发现3 2不会收到,1以后 123同时收到

      在这里插入图片描述

      即如果第1个connect的如果还未接受到数据,后面connect上的client都不会收到数据,即时通讯里不希望这样

      为什么

      因为:1过来卡在accept, 2再accept,3再accept.

      3必须等2的send执行完才会执行3的send,2必须等1的send执行完,才会执行2的send,所以23能发收不了,只能等1收了才收

      1-accept-send-2-accept-send-3-accept-send

      在这里插入图片描述

    9. 多路IO阻塞改进

      报错:

      /tmp/ccv3SqvF.o: In function main': networkio.c:(.text+0x1cc): undefined reference to pthread_create’ collect2: error: ld returned 1 exit status

      要-lpthread

      gcc -o networkic networkic.c -lpthread
      

      此时1 2 3连,3发就能收不用等12,2发能收不用等1

      void *client_thread(void *arg){
          // 为了防止多路io阻塞,开一个线程
          int clientfd = *(int *) arg; //先转成int *,强制转换成指向int,再取arg指针内容最外面*
      
          char buffer[1024] = {0};
          int count = recv(clientfd, buffer, 1024, 0); //Read N bytes into BUF from socket FD.
          //Read N bytes into BUF from socket FD.
          printf("recv: %s\n", buffer);
      
          // client回传server收到的buffer信息,server会打印收到的信息,client端打印buffer大小
          count = send(clientfd, buffer, count, 0);
          printf("send: %d\n", count);
      
      }
      
      
      #else
              while(1){
                  printf("accept\n");
                  int clientfd = accept(sockfd, (struct sockaddr*)&clientaddr, &len);
                  printf("accept finished\n");
      
                  // 启动线程
                  pthread_t thid; // thread id
                  pthread_create(&thid, NULL, client_thread, &clientfd); //线程id,属性,入口函数,线程值
          }
      #endif
      
      

      but只能收发一条,多条加while

      void *client_thread(void *arg){
          // 为了防止多路io阻塞,开一个线程
          int clientfd = *(int *) arg; //先转成int *,强制转换成指向int,再取arg指针内容最外面*
      
          // 收多条 while
          while(1){
              char buffer[1024] = {0};
              int count = recv(clientfd, buffer, 1024, 0); //Read N bytes into BUF from socket FD.
              //Read N bytes into BUF from socket FD.
              printf("recv: %s\n", buffer);
      
              // client回传server收到的buffer信息,server会打印收到的信息,client端打印buffer大小
              count = send(clientfd, buffer, count, 0);
              printf("send: %d\n", count);
          }
      }
      

综上最终版

#include<sys/socket.h>
#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<netinet/in.h>
#include<pthread.h>

void *client_thread(void *arg){
    // 为了防止多路io阻塞,开一个线程
    int clientfd = *(int *) arg; //先转成int *,强制转换成指向int,再取arg指针内容最外面*

    // 收多条 while
    while(1){
        char buffer[1024] = {0};
        int count = recv(clientfd, buffer, 1024, 0); //Read N bytes into BUF from socket FD.
        //Read N bytes into BUF from socket FD.
        printf("recv: %s\n", buffer);

        // client回传server收到的buffer信息,server会打印收到的信息,client端打印buffer大小
        count = send(clientfd, buffer, count, 0);
        printf("send: %d\n", count);
    }
}


int main(){
    // 创建socket
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    
    // 绑定本地端口
    struct sockaddr_in servaddr;
    servaddr.sin_family = AF_INET; 
    servaddr.sin_addr.s_addr = htons(INADDR_ANY); //绑网卡地址 默认0.0.0.0 绑本地地址;htons转成网络字节序 
    servaddr.sin_port = htons(2000); // 0-1023系统默认 大于1024都能用

    if(-1 == bind(sockfd, (struct sockaddr*)&servaddr, sizeof(struct sockaddr))){
        printf("bind failed: %s\n", strerror(errno));
    }
    
    listen(sockfd, 10);
    printf("listen finished\n");

    // 分配io
    struct sockaddr_in clientaddr;
    socklen_t len = sizeof(clientaddr);


#if 0
// 第一版,屏蔽掉
    // 前面sock fd,Await a connection on socket FD. When a connection arrives, open a new socket to communicate with it,
    printf("accept\n");
    int clientfd = accept(sockfd, (struct sockaddr*)&clientaddr, &len);
    printf("accept finished\n");

    char buffer[1024] = {0};
    int count = recv(clientfd, buffer, 1024, 0); //Read N bytes into BUF from socket FD.
    //Read N bytes into BUF from socket FD.
    printf("recv: %s\n", buffer);

    // client回传server收到的buffer信息,server会打印收到的信息,client端打印buffer大小
    count = send(clientfd, buffer, count, 0);
    printf("send: %d\n", count);
#elif 0
// 一直只要有连接,就分配io,来accept send
    while(1){
        // 前面socfd,Await a connection on socket FD. When a connection arrives, open a new socket to communicate with it,
        printf("accept\n");
        int clientfd = accept(sockfd, (struct sockaddr*)&clientaddr, &len);
        printf("accept finished\n");

        char buffer[1024] = {0};
        int count = recv(clientfd, buffer, 1024, 0); //Read N bytes into BUF from socket FD.
        //Read N bytes into BUF from socket FD.
        printf("recv: %s\n", buffer);

        // client回传server收到的buffer信息,server会打印收到的信息,client端打印buffer大小
        count = send(clientfd, buffer, count, 0);
        printf("send: %d\n", count);
    }

#else
        while(1){
            printf("accept\n");
            int clientfd = accept(sockfd, (struct sockaddr*)&clientaddr, &len);
            printf("accept finished\n");

            // 启动线程
            pthread_t thid; // thread id
            pthread_create(&thid, NULL, client_thread, &clientfd); //线程id,属性,入口函数,线程值
    }
#endif


    getchar();// 阻塞在这里,一直等命令行给东西进来

    printf("exit\n");

    
    return 0;
}

一请求一线程,并且每个请求互不影响,入门课根本没听懂也没操作会,这次吃透了

ps:

  1. gitlab配置:后面再说:

    git ssh密钥绑定https://blog.csdn.net/Yaoyao2024/article/details/132123525?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171547948716800188566050%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=171547948716800188566050&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-1-132123525-null-null.142v100pc_search_result_base8&utm_term=git%20ssh%20key&spm=1018.2226.3001.4187

  2. 安康鱼的雄鱼完全寄生在雌鱼上,性寄生完成繁殖,母亲活的久但是会更痛,怀孕期间各项技能以透支的方式提高技能,但是带来的损伤无法逆转https://bilibili.com/video/BV1Js421A74m/?vd_source=81d34670595467089254a377dbe64851

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

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

相关文章

抖音爆火的QQ价格评估源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 抖音爆火的QQ价格评估前端源码 最近抖音很火直播给别人测qq价值多少&#xff0c;这个源码只有前端&#xff0c; 包含激活码验证页&#xff0c;评估页&#xff0c;自行研究吧 二、效…

AI预测福彩3D采取887定位大底=23策略+杀断组+杀组选+杀和尾+杀和值012缩水测试5月15日预测第1弹

昨天与一位玩3D的彩友通过视频直播的形式聊了下&#xff0c;受益匪浅&#xff0c;给我提供了一些比较有价值的建议&#xff0c;比如&#xff0c;对于887的定位策略&#xff0c;方向是没问题的&#xff0c;但是8873的话&#xff0c;还是缺乏一定的命中率&#xff0c;如果88723&a…

海外静态IP:全球互联的稳定之选

在全球化的商业环境中&#xff0c;企业与个人对于网络的依赖日益加深&#xff0c;而一个稳定、可靠的海外静态IP成为了连接世界的关键。本文将从五个方面深入探讨海外静态IP的重要性、应用场景、技术优势、市场趋势以及选择时的考量因素。 一、海外静态IP的重要性 静态IP地址是…

微信小程序如何使用weui组件库?

一、方法一&#xff1a;通过npm安装 通过npm构建方式引入weui组件库 &#xff08;找到.eslintrc.js 右键&#xff0c;在内件终端打开&#xff09;打开命令提示符后&#xff0c;输入 &#xff08;1&#xff09;npm init -y来快速生成一个默认的package.json文件 &#xff08;…

nmap端口扫描工具——Win10

Nmap安装流程&#xff1a; Nmap官网链接&#xff1a;Download the Free Nmap Security Scanner for Linux/Mac/Windows Nmap参考文档链接&#xff1a;https://nmap.org/book/toc.html Nmap使用流程&#xff1a; Nmap软件主页面&#xff1a; 中文版&#xff1a; nmap -T4 -…

代码行数统计工具cloc

Release v2.00 AlDanial/cloc GitHub 代码量代码行数统计工具cloc的正确使用(windows平台亲测有效&#xff0c;本人踩过坑&#xff0c;文中提到&#xff01;)_cloc代码统计工具-CSDN博客

HTTP客户端手动解析响应体数据

服务端 package mainimport ("easyGo/person""encoding/json""net/http" )func main() {http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {p : &person.Person{Name: "jackie",Age: 30,T: pe…

企业数字化转型规划设计(107页PPT)

一、资料介绍 《企业数字化转型规划设计》这份详尽的107页PPT资料&#xff0c;是对企业数字化转型的全方位、系统性规划设计的深度解读。该资料从数字化转型的必要性、现状分析、目标设定、实施路径、技术支持到风险评估等多个维度&#xff0c;为企业提供了一套完整且实用的操…

基于火山引擎云搜索的混合搜索实战

在搜索应用中&#xff0c;传统的 Keyword Search 一直是主要的搜索方法&#xff0c;它适合精确匹配查询的场景&#xff0c;能够提供低延迟和良好的结果可解释性&#xff0c;但是 Keyword Search 并没有考虑上下文信息&#xff0c;可能产生不相关的结果。最近几年&#xff0c;基…

三类银行互联网贷款迎新规!速看菊风信贷智能双录解决方案

​​继2020年《商业银行互联网贷款管理暂行办法》&#xff08;下称《办法》&#xff09;和2021年《关于进一步规范商业银行互联网贷款业务的通知》之后&#xff0c;时隔三年&#xff0c;股份制银行、城商行、民营银行&#xff08;简称“三类银行”&#xff09;互联网贷款业务再…

Advanced RAG 07:在RAG系统中进行表格数据处理的新思路

编者按&#xff1a; 目前&#xff0c;检索增强生成&#xff08;RAG&#xff09;系统成为了将海量知识赋能于大模型的关键技术之一。然而,如何高效地处理半结构化和非结构化数据&#xff0c;尤其是文档中的表格数据&#xff0c;仍然是 RAG 系统面临的一大难题。 本文作者针对这一…

买了个彩票,哈哈哈哈哈。

买了个彩票-双色球&#xff0c;发现挺有意思的。 索性把双色球的所有期的中奖号码的数据都爬了下来&#xff0c;03至今&#xff0c;21年了。txt文本&#xff0c;6.5MB大小。 大家有啥好的建议&#xff0c;分析一下数据呢。

堆的数组实现

前言 本次博客来讲解一下堆的数组实现&#xff0c;好吧还是会结合图例&#xff0c;让大家理解 堆的定义 什么是堆&#xff1f; 堆是一颗完全二叉树。它的性质是父节点一定大于或者一定小于子节点 每一个结点都要满足这个性质就是堆 堆的特性是堆顶的数据一定是最大或最小…

数据不出境的SSL证书

说到SSL证书&#xff0c;大部分用户对于SSL证书的作用还是有着或多或少的了解的。比如&#xff1a; 使用SSL证书可以实现网站的加密访问&#xff0c;相对于数据传输的安全性来说&#xff0c;https访问可以杜绝http的明文访问&#xff1b; 提升品牌形象&#xff0c;安装SSL证书…

vue3 + ts中,element-plus组件通过ref引用组件内方法,显示提示

在vue3 ts 项目中&#xff0c;我们通过ref引用element-plus组件内部方法时&#xff0c;编辑器没有提示信息&#xff0c;通常我们都是如下写法 这里想进行一下表单校验&#xff0c;需要引用el-form组件中的validate方法&#xff0c;从这里可以看出是没有给相应的提示信息的。这…

洛谷模板.Floyd的深度理解(python)

先上代码&#xff1a; n, m map(int, input().split()) edge [ [float(inf)]*n for _ in range(n)] for i in range(m):u, v, w map(int, input().split())edge[u-1][v-1] min(edge[u-1][v-1], w)edge[v-1][u-1] min(edge[v-1][u-1], w) for i in range(n):edge[i][i] 0…

小程序(四)

十四、分包加载 &#xff08;一&#xff09;普通分包与主包 随着项目越来越大&#xff0c;为了用户更好的体验&#xff0c;小程序引用了分包技术&#xff0c;分包技术将tabBar页面及一些全局使用的静态资源&#xff0c;放到主包中&#xff0c;开发者可以根据需要添加分包&…

三无跨考,上岸热门211?

这个系列会邀请上岸学长学姐进行经验分享~ 今天分享经验的同学也是梦马班的学员&#xff0c;一战高分上岸福州大学&#xff01; 经验分享 一战零基础跨考福州大学866&#xff0c;初试395&#xff0c;信号141&#xff0c;最后本部录取排名前十。各位要报考福州大学的学弟学妹…

Win7远程桌面连接不上:原因及专业解决方案

Win7远程桌面连接作为一种方便的工具&#xff0c;使得用户可以从一台计算机远程访问和操作另一台计算机。然而&#xff0c;有时用户可能会遇到Win7远程桌面连接不上的情况&#xff0c;这可能是由于多种原因导致的。 一、原因分析 1. 网络设置问题&#xff1a;确保计算机与远程…