• [软件过程/软件生命周期模型]软件过程的工具链【待续】


    0 宣言:DevOps & RUP统一过程建模











    1 项目管理 (需求管理 / 缺陷管理 / ...)

    • 禅道(前身:bugfree) [在线协作]
    • JIRA(项目与事务跟踪工具)

    与禅道类同,但又不同,有明显的Scrum敏捷风格

    • Microsoft Project [离线维护]
    • 在线文档 or Excel

    2 系统建模

    2.1 全过程建模

    uml中国 【推荐】

    • PowerDesigner
    • EnterpriseArchitect(EA)
    原以为EA跟Rational Rose一样都仅仅是一个UML建模软件,随着对EA的熟悉发现EA的功能太强大了。
    EA跟Rational Rose大不一样,Rational Rose只是实现对软件的建模即构建系统的UML模型,而EA却不仅仅是实现这些功能。
    对于一个软件设计者来说,从需求分析到概要设计、详细设计、数据库设计到测试、发布、部署等一系列软件设计必须的操作都可以在EA中完成。
    可以说只需要一个EA就可以完成一个软件的设计。
    
    生命周期软件设计方案——Enterprise Architect是以目标为导向的软件系统。
    它覆盖了系统开发的整个周期,除了开发类模型之外,还包括事务进程分析,使用案例需求,动态模型,组件和布局,系统管理,非功能需求,用户界面设计,测试和维护等。
    为整个团队提供高级的UML 2.0建模工具。
    EA为用户提供一个高性能、直观的工作界面,联合UML 2.0最新规范,为桌面电脑工作人员、开发和应用团队打造先进的软件建模方案。
    该产品不仅特性丰富,而且性价比极高,可以用来配备您的整个工作团队,包括分析人员、测试人员、项目经理、品质控制和部署人员等。
    
    • Rational Rose

    2.2 部分过程建模

    • Microsoft Visio
    • 亿图图示

    2.3 其他

    • Xmind

    3 快速原型 & 界面设计

    • Axure RP [快速原型 / 设计草图]
    • Photoshop(标量图) / Adobe Illustrator(矢量图) [效果图]

    4 程序开发

    • IntelliJ IDEA / Eclipse / VSCode / ... (集成开发环境)

    4.1 前端

    • HTML / CSS / JavaScript
    • echarts / d3.js / three.js (可视化)
    • npm(包管理)
    • VUE

    4.2 后端

    • Navicat / DBVeaver / DBvis (数据库管理工具)
    • Java / JVM
    [聚合框架/整体解决方案框架]
    Spring Boot
    Spring Cloud (微服务框架)
      Nacos
      
    
    [Web层]
    Spring MVC
    Struts
    
    [业务领域层]
    Spring
    
    [持久层/DAO层]
    MyBatis / MyBatis Plus / Hibernate / Spring JPA (重量级框架)
    Apache Commons DbUtils (轻量级框架)
    com.github.jsqlparser:jsqlparser (sql解析框架)
    C3P0 / Druid / ... (连接池)
    redis.clients:jedis / mysql-connector-java / com.oracle:ojdbc7 / org.postgresql:postgresql / com.microsoft.sqlserver:sqljdbc  (jdbc)
    
    [缓存(JVM级)]
    com.google.guava.guava (JVM级缓存)
    
    ——————————————————
    [公共]
    org.apache.commons:commons-lang3 / hutool (工具类库库)
      commons-beanutils{特点:bean类库}
      commons-collections{特点:集合类库}
      commons-io
      commons-fileupload
    Log4j / Log4j2{主流} / logback{主流} / commons-logging / slf4j{绝对的主流日志标准框架} (日志)
    freemarker / thymeleaf / (模板引擎/网页渲染器) 
    org.quartz-scheduler.quartz / com.xxl.job-core (任务调度框架)
    javax.mail /  (邮件)
    com.jcraft.jsch{Java Secure Channel/一个SSH2的纯Java实现}   (ssh)
    joda-time (时间处理)
    org.mozilla.javascript / Rhino.js (基于java的javascript实现引擎)
    org.drools:[drools-core + drools-compiler](基于Java的规则引擎)
    
    [运行期编译器]
    janino (java运行时编译器)
    org.eclipse.jdt.core.compiler:ecj{在Maven构建中使用Eclipse Java Compiler}
    
    [文件解析/数据解析]
    fastjson / jackson / net.sf.json-lib:json-lib (json与对象的双向解析/序列化)
    com.google.protobuf:protobuf-java(二进制数据流与对象的双向解析/序列化)
    org.apache.avro:avro(rpc/序列化;Avro是Hadoop的一个数据序列化系统)
    com.thoughtworks.xstream:xstream{Java对象序列化与XML的双向解析}
    DOM / SAX / JDOM / DOM4J{xml读/写;市场占有率更高} / xml-apis:xml-apis / xml-apis.java:xml-apis-ext / xerces:xercesImpl (XML读/写)
    com.artofsolving:jodconverter (office转pdf)
    org.apache.poi.[poi + poi-ooxml + poi-scratchpad] (Word读/写)
    net.sourceforge.jexcelapi:jxl (Excel读/写)
    batik-bridge (svg读/写)
    
    [数据处理]
    pentaho-kettle:kettle5-log4j-plugin:6.1.0.1-196(kettle/ETL&处理数据)
    
    [网络编程]
    io.netty:netty-all{Netty:NIO/异步事件驱动的网络应用框架;Jboss的一部分}
    tomcat / org.eclipse.jetty:[jetty-server + jetty-webapp + jetty-continuation + jetty-jsp]{需结合/引入eclipse的ecj编译器方能打包} (servlet容器)
    HttpClient / OkHttp / Jsoup(优势:网页解析) / org.seleniumhq.selenium:selenium-java / org.seleniumhq.selenium:selenium-chrome-driver(网络请求)
    org.restlet.jse:org.restlet (用于Java的REST框架)
    org.springframework.ws:spring-ws-core / org.apache.cxf:[cxf-rt-transports-http + cxf-rt-frontend-jaxws]{基于Maven在Spring中集成CXF Web Service框架;更易于使用;市场占有率高一些} (WebService框架)
    com.caucho:hessian{类似于RMI的基于HTTP的轻量级远程服务解决方案} (远程调用框架)
    
    ftp4che / ftp4j / commons-net / jftp / edtFtpjJ (ftp/文件传输)
    
    [图形化编程]
    org.jfree.jfreechart (基于Java的图表展示)
    
    [硬件信息采集] https://www.jianshu.com/p/2f979b7b7d52
    sigar / oshi 
    
    
    [AI/机器学习]
    jieba (优势:分词) / hanlp (自然语言处理)
    
    • ElasticSearch/ELK / Redis / FastDFS / MongoDB / RabbitMQ / RocketMQ / ... (数据存储:存储/缓存/搜索/消息队列/解耦/削峰/...)
    • Maven / Gradle (包管理)
    [maven私服/仓库] https://www.cnblogs.com/knowledgesea/p/11190579.html
    Nexus
    
    [maven插件]
    tomcat7-maven-plugin (maven内嵌tomcat到web项目的插件,可直接运行webapp项目) : https://www.cnblogs.com/afeng2010/p/10224597.html
    
    maven-surefire-plugin (maven执行测试用例的插件, 不显式配置maven就会用默认配置)
    
    maven-compiler-plugin (maven编译项目的源代码插件, 可显式指定项目源码的jdk版本)
      maven作为项目管理工具,若我们不告知代码要使用和编译的jdk版本时,其将用maven-compiler-plugin默认的jdk版本来进行处理————极易出现JDK版本不匹配,以至于可能导致编译不通过的问题。
    
    • Tomcat / Nginx (Web Server)
    • Arthas / JConsole / jps / ...(JVM监控与Debug工具)

    5 版本管理

    • Git / GitLab [推荐]
    • SVN

    6 构建

    • Maven (Java)
    • Gradle (Java/Kotlin/...)
    • sbt (Scala)
    • npm (前端/JS)

    7 测试

    • TestLink (基于web的测试用例管理系统)
    TestLink 是基于web的测试用例管理系统,主要功能是测试用例的创建、管理和执行,并且还提供了一些简单的统计功能。
    TestLink用于进行测试过程中的管理,通过使用TestLink提供的功能,可以将测试过程从测试需求、测试设计、到测试执行完整的管理起来,同时,它还提供了好多种测试结果的统计和分析,使我们能够简单的开始测试工作和分析测试结果。 
    TestLink 是sourceforge的开放源代码项目之一。作为基于web的测试管理系统,TestLink的主要功能包括:
      测试需求管理
      测试用例管理
      测试用例对测试需求的覆盖管理
      测试计划的制定
      测试用例的执行
    大量测试数据的度量和统计功能。
    
    • SonarQube (代码静态扫描)
      • PMD / CheckStyle / Findbugs
    sonar可通过PMD,CheckStyle,Findbugs等【代码规则检测工具】规范代码编写。 潜在的缺陷 sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检 测出潜在的缺陷
    
    • JUnit(单元测试)
    • JMeter / LoadRunner (性能测试)
    LoadRunner,是一种预测系统行为和性能的负载测试工具。
    通过模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。
    企业使用LoadRunner能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。
    
    • soapUI{通过soap/http来检查、调用、实现Web Service的功能/负载/符合性测试}
    • appnium(APP移动端自动化测试{IOS/Android})
    • selenium(Web自动化/系统功能测试、浏览器与操作系统的兼容性测试)

    9 发布/集成 : 持续集成

    • Jenkins (持续集成)
    • Codeship (持续集成)
    提供快速安全的托管持续集成服务的平台
    

    10 部署

    • openstack (开源的云计算管理平台项目)
    • VMWare
    • Docker
    • Golang
    • Xshell / MobaXterm / Putty / WinSCP

    11 运维 : 自动化运维

    • K8S(容器编排)
    • Linux Shell & Python
    • puppet(一种Linux、Unix、windows平台的集中配置管理系统)
    • Chef (自动化配置管理工具)
    • Ansible (基于python的自动化运维工具)

    8 监测

    • Nagios (监视系统运行状态和网络信息的监测工具)
    Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设备,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
    
    • zabbix(基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案)
    zabbix([`zæbiks])是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
    zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
    zabbix由2部分构成,zabbix server与可选组件zabbix agent。
    zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。
    
    • ELK(日志收集与分析系统)
    • splunk (机器数据的引擎)

    可类比: ELK

    splunk是一款可以收集,索引和利用任何数据的“大数据平台”。
    使用 Splunk 可收集、索引和利用所有应用程序、服务器和设备生成的快速移动型计算机数据。
    如今互联网的普及,数据是一个大爆发的时代,对于应用程序和系统来讲会产生各种各样的数据,其中很重要的一类数据就是“LOG”。一个商店的售卖情况会产生log,一个linux系统会产生log,一个应用服务器会产生log,这些log有着自己独特的意义价值,售卖情况的log可以给经营者决策判断信息,linux系统log可以给运维工作人员定位分析的信息,应用服务器的log也可以体现相关信息。如何从这戏log中准确,快速,形象化地提取出有价值的信息,splunk便可以做到这些工作。
    

    Y 问题集

    Q0 Devops的参考书籍?

    《企业级Devops技术与工具实战》
    

    Q1 tomcat / jetty / netty 的区别?

    1 web servlet容器: jetty / tomcat
    2 异步(NIO)事件驱动的网络应用框架: netty
    
    3 Jetty 8和Apache Tomcat 7支持servlet 3.0规范,但netty不支持。因为netty本身就不是一个servlet容器。
      Jetty是一个轻量级的servlet容器,易于嵌入到Java应用程序中,还有一个易于使用的jetty客户端。
      Netty是一款NIO客户端服务器框架、一个异步事件驱动的网络应用框架。可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化并简化了TCP和UDP套接字服务器等网络编程。
        因此Netty专注于帮助编写NIO /非阻塞异步网络程序。例如,你可以在Netty框架的帮助下编写自己的servlet容器或http客户端应用程序。
    

    Q2 UML系统建模工具Rational Rose、PowerDesign、EA、Visio的区别?

    ROSE是直接从UML发展而诞生的设计工具,它的出现就是为了对UML建模的支持,ROSE一开始没有对数据库端建模的支持,但是在现在的版本中已经加入数据库建模的功能。ROSE主要是在开发过程中的各种语义、模块、对象以及流程,状态等描述比较好,主要体现在能够从各个方面和角度来分析和设计,使软件的开发蓝图更清晰,内部结构更加明朗(但是它的结构仅仅对那些对掌握UML的开发人员,也就是说对客户了解系统的功能和流程等并不一定很有效),对系统的代码框架生成有很好的支持。但对数据库的开发管理和数据库端的迭代不是很好。

    Rational Rose是一种基于UML的建模工具。在面向对象应用程序开发领域,Rational Rose是影响其发展的一个重要因素。
    Rational Rose自推出以来就受到了业界的瞩目,并一直引领着可视化建模工具的发展。越来越多的软件公司和开发团队开始或者已经采用Rational Rose,用于大型项目开发的分析、建模与设计等方面。
    从使用的角度分析,Rational Rose易于使用,支持使用多种构件和多种语言的复杂系统建模;利用双向工程技术可以实现迭代式开发;团队管理特性支持大型、复杂的项目和大型而且通常队员分散在各个不同地方的开发团队。
    同时,Rational Rose与微软Visual Studio系列工具中GUI的完美结合所带来的方便性,使得它成为绝大多数开发人员首选建模工具;Rose还是市场上第一个提供对基于UML的数据建模和Web建模支持的工具。
    此外,Rose还为其他一些领域提供支持,如用户定制和产品性能改进。具体介绍可参看http://www.uml.org.cn/RequirementProject/200604043.htm
    

    PowerDesigner原来是对数据库建模而发展起来的一种数据库建模工具。直到7.0版才开始对面向对象的开发的支持,后来又引入了对UML的支持。但是由于PowerDesigner侧重不一样,所以它对数据库建模的支持很好,支持了能够看到的90%左右的数据库,对UML的建模使用到的各种图的支持比较滞后。但是在最近得到加强。所以使用它来进行UML开发的并不多,很多人都是用它来作为数据库的建模。如果使用UML分析,它的优点是生成代码时对Sybase的产品PowerBuilder的支持很好(其它UML建模工具则没有或者需要一定的插件),其他面向对象语言如 C++,Java,VB,C#等支持也不错。但是它好像继承了Sybase公司的一贯传统,对中国的市场不是很看看好,所以对中文的支持总是有这样或那样的问题。
    http://www.uml.org.cn/UMLTools/powerDesigner/powerDesignerToolIntroduction.htm

    UML建模工具Visio 原来仅仅是一种画图工具,能够用来描述各种图形(从电路图到房屋结构图),也是到VISIO2000才开始引进软件分析设计功能到代码生成的全部功能,它可以说是目前最能够用图形方式来表达各种商业图形用途的工具(对软
    件开发中的UML支持仅仅是其中很少的一部分)。它跟微软的office产品的能够很好兼容。能够把图形直接复制或者内嵌到WORD的文档中。但是对于代码的生成更多是支持微软的产品如VB,VC++,MS SQL Server 等(这也是微软的传统),所以它可以说用于图形语义的描述比较方便,但是用于软件开发过程的迭代开发则有点牵强。

    Enterprise Architect是一个全功能的、基于UML的visual CASE工具,主要用于设计、编写、构建并管理以目标为导向的软件系统。它支持用户案例、商务流程模式以及动态的图表、分类、界面、协作、结构以及物理模型。此外,它还支持C++、Java、Visual Basic、Delphi、C#以及VB.Net。具体可看http://www.softwarechn.com/SparxSystems/sparxsystems_index.htm

    Q3: maven中如何引入keetle的JAR包?

    <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">
        ...
    
            <!-- 新增大数据组件jar -->
            <dependency>
                <groupId>pentaho-kettle</groupId>
                <artifactId>kettle-core</artifactId>
                <version>${kettle.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.eclipse.jetty</groupId>
                        <artifactId>jetty-util</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javassist</groupId>
                        <artifactId>javassist</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>xml-apis</groupId>
                        <artifactId>xml-apis-ext</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>pentaho-kettle</groupId>
                <artifactId>kettle-engine</artifactId>
                <version>${kettle.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.eclipse.jetty</groupId>
                        <artifactId>jetty-server</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>pentaho-kettle</groupId>
                <artifactId>kettle-dbdialog</artifactId>
                <version>${kettle.version}</version>
            </dependency>
            <dependency>
                <groupId>pentaho-kettle</groupId>
                <artifactId>kettle-ui-swt</artifactId>
                <version>${kettle.version}</version>
            </dependency>
           <dependency>
                <groupId>com.verhas</groupId>
                <artifactId>license3j</artifactId>
                <version>1.0.7</version>
            </dependency>
    
            <dependency>
                <groupId>pentaho</groupId>
                <artifactId>pdi-osgi-bridge-core</artifactId>
                <version>${kettle.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-core</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.google.guava</groupId>
                        <artifactId>guava</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- -->
            <dependency>
                <groupId>pentaho</groupId>
                <artifactId>pentaho-platform-extensions</artifactId>
                <version>${kettle.version}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>xbean</artifactId>
                        <groupId>org.apache.xbean</groupId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-core</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javassist</groupId>
                        <artifactId>javassist</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>elasticsearch</groupId>
                        <artifactId>elasticsearch</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.ws.commons.schema</groupId>
                        <artifactId>XmlSchema</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.google.guava</groupId>
                        <artifactId>guava</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.ws.commons.neethi</groupId>
                        <artifactId>neethi</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.karaf.jaas</groupId>
                        <artifactId>
                            org.apache.karaf.jaas.modules
                        </artifactId>
                    </exclusion>
                    <!-- 解决数据服务包冲突 -->
                    <exclusion>
                        <groupId>pentaho</groupId>
                        <artifactId>
                            pentaho-hadoop-hive-jdbc-shim
                        </artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>woodstox</groupId>
                        <artifactId>wstx-asl</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>xerces</groupId>
                        <artifactId>xercesImpl</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.glassfish.metro</groupId>
                        <artifactId>webservices-rt</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>pentaho</groupId>
                <artifactId>pentaho-metaverse-api</artifactId>
                <version>${kettle.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>jackson-annotations</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>2.8.0</version>
            </dependency>
            <dependency>
                <groupId>pentaho</groupId>
                <artifactId>pentaho-metaverse-core</artifactId>
                <version>${kettle.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.cxf</groupId>
                        <artifactId>cxf-rt-bindings-xml</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.cxf</groupId>
                        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>pentaho</groupId>
                <artifactId>pentaho-metaverse-web</artifactId>
                <version>${kettle.version}</version>
            </dependency>
    
            <dependency>
                <groupId>pentaho</groupId>
                <artifactId>metastore</artifactId>
                <version>${kettle.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.google.guava</groupId>
                        <artifactId>guava</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>pentaho</groupId>
                <artifactId>pentaho-platform-api</artifactId>
                <version>${kettle.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.security</groupId>
                        <artifactId>spring-security-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <!--<dependency>
                <groupId>pentaho-kettle</groupId>
                <artifactId>kettle5-log4j-plugin</artifactId>
                <version>6.1.0.1-196</version>
            </dependency>-->
            <!-- https://mvnrepository.com/artifact/org.apache.karaf/org.apache.karaf.util -->
            <dependency>
                <groupId>org.apache.karaf</groupId>
                <artifactId>org.apache.karaf.util</artifactId>
                <version>3.0.3</version>
            </dependency>
    
            <!-- <dependency>
                <groupId>pentaho-kettle</groupId>
                <artifactId>kettle5-log4j-plugin</artifactId>
                <version>6.1.0.1-196</version>
            </dependency> -->
    
    
        ...
        <repositories>
            <repository>
                <id>nexus-aliyun</id>
                <name>Nexus aliyun</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public</url>
            </repository>
            <repository>
                <id>kettle</id>
                <url>https://nexus.pentaho.org/content/groups/omni/</url>
            </repository>
        </repositories>
    </project>
    

    X 参考文献

    有时需要将一个简单的功能封装为服务,相比python使用flask、web.py的简洁,使用java-web显得太重量级。
    幸好,我们可直接在java项目中使用jetty来搭建简易服务
    
    赞赏-支付宝二维码
    本文作者千千寰宇
    本文链接 https://www.cnblogs.com/johnnyzen
    关于博文:评论和私信会在第一时间回复,或直接私信我。
    版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
    声援博主:若本文对您有帮助,可点击右下角推荐一下。您的鼓励、【赞赏】(左侧赞赏支付码)是博主技术写作的重要动力!
  • 相关阅读:
    MySQL主从复制报错 Errno 1205
    MySQL添加索引优化SQL
    MySQL通过添加索引解决线上数据库服务器压力大问题
    手把手教你搭建MySQL双主MM+keepalived高可用架构
    SQLSERVER 维护计划无法删除
    Form表单中Post与Get方法的区别
    ASP.NET MVC中常用的ActionResult类型
    Web安全相关(五):SQL注入(SQL Injection)
    Web安全相关(四):过多发布(Over Posting)
    Web安全相关(三):开放重定向(Open Redirection)
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/15404413.html
Copyright © 2020-2023  润新知