德清网站公司建设/百度应用

德清网站公司建设,百度应用,中国建设银行昆山支行网站,移动互联网开发就业前景登录界面是用户进入App的第一步,因此需要简洁明了,同时保持品牌风格的一致性。如:顶部区域为品牌LOGO展示,增加品牌识别度;中间区域为登录表单,包含输入框和按钮;底部区域为其他登录方式、注册入…

        登录界面是用户进入App的第一步,因此需要简洁明了,同时保持品牌风格的一致性。如:顶部区域为品牌LOGO展示,增加品牌识别度;中间区域为登录表单,包含输入框和按钮;底部区域为其他登录方式、注册入口和忘记密码相关链接。

        在HarmonyOS中,使用ArkTS-UI框架完成登录界面的设计,会使用到Text组件、Textinput组件、Button组件、Image组件、Link组件、Row和Column布局容器等。数据交互方面,使用@State装饰器记录用户名和密码的表单数据状态,按钮事件和输入框事件的处理函数,则使用到onClick和onChange,确保用户操作能够触发相应的逻辑。

一、界面设计 

        在HarmonyOS中使用ArkTS-UI设计登录界面,将使用以下组件:

1.1 Row和Column布局容器

        使用Row和Column容器完成登录表单的布局。通过配置Row容器的padding属性,使App容器四周留出20像素间距,通过配置Column容器的justifyContent,使内容水平和垂直居中。

        示例代码如下:

@Entry
@Component
struct Login {build() {RelativeContainer() {Row(){Column(){}.width('100%').height('100%').justifyContent(FlexAlign.Center)}.width('100%').padding(20)}.height('100%').width('100%')}
}

1.2 Image组件

        使用Image组件用于显示品牌Logo。代码如下:

@Entry
@Component
struct Login {build() {RelativeContainer() {Row(){Column(){// 添加Logo图标Image($rawfile('logo.png')).width(80)}.width('100%').height('100%').justifyContent(FlexAlign.Center)}.width('100%').padding(20)}.height('100%').width('100%')}
}

        页面效果如下图:

1.3 Text组件

        使用Text组件,用于显示Logo文本信息,如登录标题、提示等。示例代码如下:

@Entry
@Component
struct Login {build() {RelativeContainer() {Row(){Column(){// 添加Logo图标Image($rawfile('logo.png')).width(80)// 添加标题Text('欢迎登录XXX平台').fontSize(20).fontWeight(FontWeight.Bold).padding({ top: 15, bottom: 15})}.width('100%').height('100%').justifyContent(FlexAlign.Center)}.width('100%').padding(20)}.height('100%').width('100%')}
}

        页面效果如下图:

1.4 TextInput组件

        使用TextInput组件,用于输入用户名或手机号、密码等。同时,使用Column容器(垂直布局)将表单内容包裹起来,并配置space为20,使其内部元素垂直布局元素间距为20。示例代码如下:

@Entry
@Component
struct Login {build() {RelativeContainer() {Row({ space: 20 }){Column(){// 添加Logo图标Image($rawfile('logo.png')).width(80)// 添加标题Text('欢迎登录XXX平台').fontSize(20).fontWeight(FontWeight.Bold).padding({ top: 15, bottom: 15})// 表单输入框Column({ space: 20 }){TextInput({ placeholder: '请输入用户名/手机号' })TextInput({ placeholder: '请输入密码' }).type(InputType.Password)}.padding({ top: 20, bottom: 50 })}.width('100%').height('100%').justifyContent(FlexAlign.Center)}.width('100%').padding(20)}.height('100%').width('100%')}
}

        页面效果如下图:

1.5 Button组件

        使用Button组件,用于登录、注册或忘记密码等功能。示例代码如下:

@Entry
@Component
struct Login {build() {RelativeContainer() {Row({ space: 20 }){Column(){// 添加Logo图标Image($rawfile('logo.png')).width(80)// 添加标题Text('欢迎登录XXX平台').fontSize(20).fontWeight(FontWeight.Bold).padding({ top: 15, bottom: 15})// 表单输入框Column({ space: 20 }){TextInput({ placeholder: '请输入用户名/手机号' })TextInput({ placeholder: '请输入密码' }).type(InputType.Password)}.padding({ top: 20, bottom: 50 })// 登录按钮Button('登 录', { type: ButtonType.Capsule }).width('100%')}.width('100%').height('100%').justifyContent(FlexAlign.Center)}.width('100%').padding(20)}.height('100%').width('100%')}
}

