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

做耳鼻喉医院网站多少钱/临沂百度代理公司有几个

做耳鼻喉医院网站多少钱,临沂百度代理公司有几个,wordpress 无觅,短视频app开发有哪些公司优质博文:IT_BLOG_CN 一、Tomcat 顶层架构 Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:Connector和…

优质博文:IT_BLOG_CN

一、Tomcat 顶层架构

img

Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:ConnectorContainer。从上图中可以看出Tomcat的心脏就是这两个组件,他们的作用如下:
【1】Connector用于处理连接相关的事情,并提供SocketRequestResponse相关的转化;
【2】Container用于封装和管理Servlet,以及具体处理Request请求;

一个Tomcat中只有一个Server,一个Server可以包含多个Service,一个 Service只有一个Container,但是可以有多个Connectors,这是因为一个服务可以有多个连接,如同时提供HttpHttps链接,也可以提供向相同协议不同端口的连接,示意图如下(EngineHostContext下边会说到):
img

多个Connector和一个Container就形成了一个Service,有了Service就可以对外提供服务了,但是Service还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非Server莫属了!所以整个Tomcat的生命周期由 Server控制。另外,上述的包含关系或者说是父子关系,都可以在tomcatconf目录下的 server.xml 配置文件中看出。

二、简要解释下 server.xml 配置文件的信息

server.xmlTomcat中最重要的配置文件,server.xml的每个元素都对应了 Tomcat中的一个组件;通过对xml文件中元素的配置,可以实现对Tomcat中各个组件的控制。

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.startup.VersionLoggerListener"/><Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/><Listener className="org.apache.catalina.core.JasperListener"/><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/><Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/><GlobalNamingResources><Resource auth="Container" description="User database that can be updated and saved"  factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/></GlobalNamingResources><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1" connectionTimeOut="20000" redirectPort="8443"/><Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/><Engine defaultHost="localhost" name="Catalina"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/></Realm><Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/><Context docBase="cas-server-webapp" path="/cas" reloadable="true" source="org.eclipse.jst.j2ee.server:cas-server-webapp"/><Context docBase="portal" path="/portal" reloadable="true" source="org.eclipse.jst.jee.server:portal"/></Host></Engine></Service>
</Server>

server.xml的整体架构(简洁版):

<Server><Service><Connector /><Connector /><Engine><Host><Context /><!-- 现在常常使用自动部署,不推荐配置Context元素,Context小节有详细说明 --></Host></Engine></Service>
</Server>

【1】顶层元素:元素是整个配置文件的根元素,元素代表一个Engine元素以及一组与之相连的Connector元素。
【2】连接器: 代表了外部客户端发送请求到特定Service的接口;同时也是外部客户端从特定Service接收响应的接口。
【3】容器:容器的功能是处理Connector接收进来的请求,并产生对应的响应。Engine包含HostHost包含Context。一个 Engine组件可以处理Service中的所有请求,一个Host组件可以处理发向一个特定虚拟主机的所有请求,一个Context组件可以处理一个特定Web应用的所有请求。

三、Tomcat 都有哪些核心组件

【1】ServerServer元素在最顶层,代表整个 Tomcat容器,因此他必须是server.xml中唯一一个最外层的元素。一个Server元素可以有一个或多个Service元素。

<Server port="8005" shutdown="SHUTDOWN">
</Server>

可以看到,最外层有一个 元素,shutdown属性表示关闭Server的指令;port属性表示Server接收shutdown指令的端口号,设置为-1可以禁掉该端口。Server 的主要任务,就是提供一个接口让客户端能够访问到这个 Service集合,同时维护它所包含的所有的 Service的生命周期,包含如何初始化,如何结束服务,如何找到客户端要访问的 Service。
【2】ServiceConnectorEngine外面包一层,把它们组合在一起,对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine;其中Connector的作用是从客户端接收请求,Engine的作用是处理接收进来的请求。

<Server port="8005" shutdown="SHUTDOWN"><Service name="Catalina"></Service>
</Server>

