当前位置: 首页 > news >正文

Android App开发基础

文章目录

  • 一 App的开发特点
    • 1.1 App的运行环境
    • 1.2 App开发语言
      • 1.3 java语言开发
      • 1.4 Kotlin语言开发
      • 1.5 XML
    • 1.6 App连接的数据库
  • 二 App的工程结构
    • 2.1 App工程目录结构
    • 2.2 构建工具Grade
    • 2.3 编译配置文件build.gradle
    • 2.4 运行配置文件AndroidManifest.xml
      • 2.4.1 application
      • 2.4.2 activity
  • 三 App的设计规范
    • 3.1 界面设计与代码逻辑
    • 3.2 完整的页面创建过程包括三个步骤:
    • 3.3 XML标记描绘应用界面
    • 3.4 Java代码书写程序逻辑
    • 3.5 App的活动页面
      • 3.5.1 创建新的App页面
      • 3.5.2 快速生成页面源码
      • 3.5.3 跳转页面的实现

一 App的开发特点

1.1 App的运行环境

  • App是在手机上运行的一类应用软件,而应用软件依附于操作系统。
  • 智能手机流行的操作系统有两种,分别是安卓手机的Android和苹果手机的iOS。
  • App开发为Android上的应用开发,Android系统基于Linux内核,但不等于Linux系统,故App应用无法在Linux系统上运行。
  • Android Studio是谷歌官方推出的App开发环境,它提供了三种操作系统的安装包,分别是Windows、Mac和Linux。
  • 开发者可以在电脑上安装Android Studio,并使用Android Studio开发App项目,但是编译出来的App在电脑上跑不起来。那该怎样验证App的界面展示及其业务逻辑是否正确呢?
  • 为了提供App开发的功能测试环境,一种办法是利用Android Studio创建内置的模拟器,然后启动内置模拟器,再在模拟器上运行App应用。另一种办法是使用真实手机测试App,该办法在实际开发中更为常见。
  • 利用真机调试要求具备以下5个条件:
    1. 使用数据线把手机连到电脑上
      • 手机的电源线拔掉插头就是数据线。数据线长方形的一端接到电脑的USB接口,即可完成手机与电脑的连接。
    2. 在电脑上安装手机的驱动程序
      • 一般电脑会把手机当作USB存储设备一样安装驱动,大多数情况会自动安装成功。如果遇到少数情况安装失败,需要先安装手机助手,由助手软件下载并安装对应的手机驱动。
    3. 打开手机的开发者选项并启用USB调试
      • 手机出厂后默认关闭开发者选项,需要开启开发者选项才能调试App。
      • 打开手机的设置菜单,进入“系统”→“关于手机”→“版本信息”页面,这里有好几个版本项,每个版本项都使劲点击七、八下,总会有某个版本点击后出现“你将开启开发者模式”的提示。继续点击该版本开启开发者模式,然后退出并重新进入设置页面,此时就能在“系统”菜单下找到“开发者选项”或“开发人员选项”了。进入“开发者选项”页面,启用“开发者选项”和“USB调试”两处开关,允许手机通过USB接口安装调试应用。
    4. 将连接的手机设为文件传输模式,并允许计算机进行USB调试
      • 手机通过USB数据线连接电脑后,屏幕弹出选择列表,请求选择某种USB连接方式。这里记得选中“传输文件”,因为充电模式不支持调试App。
      • 选完之后手机桌面弹出确认窗口,提示开发者是否允许当前计算机进行USB调试。这里勾选“始终允许使用这台计算机进行调试”选项,再点击右下角的确定按钮,允许计算机在手机上调试App
    5. 手机要能正常使用
      • 锁屏状态下,Android Studio向手机安装App的行为可能会被拦截,所以要保证手机处于解锁状态,才能顺利通过电脑安装App到手机上。
      • 经过以上步骤,总算具备通过电脑在手机上安装App的条件了。启动Android Studio,在顶部中央的执行区域看到已连接的手机信息,单击手机名称右边的三角运行按钮,等待Android Studio往手机上安装App
  • 如果是初学阶段,可以先使用模拟器,等后期在使用真机测试

1.2 App开发语言