        页面效果如下图:

1.6 链接文本

        使用Link组件,用于注册、忘记密码的链接。用Row容器(水平布局)将文本链接包裹起来,并且文本组件之间的间距设置为20。示例代码如下:

@Entry
@Component
struct Login {build() {RelativeContainer() {Row({ space: 20 }){Column(){// 添加Logo图标Image($rawfile('logo.png')).width(80)// 添加标题Text('欢迎登录XXX平台').fontSize(20).fontWeight(FontWeight.Bold).padding({ top: 15, bottom: 15})// 表单输入框Column({ space: 20 }){TextInput({ placeholder: '请输入用户名/手机号' })TextInput({ placeholder: '请输入密码' }).type(InputType.Password)}.padding({ top: 20, bottom: 80 })// 登录按钮Button('登 录', { type: ButtonType.Capsule }).width('100%')// 添加 忘记密码 和 注册Row({ space: 20 }){Text('忘记密码?').fontColor('#1495E7')Text('注册').fontColor('#FF0000')}.width('100%').justifyContent(FlexAlign.End).padding({ top: 15, right: 10, bottom: 50})}.width('100%').height('100%').justifyContent(FlexAlign.Center)}.width('100%').padding(20)}.height('100%').width('100%')}
}

        页面效果如下图:

        通过以上组件,就已设计出一个简洁且功能完善的登录界面。

二、界面交互功能

        界面元素已设计完毕,现在则需要设计交互功能,当用户输入内容时,需将填写内容实时赋值给状态变量;如在未填任何内容时,用户点击“登录”按钮,则弹出提示框提示用户。

2.1 状态管理 

        使用@State装饰器管理登录表单的状态,例如用户和密码。示例代码如下:

@Entry
@Component
struct Login {@State username: string = '';   // 用户名@State password: string = '';   // 密码// 略...
}

2.2 更新表单数据