如上图,Server中包含一个名称为CatalinaService。实际上,Tomcat可以提供多个Service,不同的Service监听不同的端口。
【3】Connector接收连接请求,创建RequestResponse对象用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的RequestResponse对象传给Engine。通过配置 Connector,可以控制请求 Service的协议及端口号。

<Server port="8005" shutdown="SHUTDOWN"><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /></Service>
</Server>

通过配置第一个Connector,客户端可以通过8080端口号协议访问Tomcat。其中,protocol属性规定了请求的协议,port规定了请求的端口号,redirectPort表示当强制要求https而请求是 http时,重定向至端口号为8443ConnectorconnectionTimeout表示连接的超时时间。

在这个例子中,Tomcat监听Http请求,使用的是8080端口,而不是正式的 80端口;实际上,在正式的生产环境中,Tomcat也常常监听8080端口。而不是80端口。这是因为在生产环境中,很少讲Tomcat直接对外开放接收请求,而是在Tomcat和客户端之间加一层代理服务器(如Nginx),用于请求的转发、负载均衡、处理静态文件等;通过代理服务器访问Tomcat时,是在局域网中,因为一般仍使用8080端口。

第二个配置Connector,客户端可以通过8009端口使用AJP协议访问 TomcatAJP协议负责和其他的Http服务器(如Apache)建立连接;在把 Tomcat与其他服务器集成时,就需要用到这个连接器,之所以使用 Tomcat和其他服务器集成,是因为Tomcat可以用作Servlet/JSP容器,但是对静态资源处理速度较慢,不如ApacheIISHTTP服务器;因此常常将 TomcatApache等集成,前者做Servlet容器,后者处理静态资源,而AJP协议便负责TomcatApache的连接。TomcatApache等集成的原理如下图:
img
【4】EngineEngine 组件在Service组件有且只有一个;EngineService组件中的请求处理组件。Engine组件从一个或多个Connector中接收并处理,并将完成的响应返回给Connector,最终传递给客户端。前面说到,EngineHostContext都是容器,但是它们不是平行关系,而是父子关系:Engine包含HostHost包含Context

<Server port="8005" shutdown="SHUTDOWN"><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"></Engine></Service>
</Server>

