javaweb03

news2024/11/17 17:26:44

Javaweb03

使用DAO层对学生管理系统进行处理
在这里插入图片描述

1.准备工作

创建DAOUtil工具类,封装JDBC

package com.grg.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author Grg
 * @Date 2023/8/23 13:23
 * @PackageName:com.grg.util
 * @ClassName: DAOUtil
 * @Description: 又是码代码的一天
 * @Version plus max 宇宙无敌终极版本
 */
public class DAOUtil {
    //消除魔法值
    private static final String CLASSNAME = "com.mysql.cj.jdbc.Driver";
    private static final String URL = "jdbc:mysql:///jdbctest";
    private static final String USERNAME = "root";
    private static final String PASSWORDS = "123456";

    //加载驱动
    static {
        try {
            Class.forName(CLASSNAME);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    //建立连接
    public static Connection getConnection() throws Exception {
        return DriverManager.getConnection(URL, USERNAME, PASSWORDS);
    }


    //增删改
    public static int executeUpdate(String sql,Object[] data){
        Connection conn = null;
        try {
            conn = DAOUtil.getConnection();
            PreparedStatement ps = conn.prepareStatement(sql);

            for (int i = 0; i < data.length; i++) {
                ps.setObject(i+1,data[i]);
            }

            return ps.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if(conn != null) {
                    conn.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        return 0;
    }

    //查
    public static List<Map<String,Object>> executeQuery(String sql, Object... arr){

        List<Map<String,Object>> data = new ArrayList<>();
        Connection conn = null;
        try {
            conn = DAOUtil.getConnection();
            PreparedStatement ps = conn.prepareStatement(sql);
            for (int i = 0; i < arr.length; i++) {
                ps.setObject(i+1,arr[i]);
            }
            ResultSet set = ps.executeQuery();
            int columnCount = set.getMetaData().getColumnCount();
            while (set.next()){
                HashMap<String, Object> map = new HashMap<>();
                for( int i=0;i<columnCount;i++){
                    map.put( set.getMetaData().getColumnLabel(i+1) , set.getObject(i+1)   );
                }
                data.add(map);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if(conn != null) {
                    conn.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        return  data;
    }
}

创建学生类,当进行多参数传递时,利用对象传参

package com.grg.dto;

import java.io.Serializable;

/**
 * @Author Grg
 * @Date 2023/8/23 13:22
 * @PackageName:com.grg.dto
 * @ClassName: Student
 * @Description: 又是码代码的一天
 * @Version plus max 宇宙无敌终极版本
 */
public class Student implements Serializable {
    private Integer id ;
    private String name;
    private Integer age;
    private String address;

    public Student(Integer id, String name, Integer age, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public Student() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}

POM文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>StudentDAO</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>StudentDAO Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.33</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>StudentDAO</finalName>
  </build>
</project>

2.DAO

创建StudentDAO接口,其中写了所需要用到的方法

package com.grg.dao;

import com.grg.dto.Student;

import java.util.List;
import java.util.Map;

/**
 * @Author Grg
 * @Date 2023/8/23 13:20
 * @PackageName:com.grg.dao
 * @ClassName: StudentDAO
 * @Description: 又是码代码的一天
 * @Version plus max 宇宙无敌终极版本
 */
public interface StudentDAO {
    /**
     * 查询所有学生
     * @return
     */
    List<Map<String, Object>> listAllStudents();

    /**
     * 删除学生
     * @param id
     * @return
     */
    int delStudentById(String id);

    /**
     * 添加学生
     * @param s
     * @return
     */
    int addStudent(Student s);

    /**
     * 更新学生
     * @param s
     * @return
     */
    int updateStudent(Student s);

    /**
     * 获取需要更新数据
     * @param id
     * @return
     */
    List<Map<String, Object>> getStudentId(String id);
}

创建StudentDAOImpl实现类

package com.grg.dao.impl;

import com.grg.dao.StudentDAO;
import com.grg.dto.Student;
import com.grg.util.DAOUtil;

import java.util.List;
import java.util.Map;

/**
 * @Author Grg
 * @Date 2023/8/23 13:19
 * @PackageName:com.grg.dao.impl
 * @ClassName: studentDAOImpl
 * @Description: 又是码代码的一天
 * @Version plus max 宇宙无敌终极版本
 */
public class StudentDAOImpl implements StudentDAO {
    @Override
    public List<Map<String, Object>> listAllStudents() {
        String sql = "select * from student";
        return DAOUtil.executeQuery(sql);
    }

    @Override
    public int delStudentById(String id) {
        String sql = "delete from student where id = ?";
        Object[] data = {id};
        return DAOUtil.executeUpdate(sql, data);

    }

    @Override
    public int addStudent(Student s) {
        String sql = "insert into student values (null,?,?,?)";
        Object[] data = {s.getName(), s.getAge(), s.getAddress()};
        return DAOUtil.executeUpdate(sql, data);
    }

    @Override
    public int updateStudent(Student s) {
        String sql = "update student set  name=?,age=?,address=? where id = ?";
        Object[] data = { s.getName(), s.getAge(), s.getAddress(),s.getId()};
        return DAOUtil.executeUpdate(sql, data);
    }

    @Override
    public List<Map<String, Object>> getStudentId(String id) {
        String sql = "select * from student where id = " + id;
        return DAOUtil.executeQuery(sql);
    }
}

3.Servlet

展示数据创建StudentServlet

@WebServlet("/stu")
public class StudentServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        StudentDAO studentDAO = new StudentDAOImpl();
        //查找所有学生
        List<Map<String, Object>> data = studentDAO.listAllStudents();

        //传递
        req.setAttribute("aaa",data);
        req.getRequestDispatcher("student.jsp").forward(req,resp);
    }
}

添加数据创建AddStuServlet

@WebServlet("/addStu")
public class AddStuServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接收请求参数
        req.setCharacterEncoding("UTF-8");

        String name = req.getParameter("name");
        String age = req.getParameter("age");
        String address = req.getParameter("address");

        //用student对象作为参数传递
        Student student = new Student(null, name, Integer.parseInt(age), address);
        StudentDAO studentDAO = new StudentDAOImpl();
        int i = studentDAO.addStudent(student);

        //传递
        req.setAttribute("msg", i > 0 ? "添加成功" : "添加失败");
        req.getRequestDispatcher("addStu.jsp").forward(req, resp);

    }
}

删除数据创建DelStuServlet

@WebServlet("/delStu")
public class DelStuServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接收参数
        String id = req.getParameter("id");

        //删除数据
        StudentDAO studentDAO = new StudentDAOImpl();
        int i = studentDAO.delStudentById(id);

        //传递
        req.getRequestDispatcher("stu").forward(req,resp);
    }
}

修改数据创建ToUpdateServlet和UpdateStuServlet

@WebServlet("/toUpdate")
public class ToUpdateServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接收参数
        String id = req.getParameter("id");

        //查询学生
        StudentDAO studentDAO = new StudentDAOImpl();
        List<Map<String, Object>> data = studentDAO.getStudentId(id);

        //传递
        if(data.size()>0){
            req.setAttribute("student",data.get(0));
        }
        req.getRequestDispatcher("updateStu.jsp").forward(req,resp);


    }
}
@WebServlet("/updateStu")
public class UpdateStuServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接收参数
        req.setCharacterEncoding("UTF-8");

        String id = req.getParameter("id");
        String name = req.getParameter("name");
        String age = req.getParameter("age");
        String address = req.getParameter("address");

        //修改数据 使用student对象来传递参数
        Student student = new  Student(Integer.parseInt(id), name, Integer.parseInt(age), address);
        StudentDAO studentDAO = new StudentDAOImpl();
        int i = studentDAO.updateStudent(student);

        //传递
        req.setAttribute("msg", i>0 ? "修改成功" : "修改失败");
        req.getRequestDispatcher("updateStu.jsp").forward(req,resp);
    }
}

