Linux入门攻坚——25、Web Service基础知识与httpd安装配置

news2024/12/23 11:35:05

网络体系结构现在主要有OSI的七层协议和TCP/IP协议,其对应关系如下:

资源子网主要是用户进程,运行于用户空间,关注点是应用上的细节,通信子网运行于内核空间,关注通信细节。传输层是确保进程到进程间通信,IP地址是确保主机到主机通信,MAC地址是确保设备到设备通信。主机到主机与设备到设备有何不同呢?主要是网络中间要经过多台网络设备,如交换机、路由器等,MAC地址是确保在两台网络设备间通信的。当然,在这个概念里,主机也是一台设备。

应用层实现应用协议,主要运行于用户空间,像前面学到的dns,ssh都是应用层协议,本事是一种协议,而这种协议的实现需要一个载体,这就是bind和openssh。因为应用层应该关注的是本身的实现,其要与其他主机通信,只需要调用通信子网功能就可以了,套接字就是为了简化这种调用而实现的功能,起到一个上下沟通的作用。Socket是IPC的一种实现,允许位于不同主机(甚至同一主机)上不同进程之间进行通信。

Socket有三种类型:
  tcp套接字:SOCK_STREAM
  udp套接字:SOCK_DGRAM
  裸套接字(不借助tcp、udp,直接用IP):SOCK_RAW

套接字,不是很精确的说法就是IP+端口的组合。

端口:tcp和udp协议端口号都是0~65535
0~1023:众所周知,永久分配给固定应用使用,22/tcp(ssh)、80/tcp(http)、443/tcp(https);
1024~41951:注册端口,要求不是特别严格,分配给程序注册为某应用使用,3306/tcp(mysql);
41952+:客户端程序随机使用的端口(内核随机分配),叫做动态端口或私有端口;其范围的定义:/proc/sys/net/ipv4/ip_local_port_range;

TCP协议特性:

  •   建立连接:三次握手
  •   将数据打包成段:校验和(CRC-32)
  •   确认、重传以及超时;
  •   排序:逻辑序号
  •   流量控制:快发慢收时;通过滑动窗口算法实现。(主要针对主机的接收能力)
  •   拥塞控制:慢启动和拥塞避免算法;(主要针对网络带宽)

Socket Domain:(根据其所使用的地址进行的另一种分类方法)

  •   AF_INET:Address Family,IPv4
  •   AF_INET6:IPv6
  •   AF_UNIX:同一主机上不同进程间通信使用

  每类套接字都至少提供了两种socket:流和数据报,即tcp和udp
    流:可靠地传递、面向连接、无边界;
    数据报:不可靠传递、有边界、无连接;

套接字相关的系统调用:
  socket():创建一个套接字(相当于创建一个模板);
  bind():绑定(即将上一步的模板进行填充,与特定IP和端口联系起来)
  listen():监听
  accept():接收请求
  connect():请求连接建立(一般是客户端发起)
  write():发送数据,即向套接字写数据
  read():接收数据,即从套接字读数据(从缓冲读)
      send()、recv()、sendto()、recvfrom()

HTTP协议:Hyper Text Transfer Protocol,其实现监听于80端口
  html:编程语言,超文本标记语言;
  MIME:Multipurpose Internet Mail Extensions(将非文本格式数据转换成文本格式传输后在转换回非文本数据)

工作机制:
  http请求
  http响应

 

Web资源:web resource
  静态文件:.html,.jpg
  动态文件:在服务器中执行后才能形成最终结果,.php,.jsp

  媒体:媒体类型(MIME类型):major/minor
    text/html、text/plain、image/jpeg、image/gif

  URI:Uniform Resource Identifier,统一资源标识符
    URL:Uniform Resource Locator,统一资源定位符,是URI的子集,用于描述某服务器某特定资源的位置。
      Scheme://Server:port/path/to/resource,(path/to/resource最终通过映射,映射到具体文件系统中的特定文件)
  URN:Uniform Resource Naming,统一资源命名符

HTTP协议版本:
  HTTP/0.9:原型版本
  HTTP/1.0:第一个广泛使用的版本,支持MIME
  HTTP/1.1:增强了缓存功能
  spdy:Google开发的基于TCP的会话层协议,SPDY是对HTTP协议的增强。
  HTTP/2.0:

