豆包ai 生成动态tree 增、删、改以及上移下移 html+jquery

news2025/1/8 0:04:46

@[豆包ai 生成动态tree 增、删、改以及上移下移 html+jquery)

人工Ai 编程

推荐一Kimi https://kimi.moonshot.cn/

推荐二 豆包https://www.doubao.com/

实现效果图

在这里插入图片描述

html 代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale = 1.0">
    <title>Chapter Tree</title>
    <style>
        /* 整体树容器样式 */
        #chapter-tree-container {
            padding-left: 20px;
        }

        /* 章节li样式 */
        li {
            position: relative;
            padding-left: 20px;
            margin: 5px 0;
            line-height: 24px;
        }

        /* 利用伪元素创建线条 */
        li::before {
            content: '';
            position: absolute;
            left: 0;
            top: 12px;
            width: 10px;
            border-top: 1px solid #ccc;
        }

        /* 顶级li去除顶部线条 */
        #chapter-tree-container ul li:first-child::before {
            border-top: none;
        }

        /* 有子章节的li添加垂直线条 */
        li:has(ul)::before {
            height: 100%;
            border-left: 1px solid #ccc;
        }

        /* 子章节ul样式 */
        ul {
            list-style-type: none;
            padding-left: 10px;
        }

        /* 美化 input */
        input.edit-input {
            width: 150px;
            padding: 8px;
            border: 1px solid #ccc;
            border-radius: 4px;
            font-size: 14px;
            color: #555;
            outline: none;
        }

        input.edit-input::placeholder {
            color: #999;
        }

        /* 美化操作按钮 */
        button {
            padding: 6px 12px;
            background-color: #007BFF;
            color: white;
            border: none;
            border-radius: 4px;
            font-size: 14px;
            cursor: pointer;
            transition: background-color 0.3s ease;
        }

        button:hover {
            background-color: #0056b3;
        }

        button.add-button {
            background-color: #28a745;
        }

        button.add-button:hover {
            background-color: #218838;
        }

        button.modify-button {
            background-color: #ffc107;
        }

        button.modify-button:hover {
            background-color: #e0a800;
        }

        button.delete-button {
            background-color: #dc3545;
        }

        button.delete-button:hover {
            background-color: #c82333;
        }

        /* 折叠按钮样式 */
        button[text="+"],
        button[text="-"] {
            width: 24px;
            height: 24px;
            border-radius: 50%;
            padding: 0;
            font-size: 14px;
            line-height: 24px;
            text-align: center;
        }
    </style>
</head>

