Tomcat构建高负载WEB服务器(一)

news/2024/4/28 19:02:43/文章来源:https://blog.csdn.net/qq_47800859/article/details/128926345
  1. 前言
  2. Tomcat部署
  3. Tomcat多实例

1.前言

        1.1什么是JAVA虚拟机

所谓虚拟机,就是一台虚拟的计算机。他是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。大名鼎鼎的VisualBox、VMware就属于系统虚拟机。他们完全是对物理计算机的仿真。提供了一个可以运行完整操作系统的软件平台。
程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令。无论是系统虚拟机还是程序虚拟机,在上面运行的软件都呗限制于虚拟机提供的资源中。

        1.2JAVA 如何做到跨平台

同一个JAVA程序(JAVA字节码的集合),通过JAVA虚拟机(JVM)运行于各大主流操作系统平台比如Windows、CentOS、Ubuntu等。程序以虚拟机为中介,来实现跨平台。

2.Tomcat部署

        2.1背景

java容器、web容器,web中间件

Tomcat,Resin,JBOSS,WebSphere(IBM),Weblogic(Oracle )

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Resin是CAUCHO公司的产品,是一个非常流行的支持servlets和jsp的引擎,速度非常快。Resin本身包含了一个支持HTTP/1.1的WEB服务器。它不仅可以显示动态内容,而且它显示静态内容的能力也非常强,速度直逼APACHESERVER。许多站点都是使用该WEB服务器构建的

是一个基于J2EE的开放源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。

WebSphere 是 IBM 的软件平台。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具。WebSphere 提供了可靠、灵活和健壮的软件。

WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

        2.2官网地址

tomcat下载地址       Apache Tomcat® - Welcome!

JDK下载地址           Java Downloads | Oracle

        2.3架构

方案一:          Tomcat

方案二:
                    Nginx 
                       |
       +-----------------------------+
       |               |               |         
   Tomcat1 Tomcat2 Tomcat3
        建议使用Nginx和Tomcat配合,Nginx处理静态,Tomcat处理动态程序

        2.4部署

        (一)Tomcat Http Server

        环境            6到8G内存       Java需要较大的内存

一.部署JAVA环境:

建议卸载默认安装openjdk软件

解压安装包        tar xf jdk-19_linux-x64_bin.tar.gz -C /usr/local/
多版本部署java     ln -s /usr/local/jdk-19.0.2/ /usr/local/java      这里只需要做个软连接即可

配置环境变量:

 vim /etc/profile :
    JAVA_HOME=/usr/local/java
    PATH=$JAVA_HOME/bin:$PATH
    export JAVA_HOME PATH

source /etc/profile

env |grep JAVA:

        JAVA_HOME=/usr/local/java

测试java:

         java -version

Java语言:
    Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。

JDK:

1.简介:
    JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。
JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

2.包括:
    JVM
        JVM是Java Virtual Machine(Java虚拟机)的缩写,
JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,
是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
    JRE
        JRE为Java Runtime Environment运行环境的简称,Java Runtime Environment(包括Java Plug-in)是Sun的产品,包括两部分:Java Runtime Environment和Java Plug-in。JavaRuntimeEnvironment(JRE)是可以在其上运行、测试和传输应用程序的Java平台。

3.Java SE EE ME :

Java SE
    Java SE(Java Platform,Standard Edition),应该先说这个,因为这个是标准版本。
    JavaSE 可以开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。是EE,和ME的基础。一般就是指JDK。就是Java的基础语法(变量、方法、类之间的调用、关系,继承、接口、线程之类的),工具包(java.util.* ),或者其他的一些封装,是学习其他的基础。

Java EE
    Java EE (Java Platform,Enterprise Edition),java 的企业版本
    JavaEE,其实是一套规范,就是用java语言做企业开发(目前看来就是开发一些动态网站,或者对外提供调用服务的网站,或者其他没接触过的。。。)中的一整套规范,比如类怎么封装,网页的请求要用什么方法处理,语言编码一类的处理,拦截器啊什么的定义,请求返回得有什么信息。。。(具体看servlet的接口就知道了)
比如:tomcat就是按照这套规范开发的容器软件,还有什么weblogic,JBoss、Resin等等
正因为我们开发网站(使用JSP,Servelet。。或者封装了这些的框架:SSH。。。)可以放在tomcat,也可以放在JBoss。。。。,因为都是按照一个规范开发的东西,实际使用的还是JavaSE的那些东西,多出来的就是EE的一些规范类的封装代码。

