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

Servlet-JAVA【笔记】

JAVA_WEBTomcattomcat工作流程servlet的生命周期ServletConfigServletContextHttpServletRequestHttpServletResponse前端提交的数据和请求域里的数据的区别应用域和请求域的区别如何做到两个servlet之间交流/共享数据请求转发和重定向区别注解开发版servlet3.0之后什么是会话sessionCookie禁用了session还能找到吗Cookiecookie有啥用JSPjavabeanEL表达式JSTL标签库原理常用的标签Filter 过滤器Listener监听器MVC架构模式原理项目实战(未完)Tomcattomcat是一款web应用服务器使用java语言写的安装后其目录下存在有大量的java文件还是我们熟悉的java。下面整理下大致流程tomcat工作流程1、服务器tomcat启动后看作一个永远不结束的main函数内部有死循环它的监听器会监听一个默认端口号8080在conf/server.xml文件中的Connector标签配置2、当有请求来浏览器端按下回车发送http请求底层创建socket与服务器建立链接-三次握手链接建立好后那么这个监听器会解析请求头浏览器端的地址包含在请求头里并封装成请求对象Request3、然后tomcat内部的一个Engine根据请求域名和请求路径里的项目名会匹配到部署在tomcat里的web应用注意web应用部署到tomcat里后可以理解有这样一个map项目路径作键部署的项目作为值4、tomcat找到具体的项目后就根据已经部署的项目的一个配置文件web.xml里的servlet类的入口路径再次和请求路径里项目后的路径进行匹配从而获取到XxxServlet类的全类名再通过反射机制创建xxxServlet对象并把创建的对象加入Map容器如果容器里没有接着调用该对象里的service方法注servlet对象创建后被tomcat用tomcat自己jarkata.servlet包下的Servlet接口来接受5、service方法处理完业务逻辑后生产出一个响应对象Response那么这个响应对象被Connector返回给客户端浏览器浏览器渲染后就能看到自己访问的资源。总结从上面得出一下几点1我们自己部署的项目不是随意放置一个位置的而是按照tomcat的要求放在指定目录下webapps2我们的项目必须包含一个配置文件web.xml且这个配置文件在自己的项目里有固定的目录位置不能随意移动否则tomcat找不到3servlet对象是单例的注意这里的单例不是指javase阶段里单例模式而是这个对象是tomcat的容器帮我们创建的且默认情况下只创建一个对象特殊情况需特殊配置来管理4tomcat里有一套自己的servlet接口和实现且在tomcat10及其以后这个套servlet被更名叫做jarkata.servlet,而不是老版的javax.servlet5被部署的项目的目录结构servlet的生命周期1服务器启动后默认不创建servlet对象当首次请求到达时自动创建servlet对象构造方法执行–init方法执行–service方法执行2当同一类的请求第2,3,4…100次到达时不会再创建新servlet对象仅service方法执行3当服务器关闭之前执行一次destory方法ServletConfig1servlet对象的配置信息对象2ServletConfig对象中封装了web.xml中标签的servlet配置信息3一个servlet对象对应一个ServletConfig对象也是在首次请求到达时tomcat创建的对象随着servlet创建而创建4常用方法记忆获取的是web.xml文件中的东西getInitParameter(String name)//通过初始化参数的name获取valuegetInitParameterNames//获取所有初始化参数的namegetServletContext//获取ServletContext上下文对象getServletName//获取servlet的nameServletContext1全局的上下文对象一个项目启动后对应一个该对象应用级对象2存全局数据、获取上下文路径 / 资源真实路径、读全局配置参数例如解决路径硬编码、实现跨 Servlet 数据共享且该对象里存储的数据一般是只读的且数据量小避免并发修改和内存被占用问题。3ServletContext对象在服务器启动阶段创建在关闭时销毁4该对象常用两个方法getInitParameter(String name)//根据name获取context-param标签的valuegetInitParameterNames//获取所有全局的标签namegetContextPath()//获取上下文路径重要输出/部署的项目名getRealPath(String path)//根据传入的相对路径返回该资源在项目中的绝对路径log(参1参2)这是一个记录日志的方法日志内容会记入tomcat的logs目录下注以上的配置信息属于应用级的配置信息一般一个项目中共享的配置信息会放到以上的标签当中如果你的配置信息只是想给某一个servlet作为参考那么你配置到servlet标签当中即可HttpServletRequestHttpServletRequest对象中封装了什么信息HttpServletRequest简称request对象。HttpServletRequest中封装了请求协议的全部内容。Tomcat服务器WEB服务器将“请求协议”中的数据全部解析出来然后将这些数据全部封装到request对象当中了。也就是说我们只要面向HttpServletRequest就可以获取请求协议中的数据。HttpServletResponseHttpServletResponse对象是专门用来响应HTTP协议到浏览器的把数据返回给浏览器前端提交的数据和请求域里的数据的区别1两种数据都是被封装在HttpServletRequest类型的对象里2在后端获取两种数据的方式相似但使用的方法不同3前端提交的数据被封装request对象的Map映射参数容器里paramsMap请求域里的数据一般都是由开发人员主动存入的为后续的其他servlet/jsp使用转发、el表达式等会用到它也是一个Map映射的属性容器attributeMap注请求转发并不会使当前请求结束还是同一个请求被拷贝在服务器内部流转因此请求域里的数据还存在而重定向则是浏览器发生两次请求第二次是浏览器的自动行为因此不能在重定向后再次使用到用户第一次提交的数据应用域和请求域的区别应用域就是ServletContext存在于整个项目生命周期内想象成一块公共存储数据的区域可以存入一些公共的数据服务器关闭时销毁请求域存在于一次请求的过程中也是想象一块存在周期短一点的存储数据的公共区域请求结束就销毁如何做到两个servlet之间交流/共享数据方法一将数据放到ServletContext应用域当中不推荐-大材小用浪费资源方法二将数据放到请求域中然后使用请求转发注转发的下一个资源必须是一个Servlet吗不一定只要是Tomcat服务器当中的合法资源都是可以转发的。例如jsp、html…。转发的时候路径的写法要注意转发的路径以“/”开始不加项目名。请求转发和重定向区别1请求转发RequestDispatcher不管转发多少次都是一次请求因为在转发的过程走中使用forward(req,rep)把当前的请求对象和响应对象传递给下一个资源2重定向的路径上一定要加上项目名这个路径返给浏览器因为浏览器发送请求时需要项目名的服务器才好定位访问哪个项目因此浏览器会向着服务器发第二次的请求自发的全新的请求。⚠️response.sendRedirect(“/项目名/路径资源…”);转发会存在浏览器的刷新问题。转发浏览器地址栏地址不变重定向地址栏地址变了注解开发版servlet3.0之后以前每写一个业务功能都要增加一个XxxServlet类继承HttpServlet且还要在web.xml中配置那么当业务量多时就会产生“类爆炸”的情况而注解就是解决这种麻烦我们只需要定义继承HttpServlet的类然后在类上属性上使用注解就能完成以前servlet编写和注册web.xml那一套不再需要配置web.xml只需少量配置web.xml就能完成项目的配置。用法在创建的类上使用WebServlet注解就标识这个类是XxxServlet类。该注解里的属性有name、urlPatterns、loadOnStartUp、value什么是会话session用户打开浏览器并进行一系列的点击操作然后将浏览器关闭这整个过程可以认为是一次会话。会话在服务器端也对应着一个java对象。jarkata.servlet.http.HttpSession叫做session。一次会话的过程当中包含多次请求session其实是一种B/S架构的一种机制规范不同语言都对这种会话机制有具体的实现主要用途用来保存会话状态比如用户登录系统了用session保存这种用户的登录状态举例张三打开一个浏览器A李四打开一个浏览器B访问服务器之后在服务器端会生成张三专属的session对象李四专属的session对象自主思考为什么不使用request对象保存会话状态为什么不使用ServletContext对象保存会话状态session的实现原理前置了解sessionid—每一个sessionid唯一捆绑一个账号就相当于身份证上的身份证号(sessionid)唯一对应一个人。这个sessionid一般放在浏览器的cookie里的。**大概流程**当一个用户用浏览器首次登录系统此时sessionid为空服务器端判断用户的sessionid是否合法不合法则被拦截到输入用户名和密码登录页面然后输入密码登录成功后会新创建一个sessionid存入一个map容器里服务器管理这个容器并把它和返回数据一块返回给浏览器浏览器会自动把sessionid存入cookie下次访问时会这个id会和用户提交的数据一块发送到服务器。注服务器端存储session对象是以其id为keysession对象为value存储在一个Map集和中的。当浏览器关闭时cookie消失(持久化的例外)session也就失效了Cookie禁用了session还能找到吗cookie禁用是指服务器正常发送cookie给浏览器但是浏览器不要了。拒收了。并不是服务器不发了这时就会产生每一次请求都会重新登录产生新的session对象。cookie禁用了session机制还能实现吗可以。需要使用URL重写机制http://localhost:8080/servlet12/test/session;jsessionid19D1C99560DCBF84839FA43D58F56E16但URL重写机制会提高开发者的成本。开发人员在编写任何请求路径的时候后面都要添加一个sessionid给开发带来了很大的难度很大的成本。所以大部分的网站都是这样设计的你要是禁用cookie你就别用了。总结一下到目前位置我们所了解的域对象request对应的类名HttpServletRequest请求域请求级别的session对应的类名HttpSession会话域用户级别的application对应的类名ServletContext应用域项目级别的所有用户共享的这三个域对象的大小关系request session application这三个域对象都有以下三个公共的方法setAttribute向域当中绑定数据getAttribute从域当中获取数据removeAttribute删除域当中的数据使用原则尽量使用小的域。Cookiesession的实现原理中每一个session对象都会关联一个sessionid例如sessionid41C481F0224664以上的这个键值对数据其实就是cookie对象。对于session关联的cookie来说这个cookie是被保存在浏览器的“运行内存”当中。只要浏览器不关闭用户再次发送请求的时候会自动将运行内存中的cookie发送给服务器。例如这个Cookie: JSESSIONID41C481F0224664BDB28E95081D23D5B8就会再次发送给服务器。服务器就是根据41C481F0224664这个值来找到对应的session对象的。cookie有啥用cookie和session机制其实都是为了保存会话的状态cookie机制是将会话的状态保存在浏览器客户端上cookie里的数据存在浏览器客户端上的session机制是将会话的状态保存在服务器端上应用商场购物车未登录下的购物车状态保存、邮箱系统的十天免登录功能…注网上找些案例配合理解为佳。为什么要有cookie和session机制呢因为HTTP协议是无状态 无连接协议关于cookie的pathcookie关联的路径浏览器在什么请求路径下会自动携带这个 Cookie 给服务器假设现在发送的请求路径是“http://localhost:8080/servlet13/cookie/generate”生成的cookie如果cookie没有设置path默认的path是什么浏览器会自动取「当前请求路径去掉最后一级」作为默认 path即pathhttp://localhost:8080/servlet13/cookie。也就是说以后只要浏览器的请求路径是http://localhost:8080/servlet13/cookie 这个路径以及这个路径下的子路径cookie都会被发送到服务器。手动设置cookie的pathcookie.setPath(“/servlet13”); 表示只要是这个servlet13项目的请求路径都会提交这个cookie给服务器。总结cookie和session机制其实都不是java中的机制它们都是http协议的一部分http协议中规定任意一个cookie都是由name和value这样的字符串键值对组成。java的Servlet规范中对cookie是支持的提供了一个类jakarta.servlet.http.Cookie来专门表示cookie数据然后通过response对象的addCookie方法把cookie数据发送给浏览器且可以在java中设置cookie在浏览器端的有效时间和设置cookie保存路径JSPJSPJava Server Pages是 一种动态网页开发技术核心是在 HTML 页面中嵌入 Java 代码本质上是一种特殊的 Servlet—— 服务器会把 JSP 页面编译成 Java 类Servlet 子类最终通过 Servlet 处理请求、生成动态 HTML 响应。直观上理解就是HTML中嵌入Java 代码 JSP 的组合体目的是解决纯 Servlet 拼接 HTML 代码繁琐的问题。核心语法JSP 允许在 HTML 里通过「脚本标签」嵌入 Java 逻辑常用标签脚本片段% java代码 % 用于判断业务逻辑 输出表达式%变了/java表达式% 向页面输出内容翻译后变为java代码out.print() 声明标签%!变量和方法% 声明jsp类的变量和方法 注视 %-- 内容 --%. jsp专属注释不会输出到页面核心指令page它用来定义整个 JSP 页面的全局属性比如编码、语言、导入包、会话管理等 —— 所有 page 指令都要写在 JSP 页面的开头通常第一行在html标签之前% page 属性名1值1 属性名2值2 ... % 常用的属性名有 import(导java包多个包用“”隔开) language(设置编程语言-只能是java也默认是java) session”true/false“、true自动创建内置对象false不创建session对象使用session包错 errorPageerror.jsp当页面异常时跳转到error.jsp isErrorPage“true”标记当前页面是错误页面可以使用exception对象 contentType设置响应的类型和编码 isELIgnoredtrue 表示忽略el表达式核心指令include、taglibinclude指令包含指令在JSP中完成静态包含很少用 taglib指令引入标签库的指令。这个到JJSTL标签库1️⃣JSP对大小写敏感import 是唯一可重复的属性。2️⃣errorPage 的路径如果写相对路径如 error.jsp则和当前 JSP 同目录如果写绝对路径如 /WEB-INF/error.jsp则从项目根目录开始。jsp的九大内置对象jakarta.servlet.jsp.PageContext pageContext 页面作用域jakarta.servlet.http.HttpServletRequest request 请求作用域jakarta.servlet.http.HttpSession session 会话作用域jakarta.servlet.ServletContext application 应用作用域pageContext request session application以上四个作用域都有setAttribute、getAttribute、removeAttribute方法。以上作用域的使用原则尽可能使用小的域。java.lang.Throwable ----exceptionjakarta.servlet.ServletConfig ----configjava.lang.Object ----page其实就是this当前的servlet对象akarta.servlet.jsp.JspWriter ----outjakarta.servlet.http.HttpServletResponse —responsejavabean什么是javabean实际上javabean你可以理解为符合某种规范的java类比如有无参数构造方法属性私有化对外提供公开的set和get方法实现java.io.Serializable接口重写toString重写hashCodeequalsjavabean其实就是java中的实体类。负责数据的封装。EL表达式在前面的jsp文件中经常看到一堆一堆的% java代码 %、%%这样的代码看起来就很混乱脑壳大所以就有了el表达式el表达式可以算是jsp语法的一部分。用于整洁美观jsp代码。EL表达式出现在JSP中主要是从某个作用域中取数据然后将其转换成字符串然后将其输出到浏览器。这就是EL表达式的功效。从某个域中取出数据四个域pageContext、request、session、application将取出的数据转化为字符串如果是一个java对象也会自动调用java对象的toString方法将其转换成字符串。将字符串输出到浏览器和% %一样将其输出到浏览器语法${表达式}表达式主要可以写存储到域对象当中时的name。如果存入到域中的是一个对象要获取对象里的属性必须要求对象有getXxx方法才能使用{对象.属性}el表达式还对null值做了处理如果为null则为空串EL表达式优先从小范围中读取数据pageContext request session applicationEL表达式中有四个隐含的隐式的范围pageScope对应的是 pageContextrequestScope 对应的是requestsessionScope 对应的是sessionapplicationScope对应的是applicationEL表达式取数据的形式有两种使用“.方式第二种[ ] 如果存储到域的时候这个name中含有特殊字符可以使用 [ ]- request.setAttribute(“abc.def”, “zhangsan”);- requestScope.abc.def 这样是无法取值的。应该这样${requestScope[“abc.def”]}掌握使用EL表达式怎么从Map集合中取数据掌握使用EL表达式怎么从数组和List集合中取数据掌握EL表达式中其他的隐式对象掌握EL表达式的运算符掌握通过EL表达式获取应用的根。。。JSTL标签库jsp中引入标签库使用taglib指令%taglib prefix“c” uri“http://java.sun.com/jsp/jstl/core” %注prefix“这里随便起一个名字就行了核心标签库一般大家默认为c”原理JSTL标签的原理%taglib prefixc urihttp://java.sun.com/jsp/jstl/core % 以上uri后面的路径实际上指向了一个xxx.tld文件。 tld文件实际上是一个xml配置文件。 在tld文件中描述了“标签”和“java类”之间的关系。 以上核心标签库对应的tld文件是c.tld文件。它在哪里。 在jakarta.servlet.jsp.jstl-2.0.0.jar里面META-INF目录下有一个c.tld文件。常用的标签Filter 过滤器Filter可以在Servlet这个目标程序执行之前添加代码。也可以在目标Servlet执行之后添加代码就像渔网一样可以过滤筛选。之前之后都可以添加过滤规则一般情况下都是在过滤器当中编写公共代码。步骤1️⃣建立一个类实现一个接口jarkata.servlet.Filter。并且实现这个接口当中所有的方法。init方法在该对象创建后调用且只执行一次doFilter方法用户发送多少次请求执行多少次该方法destory方法在Filter对象被释放/销毁之前调用并且只调用一次2️⃣在web.xml中对Filter进行配置这个配置和Servlet很像filter filter-namefilter2/filter-name filter-classFilter的实现类全名/filter-class /filter filter-mapping filter-namefilter2/filter-name url-pattern*.do/url-pattern /filter-mapping 或者使用注解WebFilter({*.do}) 来代替注Filter对象默认情况下在服务器启动的时候会新建对象和servlet区别开filter和servlet一样都是单实例的。Filter的优先级天生的就比Servlet优先级高如何一个请求路径分别对应filter和servlet则会先执行filter再执行servlet路径配置1前缀路径匹配模式以/开始例如 /a.do/dept/save/*匹配所有路径2后缀匹配模式不能以/开始后缀名匹配必须以 *. 开头不能以 / 开头 例如*.do、*.jsp 含义匹配所有指定后缀结尾的请求零碎规则1过滤器的调用顺序遵循栈数据结构2如果使用的是WebFilter注解则它们会比较过滤器名字来决定调用顺序3Filter采用责任链设计模式Listener监听器监听器是Servlet规范中的一员。就像Filter一样。Filter也是Servlet规范中的一员。在Servlet中所有的监听器接口都是以“Listener”结尾。有什么作用监听器实际上是Servlet规范留给我们javaweb程序员的特殊时机在触发这个时机的事情发生时执行一段代码。常用的监听器实现一个监听器步骤第一步编写一个类实现上述的监听器接口并实现里面的方法要执行的那一小段代码就写在对应的方法中第二步在web.xml中进行配置或用WebListener注解代替listener listener-class监听器类/listener-class /listener //注所有监听器中的方法都是不需要javaweb程序员调用的由服务器来负责调用案例编写一个监听器实现一个系统项目中当前登录在线的人数MVC架构模式原理MVC是软件工程中解耦业务逻辑和页面展示的经典架构模式并非专门某个语言所属是一种通用的设计思想M是指模型Model与处理业务逻辑相关封装数据javabean/pojo业务规则如订单校验数据持久化数据查询和数据修改入库…V是指视图View处理所有界面的展示逻辑接受controller传递的参数纯展示数据不关心数据来源专注页面的渲染C是指控制器Controller主要是请求分发和组件协调接受用户请求如用户下单调用model层接口做数据处理将处理结果传递给View最终返回响应结果设计原则单一职责原则每个组件只做一件事Model 管数据View 管展示Controller 管协调开闭原则扩展功能时新增组件即可如新增「秒杀商品」Model无需改 View 和 Controller依赖倒置原则Controller 依赖 Model 的抽象如接口而非具体实现便于替换数据来源如从 MySQL 换成 Redis关注点分离开发时前端只关注 View后端只关注 Model接口对接通过 Controller 约定。项目实战(未完)一、技术选型后端Javaservletjsp前端htmlcssjs数据库mysql…未完待续…