其中name属性用于日志和错误信息,在整个Server中应该是唯一的。defalutHost属性指定了默认的host名称,当发往本机的请求指定的host名称不存在时,一律使用defaultHost指定的host进行处理;因此defaulthost的值,必须与Engine中的一个Host组件的name属性值匹配。
【5】EngineHostHostEngine的子容器。Engine组件中可以内嵌1个或者多个Host组件,每个Host组件代表Engine中的一个虚拟主机。Host组件至少有一个,且其中一个的name必须与 Engine组件中的defaultHost属性相匹配。
【6】Host的作用:Host虚拟主机的作用,是运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动、结束每个Web应用。Host组件代表的虚拟主机,对应服务器中一个网络名实体(如www.test.com](https://links.jianshu.com/go?to=http%3A%2F%2Fwww.test.com)"或IP地址"116.25.25.25);为了使用户可以通过网络名连接Tomcat服务器,这个名字应该在DNS服务器上注册。

客户端通常使用主机名来标识它们希望连接的服务器,该主机名也会包含在 HTTP请求头中,TomcatHTTP头中提取出主机名,寻找名字匹配的主机。如果没有匹配,请求会发送至默认的主机。因此默认主机不需要再DNS服务器中注册网络名,因为任何与所有Host名称不匹配的请求,都会路由至默认主机。
【7】Host的配置:name属性指定虚拟主机的主机名,一个Engine有且只有一个Host组件的name属性和Engine组件的 defaultHost属性相匹配;一般情况下,主机名需要是在DNS服务器中注册网络名,但是Engine指定的defaultHost不需要。

<Server port="8005" shutdown="SHUTDOWN"><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"></Host></Engine></Service>
</Server>

unpackWARs指定了是否将代表Web应用的WAR文件解压;如果是true,通过解压后的文件结构运行该Web应用,如果是false,直接使用WAR文件运行Web应用。
【8】ContextContext元素代表在虚拟主机上运行的一个Web应用。在后文中,提到Context、应用或Web应用,他们都代指Web应用,每个Web应用基于WAR文件,或WAR文件解压后对应的目录(这里称为应用目录)ContextHost的子容器,每个Host都可以定义任意多的Context元素。元素的配置:Context元素最重要的属性是 docBasepath,此外reloadable属性也比较常用。

docBase指定了该Web应用使用war包路径,或应用目录。需要注意的是:在自动部署场景下(配置文件位于xmlBase中),docBase不在appBase目录中,才需要指定;如果docBase指定的war包或应用目录就在appBase中,则不需要指定。因为Tomcat会自动扫描appBase中的war包和应用目录,制定了反而造成问题。

path指定了访问该Web应用上下文路径,当请求到来时,Tomcat根据Web应用的path属性与 URL匹配程度来选择Web应用处理相应请求。例如:Web 应用app1path属性是/app1Web应用app2path属性是"/app2",那么请求/app1/index.html会交由app1来处理;而请求/app2/index.html会交由 app2来处理。如果一个Context元素的path属性为"",那么这个Context是虚拟主机的默认的Web应用;当请求的uri与所有的path都不匹配时,使用该默认Web应用来处理。

但是,需要注意的是,在自动部署场景(配置文件位于xmlBase中),不能指定path属性,path属性由配置的文件的文件名,WAR文件的文件名或应用目录的名称自动推导出来。如扫描Web应该时,发现xmlBase目录下的app1.xml,或appBase目录下的app1.WARapp1应用目录,则该Web用于的path属性是app1。如果名称不是app1而是ROOT,则该Web应用时虚拟主机默认的Web应用,此时path属性推导为""。

reloadable属性指示tomcat是否在运行时监控在WEB-INF/classesWEB-INF/lib目录下class文件的改动。如果值为true,那么当class文件改动时,会重新web应用的重新加载。在开发环境下,reloadable设置为ture便于调试;但是在生产环境中设置为true会给服务器带来性能压力,因此reloadable参数的默认值为false。在该例子中,docBase位于HostappBase目录之外;path属性没有指定,而是根据app1.xml自动推导为app1

<Context docBase="D:\Program Files\app1.war" reloadable="true"></Context>

若是自动部署(即autoDeploy="true"),那么server.xml配置文件中没有Context元素的配置。这是因为Tomcat开启了自动部署,Web应用没有在 server.xml中配置静态部署,而是由Tomcat通过特定的规则自动部署。

四、Web 的自动部署

要开启Web应用的自动部署,需要配置所在的虚拟主机;配置的方式就是在配置Host元素的 deployOnStartupautoDeploy属性。如果deployOnStartupautoDeploy设置为true,则tomcat启动自动部署:当检测到新的Web应用或Web应用更新时,会触发应用的部署(或重新部署)。

二者的主要区别在于
【1】deployeOnStartuptrue时,Tomcat在启动时检查Web应用,且检测到所有的Web应用都试做新应用;
【2】autoDeploytrue时,Tomcat在运行时定期检查新的Web应用或Web应用的更新;

通过配置deployOnStartupautoDeploy可以开启虚拟主机自动部署Web应用;实际上,自动部署依赖于检查是否有新的或更改过的Web应用,而Host元素中的appBasexml配置设置了检查Web应用更新的目录。

其中,appBase属性指定Web应用所在的目录,默认值是webapps,这是一个相对路径,代表 Tomcat根目录下的webapps文件夹。xmlBase属性指定Web应用的XML配置文件所在的目录,默认值为conf/<engine_name><engine_name>,例如上面例子中,主机localhostxmlBase的默认值是$TOMCAT_HOME/conf/Catalina/localhost

五、appBase 和 docBase的区别

【1】appBase这个目录下面的子目录将自动被部署为应用,且war文件将被自动解压缩并部署为应用,默认为tomcatwebapps目录。
【2】docBase指定需要关联的项目自动解压并部署到appBase目录下。项目的名称由path属性决定。
先部署 需要注意,docBase所在的文件或者war包必须存在。否则项目启动找不到对应的目录。此时文件解压到appBase目录下,根据path属性,决定解压后的文件名。
若采用了<Host name="localhost" appBase="webapp" autoDeploy="true"> 配置,那么appBase目录下的应用目录将会再次部署。此时项目是部署了两遍。解决办法,设置autoDeploy="false"

六、Tomcat 顶层架构小结

【1】Tomcat中只有一个Server,一个Server可以有多个Service,一个Service可以有多个 Connector和一个Container
【2】Server掌管着整个Tomcat的生死大权;
【3】Service是对外提供服务的;
【4】Connector用于接受请求并将请求封装成RequestResponse来具体处理;
【5】Container用于封装和管理Servlet,以及具体处理Request请求;

知道了整个Tomcat顶层的分层架构和各个组件之间的关系以及作用,对于绝大多数的开发人员来说 ServerService对我们来说确实很远,而我们开发中绝大部分进行配置的内容是属于ConnectorContainer的,所以接下来介绍一下ConnectorContainer

七、Connector 和 Container的微妙关系

由上述内容我们大致可以知道一个请求发送到Tomcat之后,首先经过Service然后会交给我们的 ConnectorConnector用于接收请求并将接收的请求封装为RequestResponse来具体处理,RequestResponse封装完之后再交由Container进行处理,Container处理完请求之后再返回给 Connector,最后在由Connector通过Socket将处理的结果返回给客户端,这样整个请求的就处理完了!

Connector最底层使用的是Socket来进行连接的,RequestResponse是按照HTTP协议来封装的,所以Connector同时需要实现TCP/IP协议和HTTP协议。Tomcat既然处理请求,那么肯定需要先接收到这个请求,接收请求这个东西我们首先就需要看一下Connector

八、Container 架构分析

Container用于封装和管理Servlet,以及具体处理Request请求,在Connector内部包含了4个子容器,结构图如下:
img
4个子容器的作用分别是:
【1】Engine:引擎,用来管理多个站点,一个Service最多只能有一个Engine
【2】Host:代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点;
【3】Context:代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件;
【4】Wrapper:每一Wrapper封装着一个Servlet

下面找一个Tomcat的文件目录对照一下,如下图所示:
img

ContextHost的区别是Context表示一个应用,我们的Tomcat中默认的配置下webapps下的每一个文件夹目录都是一个Context,其中ROOT目录中存放着主应用,其他目录存放着子应用,而整个 webapps就是一个 Host站点。我们访问应用Context的时候,如果是ROOT下的则直接使用域名就可以访问,例如:www.ledouit.com,如果是Host(webapps)下的其他应用,则可以使用 www.ledouit.com/docs 进行访问,当然默认指定的根应用ROOT是可以进行设定的,只不过Host站点下默认的主营用是ROOT目录下的。

看到这里我们知道Container是什么,但是还是不知道Container是如何进行处理的以及处理完之后是如何将处理完的结果返回给Connector的。

十、Container 如何处理请求的

Container处理请求是使用Pipeline-Valve管道来处理的!(Valve是阀门之意)Pipeline-Valve是责任链模式,责任链模式是指在一个请求处理的过程中有很多处理者依次对请求进行处理,每个处理者负责做自己相应的处理,处理完之后将处理后的请求返回,再让下一个处理着继续处理。
img

但是!Pipeline-Valve使用的责任链模式和普通的责任链模式有些不同!区别主要有以下两点:
【1】每个Pipeline都有特定的Valve,而且是在管道的最后一个执行,这个Valve叫做BaseValveBaseValve是不可删除的;
【2】在上层容器的管道的BaseValve中会调用下层容器的管道。

我们知道Container包含四个子容器,而这四个子容器对应的BaseValve分别在:StandardEngineValveStandardHostValveStandardContextValveStandardWrapperValvePipeline的处理流程图如下:
img

【1】Connector在接收到请求后会首先调用最顶层容器的Pipeline来处理,这里的最顶层容器的 Pipeline就是EnginePipelineEngine的管道);
【2】在Engine的管道中依次会执行EngineValve1EngineValve2等等,最后会执行 StandardEngineValve,在StandardEngineValve中会调用Host管道,然后再依次执行HostHostValve1HostValve2等,最后在执行StandardHostValve,然后再依次调用Context的管道和 Wrapper的管道,最后执行到StandardWrapperValve
【3】当执行到StandardWrapperValve的时候,会在StandardWrapperValve中创建FilterChain,并调用其 doFilter方法来处理请求,这个FilterChain包含着我们配置的与请求相匹配的FilterServlet,其 doFilter方法会依次调用所有的FilterdoFilter方法和Servletservice方法,这样请求就得到了处理!
【4】当所有的Pipeline-Valve都执行完之后,并且处理完了具体的请求,这个时候就可以将返回的结果交给Connector了,Connector在通过Socket的方式将结果返回给客户端。