<body>
    <div id="chapter-tree-container"></div>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        // 初始数据结构,为每个章节添加唯一 id
        var initialData = [
            {
                id: 1,
                name: "第一单元 成长的节拍",
                children: [
                    {
                        id: 2,
                        name: "第一课 中学时代",
                        children: [
                            { id: 3, name: "中学序曲" },
                            { id: 4, name: "珍惜青春" },
                            { id: 5, name: "步入中学生活" }
                        ]
                    },
                    {
                        id: 6,
                        name: "少年有梦",
                        children: [
                            { id: 7, name: "梦想的含义" },
                            { id: 8, name: "努力的意义" },
                            { id: 9, name: "实现理想的途径" },
                            { id: 10, name: "正确对待理想与现实" }
                        ]
                    }
                ]
            }
        ];

        // 渲染树形章节结构
        function renderTree(data) {
            // 清空旧的渲染内容
            $('#chapter-tree-container').empty();
            var ul = $("<ul>");
            function renderChildren(children, parentUl) {
                if (!children) return;
                children.forEach(function (child) {
                    let li;
                    li = $("<li>").data('chapter-id', child.id);
                    var expandButton = $("<button>").text("+");
                    expandButton.click(function () {
                        try {
                            var subUl = li.find("ul");
                            if (subUl.length) {
                                subUl.toggle();
                                expandButton.text(subUl.is(":visible")? "-" : "+");
                            } else {
                                var newSubUl = $("<ul>").hide();
                                renderChildren(child.children, newSubUl);
                                li.append(newSubUl);
                                newSubUl.show();
                                expandButton.text("-");
                            }
                        } catch (error) {
                            console.error('Error in expand button click:', error);
                        }
                    });
                    var chapterNameSpan = $("<span>").text(child.name).addClass('chapter-name-span');
                    // 添加增删改按钮
                    var addButton = $("<button>").text("添加").addClass('add-button');
                    var modifyButton = $("<button>").text("修改").addClass('modify-button');
                    var deleteButton = $("<button>").text("删除").addClass('delete-button');
                    var moveUpButton = $("<button>").text("上移");
                    var moveDownButton = $("<button>").text("下移");
                    var addSubChapterButton = $("<button>").text("添加子章节");

                    addButton.click(function () {
                        try {
                            addChapter(li);
                        } catch (error) {
                            console.error('Error in add button click:', error);
                        }
                    });
                    modifyButton.click(function () {
                        try {
                            var currentLi = $(this).closest('li');
                            var chapterId = currentLi.data('chapter-id');
                            var chapter = findChapterById(chapterId, initialData);
                            if (!chapter) {
                                console.error('Chapter not found for modification.');
                                return;
                            }
                            var chapterNameSpan = currentLi.find('.chapter-name-span:eq(0)');
                            var input = $("<input>").val(chapter.name).addClass('edit-input').focus();
                            chapterNameSpan.replaceWith(input);
                            input.on('blur', function () {
                                try {
                                    var newName = $(this).val();
                                    var currentLi = $(this).closest('li');
                                    var chapter = getChapterFromLi(currentLi);
                                    if (chapter) {
                                        chapter.name = newName;
                                        var newChapterNameSpan = $("<span>").text(newName).addClass('chapter-name-span');
                                        $(this).replaceWith(newChapterNameSpan);
                                        if (chapter.children && chapter.children.length > 0) {
                                            var subUl = currentLi.find('ul');
                                            if (!subUl.length) {
                                                subUl = $("<ul>");
                                                renderChildren(chapter.children, subUl);
                                                currentLi.append(subUl);
                                            }
                                        }
                                    }
                                } catch (error) {
                                    console.error('Error in blur event of edit input:', error);
                                }
                            });
                        } catch (error) {
                            console.error('Error in modify button click:', error);
                        }
                    });
                    deleteButton.click(function () {
                        try {
                            var chapterId = li.data('chapter-id');
                            var chapter = findChapterById(chapterId, initialData);
                            if (chapter) {
                                deleteChapter(chapter);
                            }
                        } catch (error) {
                            console.error('Error in delete button click:', error);
                        }
                    });
                    moveUpButton.click(function () {
                        try {
                            moveChapterUp(li);
                        } catch (error) {
                            console.error('Error in move up button click:', error);
                        }
                    });
                    moveDownButton.click(function () {
                        try {
                            moveChapterDown(li);
                        } catch (error) {
                            console.error('Error in move down button click:', error);
                        }
                    });
                    addSubChapterButton.click(function () {
                        try {
                            var chapterId = li.data('chapter-id');
                            var chapter = findChapterById(chapterId, initialData);
                            if (chapter) {
                                addSubChapter(chapter);
                            }
                        } catch (error) {
                            console.error('Error in add sub-chapter button click:', error);
                        }
                    });

                    li.append(expandButton, chapterNameSpan, addButton, modifyButton, deleteButton, moveUpButton, moveDownButton, addSubChapterButton);
                    if (child.children && child.children.length > 0) {
                        var subUl = $("<ul>");
                        renderChildren(child.children, subUl);
                        li.append(subUl);
                    }
                    parentUl.append(li);
                });
            }
            renderChildren(data, ul);
            $("#chapter-tree-container").append(ul);
        }

        // 添加章节
        function addChapter(clickedLi) {
            try {
                var newChapter = { id: Date.now(), name: "默认章节", children: [] };
                var parentUl = clickedLi.parent('ul');
                var parentChapter;
                if (parentUl.length) {
                    var parentLi = parentUl.parent('li');
                    if (parentLi.length) {
                        parentChapter = getChapterFromLi(parentLi);
                    } else {
                        // 顶级 ul 的情况
                        parentChapter = { children: initialData };
                    }
                } else {
                    // 顶级 li 的情况
                    parentChapter = { children: initialData };
                }
                if (!parentChapter.children) {
                    parentChapter.children = [];
                }
                parentChapter.children.push(newChapter);
                renderTree(initialData);
            } catch (error) {
                console.error('Error in addChapter function:', error);
            }
        }

        // 添加子章节
        function addSubChapter(parentNode) {
            try {
                var newChapter = { id: Date.now(), name: "默认子章节", children: [] };
                if (!parentNode.children) {
                    parentNode.children = [];
                }
                parentNode.children.push(newChapter);
                renderTree(initialData);
            } catch (error) {
                console.error('Error in addSubChapter function:', error);
            }
        }

        // 删除章节
        function deleteChapter(node) {
            try {
                if (node.parent) {
                    var index = node.parent.children.indexOf(node);
                    if (index >-1) {
                        node.parent.children.splice(index, 1);
                    }
                } else {
                    var index = initialData.indexOf(node);
                    if (index >-1) {
                        initialData.splice(index, 1);
                    }
                }
                renderTree(initialData);
            } catch (error) {
                console.error('Error in deleteChapter function:', error);
            }
        }

        // 章节上移
        function moveChapterUp(li) {
            try {
                var prevLi = li.prev("li");
                if (prevLi.length) {
                    var prevIndex = li.parent().children().index(prevLi);
                    var currentIndex = li.parent().children().index(li);
                    var parent = getParentOfLi(li);
                    if (parent && Array.isArray(parent.children)) {
                        var chapter = getChapterFromLi(li);
                        if (chapter) {
                            parent.children.splice(currentIndex, 1);
                            parent.children.splice(prevIndex, 0, chapter);
                        }
                    } else if (!parent && Array.isArray(initialData)) {
                        var chapter = getChapterFromLi(li);
                        if (chapter) {
                            initialData.splice(currentIndex, 1);
                            initialData.splice(prevIndex, 0, chapter);
                        }
                    }
                    li.insertBefore(prevLi);
                }
            } catch (error) {
                console.error('Error in moveChapterUp function:', error);
            }
        }

        // 章节下移
        function moveChapterDown(li) {
            try {
                var nextLi = li.next("li");
                if (nextLi.length) {
                    var nextIndex = li.parent().children().index(nextLi);
                    var currentIndex = li.parent().children().index(li);
                    var parent = getParentOfLi(li);
                    if (parent && Array.isArray(parent.children)) {
                        var chapter = getChapterFromLi(li);
                        if (chapter) {
                            parent.children.splice(currentIndex, 1);
                            parent.children.splice(nextIndex + 1, 0, chapter);
                        }
                    } else if (!parent && Array.isArray(initialData)) {
                        var chapter = getChapterFromLi(li);
                        if (chapter) {
                            initialData.splice(currentIndex, 1);
                            initialData.splice(nextIndex + 1, 0, chapter);
                        }
                    }
                    li.insertAfter(nextLi);
                }
            } catch (error) {
                console.error('Error in moveChapterDown function:', error);
            }
        }

        function getParentOfLi(li) {
            try {
                var parentLi = li.parent('li');
                if (parentLi.length) {
                    var parentChapterId = parentLi.data('chapter-id');
                    return findChapterById(parentChapterId, initialData);
                }
                return null;
            } catch (error) {
                console.error('Error in getParentOfLi function:', error);
            }
        }

        function getChapterFromLi(li) {
            try {
                var chapterId = li.data('chapter-id');
                return findChapterById(chapterId, initialData);
            } catch (error) {
                console.error('Error in getChapterFromLi function:', error);
            }
        }

        function findChapterById(id, data) {
            try {
                for (var i = 0; i < data.length; i++) {
                    if (data[i].id === id) {
                        return data[i];
                    }
                    if (data[i].children && data[i].children.length > 0) {
                        var found = findChapterById(id, data[i].children);
                        if (found) {
                            return found;
                        }
                    }
                }
                return null;
            } catch (error) {
                console.error('Error in findChapterById function:', error);
            }
        }

        // 初始化渲染
        $(document).ready(function () {
            renderTree(initialData);
        });
    </script>