        在输入框上添加onChange事件,当文本内容被修改后,实时将回调函数中内容赋值给状态变量。示例代码如下:

// 表单输入框
Column({ space: 20 }){TextInput({ placeholder: '请输入用户名/手机号', text: this.username }).onChange((val: string) => {this.username = val})TextInput({ placeholder: '请输入密码', text: this.password }).type(InputType.Password).onChange((val: string) => {this.password = val})

2.3 登录按钮

        在登录按钮上添加onClick事件,当用户点击时,校验用户名/手机号,密码是否正确;如信息有误,弹出信息提示用户;如信息正确,执行登录操作。示例代码如下:

// 表单输入框
Column({ space: 20 }){TextInput({ placeholder: '请输入用户名/手机号', text: this.username }).onChange((val: string) => {this.username = val})TextInput({ placeholder: '请输入密码', text: this.password }).type(InputType.Password).onChange((val: string) => {this.password = val})
}.padding({ top: 20, bottom: 80 })
// 登录按钮
Button('登 录', { type: ButtonType.Capsule }).width('100%').onClick(() => {// do something...console.log(this.username, this.password)})

2.4 弹框组件

        在表单校验前,先定义showMsg函数,用于信息提示功能。提示框使用的是HarmonyOS内置函数promptAction,示例代码如下:

  /*** 显示信息* @param text*/showMsg(text: string = '') {promptAction.showToast({message: text,duration: 1500,alignment: Alignment.Center})}

        AlertDialog的主要参数说明:

名称说明
message

弹窗内容。

duration提示框显示的时长,单位为毫秒。超出该时长后,提示框会自动关闭。
alignment提示框的显示位置,支持多种对齐方式(如Alignment.Center、Alignment.Top等)。
backgroundColor提示框的背景颜色。
textColor提示框文字的颜色。

2.5 信息校验

        在正式将登录表单数据发送给后台之前,前端必须先做基础校验,验证数据符合要求后,再执行发送请求。在登录界面,定义validateForm函数,用于校验用户输入的表单数据。代码如下:

  /*** 校验表单*/validateForm(){if (!this.username || !this.password) {this.showMsg('请输入用户名或名称')return;} else if (this.password.length < 6) {this.showMsg('密码不能小于6位')return;}// 校验通过,提交数据console.log(this.username, this.password)}

        此时,如果用户什么也没填写,点击“登录”按钮,会提示用户输入相关内容。如下图:

三、数据交互

        登录界面必须要与后台完成数据交互,才能最终实现登录的功能。通常通过HTTP请求来完成,这里就直接使用HarmonyOS提供的http模块来实现这步。

        在前面两篇中,已讲解过http和axios请求模块,根据自身喜好选择一个来完成项目的数据请求即可。

地址一:HarmonyOS开发 - 电商App实例二( 网络请求http)-CSDN博客

地址二:HarmonyOS开发 - 电商App实例三( 网络请求axios)-CSDN博客

3.1 定义标准接口返回类型

        打开项目的types目录下的http.d.ts文件,在里面定义一个标准接口返回类型。

        代码如下:

/*** 接口标准返回格式*/
interface standardInterfaceResult {code: number,data: any,msg: string
}

3.2 定义登录API函数

        如下图,在项目的api目录,创建login.ts文件,用于定义登录、注册、忘记密码等相关api的请求函数。

        示例代码如下:

import { standardInterfaceResult } from '../types/http'
import { httpRequest } from '../utils/request'/*** 登录Api函数*/
export const login = async (data) => {return await httpRequest.post<standardInterfaceResult>('/login.php', data)
}

3.3 登录请求

        将登录定义的API函数login()引入到登录界面,当用户信息输入校验正确时,执行login()函数并得到响应后,根据后台返回结果做出相应操作。代码如下:

import { login } from '../api/login'
import router from '@ohos.router';@Entry
@Component
struct Login {@State username: string = '';   // 用户名@State password: string = '';   // 密码/*** 显示信息* @param text*/showMsg(text: string = '') {AlertDialog.show({title: '提示',message: text})}/*** 校验表单*/validateForm(){if (!this.username || !this.password) {this.showMsg('请输入用户名或名称')return;} else if (this.password.length < 6) {this.showMsg('密码不能小于6位')return;}// 校验通过,提交数据login({username: this.username,password: this.password}).then(res => {this.showMsg(res.msg)// code 为200时,跳转到指定界面if (res.code == 200) {// 跳转到首页setTimeout(() => {router.pushUrl({url: '/pages/Index'})}, 1200)}})}build() {RelativeContainer() {Row({ space: 20 }){Column(){// 略... // 表单输入框Column({ space: 20 }){TextInput({ placeholder: '请输入用户名/手机号', text: this.username }).onChange((val: string) => {this.username = val})TextInput({ placeholder: '请输入密码', text: this.password }).type(InputType.Password).onChange((val: string) => {this.password = val})}.padding({ top: 20, bottom: 80 })// 登录按钮Button('登 录', { type: ButtonType.Capsule }).width('100%').onClick(() => {// 校验表单this.validateForm()})// 略...}.width('100%').height('100%').justifyContent(FlexAlign.Center)}.width('100%').padding(20)}.height('100%').width('100%')}
}

        此时,我们随便输入一个用户名(13233332222)和密码(12345),后台校验不通过,同样会返回相应错误信息,提示用户重新操作。如下图:

        现在,我们输入正确的用户名(13200002222)和密码(123456),再来看下结果。如下图:

        如下图,控制台输出登录接口的响应数据,其中包含了用户的信息和登录访问令牌。

3.4 本地信息存储        

        登录成功后,可以将登录接口响应的用户信息存储到本地,以便下次自动填充或保持登录状态;这里,可以使用dataPreference模块,将用户信息和访问令牌缓存在本地。

        在整个项目中,如下单、订单信息、用户信息等相关数据,都需要在登录状态下才能访问;并且,这些需要权限的api请求,要在http的header配置中添加访问令牌(即登录成功时,返回的accesstoken数据)。

        所以,我们要在utils目录中,定义一个localStorage.ts文件,用于全局存储用户和访问令牌数据,并有共享读取功能。之前写过几篇本地持久化文章,大家可以参考一下,地址:HarmonyOS开发 - 本地持久化之实现LocalStorage实例_鸿蒙开发本地缓存-CSDN博客。

3.4.1  localStorage.ts文件

        代码如下:

import common from '@ohos.app.ability.common'
import preferences from '@ohos.data.preferences'/*** 判断字符串是否为JSON对象*/
export const isJsonObject = (value: string) : boolean => {try {const parseStr = JSON.parse(value)return 'object' === typeof parseStr && null !== parseStr} catch (e) {console.log('testTag', e)return false}
}// 定义存储值类型
type valueType = string | number | boolean
// 定义json对象存储类型
type dataType = { value: valueType | object, expire: number }/*** 定义LocalStorage类*/
export class LocalStorage {private preference: preferences.Preferences // 用户首选项实例对象// 定义初始化函数initial(context: common.UIAbilityContext): void {// 这里将UIAbility中应用上下文的moduleName作用为实例名称,即该项目的applicationpreferences.getPreferences(context, context.abilityInfo.moduleName).then(preference => {this.preference = preferenceconsole.log('testTag', 'success~')}).catch(e => {console.log('testTag error', e)})}/*** 定义增加函数* @param key* @param value* @param expire*/put(key: string, value: valueType | object, expire?: Date): void {// 定义存储Json格式对象const data : dataType = {value,      // 存储内容expire : (expire ? expire.getTime() : -1)   // 如果失效时间存在,将其转换为时间戳,否则传入-1}let dataStr: string = '';try {dataStr = JSON.stringify(data)    // 当数据转换成功,将其存储console.log('testTag', dataStr)} catch (e) {console.log('testTag error', e)return}this.preference.put(key, dataStr).then(() => this.preference.flush()).catch(e => {console.log('testTag error', e)})}/*** 定义获取对应key数据* @param key*/async getValue(key: string): Promise<valueType | object> {// 首页判断key值是否存在,不存在返回空if(!this.preference.has(key)) {return Promise.resolve(null)}let value = (await this.preference.get(key, '')) as valueType// 判断如果为字符串类型数据,并且为JSON对象格式数据,将其转换为对象if('string' === typeof value && isJsonObject(value)) {try {const data: dataType = JSON.parse(value)console.log('testTag', data.expire, Date.now(), data.expire < Date.now())// 如果当前存储内容无时效性,或者在时效期内,都直接返回if(data.expire === -1 || data.expire > Date.now()) {return Promise.resolve(data.value)}// 如果已失效,将其信息删除else {this.preference.delete(key)}} catch (e) {console.log('testTag error', e)return Promise.resolve(null)      // 如果转换出错,返回null}}// 通过Promise异步回调将结果返回(如果内容不为JSON格式对象,或者过了时效期,返回null)return Promise.resolve(null)}/*** 更新数据* @param key* @param value*/async update(key: string, value: valueType){try {const preValue = await this.getValue(key)if(preValue != value) {this.put(key, value)}} catch (e) {console.log('testTag error', e)}}/*** 定义移除函数* @param key*/remove(key: string): void {this.preference.delete(key).then(() => this.preference.flush()).catch(e => {console.log('testTag error', e)})}/*** 定义清除所有数据函数*/clearAll(): void {this.preference.clear().then(() => this.preference.flush()).catch(e => {console.log('testTag error', e)})}
}
/*** 实例LocalStorage*/
const localStorage = new LocalStorage()/*** 导出localStorage单例对象*/
export default localStorage as LocalStorage

        功能参数说明 :

字段说明
initial初始化LocalStorage函数,在App打开时,需要将UIAbilityContext传入
put

该方法用于添加缓存数据,

key:缓存数据键名

value: 要缓存的数据

expire:需要缓存的时间(注意:是Date类型数据)

getValue通过key获取缓存的数据
update通过key更新被缓存的数据
remove通过key移除指定的缓存数据
clearAll清空该实例context下的所有缓存数据

3.4.2 UIAbility中初始化

        打开文件目录:src/main/ets/entryability/EntryAbility.ets,找到UIAbility中的onCreate函数,在其内部初始化。

        代码如下:

import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
import LocalStorage from '../utils/localStorage'export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);// 初始化LocalStorageLocalStorage.initial(this.context)hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');}// 略...
}

3.4.3 本地模拟器

        注意,本地缓存使用的是@ohos.data.preferences,必须在本地模拟器中才能生效;在“预览”中无法缓存,故登录后获取不到缓存数据,所以必须在模拟器中演示和操作。如下图的步骤,打开本地模拟器:

3.4.4 定义获取信息函数

        接下来,我们先在首页中,添加获取登录信息的方法;如果登录信息不存在,则跳转登录界面;如果存在,则显示登录信息。首页代码如下:

import LocalStorage from '../utils/localStorage';
import router from '@ohos.router';// 定义用户数据类型
interface userInfo {name: string,avatar: string
}@Entry
@Component
struct Index {@State bannerMessage: string = '';/*** 获取用户信息*/async getUserInfo(){const userInfo = await LocalStorage.getValue('userInfo') as userInfoconst accessToken = await LocalStorage.getValue('accessToken')console.log('tag', userInfo, accessToken)if (!userInfo || !accessToken) {router.pushUrl({url: 'pages/Login'})}this.bannerMessage = `userInfo: ${userInfo.name} accessToken:${accessToken}`;}build() {RelativeContainer() {Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center }){Text(this.bannerMessage)Button('登录令牌').onClick(() => {this.getUserInfo()})}.width('100%')}.height('100%').width('100%')}
}