十一、tomcat 容器是如何创建 servlet类实例?用到了什么原理?

当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。(有时候也是在第一次请求时实例化)在servlet注册时加上如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

十二、共享 session处理

目前的处理方式有如下几种:
【1】使用Tomcat本身的Session复制功能。参考http://ajita.iteye.com/blog/1715312Session复制的配置)方案的有点是配置简单,缺点是当集群数量较多时,Session复制的时间会比较长,影响响应的效率;
【2】使用第三方来存放共享Session:目前用的较多的是使用memcached来管理共享Session,借助于memcached-sesson-manager来进行TomcatSession管理。参考http://ajita.iteye.com/blog/1716320(使用MSM管理Tomcat集群session
【3】使用黏性session的策略:对于会话要求不太强(不涉及到计费,失败了允许重新请求下等)的场合,同一个用户的session可以由nginx或者apache交给同一个Tomcat来处理,这就是所谓的 session sticky策略,目前应用也比较多。参考:http://ajita.iteye.com/blog/1848665(tomcat session sticky)Nginx默认不包含session sticky模块,需要重新编译才行(windows下我也不知道怎么重新编译)优点是处理效率高多了,缺点是强会话要求的场合不合适。

十三、关于 Tomcat 的 session数目

这个可以直接从Tomcatweb管理界面去查看即可,或者借助于第三方工具Lambda Probe来查看,它相对于Tomcat自带的管理稍微多了点功能,但也不多 ;

