HarmonyOS NEXT星河版零基础入门(3)

news2024/11/15 21:03:04

1. 系统弹出框

import { promptAction } from '@kit.ArkUI';
@Component
struct weChat {
  @State text:string =''
  build(){
        Column(){
          Text(this.text )
          Search({value:$$this.text})
          Button('改值').onClick(()=>{
        promptAction.showToast({
          message:this.text,duration:10000
        })
          })
        }

  }
}

message是弹出的内容  duration是控制弹出的时间

2.interface转成class类

 npm i -g interface2class

在IndexPage声明了两个interface

点击回车就自动生成了

3.vp/fp

不论是什么样的像素密度的设备,可呈现区域是一样的

fp---》字体大小

vp----->宽高大小

4.   写一个正方形  设置它的宽度 但不设定高度 不论屏幕怎么变实现他的宽高比

.aspectRatio(长/宽)

5.@State

state修饰的数据是响应式数据,他只能检测到单层的数据变化,如果要更新多层

  • 要么连带着更新单层
  • 要么重新new一个
  • 先声明interface,用工具生成class实现 interface2class
  • interface生命类型也是可以的 ,如果用到了嵌套更新,必须得用class

6.图片和资源

  • 本地路径

  • 线上路径

必须开启网络权限

  • svg着色-主题
  • 资源目录下-base/media(图片)(推荐)图片不需要跟后缀

  •   rawfile(原始文件)

7.淘宝镜像

 npm config get registry 
npm config set registry https://registry.npmirror.com/

7.1windows 脚本禁用(操作策略 允许npm包的命令可执行)

8. es6&ArkTS中的导入和导出

9.按钮切换组件 SegmentButton

10.waterFlow组件

它的用法和Grid布局很像

@Entry
@Component
struct WaterFlowPage {
  @State message: string = 'Hello water';

  build() {
    Column() {
         WaterFlow(){
           FlowItem(){
              Image('https://pic.rmb.bdstatic.com/bjh/gallery/03e17cba710868d9153176b50a5fca0d1090.jpeg').height(150)
                    }
           FlowItem(){
             Image('https://img1.baidu.com/it/u=1535232938,2370569369&fm=253&fmt=auto&app=120&f=JPEG?w=1280&h=800').height(200)
           }
           FlowItem(){
             Image('https://img1.baidu.com/it/u=1535232938,2370569369&fm=253&fmt=auto&app=120&f=JPEG?w=1280&h=800').height(200)
           }
}
.columnsTemplate('1fr 1fr ')
      .columnsGap(20)
      .padding(20)
      .rowsGap(20)
    }
    .height('100%')
    .width('100%')
  }
}

看下效果图

如果想要实现加载下一页 就得用到加载中

WaterFlow({footer:this.Loading})

和滚动到底部的事件 

onReachEnd

全部代码: 11.11.

import { GoodItem } from './modules'
import { promptAction } from '@kit.ArkUI'

@Entry
@Component
struct WaterFlowGoodPage {
  @State GoodList:GoodItem[]=[{

    goods_name:'dsfjlsjkfsf',
    goods_price:100,
    goods_img:'https://img1.baidu.com/it/u=1535232938,2370569369&fm=253&fmt=auto&app=120&f=JPEG?w=1280&h=800',
    goods_count:1,
    id:1

  },
    {

      goods_name:'dfhlsdjflkdsjklfs 加速度的佛教山東i附件',
      goods_price:200,
      goods_img:'https://img1.baidu.com/it/u=2603934083,3021636721&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500',
      goods_count:2,
      id:2

    },
    {

      goods_name:'收到回复技术大会哦恶化日发方大化工iu而韩国佛热',
      goods_price:300,
      goods_img:'https://img0.baidu.com/it/u=4289818793,3552718550&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500',
      goods_count:3,
      id:3

    }
    ,{

      goods_name:'的時間佛薩飛機埃里克森放假哦i二fore多氟多化工i額方法過後i額外人',
      goods_price:400,
      goods_img:'https://img0.baidu.com/it/u=2080725050,2021436341&fm=253&fmt=auto&app=138&f=JPEG?w=1200&h=800',
      goods_count:4,
      id:4

    }
    ,{

      goods_name:'时间佛ID分机构IE',
      goods_price:500,
      goods_img:'https://img1.baidu.com/it/u=4202924242,2178453218&fm=253&fmt=auto&app=120&f=JPEG?w=1422&h=800',
      goods_count:5,
      id:5

    }
    ,{

      goods_name:'司法鉴定哦is叫哦私人',
      goods_price:600,
      goods_img:'https://10wallpaper.com/wallpaper/1680x1050/1405/Lavender_mountain_river-Landscape_HD_Wallpaper_1680x1050.jpg',
      goods_count:6,
      id:6

    }
  ]