        模拟器首页如下图:

        点击“登录令牌”,查看控制台输出结果为null,表示用户信息未获取到,故跳转至登录界面。

 3.4.5 缓存数据

        上述工作准备完成后,就可以将登录接口返回的响应数据,通过封装的LocalStorage功能来缓存起来了。

        在登录成功后,使用LocalStorage实例对象,将数据缓存一天。代码如下:

import { login } from '../api/login'
import router from '@ohos.router';
import { promptAction } from '@kit.ArkUI';
import LocalStorage from '../utils/localStorage'@Entry
@Component
struct Login {@State username: string = '';   // 用户名@State password: string = '';   // 密码/*** 显示信息* @param text*/showMsg(text: string = '') {promptAction.showToast({message: text,duration: 1500,alignment: Alignment.Center})}/*** 校验表单*/validateForm(){if (!this.username || !this.password) {this.showMsg('请输入用户名或名称')return;} else if (this.password.length < 6) {this.showMsg('密码不能小于6位')return;}console.log(this.username, this.password)// 校验通过,提交数据login({username: this.username,password: this.password}).then(res => {this.showMsg(res.msg)console.log('res', JSON.stringify(res.data))// code 为200时,跳转到指定界面if (res.code == 200) {const date = new Date()date.setDate(date.getDate() + 1)  // 从今天开始,往后缓存一天// 缓存数据LocalStorage.put('userInfo', res.data['userInfo'], date)LocalStorage.put('accessToken', res.data['accessToken'], date)// 跳转到首页setTimeout(() => {router.pushUrl({url: 'pages/Index'})}, 1200)}}).finally(() => {this.username = ''this.password = ''})//}build() {RelativeContainer() {Row({ space: 20 }){Column(){// 添加Logo图标Image($rawfile('logo.png')).width(80)// 添加标题Text('欢迎登录XXX平台').fontSize(20).fontWeight(FontWeight.Bold).padding({ top: 15, bottom: 15})// 表单输入框Column({ space: 20 }){TextInput({ placeholder: '请输入用户名/手机号', text: this.username }).onChange((val: string) => {this.username = val})TextInput({ placeholder: '请输入密码', text: this.password }).type(InputType.Password).onChange((val: string) => {this.password = val})}.padding({ top: 20, bottom: 80 })// 登录按钮Button('登 录', { type: ButtonType.Capsule }).width('100%').onClick(() => {// 校验表单this.validateForm()})// 添加 忘记密码 和 注册Row({ space: 20 }){Text('忘记密码?').fontColor('#1495E7')Text('注册').fontColor('#FF0000')}.width('100%').justifyContent(FlexAlign.End).padding({ top: 15, right: 10, bottom: 50})}.width('100%').height('100%').justifyContent(FlexAlign.Center)}.width('100%').padding(20)}.height('100%').width('100%')}
}