十四、Tomcat 一个请求的完整过程

首先DNS解析机器,一般是ng服务器ip地址,然后ng根据server的配置,寻找路径为yy/的机器列表,ip和端口。最后 选择其中一台机器进行访问。下面为详细过程:
【1】请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得;
【2】Connector把该请求交给它所在的ServiceEngine来处理,并等待来自Engine的回应;
【3】Engine获得请求localhost/yy/index.jsp,匹配它所拥有的所有虚拟主机Host
【4】Engine匹配到名为 localhost 的 Host(即使匹配不到也把请求交给该 Host处理,因为该Host被定义为该 Engine的默认主机);
【5】localhost Host获得请求/yy/index.jsp,匹配它所拥有的所有Context
【6】Host匹配到路径为/yyContext(如果匹配不到就把该请求交给路径名为”“的Context去处理);
【7】path=”/yy”Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet
【8】Context匹配到URL PATTERN*.jspservlet,对应于JspServlet类;
【9】构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServletdoGetdoPost方法;
【10】Context把执行完了之后的HttpServletResponse对象返回给Host
【11】HostHttpServletResponse对象返回给Engine
【12】EngineHttpServletResponse对象返回给Connector
【13】ConnectorHttpServletResponse对象返回给客户browser

十五、Tomcat 工作模式

Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器。进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类:
【1】Tomcat作为应用程序服务器:请求来自于前端的web服务器,这可能是Apache, IIS, Nginx等;
【2】Tomcat作为独立服务器:请求来自于web浏览器;

Tomcat的工作一般分为三种:
【1】bio 传统的Java I/O操作,同步且阻塞I/O,一个线程处理一个请求,并发量高时,线程数较多,浪费资源;(已经很少有人在使用)
【2】nio JDK1.4开始支持,同步阻塞或同步非阻塞IO,可以通过少量的线程来处理大量的请求;(从Tomcat 8版本开始默认就是这种模式)
【3】aprJNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能;(企业中使用较多)