  //开启个阀门 意味着如果数据没有加载成功就不会继续加载
  @State isLoadding:boolean=false


   //加载中函数
  @Builder
  Loading(){
    Row(){
      Text(
        '加载中'
      )
      LoadingProgress()
        .width(20)

    }
    .width('100%')
    .justifyContent(FlexAlign.Center)
    .height(60)

  }

//加载下一页方法
  loadMore(){
    setTimeout(()=>{
      this.GoodList.push(...this.GoodList.slice(0,9))
     this.isLoadding=false

    },1000)
  }
  build() {
    Column(){
      WaterFlow({footer:this.Loading}){
        ForEach(this.GoodList,(item:GoodItem,index:number)=>{
          FlowItem(){
            Column({space:20}){
              Image(item.goods_img)
                .height(index%2?220:180)


              Text(item.goods_name)
                .fontSize(14)
            }
          }
        })

      }
      .onReachEnd(()=>{
        if(!this.isLoadding){
          this.isLoadding=true

          this.loadMore()

        }


      })
      .columnsTemplate('1fr 1fr')
      .columnsGap(20)
      .rowsGap(20)



    }
    .height('100%')
    .width('100%')
    .padding(20)
  }
}

11. async/await

模拟一个网络请求

12.Builder和BuilderParams的区别

13.常用的修饰符有哪些

14.CustomDialog的使用

@CustomDialog
struct PreviewDilog {
  controller: CustomDialogController = new CustomDialogController({ builder: CustomDialogController })
  url: ResourceStr | string = ''

  build() {
    Column() {
      Image(this.url)
        .width('100%')

    }
    .width('100%')
    .height('100%')
    .backgroundColor(Color.Black)
    .justifyContent(FlexAlign.Center)
    .onClick(() => {
      this.controller.close()
    })

  }
}

如果需要使用弹层 ,需要在使用的组件或者页面中显式的声明一个对象

  @State selectImage: ResourceStr | string = ''
  previw: CustomDialogController = new CustomDialogController({
    builder: PreviewDilog({ url: this.selectImage }),//这里需要传入自定义弹层的对象
    customStyle: true //是否使用自定义样式


  })

弹层就两个方法

  • open--创建弹层组件-显示-会有动画的弹出
     
  • close--销毁组件-退出-会有动画的退出

涉及到Dialog传值

因为open/close会创建和销毁组件,不会存在缓存现象,里边的参数实际上没有任何必要用修饰符

在父组件中调用打开

 GridItem() {
            Image(item.goods_img)
              .aspectRatio(1)
              .onClick(() => {
                this.selectImage = item.goods_img
                this.previw.open()
              })
          }

在本身组件中同样可以打开和关闭

15.sheet用法

  .bindSheet($$this.isShowPhotoCom, this.sheetBuilder, {
      showClose: false
    })

$$为什么在这里使用?

因为需要数据驱动视图,视图发生变化,他同样需要更新数据

视图内容

 @Builder
  sheetBuilder() {
    Column() {
      photoCom({
        List: this.List,
        isShowPhotoCom: this.isShowPhotoCom,
        maxSelectNum: this.maxSelectNum,
        showSelectImgs: this.showSelectImgs

      })

    }
  }

16.弹窗UI是怎么在页面中使用的

17.常用的修饰符有哪些  -介绍下

  • Entry -修饰页面
  • Component-修饰成为组件
  • Preview-让组件可预览
  • State-在组件内部定义响应式数据-必须给初始值
  • Prop-接收父组件的响应式数据-可给也可不给初始值
  • Builder-声明轻量复用UI
  • BuilderParam-接收传入的轻量复用UI-必须给初始值
  • CustomDialog-修饰自定义弹层
  • Styles-修饰样式复用集合-不允许传参数
  • Extend-修饰某个特定组件包的样式复用集合-允许传参数
  • Link-可以实现父-子的双向绑定-注意:$$指的是组件内的双向绑定,$$同样可以实现和Link绑定-不允许给初始值