Java ME
    Java ME(Java Platform,Micro Edition),java的微型版本。
    JavaME 是微型版本,顾名思义,使用在手机啊,小设备啊上面的Java版本,特点就是小,相比JavaSE精简了很大一部分东西,(增加了一些小设备上的专有API,这个不是很确定)。
安卓中既然用的是Java,那么Java的语法应该都是适用的。所以SE是核心基础。其他的都是使用方法方式不同。

二 安装Tomcat

# tar xf apache-tomcat-7.0.42.tar.gz  -C /usr/local/       解压到指定文件夹

# ln -s /usr/local/apache-tomcat-7.0.42/ /usr/local/tomcat      做软连接

定义Tomcat所需环境变量:

        # vim /etc/profile    :

        CATALINA_HOME=/usr/local/tomcat          //Tomcat安装目录
        export CATALINA_HOME

# source /etc/profile

三.启动Tomcat

启动tomcat              #bash  /usr/local/tomcat/bin/startup.sh 

输出提示
    Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

检查端口               # netstat -tnlp |grep java

tcp6       0      0 :::8080                 :::*                    LISTEN      1222/java           
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1222/java           
tcp6       0      0 :::8009                 :::*                    LISTEN      1222/java         

关于tomcat端口:

8005          是tomcat本身的端口

8080    tomcat负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。 

8009    tomcat负责和其他的HTTP服务器建立连接。
        如nginx和apache互通时使用

访问:192.168.26.147:8080

 注意服务器地址,注意端口

关闭tomcat:

#bash  /usr/local/tomcat/bin/shutdown.sh 

四.关于tomcat

1.tomcat主目录介绍
        [root@web ~]# ls /usr/local/tomcat/
        [root@web tomcat]# tree -L 1
.
├── bin              #存放tomcat管理脚本
├── conf             # tomcat 配置文件存放目录
├── lib              # web应用调用的jar包存放路径
├── LICENSE
├── logs             # tomcat 日志存放目录,catalina.out 为主要输出日志
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp             # 存放临时文件
├── webapps         # web程序存放目录
└── work             # 存放编译产生的.java 与 .class文件

2.webapps目录介绍
    # ls /usr/local/tomcat/webapps/
docs  examples  host-manager  manager  ROOT
    [root@web03 tomcat]# cd webapps/
[root@web03 webapps]# tree -L 1
.
├── docs            # tomcat 帮助文档
├── examples       # web应用示例
├── host-manager  # 主机管理
├── manager         # 管理
└── ROOT             # 默认站点根目录

3.默认网站的主目录(主页)
    # ls /usr/local/tomcat/webapps/ROOT    

4.Tomcat配置文件目录介绍(conf)
    [root@web03 conf]# tree -L 1
.
├── Catalina
├── catalina.policy
├── catalina.properties
├── context.xml
├── logging.properties
├── logs
├── server.xml           # tomcat 主配置文件
├── server.xml.bak
├── server.xml.bak2
├── tomcat-users.xml    # tomcat 管理用户配置文件
├── tomcat-users.xsd
└── web.xml

5.Tomcat日志说明

查看日志:  

 发现启动时间较长,其中有一项的启动时间占据了绝大多数:

 发现耗时在这里:是session引起的随机数问题导致的。Tocmat的Session ID是通过SHA1算法计算得到的,计算Session ID的时候必须有一个密钥。为了提高安全性Tomcat在启动的时候会通过随机生成一个密钥。

解决Tomcat启动慢的方法:

Tomcat启动慢主要原因是生成随机数的时候卡住了,导致tomcat启动不了。是否有足够的值来用于产生随机数,可以通过如下命令来查看

[root@web03 ~]# cat /proc/sys/kernel/random/entropy_avail
6

解决方法:

vim $JAVA_HOME/jre/lib/security/java.security

securerandom.source=file:/dev/random

改为

securerandom.source=file:/dev/urandom

问题解决

        (二)安装MySQL

# yum install -y mariadb-server mariadb     安装数据库

# systemctl start mariadb

[root@localhost ~]# mysqladmin -u root password 123456

注意如果有密码
mysqladmin -u root -p老密码 password 新密码

[root@localhost ~]# mysql -u root -p123456

MariaDB [(none)]> create database jspgou character set = utf8;

创建jspgou数据库,字符集为utf-8

        (三)部署jspgou(电子商城)

1.解压源码包    # unzip jspgouV6-ROOT.zip 

2.更改数据库链接:  提示:在解压缩后的文件中,修改连接数据库的信息

 vim ROOT/WEB-INF/config/jdbc.properties :

jdbc.url=jdbc:mysql://127.0.0.1:3306/jspgou?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456

3.导入数据:

mysql -u root -p123 -D jspgou  < DB/jspgou.sql