</body>

</html>

上一版本有问题,下面是最新版本的。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale = 1.0">
    <title>Chapter Tree</title>
    <style>
        /* 整体树容器样式 */
        #chapter-tree-container {
            padding-left: 20px;
        }

        /* 章节li样式 */
        li {
            position: relative;
            padding-left: 20px;
            margin: 5px 0;
            line-height: 24px;
        }

        /* 利用伪元素创建线条 */
        li::before {
            content: '';
            position: absolute;
            left: 0;
            top: 12px;
            width: 10px;
            border-top: 1px solid #ccc;
        }

        /* 顶级li去除顶部线条 */
        #chapter-tree-container ul li:first-child::before {
            border-top: none;
        }

        /* 有子章节的li添加垂直线条 */
        li:has(ul)::before {
            height: 100%;
            border-left: 1px solid #ccc;
        }

        /* 子章节ul样式 */
        ul {
            list-style-type: none;
            padding-left: 10px;
        }

        /* 美化 input */
        input.edit-input {
            width: 150px;
            padding: 8px;
            border: 1px solid #ccc;
            border-radius: 4px;
            font-size: 14px;
            color: #555;
            outline: none;
        }

        input.edit-input::placeholder {
            color: #999;
        }

        /* 美化操作按钮 */
        button {
            padding: 6px 12px;
            background-color: #007BFF;
            color: white;
            border: none;
            border-radius: 4px;
            font-size: 14px;
            cursor: pointer;
            transition: background-color 0.3s ease;
        }

        button:hover {
            background-color: #0056b3;
        }

        button.add-button {
            background-color: #28a745;
        }

        button.add-button:hover {
            background-color: #218838;
        }

        button.modify-button {
            background-color: #ffc107;
        }

        button.modify-button:hover {
            background-color: #e0a800;
        }

        button.delete-button {
            background-color: #dc3545;
        }

        button.delete-button:hover {
            background-color: #c82333;
        }

        /* 折叠按钮样式 */
        button[text="+"],
        button[text="-"] {
            width: 24px;
            height: 24px;
            border-radius: 50%;
            padding: 0;
            font-size: 14px;
            line-height: 24px;
            text-align: center;
        }
    </style>