新增-API11

  • Requir-可以约束Prop和BuilderParam的参数为必须传递

  • Track-用来标记一个对象中的哪些字段可以被更新和使用-如果一个Track都没有,那无所谓,只要有一个Track,只有被Track标记的字段才可以使用
  • ObjectLink-它可以实现局部的数据更新-但是必须和Observed修饰的class配合使用,不能再Entry修饰的组件中使用ObjectLink,场景是子组件想要局部组件更新
  • LocalStorageProp-单向读取LocalStorage共享的属性(必须给初始值)
  • LocalStorageLink -双向读取LocalStorage共享的属性 (必须给初始值)

18.watch状态监听器

19.组件通信的方式有哪些?

20.Next新增修饰符

1.Require修饰符

2.Track修饰符

21.鸿蒙的刷新机制是怎么样的,多层嵌套时,是从build开始刷新吗?

22.全局存储状态有哪些方式?

1.UIAbility内状态-LocalStorage

1.1

代码实现

1.首先定义:

2.

1.2在页面中传入

UIAbility中

页面引入:重点代码

let local = LocalStorage.getShared()

@Entry(local)

 全部代码:

import { Car } from '../../entryability/EntryAbility';

let local = LocalStorage.getShared()

@Entry(local)
@Component
struct LocalStoragePage {
  @State message: string = 'Hello World11';
  @LocalStorageLink('car')
  car: Car = new Car()

  build() {
    RelativeContainer() {
      Text(this.car.title)
        .id('LocalStoragePageHelloWorld')
        .fontSize(50)
      
    }
    .height('100%')
    .width('100%')
  }
}

注意:测试全局分享LocalStorage时需要使用模拟器  Preview不支持

2.应用状态-AppStorage(需要模拟器)

代码 

存入

import { router } from '@kit.ArkUI';

@Entry
@Component
struct AppStroragePage {
  @State message: string = 'Hello World';

  build() {
    Column() {
      Button('AppStrorage存入')
        .onClick(() => {
          AppStorage.setOrCreate<InfoModel>('userInfo', new InfoModel({ name: '小孩', age: 18 }))
          router.pushUrl({
            url: 'pages/09/AppMainPage'
          })
        })
    }
    .height('100%')
    .width('100%')
  }
}

export interface Info {
  name: string,
  age: number
}

export class InfoModel implements Info {
  name: string = ''
  age: number = 0

  constructor(model: Info) {
    this.name = model.name
    this.age = model.age
  }
}
2.1获取
import { Info, InfoModel } from './AppStroragePage';

@Entry
@Component
struct AppMainPage {
  @State message: string = 'Hello World';
  @StorageLink('userInfo')
  userInfo: InfoModel = new InfoModel({} as Info)

  build() {
    RelativeContainer() {
      Text(this.userInfo.name)
        .id('AppMainPageHelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
    }
    .height('100%')
    .width('100%')
  }
}
2.2还有第二种获取方式
import { Info, InfoModel } from './AppStroragePage';
import { router } from '@kit.ArkUI';

@Entry
@Component
struct AppMainPage {
  @State message: string = 'Hello World';
  // @StorageLink('userInfo')
  // userInfo: InfoModel = new InfoModel({} as Info)
   userInfo: InfoModel = new InfoModel({} as Info)

  aboutToAppear(): void {
    let obj = AppStorage.get<InfoModel>('userInfo')
    if (obj) {
      this.userInfo = obj
    }

  }

  build() {
    Column() {
      Text(this.userInfo.name)
        .id('AppMainPageHelloWorld')
        .fontSize(50)
       
      Button('退出')
        .onClick(() => {
          AppStorage.set('userInfo', new InfoModel({} as Info))
          router.back()
        })
    }
    .height('100%')
    .width('100%')
  }
}

重点代码部分截图

获取的两种方式

还有一种set方法

3.状态持久化-PersistenStorage

注意:如果使用了持久化,那么AppStorage读取出来的对象实际上是个json字符串

   如果没有持久化,那么读取出来的对象就是对象

重点代码截图:

代码:

import { router } from '@kit.ArkUI';

PersistentStorage.persistProp('huawei', '1000')

@Entry
@Component
struct PersistenStoragePage {
  @State message: string = 'Hello World';
  @StorageProp('huawei')
  huawei: string = ''

  build() {
    Column() {
      Text(this.huawei)
        .id('PersistenStoragePageHelloWorld')
        .fontSize(50)
      
      Button('登录').onClick(() => {
        router.pushUrl({
          url: 'pages/09/PerMainPage'
        })
      })
    }
    .height('100%')
    .width('100%')
  }
}
@Entry
@Component
struct PerMainPage {
  @State message: string = 'Hello World';
  @StorageLink('huawei')
  money: string = '李四'