相关文章:

Servlet-JAVA【笔记】

JAVA_WEBTomcattomcat工作流程servlet的生命周期ServletConfigServletContextHttpServletRequestHttpServletResponse前端提交的数据和请求域里的数据的区别?应用域和请求域的区别?如何做到两个servlet之间交流/共享数据?请求转发和重定向区别…...

超详细图解:HTTPS 中的 SSL/TLS 完整握手过程(面试必背)

超详细图解:HTTPS 中的 SSL/TLS 完整握手过程(面试必背)摘要一、HTTPS 与 SSL/TLS 的关系二、SSL/TLS 握手:核心作用三、SSL/TLS 握手:标准流程(TLS 1.2 完整版)3.1 握手流程图3.2 逐步骤详细解…...

使用Alpine配置WSL ssh门户匚

1. 哑铃图是什么? 哑铃图(Dumbbell Plot),有时也称为DNA图或杠铃图,是一种用于比较两个相关数据点的可视化图表。 它源于人们对更有效数据比较方式的持续探索。 在传统的时间序列比较中,我们通常使用两条折…...

栅极驱动核心原理 - DESAT保护

栅极驱动核心原理 - DESAT保护 它是一张电路实现图 + 文字说明图,旨在解释DESAT保护在驱动IC内部是如何通过硬件电路实现的——即如何利用恒流源、电阻、二极管和比较器来检测 VCEV_{CE}V...