在这里插入图片描述

  • 基于安卓系统的App开发主要有两大技术路线,分别是原生开发和混合开发
    • 原生开发指的是在移动平台上利用官方提供的编程语言(例如Java、Kotlin等)、开发工具包(SDK)、开发环境(Android Studio)进行App开发;
    • 混合开发指的是结合原生与H5技术开发混合应用,也就是将部分App页面改成内嵌的网页,这样无须升级App、只要覆盖服务器上的网页,即可动态更新App页面。
  • 在创建新项目时,弹出的项目配置对话框,Language栏进行选择
    在这里插入图片描述

1.3 java语言开发

  • Java是Android开发的主要编程语言
  • 虽然Android开发需要Java环境,但没要求电脑上必须事先安装JDK,因为Android Studio已经自带了JRE
  • 依次选择菜单File→Project Structure,弹出项目结构对话框
    在这里插入图片描述
    在这里插入图片描述

1.4 Kotlin语言开发

  • Kotlin是谷歌官方力推的又一种编程语言,它与Java同样基于JVM(Java Virtual Machine,即Java虚拟机),且完全兼容Java语言。创建新项目时,在Language栏下拉可选择Kotlin

1.5 XML

  • XML全称为Extensible Markup Language,即可扩展标记语言.
  • XML并非编程语言,只是一种标记语言。它类似于HTML,利用各种标签表达页面元素,以及各元素之间的层级关系及其排列组合。每个XML标签都是独立的控件对象,标签内部的属性以“android:”打头,表示这是标准的安卓属性,各属性分别代表控件的某种规格。
<TextViewandroid:id="@+id/tv"android:layout_height="wrap_content"android:layout_width="wrap_content"android:text="Hello World!" />
  • id:控件的编号。
  • layout_width:控件的布局宽度,wrap_content表示刚好包住该控件的内容。
  • layout_height:控件的布局高度,wrap_content表示刚好包住该控件的内容。
  • text:控件的文本

1.6 App连接的数据库

  • Android内置了专门的数据库名为SQLite,它遵循关系数据库的设计理念,SQL语法类似于MySQL。
  • SQLite无须单独安装,因为它内嵌到应用进程当中,所以App无须配置连接信息,即可直接对其增删改查。由于SQLite嵌入到应用程序,省去了配置数据库服务器的开销,因此它又被归类为嵌入式数据库。
    • 手机端的App,连同程序代码及其内置的嵌入式数据库,其实是个又独立又完整的程序实体,它只负责手机上的用户交互与信息处理,该实体被称作客户端。
    • 后端的Java Web服务,包括Web代码和数据库服务器,同样构成另一个单独运行的程序实体,它只负责后台的业务逻辑与数据库操作,该实体被称作服务端。
    • 客户端与服务端之前通过HTTP接口通信,每当客户端觉得需要把信息发给服务端,或者需要从服务端获取信息时,客户端便向服务端发起HTTP请求,服务端收到客户端的请求之后,根据规则完成数据处理,并将处理结果返回给客户端。这样客户端经由HTTP接口并借服务端之手,方能间接读写后端的数据库服务器。
      在这里插入图片描述
  • 一个具备用户管理功能的App系统,实际上并不单单只是手机上的一个应用,还包括与其对应的Java Web服务。手机里的客户端App,面向的是手机用户,App与用户之间通过手机屏幕交互;而后端的服务程序,面向的是手机App,客户端与服务端之间通过HTTP接口交互。
    在这里插入图片描述

二 App的工程结构

2.1 App工程目录结构

  • App工程分为两个层次
    • 第一个层次是项目,依次选择菜单File→New→New Project即可创建新项目。
    • 另一个层次是模块,模块依附于项目,每个项目至少有一个模块,也能拥有多个模块,依次选择菜单File→New→New Module即可在当前项目创建新模块。
  • 一般所言的“编译运行App”,指的是运行某个模块,而非运行某个项目,因为模块才对应实际的App。

在这里插入图片描述

  • 项目下面有两个分类:一个是app(代表app模块);另一个是Gradle Scripts
    在这里插入图片描述
    在这里插入图片描述

  • app下面有3个子目录加粗样式,其功能说明如下:

    1. manifests子目录:只有一个XML文件,即AndroidManifest.xml——App的运行配置文件
    2. java子目录:有3个com.xxx.myapp包,其中第一个包存放当前模块的Java源代码,后面两个包存放测试用的Java代码。
    3. res子目录:存放当前模块的资源文件。该目录同时又有4个子目录:
      • drawable目录存放图形描述文件与图片文件
      • layout目录:存放App页面的布局文件。
      • mipmap目录:存放App的启动图标。
      • values目录:存放一些常量定义文件。例如:字符串常量strings.xml、像素常量dimens.xml、颜色常量colors.xml、样式风格定义styles.xml等
      • xml:可在运行时通过调用 Resources.getXML() 读取的任意 XML 文件。各种 XML 配置文件(如可搜索配置)都必须保存在此处。
  • Gradle Scripts下面主要是工程的编译配置文件,主要有:

