JavaWeb学习(4)(四大域、HttpSession原理(面试)、SessionAPI、Session实现验证码功能)
目录
一、web四大域。
(1)基本介绍。
(2)RequestScope。(请求域)
(3)SessionScope。(会话域)
(4)ApplicationScope。(应用域)
(5)PageScope。(页面域)
二、HttpSession原理。
(1)Session的基本介绍。
(2)会话是什么?
1、会话的基本介绍。
2、会话的生命周期。
(3)HttpSession接口API。
1、HttpSession域对象功能。
2、HttpSession特有方法与属性。
(4)HttpSession底层原理。
1、Session的最基本特征。
2、Session底层图解。
3、Session底层解释。
4、Session自动失效与手动失效。
三、使用Session实现验证码与注销功能。
(1)前端jsp:表单项-验证码的代码。
(2)生成验证码的Servlet类。
(3)运行效果图。
(4)最终验证码的实现步骤。
1、第一次请求与响应。
2、第二次请求与响应。
3、第三次请求与响应。
4、LoginServlet类代码。
一、web四大域。
(1)基本介绍。
- 在JavaWeb开发中,"四大域"是指四种不同的作用域(scope),它们用于存储和管理用户会话中的数据。
(2)RequestScope。(请求域)
- 作用域限定在"一次请求"中。即一个Servlet处理一个客户端请求的过程中。
- 其数据存储在HttpServl
etRequest对象中。- 常用于存储一次请求中需要的数据,比如表单提交的数据。
- 使用次数:较多。
(3)SessionScope。(会话域)
- 作用域限定在"一个用户会话"中。即从用户打开浏览器到关闭浏览器的整个过程中。
- 数据存储在HttpSession对象中。
- 常用于存储用户登录状态、用户偏好设置等需要跨多个请求保持的数据。
- 使用次数:多。
(4)ApplicationScope。(应用域)
- 作用域限定在"整个Web应用程序"中。即所有用户共享。
- 数据存储在ServletContext对象ServletContext中。
- 常用于存储全局信息。(比如配置信息、应用级别的计数器等)
- 使用次数:较少。
(5)PageScope。(页面域)
- 作用域限定在"JSP页面的生命周期"内。即从JSP页面被请求到页面渲染完成的过程中。
- 数据存储在JSP页面的隐式对象pageContext中。
- 常用于存储JSP页面内的数据,比如JSP标签和脚本片段之间的数据共享。
- 使用次数:较少。
二、HttpSession原理。
(1)Session的基本介绍。
- 在JavaWeb开发中,Session通常指的是HttpSession接口。
- HttpSession是Java Servlet API提供的一个接口。
- HttpSession的对象代表了客户端与服务器端之间的一个会话。用于在客户端和服务器端之间保持状态,即跟踪用户的会话。
(2)会话是什么?
1、会话的基本介绍。
- 在Web开发中,会话(Session)是指服务器与客户端之间的一次连续的交互过程,它允许服务器跟踪和存储用户的状态信息。
- 客户端打开浏览器,访问服务器,表示会话开始。只要浏览器不关闭,本次会话一直存在。而且这次的会话的所有请求,全部共享一个Session域。(request域对象,只在用一次请求有效,作用域小)
- 当客户端关闭浏览器,表示会话的结束。
- 每一个客户端都有自己的会话。(Session)
2、会话的生命周期。
- 会话有开始和结束。
- 通常:从用户第一次与服务器交互时创建,直到用户关闭浏览器。
- 其它情况:会话超时或服务器配置的最大会话时间限制。
(3)HttpSession接口API。
- 查阅javaEE接口文档。
1、HttpSession域对象功能。
- 如下都是Session的重要方法。
- 其中有几个四大域对象都有的方法。其它的是Session域对象特有的特性与方法。
2、HttpSession特有方法与属性。
- SessionID:Session的唯一标识。
- setMaxInactiveInterval(int):最大间隔时间意思就是该Session从上一次使用到下一次使用的间隔。
- invalidate():让当前Session失效!用户的退出登录(注销)功能实现就是让当前Session域失效!
- 注销类"LogOutServlet"代码如下。
package com.fs.web;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException;/*** @Title: LoginService* @Author HeYouLong* @Package com.fs.web* @Date 2024/11/25 下午9:16* @description: 退出登录处理*/ @WebServlet("/logout") public class LogOutServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//让session失效req.getSession().invalidate();//重定向到登录界面resp.sendRedirect("/login.jsp");} }
(4)HttpSession底层原理。
1、Session的最基本特征。
- 创建于服务器,保存于服务器。
- 每一个用户都有自己的Session对象。(Session不是共享的)
- 底层依赖于——Cookie实现。
2、Session底层图解。
- 服务器为每一个客户端创建Session对象时,都会生成唯一的SessionID。
- 响应给客户端时,将SessionID存储在Cookie中。注意SessionID是加密的。Cookie之后的每一次请求会自动的将SessionID发送给服务器。
- 服务器拿到SessionID进行解析并寻找对应的Session对象。
3、Session底层解释。
- Session底层是依赖Cookie的!
- 注意Session无法跨浏览器的。
- 当我首次去银行时,因为还没有账号,所以需要开一个账号,我获得的是银行卡,而银行这边的数据库中留下了我的账号,我的钱是保存在银行的账号中,而我带走的是我的卡号。
- 当我再次去银行时,只需要带上我的卡,而无需再次开一个账号了。只要带上我的卡,那么我在银行操作的一定是我的账号!
- 当首次使用Session时,服务器端要创建Session对象。Session是保存在服务器端,而给客户端的是SessionID(一个cookie中保存SessionID)。客户端带走的是SessionID,而数据是保存在Session对象中。
- 当客户端再次访问服务器时,在请求中会带上SessionID。而服务器会通过SessionID找到对应的Session对象,而无需再创建新的Session对象。
4、Session自动失效与手动失效。
- 开发人员可以通过调用Session对象的的invalidate()方法来手动使Session失效。这通常在用户注销或退出登录时使用。
- Session对象会有一个默认的超时时间,如果用户在这段时间内没有任何操作,Session将会自动失效。
当服务器重启或重启应用时,所有的Session对象都会被销毁,导致所有用户的Session失效。或者关闭浏览器通常也会导致Session失效。
三、使用Session实现验证码与注销功能。
(1)前端jsp:表单项-验证码的代码。
- 注意生成验证码图片的功能是通过代码完成。(访问指定的"/XXXServlet")
- 注意:css样式使用的是bootstrap提供的样式与组件。通过<link>标签在线引入。
<div class="form-inline"><label for="vcode">验证码:</label><input type="text" name="verifycode" class="form-control" id="verifycode" placeholder="请输入验证码" style="width: 120px;"/><a href="javascript:refreshCode()"><img src="/checkCode" title="看不清点击刷新" id="vcode"/></a></div>
- 刷新验证码时,触发点击事件,调用方法refreshCode()。代码如下。
<script type="text/javascript">//js定义函数function refreshCode(){//不做下面处理,就会走浏览器缓存, url没有变化, 导致使用上一次缓存内容,不会刷新验证码//选择器 #id名——>获取到img标签//使用attr()设置属性"src"值。//加一个时间戳, 每次都不一样, 浏览器发现参数不一样, 误以为是新请求,不走缓存,就会刷新$("#vcode").attr("src","/checkCode?"+new Date().getTime());}</script>
(2)生成验证码的Servlet类。
package com.fs.web;import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** 验证码*/ @WebServlet("/checkCode") public class CheckCodeServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//服务器通知浏览器不要缓存response.setHeader("pragma","no-cache");response.setHeader("cache-control","no-cache");response.setHeader("expires","0");//在内存中创建一个长80,宽30的图片,默认黑色背景//参数一:长//参数二:宽//参数三:颜色int width = 80;int height = 30;BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//获取画笔Graphics g = image.getGraphics();//设置画笔颜色为灰色g.setColor(Color.GRAY);//填充图片g.fillRect(0,0, width,height);//产生4个随机验证码,12EyString checkCode = getCheckCode();//将验证码放入HttpSession中。//这里很重要,因为登录请求时,需要拿取服务器生成的验证码与用户输入的验证码进行校验!request.getSession().setAttribute("CHECKCODE_SERVER",checkCode);//设置画笔颜色为黄色g.setColor(Color.YELLOW);//设置字体的小大g.setFont(new Font("黑体",Font.BOLD,24));//向图片上写入验证码g.drawString(checkCode,15,25);//将内存中的图片输出到浏览器//参数一:图片对象//参数二:图片的格式,如PNG,JPG,GIF//参数三:图片输出到哪里去ImageIO.write(image,"PNG",response.getOutputStream());}/*** 产生4位随机字符串 */private String getCheckCode() {String base = "0123456789ABCDEFGabcdefg";int size = base.length();Random r = new Random();StringBuffer sb = new StringBuffer();for(int i=1;i<=4;i++){//产生0到size-1的随机值int index = r.nextInt(size);//在base字符串中获取下标为index的字符char c = base.charAt(index);//将c放入到StringBuffer中去sb.append(c);}return sb.toString();}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request,response);} }
(3)运行效果图。
(4)最终验证码的实现步骤。
1、第一次请求与响应。
- 第一次请求:客户端请求login.jsp(登录页面)。
- 服务器第一次响应。在客户端显示login.jsp(登录页面)。
2、第二次请求与响应。
- 第二次请求"XXXServlet":请求客户端登录界面中的随机验证码图片。
- 服务器第二次响应。并将生成的随机验证码存储在Session域中。
- 为什么验证码不存储在Cookie中?不安全、无意义。因为Cookie暴露在客户端,用户可以查看和修改!
- 随后在登录界面的验证码位置显示生成的验证码图片。
3、第三次请求与响应。
- 第三次请求:用户在客户端填写(用户名、密码、验证码等)后,点击提交"登录"按钮。也就是登录请求。("/LoginServlet")
- 服务器处理请求。首先判断验证码是否正确!!
- 如何校验用户输入的验证码与服务器响应的验证码一致?
- 在第二次请求与响应中,服务器将生成的随机验证码存储在Session中。因为验证码每生成一次就不能让用户去更改,所以存储在服务器(域对象),而不是存储在客户端
- 使用Session技术!而不使用Request域。是因为不是同一次请求,拿不到数据。
- 通过会话(Session)技术可以实现该功能。
- 第三次请求服务器拿到用户提交的验证码与Session域获取到的验证码进行比对即可。
- 通过HttpServletRequest对象的getSession()方法获取到HttpSession对象。
- 再通过HttpSession对象的getAttribute("键名")得到对应的键值(验证码)即可。
4、LoginServlet类代码。
- 其中涉及到"记住我"功能的实现。(使用Cookie技术)
package com.fs.web;import com.fs.entity.LoginInfo; import com.fs.service.LoginService; import com.fs.service.impl.LoginServiceImpl;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; import java.util.Objects;/*** @Title: LoginService* @Author HeYouLong* @Package com.fs.web* @Date 2024/11/25 下午9:16* @description: 登录处理*/ @WebServlet("/login") public class LoginServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.设置post请求编码, 响应编码req.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=UTF-8");//进行验证码验证//获取用户输入的验证码String verifycode = req.getParameter("verifycode");//获取服务器发来的验证码。与session存的验证码比对HttpSession session = req.getSession();String codeServer = (String) session.getAttribute("CHECKCODE_SERVER");if (codeServer.equals(verifycode)) {//2.获取请求参数String username = req.getParameter("user");String password = req.getParameter("password");//3.调用业务层LoginService的登录方法LoginService loginService = new LoginServiceImpl();LoginInfo loginInfo = loginService.login(username, password);//4.根据返回结果跳转到不同的资源if (loginInfo != null) { //登录成功//判断是否勾选记住我String rem = req.getParameter("rem");if (Objects.nonNull(rem)) {//设置CookieCookie cookie1 = new Cookie("user", username);Cookie cookie2 = new Cookie("password", password);//设置存活时间(单位:秒)//7天cookie1.setMaxAge(60 * 60 * 24 * 7);cookie2.setMaxAge(60 * 60 * 24 * 7);//设置path为/ 项目下任何资源可以访问cookie1.setPath("/");cookie2.setPath("/");//发送Cookieresp.addCookie(cookie1);resp.addCookie(cookie2);}//跳转之前把LoginInfo对象保存到session域中session.setAttribute("loginUser",loginInfo);//重定向到index.html页面resp.sendRedirect("/index.jsp");} else { //登录失败//转发到登录页面req.setAttribute("error", "账号或密码错误!");req.getRequestDispatcher("/login.jsp").forward(req, resp);}} else { //验证码错误req.setAttribute("error", "验证码输入错误!");req.getRequestDispatcher("/login.jsp").forward(req, resp);}} }
相关文章:
JavaWeb学习(4)(四大域、HttpSession原理(面试)、SessionAPI、Session实现验证码功能)
目录 一、web四大域。 (1)基本介绍。 (2)RequestScope。(请求域) (3)SessionScope。(会话域) (4)ApplicationScope。(应用域) (5)PageScope。(页面域) 二、Ht…...
quartz 架构详解
Quartz是一个开源的作业调度框架,完全由Java编写,主要用于定时任务的调度和管理。Quartz的架构主要包括以下几个核心组件: 1.调度器(Scheduler):调度器是Quartz的核心组件,负责管理Qua…...
Redis安装和Python练习(Windows11 + Python3.X + Pycharm社区版)
环境 Windows11 Python3.X Pycharm社区版 思路 1 github下载redis压缩包 ,安装并启动redis服务,在Pycharm中运行python程序,连接redis服务,熟悉redis的使用和巩固python语言。 2 python开发环境的搭建参考 https://mp.csdn.…...
明年 iPhone 将搭载苹果自研 5G 基带芯片
明年 iPhone 将搭载苹果自研 5G 基带芯片 据彭博社记者 Mark Gurman 透露,苹果首款自主研发 5G 基带芯片即将面世。 苹果首款自研 5G 基带芯片将命名为「Sinope」,将应用在 2025 年发布的 iPhone SE、iPhone 17 Slim 版以及低端系列的 iPad 系列。「Si…...
1.1 Beginner Level学习之“编写简单的发布服务器和订阅服务器”(第十二节)
学习大纲: 1. 编写发布服务器节点 在ROS中,**节点(Node)**是与ROS网络通信的基本单位。在这个部分,我们将创建一个简单的发布节点(talker),它会不断向话题(topic&#x…...
C语言 字符串操作函数
strncpy() 用于将一个字符串的一部分拷贝到另一个字符串中。 char* strncpy(char* destination, const char* source, size_t num);参数:destination 是目标字符串的指针,表示将要拷贝到的位置source 是源字符串的指针,表示要拷贝的字符串num…...
论文概览 |《Cities》2024.07 Vol.150(上)
本次给大家整理的是《Cities》杂志2024年07月第150期的论文的题目和摘要,一共包括90篇SCI论文!由于论文过多,我们将通过两篇文章进行介绍,本篇文章介绍第1--第45篇论文! 论文1 Spatiotemporal infection dynamics: Linking indiv…...
查看Windows系统上的Redis服务器是否设置了密码
查看 Redis 配置文件 1.找到 Redis 配置文件: 通常Redis配置文件名为 redis.windows.conf 或 redis.conf,它位于Redis安装目录中。 2.打开配置文件: 使用文本编辑器(如Notepad、VS Code等)打开该文件。 3.查找 re…...
30天学会Go--第6天 GO语言 RESTful API 学习与实践
30天学会Go–第6天 GO语言 RESTful API 学习与实践 文章目录 30天学会Go--第6天 GO语言 RESTful API 学习与实践一、 RESTful API 的设计原则1.1 RESTful API 的核心概念1.2 RESTful API 的 URL 设计1.3 RESTful API 的数据格式 二、 实现 RESTful API2.1 定义数据模型2.2 实现…...
数据分析特征标准化方法及其Python实现
数据分析特征标准化方法及其Python实现 1、概述 在数据分析中,对特征进行标准化主要是: 1、消除量纲影响 不同特征可能具有不同的量纲和数量级。 例如,一个特征可能是以米为单位的长度,而另一个特征可能是以秒为单位的时间。直接使用这些具有不同量纲的原始数据进行分析…...
【推导过程】常用共轭先验分布
文章目录 相关教程相关文献常用共轭先验分布预备知识贝叶斯统计后验分布的计算 正态均值(方差已知)的共轭先验分布是正态分布二项分布中的成功概率 θ 的共轭先验分布是贝塔分布正态均值(方差已知)的共轭先验分布是倒伽玛分布 作者:小猪快跑 基础数学&计算数学&…...
notepad++安装教程(超详细)
1.下载地址(可以私信博主) https://notepad-plus.en.softonic.com/download 2.解压安装...
Django快速入门
目录 1 创建django工程2 运行django3 Django工程目录详解4 开始一个app5 CBV和FBV6 使用模板7 使用模板语言8 自定义simple_tag Django 是用 Python 写的一个自由和开放源码 web 应用程序框架。 web框架是一套组件,能帮助你更快、更容易地开发web站点。当你开始构建…...
ISO45001职业健康安全管理体系认证流程
前期准备 领导决策:企业高层领导需认识到实施 ISO 45001 体系的重要性和必要性,做出认证决策,并承诺提供必要的资源支持。成立工作小组:由企业各相关部门人员组成工作小组,明确各成员的职责和分工,确保工作…...
Elasticsearch一分钟
参考 FST有穷状态转换器/咆哮位图/增量缩紧 Es技术难点 架构...
MFC中如何创建一个非模态对话框
对话框是编程中常用的一个控件,非模态对话框与用户交互更加友好,用户不必关闭对话框就能进行其他操作,比如拷贝黏贴,对比数据,执行其他命令。 由于无模态对话经常使用,且用法类似,因此我把它写…...
【设计模式】单例模式 在java中的应用
文章目录 引言什么是单例模式单例模式的应用场景单例模式的优缺点优点缺点 单例模式的基本实现饿汉式单例模式懒汉式单例模式双重检查锁定静态内部类枚举单例 单例模式的线程安全问题多线程环境下的单例模式线程安全的实现方式1. **懒汉式单例模式(线程不安全&#…...
北京2024年CSP-S/J 及NOIP游记
北京2024年CSP-S/J 及NOIP游记 2024.9 开学2024.9 CSP-S12024.9 停课2024.10假期 误入歧途2024.10 CSP-S2 冲刺 2024.9 开学 开学升入初三,9月的前半个月一直在搞文化课(把文化课搞得风生水起),经历了1天的校运动会(摆…...
vue 纯前端对接阿里云oss文件上传封装,支持批量多文件上传,大文件上传时拿到上传进度。
使用阿里云上传先看官方文档(阿里云官方文档) 我这边只做了简单上传和分片上传,也包含了粘贴上传和拖拽上传。 1.首页先安装 npm i ali-oss2.在utils下创建uploadOss.js const OSS require(ali-oss) import { getOsstoken } from /api/in…...
YOLO系列发展历程:从YOLOv1到YOLO11,目标检测技术的革新与突破
文章目录 前言一、YOLOv1:单阶段目标检测的开端二、YOLOv2:更精准的实时检测三、YOLOv3:阶梯特征融合四、YOLOv4:性能和速度的新平衡五、YOLOv5:易用性和扩展性的加强六、YOLOv6:工业部署的利器七、YOLOv7&…...
认识Java中的异常(半成品)
1.异常的概念与体系结构 1.1在Java中,将程序执行过程中发生的不正常行为称为异常.比如 1.算数异常 public class Main1 {public static void main(String[] args){System.out.println(10/0);} } //异常信息为:Exception in thread "main" java.lang.ArithmeticExc…...
Sqoop 指令语法手册
目录 help指令list-databases参数描述示例 codegen参数描述 Sqoop create-hive-table参数描述 eval参数描述 Export参数描述 import参数描述 import-all-tables参数描述 import-mainframe参数描述 job参数描述 list-tables参数描述 merge参数描述 help指令 sqoop help 下面的S…...
网络安全 - SQL Injection
1.1.1 摘要 日前,国内最大的程序员社区CSDN网站的用户数据库被黑客公开发布,600万用户的登录名及密码被公开泄露,随后又有多家网站的用户密码被流传于网络,连日来引发众多网民对自己账号、密码等互联网信息被盗取的普遍担忧。 网络…...
spi 发送与接收 移位写法
spi _tx 发送模块 片选信号cs可以在top顶层控制模块产生 timescale 1ns / 1psmodule spi_rom#(parameter SIZE 8 )(input wire clk ,input wire rst_n,input wire [SIZE-1:0] data ,input wire …...
MyBatis关联映射
目录 一、什么是关联注解? 二、数据库建表 1.学生表 2.教师表 三、一般查询 (1)创建StudentTeacher类 (2)mapper层 (3)Dao接口 (4)Test类 (5&#x…...
通过华为鲲鹏认证的软件产品如何助力信创产业
软件通过华为鲲鹏认证与信创产业有着密切的联系。鲲鹏认证是华为推动信创产业发展的一项重要举措,通过该认证,软件可以在华为的生态系统中实现更好的兼容性和性能优化,从而推动信创产业的全面发展和国产化替代。 鲲鹏认证的定义和重要性 鲲…...
陈志刚解读:国家数据基础设施建设解读(附下载)
本期分享陈志刚解读:国家数据基础设施建设解读,从背景意图、概念内涵、发展愿景与总体功能、总体架构、重点方向、算力底座、网络支撑、安全防护和组织保障十个方面展开,共52页ppt。 加入星球可获取完整版资料 篇幅限制,部分内容…...
QT 中 sqlite 数据库使用
一、前提 --pro文件添加sql模块QT core gui sql二、使用 说明 --用于与数据库建立连接QSqlDatabase--执行各种sql语句QSqlQuery--提供数据库特定的错误信息QSqlError查看qt支持的驱动 QStringList list QSqlDatabase::drivers();qDebug()<<list;连接 sqlite3 数据库 …...
VPN设备
定义: 虚拟专用网络指的是在公用网络上建立专用网络的技术。之所以称为虚拟网主要是因为整个VPN网络的任意两个节点之间的连接并没 有传统专网所需的端到端的物理链路,而是架构在公用网络服务商所提供的网络平台之上的逻辑网络,用户数据在逻辑链路中传输…...
centos部署SkyWalking并在springcloud项目中用法举例
文章目录 场景SkyWalking介绍部署部署Storage [单机版Elasticsearch]部署SkyWalking OAP [下载地址](https://skywalking.apache.org/downloads/#SkyWalkingAPM)部署SkyWalking Java AgentspringCloud 使用举例 场景 SkyWalking是应用性能监控平台,可用于分布式系统…...
[创业之路-186]:《华为战略管理法-DSTE实战体系》-1-为什么UTStarcom死了,华为却活了,而且越活越好?
目录 前言 一、市场定位与战略选择 二、技术创新能力 三、企业文化与团队建设 四、应对危机的能力 五、客户为中心的理念 六、市场适应性与战略灵活性 七、技术创新与研发投入 八、企业文化与团队建设 九、应对危机的能力 前言 UT斯达康(UTStarcom&#…...
算法设计5_分支限界法
分支限界法 分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树,裁剪那些不能得到最优解的子树以提高搜索效率。 步骤: ① 定义解空间(对解编码); ② 确定解空间的树结构; ③ 按BFS等方式搜索: a.每个活…...
【设计模式系列】状态模式(二十三)
一、什么是状态模式 状态模式(State Pattern)是一种行为设计模式,其核心目的是管理一个对象在其内部状态改变时的行为变化,其核心理念是将对象的行为和状态分离。这种模式通过将每个状态相关的行为封装在独立的类中,使…...
github创建发布分支
创建一个名为 latest 的分支,并将其作为稳定版本分支。以下是操作步骤: 1. 创建 latest 分支 首先,确保你在 master 分支(或当前的稳定版本分支)上,并且已经提交了所有更改。然后,你可以创建一…...
【Linux】网络服务
声明,以下内容均学习自《Linux就该这么学》一书 1、创建网络会话 Linux系统使用NetworkManager提供网络服务,它是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态。 nmcli nmcli是一款基于命令行的网络配置工具,它…...
错题:Linux C语言
题目:手写代码:判断一个数(int类型的整数)中有有多少1 题目:手写代码:判断一个数(转换成二进制表示时)有几个1 #include <stdio.h> int main(int argc, const char *argv[]) { //判断一个数…...
机器学习期末速成
文章参考自B站机器学习期末速成课 本文仅作者个人复习使用 一、机器学习分类 聚类和分类的区别: 分类:一开始就知道有哪些类别 聚类:一开始不知道有哪些类别 损失函数:简单来说就是你预测出来的结果和真实值的差距。 0-1损失函数…...
【学习总结|DAY015】Java面向对象高级-抽象类、接口
引言 在今天的课程中,我们详细探讨了 Java 编程语言的几个核心特性:多态、final 关键字、抽象类和接口。这些概念是面向对象编程的基础,对于构建健壮、可维护的应用至关重要。本文将通过具体的例子和解释帮助大家更好地掌握这些知识点。 一…...
单词拼写纠正-04-161.力扣 相隔为 1 的编辑距离
拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法,如果提升 100W 倍的性能? NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊! 一个提升英文单词拼…...
深入理解 NumPy 广播机制:从基础到应用
目录 什么是广播机制?广播机制的规则广播机制示例1. 一维数组与标量运算2. 二维数组与一维数组运算3. 维度不同的数组运算4. 广播失败的情况 广播机制的实际应用场景1. 数据归一化2. 批量计算欧氏距离 总结广播机制的核心要点: 在使用 NumPy 进行数组操作…...
Springboot(五十三)SpringBoot3整合redisson
前边我们有记录Springboot2/3整合redis的方式。是基于Springboot默认集成的Lettuce客户端实现的。 今天我们在项目中集成的redission是在Lettuce之上构建的redis客户端。 Redisson:一个在Jedis和Lettuce之上构建的Redis客户端。提供了一系列分布式Java对象和服务,比如:分布式…...
UAC2.0 speaker——带反馈端点的 USB speaker(16bit 单声道)
UAC2.0 speaker 系列文章 UAC2.0 speaker——单声道 USB speaker(16bit) UAC2.0 speaker——类特殊请求 UAC2.0 speaker——音量控制 UAC2.0 speaker——多采样率支持 UAC2.0 speaker——24/32bit 支持 UAC2.0 speaker——speaker 数据传输 UAC2.0 speaker——同时支持 16bi…...
P2562 [AHOI2002] Kitty猫基因编码
P1498P2562 [AHOI2002] Kitty猫基因编码 #include <iostream> using namespace std; #include <cmath> #include <vector> #include <string> string encode(string str){if(str.find("0") string::npos) return "B";if(str.fin…...
HarmonyOS(65) ArkUI FrameNode详解
Node 1、Node简介2、FrameNode2.1、创建和删除节点2.2、对FrameNode的增删改2.3 FramNode的查询功能3、demo源码4、总结5、参考资料1、Node简介 在HarmonyOS(63) ArkUI 自定义占位组件NodeContainer介绍了自定义节点复用的原理(阅读本本篇博文之前,建议先读读这个),在Node…...
40分钟学 Go 语言高并发:负载均衡与服务治理
负载均衡与服务治理 一、知识要点总览 模块核心内容技术实现难度负载策略轮询、权重、最小连接数自定义负载均衡器中服务降级服务降级、熔断降级、限流降级Hystrix模式高熔断机制熔断器状态机、失败计数、自动恢复Circuit Breaker高限流设计令牌桶、滑动窗口、计数器Rate Lim…...
Python 从入门到实战45(Pandas数据操作)
我们的目标是:通过这一套资料学习下来,可以熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们学习了pandas数据读写的相关基础知识。今天学习一下…...
node js 历史版本下载
此为node历史版本下载地址 https://nodejs.org/dist/https://nodejs.org/dist/...
无代码探索AI大模型:腾讯云函数计算的卓越实践
在数字化转型的浪潮中,人工智能(AI)技术已经成为企业提升竞争力的关键。然而,对于许多业务人员来说,技术门槛高、开发周期长等问题限制了他们快速探索和应用AI大模型的能力。同时,对于缺乏GPU资源的开发者来…...
网页数据抓取:融合BeautifulSoup和Scrapy的高级爬虫技术
网页数据抓取:融合BeautifulSoup和Scrapy的高级爬虫技术 在当今的大数据时代,网络爬虫技术已经成为获取信息的重要手段之一。Python凭借其强大的库支持,成为了进行网页数据抓取的首选语言。在众多的爬虫库中,BeautifulSoup和Scra…...
vivado中,generate output product 和Create HDL wrapper的作用
generate output product 以zynq的ip核举例,没有generate output product之前,在ip source 什么也看不到。 但是同样的一个ip核,generate output product之后,会生成综合,布线和仿真文件,约束文件等等。 …...