  build() {
    Column() {

      TextInput({ text: $$this.money })
      Text(this.money)
      Text('fdjgkdj')
    }
    .height('100%')
    .width('100%')
  }
}

PersistenStorage虽说是存在磁盘里  但是在entryAbility中访问不到  所以不能根据他去调用不同的页面(比如:登录页和主页  因在entryAbility中控制入口页面  一般都是登录页  但因每次都获取不到PersistenStorage的值 所以每次都会进入登录页)

4.首选项

写一个首选项

import { preferences } from '@kit.ArkData'
import { Context } from '@kit.AbilityKit'

export class TonkenManager {
  // 获取仓库
  static async getStore(context?: Context) {
    return await preferences.getPreferences(getContext() || context, 'token_store')
  }

  // 写入数据
  static async setToken(token: string, context?: Context) {
    const store = await TonkenManager.getStore(context)
    store.putSync('my_token', token) //同步写入内容
    // 写入磁盘
    await store.flush()
  }

  // 写入数据
  static async getToken(context?: Context) {
    const store = await TonkenManager.getStore(context)

    return store.getSync('my_token', '') as string

  }
}

在登录页 存入一个数据

然后再bility模块获取

看下完整代码吧

登录页代码

import { router } from '@kit.ArkUI';
import { TonkenManager } from './uitils/token';

// PersistentStorage.persistProp('huawei', '1000')

@Entry
@Component
struct PersistenStoragePage {
  @State message: string = 'Hello World';
  @StorageProp('huawei')
  huawei: string = ''

  build() {
    Column() {
      Text(this.huawei)
        .id('PersistenStoragePageHelloWorld')
        .fontSize(50)

      Button('登录').onClick(() => {
        TonkenManager.setToken('123456')
        router.pushUrl({
          url: 'pages/09/PerMainPage'
        })
      })
    }
    .height('100%')
    .width('100%')
  }
}

Ability代码:

  async onWindowStageCreate(windowStage: window.WindowStage): Promise<void> {
    // Main window is created, set main page for this ability
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');

    if (await TonkenManager.getToken(this.context)) {

      windowStage.loadContent('pages/09/PerMainPage', local, (err) => {
        if (err.code) {
          hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
          return;
        }
        hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
      });

    } else {
      windowStage.loadContent('pages/09/persistenStoragePage', local, (err) => {
        if (err.code) {
          hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
          return;
        }
        hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
      });
    }


  }

23.HTTP用法、

1.原生用法

hormony原生用法返回的值是字符串类型(取得是res.result)

  aboutToAppear(): void {
    console.log('aboutToAppear')

    this.sendHttp()
  }

  async sendHttp() {
    const req = http.createHttp()
    const res =
      await req.request('https://jsonplaceholder.typicode.com/posts')

    AlertDialog.show({ message: res.result as string })
    req.destroy()

  }  }

2.第三方库 axios

axios用法返回的值是object类型(取得是res.data)

 ohpm install @ohos/axios
 Button('获取数据').onClick(() => {
        this.testaxios()
      })

  async testaxios() {
 // axios的泛型的第二个参数是声明返回数据的类型的结构
    let res = await axios.get<object, AxiosResponse<object, null>>('https://jsonplaceholder.typicode.com/posts')
    AlertDialog.show({ message: JSON.stringify(res.data) })
  }

24.进程 线程 

进程通信

1.进程

进程通信

2.线程

TaskPool多线程代码:
import { taskpool } from '@kit.ArkTS';

@Entry
@Component
struct TaskpoolPage {
  @State message: string = 'Hello World';

  // 开启多线程方法
  beginTaskPool() {
    taskpool.execute(getData)
    taskpool.execute(addData)
  }

  build() {
    Column() {
      Button('开启多线程')
        .onClick(() => {
          // 调用开启多线程方法
          this.beginTaskPool()
        })

    }
    .height('100%')
    .width('100%')
  }
}

// 第一个线程方法
@Concurrent
function getData() {
  for (let index = 0; index < 10000; index++) {
    console.log('任务1', index)

  }
}

// 第二个线程方法
@Concurrent
function addData() {
  for (let index = 10000; index > 0; index--) {
    console.log('任务2', index)

  }
}

