24.11.20 sevlet2

news2024/11/22 18:36:34

1.servlet是否线程安全 (线程特性)

线程安全的指标
//1.是否有共享数据
//2.多线程对共享数据做写操作

servlet中 不要创建成员变量

servlet是单实例的 所以成员变量(不加static) 就会在多线程间共享
如果service()方法中 对成员变量有写操作 则线程不安全
servlet中非特殊情况 不要加锁 (直接降级为单线程 效率大大降低)    

2.servlet中提供的域对象

javaEE j2EE java企业级应用 (web应用程序)

核心对象servlet servlet中还包含其他的对象 还有隐含的对象

域对象 是servlet中隐含的对象

域对象 是空的map (在程序运行时 共享数据使用)

通用的api

域对象.setAttribute("key",value);
域对象.getAttribute("key")
域的生效时机 和失效时机
1请求域 request域

request读+写

package com.javasm.controller;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet("/requestDemo1")
public class RequestDemo1 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //request域  service方法中的第一个参数 req
        req.setAttribute("reqKey","reqVal");

        //读取对象的格式 读到之后强转为实际类型
        String reqKey =(String) req.getAttribute("reqKey");

        System.out.println("demo1中读取:"+reqKey);
        //调用指定路径servlet的service方法
        req.getRequestDispatcher("requestDemo2").forward(req,resp);


    }
}

request 只读取

package com.javasm.controller;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/requestDemo2")
public class RequestDemo2 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //request域  service方法中的第一个参数 req
        //req.setAttribute("reqKey","reqVal");

        //读取对象的格式 读到之后强转为实际类型
        String reqKey =(String) req.getAttribute("reqKey");

        System.out.println("demo2中读取:"+reqKey);

    }
}

2会话域 session域
    可以在多次请求间生效  
    对不同的浏览器进程 数据分开存储

session读+写

package com.javasm.controller;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

 
@WebServlet("/sessionDemo1")
public class SessionDemo1 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //session域  多次请求间共享数据使用
        //如果需要使用session对象 需要通过代码主动触发
        HttpSession session = req.getSession();

        session.setAttribute("sesKey","sesVal");

        String sesKey =(String) session.getAttribute("sesKey");

        System.out.println("demo1中读取:"+sesKey);


    }
}

session只读取

package com.javasm.controller;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/sessionDemo2")
public class SessionDemo2 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //session域  多次请求间共享数据使用
        //如果需要使用session对象 需要通过代码主动触发
        HttpSession session = req.getSession();

        String sesKey =(String) session.getAttribute("sesKey");

        System.out.println("demo2中读取:"+sesKey);


    }
}

3服务器域 servletContext域
    全局共享 写入之后 所有请求 所有浏览器都可以使用

servletContext读+写

package com.javasm.controller;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/ServletContextDemo1")
public class ServletContextDemo1 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //ServletContext 服务器对象

        ServletContext servletContext = req.getServletContext();
        //ServletContext servletContext1 = this.getServletContext();

        servletContext.setAttribute("sckey","scval");
        String sckey =(String) servletContext.getAttribute("sckey");
        System.out.println("demo1中读取:"+sckey);


    }
}

servletContext只读取

package com.javasm.controller;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/ServletContextDemo2")
public class ServletContextDemo2 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //ServletContext 服务器对象

        ServletContext servletContext = req.getServletContext();
        //ServletContext servletContext1 = this.getServletContext();

        String sckey =(String) servletContext.getAttribute("sckey");
        System.out.println("demo2中读取:"+sckey);


    }
}

3servlet中常用对象

3.1servletContext对象

servletContext对象 也叫application 是服务器对象

这是一个全局共享的对象 一般用来存放和共享服务器级别的全局参数

常用方法:
        * getContextPath()  获取服务入口路径          /day10 方便拼路径使用
        * getRealPath("/")  获取服务器实际代码路径     做本地IO操作时使用
        * getInitParameter("charset")   通过web.xml 读取自定义公共参数
