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个条件:
- 使用数据线把手机连到电脑上
- 手机的电源线拔掉插头就是数据线。数据线长方形的一端接到电脑的USB接口,即可完成手机与电脑的连接。
- 在电脑上安装手机的驱动程序
- 一般电脑会把手机当作USB存储设备一样安装驱动,大多数情况会自动安装成功。如果遇到少数情况安装失败,需要先安装手机助手,由助手软件下载并安装对应的手机驱动。
- 打开手机的开发者选项并启用USB调试
- 手机出厂后默认关闭开发者选项,需要开启开发者选项才能调试App。
- 打开手机的设置菜单,进入“系统”→“关于手机”→“版本信息”页面,这里有好几个版本项,每个版本项都使劲点击七、八下,总会有某个版本点击后出现“你将开启开发者模式”的提示。继续点击该版本开启开发者模式,然后退出并重新进入设置页面,此时就能在“系统”菜单下找到“开发者选项”或“开发人员选项”了。进入“开发者选项”页面,启用“开发者选项”和“USB调试”两处开关,允许手机通过USB接口安装调试应用。
- 将连接的手机设为文件传输模式,并允许计算机进行USB调试
- 手机通过USB数据线连接电脑后,屏幕弹出选择列表,请求选择某种USB连接方式。这里记得选中“传输文件”,因为充电模式不支持调试App。
- 选完之后手机桌面弹出确认窗口,提示开发者是否允许当前计算机进行USB调试。这里勾选“始终允许使用这台计算机进行调试”选项,再点击右下角的确定按钮,允许计算机在手机上调试App
- 手机要能正常使用
- 锁屏状态下,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个子目录加粗样式,其功能说明如下:
- manifests子目录:只有一个XML文件,即
AndroidManifest.xml——App的运行配置文件。 - java子目录:有3个
com.xxx.myapp包,其中第一个包存放当前模块的Java源代码,后面两个包存放测试用的Java代码。 - res子目录:存放当前模块的资源文件。该目录同时又有4个子目录:
- drawable目录:存放图形描述文件与图片文件。
- layout目录:存放App页面的布局文件。
- mipmap目录:存放App的启动图标。
- values目录:存放一些常量定义文件。例如:字符串常量strings.xml、像素常量dimens.xml、颜色常量colors.xml、样式风格定义styles.xml等
- xml:可在运行时通过调用 Resources.getXML() 读取的任意 XML 文件。各种 XML 配置文件(如可搜索配置)都必须保存在此处。
- manifests子目录:只有一个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'}
}
- 在该文件中可添加
buildscript的repositories和dependencies两个节点,其中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前后端分离的优势
- 使用XML文件描述App界面,方便及时预览界面效果
- 提高界面布局的复用率,如:一个页面布局可以被多处代码复用
- 提高后台逻辑代码的利用率,如:不同的页面布局可以使用同一段java代码来实现相同的逻辑处理
3.2 完整的页面创建过程包括三个步骤:
- 在 layout 目录下创建 XML 文件
- 创建与 XML 文件对应的 Java 代码
- 在 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为控件节点。由于根节点和布局节点都存在下级节点,因此它们要有配对的标签头与标签尾,才能将下级节点包裹起来。
- 根节点其实是特殊的布局节点,它的标签名称可以跟布局节点一样,区别之处在于下列两点:
- 每个界面只有一个根节点,却可能有多个布局节点,也可能没有中间的布局节点,此时所有控件节点都挂在根节点下面。
- 根节点必须配备
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代码、注册页面配置
- 创建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> - 在Android Studio左上方找到项目结构图,右击res目录下面的layout
- 创建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);} } - 注册页面配置
- 在项目中注册该页面,打开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…...
力扣-分数排名
大家好,我是空空star,本篇带你了解一道简单的力扣sql练习题。 文章目录前言一、题目: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模式,这里改成Non…...
MySQL 派生表产生关联索引auto_key0导致SQL非常的慢
相同的SQL在maridb运行0.5秒,在MySQL8.0.26中运行要19秒 官方MySQL在处理子查时,优化器有个优化参数derived_merge,MySQL7开启添加,默认on.很多情况可以自动优化派生表,避免创建临时索引auto_key0和生成临时表数据做…...
计算机网络期末复习汇总(附某高校期末真题试卷)
文章目录一、选择题二、填空题三、名词解析四、简答题五、高校期末真题一、选择题 1、传输延迟时间最小的交换方法是( A ) A.电路交换 B.报文交换 C.分组交换 D.信元交换 2、在OSI七层结构模型中,处于数据链路层与运输层之间的是( B) A、物…...
2月,还是不要跳槽
新年已经过去,马上就到金三银四跳槽季了,一些不满现状,被外界的“高薪”“好福利”吸引的人,一般就在这时候毅然决然地跳槽了。 在此展示一套学习笔记 / 面试手册,年后跳槽的朋友可以好好刷一刷,还是挺有必…...
科技爱好者周刊之爱好者记录
前言 平时浏览的内容杂七杂八,说好听一些叫做“内容丰富,涉猎甚广”,实际一些则是受到主流大环境的冲击加之自身的控制力尚且不足。 有过类似经历的人大多知道,碎片化的信息除了填充大脑的冗余空间,在短期时间内就会被…...
C++入门:函数重载
目录 一. 函数重载的概念和分类 1.1 什么是函数重载 1.2 函数重载的分类 1.3 关于函数重载的几点注意事项 二. C实现函数重载的底层逻辑(为什么C可以实现函数重载而C语言不能) 2.1 编译器编译程序的过程 2.2 为什么C可以实现函数重载而C语言不能 …...
每天10个前端小知识 【Day 16】
👩 个人主页:不爱吃糖的程序媛 🙋♂️ 作者简介:前端领域新星创作者、CSDN内容合伙人,专注于前端各领域技术,成长的路上共同学习共同进步,一起加油呀! ✨系列专栏:前端…...
23美赛D题:确定联合国可持续发展目标的优先级(ICM)思路Python代码
问题D(交叉网络建模题):确定联合国可持续发展目标的优先级(ICM) 赛题目的:对联合国制定的17个可持续发展目标进行关系网络的构建同时评估其可能存在的影响赛题解读&解题思路链接:交叉网络回归路径分析,如何寻找到能代表可持续发展目标的数值是这道题的难点。背景 联…...
高校房产管理系统有哪些管理功能范围?
数图互通高校房产管理系统是基于公司自主研发的FMCenterV5.0平台,是针对中国高校房产的管理特点和管理要求,研发的一套标准产品;通过在中国100多所高校的成功实施和迭代,形成了一套成熟、完善、全生命周期的房屋资源管理解决方案。…...
ACM MM 相关内容的整理+汇总
目录一、网址二、重要时间点三、论文篇幅要求四、征稿主题五、论文格式相关要求六、论文模板修改成投稿模式上述参考七、模板使用相关八、关于图片方面的问题九、Review and Rebuttal十、ACM MM2022相关论文参考arxiv上 ACM MM2022 论文汇总一、网址 ACM MM2023 主页࿱…...
前段时间公司招人,面了一个要20K的,一问自动化只会点皮毛···
前段时间公司要招2个自动化测试,同事面了几十个候选人,发现了一个很奇怪的现象,面试的时候,如果问的是框架api、脚本编写这些问题,基本上个个都能对答如流,等问到实际项目的时候,类似“怎么从0开…...
链表:反转链表、快慢指针、删除链表【零神基础精讲】
来源0x3f: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】,在【对象资源管理器】列表中选择【SQL Server 代理】; 2、鼠标右击【SQL Server 代理】,选择【启动(S)】,如已启动,可以省略此步骤; 3、展开【SQL Server 代理】列…...
Windows安装VMware虚拟机+配置Ubuntu的详细步骤以及解决配置过程中报错的问题(完整版)
目录 引言: 过程: 安装VMware虚拟机: 在VMware虚拟机中配置Ubuntu: 在VMware虚拟机中安装Ubuntu: VMware中启动虚拟机时报错问题的解决: 正式开始安装Ubuntu: 参考资料: 引言: 在学习计…...
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连接不断 方案一 方案二 设置免密登录 客户端生成密钥 在终端输入如下命令,进行回车即可完成后会在用户目录下的.ssh目录下生成公钥id_rsa.pub和私钥id_r…...
测试开发之Django实战示例 第十二章 创建API
第十二章 创建API在上一章里,创建了一个学生注册系统和选课系统。然后创建了展示课程内容的视图,以及学习了如何使用Django缓存框架。在这一章里有如下内容:建立RESTful API管理API视图的认证与权限建立API视图集和路由1创建RESTful API你可能…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