十六、如何对 Tomcat 进行优化

【1】关闭Manager管理页面;(默认已经关闭)
【2】关闭host-mangent管理页面;(默认已经关闭)
【3】对Tomcat日志进行分割;
【4】定义Tomcat 404错误返回的页面;
【5】对JVM进行优化;
【6】对Tomcat线程池进行优化;

十七、如何对 Tomcat 进行优化

【1】关闭Manager管理页面;(默认已经关闭)
【2】关闭host-mangent管理页面;(默认已经关闭)
【3】对Tomcat日志进行分割;
【4】定义Tomcat 404错误返回的页面;
【5】对JVM进行优化;
【6】对Tomcat线程池进行优化;
【7】更改Tomcat的工作的模式;

相关文章:

Java面试——Tomcat

优质博文&#xff1a;IT_BLOG_CN 一、Tomcat 顶层架构 Tomcat中最顶层的容器是Server&#xff0c;代表着整个服务器&#xff0c;从上图中可以看出&#xff0c;一个Server可以包含至少一个Service&#xff0c;用于具体提供服务。Service主要包含两个部分&#xff1a;Connector和…...

2024年7月个人工作生活总结

本文为 2024年7月工作生活总结。 研发编码 “康威定律&#xff08;Conway’s Law&#xff09;”思考 康威定律是 50 年前&#xff08;1967 年&#xff09;由 梅尔文康威 提出的&#xff0c;最初的说法如下&#xff1a; Any organization that designs a system (defined broa…...

快速方便地下载huggingface的模型库和数据集

快速方便地下载huggingface的模型库和数据集 方法一&#xff1a;用于使用 aria2/wgetgit 下载 Huggingface 模型和数据集的 CLI 工具特点Usage 方法二&#xff1a;模型下载【个人使用记录】保持目录结构数据集下载不足之处 方法一&#xff1a;用于使用 aria2/wgetgit 下载 Hugg…...

JAVA小白学习日记Day10

1.线程锁 使用Runnable接口和Lambda表达式&#xff1a; 在 EasyThreadA 类的 mainA 方法中&#xff0c;通过创建 Runnable 实例 run&#xff0c;并使用Lambda表达式。 EasyThreadA::method 绑定到 run 上。然后创建两个线程 a 和 b&#xff0c;分别启动它们&#xff0c;它们会…...

分布式相关理论详解

目录 1.绪论 2.什么是分布式系统&#xff0c;和集群的区别 3.CAP理论 3.1 什么是CAP理论 3.2 一致性 3.2.1 计算机的一致性说明 1.事务中的一致性 2.并发场景下的一致性 3.分布式场景下的一致性 3.2.2 一致性分类 3.2.3 强一致性 1.线性一致性 a) 定义 a) Raft算法…...

Linux基础知识之Shell命令行及终端中的快捷键

1.察看历史命令快捷键 按键 操作 ctrl p 返回上一次输入命令字符 ctrl n 返回下一次输入命令字符 ctrl r 输入单词甚至词组搜索匹配历史命令 alt p 输入字符查找与字符相接近的历史命令 alt . 向之前执行的命令的最后一个参数轮循, 并将之添加到当前光标之后…...

研究生选择学习Android开发的利与弊?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Android的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;产品经理可以学学Axure快…...

怎么评价程序员40岁了竟然还在撸代码?

怎么评价外卖员40岁了竟然还在送外卖&#xff1f; 怎么评价滴滴司机40岁了竟然还在跑滴滴&#xff1f; 怎么评价老师40岁了竟然还在教书&#xff1f;难道程序员的本职工作不是敲代码吗&#xff1f;无论你是管理层还是螺丝钉&#xff0c;工业环境下怎么可能一行代码都不敲呢&…...

SQL优化(一)基础概念

基数&#xff08;cardinality&#xff09; 表中某个列的唯一键的数量叫做基数&#xff0c;主键列的基数就是表中数据的总行数。 可以用select count(distinct 列名) from 表名来计算基数。 基数的高低影像列的数据分布。 例如&#xff1a;先用Scott账户创建一个测试表test …...