示例代码:
package com.javasm.controller2;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet("/scDemo")
public class ServletContextDemo extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //servletContext对象 application 服务器对象
        //全局共享的对象 全局数据
        /*
        * getContextPath()  获取服务入口路径          /day10 方便拼路径使用
        * getRealPath("/")  获取服务器实际代码路径     做本地IO操作时使用
        * getInitParameter("charset")   通过web.xml 读取自定义公共参数
        * */
        // 获取服务入口路径          /day10 方便拼路径使用
        ServletContext servletContext = req.getServletContext();
        System.out.println(servletContext.getContextPath());
        
         // 获取服务器实际代码路径
        //D:\develop\workspace\two\day10_servlet2\target
        //                  \day10_servlet2-1.0-SNAPSHOT\  做本地IO操作时使用
        System.out.println(servletContext.getRealPath("/"));//括号当中要填路径,即可返回绝对路径
       
        //通过web.xml 读取自定义公共参数
        String initParameter = servletContext.getInitParameter("charset");
        System.out.println(initParameter);
    }
}
3.2servletConfig对象(了解)

servlet配置参数对象 可以获取servlet名称 等配置参数 现在的开发中基本用不到

3.3request对象(***)

HttpServletRequest 请求对象

两个作用:

1.解析请求报文 包含请求报文中的各种参数
2.做request域对象
常用方法:
        //域对象 设置键值对
          req.setAttribute("reqKey","reqVal");
        //域对象读取键值对 注意要强转类型
          String reqKey =(String) req.getAttribute("reqKey");
        //指定字符编码 处理post请求时的请求乱码
        req.setCharacterEncoding("utf-8");
        //取请求参数
        String 参数值 = req.getParameter("参数key");
        //取请求同key参数  ?hobby=1&hobby=2&hobby=3 取出字符串数组
        String[] hobbies = req.getParameterValues("hobby");
获取参数map 获取参数输入流 (了解)
        //tomcat解析参数时 会把键值对存入map<String, String[]>
        //单个参数也会存入数组
        Map<String, String[]> parameterMap = req.getParameterMap();

        //tomcat中允许 自己读取请求体中的数据 可以自己解析数据
        //获得请求体部分的输入流
        ServletInputStream inputStream = req.getInputStream();
获取请求头 (了解)
      //自定义请求头 取自定义请求头(需搭配ajax使用)
      String headerKey = req.getHeader("headerKey");
获取请求报文中的各种路径
        //获取报文中路径中的数据
        //获取协议
        System.out.println(req.getScheme());
        //获取主机名
        System.out.println(req.getServerName());
        //获取端口
        System.out.println(req.getServerPort());
        //获取服务器入口的根路径
        System.out.println(req.getContextPath());
        //URL 与 URI
        //URL 统一资源定位符 http://localhost:8080/day10/reqDemo
        System.out.println(req.getRequestURL()); 
        //URI 统一资源标识符  /day10/reqDemo
        System.out.println(req.getRequestURI());
        //servlet配置的路径 匹配路径 /reqDemo
        System.out.println(req.getServletPath());
请求转发
    可以在servlet之间跳转 先执行servlet1 --->  servlet2
    
    //请求转发 同一次请求 访问多个servlet时使用 可以让请求跳转
        //请求跳转时 配合request域做数据共享  提供机制  一般搭配jsp使用
    req.getRequestDispatcher("servlet2的路径").forward(req,resp);
示例代码:
package com.javasm.controller2;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;


@WebServlet("/reqDemo")
public class RequestDemo extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //req   HttpServletRequest
        //1.解析请求报文 包含请求报文中的各种参数
        //2.做request域对象
        /*
        //域对象 设置键值对
          req.setAttribute("reqKey","reqVal");
        //域对象读取键值对 注意要强转类型
          String reqKey =(String) req.getAttribute("reqKey");

        //取参数相关
        //指定字符编码 处理post请求时的请求乱码
        req.setCharacterEncoding("utf-8");
        //取请求参数
        String 参数值 = req.getParameter("参数key");
        //取请求同key参数  ?hobby=1&hobby=2&hobby=3 取出字符串数组
        String[] hobbies = req.getParameterValues("hobby");

        //tomcat解析参数时 会把键值对存入map<String, String[]>
        //单个参数也会存入数组
        Map<String, String[]> parameterMap = req.getParameterMap();

        //tomcat中允许 自己读取请求体中的数据 可以自己解析数据
        //获得请求体部分的输入流
        ServletInputStream inputStream = req.getInputStream();

        //自定义请求头 取自定义请求头
        String headerKey = req.getHeader("headerKey");


        *
        *
        * */