文件名称说明
build.gradle该文件分为项目级与模块级两种,用于描述App工程的编译规则。
proguard-rules.pro用于描述Java代码的混淆规则
gradle.properties用于配置编译工程的命令行参数,一般无须改动
settings.gradle配置需要编译的模块。初始内容为include ':app',表示只编译app模块。
local.properties项目的本地配置文件,它在工程编译时自动生成,用于描述开发者电脑的环境配置,包括SDK的本地路径、NDK的本地路径等。
  • 这里所说的混淆规则是apk的安全保护措施,在打包时,将相关的代码内容进行替换,以起到混淆窥探者,保护程序的版权

2.2 构建工具Grade

  • Gradle 是一个项目自动化构建工具,帮我们做了依赖、打包、部署、发布、各种渠道的差异管理等工作
    在这里插入图片描述

2.3 编译配置文件build.gradle

  • 新创建的App项目默认有两个build.gradle,一个是Project项目级别的build.gradle;另一个是Module模块级别的build.gradle

  • 项目级别的build.gradle指定了当前项目的总体编译规则
//全局配置文件中定义版本号,然后在模块级别的配置文件进行配置
plugins {id 'com.android.application' version '7.4.1' apply falseid 'com.android.library' version '7.4.1' apply false
}
  • 补充内容:
buildscript {repositories {// 以下四行添加阿里云的仓库地址,方便国内开发者下载相关插件maven { url 'https://maven.aliyun.com/repository/jcenter' }maven { url 'https://maven.aliyun.com/repository/google'}maven { url 'https://maven.aliyun.com/repository/gradle-plugin'}maven { url 'https://maven.aliyun.com/repository/public'}google()jcenter()}dependencies {// 配置gradle插件版本,下面的版本号就是Android Studio的版本号classpath 'com.android.tools.build:gradle:4.1.0'}
}
  • 在该文件中可添加buildscriptrepositoriesdependencies两个节点,其中repositories节点用于设置Android Studio插件的网络仓库地址,而dependencies节点用于设置gradle插件的版本号
  • 由于官方的谷歌仓库位于国外,下载速度相对较慢,因此可在repositories节点添加阿里云的仓库地址,方便国内开发者下载相关插件。

  • 模块级别的build.gradle对应于具体模块,每个模块都有自己的build.gradle,它指定了当前模块的详细编译规则
plugins {id 'com.android.application'
}android {//配置命名空间namespace 'com.yang.myfirstapplication'// 指定编译用的SDK版本号。比如33表示使用Android 13编译compileSdk 33//指定编译工具的版本号。// 头两位数字必须与compileSdkVersion保持一致,具体的版本号可在sdk安装目录的“sdk\build-tools”下找到buildToolsVersion '30.0.3'defaultConfig {// 指定该模块的应用编号,也就是App的包名applicationId "com.yang.myfirstapplication"//指定App适合运行的最小SDK版本号,如21 表示至少要在Android 5.0上运行minSdk 21//指定目标设备的SDK版本号。【App最希望在该版本的Android上运行】targetSdk 33//指定App的应用版本号versionCode 1//指定App的应用版本名称versionName "1.0"//单元测试类testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled false//指定混淆文件proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}}
// 指定App编译的依赖信息
dependencies {//版本兼容库implementation 'androidx.appcompat:appcompat:1.4.1'//网络依赖库,在构建项目时,grade自动去网络上下载相应的依赖文件implementation 'com.google.android.material:material:1.5.0'implementation 'androidx.constraintlayout:constraintlayout:2.1.3'// 指定单元测试编译用的junit版本号testImplementation 'junit:junit:4.13.2'androidTestImplementation 'androidx.test.ext:junit:1.1.3'androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
  • Gradle工具的版本配置在gradle\wrapper\gradle-wrapper.properties,也可以依次选择菜单File→Project Structure→Project,在弹出的设置页面中修改Gradle Version
    在这里插入图片描述
    在这里插入图片描述
  • 注意:每个版本的Android Studio都有对应的Gradle版本,只有二者的版本正确对应,App工程才能成功编译
  • 具体的版本匹配信息参看官网内容

2.4 运行配置文件AndroidManifest.xml

  • AndroidManifest.xml指定了App的运行配置信息,它是一个XML描述文件
  • 位置
    在这里插入图片描述
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><!--allowBackup:应用备份dataExtractionRules:备份和转移配置fullBackupContent:自动备份配置icon:应用图标label:应用名称supportsRtl: 阿拉伯语的支持theme: 应用显示风格targetApi: 目标Android版本--><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/Theme.MyFirstApplication"tools:targetApi="31"><!-- activity节点指定了该App拥有的活动页面信息,其中拥有android.intent.action.MAIN的activity说明它是入口页面--><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".MainActivity2"></activity></application></manifest>
  • AndroidManifest.xml的根节点为manifest,它的package属性指定了该App的包名

2.4.1 application

  • manifest的application节点的各属性简介:
属性名说明
android:allowBackup应用备份开关。【true表示允许,false则表示不允许。】允许用户备份系统应用和第三方应用的apk安装包和应用数据,以便在刷机或者数据丢失后恢复应用,用户即可通过adb backup和adb restore来进行对应用数据的备份和恢复。
android:icon指定App在手机屏幕上显示的图标。
android:label指定App在手机屏幕上显示的名称。
android:roundIcon指定App的圆角图标。
android:supportsRtl是否支持阿拉伯语/波斯语这种从右往左的文字排列顺序。为true表示支持,为false则表示不支持。
android:theme指定App的显示风格
  • application属性的官方文档

2.4.2 activity

  • Activity 是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务
  • application下的activity节点,它是活动页面的注册声明,只有在AndroidManifest.xml中正确配置了activity节点,才能在运行时访问对应的活动页面。初始配置的MainActivity正是App的默认主页。
    <intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    
  • 完整的活动页面注册标签
    <!--活动页面的注册声名--><activityandroid:name=".MainActivity"android:exported="true"><!--如果有多个activity进行如下的intent-filter配置,桌面会出现两个app图标--><intent-filter><!--action:配置入口页面--><action android:name="android.intent.action.MAIN" /><!--category:配置屏幕是否显示图标--><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".MainActivity2"></activity>
    </application>
    

三 App的设计规范

  • App工程的源码设计规范:App将看得见的界面设计与看不见的代码逻辑区分开,然后利用XML标记描绘应用界面,同时使用Java代码书写程序逻辑,从而形成App前后端分离的设计规约,有利于提高App集成的灵活性。

3.1 界面设计与代码逻辑

  • 类似与Web网站前后端分离的模式,App也采用了前后端分离设计
    在这里插入图片描述
  • App前后端分离的优势
    1. 使用XML文件描述App界面,方便及时预览界面效果
    2. 提高界面布局的复用率,如:一个页面布局可以被多处代码复用
    3. 提高后台逻辑代码的利用率,如:不同的页面布局可以使用同一段java代码来实现相同的逻辑处理

3.2 完整的页面创建过程包括三个步骤:

  1. 在 layout 目录下创建 XML 文件
  2. 创建与 XML 文件对应的 Java 代码
  3. 在 AndroidManifest.xml 中注册页面配

3.3 XML标记描绘应用界面

<?xml version="1.0" encoding="utf-8"?>
<!-- 线性布局, match_parent意思是与上级视图保持一致-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical"><!-- 文本视图,名字叫做tv,显示的文字内容为“Hello World!” --><!--android:id="@+id/tv",表示给该文本视图起名字编号--><TextViewandroid:id="@+id/tv"android:layout_height="wrap_content"android:layout_width="wrap_content"android:text="Hello World!" />
</LinearLayout>
  • 上面的XML内容,外层的LinearLayout标签为该界面的根节点,内层的TextView为控件节点。由于根节点和布局节点都存在下级节点,因此它们要有配对的标签头与标签尾,才能将下级节点包裹起来。
  • 根节点其实是特殊的布局节点,它的标签名称可以跟布局节点一样,区别之处在于下列两点:
    1. 每个界面只有一个根节点,却可能有多个布局节点,也可能没有中间的布局节点,此时所有控件节点都挂在根节点下面。
    2. 根节点必须配备xmlns:android="http://schemas.android.com/apk/res/android",表示指定XML内部的命名空间,有了这个命名空间,Android Studio会自动检查各节点的属性名称是否合法

3.4 Java代码书写程序逻辑

  • 复杂的业务逻辑由后台的代码实现,
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
}
  • 注意:onCreate内部的setContentView方法直接引用了布局文件的名字activity_main,该方法的意思是往当前活动界面填充activity_main.xml的布局内容
  • 在MainActivity中修改文本内容
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//当前的页面布局采用的是res/layout/activity_main.xmlsetContentView(R.layout.activity_main);//获取名叫tv的TextView控件,注意添加导包语句importandroid.widget.TextView;TextView tv = findViewById(R.id.tv);//设置TextView控件的文字内容tv.setText("你好 Android!");}
}

在这里插入图片描述

3.5 App的活动页面

  • App活动页面的基本操作,首先手把手地分三步创建新的App页面,接着通过活动创建菜单快速生成页面源码,然后说明了如何在代码中跳到新的活动页面

3.5.1 创建新的App页面

  • 若要增加新的页面,,完整的页面创建过程包括3个步骤:创建XML文件、创建Java代码、注册页面配置
  1. 创建XML文件
    • 在Android Studio左上方找到项目结构图,右击res目录下面的layout
      在这里插入图片描述
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:gravity="center"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/text"/></LinearLayout>
    
  2. 创建Java代码
    import android.os.Bundle;
    import android.view.Menu;import androidx.annotation.Nullable;
    import androidx.appcompat.app.AppCompatActivity;public class MainActivity2 extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);//加载来自activity_main3的页面布局setContentView(R.layout.activity_main3);}
    }
    
  3. 注册页面配置
    • 在项目中注册该页面,打开AndroidManifest.xml,在application节点内进行配置:
    <activity android:name="MainActivity2" />
    