使用MYSQL数据库时,会发生的错误      使用mysql作为数据库时,如果导入数据失败:

(1).修改mysql配置文件        my.cnf中max_allowed_packet参数为64m,默认为1m

(2).DB/jspgou.sql里面的默认值改一下                把所有datetime类型的字段默认值改成CURRENT_TIMESTAMP

将程序解压后的ROOT文件夹,拷贝到tomcat安装目录下的webapps文件夹下:

[root@localhost ~]# \cp -r ROOT/  /usr/local/tomcat/webapps/
    不使用cp 的别名。  alias cp=‘cp -i’

4.部署网站:

启动tomcat           #bash  /usr/local/tomcat/bin/startup.sh 

输入以下地址:
    http://192.168.26.147:8080/jeeadmin/jspgou/index.do
    注意服务器地址
    用户名:admin
    密  码:123456      

 

3.Tomcat多实例

        3.1关闭主站

# bash /usr/local/tomcat/bin/shutdown.sh 

        3.2准备多实例主目录

mkdir  /usr/local/tomcat/instance{1..3}

        3.3制作实例工作目录

# cp -r /usr/local/tomcat/{conf,logs,temp,work} /usr/local/tomcat/instance1/

# cp -r /usr/local/tomcat/{conf,logs,temp,work} /usr/local/tomcat/instance2/

# cp -r /usr/local/tomcat/{conf,logs,temp,work} /usr/local/tomcat/instance3/

查看目录结构:

[root@www ~]# tree -d -L 2 /usr/local/tomcat/         查看文件夹   深度2层

/usr/local/tomcat/
├── bin
├── instance1
│   ├── conf
│   ├── logs
│   ├── temp
│   └── work
├── instance2
│   ├── conf
│   ├── logs
│   ├── temp
│   └── work
├── instance3
│   ├── conf
│   ├── logs
│   ├── temp
│   └── work
└── lib

        3.4修改端口

将web配置文件拷贝三份。分别修改为不同端口

# vim /usr/local/tomcat/instance1/conf/server.xml

1:

服务端口 8080 替换成 8081

修改前:
     <!--   <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />        -->
修改后:
    <Connector port="8081" protocol="HTTP/1.1" 
               connectionTimeout="20000"
               redirectPort="8443" />

2:

<!-- <Server port="8005" shutdown="SHUTDOWN"> -->

程序工作端口:8005替换成 8091

<Server port="8091" shutdown="SHUTDOWN">

3:

appBase="webapps"

网站目录:webapps 替换成 另一个目录

appBase="/webapps"

cp /usr/local/tomcat/instance1/conf/server.xml  /usr/local/tomcat/instance2/conf/

1:

<Connector port="8081" protocol="HTTP/1.1"  

服务端口  替换成 8082
<Connector port="8082" protocol="HTTP/1.1"  

2:

<Server port="8091" shutdown="SHUTDOWN">
程序工作端口  替换成 8092
<Server port="8092" shutdown="SHUTDOWN">

cp /usr/local/tomcat/instance1/conf/server.xml  /usr/local/tomcat/instance3/conf/

1:

<Connector port="8081" protocol="HTTP/1.1"  
替换成
<Connector port="8083" protocol="HTTP/1.1"  

2:

<Server port="8091" shutdown="SHUTDOWN">
替换成
<Server port="8093" shutdown="SHUTDOWN">

        3.5启动脚本

# vim /usr/local/tomcat/instance1/ins1.sh            functions系统自带脚本。功能函数

#!/bin/bash
#instance1
. /etc/init.d/functions
export CATALINA_BASE="/usr/local/tomcat/instance1"

case "$1" in
start)
        $CATALINA_HOME/bin/startup.sh
        ;;
stop)
        $CATALINA_HOME/bin/shutdown.sh
        ;;
restart)
        $CATALINA_HOME/bin/shutdown.sh
        sleep 5
        $CATALINA_HOME/bin/startup.sh
        ;;
esac
export JAVA_OPTS='-Xms64m -Xmx128m'


# cp /usr/local/tomcat/instance1/ins1.sh /usr/local/tomcat/instance2/ins2.sh

#!/bin/bash
#instance2              #####
. /etc/init.d/functions
export CATALINA_BASE="/usr/local/tomcat/instance2"    #####

case "$1" in
start)
        $CATALINA_HOME/bin/startup.sh
        ;;
stop)
        $CATALINA_HOME/bin/shutdown.sh
        ;;
restart)
        $CATALINA_HOME/bin/shutdown.sh
        sleep 5
        $CATALINA_HOME/bin/startup.sh
        ;;
esac