深度解析TLS/SSL协议:工作原理、握手流程与网络安全应用

深度解析TLS/SSL协议:工作原理、握手流程与网络安全应用摘要一、TLS/SSL协议:基础定义1.1 TLS/SSL协议:是什么1.2 TLS/SSL协议:三大核心安全能力二、TLS/SSL协议:核心工作原理三、TLS/SSL协议:标准握手流程…...

计算机毕业设计:Python水网数据可视化与水位预测系统 Flask框架 数据分析 可视化 大数据 AI 线性回归 河流数据 水位预测(建议收藏)✅

博主介绍:✌全网粉丝50W,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,…...

qsort函数深度解析:如何自定义比较函数?

文章目录qsort函数深度解析:如何自定义比较函数?🚀什么是qsort函数?🤔自定义比较函数的重要性🎯基本示例:排序整数数组🔢排序字符串数组📝排序结构体数组🏗️…...

C语言中的泛型尝试:void_ + 函数指针

文章目录C语言中的泛型尝试:void* 函数指针 🧪什么是泛型?🤔C语言中的工具:void* 和函数指针 🛠️代码示例:泛型排序函数 📝进阶示例:泛型链表 📚优缺点分析…...

服务器Docker容器使用

0.基础指令 # 查看容器 docker ps docker images1.删除旧容器 docker rm -f novnc-test 2>/dev/null2.删除旧镜像 docker rmi ubuntu-novnc-vnc:22.04 2>/dev/null3.确认删除情况 docker ps -a | grep novnc-test docker images | grep ubuntu-novnc-vnc4.重新加载镜像 c…...