3.5.2 快速生成页面源码

  • Android Studio早已集成快速创建页面的功能,只要一个对话框就能完成所有操作。【创建XML文件、创建Java代码、注册页面配置】
  • 右击java目录下面的包名,右键菜单中依次选择New→Activity→Empty Activity
    在这里插入图片描述
    在这里插入图片描述

3.5.3 跳转页面的实现

  • 一旦创建好新页面,就得在合适的时候跳到该页面,假设出发页面为A,到达页面为B,那么跳转动作是从A跳到B。由于启动App会自动打开默认主页MainActivity,因此跳跃在MainActivity,跳跃的终点则为目标页面的Activity。这种跳转动作翻译为Android代码,格式形如"startActivity(newIntent(源页面.this, 目标页面.class));"。如果目标页面名为MainActivity2,跳转代码如下:
import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv = findViewById(R.id.tv);tv.setText("你好 Android!");Button button = findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//Intent intent = new Intent();//intent.setClass(MainActivity.this,MainActivity2.class);//startActivity(intent);startActivity(new Intent(MainActivity.this,MainActivity2.class));}});}
}

在这里插入图片描述

相关文章:

Android App开发基础

文章目录一 App的开发特点1.1 App的运行环境1.2 App开发语言1.3 java语言开发1.4 Kotlin语言开发1.5 XML1.6 App连接的数据库二 App的工程结构2.1 App工程目录结构2.2 构建工具Grade2.3 编译配置文件build.gradle2.4 运行配置文件AndroidManifest.xml2.4.1 application2.4.2 ac…...

力扣-分数排名

大家好&#xff0c;我是空空star&#xff0c;本篇带你了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;178. 分数排名二、解题1.错误示范①提交SQL运行结果2.错误示范②提交SQL运行结果3.正确示范①提交SQL运行结果4.正确示范②提交SQL运行结果5.正确示范③提交…...

图文详解Ansible中的变量及加密

文章目录一、变量命名二、变量级别三、.变量设定和使用方式1.在playbook中直接定义变量2.在文件中定义变量3.使用变量4.设定主机变量和清单变量5.目录设定变量6.用命令覆盖变量7.使用数组设定变量8.注册变量9.事实变量10.魔法变量四、JINJA2模板五、 Ansible的加密控制练习1.用…...

silicon labs平台通过串口升级固件方案