4.JSP

student.jsp

<%--
  Created by IntelliJ IDEA.
  User: asus
  Date: 2023/8/23
  Time: 13:39
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"
          integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
    <style>
        .jumbotron {
            text-align: center;
            background: linear-gradient(45deg, #020031, #6d3353);
            color: white;
        }
    </style>
</head>
<body>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<div class="jumbotron">
    <h1>欢迎来到学生管理系统</h1>
    <p>欢迎您</p>
    <p><a class="btn btn-primary btn-lg" href="/day01/addStu.jsp" role="button">添加学生</a></p>
</div>

<table class="table table-striped table-bordered table-hover table-condensed">
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>住址</th>
        <th style="width: 200px;">操作</th>
    </tr>

    <c:forEach var="s" items="${aaa}">
        <tr>
            <td>${s.id}</td>
            <td>${s.name}</td>
            <td>${s.age}</td>
            <td>${s.address}</td>
            <td>
                <button class="btn btn-danger" οnclick="delStu(${s.id})">删除</button>
                <a href="/day01/toUpdate?id=${s.id}" class="btn btn-primary">修改</a>
            </td>
        </tr>

    </c:forEach>
</table>

<script>
    function delStu(a){
        if(confirm("确定删除吗")){
            window.location.href = "/day01/delStu?id="+ a;
        }
    }
</script>
</body>
</html>

addStu.jsp

<%--
  Created by IntelliJ IDEA.
  User: asus
  Date: 2023/8/23
  Time: 13:41
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"
          integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
    <style>
        fieldset {
            width: 500px;
            margin: 100px auto;
        }
    </style>
</head>
<body>
<fieldset>
    <legend>添加学生
        <span class="label label-primary">${msg}</span>
    </legend>
    <form class="form-horizontal" action="/day01/addStu" method="post">
        <div class="form-group">
            <label for="inputEmail3" class="col-sm-2 control-label">学生姓名</label>
            <div class="col-sm-10">
                <input name="name" type="text" class="form-control" id="inputEmail3" placeholder="请输入学生姓名">
            </div>
        </div>
        <div class="form-group">
            <label for="inputPassword3" class="col-sm-2 control-label">学生年龄</label>
            <div class="col-sm-10">
                <input name="age" type="text" class="form-control" id="inputPassword3" placeholder="请输入学生年龄">
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-2 control-label">学生住址</label>
            <div class="col-sm-10">
                <select name="address" id="">
                    <option>北京</option>
                    <option>上海</option>
                    <option>郑州</option>
                </select>
            </div>
        </div>

        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <button type="submit" class="btn btn-default btn-success">添加</button>
                <a href="/day01/stu" class="btn btn-default btn-danger">返回</a>
            </div>
        </div>
    </form>
</fieldset>
</body>
</html>
</body>
</html>

updateStu.jsp

<%--
  Created by IntelliJ IDEA.
  User: asus
  Date: 2023/8/23
  Time: 13:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"
          integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">

    <style>
        fieldset {
            width: 500px;
            margin: 100px auto;
        }
    </style>
</head>
<body>

<fieldset>
    <legend>修改学生</legend>

    <span class="label label-primary">${msg}</span>
    <form class="form-horizontal" action="/day01/updateStu" method="post">
        <input value="${student.id}" name="id" type="hidden">
        <div class="form-group">
            <label for="inputEmail3" class="col-sm-2 control-label">学生姓名</label>
            <div class="col-sm-10">
                <input value="${student.name}" name="name" type="text" class="form-control" id="inputEmail3"
                       placeholder="请输入学生姓名">
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-2 control-label">学生年龄</label>
            <div class="col-sm-10">
                <input name="age" value="${student.age}" type="text" class="form-control" id="inputPassword3"
                       placeholder="请输入学生年龄">
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-2 control-label">学生住址</label>
            <div class="col-sm-10">
                <select name="address">
                    <option value="北京" id="北京">北京</option>
                    <option value="上海" id="上海">上海</option>
                    <option value="郑州" id="郑州">郑州</option>
                </select>
            </div>
        </div>

        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <button type="submit" class="btn btn-default btn-success">修改</button>
                <a href="/day01/stu" class="btn btn-default btn-danger">返回</a>
            </div>
        </div>
    </form>
</fieldset>

<script>
    document.getElementById(${student.address}).selected = true;
</script>
</body>
</html>

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

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

相关文章

前端简介(HTML+CSS+JS)

学习Django过程中遇到一些前端相关的内容&#xff0c;于是整理了一下相关概念。 前端开发是创建WEB页面或APP等前端界面呈现给用户的过程。 如果只是想要入门前端&#xff0c;只要学习网页三剑客(HTML、CSS、JavaScript)即可。 如果把网页比喻成一个房子&#xff0c;HTML就是…

2023年人工智能与自动化控制国际学术会议(AIAC 2023)

2023年人工智能与自动化控制国际学术会议&#xff08;AIAC 2023&#xff09; The 2023 International Conference on Artificial Intelligence and Automation Control 2023年人工智能与自动化控制国际学术会议&#xff08;AIAC 2023&#xff09;将于2023年10月27-29日在中…

K8S集群中使用JDOS KMS服务对敏感数据安全加密 | 京东云技术团队

基本概念 KMS&#xff0c;Key Management Service&#xff0c;即密钥管理服务&#xff0c;在K8S集群中&#xff0c;以驱动和插件的形式启用对Secret&#xff0c;Configmap进行加密。以保护敏感数据&#xff0c; 驱动和插件需要使用者按照需求进行定制和实现自己的KMS插件&…

plist打包工具,CppTextu打包png生成多张大图及plist文件

plist打包工具&#xff0c;CppTextu打包png生成多张大图及plist文件 TexturePacker是一款快速打包图片的工具&#xff0c;功能强大&#xff0c;非常适合打包游戏素材,如果游戏素材比较多&#xff0c;打包时会根据设置图片最大尺寸可能生成多张图片&#xff0c;这个功能是旨在减…

冠达管理股票分析:底部光头光脚阴线?

底部光头光脚阴线”这个词组起源于股市中的K线图形状剖析&#xff0c;表示股价处于趋势下跌并抵达底部时呈现的一种K线图形状。具体来说&#xff0c;它是由一根下影线较长&#xff0c;实体较小或许没有实体&#xff0c;上影线极短甚至完全没有的K线构成。那么&#xff0c;为什么…

港联证券|股票风险大吗?股票亏了怎么办?

在股市波动剧烈的时分&#xff0c;很多人会忧虑本身投资是否安全&#xff0c;是否能够获得理想的收益。那么股票危险大吗&#xff1f;股票亏了怎么办&#xff1f;我们准备了相关内容&#xff0c;以供参考。 股票危险大吗&#xff1f; 股票危险大不大并没有一个肯定的答案&…

gif太大了微信发不了?怎么压缩gif图片?

微信发送gif动图是有限制的&#xff0c;尺寸不能超过1000&#xff0c;大小不能超过10M&#xff0c;因此当gif动图超出限制范围就会出现无法发送的问题&#xff0c;这时候简单的解决方法就是将gif动图的大小压缩变小&#xff0c;下面给大家汇总了几个方法&#xff0c;供参考使用…

LVS DR模式搭建

目录 一、DR模式概述 一、与NET模式的区别 二、操作命令图 三、搭建流程 一、首先配置三台虚拟机并配置环境&#xff08;关闭防火墙&#xff0c;宽容模式&#xff09; 二、ping通百度 三、在115.3的&#xff08;lvs&#xff09;虚拟机上安装 ipvsadm 四、调整ARP参数 五…

数据库类型

文章目录 数据库的类型1. 关系型数据库2. 非关系型数据库NOSQL3. 常见的关系型数据库3.1 Oracle3.2 DB23.3 SQL Server3.4 MySQL 数据库的类型 主要分为四大类&#xff1a; 一&#xff1a;关系型数据库。 二&#xff1a;非关系型数据库。 三&#xff1a;网状数据库。 四&#…

ssm学生公寓管理中心系统源码和论文

ssm学生公寓管理中心系统源码和论文057 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;…

猿创征文|一位.Net开发工程师的客户端技术栈的学习路线

&#x1f40b;作者简介&#xff1a;博主是一位.Net开发者&#xff0c;同时也是RPA和低代码平台的践行者。 &#x1f42c;个人主页&#xff1a;会敲键盘的肘子 &#x1f430;系列专栏&#xff1a;.Net实用方法总结 &#x1f980;专栏简介&#xff1a;博主针对.Net开发和C站问答过…

mybatis-plus如何使用枚举类来实现性别和标签的数字带描述

文章目录 目录 文章目录 前言 一、环境准备 二、使用步骤 一 实体类 二 枚举类 三 持久层 四 控制层 总结 前言 枚举是一种表示一组有限可能取值的数据类型。它具有以下几个好处&#xff1a; 易于理解和维护&#xff1a;枚举提供了一种清晰明了的方式来表示一组具体的取值&a…

存储技术------存储接口和协议总结

存储技术------存储接口和协议总结 存储技术------存储接口和协议总结一、网络存储接口ATA: 在并行中没落SATA: 在低端徘徊SCSI: 中端存储的主流之选iSCSI &#xff1a;TCP\IP的SCSI SAS: 接口协议的明日帝国FC: 高端应用的基石MSATAM.2: 为SSD存储而生M.2接口&#xff08;NVMe…

Elasticsearch 常见的简单查询

查看es中有哪些索引 请求方式&#xff1a;GET 请求地址&#xff1a;http://localhost:9200 /_cat/indices?v 参数&#xff1a;无 结果&#xff1a; 查看索引全部数据 请求方式&#xff1a;GET 请求地址&#xff1a;http://localhost:9200/index-2023-08/_search 参数&a…

Android开发基础知识总结(五)Activity专题

Activity是安卓开发中的四大组件之一&#xff0c;也是最重要的一者。APP中每一个对应的页面&#xff0c;底层都有唯一地Activity与之对应~ Activity之间通过Intent进行通信,应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明&#xff0c;否则系统将不识别也不…

龙蜥社区标准化SIG举行线下社区标准研讨会,助力开源社区规范发展

8月11日下午&#xff0c;龙蜥社区标准化SIG组织召开线下MeetUp会议&#xff0c;来自阿里云、浪潮信息、Intel、CSDN、联通软件研究院、红旗软件、中兴通讯|中兴新支点、中科曙光、中科方德、统信软件、龙芯、上海兆芯、麒麟软件、万里红、普华基础软件、飞腾信息等公司的30多位…

AI狂飙,云端IDE如何书写未来?TVP吐槽大会邀您来论道

随着云原生的发展&#xff0c;数字化转型的深入&#xff0c;云端开发场景越发丰富&#xff0c;今年&#xff0c;云端 IDE 逐渐成为聚光灯下的一大焦点&#xff0c;CNCF 在 2023 年云原生预测中提出 “云原生 IDE 成为常态”。云端 IDE 创造了一个端到端的开发环境&#xff0c;并…

4.4TCP半连接队列和全连接队列

目录 什么是 TCP 半连接队列和全连接队列&#xff1f; TCP 全连接队列溢出 如何知道应用程序的 TCP 全连接队列大小&#xff1f; 如何模拟 TCP 全连接队列溢出的场景&#xff1f; 全连接队列溢出会发生什么 ? 如何增大全连接队列呢 ? TCP 半连接队列溢出 如何查看 TC…

思维调试:理解 DDE 的初始化过程

最近有人问我下面这个问题&#xff0c;我们依然可以使用之前我提到的 “思维调试” 来研究研究。 我们碰到了一个技术问题。当在资源管理器中双击打开文档时&#xff0c;资源管理器不会启动我们的应用程序。 更加奇怪的是&#xff0c;如果我们将一个调试器挂接到资源管理器进程…

git通过fork-merge request实现多人协同

一、问题 对于一个项目&#xff0c;如果需要多人协同开发&#xff0c;大家都在原始仓库中进行修改提交&#xff0c;经常会发生冲突&#xff0c;而且一不小心会把别人的代码内容覆盖掉。为了避免这样的问题&#xff0c;git提供了fork-merge request这样的协同方式。 二、仓库框…