</head>

<body>
    <div id="chapter-tree-container"></div>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        // 初始数据结构,为每个章节添加唯一 id
        var initialData = [
            {
                id: 1,
                name: "第一单元 成长的节拍",
                children: [
                    {
                        id: 2,
                        name: "第一课 中学时代",
                        children: [
                            { id: 3, name: "中学序曲" },
                            { id: 4, name: "珍惜青春" },
                            { id: 5, name: "步入中学生活" }
                        ]
                    },
                    {
                        id: 6,
                        name: "少年有梦",
                        children: [
                            { id: 7, name: "梦想的含义" },
                            { id: 8, name: "努力的意义" },
                            { id: 9, name: "实现理想的途径" },
                            { id: 10, name: "正确对待理想与现实" }
                        ]
                    }
                ]
            }
        ];

        // 记录展开状态的对象
        var expandedStates = {};

        // 渲染树形章节结构
        function renderTree(data) {
            // 清空旧的渲染内容
            $('#chapter-tree-container').empty();
            var ul = $("<ul>");
            function renderChildren(children, parentUl) {
                if (!children) return;
                children.forEach(function (child) {
                    let li;
                    li = $("<li>").data('chapter-id', child.id);
                    var expandButton = $("<button>").text(expandedStates[child.id]? "-" : "+");
                    expandButton.click(function () {
                        try {
                            var subUl = li.find("ul");
                            if (subUl.length) {
                                subUl.toggle();
                                expandButton.text(subUl.is(":visible")? "-" : "+");
                                expandedStates[child.id] = subUl.is(":visible");
                            } else {
                                var newSubUl = $("<ul>").hide();
                                renderChildren(child.children, newSubUl);
                                li.append(newSubUl);
                                newSubUl.show();
                                expandButton.text("-");
                                expandedStates[child.id] = true;
                            }
                        } catch (error) {
                            console.error('Error in expand button click:', error);
                        }
                    });
                    var chapterNameSpan = $("<span>").text(child.name).addClass('chapter-name-span');
                    // 添加增删改按钮
                    var addButton = $("<button>").text("添加").addClass('add-button');
                    var modifyButton = $("<button>").text("修改").addClass('modify-button');
                    var deleteButton = $("<button>").text("删除").addClass('delete-button');
                    var moveUpButton = $("<button>").text("上移");
                    var moveDownButton = $("<button>").text("下移");
                    var addSubChapterButton = $("<button>").text("添加子章节");

                    addButton.click(function () {
                        try {
                            addChapter(li);
                        } catch (error) {
                            console.error('Error in add button click:', error);
                        }
                    });
                    modifyButton.click(function () {
                        try {
                            var currentLi = $(this).closest('li');
                            var chapterId = currentLi.data('chapter-id');
                            var chapter = findChapterById(chapterId, initialData);
                            if (!chapter) {
                                console.error('Chapter not found for modification.');
                                return;
                            }
                            var chapterNameSpan = currentLi.find('.chapter-name-span:eq(0)');
                            var input = $("<input>").val(chapter.name).addClass('edit-input').focus();
                            chapterNameSpan.replaceWith(input);
                            input.on('blur', function () {
                                try {
                                    var newName = $(this).val();
                                    var currentLi = $(this).closest('li');
                                    var chapter = getChapterFromLi(currentLi);
                                    if (chapter) {
                                        chapter.name = newName;
                                        var newChapterNameSpan = $("<span>").text(newName).addClass('chapter-name-span');
                                        $(this).replaceWith(newChapterNameSpan);
                                        if (chapter.children && chapter.children.length > 0) {
                                            var subUl = currentLi.find('ul');
                                            if (!subUl.length) {
                                                subUl = $("<ul>");
                                                renderChildren(chapter.children, subUl);
                                                currentLi.append(subUl);
                                            }
                                        }
                                    }
                                } catch (error) {
                                    console.error('Error in blur event of edit input:', error);
                                }
                            });
                        } catch (error) {
                            console.error('Error in modify button click:', error);
                        }
                    });
                    deleteButton.click(function () {
                        try {
                            var chapterId = li.data('chapter-id');
                            var chapter = findChapterById(chapterId, initialData);
                            if (chapter && (!chapter.children || (chapter.children && chapter.children.length === 0))) {
                                deleteChapter(chapter);
                            }
                        } catch (error) {
                            console.error('Error in delete button click:', error);
                        }
                    });
                    moveUpButton.click(function () {
                        try {
                            moveChapterUp(li);
                        } catch (error) {
                            console.error('Error in move up button click:', error);
                        }
                    });
                    moveDownButton.click(function () {
                        try {
                            moveChapterDown(li);
                        } catch (error) {
                            console.error('Error in move down button click:', error);
                        }
                    });
                    addSubChapterButton.click(function () {
                        try {
                            var chapterId = li.data('chapter-id');
                            var chapter = findChapterById(chapterId, initialData);
                            if (chapter) {
                                addSubChapter(chapter);
                            }
                        } catch (error) {
                            console.error('Error in add sub - chapter button click:', error);
                        }
                    });

                    li.append(expandButton, chapterNameSpan, addButton, modifyButton, deleteButton, moveUpButton, moveDownButton, addSubChapterButton);
                    if (child.children && child.children.length > 0) {
                        var subUl = $("<ul>");
                        renderChildren(child.children, subUl);
                        li.append(subUl);
                        if (expandedStates[child.id]) {
                            subUl.show();
                            expandButton.text("-");
                        } else {
                            subUl.hide();
                            expandButton.text("+");
                        }
                    }
                    parentUl.append(li);
                });
            }
            renderChildren(data, ul);
            $("#chapter-tree-container").append(ul);
        }

        // 添加章节
        function addChapter(clickedLi) {
            try {
                var newChapter = { id: Date.now(), name: "默认章节", children: [] };
                var parentUl = clickedLi.parent('ul');
                var parentChapter;
                if (parentUl.length) {
                    var parentLi = parentUl.parent('li');
                    if (parentLi.length) {
                        parentChapter = getChapterFromLi(parentLi);
                    } else {
                        // 顶级 ul 的情况
                        parentChapter = { children: initialData };
                    }
                } else {
                    // 顶级 li 的情况
                    parentChapter = { children: initialData };
                }
                if (!parentChapter.children) {
                    parentChapter.children = [];
                }
                parentChapter.children.push(newChapter);
                renderTree(initialData);
            } catch (error) {
                console.error('Error in addChapter function:', error);
            }
        }

        // 添加子章节
        function addSubChapter(parentNode) {
            try {
                var newChapter = { id: Date.now(), name: "默认子章节", children: [] };
                if (!parentNode.children) {
                    parentNode.children = [];
                }
                parentNode.children.push(newChapter);
                renderTree(initialData);
            } catch (error) {
                console.error('Error in addSubChapter function:', error);
            }
        }

        // 删除章节
        function deleteChapter(node) {
            try {
                let parent;
                let parentArray;
                if (node.id === initialData[0].id) {
                    initialData = [];
                } else {
                    const findParent = (data) => {
                        for (let i = 0; i < data.length; i++) {
                            if (data[i].children) {
                                for (let j = 0; j < data[i].children.length; j++) {
                                    if (data[i].children[j].id === node.id) {
                                        return { parent: data[i], index: j };
                                    }
                                }
                                const result = findParent(data[i].children);
                                if (result) {
                                    return result;
                                }
                            }
                        }
                        return null;
                    };
                    const parentInfo = findParent(initialData);
                    if (parentInfo) {
                        parent = parentInfo.parent;
                        parentArray = parent.children;
                        parentArray.splice(parentInfo.index, 1);
                    }
                }
                renderTree(initialData);
            } catch (error) {
                console.error('Error in deleteChapter function:', error);
            }
        }

        // 章节上移
        function moveChapterUp(li) {
            try {
                var chapter = getChapterFromLi(li);
                if (!chapter) {
                    return;
                }
                var parentArray = findContainingArray(chapter, initialData);
                if (!parentArray) {
                    return;
                }
                var currentIndex = parentArray.indexOf(chapter);
                if (currentIndex > 0) {
                    var temp = parentArray[currentIndex - 1];
                    parentArray[currentIndex - 1] = chapter;
                    parentArray[currentIndex] = temp;
                    renderTree(initialData);
                }
            } catch (error) {
                console.error('Error in moveChapterUp function:', error);
            }
        }

        // 章节下移
        function moveChapterDown(li) {
            try {
                var chapter = getChapterFromLi(li);
                if (!chapter) {
                    return;
                }
                var parentArray = findContainingArray(chapter, initialData);
                if (!parentArray) {
                    return;
                }
                var currentIndex = parentArray.indexOf(chapter);
                if (currentIndex < parentArray.length - 1) {
                    var temp = parentArray[currentIndex + 1];
                    parentArray[currentIndex + 1] = chapter;
                    parentArray[currentIndex] = temp;
                    renderTree(initialData);
                }
            } catch (error) {
                console.error('Error in moveChapterDown function:', error);
            }
        }

        function findContainingArray(target, data) {
            for (let i = 0; i < data.length; i++) {
                if (data[i].id === target.id) {
                    return data;
                }
                if (data[i].children) {
                    const subArray = findContainingArray(target, data[i].children);
                    if (subArray) {
                        return subArray;
                    }
                }
            }
            return null;
        }

        function getChapterFromLi(li) {
            const chapterId = li.data('chapter-id');
            return findChapterById(chapterId, initialData);
        }

        function findChapterById(id, data) {
            for (let i = 0; i < data.length; i++) {
                if (data[i].id === id) {
                    return data[i];
                }
                if (data[i].children) {
                    const found = findChapterById(id, data[i].children);
                    if (found) {
                        return found;
                    }
                }
            }
            return null;
        }

        // 初始化渲染
        $(document).ready(function () {
            renderTree(initialData);
        });
    </script>
