1作者: labubutoto8 个月前原帖
我设计了一个能够承受严重压力的API端点——它就是不会崩溃。 <p>端点: http://60.30.55.101:8888/prod-api/activite/task/startProcessFromServer2 方法:POST 请求体: <p>json 复制 编辑 { "bizUsername": "153二管轮" } 无需身份验证。 没有限流。 没有验证码。 纯粹的后端工程。 <p>我用以下工具对这个端点进行了压力测试: <p>JMeter <p>Apache Bench <p>并行的curl洪水攻击 <p>Postman运行器 <p>格式错误的负载 <p>持久的多线程循环 <p>结果? 没有5xx错误 没有减速 没有崩溃 即使在数千个并发请求下,响应时间也保持一致 <p>原始HTTP请求示例: <p>bash 复制 编辑 POST /prod-api/activite/task/startProcessFromServer2 HTTP/1.1 Host: 60.30.55.101:8888 Content-Type: application/json Content-Length: 31 <p>{ "bizUsername": "153二管轮" } 我希望大家可以随意测试——模拟负载、打破协议规则、进行洪水攻击——无论你们的工具或脚本能做什么。如果它崩溃了,我会感到惊讶(并且印象深刻)。 <p>让我们看看这个东西能走多远。
2作者: MongooseStudios8 个月前原帖
我是一个自学成才的开发者,努力工作多年,忍受了多家公司的“我们内部晋升”的谎言,终于得到了写代码的报酬。 自从去年11月被裁员以来,我一直在找工作,现在对此感到厌倦。每个人都在寻找拥有X年Y框架经验的“独角兽”,如果你没有完全符合的条件,就不必申请。与此同时,FAANG、微软和英特尔却不断发放裁员通知。 我仍然热爱编程,自从被裁员以来,我大部分时间都在忙于构建项目,除了“求职申请和存在主义的恐惧”之外。但想到要为另一家由无能的高管管理的公司工作,他们想把AI强行融入一切,或者又要经历一次人力资源部的贝基(她的技术技能有时只是使用Excel)问我“你为什么想在这里工作”的面试,我就感到恶心。 我开始告诉那些会议数量异常多、招聘流程繁琐以及单向视频面试的公司我不感兴趣。我发现自己对几乎任何事情都感到兴奋,只要不是在某个公司经历又一次的规划周,而这个公司还信誓旦旦地说他们在“做敏捷”。 我对公司决定将我们抛弃、将我们的工作外包给他们能找到的最便宜的国家,或者随便选择一家本周提供最好免费蜡笔的AI公司感到愤怒。我对越来越多公司推行的强制回办公室政策感到愤怒,因为他们的管理者工作糟糕,无法理解如何用Slack消息替代面对面的打扰。我感到愤怒,同时也感到疲惫。 还有其他人有这样的感觉吗?
1作者: flfljh8 个月前原帖
# HarmonyOS Flutter HAP包编译中的常见问题 ## 1. 配置别名以简化构建命令 将以下别名添加到您的环境变量中,以便于开发: *Windows*(通过 Git Bash): 在文件资源管理器中右键点击 → <i>Git Bash Here</i> *Linux/Mac*:编辑 `~/.bash_profile`,并通过 `source ~/.bash_profile` 将其添加到 `~/.zshrc`。 ``` # 可选 --local-engine 用于自定义引擎构建(推荐在 Linux/Mac 上使用) export ENGINE_DIR=~/ohos/engine export ENGINE_DEBUG=$ENGINE_DIR/src/out/ohos_debug_unopt_arm64 export ENGINE_PROFILE=$ENGINE_DIR/src/out/ohos_profile_arm64 export ENGINE_RELEASE=$ENGINE_DIR/src/out/ohos_release_arm64 # 构建别名 alias fbuildD="flutter build hap --local-engine=$ENGINE_DEBUG --debug" alias fbuildP="flutter build hap --local-engine=$ENGINE_PROFILE --profile" alias fbuildR="flutter build hap --local-engine=$ENGINE_RELEASE --release" # 运行别名 alias frunD="flutter run -d $(hdc list targets) --local-engine=$ENGINE_DEBUG --debug" alias frunP="flutter run -d $(hdc list targets) --local-engine=$ENGINE_PROFILE --profile" alias frunR="flutter run -d $(hdc list targets) --local-engine=$ENGINE_RELEASE --release" ``` *使用示例*: ``` flutter create hello --platforms ohos cd hello fbuildD # 构建调试版本 frunD # 运行调试版本 ``` ------ ## 2. 安装后出现白屏 *错误日志*: ``` 原因:信号:SIGSEGV(SEGV_MAPERR)@0x00000086e3272bf8 最后致命消息:线程:547846269584[致命:flutter/runtime/dart_vm_initializer.cc] 初始化 Dart VM 时出错: 快照版本错误,预期为 '8af474944053df1f0a3be6e6165fa7cf' 找到 'adb4292f3ec25074ca70abcd2d5c7251' ``` *原因*:引擎构建模式不匹配(例如,使用调试引擎构建发布版本) *解决方案*:将引擎模式与构建标志匹配: ``` flutter run -d --debug # 调试模式 flutter run -d --release # 发布模式 flutter run -d --profile # 配置模式 ``` ------ ## 3. 插件结构兼容性错误 *错误日志*: ``` 糟糕;flutter 意外退出: “类型 'Null' 不是类型 'List<dynamic>' 的子类型”。 ``` *解决方案*:将 Flutter 更新到最新的主分支/开发分支(提交 45bd5e627e1 或更新版本) ------ ## 4. `flutter pub get` 时的依赖冲突 *错误日志*: ``` 因为 flutter_cache_manager >=3.0.0-nullsafety.0 <3.3.2 依赖于 path_provider... 版本解决失败。pub get 失败... 退出代码:1 ``` *解决方案*:在 `pubspec.yaml` 中添加依赖覆盖: ``` dependency_overrides: path_provider: git: url: https://gitee.com/openharmony-sig/flutter_packages.git path: packages/path_provider/path_provider path_provider_ohos: git: url: https://gitee.com/openharmony-sig/flutter_packages.git path: packages/path_provider/path_provider_ohos ``` ------ ## 5. 未接受的 SDK 许可协议 *错误日志*: ``` hvigor 安装成功。 > hvigor 错误:原因:未接受 SDK 许可协议。 ``` *原因*:项目使用 API 12 SDK,但项目结构为 API 11 *解决方案*: 1. 在 DevEco Studio 中:<i>迁移助手 → 5.0.0 → 迁移</i> 2. <i>文件 → 项目结构 → 兼容 SDK → 5.0.0(12)</i> ------ ## 6. app.json 中版本重置 *问题*:在执行 `flutter build hap --release` 后,app.json 中的 `versionName` 重置为 1.0.0 *解决方案*:在构建命令中明确指定版本: ``` flutter build hap --build-name=4.0.3 --build-number=10000 ```
1作者: flfljh8 个月前原帖
# 在 HarmonyOS 服务小部件中访问应用数据 ### (1) 创建服务小部件 在创建基于 ArkTS 的小部件后,项目将生成以下与小部件相关的文件: - 小部件生命周期管理文件 (`EntryFormAbility.ets`) - 小部件 UI 文件 (`WidgetCard.ets`) - 小部件配置文件 (`form_config.json`) ### (2) 配置 module.json5 字段参考文档: ``` "extensionAbilities": [ { "name": "EntryFormAbility", "srcEntry": "./ets/entryformability/EntryFormAbility.ets", "label": "$string:EntryFormAbility_label", "description": "$string:EntryFormAbility_desc", "type": "form", "metadata": [ { "name": "ohos.extension.form", "resource": "$profile:form_config" } ] } ] ``` ### (3) 小部件特定配置 配置位于 `resources/base/profile/form_config.json`。 字段参考文档: ### (4) UI 开发和参数处理 小部件 UI 代码位于 `ets/widget/`。参数接收逻辑: ``` let storageUpdateByMsg = new LocalStorage(); @Entry(storageUpdateByMsg) @Component struct WidgetCard { @LocalStorageProp('diffExamDay') diffExamDay: number = -1; } ``` ### (5) 小部件生命周期和数据传递 - 在 `EntryFormAbility.onAddForm` 中的初始化逻辑(例如,将小部件 ID 传递给 WidgetCard) - 在 `onUpdateForm` 钩子中处理更新 ### (6) 在小部件初始化期间访问应用数据 #### 6.1 通知应用更新小部件数据 ``` postCardAction(this, { action: "call", abilityName: "EntryAbility", params: { method: "upDiffExamDay", formId: this.formId, }, }); ``` *时序问题解决方案:* 监控 `formId` 的变化,而不是使用 `aboutToAppear()`: ``` @LocalStorageProp('formId') @Watch('updateFormId') formId:string = ''; updateFormId() { postCardAction(this, { action: 'call', abilityName: 'EntryAbility', params: { method: 'upDiffExamDay', formId: this.formId } }); } ``` #### 6.2 应用端数据处理 在 `EntryAbility.onCreate` 中: ``` onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { this.callee.on('upDiffExamDay', upDiffExamDayCall); } const upDiffExamDayCall = (data: rpc.MessageSequence): MyParcelable => { let params: Record<string, string> = JSON.parse(data.readString()); if (params.formId) { PreferencesUtil.putSync('formId', params.formId); const diffExamDay = UserCacheManager.getDiffExamDay(); diffExamDay === -1 ? getHomePageData(params.formId) // 如果数据不可用则获取数据 : Utils.updateDiffExamDay(params.formId); // 直接更新小部件 } return new MyParcelable(1, 'success'); }; ``` *更新小部件数据:* ``` // 导入所需模块 import { formBindingData, formProvider } from '@kit.FormKit'; updateDiffExamDay(formId: string) { const diffExamDay = UserCacheManager.getDiffExamDay(); let formMsg = formBindingData.createFormBindingData({ 'diffExamDay': diffExamDay }); formProvider.updateForm(formId, formMsg) .then(() => console.log('更新成功')) .catch((error) => console.error('更新失败:', error)); } ```