Servlet的几种用法?
serlet
1.定义:Serlet是使用Java编写的运行在服务器端的程序
2.Servlet主要是用于处理浏览器端发送的Http请求,并返回一个响应
3.Servlet开发需要使用到的包:
java.servlet
java.servlet.http
一.Servlet注册
1.xml方式
<servlet><servlet-name>HelloServlet</servlet-name><servlet-class>com.qfedu.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/hello</url-pattern>
</servlet-mapping>
元素用于注册Servlet,它包含有两个主要的子元素:
: 设置Servlet的注册名称
: 设置Servlet的完整类名,包名+类型形式
元素用于映射已注册的Servlet的对外访问路径,它包含有两个子元素:
:Servlet的注册名称,必须和配对的中的相同
:设置访问该Servlet资源的路径
例如,访问:http://localhost:8080/test/hello时,
Tomcat服务器截取到访问的资源名称/hello,
先从web.xml的中找匹配的url,找到后,再查找对应的;
然后从节点中找匹配的,找到后,根据的类名,创建Servlet对象,执行其中的方法
2)Servlet的多重映射
注意:
同一个Servlet可以被映射到多个URL上,即中可以设置多个
<servlet><servlet-name>HelloServlet</servlet-name><servlet-class>com.qfedu.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/HelloServlet</url-pattern><url-pattern>/hello</url-pattern>
</servlet-mapping>
2 @WebServlet注解方式
注解中使用主要属性:
| 属性名 | |
|---|---|
| name | Servlet名字,可以自定义 |
| value | 访问Servlet资源时匹配的路径,和urlPatterns互斥 |
| urlPatterns | 允许当前Servlet有多个匹配方式,和value互斥 |
| loadOnStartup | 标记容器是否启动时加载该Servlet |
| initParams | 当前Servlet的初始化配置WebInitParam 注解类型 ,属性包括name和value |
@WebServlet(name = "HelloServlet", value = "/HelloServlet")
public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.getWriter().write("get hello");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.getWriter().write("post hello");}
}
二.servlet开发
Servlet由Servlet容器提供,所谓的Servlet容器是指提供了Servlet 功能的Web服务器(比如Tomcat),Servlet容器将Servlet动态的加载到服务器上。
servlet使用的主要接口和类:
Servlet接口
GenericServlet抽象类
HttpServlet类
Servlet接口中的主要方法:
| 方法 | |
|---|---|
| void init(ServletConfig config) | 初始化Servlet |
| void service(ServletRequet req, ServletResponse res) | 负责响应客户端请求 |
| void destroy() | 销毁servlet对象,用于释放资源等 |
| ServletConfng getServletConfig() | 获得Servlet 的相关配置信息,该方法会返回一个指向ServletConfig的引用 |
| java.lang.Sring getServletInfo() | 获得Servlet开发者定义的信息 |
实现的原理就是:
Web服务器收到客户端的http请求,会针对每一次请求。分别创建一个对应的代表请求的requst对象和代表响应的response的对象
1 HttpServletRequest接口
HttpServletRequest接口继承了ServletRequest接口
HttpServletRequst对象代表客户端的请求,当客户端通过Http协议访问web服务器的时候,Http请求头中的所有信息都封装在这个对象中,开发人员通过这个对象中的方法,可以获得请求相关的信息.
常用方法:
| 方 法 | 说 明 |
|---|---|
| String getParameter(String name) | 获取请求中的参数,该参数是由name指定的 |
| Enumeration getParameterNames() | 获取请求中所有参数的名字 |
| String[] Enumeration getParameterValues(String name) | 返回请求中的参数值,该参数值是由name指定的 |
| Map<K, V> getParameterMap() | 返回此请求的参数的 java.util.Map对象 |
| ServletInputStream getInputStream() | 获取请求的输入流中的数据 |
| String getQueryString() | 返回包含在请求 URL 中路径后面的数据字符串 |
| Enumeration getAttributeNames() | 返回当前请求的所有属性的名字集合 |
| Object getAttribute(String name) | 返回name指定的属性值 |
| void setAttribute(String name, Object value) | 设置属性值 |
| void removeAttribute(String name) | 删除指定的属性值 |
| Cookies getCookies() | 返回客户端发送的Cookie |
| HttpSession getsession() | 返回和客户端相关的session,如果没有给客户端分session,则返回null |
| HttpSession getsession(boolean create) | 返回和客户端相关的session,如果没有给客户端分session,则创建一个session并返回 |
| String getCharacterEncoding() | 返回请求的字符编码方式 |
| void setCharacterEncoding(String env) | 设置请求中使用的字符编码方式 |
| String getMethod() | 获取发送请求的方式,如get、post |
| int getContentLength() | 返回请求体的有效长度 |
| String getProtocol() | 获取请求所使用的协议名称 |
| String getRemoteAddr() | 获取客户端的IP地址 |
| String getRemoteHost() | 获取客户端的名字 |
| String getServerName() | 返回接受请求的服务器的名字 |
| String getServerPath() | 获取请求的路径 |
| String getHeader(String name) | 返回指定请求头的值 |
1.1获取请求参数
request.getParameter()方法
//根据表单中输入控件的name属性值,获取表单参数
//get和post方式都可以用该方法获取表单参数
//tomcat8下,get方式下,使用getParameter方法,中文不会乱码
String name = request.getParameter("name");
String pwd = request.getParameter("password");System.out.println(name);
System.out.println(pwd);
1.2post提交方式下中文的乱码处理
//post提交方式,解决中文乱码的方案
request.setCharacterEncoding("utf-8");
注意:使用tomcat8以上版本后,get方式不存在中文乱码问题
2 HttpServletResponse
HttpServletResponse对象服务器的响应。该对象中封装了向客户端发送数据,发送响应头,发送响应状态码的方法
| 方 法 | 说 明 |
|---|---|
| PrintWriter getWriter() | 返回Servlet引擎创建的字符输出流对象 |
| void addCookie(Cookie cookie) | 将指定的Cookie加入到当前的响应中 |
| void addHeader(String name,String value) | 将指定的名字和值加入到响应的头信息中 |
| String encodeURL(String url) | 编码指定的URL |
| void sendRedirect(String location) | 重定向,发送一个临时的响应到客户端 |
| void setHeader(String name,String value) | 将给出的名字和值设置响应的头部 |
| void setStatus(int sc) | 给当前响应设置状态码 |
| void setContentType(String ContentType) | 设置响应的MIME类型 |
2.1返回响应的内容
//获取打印流的对象PrintWriter writer = response.getWriter();//writer.write("hello");//writer.write("<html><head><title>hello</title></head><body><font color='red'>hello world</font></body></html>");String html = "<html>";html += "<head>";html += "</head>";html += "<body>";html += " 你好";html += "</body>";html += "</html>";writer.write(html);writer.close();
2.2 中文乱码处理
方案一:
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Type", "text/html");
注意:如果仅使用response.setCharacterEncoding(“utf-8”),还是会显示乱码。这是由于虽然返回内容使用了utf8编码,但是浏览器加载的页面使用的是gbk编码,所以还需要设置content-type响应头。
方案二:
response.setContentType("text/html;charset=utf-8");
2.3重定向
重新定位到一个资源,实现资源的跳转
response.setStatus(302);
response.setHeader("location", "/W06_Servlet2/index.html");
2.4定时刷新
//定时刷新,每隔一秒刷新一次
//response.setHeader("refresh", "1");
//指定时间(秒)后,跳转到另外的界面
response.setHeader("refresh", "3;url=/W06_Servlet2/index.html");
三servlet的生命周期
1.生命周期
Servlet的生命周期主要有四个阶段:
\1) 创建对象
对同一个servlet,只会创建一次
\2) 初始化
创建对象后,init方法,只会调用一次,会获取一个ServletConfig对象
\3) 运行阶段
运行阶段,调用service()方法。
每调用一次servlet资源,都会调用该方法。对于每次访问请求,都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,在该方法中,根据请求方式,决定调用doGet还是doPost方法
\4) 销毁
关闭tomcat服务器,或者重新加载应用,都会调用destroy方法
针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说一个Servlet的实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出,servlet实例对象才会销毁。
2.Servlet自动加载
它的取值必须是一整数;
当值小于0或者没有指定的时候,则表示容器在该Servlet被首次请求时才会被加载;
当值大于0或者等于0的时候,表示容器在启动时就加载并初始化该Servlet,取值越小,优先级越高;
当取值相同时,容器就会自行选择顺序进行加载
<servlet><description></description><display-name>LifeServlet</display-name><servlet-name>LifeServlet</servlet-name><servlet-class>com.rr.life.LifeServlet</servlet-class><!-- tomcat服务器加载we应用时,创建对应的servlet对象值越小,优先级越高--><load-on-startup>1</load-on-startup>
</servlet>
注解的写法
@WebServlet(name = "HelloServlet", value = "/HelloServlet", loadOnStartup = 1)
四转发和重定向
1.请求转发
一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理,称之为请求转发啊
请求转发属于服务器行为
转发需要通过RequestDispatche接口的对象,调用ServletRequest的getRequestDispatcher(String path)方法可以获取该对象
RequestDispatcher 接口中提供的实现转发的方法:
| 方法 | 功能描述 |
|---|---|
| void forward(ServletRequest request,ServletResponse response) | 用于将请求转发给另一个 Web 资源。该方法必须在响应提交给客户端之前被调用 |
//request域
request.setAttribute("age", 10);
//转发
request.getRequestDispatcher("/ForwardServlet2").forward(request, response);
转发后,可以实现request对象中的数据的共享
2.重定向
一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源,称之为请求重定向.
重定向属于客户端行为。本质上是两次 HTTP 请求,对应两个 request 对象和两个 response 对象。
转发和重定向的区别:
转发是一个web资源收到客户端请求后,通知服务器去调用另外一个web资源。
重定向是一个web资源收到客户端的请求后,通知浏览器去调用另外一个web资源
//重定向
//response.sendRedirect("/W08_2_Servlet/RedirectServlet2");
//response.sendRedirect("RedirectServlet2");//重定向时,不能共享request对象中的数据
request.setAttribute("id", 100);
//推荐如下写法
response.sendRedirect(request.getContextPath() + "/RedirectServlet2");
重定向时,多个Servlet不能共享request对象中的数据
3.重定向和转发的区别
1)重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变;转发过程结束后,浏览器地址栏保持初始的URL地址不变
2)重定向时,是通过响应的结果告诉浏览器去重新发出请求访问另外一个web资源。而转发是在服务器内部请求转发给另外一个资源的
3)转发时,调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而重定向时调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。
4)重定向时,重定向的URL以“/”开头,它是相对于WEB应用所在的服务器;转发时的URL以“/”开头,它是相对于当前WEB应用程序。
5)转发只能将请求转发给同一个WEB应用中的资源;而重定向还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。
| 区别 | 转发 | 重定向 |
|---|---|---|
| 行为 | 服务器行为 | 客户端行为 |
| 浏览器地址栏 URL 是否发生改变 | 否 | 是 |
| 是否共享 request 对象和 response 对象 | 是 | 否 |
| 是否能通过 request 域对象传递数据 | 是 | 否 |
| 是否支持跳转到其他应用的资源 | 否 | 是 |
| 路径中/ | 相对于当前web应用 | 相对于服务器 |
五ServletConfig接口
Servlet容器初始化Servlet时,会为了这个Servlet创建一个ServletConfig对象,并将ServletConfig对象作为参数传递给Servlet。通过Servlet的初始化参数信息。
| 方法 | 功能描述 |
|---|---|
| String getInitParameter(String name) | 根据初始化参数名 name,返回对应的初始化参数值。 |
| Enumeration getInitParameterNames() | 返回 Servlet 所有的初始化参数名的枚举集合,如果该 Servlet 没有初始化参数,则返回一个空的集合。 |
| ServletContext getServletContext() | 返回一个代表当前 Web 应用的 ServletContext 对象。 |
| String getServletName() | 返回 Servlet 的名字 |
配置servlet的初始化参数
<servlet><servlet-name>ConfigServlet</servlet-name><servlet-class>com.qfedu.servletconfig.ConfigServlet</servlet-class><!-- servlet的初始化参数 --><init-param><param-name>user</param-name><param-value>zhangsan</param-value></init-param><init-param><param-name>pwd</param-name><param-value>12345</param-value></init-param></servlet>
public class ConfigServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub// 获取ServletConfig对象// ServletConfig 不需要额外创建// 每个Servlet都会对应一个ServletConfig对象ServletConfig servletConfig = this.getServletConfig();// 获取servlet中的初始化参数的值String info = servletConfig.getInitParameter("user");System.out.println(info);String info2 = servletConfig.getInitParameter("pwd");System.out.println(info2);}}
注解方式
@WebServlet(value = {"/config"}, initParams = {@WebInitParam(name = "user", value = "zhangsan"),@WebInitParam(name = "pwd", value = "1234")})
public class ConfigServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub// 获取ServletConfig对象// ServletConfig 不需要额外创建// 每个Servlet都会对应一个ServletConfig对象ServletConfig servletConfig = this.getServletConfig();// 获取servlet中的初始化参数的值String info = servletConfig.getInitParameter("user");System.out.println(info);String info2 = servletConfig.getInitParameter("pwd");System.out.println(info2);}}
六 ServletContext 接口
Servlet 容器启动时,会为每个 Web 应用创建一个唯一的 ServletContext 对象,该对象一般被称为“Servlet 上下文对象”。
ServletContext 对象的生命周期从 Servlet 容器启动时开始,到容器关闭或应用被卸载时结束。
常用方法:
| 方法 | 描述 |
|---|---|
| String getInitParameter(String name) | 根据初始化参数名 name,返回对应的初始化参数值。 |
| Enumeration getInitParameterNames() | 返回 Web 应用所有上下文初始化参数名的枚举集合,如果该 Web 应用没有上下文初始化参数,则返回一个空的枚举集合。 |
| void setAttribute(String name, Object object) | 把一个 Java 对象与一个属性名绑定,并将它作为一个属性存放到 ServletContext 中。 参数 name 为属性名,参数 object 为属性值。 |
| void removeAttribute(String name) | 从 ServletContext 中移除属性名为 name 的属性。 |
| Object getAttribute(String name) | 根据指定的属性名 name,返回 ServletContext 中对应的属性值。 |
| String getRealPath(String path) | 返回资源文件的真实路径(文件的绝对路径)。 |
| InputStream getResourceAsStream(String path) | 返回映射到资源文件的 InputStream 输入流对象。 |
1 获取web应用路径
//获取servletcontext对象
ServletContext servletContext = this.getServletContext();// /W08_2_Servlet
System.out.println(servletContext.getContextPath());//通过request对象,获取应用的路径
System.out.println(request.getContextPath());
2 web****应用的初始化参数
/**<!-- 针对整个应用的初始化参数 -->
<context-param><param-name>AAA</param-name><param-value>aaa</param-value>
</context-param>* * */
String v1 = servletContext.getInitParameter("AAA");
System.out.println(v1);
3 多个Servlet对象共享数据
同一个Web应用中,所有的Servlet对象共享一个ServletContext对象
ServletContext servletContext = this.getServletContext();
//向servletcontext域中写入数据
//在整个web应用的不同的资源之间共享数据
servletContext.setAttribute("name", "zhangsan");Dog d = new Dog();
d.setAge(2);
d.setName("wangcai");servletContext.setAttribute("dog", d);
相关文章:
Servlet的几种用法?
serlet 1.定义:Serlet是使用Java编写的运行在服务器端的程序 2.Servlet主要是用于处理浏览器端发送的Http请求,并返回一个响应 3.Servlet开发需要使用到的包: java.servlet java.servlet.http 一.Servlet注册 1.xml方式 <servlet>…...
Golang | Leetcode Golang题解之第69题x的平方根
题目: 题解: func mySqrt(x int) int {if x 0 {return 0}C, x0 : float64(x), float64(x)for {xi : 0.5 * (x0 C/x0)if math.Abs(x0 - xi) < 1e-7 {break}x0 xi}return int(x0) }...
AR人脸美妆SDK解决方案,让妆容更加贴合个人风格
美妆行业正迎来前所未有的变革,为满足企业对高效、精准、创新的美妆技术需求,美摄科技倾力打造了一款企业级AR人脸美妆SDK解决方案,为企业打开美妆领域的新世界大门。 革命性的人脸美妆技术 美摄科技的AR人脸美妆SDK解决方案,不…...
Python-100-Days: Day09 Object-oriented programming(OOP) Upgrade
1.property装饰器 之前有讨论过, Python中属性和方法访问权限的问题,不建议将属性设置为私有的,倘若直接将属性暴露给外界也是存在问题的。例如,我们没有办法检查赋给属性的值是否有效。之前的建议是将属性命名以单下划线开头&am…...
虹科Pico汽车示波器 | 免拆诊断案例 | 2010款凯迪拉克SRX车发动机无法起动
故障现象 一辆2010款凯迪拉克SRX车,搭载LF1发动机,累计行驶里程约为14.3万km。该车因正时链条断裂导致气门顶弯,大修发动机后试车,起动机运转有力,但发动机没有着机迹象;多起动几次,火花塞会变…...
ECC 号码总结
1、问题背景 在手机开发过程中,经常遇见各种紧急号码问题,在此特意总结下紧急号码相关知识。 2、紧急号码来源 在MTK RILD EccNumberSource.h中,定义了如下几种紧急号码来源。 按优先级排序介绍如下 2.1、SOURCE_NETWORK 网络下发ÿ…...
《大疆二次开发》EMQX和MQTT部署
EMQX 服务器 基础知识 概念 EMQX (Erlang/Enterprise/Elastic MQTT Broker) ;EMQ/EMQX就是MQTT Broker的一种实现;一款开源的大规模分布式 MQTT 消息服务器,功能丰富,专为物联网和实时通信应用而设计;支持多种协议&…...
【网络】滑动窗口和拥塞窗口
滑动窗口和拥塞窗口是TCP协议中两个重要的窗口概念,它们分别用于流量控制和拥塞控制,在功能和作用上有所不同。 滑动窗口(Sliding Window) 滑动窗口是用于流量控制的机制,它定义了发送方和接收方之间的数据传输量。T…...
数据库知识初步汇总
创建标签表格: CREATE TABLE IF NOT EXISTS labels (标签ID INTEGER PRIMARY KEY,标签名称 TEXT );创建文本与标签的关联表格: CREATE TABLE IF NOT EXISTS 文本标签 (文本ID INTEGER,标签ID INTEGER,FOREIGN KEY (文本ID) REFERENCES texts(编号),FOR…...
Moby简介:openEuler 中的开源docker引擎
Moby 是一个开源的容器化引擎,它提供了创建和管理容器所需的核心功能。在 openEuler 系统中,Moby 作为容器技术的实现之一,它允许用户利用容器化技术来部署、运行和移植应用程序。 Moby 的功能和作用: 1. **容器创建**ÿ…...
分布式光纤测温DTS的测温范围是多少?
分布式光纤测温DTS的测温范围不仅仅取决于光缆的感温能力,还受到多种复杂因素的影响。尽管高温光缆可以耐高温,低温光缆可以耐低温,甚至镀金光缆能够耐受高达700摄氏度的极高温度,然而,这些因素并不能完全解释测温范围…...
Java实现裁剪PDF
目录 安装Java PDF库 Java裁剪PDF页面 Java裁剪PDF页面并将结果保存为图片、HTML、Excel等格式 裁剪PDF页面是一项常见的任务,它可以用来调整文档的尺寸和去除不需要的边距或白边。通过裁剪页面,你可以优化文档的布局和展示效果,使其更符合…...
ZooKeeper以及DolphinScheduler的用法
目录 一、ZooKeeper的介绍 数据模型 编辑 操作使用 ①登录客户端 编辑 ②可以查看下面节点有哪些 ③创建新的节点,并指定数据 ④查看节点内的数据 ⑤、删除节点及数据 特殊点: 运行机制: 二、DolphinScheduler的介绍 架构&#…...
gitlab集群高可用架构拆分部署
目录 前言 负载均衡器准备 外部负载均衡器 内部负载均衡器 (可选)Consul服务 Postgresql拆分 1.准备postgresql集群 手动安装postgresql插件 2./etc/gitlab/gitlab.rb配置 3.生效配置文件 Redis拆分 1./etc/gitlab/gitlab.rb配置 2.生效配置文件 Gitaly拆分 1.…...
STC8增强型单片机开发day01
C51版本Keil环境搭建 搭建流程 环境搭建的基本流程: 从官方网站下载并安装Keil软件。选择安装的软件中的C51工具集并运行。通过从“文件”菜单中选择“项目”来创建新项目。输入项目名称并选择您正在使用的设备。通过从“项目”菜单中选择“添加文件到组”来添加…...
记录: Python解析yml文件,顺序解析,带所有文件等号
记录: Python解析yml文件,顺序解析,带所有文件等号from yaml.composer import Composer from yaml.constructor import Constructor import yamlclass ParseYml:def __init__(self):passstaticmethoddef parse(yml_pathNone):try:loader yaml.Loader(op…...
Npm Install Docusaurus Demo【npm 安装 docusaurus 实践 】
文章目录 1. 简介2. 前提2.1 安装 git2.2 安装 node 3. 安装4. 项目结构5. 访问5.1 localhost 访问5.2 ip 访问 1. 简介 Docusaurus 是一个facebook的开源项目,旨在帮助开发者构建易于维护和部署的文档网站。它提供了一个简单的方法来创建专业的文档网站࿰…...
【工具推荐定制开发】一款轻量的批量web请求命令行工具支持全平台:hey,基本安装、配置、使用
背景 在开发 Web 应用的过程中,作为开发人员,为了确认接口的性能能够达到要求,我们往往需要一个接口压测工具,帮助我们快速地对我们所提供的 Web 服务发起批量请求。在接口联调的过程中,我们通常会用 Postman 等图形化…...
Linux进程——进程的创建(fork的原理)
前言:在上一篇文章中,我们已经会使用getpid/getppid函数来查看pid和ppid,本篇文章会介绍第二种查看进程的方法,以及如何创建子进程! 本篇主要内容: 查看进程的第二种方法创建子进程系统调用函数fork 在开始前ÿ…...
ICode国际青少年编程竞赛- Python-1级训练场-路线规划
ICode国际青少年编程竞赛- Python-1级训练场-路线规划 1、 Dev.step(3) Dev.turnLeft() Dev.step(4)2、 Dev.step(3) Dev.turnLeft() Dev.step(3) Dev.step(-6)3、 Dev.step(-2) Dev.step(4) Dev.turnLeft() Dev.step(3)4、 Dev.step(2) Spaceship.step(2) Dev.step(3)5、…...
如何安全备份QQ空间历史说说?GetQzonehistory工具全攻略
如何安全备份QQ空间历史说说?GetQzonehistory工具全攻略 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心过QQ空间里那些承载着青春记忆的说说有一天会突然消失&…...
SecGPT-14B实操手册:Gradio界面中temperature=0.3对安全答案确定性的影响
SecGPT-14B实操手册:Gradio界面中temperature0.3对安全答案确定性的影响 1. 引言:为什么安全问答需要“确定性”? 想象一下,你正在向一位网络安全专家咨询一个紧急的安全漏洞问题。你希望得到的回答是清晰、准确、且唯一的正确答…...
Qwen2.5-Coder-1.5B新手指南:如何用‘fill-in-the-middle’模式补全代码
Qwen2.5-Coder-1.5B新手指南:如何用‘fill-in-the-middle’模式补全代码 重要提示:Qwen2.5-Coder-1.5B是一个专门用于代码任务的预训练模型,不适合直接用于对话。它最擅长的场景是代码补全、生成和修复,特别是使用"fill-in-t…...
ARM A53上跑通1080P实时EIS防抖?手把手教你优化特征点与透视变换(附代码思路)
ARM A53实战:1080P实时EIS防抖的7个关键优化策略 当行车记录仪的镜头在颠簸路面剧烈晃动,或是运动相机在冲浪时被海浪拍打,画面稳定性的价值就凸显出来。传统光学防抖受限于物理结构,而电子防抖(EIS)通过算法补偿成为嵌入式设备的…...
算法---寻找和为K的子数组
560. 和为 K 的子数组 - 力扣(LeetCode) 最直观的解法就是暴力解: class Solution:def subarraySum(self, nums: List[int], k: int) -> int:count 0n len(nums)for i in range(n):current_sum 0for j in range(i, n):current_sum nu…...
通义千问3-VL-Reranker实战分享:30+语言支持,打造全球化智能搜索助手
通义千问3-VL-Reranker实战分享:30语言支持,打造全球化智能搜索助手 1. 引言:全球化搜索的挑战与机遇 在当今信息爆炸的时代,跨语言信息检索已成为企业和个人面临的普遍挑战。传统搜索引擎在处理多语言内容时往往力不从心&#…...
Qwen3-4B-Instruct-2507部署避坑指南:从vLLM到Chainlit,新手必看
Qwen3-4B-Instruct-2507部署避坑指南:从vLLM到Chainlit,新手必看 1. 环境准备与快速部署 1.1 系统要求检查 在开始部署前,请确保您的环境满足以下最低要求: 操作系统:Ubuntu 20.04/22.04 或兼容的Linux发行版GPU&a…...
【笔试真题】- 阿里系列-2026.03.25-算法岗
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围在线刷题 bishipass.com 阿里系列-2026.03.25-算法岗 1. LYA 的同余构造 问题描述 说明:阿里系列近期多条业务线笔试题基本共用同一套公开机试,淘天、阿里云等方向都可参考本场。 …...
索尼Bravia家庭影院新品登场,能否重塑市场格局?
索尼Bravia新品:模块化家庭影院新选择索尼宣布推出七款新的Bravia家庭影院产品,涵盖一台电视、两款条形音箱、三款低音炮和后置音箱。除Theater Bar 5外,产品可自由搭配组合。其中,Bravia Theater Bar 7作为中高端条形音箱&#x…...
摆脱论文困扰!!2026最新AI论文写作软件测评与推荐
2026年真正好用的AI论文写作软件,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...