# cp /usr/local/tomcat/instance1/ins1.sh /usr/local/tomcat/instance3/ins3.sh

#!/bin/bash
#instance3
. /etc/init.d/functions
export CATALINA_BASE="/usr/local/tomcat/instance3"

case "$1" in
start)
        $CATALINA_HOME/bin/startup.sh
        ;;
stop)
        $CATALINA_HOME/bin/shutdown.sh
        ;;
restart)
        $CATALINA_HOME/bin/shutdown.sh
        sleep 5
        $CATALINA_HOME/bin/startup.sh
        ;;
esac
export JAVA_OPTS='-Xms64m -Xmx128m'
 

        3.6赋权

# chmod +x /usr/local/tomcat/instance1/ins1.sh 
# chmod +x /usr/local/tomcat/instance2/ins2.sh 
# chmod +x /usr/local/tomcat/instance3/ins3.sh 

        3.7网站源码

# mkdir /webapps
cp -r /usr/local/tomcat/webapps/ROOT/ /webapps/

        3.8启动

# /usr/local/tomcat/instance1/ins1.sh start
# /usr/local/tomcat/instance2/ins2.sh start
# /usr/local/tomcat/instance3/ins3.sh start
等5秒

        3.9测试

 

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue - 驼峰和短横线分割命名注意事项

Vue - 驼峰和短横线分割命名注意事项一. 驼峰和短横线分割命名注意事项1.1 组件注册命名1.2 父子组件数据传递时命名1.3 父子组件函数传递一. 驼峰和短横线分割命名注意事项 我们一般定义组件的方式有两种&#xff1a; 短横线分隔命名&#xff1a;kebab-case。首字母大写命名…

PyQt5常用控件大全(详尽方法 + 实例操作,持续更新中…)

1. Label&#xff1a;标签控件 1.1 简介 标签控件主要用于显示用户不能编辑的文本&#xff0c;标识窗体上的对象&#xff08;例如&#xff1a;给文本框、列表框添加&#xff0c;描述信息等&#xff09;。它对应PyQt5中的QLabel类&#xff0c;Label控件在本质上是QLabel类的一个…

进阶技术:Linux Arm32是如何调用C Main的

前言&#xff1a; Linux x64通过qemu的rdinit方式调用的C Main&#xff0c;实际上是通过load_elf_binary(加载和解析elf)和start_thread(设置Ip和sp)&#xff0c;用缺页异常来调用。关于这点可以看这篇文章&#xff1a;点击查看。那么Arm32里面是如何调用C Main的呢&#xff1f…

BGP 属性分类及路由优先级选择

BGP 属性分类及路由优先级选择一、常见BGP属性类型1、公认必遵属性&#xff08;所有BGP路由器必须遵守的原则&#xff09;2、公认可遵属性&#xff08;所有路由器都能识别但不一定遵守&#xff09;3、可选传递属性&#xff08;不是所有BGP路由器都能识别&#xff0c;但是所有BG…

Dubbo3简单使用

Dubbo3简单使用 &#x1f449; 使用Spring Boot实现Dubbo3&#xff0c;请参见以下地址。 # Dubbo3官网地址 https://cn.dubbo.apache.org/zh/# 使用SpringBoot实现Dubbo3的地址 https://cn.dubbo.apache.org/zh/docs3-v2/java-sdk/quick-start/spring-boot/# 该项目的git地址…

【Spark分布式内存计算框架——Spark Core】3. RDD 创建、RDD函数(上)

2.4 RDD 分区数目 在讲解 RDD 属性时&#xff0c;多次提到了分区&#xff08;partition&#xff09;的概念。分区是一个偏物理层的概念&#xff0c;也是 RDD 并行计算的核心。数据在 RDD 内部被切分为多个子集合&#xff0c;每个子集合可以被认为是一个分区&#xff0c;运算逻…

ChatGPT使用

ChatGPT使用1使用全局模式2无痕模式3日期4短信平台5注册6使用ChatGPT1使用全局模式 因为后面注册时候的号码是印度尼西亚&#xff0c;所以这里我也选择印度尼西亚。 2无痕模式 打开浏览器无痕模式 由于后面网易都是英文&#xff0c;可以在无痕模式里面使用插件 3日期…

mycat学习

安装部署下载1&#xff1a;mycat2-install-template-1.21.zip下载2&#xff1a;mycat2-1.21-release-jar-with-dependencies.jar解压mycat2-install-template-1.21.zipunzip mycat2-install-template-1.21.zip把mycat2-1.21-release-jar-with-dependencies.jar放在mycat/lib中修…

Python列表的元素比较

