• 【从零开始的Java开发】2-9-2 案例:仿Windows计算器


    需求与准备

    1. 实现单击按钮录入数字
    2. 实现基础四则运算功能,并添加必要的异常处理,如除数为零等
    3. 实现小数点功能并添加异常处理:小数点只能出现一次
    4. 实现正负号功能
    5. 实现退位功能,已经是最后一位时,显示框显示为0
    6. 清屏功能

    准备

    创三个文件,html,css,js。

    html:

    DOCTYPE html>
    <html>
    
    <head>
        <title>title>
        
        <link rel="stylesheet" type="text/css" href="calculator_css.css">
        
        <script type="text/javascript" src="calculator_js.js">script>
    head>
    
    <body>
    body>
    
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    事件的两种添加方法

    html:

    <body onload="f2()">
        
        <input type="button" value="test1" id="btn1" onclick="f1()">
        
        <input type="button" value="test2" id="btn2">
    body>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    js:

    function f1() {
        alert("test1");
    }
    
    function f2() {
        document.getElementById("btn2").onclick = function() {
            alert("test2");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    则:点test1按钮就弹出test1,点test2按钮就弹出test2.

    计算机面板

    • 一个文本框
    • 10个数字
    • 加减乘除
    • 一个小数点
    • 一个退位键
    • 一个正负号
    • 一个等号
    • 一个清屏

    一共有20个元素。

    步骤一:一个大概

    html:

    <body>
        <div id="div1">
            <div id="div2">
                
                <input type="text" name="" id="" />
            div>
            <div id="div3">
                
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="0" name="" id="" />
            div>
        div>
    body>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    css:

    /*选择所有*/
    * {
        margin: 0px;
        padding: 0px;
    }
    
    /*选择所有div*/
    div {
        width: 170px;
    }
    
    /*选择id是div1的*/
    #div1 {
        top: 60px;
        left: 100px;
        position: absolute;
    }
    
    /*选择所有input开头的,类型是button的*/
    input[type="button"] {
        width: 30px;
        /*一般选择右边距:这样可以左对齐*/
        margin-right: 5px;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    大概长成这样。
    在这里插入图片描述
    有效果可知,我们要把文本框拉小一些。

    增加css:

    input[type="text"] {
        width: 146px;
        /*调整一下就能得到*/
    }
    
    • 1
    • 2
    • 3
    • 4

    于是就对齐了。

    步骤二:写上value

    <body>
        <div id="div1">
            <div id="div2">
                
                <input type="text" name="" id="" />
            div>
            <div id="div3">
                
                
                <input type="button" value="C" name="" id="" />
                
                <input type="button" value="" name="" id="" />
                <input type="button" value="+/-" name="" id="" />
                <input type="button" value="/" name="" id="" />
                <input type="button" value="1" name="" id="" />
                <input type="button" value="2" name="" id="" />
                <input type="button" value="3" name="" id="" />
                <input type="button" value="*" name="" id="" />
                <input type="button" value="4" name="" id="" />
                <input type="button" value="5" name="" id="" />
                <input type="button" value="6" name="" id="" />
                <input type="button" value="-" name="" id="" />
                <input type="button" value="7" name="" id="" />
                <input type="button" value="8" name="" id="" />
                <input type="button" value="9" name="" id="" />
                <input type="button" value="+" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="." name="" id="" />
                <input type="button" value="=" name="" id="" />
                
                <input type="button" value="m" name="" id="" />
            div>
        div>
    body>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    效果:
    在这里插入图片描述

    步骤三:文本框

    • 文本框默认显示为0且右对齐:

    html的div2改成:

    <div id="div2">
                
                <input type="text" value="0" name="" id="" />
     div>
    
    • 1
    • 2
    • 3
    • 4

    css的input[type="text"]改成:

    input[type="text"] {
        /*调整一下就能得到*/
        width: 146px;
        /*令文本框内数字右对齐*/
        text-align: right;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    或者在js中集中初始化中设置默认为0。

    function init() {
        // 获取文本框
        var num = document.getElementById("num");
        //文本框默认为0
        num.value = 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 禁用文本框的键盘输入

    方法1:写在标签里,不推荐。

    <div id="div2">
                
                <input type="text" value="0" name="" id="" disabled="disabled" />
    div>
    
    • 1
    • 2
    • 3
    • 4

    方法2:写在js的初始化(集中)里,推荐。

    //init加上
    num.disabled = "disabled";
    
    • 1
    • 2

    效果:
    在这里插入图片描述

    步骤四:单击按钮使文本框显示数字

    用1举例:
    html:

    <input type="button" value="1" name="" id="" onclick="num_1_click()" />
    
    • 1

    js:

    function num_1_click() {
        var num = document.getElementById("num");
        //文本框的值
        var n = num.value;
        //字符串拼接
        if (n == "0") {
            n = "1";
        } else {
            n = n + "1";
        }
    
        num.value = n;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    狂点1后的显示效果:
    在这里插入图片描述
    然后可以2-9也这样改。但是,如果给每一个按钮都添加一个事件,这样的耦合度太高了,不够好。

    步骤五:单击按钮使文本框显示数字的优化1

    按钮1的js:

    function num_1_click() {
        var num = document.getElementById("num");
        //文本框的值
        var n = num.value;
        //字符串拼接
        n = n + "1";
    
        num.value = n * 1;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    按钮2的js:

    function num_2_click() {
        var num = document.getElementById("num");
        //文本框的值
        var n = num.value;
        //字符串拼接
        n = n + "2";
    
        num.value = n * 1;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    我们可以很容易看出,这些代码的重复性很高。

    接下来是另一个方法。需求:点击任何一个案件则弹出这个案件的内容。

    js:

    function init() {
        // 获取文本框
        var num = document.getElementById("num");
        //文本框默认为0
        num.value = 0;
        //禁用文本框
        num.disabled = "disabled";
    	
    	//获取所有input
        var oButton = document.getElementsByTagName("input");//这是数组
        for (var i = 0; i < oButton.length; i++) {
            oButton[i].onclick = function() {
                alert(this.value);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    接下来,我们要做的事情:

    • 单击的如果是数字,要让他出现在文本框内
    • 单击的如果是其他,则要有对应功能

    如何区分数字和非数字呢?

    步骤六:单击按钮使文本框显示数字的优化2

    区分数字的js:

    //是数字 返回true
    function isNumber(n) {
        return !isNaN(n);
    }
    
    • 1
    • 2
    • 3
    • 4

    init:

    function init() {
        // 获取文本框
        var num = document.getElementById("num");
        //文本框默认为0
        num.value = 0;
        //禁用文本框
        num.disabled = "disabled";
    
        var oButton = document.getElementsByTagName("input");
        for (var i = 0; i < oButton.length; i++) {
            oButton[i].onclick = function() {
                if (isNumber(this.value)) {
                    //在文本框追加数字:*1可以去除前导零
                    num.value = (num.value + this.value) * 1;
                } else {
    
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    效果:数字的追加很顺利。
    在这里插入图片描述

    步骤七:非数字按钮的显示与四则运算的实现

    js的if-else:

    if (isNumber(this.value)) {
                    //在文本框追加数字:*1可以去除前导零
                    num.value = (num.value + this.value) * 1;
                } else {
                    //判断所单击的是什么
                    var btn_num = this.value;
                    // alert(btn_num);
    
    
                    switch (btn_num) {
                        case "+":
                            {
                                btn_num1 = parseInt(num.value);
                                num.value = 0;
                                flag = 1;
                                break;
                            }
                        case "-":
                            {
                                btn_num1 = parseInt(num.value);
                                num.value = 0;
                                flag = 2;
                                break;
                            }
                        case "*":
                            {
                                btn_num1 = parseInt(num.value);
                                num.value = 0;
                                flag = 3;
                                break;
                            }
                        case "/":
                            {
                                btn_num1 = parseInt(num.value);
                                num.value = 0;
                                flag = 4;
                                break;
                            }
                        case "=":
                            {
                                if (flag == 1) {
                                    // alert(num.value);
                                    // alert(btn_num1);
                                    num.value = parseInt(num.value) + btn_num1;
                                } else if (flag == 2) {
                                    num.value = btn_num1 - parseInt(num.value);
                                } else if (flag == 3) {
                                    num.value = parseInt(num.value) * btn_num1;
                                } else {
                                    if (parseInt(num.value) == 0) {
                                        num.value = 0;
                                        alert("除数不能为0!");
                                    } else {
                                        num.value = btn_num1 / parseInt(num.value);
                                    }
                                }
                                break;
                            }
                            //剩下的还没写呢
                        case ".":
                            {
                                break;
                            }
                        case "C":
                            {
                                break;
                            }
                        case "⬅":
                            {
                                break;
                            }
                        case "+/-":
                            {
                                break;
                            }
                        case "m":
                            {
                                break;
                            }
                    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    步骤八:小数点功能的实现

    • 小数点只能出现一次
    • 之前的parseInt()要改成Number()

    case "."部分:

    case ".":
    {
         num.value = dec_number(num.value);
         break;
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    dec_number

    //小数点功能
    function dec_number(n) {
        //不存在
        if (n.indexOf(".") == -1) {
            n = n + ".";
        }
        return n;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    步骤九:退位键功能的实现

    js:

    //退位键功能
    function back(n) {
        if (n == "0" || n.length == 0 || n.length == 1) {
            n = "0";
        } else {
            n = n.substr(0, n.length - 1);
        }
        return n;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    步骤十:清屏和正负号功能的实现

    正负号js:

    //正负号
    function sign(n) {
        //正
        if (n.indexOf("-") == -1) {
            n = "-" + n;
        } else {
            //负
            n = n.substr(1, n.length);
        }
        return n;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    清屏js:

    case "C":
    {
         num.value = "0";
         break;
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    步骤十一:其他补充

    包括:

    1. 鼠标浮动在按键上有一个背景色的改变
    2. 鼠标点击m后可以点开一个在线计算器的网址
    3. 加大文本框里数字与右边框的距离

    鼠标浮动在按键上有一个背景色的改变css:

    /*在任何一个按钮上产生浮动时*/
    input[type="button"]:hover {
        background-color: lightpink;
        border: 1px solid;
        /*去掉边框*/
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    鼠标点击m后可以点开一个在线计算器的网址js:

    // 鼠标点击m后可以点开一个在线计算器的网址
    function click() {
        var m = document.getElementById("m");
        m.onclick = function() {
            window.location.href = "https://cal.supfree.net/";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    加大文本框里数字与右边框的距离css:

    input[type="text"] {
        /*调整一下就能得到*/
        width: 150px;
        /*令文本框内数字右对齐*/
        text-align: right;
        /*文本框设置为白色*/
        background-color: #ffffff;
        /*边框b不要太粗*/
        border: 1px solid;
        /*添加的是这下面的*/
        /*添加右侧内边距: 用已存在的border-box*/
        box-sizing: border-box;
        padding-right: 5px;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    大功告成!
    在这里插入图片描述

    总体代码

    html

    DOCTYPE html>
    <html>
    
    <head>
        <title>title>
        
        <link rel="stylesheet" type="text/css" href="calculator_css.css">
        
        <script type="text/javascript" src="calculator_js.js">script>
    head>
    
    <body onload="init(),click()">
        <div id="div1">
            <div id="div2">
                
                <input type="text" value="" name="num" id="num" />
            div>
            <div id="div3">
                
                
                <input type="button" value="C" name="" id="" />
                
                <input type="button" value="" name="" id="" />
                <input type="button" value="+/-" name="" id="" />
                <input type="button" value="/" name="" id="" />
                <input type="button" value="1" name="n1" id="n1" />
                <input type="button" value="2" name="" id="" />
                <input type="button" value="3" name="" id="" />
                <input type="button" value="*" name="" id="" />
                <input type="button" value="4" name="" id="" />
                <input type="button" value="5" name="" id="" />
                <input type="button" value="6" name="" id="" />
                <input type="button" value="-" name="" id="" />
                <input type="button" value="7" name="" id="" />
                <input type="button" value="8" name="" id="" />
                <input type="button" value="9" name="" id="" />
                <input type="button" value="+" name="" id="" />
                <input type="button" value="0" name="" id="" />
                <input type="button" value="." name="" id="" />
                <input type="button" value="=" name="" id="" />
                
                <input type="button" value="m" name="m" id="m" />
            div>
        div>
    body>
    
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    css

    /*选择所有*/
    * {
        margin: 0px;
        padding: 0px;
    }
    
    /*选择所有div*/
    div {
        width: 170px;
    }
    
    /*选择id是div1的*/
    #div1 {
        top: 60px;
        left: 100px;
        position: absolute;
    }
    
    /*选择所有input开头的,类型是button的*/
    input[type="button"] {
        width: 30px;
        /*一般选择右边距:这样可以左对齐*/
        margin-right: 5px;
        /*上边距*/
        margin-top: 5px;
    }
    
    input[type="text"] {
        /*调整一下就能得到*/
        width: 150px;
        /*令文本框内数字右对齐*/
        text-align: right;
        /*文本框设置为白色*/
        background-color: #ffffff;
        /*边框b不要太粗*/
        border: 1px solid;
        /*添加右侧内边距: 用已存在的border-box*/
        box-sizing: border-box;
        padding-right: 5px;
    }
    
    /*在任何一个按钮上产生浮动时*/
    input[type="button"]:hover {
        background-color: lightpink;
        border: 1px solid;
        /*去掉边框*/
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    js

    //应该是全局变量才行
    var btn_num1;
    var flag = 0;
    
    function init() {
        // 获取文本框
        var num = document.getElementById("num");
        //文本框默认为0
        num.value = 0;
        //禁用文本框
        num.disabled = "disabled";
    
        var oButton = document.getElementsByTagName("input");
        for (var i = 0; i < oButton.length; i++) {
            oButton[i].onclick = function() {
                if (isNumber(this.value)) {
                    //在文本框追加数字:*1可以去除前导零
                    num.value = (num.value + this.value) * 1;
                } else {
                    //判断所单击的是什么
                    var btn_num = this.value;
                    // alert(btn_num);
    
    
                    switch (btn_num) {
                        case "+":
                            {
                                btn_num1 = Number(num.value);
                                num.value = 0;
                                flag = 1;
                                break;
                            }
                        case "-":
                            {
                                btn_num1 = Number(num.value);
                                num.value = 0;
                                flag = 2;
                                break;
                            }
                        case "*":
                            {
                                btn_num1 = Number(num.value);
                                num.value = 0;
                                flag = 3;
                                break;
                            }
                        case "/":
                            {
                                btn_num1 = Number(num.value);
                                num.value = 0;
                                flag = 4;
                                break;
                            }
                        case "=":
                            {
                                if (flag == 1) {
                                    // alert(num.value);
                                    // alert(btn_num1);
                                    num.value = Number(num.value) + btn_num1;
                                } else if (flag == 2) {
                                    num.value = btn_num1 - Number(num.value);
                                } else if (flag == 3) {
                                    num.value = Number(num.value) * btn_num1;
                                } else {
                                    if (Number(num.value) == 0) {
                                        num.value = 0;
                                        alert("除数不能为0!");
                                    } else {
                                        num.value = btn_num1 / Number(num.value);
                                    }
                                }
                                break;
                            }
                        case ".":
                            {
                                num.value = dec_number(num.value);
                                break;
                            }
                        case "C":
                            {
                                num.value = "0";
                                break;
                            }
                        case "⬅":
                            {
                                num.value = back(num.value);
                                break;
                            }
                        case "+/-":
                            {
                                num.value = sign(num.value);
                                break;
                            }
                        case "m":
                            {
                                break;
                            }
                    }
    
                }
            }
        }
    }
    
    //是数字 返回true
    function isNumber(n) {
        return !isNaN(n);
    }
    
    //小数点功能
    function dec_number(n) {
        //不存在
        if (n.indexOf(".") == -1) {
            n = n + ".";
        }
        return n;
    }
    
    //退位键功能
    function back(n) {
        if (n == "0" || n.length == 0 || n.length == 1) {
            n = "0";
        } else {
            n = n.substr(0, n.length - 1);
        }
        return n;
    }
    
    //正负号
    function sign(n) {
        //正
        if (n.indexOf("-") == -1) {
            n = "-" + n;
        } else {
            //负
            n = n.substr(1, n.length);
        }
        return n;
    }
    
    // 鼠标点击m后可以点开一个在线计算器的网址
    function click() {
        var m = document.getElementById("m");
        m.onclick = function() {
            window.location.href = "https://cal.supfree.net/";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
  • 相关阅读:
    VirtualBox 中 Ubuntu 无法打开terminal
    网络安全大厂面试题汇总
    c# aes加密解密私钥公钥通钥
    小熊听书项目的详细介绍
    Timer应用小案例补充----Notify、while相关
    Kafka常见问题解析
    AcWing 1282. 搜索关键词【AC自动机】
    【1】初识 Python
    开源笔记leanote搭建记录
    Nginx实现四层代理与七层代理
  • 原文地址:https://blog.csdn.net/karshey/article/details/126630264