//        //tomcat解析参数时 会把键值对存入map<String, String[]>
//        //单个参数也会存入数组
//        Map<String, String[]> parameterMap = req.getParameterMap();
//        System.out.println(parameterMap.get("name")[0]);

/*      获取参数的请求体输入流
        可以自己解析请求体数据 配合其他工具 也可以直接解析为对象
        与tomcat解析流数据互斥 流只能读一次
        ServletInputStream inputStream = req.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String s = bufferedReader.readLine();
        System.out.println(s);

        String username = req.getParameter("username");
        System.out.println(username);
*
*
* */
        //读请求报文 只能读请求体 可以读post方式的请求体
        //字符
        //字节
        //流只能读一次
        ServletInputStream inputStream = req.getInputStream();

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String s = bufferedReader.readLine();
        System.out.println(s);

        String username = req.getParameter("username");
        System.out.println(username);
        //获取报文中路径中的数据
        //获取协议
        System.out.println(req.getScheme());
        //获取主机名
        System.out.println(req.getServerName());
        //获取端口
        System.out.println(req.getServerPort());
        //获取服务器入口的根路径
        System.out.println(req.getContextPath());
        //URL 与 URI
        System.out.println(req.getRequestURL());//URL 统一资源定位符  http://localhost:8080/day10/reqDemo
        System.out.println(req.getRequestURI());//URI 统一资源标识符  /day10/reqDemo
        //servlet配置的路径 匹配路径 /reqDemo
        System.out.println(req.getServletPath());
        //请求转发 同一次请求 访问多个servlet时使用 可以让请求跳转
        //请求跳转时 配合request域做数据共享  提供机制  一般搭配jsp使用
        // req.getRequestDispatcher("地址").forward(req,resp);



    }
}
3.4response对象(***)

HttpServletResponse 响应对象 控制响应报文相关的内容

常用方法
//设置返回数据格式
//resp.setContentType("application/json;charset=utf-8"); //返json
//resp.setContentType("text/html;charset=utf-8");        //返页面标签
resp.setContentType("text/html;charset=utf-8");

//获得输出流
//动态网页技术 数据是否动态生成
PrintWriter writer = resp.getWriter();
writer.print("这是一个动态页面<br>");
writer.print("<input type='text'>");
//        writer.write();
//        writer.println();
示例代码
package com.javasm.controller2;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/respDemo")
public class ResponseDemo extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("触发运行了....");
        //返回页面标签
        //设置返回数据格式
        //resp.setContentType("application/json;charset=utf-8");
        //resp.setContentType("text/html;charset=utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //获得输出流
        //动态网页技术 数据是否动态生成
        PrintWriter writer = resp.getWriter();
        writer.print("这是一个动态页面<br>");
        writer.print("<input type='text'>");
//        writer.write();
//        writer.println();
        writer.close();
    }
}
3.5session对象(***)

HttpSession 会话对象 做域对象(缓存数据) 在同一个用户(浏览器)多次访问间共享数据

常用方法
        //域对象 设置键值对
          req.setAttribute("sesKey","sesVal");
        //域对象读取键值对 注意要强转类型
          String reqKey =(String) req.getAttribute("sesKey");
        //删除键值对
          req.removeAttribute("sesKey");
        //获得session编号 用来检查是否同一个session对象
        session.getId()
        //设置session访问间隔 单位秒 超过间隔会重新创建session
        session.setMaxInactiveInterval(5);    
        //直接设置session失效
        session.invalidate();
示例代码
package com.javasm.controller2;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/sesDemo")
public class HttpSessionDemo extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //获得session对象 req.getSession()
        HttpSession session = req.getSession();
        //session编号 C03DDD56DF31BAB3EB6A41DB728815CF
        //每个session都会起编号 如过session对象相同 编号是相同的
        System.out.println(session.getId());
        //MaxInactiveInterval 最大非活动周期  两次访问的间隔
        //
        //session.setMaxInactiveInterval(5);
        session.invalidate();
        /*
        * session三种失效方式
        * 1.浏览器关闭
        * 2.超过访问间隔
        * 3.直接设置session失效
        *
        * */
        //session对象保留 但是sesison中的数据可以清除掉
        //session.removeAttribute("key");


        /*
        * session使用场景
        * 1.当缓存使用 把一些常用的数据存入session 服务端需要使用时 直接使用共享的数据
        * 2.做访问控制
        *        登录访问控制
        *
        * */

    }
}
session常用场景
* session使用场景
* 1.当缓存使用 把一些常用的数据存入session 服务端需要使用时 直接使用共享的数据
* 2.做访问控制
*        登录访问控制