        当登录信息不存在时,跳转至登录界面,输入用户信息,完成登录操作。如下图:

        点击“登录”,查看控制台输出。LocalStorage缓存数据控制正常输出信息,表示缓存成功。如下图:

3.4.6 获取用户信息

        登录成功后,会自动跳转至首页,接下来我们重新获取用户信息,查看结果。如下图:

        当点击“登录令牌”,用户名称和访问令牌则成功获取到,并显示在界面上。

         这里,登录功能就讲完了,如果你有更好的方法,欢迎随时沟通交流!

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

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

相关文章

图解多头注意力机制:维度变化一镜到底

目录 一、多头注意力机制概述二、代码实现1. pyTorch 实现2. tensorFlow实现 三、维度变化全流程详解1. 参数设定2. 维度变化流程图3. 关键步骤维度变化 四、关键实现细节解析1. 多头拆分与合并2. 注意力分数计算3. 掩码处理技巧 五、完整运行示例六、总结与常见问题1. 核心优势…

2.8滑动窗口专题:最小覆盖子串

1. 题目链接 LeetCode 76. 最小覆盖子串 2. 题目描述 给定字符串 s 和 t&#xff0c;要求找到 s 中最小的窗口&#xff0c;使得该窗口包含 t 的所有字符&#xff08;包括出现次数&#xff09;。若不存在&#xff0c;返回空字符串。 示例&#xff1a; 输入&#xff1a;s &quo…

【数据分析大屏】基于Django+Vue汽车销售数据分析可视化大屏(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅

目录 一、项目背景 二、项目创新点 三、项目功能 四、开发技术介绍 五、项目功能展示 六、权威视频链接 一、项目背景 汽车行业数字化转型加速&#xff0c;销售数据多维分析需求激增。本项目针对传统报表系统交互性弱、实时性差等痛点&#xff0c;基于DjangoVue架构构建…

cyberstrikelab lab2

lab2 重生之我是渗透测试工程师&#xff0c;被公司派遣去测试某网络的安全性。你的目标是成功获取所有服务器的权限&#xff0c;以评估网络安全状况。 先扫一下 ​ ​ 192.168.10.10 ​ ​ 骑士cms 先找后台路径 http://192.168.10.10:808/index.php?madmin&cind…

在 Ubuntu 服务器上使用宝塔面板搭建博客

&#x1f4cc; 介绍 在本教程中&#xff0c;我们将介绍如何在 Ubuntu 服务器 上安装 宝塔面板&#xff0c;并使用 Nginx PHP MySQL 搭建一个博客&#xff08;如 WordPress&#xff09;。 主要步骤包括&#xff1a; 安装宝塔面板配置 Nginx PHP MySQL绑定域名与 SSL 证书…

【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Servlet 3.0 新特性:异步处理与注解配置

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、Servle…

使用 Homebrew 安装 OpenJDK 并配置环境变量

在 macOS 上使用 Homebrew 安装 OpenJDK 是一种简单而高效的方式。本文将使用 Homebrew 安装 OpenJDK&#xff0c;并设置环境变量以便 Java 能够正确运行。 1. 安装 Homebrew 首先&#xff0c;确保你的 macOS 系统已经安装了 Homebrew。如果没有安装&#xff0c;可以通过以下…

【C语言】编译和链接详解

hi&#xff0c;各位&#xff0c;让我们开启今日份博客~ 小编个人主页点这里~ 目录 一、翻译环境和运行环境1、翻译环境1.1预处理&#xff08;预编译&#xff09;1.2编译1.2.1词法分析1.2.2语法分析1.2.3语义分析 1.3汇编1.4链接 2.运行环境 一、翻译环境和运行环境 在ANSI C…

【AWS入门】AWS云计算简介

【AWS入门】AWS云计算简介 A Brief Introduction to AWS Cloud Computing By JacksonML 什么是云计算&#xff1f;云计算能干什么&#xff1f;我们如何利用云计算&#xff1f;云计算如何实现&#xff1f; 带着一系列问题&#xff0c;我将做一个普通布道者&#xff0c;引领广…

Flutter_学习记录_ ImagePicker拍照、录制视频、相册选择照片和视频、上传文件

插件地址&#xff1a;https://pub.dev/packages/image_picker 添加插件 添加配置 android无需配置开箱即用&#xff0c;ios还需要配置info.plist <key>NSPhotoLibraryUsageDescription</key> <string>应用需要访问相册读取文件</string> <key>N…

蓝桥与力扣刷题(蓝桥 星期计算)

题目&#xff1a;已知今天是星期六&#xff0c;请问 20^22 天后是星期几? 注意用数字 1 到 7 表示星期一到星期日。 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 解题思路&#xff0b;代码&#xff1a; 代码&#xff1…

向量数据库原理及选型

向量数据库 什么是向量什么是向量数据库原理应用场景 向量数据库的选型主流向量数据库介绍向量数据库对比主流向量数据库对比表 选型建议 什么是向量 向量是一组有序的数值&#xff0c;表示在多维空间中的位置或方向。向量通常用一个列或行的数字集合来表示&#xff0c;这些数…

以实现生产制造、科技研发、人居生活等一种或多种复合功能的智慧油站开源了

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用…

软考系统架构师 — 3 操作系统

目录 3.1 考点分析 3.1 操作系统概述 3.1.1 操作系统的功能 3.1.2 操作系统的分类 3.1.3 嵌入式操作系统主要特点 3.2 进程 3.2.1 进程的组成和状态 3.2.2 前趋图与进程资源图&#xff08;重点&#xff09; 3.2.3 进程同步与互斥 3.2.4 进程调度 3.2.5 死锁 3.3 线…

C++初阶——类和对象(三) 构造函数、析构函数

C初阶——类和对象&#xff08;三&#xff09; 上期内容&#xff0c;我们围绕类对象模型的大小计算&#xff0c;成员存储方式&#xff0c;this指针&#xff0c;以及C实现栈和C语言的比较&#xff0c;进一步认识了C的封装特性。本期内容&#xff0c;我们开始介绍类的默认成员函…

矩阵幂(矩阵k次幂)

矩阵幂 #include<stdio.h> //矩阵乘法 void cf(int a[20][20],int b[20][20],int result[20][20],int n){for(int i0;i<n;i){for(int j0;j<n;j){result[i][j]0;for(int k0;k<n;k){result[i][j]a[i][k]*b[k][j];}}} }void print(int a[20][20],int n){for(int…

自己动手打造AI Agent:基于DeepSeek-R1+websearch从零构建自己的Manus深度探索智能体AI-Research

第一章&#xff1a;AI Agent基础与DeepSeek-R1架构解析&#xff08;1/10&#xff09; 1.1 AI Agent技术演进与核心价值 人工智能代理&#xff08;AI Agent&#xff09;经历了从规则驱动到数据驱动的范式转移。早期基于专家系统的符号主义方法&#xff08;如MYCIN医疗诊断系统…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_13可展开行的固定表头表格

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_13可展开行的固…

Gemini Robotics:将人工智能带入物理世界

25年3月来自谷歌的技术报告“Gemini Robotics: Bringing AI into the Physical World”。 大型多模态模型的最新进展&#xff0c;已使数字领域出现卓越的通才能力&#xff0c;但将其转化为机器人等物理智体仍然是一项重大挑战。一般有用的机器人需要能够理解周围的物理世界&am…

生活中的可靠性小案例11:窗户把手断裂

窗户把手又断了&#xff0c;之前也断过一次&#xff0c;使用次数并没有特别多。上方的图是正常的把手状态&#xff0c;断的形状如下方图所示。 这种悬臂梁结构&#xff0c;没有一个良好的圆角过渡&#xff0c;导致应力集中。窗户的开关&#xff0c;对应的是把手的推拉&#xff…