</body>

</html>

学习Ai 大模型 第一步学会使用这些工具助手

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

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

相关文章

Redis(一)基本特点和常用全局命令

目录 一、Redis 的基本特点 1、速度快&#xff08;但空间有限&#xff09; 2、储存键值对的“非关系型数据库” 3、 功能丰富 4、 支持集群 5、支持持久化 6、主从复制架构 二、Redis 的典型应用场景 1、作为存储热点数据的缓存 2、作为消息队列服务器 3、作为把数据…

SpringMVC(三)请求

目录 一、RequestMapping注解 1.RequestMapping的属性 实例 1.在这里创建文件&#xff0c;命名为Test: 2.复现-返回一个页面&#xff1a; 创建test界面&#xff08;随便写点什么&#xff09;&#xff1a; Test文件中编写&#xff1a; ​编辑 运行&#xff1a; 3.不返回…

K8s集群平滑升级(Smooth Upgrade of K8S Cluster)

简介&#xff1a; Kubernetes ‌ &#xff08;简称K8s&#xff09;是一个开源的容器编排和管理平台&#xff0c;由Google开发并维护。它最初是为了解决谷歌内部大规模容器管理的问题而设计的&#xff0c;后来在2014年开源&#xff0c;成为云原生技术的核心组成部分。‌‌1 K8…