一次完整的http请求过程:
  (1)建立或处理连接;
  (2)接收请求,接收来自于网络的请求报文中对某资源的一次请求的过程。
    并发访问响应模型(Web I/O):
      单进程I/O结构:只启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应;
      多进程I/O结构:并行启动多个进程,每个进程响应一个请求;
      复用I/O结构:一个进程响应n个请求;
          多线程模型:一个进程生成n个线程,每个线程响应一个用户请求;
          事件驱动机制,event-driven:基于事件回调机制,进行事件状态的追踪。
      复用的多进程I/O结构:启动多个进程,每个进程响应n个请求;
  (3)处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息。
    元数据:请求报文首部
      <method> <URL> <VERSION>
      host:请求的主机名称
      Connection:
  (4)访问资源:获取请求报文中请求的资源。
    web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源,这些资源放置于本地文件系统某路径下,此路径通常称为DocRoot
      /var/www/html/
        images/1.jpg
    http://www.test.com/images/1.jpg
    web服务器资源路径映射方式:
        a)docroot
        b)alias
        c)虚拟主机docroot
        d)用户家目录docroot
  (5)构建响应报文;
     资源的MIME类型:
        显式分类、魔法分类、协商分类
      URL重定向:
        web服务构建的响应并非客户端请求的资源,而是资源的另外一个访问路径;
  (6)发送响应报文;
  (7)记录日志;

http服务器程序
  httpd(apache)、nginx、lighttpd
  应用程序服务器:IIS、tomcat、jetty,jboss,resin
  webshpere,weblogic,oc4j

httpd的安装配置和使用
  httpd:apache

httpd的特性
  高度模块化设计:core + modules
  DSO:Dynamic Shared Object,动态共享对象
  MPM:多路(道)处理模块,Multipath  Processing Module。事先创建进程,按需维持适当的进程
      prefork:多进程模型,每个进程响应一个请求;进程模型,两级结构,主进程master负责生成子进程,每个子进程负责响应一个请求。
        一个主进程,负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;即使没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;主进程负责监听80端口和接收请求,但不负责处理请求,交给子进程处理。主进程的是监听套接字,子进程的是连接套接字。        
      worker:多线程模型(多进程生成),每个线程响应一个请求;一个主进程生产多个子进程,每个子进程负责生成多个线程,每个线程响应一个请求。m进程,n线程:m*n个请求。
        线程模型,三级结构,主进程master负责生成子进程,每个子进程负责生成多个线程,每个线程响应一个请求。
  event:事件驱动模型,一个线程响应多个请求。每个线程响应N个请求;一个主进程生成m个子进程,每个子进程负责n个请求。
        线程模型,三级结构,主进程master负责生成子进程,每个子进程响应多个请求(有一个监控线程)监听线程。
    httpd-2.2:event为测试使用
    httpd-2.4:event可生产使用

  支持运行时配置,支持单独编译模块
  支持多种方式的虚拟主机配置

虚拟主机:  物理服务器一台,  Web程序一个,却可以服务多个不同的站点
Socket   IP:Port  
基于IP的虚拟主机;基于端口的虚拟主机;基于域名的虚拟主机

httpd的安装配置

CentOS 6 :2.2
CentOS 7 : 2.4