登录访问控制场景:

示例代码

登录服务 LoginServlet

package com.javasm.controller3;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;


@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //做登录....
        System.out.println("登录代码执行了......");

        HttpSession session = req.getSession();
        session.setAttribute("loginUser","用户信息....");


    }
}

用户服务 UserServlet

package com.javasm.controller3;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;


@WebServlet("/user")
public class UserServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //查用户信息 必须登录后使用

        HttpSession session = req.getSession();
        String loginUser =(String) session.getAttribute("loginUser");
        if(loginUser!=null){
            System.out.println("查询用户代码执行了......");
        }else{
            System.out.println("请先登录......");
        }

    }
}

商品服务 ProdServlet

package com.javasm.controller3;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/prod")
public class ProdServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //查商品信息 不需要登录
        System.out.println("查询商品代码执行了......");

    }
}

登出服务 LogoutServlet

package com.javasm.controller3;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;


@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //做登出....
        System.out.println("登出代码执行了......");

        HttpSession session = req.getSession();
        //session.setAttribute("loginUser","用户信息....");
        //session.invalidate();
        session.removeAttribute("loginUser");
    }
}

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

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

相关文章

【编译器】Dev C++建立C语言工程

【编译器】Dev C建立C语言工程 文章目录 [TOC](文章目录) 前言一、创建工程二、添加.c.h三、主函数处理四、在桌面中打开exe文件五、参考资料总结 前言 在使用了很多编译器之后&#xff0c; 要么是太大了&#xff0c; 要么是太新了&#xff0c; 要么是在线编译器&#xff0c;用…

【ArcGIS微课1000例】0132:从多个GIS视角认识与攀登珠穆朗玛峰

文章目录 1. Map Viewer中打开2. 场景查看器中打开3. ArcGIS中打开4. QGIS中打开5. Globalmapper中打开6. ArcGIS Earth中打开官网地址:https://www.arcgis.com/home/item.html?id=504a23373ab84536b7760c0add1e0c1c 1. Map Viewer中打开 以下展示不同底图样式的珠穆朗玛峰壮…

vscode uniapp 微信小程序 view、text、image标签红色波浪线

没修改前的红色波浪线样式 看好多人没解决方法&#xff0c;我的这种反正成功了&#xff0c;解决方法如下&#xff1a;首先降级Vue - Official 为 v2.0.12 选择版本 配置tsconfig.json "vueCompilerOptions": {// experimentalRuntimeMode 已废弃&#xff0c;现调整为…

SCTransNet验证测试

SCTransNet 是PRCV 2024、ICPR 2024 Track 1、ICPR 2024 Track 2 三项比赛冠军方案的 Baseline, 同时也是多个优胜算法的Baselines. Bilibili 视频分享 【工作分享】SCTransNet:面向红外弱小目标检测的空间 - 通道交叉 Transformer_哔哩哔哩_bilibili 极市平台 推文分享 …

电路模型和电路定理(二)

电路元件 是电路中最基本的组成单元。 电阻元件&#xff1a;表示消耗电能的元件 电感元件&#xff1a;表示产生磁场&#xff0c;储存磁场能的元件 电容元件&#xff1a;表示产生电场&#xff0c;储存电场能量的元件 电压源和电流源&#xff1a;表示将其他形式的能量转变成…

2023AE软件、Adobe After Effects安装步骤分享教程

2023AE软件是一款由Adobe公司开发的视频编辑软件&#xff0c;也被称为Adobe After Effects。它在广告、电影、电视和网络视频等领域广泛应用&#xff0c;用于制作动态图形、特效、合成和其他视觉效果。该软件支持多种视频和音频文件格式&#xff0c;具有丰富的插件和预设&#…

AI Large Language Model

AI 的 Large Language model LLM , 大语言模型&#xff1a; 是AI的模型&#xff0c;专门设计用来处理自然语言相关任务。它们通过深度学习和庞大的训练数据集&#xff0c;在理解和生成自然语言文本方面表现出色。常见的 LLM 包括 OpenAI 的 GPT 系列、Google 的 PaLM 和 Meta…