NO.1 《机器学习期末复习篇》以题(问答题)促习(人学习),满满干huo,大胆学大胆补!

目录 一、新手初学&#xff1f;该如何区分[人工智能] [机器学习] [深度学习]&#xff1f; [1]浅谈一下我的理解 [2]深度交流一下 人工智能&#xff08;AI, Artificial Intelligence&#xff09; 机器学习&#xff08;ML, Machine Learning&#xff09; 深度学习&#xff0…

零基础也能建站: 使用 WordPress 和 US Domain Center 轻松五步创建网站 (无需编程)

创建一个网站可能听起来很复杂&#xff0c;但只要使用正确的工具&#xff0c;你可以通过五个简单步骤构建一个专业网站 — — 无需编写任何代码&#xff01;在本教程中&#xff0c;我们将使用 WordPress 和 US Domain Center 指导你完成整个过程。完成后&#xff0c;你将拥有一…

pdf预览 报:Failed to load module script

pdf 预览报&#xff1a; Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of “application/octet-stream”. Strict MIME type checking is enforced for module scripts per HTML spec. 报错原因&#xff1a…

【JVM】总结篇之对象内存布局 执行引擎

文章目录 对象内存布局对象的实例化对象的内存布局对象的方问定位 执行引擎 对象内存布局 对象的实例化 new对象流程&#xff1f;&#xff08;龙湖地产&#xff09; 对象创建方法&#xff0c;对象的内存分配。&#xff08;360安全&#xff09; 1.判断对象对应的类是否加载、链…