CentOS 6:程序环境
  配置文件:/etc/httpd/conf/httpd.conf、   /etc/httpd/conf.d/*.conf
  服务器脚本:    /etc/rc.d/init.d/httpd
    配置文件:/etc/sysconfig/httpd
  主程序文件:
    /usr/sbin/httpd             :prefork模型
    /usr/sbin/httpd.event    :event模型
    /usr/sbin/httpd.worker   :worker模型
  日志文件目录:
    /var/log/httpd
      access_log:访问日志
      error_log:错误日志
  站点文档目录:
    /var/www/html

  配置文件的组成:主配置文件/etc/httpd/conf/httpd.conf
    [root@study610-f1 CentOS]# grep "Section" /etc/httpd/conf/httpd.conf 
    ### Section 1: Global Environment
    ### Section 2: 'Main' server configuration
    ### Section 3: Virtual Hosts
  配置格式:directive value
    directive:不区分字符大小写;
    value:为路径时,取决于文件系统;

常用配置
  1、修改监听的IP和Port:Listen [IP:]PORT
    忽略IP表示监听本机所有IP;Listen可重复出现多次;
  2、持久连接:
    Persistent Connection:连接建立,每个资源取完后不会断开连接,而是继续等待其他的请求完成;
    如何断开?数量限制:100;时间限制:可配置
    副作用:对并发访问量较大的服务器,持久连接功能会使有些请求得不到响应;
    折衷:使用较短的持久连接时间;
    httpd-2.4 支持毫秒级持久时间
    非持久连接:
    KeepAlive on|off  、 MaxKeepAliveRequests #   、KeepAliveTimeout #
    测试:
      telnet HOST PORT
      GET / HTTP/1.1
      Host:HOSTNAME or IP

  3、MPM
    prefork,worker,event
    httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个:rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持;确认方法:
      ps aux | grep httpd
    默认为/usr/sbin/httpd,其使用prefork模型
    查看模块列表:httpd -l,查看静态编译的模块

    查看静态编译及动态装载的模块:httpd -M
  更换使用的httpd程序:编辑/etc/sysconfig/httpd
    #HTTPD=/usr/sbin/httpd.worker
  修改成httpd.worker或httpd.event,重新启动就可以了。
  prefork的配置:/etc/httpd/conf/httpd.conf

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers       8   # 服务启动时启动的服务器进程数
MinSpareServers    5   # 最小空闲服务器进程数
MaxSpareServers   20   # 最大空闲进程数
ServerLimit      256   # 
MaxClients       256   # 最大并发请求数量
MaxRequestsPerChild  4000 # 每个进程最大处理的请求数量
</IfModule>

worker的配置:

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers         4
MaxClients         300
MinSpareThreads     25
MaxSpareThreads     75 
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

网站评测:
  PV:Page View,UV:User View,独立IP量;

  4、DSO机制,Dynamic Shared Object,/usr/lib64/httpd/modules
    配置指令实现模块加载:LoadModule <mod_name> <mod_path>
    模块路径可使用相对地址:
        相对于ServerRoot(其值为/etc/httpd)指向的路径而言,ServerRoot在/etc/httpd/conf/httpd.conf中定义,模块的路径为:/etc/httpd/modules/
    如:LoadModule auth_basic_module modules/mod_auth_basic.so
    就是加载/etc/httpd/modules/mod_auth_basic.so
    /etc/httpd/modules/usr/lib64/httpd/modules是同一个位置,是一个硬链接。

  5、定义“Main”server的文档页面路径, DocumentRoot   
    文档路径映射:
       DocumentRoot指向的路径为URL路径的起始位置:
        DocumentRoot  “/var/www/html”
          test/index.html --> http://HOST:PORT/test/index.html  用户访问路径
          test/index.html --> /var/www/html/test/index.html    文件系统路径
      修改DocumentRoot测试,先关闭SELINUX:修改/etc/httpd/conf/httpd.conf

  6、站点访问控制,可基于两种类型的路径指明对哪些资源进行访问控制:
    文件系统路径:
        <Directoty ""> </Directory>
        <File ""> </File>
        <FileMatch ""> </FileMatch>

    URL路径:
        <Location ""> </Location>
        ......
    访问控制机制:
        基于来源地址:
        基于用户账号:

  7、Directory中“基于来源地址”实现访问控制
      (1)Options
        所有可用特性:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
        None,All
        Indexes:索引,没有定义DirectoryIndex,则列出目录下所有文件,很危险的行为,对于下载站很适用。不定义,则拒绝。
实操:
httpd.conf中修改<Directory "/var/www/html"></Directory>如下:
<Directory "/www/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None       # 是否覆盖目录下的.htaccess定义的访问权限
    Order allow,deny
    Allow from all
</Directory>


将 Options Indexes FollowSymLinks中的indexes去掉,改为 Options  FollowSymLinks,重新加载后再次访问:

        FollowSymLinks:允许跟踪符号链接文件访问,如ln -sv /etc/issue /www/htdocs/issue.html,用户可访问issue.html,否则拒绝访问。
实操:


将Options  FollowSymLinks改为Options None

      (2)基于来源地址的访问控制机制
        Order:检查次序
          Order allow,deny  白名单,后面的deny是默认处理动作
          Order deny,allow 黑名单
        Allow from
        Deny from
        来源地址:
          IP:
          NetAddr:172.16 、172.16.0.0  、172.16.0.0/16 、172.16.0.0/255.255.0.0
  实操:
    Order allow,deny
    Allow from 192.168.138.137
从137主机访问:

其他主机访问:

  8、定义默认主页面
        DirectoryIndex index.html index.html.var   # 可定义多个,从左往右依次查找,没有找到且Options定义了indexes,则列出目录下的所有文件。

  9、日志设定
    错误日志:
       ErrorLog logs/error_log,是相对路径,相对ServerRoot,即/etc/httpd目录,即/etc/httpd/logs目录,此目录文件是/var/log/httpd的软链接文件。
       LogLevel warn
       几种级别: debug、info、notice、warn、error、crit、alert、emerg
    访问日志:
      CustomLog logs/access_log combined#combined是格式名,定义日志格式,用LogFormat定义,默认配置文件中还定义了common,referer,和agent:
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
      %h:客户端IP地址;
      %l:Remote logname(from identd,if supplied)-表示为空。
      %u:Remote user
      %t:服务器接收到请求的时间
      %r:First line ofrequest,请求报文的首行信息(method url version)
      %>s:响应状态码;
      %b:响应报文的大小,单位是字节,不包含响应报文首部;
      %{Referer}i:请求报文当中“referer”首部的值;当前资源的访问入口,即从哪个页面中的超链接跳转而来的;
      %{User-Agent}i:请求报文当中“User-Agent”首部的值;即发出请求用到的应用程序;

  10、路径别名
    DocumentRoot  “/www/htdocs”
      http://www.mytest.com/download/soft.rar ---> /www/htdocs/download/soft.rar   路径映射
    Alias   /URL/   "/PATH/TO/SOMEDIR/"
      Alias  /bbs/  "/forum/htdocs"
      http://www.mytest.com/bbs/index.html --> /forum/htdocs/bbs/index.html  别名
实操:
    在/www/htdocs下创建bbs目录,其下创建index.html,访问:http://192.168.138.139/bbs/index.html

    在/etc/httpd/conf/httpd/conf中增加:Alias /bbs/ "/forum/htdocs/"
    创建/forum/htdocs目录,在此目录下创建index.html。同样访问:http://192.168.138.139/bbs/index.html

  11、设定默认字符集
    AddDefaultCharset UTF-8   字符集还可以是GBK、GB2312、GB18030

  12、基于用户的访问控制
    认证质询:
      WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户提供账号和密码;
    认证:
      Authorization:客户端用户填入账号密码后再次发送请求报文:认证通过,则服务器发送响应的资源;
    认证类型:basic——明文; digest——消息摘要;
    安全域:需要用户认证后才能访问的路径;
      应该通过名称对其进行标识,并用于告知用户认证的原因;
    用户的账号和密码存储位置:
      虚拟账号:仅用于访问某服务时用到的认证标识;
      存储于:文本文件、SQL数据库、ldap、nis

    basic认证:
      1)定义安全域
        <Directory "">
          Options None
          AllowOverride None
          AuthType Basic
          AuthName "STRING"
          AuthUserFile "/PATH/TO/HTTPD_USER_PASSWORD_FILE"
          Require user username1 username2 ......
        </Directory>
        允许账号文件中的所有用户登录访问:       Require valid-user
      2)提供账号和密码存储(文本文件)
        使用htpasswd命令进行管理
          htpasswd [options] passwordfile username
            -c:自动创建passwordfile,因此,仅用于在添加第一个用户时使用
            -m:md5加密用户密码
            -s:sha1加密用户密码
            -D:删除指定用户

      3)实现基于组进行认证
        <Directory "">
          Options None
          AllowOverride None
          AuthType Basic
          AuthName "STRING"
          AuthUserFile "/PATH/TO/HTTPD_USER_PASSWORD_FILE"
          AuthGroupFile “/PATH/TO/HTTPD_GROUP_FILE”
          Require group group1 group2 ......
        </Directory>
      要提供:用户账号文件和组文件:
        组文件:每行定义一个组:GRP_NAME:user1 user2 user3 .......

实操:
    <1>创建目录及文件:/www/htdocs/admin目录及index.html文件

    <2>在配置文件/etc/httpd/conf/httpd.conf中配置定义域:

    <3>测试访问http://192.168.138.139/admin/index.htnl,需要用户和密码了:

访问其他路径则不需要用户密码。
    <4>创建用户、密码文件,使用htpasswd命令工具:

再次测试:
测试指定具体可登陆用户名,将配置文件中的:require valid-user改为require user tom

使用jerry无法登录,使用tom可以登录

    <5>基于组进行认证:
    修改配置文件:

添加一个用户test1,创建组文件/etc/httpd/conf.d/.htgroup

即允许webadmin组的用户登录访问/admin下的资源。
测试访问:test1和jerry可以访问,tom不可以访问。

  13、虚拟主机
    有三种实现方案:
      基于IP:为每个虚拟主机准备至少一个ip地址;
      基于端口:为每个虚拟主机准备至少一个专用port;实践中很少使用;
      基于hostname(主机名):为每个虚拟主机至少准备一个专用hostname;
    可混合使用上述三种方式中任意方式;
    注意:一般虚拟主机不要与中心主机混用,所以,要使用虚拟主机,先禁用中心主机;
      禁用中心主机:注释掉DocumentRoot
    每个虚拟主机都有专用配置:
      <VirtualHost "IP:PORT">
        ServerName
        DocumentRoot “”
      </VirtualHost>

    ServerAlias:虚拟主机的别名:
    ErrorLog
    CustomLog
    <Directory ""></Directory>

实操:
   1) 基于IP
    先注释掉主服务器的DocumentRoot,配置虚拟主机项:

检测语法是否错误,创建相关目录、文件

主机增加增加IP:

服务重载后测试访问:

  2)基于端口的虚拟主机:配置文件修改


    3)基于hostname
先在配置文件中启用NameVirtualHost *:80配置项

测试:客户端修改hosts文件:

访问测试:

    4)测试日志:

  14、内置的status页面
      配置文件:

此时访问http://192.168.138.139/server-status:显示服务器的状态信息

配置文件中配置:ExtendedStatus On,将看到更多服务器状态:

对这个URL进行认证保护,配置方法:

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

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

相关文章

STM32(七):ADC电位检测 (标准库函数)

前言 上一篇文章已经介绍了如何用STM32单片机中的定时器的PWM波来实现LED的“呼吸”。这篇文章我们来介绍一下如何用STM32单片机中ADC进行电位检测&#xff0c;并发送到XCOM串口中显示。 一、实验原理 1.ADC模数转换的介绍 首先&#xff0c;我们先介绍一下AD模数模块&#…

面试(03)————多线程

目录 一、线程和进程的区别&#xff1f; 二、并行和并发的区别&#xff1f; 三、线程创建的方式有哪些&#xff1f; 3.1、继承Thread类 3.2、实现Runnable接口 3.3、实现Callable接口 3.4、线程池 四、Runnable和Callable的区别&#xff1f; 五、在启动线程的时候&am…

前端将xlsx转成json

第一种方式&#xff0c;用js方式 1.1先安装插件 万事都离不开插件的支持首先要安装两个插件 1.2. 安装xlsx cnpm install xlsx --save注&#xff1a;这块我用的cnpm&#xff0c;原生的是npm&#xff0c;因为镜像的问题安装了cnpm&#xff0c;至于怎么装网上一搜一大堆 1.3安…

阅读笔记:Multi-threaded Rasterization in the Chromium Compositor

Multi-threaded Rasterization in the Chromium Compositor PPT 原始链接&#xff1a; https://docs.google.com/presentation/d/1nPEC4YRz-V1m_TsGB0pK3mZMRMVvHD1JXsHGr8I3Hvc/edit?uspsharing PPT主要介绍了Chromium浏览器中使用多线程光栅化(Impl-side painting)的机制&a…

如何快速的将Excel定义的表结构变成MySQL的建表语句

如何快速的将Excel定义的表结构变成MySQL的建表语句 最近需求有点多啊&#xff0c;做一个小需求就有一堆表结构&#xff0c;一个一个实行CV大法&#xff0c;实在太伤身体了&#xff0c;有没有能够快速便捷的方法将一大堆Excel表转换成MySQL的表结构建表语句呢&#xff0c;网上…

Gmail 两步验证+应用专用密码登录

1、为什么做这个&#xff1f; 如果需要使用Gmail作为应用程序的邮件发送者&#xff0c;必须进行相关配置&#xff0c;否则不能直接使用 2、怎么做&#xff1f; 谷歌邮箱&#xff08;gmail.com&#xff09;&#xff1a;两步验证应用专用密码登录 - 来发信 - 您的外贸拓客好帮…

递归在多级数据结构中的简单应用

哈喽&#xff0c;我是小码&#xff0c;半年多没更新了&#xff0c;这段时间换了新工作&#xff0c;工作也很忙。后续会尽量多写点&#xff0c;坚持确实是一件很难&#xff0c;很酷的事情。最近在公司负责开发商品有关的开发&#xff0c;商品包含类型、款式等属性&#xff0c;而…

从零开始发布你的第一个npm插件包并在多项目中使用

引言 在开源的世界里&#xff0c;每个人都有机会成为贡献者&#xff0c;甚至是创新的引领者。您是否有过这样的想法&#xff1a;开发一个解决特定问题的小工具&#xff0c;让她成为其他开发者手中的利器&#xff1f;今天&#xff0c;我们就来一场实战训练&#xff0c;学习如何将…

多链路聚合设备在自然灾害应急能力提升工程基层防灾项目内的应用

在近几年信息技术的飞速发展&#xff0c;面对应急通信和指挥调度时需要移动化无线通信技术来做支撑&#xff0c;多链路聚合设备在中间的作用至关重要&#xff0c;实现从车到车、人到车、车到中心的多样化应用场景进行数据图像的无线传输和多节点组网方案需求&#xff0c;来满足…

Linux[高级管理]——使用源码包编译安装Apache网站

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f468;‍&#x1f4bb;Linux高级管理专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年5月31日14点20分 &#x1f004;️文章质量&#xff1a;96分 在Linux系统上编译和安装Apache HTTP Server是…

乡村振兴与脱贫攻坚相结合:巩固拓展脱贫攻坚成果,推动乡村全面振兴,建设更加美好的乡村生活

目录 一、引言 二、巩固拓展脱贫攻坚成果 1、精准施策&#xff0c;确保稳定脱贫 2、强化政策支持&#xff0c;巩固脱贫成果 3、激发内生动力&#xff0c;促进持续发展 三、推动乡村全面振兴 1、加快产业发展&#xff0c;增强乡村经济实力 2、推进乡村治理体系和治理能力…

2.6倍!WhaleTunnel 客户POC实景对弈DataX

作为阿里早期的开源产品&#xff0c;DataX是一款非常优秀的数据集成工具&#xff0c;普遍被用于多个数据源之间的批量同步&#xff0c;包括类似Apache DolphinScheduler的Task类型也对DataX进行了适配和增强&#xff0c;可以直接在DolphinScheduler里面利用通用的数据源调用Dat…

Java面试——专业技能

优质博文&#xff1a;IT-BLOG-CN 一、简单讲下 Java 的跨平台原理 由于各个操作系统&#xff08;Windows&#xff0c;Linux等&#xff09;支持的指令集不是完全一致的。就会让我们程序在不同的操作系统上要执行不同的程序代码。Java 开发了适用于不同操作系统及位数的 Java 虚拟…

Python对获取数据的举例说明

当使用Python来获取数据时&#xff0c;有许多不同的方法和库可以根据你的需求来选择。以下是一些常见的示例&#xff0c;说明如何使用Python来从各种来源获取数据。 1. 从网站或API获取JSON数据 你可以使用requests库从网站或API获取JSON格式的数据。例如&#xff0c;从某个API…

C++ | Leetcode C++题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int> num_set;for (const int& num : nums) {num_set.insert(num);}int longestStreak 0;for (const int& num : num_set) {…

accelerate 笔记:对齐不同设备配置的性能

在TPU、多GPU和单GPU上使用accelerate运行相同的脚本和相同的batch_size&#xff0c;可能结果是不一样的那应该怎么做呢? 1 设置正确的种子 确保在所有分布式情况下使用 utils.set_seed() 完全设置种子&#xff0c;以使训练可复现 from accelerate.utils import set_seedse…

【C++进阶】深入STL之string:模拟实现走进C++字符串的世界

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C模板入门 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀STL之string &#x1f4d2;1. string…

男士什么牌子的内裤穿着舒服?五款实力派男士内裤分享

你是否曾因为内裤不透气、材质不佳而倍感烦恼&#xff1f;男士内裤作为贴身衣物&#xff0c;其舒适度和质量至关重要。在如今市场上品牌众多、材质各异的背景下&#xff0c;如何挑选一款合适的男士内裤成为了一大难题。 以下是测评过的部分男士内裤&#xff1a; 近期&#xff…

ArUco与AprilTag 标签

一、简介 在许多计算机视觉应用程序中&#xff0c;姿势估计非常重要&#xff1a;机器人导航&#xff0c;增强现实等等。 该过程基于发现真实环境中的点与其2d图像投影之间的对应关系。 这通常是一个困难的步骤&#xff0c;因此通常使用合成或基准标记来简化操作。 最受流行的…

20240606在Toybrick的TB-RK3588开发板的Android12下确认HDMI的驱动

20240606在Toybrick的TB-RK3588开发板的Android12下确认HDMI的驱动 2024/6/6 9:48 【原文是在RK3328的Android7.1下写的。我将它升级成为RK3588的Android12了】 RK平台主要采用 FB 和 DRM 两种显示框架。与此相对应&#xff0c; HDMI 也有两套驱动。 FB&#xff1a; LINUX 3.10…