【C++高阶】哈希:全面剖析与深度学习

目录 &#x1f680; 前言一&#xff1a; &#x1f525; unordered系列关联式容器1.1 unordered_map1.2 unordered_set 二&#xff1a; &#x1f525; 哈希的底层结构 ⭐ 2.1 哈希概念⭐ 2.2 哈希冲突⭐ 2.3 哈希函数⭐ 2.4 哈希冲突解决2.4.1 &#x1f304;闭散列2.4.2 &#x…...

PHP西陆招聘求职系统小程序源码

&#x1f525;【职场新宠】西陆招聘求职系统&#xff0c;你的职场加速器&#x1f680; &#x1f389;【开篇安利&#xff1a;一站式求职新体验】&#x1f389; 还在为找工作焦头烂额吗&#xff1f;是时候告别传统招聘网站的繁琐与低效了&#xff01;今天给大家种草一个超赞的…...

系统移植(十一)根文件系统(未整理)

文章目录 一、根文件系统中各个目录文件功能解析&#xff1a;二、对busybox进行配置和编译&#xff08;一&#xff09;执行make help命令获取make的帮助信息&#xff08;二&#xff09;对busybox源码进行配置&#xff0c;配置交叉编译器&#xff08;三&#xff09;执行make men…...

mac中docker常用命令总结

在Mac中&#xff0c;Docker的常用命令可以总结如下表格&#xff1a; 命令用途docker run运行一个新的容器实例。可以指定镜像名来启动容器&#xff0c;并支持多种参数来调整容器的运行方式。docker ps列出当前正在运行的容器。可以通过添加-a参数来列出所有容器&#xff08;包…...

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3(含分析过程)

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3&#xff08;含分析过程&#xff09; 目录 Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3&#x…...

Linux 4: Bash

1 Bash环境 1 命令执行的顺序 1 绝对路径、相对路径 2 alias 3 内置的builtin 4 $PATH找到的第一个命令 2 bash的登录信息&#xff0c;保存在哪里&#xff1f; 保存在/etc/issue. 3 bash的环境配置文件 1 如果是login shell&#xff0c;读以下&#xff0c;有优先级:如果…...

第十四天学习笔记2024.7.25

Git安装 1.安装git 2.创建git仓库 3.创建文件并且提交文件 &#xff08;git add . 将文件提交到缓存&#xff09;&#xff08;git commit -m 说明&#xff09;&#xff08;git log 查看历史&#xff09; 4.分支创建与解决分支冲突问题 创建主机&#xff08;git 192.1…...

花几千上万学习Java,真没必要!(三十七)

IO 流&#xff1a; 读取数据到内存的过程&#xff1a;可以包括从硬盘、网络或其他存储设备中将数据加载到内存中&#xff0c;以便程序能够访问和处理这些数据。 写入数据到硬盘的过程&#xff1a;通常是将内存中的数据保存到硬盘或其他持久性存储设备中&#xff0c;以便长期存…...

SSA-GRU(自适应平滑自回归门控循环单元)预测模型及其Python和MATLAB实现

SSA-GRU&#xff08;自适应平滑自回归门控循环单元&#xff09;预测模型是结合了SSA&#xff08;Singular Spectrum Analysis&#xff0c;奇异谱分析&#xff09;和GRU&#xff08;Gated Recurrent Unit&#xff0c;门控循环单元&#xff09;模型的一种时间序列预测方法。以下是…...

【ROS】让你的回调函数并行起来

【前言】 众所周知&#xff0c;ROS中的所有回调函数&#xff0c;都由 ros::spin() 这个家伙来统一管理和唤醒。这里说的是所有通过ROS方式创建出来的回调函数&#xff0c;比如ros::Subscriber、ros::Timer等等的回调函数。 【举例】 我们先来看一个示例节点&#xff1a; #i…...

M12电连接器的编码分类及应用领域分析