开发环境 windowssimplicity studio 5geck sdk 4.1 一 bootloader 新建BGAPI UART DFU工程 工程新建完成以后看一下linkerfile.ld文件的flash和ram的配置跟自己的application工程是否对应得上 配置串口波特率和引脚 默认使用PB0进入bootloader模式&#xff0c;这里改成Non…...

MySQL 派生表产生关联索引auto_key0导致SQL非常的慢

相同的SQL在maridb运行0.5秒&#xff0c;在MySQL8.0.26中运行要19秒 官方MySQL在处理子查时&#xff0c;优化器有个优化参数derived_merge&#xff0c;MySQL7开启添加&#xff0c;默认on.很多情况可以自动优化派生表&#xff0c;避免创建临时索引auto_key0和生成临时表数据做…...

计算机网络期末复习汇总(附某高校期末真题试卷)

文章目录一、选择题二、填空题三、名词解析四、简答题五、高校期末真题一、选择题 1、传输延迟时间最小的交换方法是( A ) A.电路交换 B.报文交换 C.分组交换 D.信元交换 2、在OSI七层结构模型中&#xff0c;处于数据链路层与运输层之间的是&#xff08; B&#xff09; A、物…...

2月,还是不要跳槽

新年已经过去&#xff0c;马上就到金三银四跳槽季了&#xff0c;一些不满现状&#xff0c;被外界的“高薪”“好福利”吸引的人&#xff0c;一般就在这时候毅然决然地跳槽了。 在此展示一套学习笔记 / 面试手册&#xff0c;年后跳槽的朋友可以好好刷一刷&#xff0c;还是挺有必…...

科技爱好者周刊之爱好者记录

前言 平时浏览的内容杂七杂八&#xff0c;说好听一些叫做“内容丰富&#xff0c;涉猎甚广”&#xff0c;实际一些则是受到主流大环境的冲击加之自身的控制力尚且不足。 有过类似经历的人大多知道&#xff0c;碎片化的信息除了填充大脑的冗余空间&#xff0c;在短期时间内就会被…...

C++入门:函数重载

目录 一. 函数重载的概念和分类 1.1 什么是函数重载 1.2 函数重载的分类 1.3 关于函数重载的几点注意事项 二. C实现函数重载的底层逻辑&#xff08;为什么C可以实现函数重载而C语言不能&#xff09; 2.1 编译器编译程序的过程 2.2 为什么C可以实现函数重载而C语言不能 …...

每天10个前端小知识 【Day 16】

&#x1f469; 个人主页&#xff1a;不爱吃糖的程序媛 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、CSDN内容合伙人&#xff0c;专注于前端各领域技术&#xff0c;成长的路上共同学习共同进步&#xff0c;一起加油呀&#xff01; ✨系列专栏&#xff1a;前端…...

23美赛D题:确定联合国可持续发展目标的优先级(ICM)思路Python代码

问题D(交叉网络建模题):确定联合国可持续发展目标的优先级(ICM) 赛题目的:对联合国制定的17个可持续发展目标进行关系网络的构建同时评估其可能存在的影响赛题解读&解题思路链接:交叉网络回归路径分析,如何寻找到能代表可持续发展目标的数值是这道题的难点。背景 联…...

高校房产管理系统有哪些管理功能范围?

数图互通高校房产管理系统是基于公司自主研发的FMCenterV5.0平台&#xff0c;是针对中国高校房产的管理特点和管理要求&#xff0c;研发的一套标准产品&#xff1b;通过在中国100多所高校的成功实施和迭代&#xff0c;形成了一套成熟、完善、全生命周期的房屋资源管理解决方案。…...

ACM MM 相关内容的整理+汇总

目录一、网址二、重要时间点三、论文篇幅要求四、征稿主题五、论文格式相关要求六、论文模板修改成投稿模式上述参考七、模板使用相关八、关于图片方面的问题九、Review and Rebuttal十、ACM MM2022相关论文参考arxiv上 ACM MM2022 论文汇总一、网址 ACM MM2023 主页&#xff1…...

前段时间公司招人,面了一个要20K的,一问自动化只会点皮毛···

前段时间公司要招2个自动化测试&#xff0c;同事面了几十个候选人&#xff0c;发现了一个很奇怪的现象&#xff0c;面试的时候&#xff0c;如果问的是框架api、脚本编写这些问题&#xff0c;基本上个个都能对答如流&#xff0c;等问到实际项目的时候&#xff0c;类似“怎么从0开…...

链表:反转链表、快慢指针、删除链表【零神基础精讲】