在用python处理多个列表元素时&#xff0c;需要处理的信息一般比较多且杂。这时运用Python列表元素比较的方法&#xff0c;就能快速处理列表信息&#xff0c;能更轻松访问每个元素。1 问题如何运用Python列表的元素比较解决问题。2 方法方法一 for循环&#xff0c;此情况是list…

车道线检测-Eigenlanes 论文学习笔记

论文&#xff1a;《Eigenlanes: Data-Driven Lane Descriptors for Structurally Diverse Lanes》 代码&#xff1a;https://github.com/dongkwonjin/Eigenlanes 核心&#xff1a;在 Eigenlane Space 中检测车道线 创新点 Eigenlane&#xff1a;数据驱动的车道描述符&#xff…

VHDL语言基础-组合逻辑电路-基本逻辑门电路

数字电路中的四种基本操作是与、或、非及触发器操作&#xff0c;前三种为组合电路&#xff0c;后一种为时序电路。与非 、或非和异或的操作仍然是与、或、非的基本操作。与、或、非、与非、或非和异或等基本逻辑门电路为常用的门电路。 二输入与非门是一种常用的简单逻辑电路&a…

RabbitMQ 部署指南

RabbitMQ 部署指南RabbitMQ部署指南1.单机部署1.1.下载镜像1.2.安装MQ2.安装DelayExchange插件2.1.下载插件2.2.上传插件2.3.安装插件3.集群部署2.1.集群分类2.2.获取cookie2.3.准备集群配置2.4.启动集群2.5.测试2.5.1.数据共享测试2.5.2.可用性测试4.镜像模式4.1.镜像模式的特…

ant-design V4升级V5记录(成功篇)

官方文档&#xff1a;https://ant.design/docs/react/migration-v5-cn 1、安装运行工具之前&#xff0c;提交本地修改内容&#xff1b; 2、工具运行完&#xff0c;根据提示修改文件问题&#xff1b; 3、移除config文件中module&#xff0c; [import,{libraryName:antd, libr…

OpenResty(5):Openresty 模板渲染

1 导入lua-resty-template 下载 http://luarocks.org/modules/bungle/lua-resty-template 将template.lua文件复制到openresty/lualib/resty/目录下 2 示例 2.1 修改nginx.conf 设置模板路径&#xff1a;set $template_root /usr/local/openresty/nginx/html/templates; 设…

windows 重启redis的方法

目录打开本地的文件夹选中文件的路径输入cmd在cmd命令窗口中输入以下的指令指令的内容以及对应的命令含义前言&#xff1a;最近在本地搭建redis环境&#xff0c;突然发现本地的redis启动失败了&#xff0c;使用reids的启动命令也不行&#xff0c;于是找了不少的方法&#xff0c…

六、Linux文件 - lseek函数

目录 1.lseek函数 2.lseek函数实战 2.1宏SEEK_CUR的用法 2.2宏SEEK_END的用法 3.Open函数实战 - O_APPEND的用法 4.Linux在库函数中寻找相应的宏定义 1.lseek函数 off_t lseek(int fd,off_t offset,int whence);光标的偏移量 fd:文件描述符offset:偏移量whence: SEEK_…

Android Jetpack组件之WorkManager后台任务管理的介绍与使用(一)

一、介绍 Jetpack&#xff1f; 我们经常看到&#xff0c;似乎很高端&#xff0c;其实这个就是一个名词&#xff0c;或者说是一种框架概念。 Jetpack 包含一系列 Android 库&#xff0c;它们都采用最佳做法并在 Android 应用中提供向后兼容性。 Jetpack 应用架构指南概述了构…

记录复现一下第一次awd

前言 之前没打过awd&#xff0c;这次学长组织了一场awd娱乐赛&#xff0c;两个web一个pwn&#xff0c;还有一个黑盒&#xff0c;只会web&#xff0c;第一次啥也不会瞎打&#xff0c;被打烂了&#xff0c;不会写脚本&#xff0c;手交flag的感觉真“不错”&#xff0c;感觉awd还…

I/O多路复用

基础概念 Socket 套接字。百科&#xff1a;对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。 例子1&#xff1a;客户端将数据通过网线发送到服务端&#xff0c;客户端发送数据需要一个出口&#xff0c;服务端接收数据需要一个入口&#xff0c;这两个“口子”就是…

开发技术-Java switch case 的简单用法

文章目录1. integral-selector2. case3. break4. default5. 总结最近开发写 switch 发现有的技术点还没有掌握&#xff0c;在此做个记录。ON JAVA 中文版中&#xff0c;关于 switch 的描述为&#xff1a; switch 有时也被划归为一种选择语句。根据整数表达式的值&#xff0c;s…