使用开源 Authentik 实现 AWS 单点登录

前言 懒得自己编了, Gemini 这样介绍 Authentik: 简单来说,Authentik 是一款功能极其强大的开源身份验证与访问管理 (IAM) 解决方案。 如果你觉得像 Okta 或 Auth0 这种商业服务太贵,或者觉得像 Keycloak 这种传统方案配置起来太头疼,那么…...

袁永福 电子病历,医疗信息化际

在AI辅助开发的语境下,Skill就是一个包含了领域知识、最佳实践、代码模板的知识包。 以"DAO层CRUD生成"为例,一个Skill包含: /mnt/skills/dao-crud/ ├── SKILL.md # 使用说明 │ ├── 何时使用这个Skill │ …...

算法优化中的多线程数据一致性问题的技术9

多线程数据一致性问题概述多线程环境下,数据一致性是算法优化中常见的技术挑战。多个线程同时访问和修改共享数据可能导致竞态条件、脏读或不可重复读等问题。确保数据一致性对算法正确性和性能至关重要。常见数据一致性问题类型竞态条件(Race Condition…...

BM25(Best Matching 25)信息检索

文章目录一、BM25本质在做什么二、核心思想(直观理解)1️⃣ 词出现次数(Term Frequency, TF)2️⃣ 词的稀有程度(IDF)3️⃣ 文档长度归一化三、BM25公式(核心)这是标准BM25打分函数&…...

AI 编程盛行的时代,为什么 “『DC- WFW』” 仍然具有必要性?沼

这&#xff0c;是一个采用C精灵库编写的程序&#xff0c;它画了一幅漂亮的图形&#xff1a; 复制代码 #include "sprites.h" //包含C精灵库 Sprite turtle; //建立角色叫turtle void draw(int d){for(int i0;i<5;i)turtle.fd(d).left(72); } int main(){ …...

算法的能耗模型与绿色计算优化方向的技术4

能耗模型基础理论算法复杂度与能耗关系时间复杂度与空间复杂度对硬件资源消耗的影响&#xff0c;建立数学模型描述指令执行次数、数据访问频率与能耗的关联。硬件层面的能耗因素CPU动态功耗&#xff08;CVf&#xff09;、静态功耗、内存访问能耗、缓存命中率等关键参数&#xf…...

3步解决浏览器Markdown阅读难题:从乱码到专业渲染的蜕变之路

3步解决浏览器Markdown阅读难题&#xff1a;从乱码到专业渲染的蜕变之路 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 你是否遇到过这样的窘境&#xff1a;在浏览器中打开本地M…...

Docker 容器中运行 AI CLI 工具:用户隔离与持久化卷实战指南暗

环境安装 pip install keystone-engine capstone unicorn 这3个工具用法极其简单&#xff0c;下面通过示例来演示其用法。 Keystone 示例 from keystone import * CODE b"INC ECX; ADD EDX, ECX" try:ks Ks(KS_ARCH_X86, KS_MODE_64)encoding, count ks.asm(CODE)…...

电子电路中的“心脏”:电源铝

前言 Kubernetes 本身并不复杂&#xff0c;是我们把它搞复杂的。无论是刻意为之还是那种虽然出于好意却将优雅的原语堆砌成 鲁布戈德堡机械 的狂热。平台最初提供的 ReplicaSets、Services、ConfigMaps&#xff0c;这些基础组件简单直接&#xff0c;甚至显得有些枯燥。但后来我…...

如何永久保存微信聊天记录:WeChatMsg本地数据备份完整指南

如何永久保存微信聊天记录&#xff1a;WeChatMsg本地数据备份完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...

第十五节:启动序列——从 claude 命令到 REPL 就绪

知识图谱定位:前面两节我们分别拆解了终端 UI(第13节 React Ink)和命令系统(第14节 斜杠路由)——它们都假设一个前提:REPL 已经就绪。但从用户在终端敲下 claude 按回车,到他看到交互界面,这中间到底发生了什么?答案是一个精心设计的三阶段启动序列:cli.tsx::main()…...

贾子科学的历史意义与现实影响:挑战西方科学哲学霸权的新范式

贾子科学的历史意义与现实影响&#xff1a;挑战西方科学哲学霸权的新范式摘要&#xff1a; 贾子科学是贾龙栋于2025-2026年提出的原创科学哲学体系&#xff0c;其历史意义在于直接挑战以波普尔证伪主义为核心的西方科学划界标准&#xff0c;提出“公理驱动可结构化”新标尺&…...

Vitest单元测试教程

Vitest 是 Vite 生态的极速单元测试框架&#xff0c;API 兼容 Jest&#xff0c;上手快、配置简单、性能极高。下面从 安装 → 配置 → 编写测试 → 常用断言 → Mock → 组件测试 → 运行与覆盖率 完整流程带你上手。一、安装 1. 基础安装 npm i -D vitest # 或 yarn add -D vi…...

Jenkins 学习总结腋

先唠两句&#xff1a;参数就像餐厅点单 把API想象成一家餐厅的“后厨系统”。 ? 路径参数/dishes/{dish_id} -> 好比你要点“宫保鸡丁”这道具体的菜&#xff0c;它是菜单&#xff08;资源路径&#xff09;的一部分。查询参数/dishes?spicytrue&typeSichuan -> 好比…...

2025届学术党必备的十大AI科研平台横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能本领在学术写作范畴的运用越来越普遍&#xff0c;它的关键价值是协助科研者达成文献…...

ARM 架构 JuiceFS 性能优化:基于 MLPerf 的实践与调优死

Qt是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本笔记将重点介绍QSpinBox数值微调组件的常用方法及灵活应用。…...

OpenClaw 太难装了?试试 LangTARS:一行命令部署 + WebUI 管理面板,还能接入 Dify/Coze/nn??悠

1. 什么是 Apache SeaTunnel&#xff1f; Apache SeaTunnel 是一个非常易于使用、高性能、支持实时流式和离线批处理的海量数据集成平台。它的目标是解决常见的数据集成问题&#xff0c;如数据源多样性、同步场景复杂性以及资源消耗高的问题。 核心特性 丰富的数据源支持&#…...

PHP AI校验配置被低估的致命细节(内存泄漏触发点、AST解析偏差、Token限流阈值)——资深SRE连夜重写配置手册

第一章&#xff1a;PHP AI校验配置的全局认知与风险图谱PHP AI校验配置并非孤立的技术模块&#xff0c;而是横跨应用层、中间件、模型服务与基础设施的复合型安全控制面。其核心目标是在AI能力注入业务流程的同时&#xff0c;确保输入合法性、输出可控性、行为可审计及策略可收…...

嵌入式进阶——MCU启动与代码执行教程

MCU启动与代码执行教程 1. 简介 本教程旨在帮助理解&#xff0c;深入剖析ARM Cortex-M系列单片机上电后的完整启动流程&#xff0c;以及程序在Flash、RAM、寄存器三者的协同执行机制。基于STM32等典型MCU&#xff0c;从硬件复位瞬间开始&#xff0c;逐步讲解向量表加载、Reset_…...

学Simulink——基于Simulink的坡道起步防溜坡电机转矩控制

目录 手把手教你学Simulink ——基于Simulink的坡道起步防溜坡电机转矩控制 一、问题背景 二、系统架构与控制逻辑 1. 控制层级 2. 防溜坡转矩需求 三、无传感器坡度估计方法 方法:基于加速度计 + 车速微分 Simulink 实现 四、防溜坡转矩控制器设计 1. 基础转矩规划…...

基于yolov8和faster-rcnn的电动车戴头盔检测,界面可选择模型,支持图像、视频和摄像实时检测【pytorch框架、python源码】

更多目标检测、图像分类识别、目标追踪、图像分割、图像检索等项目可看我主页其他文章 功能演示&#xff08;看shi pin 下面的简介&#xff09;&#xff1a; https://www.bilibili.com/video/BV1DWXrBaE3Z/?spm_id_from333.1387.homepage.video_card.click&vd_source23c…...