来源0x3f&#xff1a;https://space.bilibili.com/206214 文章目录反转链表[206. 反转链表](https://leetcode.cn/problems/reverse-linked-list/)[92. 反转链表 II](https://leetcode.cn/problems/reverse-linked-list-ii/)[25. K 个一组翻转链表](https://leetcode.cn/proble…...

SQlServer 定时执行sql语句作业的制定

1、打开【SQL Server Management Studio】&#xff0c;在【对象资源管理器】列表中选择【SQL Server 代理】&#xff1b; 2、鼠标右击【SQL Server 代理】&#xff0c;选择【启动(S)】&#xff0c;如已启动&#xff0c;可以省略此步骤&#xff1b; 3、展开【SQL Server 代理】列…...

Windows安装VMware虚拟机+配置Ubuntu的详细步骤以及解决配置过程中报错的问题(完整版)

目录 引言: 过程&#xff1a; 安装VMware虚拟机&#xff1a; 在VMware虚拟机中配置Ubuntu&#xff1a; 在VMware虚拟机中安装Ubuntu&#xff1a; VMware中启动虚拟机时报错问题的解决&#xff1a; 正式开始安装Ubuntu&#xff1a; 参考资料&#xff1a; 引言: 在学习计…...

103.第十九章 MySQL数据库 -- MySQL的备份和恢复、MySQL主从复制(十三)

mysqldump 常见通用选项: -A, --all-databases #备份所有数据库,含create database -B, --databases db_name… #指定备份的数据库,包括create database语句 -E, --events:#备份相关的所有event scheduler -R, --routines:#备份所有存储过程和自定义函数 --triggers:#备…...

SSH免密登录以及IP别名配置(保姆级教程)

目录 设置免密登录 客户端生成密钥 将公钥上传到服务器 创建别名 创建config配置 配置说明 保持SSH连接不断 方案一 方案二 设置免密登录 客户端生成密钥 在终端输入如下命令&#xff0c;进行回车即可完成后会在用户目录下的.ssh目录下生成公钥id_rsa.pub和私钥id_r…...

测试开发之Django实战示例 第十二章 创建API

第十二章 创建API在上一章里&#xff0c;创建了一个学生注册系统和选课系统。然后创建了展示课程内容的视图&#xff0c;以及学习了如何使用Django缓存框架。在这一章里有如下内容&#xff1a;建立RESTful API管理API视图的认证与权限建立API视图集和路由1创建RESTful API你可能…...

Yakit实战技巧:用MITM热加载任意修改流量

背景 用户在使用 Yakit MITM 功能的时候&#xff0c;经常会遇到一些特殊需求&#xff1a; 我的数据包需要携带一些特征变量才能访问&#xff0c;但是浏览器无法做到&#xff0c;我可以批量修改流量新增某一个 Header 吗&#xff1f; 我可以在代理层面在所有流量中新增一个参数…...

如何搭建自己的MQTT服务器?跟我来,一行代码搞定!

如何搭建自己的MQTT服务器&#xff1f;跟我来&#xff0c;一行代码搞定&#xff01;什么是mosquitto&#xff1f;如何使用mosquitto云服务器注意事项MQTT客户端软件下载在文章开始之前&#xff0c;你首先需要有一台服务器&#xff0c;我这里用的是阿里云的轻量级云服务器&#…...

遇到的问题

一、axios 请求 1、axios post 提交的请求的 content-type 为 json 默认情况下&#xff0c;axios将JavaScript对象序列化为JSON&#xff0c;再发送数据application/x-www-form-urlencoded格式相反&#xff0c;您可以使用URLSearchParamsAPI&#xff0c;也就是支持在绝大多数…...

线程没有被终止的异常的处理

process Runtime.getRuntime().exec(command); process.waitFor(); // 这个调用比较关键&#xff0c;就是等当前命令执行完成后再往下执行 if (!file.exists()) { Ulog.error("html转pdf执行失败"); } else { …...

RocketMQ 初步了解

RocketMQ 初步了解 前言&#xff1a; ​  近期&#xff0c;因公司使用 RocketMQ 作为消息队列中间件&#xff0c;特此了解。  RocketMQ 是阿里巴巴在 2012 年开发的分布式消息中间件&#xff0c;专为万亿级超大规模的消息处理而设计&#xff0c;具有高吞吐量、低延迟、海量…...