【大数据学习 | Spark】关于distinct算子

只有shuffle类的算子能够修改分区数量&#xff0c;这些算子不仅仅存在自己的功能&#xff0c;比如分组算子groupBy&#xff0c;它的功能是分组但是却可以修改分区。 而这里我们要讲的distinct算子也是一个shuffle类的算子。即可以修改分区。 scala> val arr Array(1,1,2,…

SrpingBoot基础

SpringBoot基本框架中重要常用的包讲解: .idea包和.mvn包框架生成不经常用 src包下主要存放前后端代码: main包下的java包存放的是后端java代码主要负责数据处理 resource包下存放的是配置资源和前端页面,其中static中存放的是前端html网页一般存放静 态资源,templates包…

Spring6 MyBatis

1. 依赖 <dependencies><!-- spring核心--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.1.14</version></dependency><!-- Resource注解的依赖…

JavaEE专栏介绍

专栏导读 在当今快速发展的信息技术时代&#xff0c;JavaEE作为企业级应用开发的核心技术之一&#xff0c;扮演着至关重要的角色。本“JavaEE”专栏旨在为对JavaEE感兴趣的开发者提供一个全面的学习平台&#xff0c;从基础概念到高级应用&#xff0c;帮助读者深入理解JavaEE框…

互联网数字化商品管理浪潮思考:从信息化到精准运营

目录 一、商品数字化转型面临的现状分析 &#xff08;一&#xff09;运营方向分析 &#xff08;二&#xff09;商品归类分析 二、商品数字化管理建设分析 三、基础建设——商品信息数字化 &#xff08;一&#xff09;商品信息质量数字化的目的 &#xff08;二&#xff0…

一文读懂Redis6的--bigkeys选项源码以及redis-bigkey-online项目介绍

一文读懂Redis6的--bigkeys选项源码以及redis-bigkey-online项目介绍 本文分为两个部分&#xff0c;第一是详细讲解Redis6的--bigkeys选项相关源码是怎样实现的&#xff0c;第二部分为自己对--bigkeys源码的优化项目redis-bigkey-online的介绍。redis-bigkey-online是自己开发的…

随机场模型与命名实体识别:深入理解CRF及其应用

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

Qlik Sense QVD 文件

QVD 文件 QVD (QlikView Data) 文件是包含从 Qlik Sense 或 QlikView 中所导出数据的表格的文件。QVD 是本地 Qlik 格式&#xff0c;只能由 Qlik Sense 或 QlikView 写入和读取。当从 Qlik Sense 脚本中读取数据时&#xff0c;该文件格式可提升速度&#xff0c;同时又非常紧凑…

ESP8266 AP模式TCP客户端 电脑手机网络调试助手

1.AP模式TCP客户端和电脑网络调试助手 2.AP模式TCP客户端和手机网络调试助手

Python脚本-linux远程安装某个服务

需求&#xff1a; 某公司因为网站服务经常出现异常&#xff0c;需要你开发一个脚本对服务器上的服务进行监控&#xff1b;检测目标服务器上是否存在nginx软件(提供web服务的软件)&#xff0c;如果不存在则安装(服务器可能的操作系统Ubuntu24/RedHat9)&#xff1b;如果nginx软件…

linux 中mysql查看慢日志

1、到mysql容器&#xff0c;先登录到数据库&#xff0c;查看是否开启 mysql -h 127.0.0.1 -uroot -p SHOW VARIABLES LIKE slow_query_log; 2、如果没有开启&#xff0c;需要先开启 set global slow_query_log ON; 3、查看慢日志文件 SHOW VARIABLES LIKE slow_query_log…

笔记02----重新思考轻量化视觉Transformer中的局部感知CloFormer(即插即用)

1. 基本信息 论文标题: 《Rethinking Local Perception in Lightweight Vision Transformer》中文标题: 《重新思考轻量化视觉Transformer中的局部感知》作者单位: 清华大学发表时间: 2023论文地址: https://arxiv.org/abs/2303.17803代码地址: https://github.com/qhfan/CloF…

光猫、路由器、交换机之连接使用(Connection and Usage of Optical Cats, Routers, and Switches)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…