12电连接器的编码主要包括A、B、C、D、X、S、T、K、L等类型&#xff0c;每种编码都有其特定的应用场景和功能&#xff1a; A编码&#xff1a;适用于传感器、直流电、1G以太网。 B编码&#xff1a;主要用于PROFIBUS总线系统。 C编码&#xff1a;适用于交流电。 D编码&#x…...

基于YOLOv8的道路裂缝坑洼检测系统

基于YOLOv8的道路裂缝坑洼检测系统 (价格88) 包含 【“裂缝”,“凹坑”】 2个类 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视频检测&#xff0c;摄像头实时检测。 &#xff08;该系统可以根据数据训练出的yolov8的权重文件&#xff0c;运用在其他检测系…...

蓝鹏测径仪非标定制订制流程

测径仪通常属于非标定制设备&#xff0c;非标定制意味着这些设备不是按照标准规格批量生产的&#xff0c;而是根据特定的客户需求和应用场景设计和制造的。例如&#xff0c;某些测径仪可能需要特殊的测量范围、精度、传感器或软件来满足特定的工业检测要求。 测径仪非标定制的…...

vue基础3

1.推荐好用的第三方框架 BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务 1.moment.js 2.dayjs 2.收集表达数据 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Document</title><…...

LINUX -exec函数族

1、功能&#xff1a; *让父子进程来执行不相干的操作 *能够替换进程地址空间的代码.text段 *执行另外的程序&#xff0c;不需要创建额外的的地址空间 *当前程序中调用另外一个应用程序 2、执行目录下的程序&#xff1a; *指定执行目录下的程序 int execl(const char *path,…...

c++ 智能指针shared_ptr与make_shared

shared_ptr是C11引入的一种智能指针&#xff0c;‌它允许多个shared_ptr实例共享同一个对象&#xff0c;‌通过引用计数来管理对象的生命周期。‌当最后一个持有对象的shared_ptr被销毁时&#xff0c;‌它会自动删除所指向的对象。‌这种智能指针主要用于解决资源管理问题&…...

2024-HW最新漏洞整理及相应解决方案(二)

目录 前言&#xff1a; 漏洞 1.用友NC系统电采complainjudge接口的sql注入漏洞 2.用友U8 CRM产品存在SQL注入漏洞 3.WordPress LMS 插件任意文件上传漏洞 4.Oracle Fusion Middleware 安全漏洞CVE-2024-21181 5.WordPress plugin LearnPress 安全漏洞CVE-2024-6589 6.W…...

spring boot整合JPA兼容MySQL8和达梦数据库8

前言 Spring Boot是一个基于Spring框架的快速开发框架&#xff0c;它可以简化Spring应用的配置和部署过程。JPA&#xff08;Java Persistence API&#xff09;是Java持久化规范的一种实现&#xff0c;它提供了一种统一的方式来访问和管理数据库。MySQL和达梦数据库都是常用的关…...

规划决策算法(四)---Frenet坐标系

知乎&#xff1a;坐标系转换 1.Frenet 坐标系 什么是 Frenet 坐标系&#xff1a; 为什么使用 Frenet 坐标系&#xff1a; 通常情况&#xff0c;我们只会关注车辆当前距离左右车道线的距离&#xff0c;来判断是否偏离车道&#xff0c;是否需要打方向盘进行方向微调。而不是基于…...

大数据处理:大数据处理框架Hadoop、Spark

大数据处理是当代信息技术领域的一个重要分支&#xff0c;它涉及到海量数据的存储、管理和分析。为了高效地应对大数据处理的挑战&#xff0c;多种框架被开发出来&#xff0c;其中Hadoop和Spark是最为知名和广泛应用的两种。以下将详细介绍这两种框架以及它们在大数据处理中的应…...

网传的高频流量费会影响到个人用户的算法和策略T0吗?

先解答这个问题&#xff1a;高频的流量费这个确实是会影响你自己算法的交易的&#xff01;但是&#xff0c;强调一个但是&#xff1a;有的券商是没有流量费的&#xff01;小编今天就来带大家了解一下&#xff01;第一&#xff1a;算法交易的应用场景&#xff01; 算法交易的主…...