然后看下控制台

Worker进程代码:

先新建个worker

然后建一个worker页面

import worker, { MessageEvents } from '@ohos.worker';

@Entry
@Component
struct WorkCasePage {
  @State message: string = 'Hello World';

  build() {
    Column() {
      Button('worker开启多线程')
        .onClick(() => {
          let w = new worker.ThreadWorker('entry/ets/workers/Worker')
          w.postMessage('我是测试woker页面')
          w.onmessage = (e: MessageEvents) => {
            console.log(e.data, 'worker页面接收到了')
            w.terminate() //自毁线程
          }
        })


    }
    .height('100%')
    .width('100%')
  }
}

woker页面里边的代码

import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS';

const workerPort: ThreadWorkerGlobalScope = worker.workerPort;

/**
 * Defines the event handler to be called when the worker thread receives a message sent by the host thread.
 * The event handler is executed in the worker thread.
 *
 * @param e message data
 */
workerPort.onmessage = (e: MessageEvents) => {
  console.log(e.data, 'worker页面收到')
  for (let index = 0; index < 10000; index++) {
    console.log(index.toString(), '多线程执行')

  }
  workerPort.postMessage('我已经干完活了')

}

/**
 * Defines the event handler to be called when the worker receives a message that cannot be deserialized.
 * The event handler is executed in the worker thread.
 *
 * @param e message data
 */
workerPort.onmessageerror = (e: MessageEvents) => {
}

/**
 * Defines the event handler to be called when an exception occurs during worker execution.
 * The event handler is executed in the worker thread.
 *
 * @param e error message
 */
workerPort.onerror = (e: ErrorEvent) => {
}

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

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

相关文章

什么是DevUI?

DevUI是面向企业中后台产品的开源前端解决方案&#xff0c;其设计价值观基于"高效、开放、可信、乐趣"四种自然与人文相结合的理念&#xff0c;旨在为设计师、前端开发者提供标准的设计体系&#xff0c;并满足各类落地场景&#xff0c;是一款企业级开箱即用的产品。 …

Pikachu-XSS漏洞之cookie值获取、钓鱼结果和键盘记录实战记录

目录 Pikachu-XSS漏洞之cookie值获取、钓鱼结果和键盘记录实战记录 一、XSS&#xff08;get型&#xff09;之cookie值获取&#xff1a; 二、xss&#xff08;post型&#xff09;之cookie值获取 三、Xss之钓鱼攻击 四、XSS获取键盘记 Pikachu-XSS漏洞之cookie值获取、钓鱼结果…

RabbitMQ消息队列:概念、单节点和集群示例

目录 消息队列 概念 主流的消息队列 消息队列名词 &#xff08;1&#xff09;Broker &#xff08;2&#xff09;Topic &#xff08;3&#xff09;Producer &#xff08;4&#xff09;Consumer &#xff08;5&#xff09;Queue &#xff08;6&#xff09;Message 消息…

【C++二分查找】1011. 在 D 天内送达包裹的能力

本文涉及的基础知识点 C二分查找 LeetCode1011. 在 D 天内送达包裹的能力 传送带上的包裹必须在 days 天内从一个港口运送到另一个港口。 传送带上的第 i 个包裹的重量为 weights[i]。每一天&#xff0c;我们都会按给出重量&#xff08;weights&#xff09;的顺序往传送带上…

MVC与三层架构分层

1. 应用分层 应用分层类似公司的组织架构。我们进行项目开发时&#xff0c;最开始功能简单&#xff0c;前后端放在一起开发&#xff0c;但随着项目功能的复杂&#xff0c;项目会被前端和后端不同的团队接手&#xff0c;甚至更细粒度的团队。甚至后端开发也会根据功能再进行细分…

把VTK窗口嵌入到Qt的窗口中显示(二)

把VTK窗口嵌入到Qt的窗口中显示(二) 一、控件拖动 之前的文章介绍了,如何通过拖动一个控件,然后提升这个控件为QVTKWidget,然后来显示点云信息。 把VTK窗口嵌入到Qt的窗口中显示(一) 其实我们还可以直接通过代码来实现。我们打开QVTKWidget的代码可以看到,这个类就…

函数序列的逐点收敛和一致收敛的理解

目录 1. 逐点收敛(Pointwise Convergence) 1.1 逐点收敛定义 1.2 对逐点收敛的理解 1.3 举例说明 2. 一致收敛(Uniform Convergence) 2.1 一致收敛定义 2.2 对一致收敛的理解 2.3 举例说明 1. 逐点收敛(Pointwise Convergence) 1.1 逐点收敛定义 我们令 为…