力扣hot100——动态规划 多维动态规划

前言&#xff1a;题太多了TAT&#xff0c;只贴了部分我觉得比较好的题 32. 最长有效括号 class Solution { public:int longestValidParentheses(string s) {int n s.size();s " " s;vector<int> dp(n 1, 0);int ans 0;for (int i 2; i < n; i) {if…

leecode1143.最长公共子序列

这道题目和最长重复子数组是一个类型的不同之处在于text1[i]!text2[j]时dp[i][j]时他的值是继承上一行或上一列的最大值&#xff0c;二者dp数组的含义也不一样&#xff0c;这里的dp[i][j]表示的是以text[i]和text2[j]为结尾的子序列最大长度&#xff0c;这也是导致两种问题当判…

Multisim更新:振幅调制器+解调器(含仿真程序+文档+原理图+PCB)

前言 继3年前设计的&#xff1a;Multisim&#xff1a;振幅调制器的设计&#xff08;含仿真程序文档原理图PCB&#xff09;&#xff0c;有读者表示已经不能满足新需求&#xff0c;需要加上新的解调器功能&#x1f602;&#x1f602;&#x1f602;&#xff0c;鸽了很久这里便安排…

计算机网络复习(zcmu考试系统练习题)

温馨提示&#xff0c;Ctrl &#xff0b;F搜索关键词 练习网址&#xff1a;https://xxks.zcmu.edu.cn 术语辨析 数据链路层 该层在两个通信实体之间传送以帧为单位的数据&#xff0c;通过差错控制方法,使有差错的物理线路变成无差错数据链路。 网络层 负责使分组以适当的路径…