Mac下PyCharm快捷键

Mac键盘符号和修饰键说明 ⌘ Command⇧ Shift⌥ Option⌃ Control↩︎ Return/Enter⌫ Delete⌦ 向前删除键&#xff08;FnDelete&#xff09;↑ 上箭头↓ 下箭头← 左箭头→ 右箭头⇞ Page Up&#xff08;Fn↑&#xff09;⇟ Page Down&#xff08;Fn↓&#xff09;Home Fn …...

城市管网监测系统,保障城市血管生命线!

各种不同的管网线路组成了城市的供血管道&#xff0c;管网对于维持正常的社会生活、生产秩序和公共安全至关重要。我国城市平均漏损率达到38%&#xff0c;部分城市甚至超过50%&#xff0c;远超发达国家的平均水平&#xff08;10%&#xff09;。对于管道状态的监测&#xff0c;是…...

Web3中文|1月数据显示复苏迹象,涉及NFT、DeFi、Dapp、链游……

本期看点 1、Dapp行业概述 2、DeFi的TVL增长26.8%&#xff0c;有回暖迹象 3、NFT市场数据飙升&#xff0c;交易额达9.46亿美元 4、链游使用量占行业48% 5、与去年相比&#xff0c;1月份区块链漏洞损失最低 区块链领域正在多元化发展&#xff0c;2023年1月&#xff0c;从各…...

MySQL索引的介绍以及优缺点

1.索引简介 索引是一种用于快速查询和检索数据的数据结构&#xff0c;其本质可以看成是一种排序好的数据结构。 使用索引可以快速找出在某个或多个列中有一特定值的行&#xff0c;所有MySQL列类型都可以被索引&#xff0c;对相关列使用索引是提高查询操作速度的最佳途径。 索…...

Java_小项目书城

1.概述 书城的基本功能&#xff1a; 展示书籍上新书籍下架书籍退出应用 书城项目所涉及到的知识点&#xff1a; 用户交互–键盘录入分支结构&#xff0c;循环结构面向对象的思维&#xff0c;封装对象集合的使用 2.菜单的编写 这部分代码就是读取用户键盘的录入&#xff0…...

做的网站在百度上搜不出来的/微信crm管理系统

首先想要解释一下标题&#xff0c;标题中的你也包括我自己&#xff0c;大家不要以为我能问出这样的问题我就是一个大神啦&#xff01;我只是一个学习了一年网站开发的“屌丝”程序员而已&#xff08;大婶都算不上&#xff09;&#xff01;写这篇文章只是想表达一下我最近几天编…...

便利的微网站建设/网络舆情的网站

<i><a href"login.html" style"color:white;font-size: 13px;" target"_top">退出</a></i> 加上 target"_top"就可以正常跳出了转载于:https://www.cnblogs.com/jyf0207/p/6780500.html...

做百度推广首先要做网站吗/品牌全网推广

公司有个测试服务器&#xff0c;上面跑了几个应用和一个DB。 DB被这个几个应用使用。 最近老是被挂掉。 CPU 使用率100%。 搞到最后大家都不能用。 敲个命令都没反应。 TOP命令显示的是一些Oracle session占用CPU资源太多。 杯具的是在服务器上连sqlplus 都进不去了&#xff0c…...

怎么做广告宣传效果好/seo关键词排名优化是什么

2019独角兽企业重金招聘Python工程师标准>>> 对于每一个iOS开发人员来说&#xff0c;最终无疑就是将自己开发的APP上线到AppStore&#xff0c;让更多的人去用自己写的软件。 试想一下&#xff0c;哪天走在街上看到某个人在用你写的音乐软件听着歌&#xff0c;那是一…...

网站制作论文总结/网络营销运营

在Java NIO中&#xff0c;如果两个通道中有一个是FileChannel&#xff0c;那你可以直接将数据从一个channel传输到另外一个channel。 transferFrom() FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中&#xff08;这个方法在JDK文档中的解释为将字节从给…...

代理 网站前置审批/b站推广网站2024

Android 瀑布流照片墙实现&#xff0c;体验不规则的美感。 这是一个大牛写的瀑布流的一个Demo&#xff0c;我研究了一下&#xff0c;给大家分享出来&#xff0c;有需要的可以直接用。。。 实现效果图&#xff1a; 源代码示例&#xff1a; 布局文件&#xff1a;activity_main:…...