无人机里的陀螺仪/加速器/气压计/GPS详解

陀螺仪 是一种用于测量和控制无人机姿态的重要传感器。它通过检测无人机的旋转运动来提供准确的方向和角度信息。 加速度计 用于提供无人机在XYZ三轴方向所承受的加速力。它也能决定无人机在静止状态时的倾斜角度。 气压计 通过测量大气压力来估算无人机的高度。随着高度的…

疫情隔离酒店管理系统的开发--论文pf

TOC springboot395疫情隔离酒店管理系统的开发--论文pf 绪 论 1.1研究背景与意义 当前&#xff0c;我国的常态化防控正处于迅速发展阶段&#xff0c;管理人员与疫情防控进一步标准化&#xff0c;需各酒店等生活服务场所加强管理&#xff0c;使用健全的信息系统对防控工作进…

Windows环境在使用Pycharm设置Python解译器时提示找不到Python打包工具,安装打包工具错误提示解决方法

问题现像如下 截图&#xff1a; 解决方法&#xff1a; 第一步&#xff1a;在CMD命令行输入&#xff1a; python -m ensurepip --default-pip 安装distutils 第二步&#xff1a;检查和安装setuptools和wheel&#xff1a; python -m pip install --upgrade setuptools wheel…

如何搭建软件测试环境?

关于如何搭建测试环境&#xff0c;也是面试会经常问到的一个问题&#xff0c;一般常见于一些创业公司&#xff0c;因为测试环境不够完善&#xff0c;可能会遇到搭建环境这个问题。 一般来说&#xff0c;测试环境搭建都属于运维的工作范畴&#xff0c;但是可能有些创业公司就没有…

日拱一卒(5)——leetcode学习记录:路经总和

一、任务 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的…

【秋招笔试】8.17饿了么秋招第一场-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

Unity图形系统

Unity的图形系统是一个复杂且功能强大的模块&#xff0c;它支持多种渲染技术和API&#xff0c;能够满足从移动设备到高端游戏机和桌面平台的各种需求。以下是关于Unity图形系统的详细解析&#xff1a; 渲染流程与技术 Unity的渲染流程可以分为应用程序阶段&#xff08;CPU&…

公开测评:文件防泄密系统哪家好|4款文件防泄密软件推荐

在文件防泄密系统领域&#xff0c;有多款软件以其高效、安全和全面的功能脱颖而出&#xff0c;为企业数据保护提供了有力支持。以下是四款值得推荐的文件防泄密软件&#xff0c;它们各具特色&#xff0c;能够满足不同企业的数据安全需求。 1. 安企神软件 7天试用版https://wor…

Ubuntu | 更换 Geth 版本

参考博客&#xff1a;VMware 虚拟机下 Ubuntu 中 geth 和 truffle 更换版本解决 写在前面&#xff1a;我按照参考博客的方法添加了环境变量&#xff0c;但是报错 geth 命令不存在&#xff0c;因此我换了一种方法。 重新安装 1.10.8-stable 版本的 Geth ① 移除当前已经安装的…

Nginx核心配置详解

一、配置文件说明 nginx官方帮助文档&#xff1a;nginx documentation nginx的配置文件的组成部分&#xff1a; 主配置文件&#xff1a;nginx.conf子配置文件: include conf.d/*.conffastcgi&#xff0c; uwsgi&#xff0c;scgi 等协议相关的配置文件mime.types&#xff1a;…

无人机之螺旋桨篇

一、工作原理 根据牛顿第三定律&#xff0c;无人机受到向上的力&#xff0c;这是因为桨叶对空气施加了一个向上的力。螺旋桨产生的升力是指使飞机或无人机升空的力量。升力的大小取决于机翼或螺旋桨的倾斜角度。当空气流过机翼或螺旋桨时&#xff0c;其速度在顶部增加&#xff…

计算机毕业设计 学生就业信息系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

计算数学精解【14】-Maxima计算精解【2】

文章目录 基础符号计算 参考文献 基础 符号计算 分数&#xff08;有理数&#xff09;基本运算 无理数 小数及位数 bfloat提供任意精度实数,fpprec控制小数位数 代数展开 ratsimp完成通分 因式分解 参考文献 1.《Maxima在线性代数的应用》 2. https://maxima.sourcefor…