计算机网络——期末复习(5)期末考试样例1(含答案)

考试题型&#xff1b; 概念辨析&#xff15;个、计算与分析&#xff13;个、综合题&#xff13;&#xff0d;&#xff14;个 必考知识点&#xff1a; 概述&#xff1a;协议 体系结构 物理层&#xff1b;本次考核较少 链路层&#xff1a;CSMA/CD 退避二进制算法 &#xff0…

「Mac畅玩鸿蒙与硬件51」UI互动应用篇28 - 模拟记账应用

本篇教程将介绍如何创建一个模拟记账应用&#xff0c;通过账单输入、动态列表展示和实时统计功能&#xff0c;学习接口定义和组件间的数据交互。 关键词 UI互动应用接口定义动态列表实时统计数据交互 一、功能说明 模拟记账应用包含以下功能&#xff1a; 账单输入&#xff1…

Vue3 + ElementPlus动态合并数据相同的单元格(超级详细版)

最近的新项目有个需求需要合并单元列表。ElementPlus 的 Table 提供了合并行或列的方法&#xff0c;可以参考一下https://element-plus.org/zh-CN/component/table.html 但项目中&#xff0c;后台数据返回格式和指定合并是动态且没有规律的&#xff0c;Element 的示例过于简单&…

Uniapp Android 本地离线打包(详细流程)

一、简介 App 离线 SDK 暂时不支持 Kotlin&#xff0c;未来不清楚。 uniapp 提供了 云打包 与 本地打包 两种方案&#xff0c;云打包 需要排队且还有次数限制&#xff0c;本地打包 则就没有这些限制&#xff0c;而且会 本地打包 对开发 原生插件 有很大的帮助。 细节&#x…

党员学习交流平台

本文结尾处获取源码。 本文结尾处获取源码。 本文结尾处获取源码。 一、相关技术 后端&#xff1a;Java、JavaWeb / Springboot。前端&#xff1a;Vue、HTML / CSS / Javascript 等。数据库&#xff1a;MySQL 二、相关软件&#xff08;列出的软件其一均可运行&#xff09; I…

Gitee图形界面上传(详细步骤)

目录 1.软件安装 2.安装顺序 3.创建仓库 4.克隆远程仓库到本地电脑 提交代码的三板斧 1.软件安装 Git - Downloads (git-scm.com) Download – TortoiseGit – Windows Shell Interface to Git 2.安装顺序 1. 首先安装git-2.33.1-64-bit.exe&#xff0c;顺序不能搞错2. …

WPF区域导航+导航参数使用+路由守卫+导航日志

背景&#xff1a;使用ContentControl控件实现区域导航是有Mvvm框架的WPF都能使用的&#xff0c;不限于Prism 主要是将ContenControl控件的Content内容在ViewModel中切换成不同的用户控件 下面是MainViewModel&#xff1a; private object body;public object Body {get { retu…

DeepSeek v3为何爆火?如何用其集成Milvus搭建RAG?

最近&#xff0c;DeepSeek v3&#xff08;一个MoE模型&#xff0c;拥有671B参数&#xff0c;其中37B参数被激活&#xff09;模型全球爆火。 作为一款能与Claude 3.5 Sonnet&#xff0c;GPT-4o等模型匹敌的开源模型DeepSeek v3不仅将其算法开源&#xff0c;还放出一份扎实的技术…

得物基于AIGC生成测试用例的探索与实践

一、背景 随着人工智能技术的快速发展&#xff0c;尤其是在自然语言处理&#xff08;NLP&#xff09;、计算机视觉和生成对抗网络&#xff08;GANs&#xff09;等领域&#xff0c;AIGC&#xff08;AI Generated Content&#xff09;得到了广泛应用&#xff0c;这一技术的进步使…