Anrdoir 13 关于设置静态IP后,突然断电,在上电开机卡动画
bug描述:设置静态IP成功后,机器突然断电,然后在上电开机,发现机器一直卡在开机动画,无法成功进入桌面
第一时间抓取日志分析,Log如下:
08-13 11:26:42.455 2803 2803 I EthernetServiceImpl: Starting Ethernet service
08-13 11:26:42.457 2803 2924 D ConnectivityService: Got NetworkProvider Messenger for EthernetNetworkFactory
08-13 11:26:42.458 2803 2803 E IpConfigStore: Bad version on IP configuration file, ignore read
08-13 11:26:42.460 2803 2803 V SystemServerTiming: OnBootPhase_500_com.android.server.ConnectivityServiceInitializer took to complete: 5ms
08-13 11:26:42.460 2803 2803 E System : ******************************************
08-13 11:26:42.461 2803 2803 E System : ************ Failure starting system services
08-13 11:26:42.461 2803 2803 E System : java.lang.RuntimeException: Failed to boot service com.android.server.ConnectivityServiceInitializer: onBootPhase threw an exception during phase 500
08-13 11:26:42.461 2803 2803 E System : at com.android.server.SystemServiceManager.startBootPhase(SystemServiceManager.java:297)
08-13 11:26:42.461 2803 2803 E System : at com.android.server.SystemServer.startOtherServices(SystemServer.java:2694)
08-13 11:26:42.461 2803 2803 E System : at com.android.server.SystemServer.run(SystemServer.java:939)
08-13 11:26:42.461 2803 2803 E System : at com.android.server.SystemServer.main(SystemServer.java:649)
08-13 11:26:42.461 2803 2803 E System : at java.lang.reflect.Method.invoke(Native Method)
08-13 11:26:42.461 2803 2803 E System : at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
08-13 11:26:42.461 2803 2803 E System : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:914)
08-13 11:26:42.461 2803 2803 E System : Caused by: java.lang.NullPointerException: Attempt to read from field 'int android.util.ArrayMap.mSize' on a null object reference in method 'void android.util.ArrayMap.putAll(android.util.ArrayMap)'
08-13 11:26:42.461 2803 2803 E System : at android.util.ArrayMap.putAll(ArrayMap.java:705)
08-13 11:26:42.461 2803 2803 E System : at com.android.server.ethernet.EthernetConfigStore.loadConfigFileLocked(EthernetConfigStore.java:112)
08-13 11:26:42.461 2803 2803 E System : at com.android.server.ethernet.EthernetConfigStore.read(EthernetConfigStore.java:95)
08-13 11:26:42.461 2803 2803 E System : at com.android.server.ethernet.EthernetConfigStore.read(EthernetConfigStore.java:87)
08-13 11:26:42.461 2803 2803 E System : at com.android.server.ethernet.EthernetTracker.start(EthernetTracker.java:184)
08-13 11:26:42.461 2803 2803 E System : at com.android.server.ethernet.EthernetServiceImpl.start(EthernetServiceImpl.java:102)
08-13 11:26:42.461 2803 2803 E System : at com.android.server.ConnectivityServiceInitializer.onBootPhase(ConnectivityServiceInitializer.java:97)
08-13 11:26:42.461 2803 2803 E System : at com.android.server.SystemServiceManager.startBootPhase(SystemServiceManager.java:294)
08-13 11:26:42.461 2803 2803 E System : ... 6 more
08-13 11:26:42.462 2803 2803 V SystemServerTiming: OnBootPhase_500 took to complete: 660ms
08-13 11:26:42.463 2803 2803 E Zygote : System zygote died with fatal exception
08-13 11:26:42.463 2803 2803 E Zygote : java.lang.RuntimeException: Failed to boot service com.android.server.ConnectivityServiceInitializer: onBootPhase threw an exception during phase 500
08-13 11:26:42.463 2803 2803 E Zygote : at com.android.server.SystemServiceManager.startBootPhase(SystemServiceManager.java:297)
08-13 11:26:42.463 2803 2803 E Zygote : at com.android.server.SystemServer.startOtherServices(SystemServer.java:2694)
08-13 11:26:42.463 2803 2803 E Zygote : at com.android.server.SystemServer.run(SystemServer.java:939)
08-13 11:26:42.463 2803 2803 E Zygote : at com.android.server.SystemServer.main(SystemServer.java:649)
08-13 11:26:42.463 2803 2803 E Zygote : at java.lang.reflect.Method.invoke(Native Method)
08-13 11:26:42.463 2803 2803 E Zygote : at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
08-13 11:26:42.463 2803 2803 E Zygote : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:914)
08-13 11:26:42.463 2803 2803 E Zygote : Caused by: java.lang.NullPointerException: Attempt to read from field 'int android.util.ArrayMap.mSize' on a null object reference in method 'void android.util.ArrayMap.putAll(android.util.ArrayMap)'
08-13 11:26:42.463 2803 2803 E Zygote : at android.util.ArrayMap.putAll(ArrayMap.java:705)
08-13 11:26:42.463 2803 2803 E Zygote : at com.android.server.ethernet.EthernetConfigStore.loadConfigFileLocked(EthernetConfigStore.java:112)
08-13 11:26:42.463 2803 2803 E Zygote : at com.android.server.ethernet.EthernetConfigStore.read(EthernetConfigStore.java:95)
08-13 11:26:42.463 2803 2803 E Zygote : at com.android.server.ethernet.EthernetConfigStore.read(EthernetConfigStore.java:87)
08-13 11:26:42.463 2803 2803 E Zygote : at com.android.server.ethernet.EthernetTracker.start(EthernetTracker.java:184)
08-13 11:26:42.463 2803 2803 E Zygote : at com.android.server.ethernet.EthernetServiceImpl.start(EthernetServiceImpl.java:102)
08-13 11:26:42.463 2803 2803 E Zygote : at com.android.server.ConnectivityServiceInitializer.onBootPhase(ConnectivityServiceInitializer.java:97)
08-13 11:26:42.463 2803 2803 E Zygote : at com.android.server.SystemServiceManager.startBootPhase(SystemServiceManager.java:294)
08-13 11:26:42.463 2803 2803 E Zygote : ... 6 more
08-13 11:26:42.463 2803 2803 D AndroidRuntime: Shutting down VM
08-13 11:26:42.477 2803 2916 D WifiConfigStore: Reading from all stores completed in 45 ms.
08-13 11:26:42.478 2803 2803 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: main
08-13 11:26:42.478 2803 2803 E AndroidRuntime: java.lang.RuntimeException: Failed to boot service com.android.server.ConnectivityServiceInitializer: onBootPhase threw an exception during phase 500
08-13 11:26:42.478 2803 2803 E AndroidRuntime: at com.android.server.SystemServiceManager.startBootPhase(SystemServiceManager.java:297)
08-13 11:26:42.478 2803 2803 E AndroidRuntime: at com.android.server.SystemServer.startOtherServices(SystemServer.java:2694)
08-13 11:26:42.478 2803 2803 E AndroidRuntime: at com.android.server.SystemServer.run(SystemServer.java:939)
08-13 11:26:42.478 2803 2803 E AndroidRuntime: at com.android.server.SystemServer.main(SystemServer.java:649)
08-13 11:26:42.478 2803 2803 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
08-13 11:26:42.478 2803 2803 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
08-13 11:26:42.478 2803 2803 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:914)
08-13 11:26:42.478 2803 2803 E AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to read from field 'int android.util.ArrayMap.mSize' on a null object reference in method 'void android.util.ArrayMap.putAll(android.util.ArrayMap)'
08-13 11:26:42.478 2803 2803 E AndroidRuntime: at android.util.ArrayMap.putAll(ArrayMap.java:705)
08-13 11:26:42.478 2803 2803 E AndroidRuntime: at com.android.server.ethernet.EthernetConfigStore.loadConfigFileLocked(EthernetConfigStore.java:112)
08-13 11:26:42.478 2803 2803 E AndroidRuntime: at com.android.server.ethernet.EthernetConfigStore.read(EthernetConfigStore.java:95)
08-13 11:26:42.478 2803 2803 E AndroidRuntime: at com.android.server.ethernet.EthernetConfigStore.read(EthernetConfigStore.java:87)
08-13 11:26:42.478 2803 2803 E AndroidRuntime: at com.android.server.ethernet.EthernetTracker.start(EthernetTracker.java:184)
08-13 11:26:42.478 2803 2803 E AndroidRuntime: at com.android.server.ethernet.EthernetServiceImpl.start(EthernetServiceImpl.java:102)
08-13 11:26:42.478 2803 2803 E AndroidRuntime: at com.android.server.ConnectivityServiceInitializer.onBootPhase(ConnectivityServiceInitializer.java:97)
08-13 11:26:42.478 2803 2803 E AndroidRuntime: at com.android.server.SystemServiceManager.startBootPhase(SystemServiceManager.java:294)
08-13 11:26:42.478 2803 2803 E AndroidRuntime: ... 6 more
08-13 11:26:42.479 2803 2916 W WifiConfigManager: No stored networks found.
08-13 11:26:42.484 2803 2916 D AlarmManager: setImplLocked() callingPackage=android
08-13 11:26:42.484 2803 2916 I WifiInjector: enableVerboseLogging false hal false
08-13 11:26:42.485 2803 2916 D WifiNative: enableVerboseLogging false hal false
08-13 11:26:42.485 2803 2916 E SupplicantStaIfaceHalAidlImpl: Can't call setDebugParams, ISupplicant is null
08-13 11:26:42.488 2803 2916 I WifiService: WifiService starting up with Wi-Fi disabled
08-13 11:26:42.499 2803 2803 I DropBoxManagerService: add tag=system_server_crash isTagEnabled=true flags=0x2
08-13 11:26:42.499 2736 2736 I Zygote : ...preloaded 16430 classes in 2478ms.
08-13 11:26:42.499 2736 2736 V ZygoteInitTiming_lazy: PreloadClasses took to complete: 2478ms
分析日志,发现system_server进程去启动Ethernet service,读取Ip配置的时候失败了.失败的原因:E IpConfigStore: Bad version on IP configuration file, ignore read
.
上面这个先按下不表,我更好奇为什么Ethernet service启动失败,为什么导致设备一直卡在开机动画.
/frameworks/base/services/java/com/android/server/SystemServer.java
服务管理,启动系统服务.
系统服务大概分成三类:引导服务,核心服务,其他服务,分别对于三个方法,startBootstrapServices、startCoreServices、startOtherServices、startApexServices(Android 13),
这三个函数的主要作用就是去启动不同的服务.
比如我们常见的引导服务:ActivityManagerService, PowerManagerService, LightsService,
DisplayManagerService,PackageManagerService.
核心服务:BatteryService…
其他服务:AlarmManagerService,InputManagerService,ConnectivityService,WindowManagerService…
private void startOtherServices(@NonNull TimingsTraceAndSlog t) {t.traceBegin("startOtherServices");mSystemServiceManager.updateOtherServicesStartIndex();...t.traceBegin("StartWindowManagerService");// WMS needs sensor service ready //WMS需要 sensor service 先启动mSystemServiceManager.startBootPhase(t, SystemService.PHASE_WAIT_FOR_SENSOR_SERVICE);//查看各种服务的启动状态(阶段)wm = WindowManagerService.main(context, inputManager, !mFirstBoot, mOnlyCore,new PhoneWindowManager(), mActivityManagerService.mActivityTaskManager);ServiceManager.addService(Context.WINDOW_SERVICE, wm, /* allowIsolated= */ false,DUMP_FLAG_PRIORITY_CRITICAL | DUMP_FLAG_PROTO);ServiceManager.addService(Context.INPUT_SERVICE, inputManager,/* allowIsolated= */ false, DUMP_FLAG_PRIORITY_CRITICAL);t.traceEnd();...t.traceBegin("StartConnectivityService");//启动网络服务// This has to be called after NetworkManagementService, NetworkStatsService// and NetworkPolicyManager because ConnectivityService needs to take these// services to initialize.//CONNECTIVITY_SERVICE_INITIALIZER_CLASS = com.android.server.ConnectivityServiceInitializermSystemServiceManager.startServiceFromJar(CONNECTIVITY_SERVICE_INITIALIZER_CLASS,CONNECTIVITY_SERVICE_APEX_PATH);networkPolicy.bindConnectivityManager();t.traceEnd();...}
系统启动了这么多的服务,万一有bug出现,如何去找是那个服务没有启动成功?没有启动成功的某个服务如何快速定位问题?
当然有办法的啦,Android 把系统启动分为了几个阶段,不同的阶段干了不同的事情,前面一个阶段的事情完成了才可以进入下一个阶段.
/* * Boot Phases 启动阶段*/
public static final int PHASE_WAIT_FOR_DEFAULT_DISPLAY = 100; // maybe should be a dependency? /** * After receiving this boot phase, services can obtain lock settings data. ** 在接收到这个引导阶段之后,服务可以获得锁设置数据.*/ public static final int PHASE_LOCK_SETTINGS_READY = 480; /** * After receiving this boot phase, services can safely call into core system services * such as the PowerManager or PackageManager. ** 在这个阶段之后,服务可以安全地调用核心系统服务,如 PowerManagerService 和 PackageManagerService*/
public static final int PHASE_SYSTEM_SERVICES_READY = 500; /*** After receiving this boot phase, services can safely call into device specific services.* * 在这个阶段之后,可以安全调用设备特定的服务*/
public static final int PHASE_DEVICE_SPECIFIC_SERVICES_READY = 520; /** * After receiving this boot phase, services can broadcast Intents. ** 在接收到这个引导阶段后,服务可以广播*/
public static final int PHASE_ACTIVITY_MANAGER_READY = 550; /** * After receiving this boot phase, services can start/bind to third party apps. * Apps will be able to make Binder calls into services at this point. ** 在接收到这个引导阶段之后,服务可以启动/绑定到第三方应用程序,此时应用程序将能够使用Binder绑定服务*/ public static final int PHASE_THIRD_PARTY_APPS_CAN_START = 600; /*** After receiving this boot phase, services can allow user interaction with the device.* This phase occurs when boot has completed and the home application has started.* System services may prefer to listen to this phase rather than registering a* broadcast receiver for ACTION_BOOT_COMPLETED to reduce overall latency.* * 在这个阶段之后,服务允许用户和设备交互.* 此阶段发生在引导完成并且主应用程序(home app)启动时.* 系统服务更倾向于监听这个阶段,而不是监听启动广播 ACTION_BOOT_COMPLETED,以降低延迟*/
public static final int PHASE_BOOT_COMPLETED = 1000;
通过函数startBootPhase,然后根据phase确定启动到哪一步.
./frameworks/base/services/core/java/com/android/server/SystemServiceManager.java
/*** Starts the specified boot phase for all system services that have been started up to* this point.** @param t trace logger* @param phase The boot phase to start.*/public void startBootPhase(@NonNull TimingsTraceAndSlog t, int phase) {if (phase <= mCurrentPhase) {throw new IllegalArgumentException("Next phase must be larger than previous");}mCurrentPhase = phase;Slog.i(TAG, "Starting phase " + mCurrentPhase);try {t.traceBegin("OnBootPhase_" + phase);final int serviceLen = mServices.size();for (int i = 0; i < serviceLen; i++) {final SystemService service = mServices.get(i);long time = SystemClock.elapsedRealtime();t.traceBegin("OnBootPhase_" + phase + "_" + service.getClass().getName());try {service.onBootPhase(mCurrentPhase);} catch (Exception ex) {throw new RuntimeException("Failed to boot service "+ service.getClass().getName()+ ": onBootPhase threw an exception during phase "+ mCurrentPhase, ex);}warnIfTooLong(SystemClock.elapsedRealtime() - time, service, "onBootPhase");t.traceEnd();}} finally {t.traceEnd();}if (phase == SystemService.PHASE_BOOT_COMPLETED) {final long totalBootTime = SystemClock.uptimeMillis() - mRuntimeStartUptime;t.logDuration("TotalBootTime", totalBootTime);SystemServerInitThreadPool.shutdown();}}
每个阶段做的事情都必须完成,假设某一个阶段执行的任务失败了.就会抛出异常,后面的就无法继续执行.
比如启动网络服务失败的,来源于上面的日志E System : java.lang.RuntimeException: Failed to boot service com.android.server.ConnectivityServiceInitializer: onBootPhase threw an exception during phase 500
解释了第二个问题:为什么卡在开机动画.(不能开机是因为以太网服务读取ipconfig.txt文件异常而一直重启服务,导致系统卡住)
gityuan_system-server
Zygote家的大儿子 —— SystemServer
Android进程系列第四篇—SystemServer进程的启动流程
然后回来思考第一个问题:为什么会读写文件失败?(Bad version on IP configuration file)
ipconfig.txt异常是系统对文件缓存引起.因为设置静态IP时,会创建ipconfig.txt.
当(30s之内)突然掉电的时候,这些数据可能还在内存缓冲区,还没有被写进磁盘,所以数据就会丢失.
但是设备重启或者关机再开机,ipconfig.txt的数据不会丢失,可能是系统在启动关机/重启流程时,会将内存缓冲区的数据写进磁盘.
Android13以太网静态IP不保存的问题
如何解决:
方案1:找个好的ipconfig.txt文件,push到/data/misc/apexdata/com.android.tethering/misc/ethernet/ipconfig.txt替换它
方案2:保存用户的静态参数,直接删除,rm -rf /data/misc/apexdata/com.android.tethering/misc/ethernet/ipconfig.txt,然后利用开机广播在设置一次静态IP
这两个方案都是思路,都能让系统开机.
方案3:/packages/modules/Connectivity/service-t/src/com/android/server/net/IpConfigStore.java
,
这个方案可以避免系统卡死,能正常开机,倒是静态IP需要重新配置.(要恢复出厂设置,才能重新设置静态ip)(所以只是解决了开机问题,ip的缓存问题未解决)
关于内存缓存在突然断电时,数据丢失问题,争取可以随时把内存缓存数据同步到磁盘中,而不是内存缓存达到规定size时,才同步写入磁盘.
/** Returns a map of network identity token and {@link IpConfiguration}. */public static ArrayMap<String, IpConfiguration> readIpConfigurations(InputStream inputStream) {ArrayMap<String, IpConfiguration> networks = new ArrayMap<>();DataInputStream in = null;try {in = new DataInputStream(inputStream);int version = in.readInt();if (version != 3 && version != 2 && version != 1) {loge("Bad version on IP configuration file, ignore read");
- return null;
+ return networks;//add text}...
方案4:(检测到文件被损坏,直接跳过文件读取)只是思路,尝试了下:可以避免系统卡死,能正常开机(只是解决了开机问题,ip的缓存问题为解决)
搞个判断条件,如果文件被损坏,flag变化,跳过mConfigStore.read()
private final EthernetConfigStore mConfigStore;void start(boolean isEnabled) {mFactory.register();mConfigStore.read();//负责读的// Default interface is just the first one we want to track.mIpConfigForDefaultInterface = mConfigStore.getIpConfigurationForDefaultInterface();final ArrayMap<String, IpConfiguration> configs = mConfigStore.getIpConfigurations();for (int i = 0; i < configs.size(); i++) {mIpConfigurations.put(configs.keyAt(i), configs.valueAt(i));}...
关于突然掉电,造成文件读写异常引申:
文件数据回写/文件掉电保护
FAQ
android设备配置静态IP后无法开机
相关文章:
Anrdoir 13 关于设置静态IP后,突然断电,在上电开机卡动画
bug描述:设置静态IP成功后,机器突然断电,然后在上电开机,发现机器一直卡在开机动画,无法成功进入桌面 第一时间抓取日志分析,Log如下: 08-13 11:26:42.455 2803 2803 I EthernetServiceImpl: Starting Ethernet service 08-13 11:26:42.457 2803 2924 D ConnectivityServ…...

multimodel ocr dataset
InternLM-XComposer2-4KHD InternLM-XComposer2-4KHD a light-weight Vision Encoder OpenAI ViT-Large/14Large Language Model InternLM2-7B, 这篇论文采用的是一种动态分辨率的输入; 全图有一个global view,resize到336*336; 然后把图片resize再pad…...

兼容并蓄,高效集成:EasyCVR视频综合接入能力助力多元化项目需求
随着视频技术的不断进步,视频监控、视频直播、执法记录仪、语音可视对讲、无人机等视频资源的应用场景日益丰富。这些视频资源不仅在数量上快速增长,而且在质量、格式、编码标准等方面也呈现出多样化的特点。因此,为了有效整合这些资源&#…...

linux 部署YUM仓库及NFS共享服务
目录 简介 一、YUM仓库服务 1.1 YUM概述 1.2 linux系统各家厂家用的安装源 1.3 yum命令 1.4 yum下载方式 1.5 部署YUM软件仓库 二、NFS共享存储服务 2.1 NFS共享存储服务概念 2.2 NFS配置环境 2.3 使用NFS发布共享资源 2.4 在客户端访问NFS共享 简介 yumÿ…...

LCD 显示字符
1.0 字符显示 使用显示图片的方式显示字符会浪费存储空间,显示字符的时候字符的笔画是一个固定的颜色,因此不用使用显示图片的方式,可以使用1 表示字符的本身,0 表示字符的背景,使用这种方式显示字符节省存储空间。 注…...

NOI2003 逃学的小孩 题解
NOI2003 逃学的小孩 题解 传送门。 题目简述 给定一棵树 T T T,需要选择三个点 A , B , C A,B,C A,B,C,需要从 C C C 走到 A , B A,B A,B 的最远距离。 (第一段题目是在讲剧情吗。。) 前置知识 图树树的直径 思路简…...

硬件服务器操作系统的选择:Linux 还是 Windows?
在这个科技日新月异的时代,云服务器虽然日益普及,但硬件服务器依然是众多云服务和数据中心不可或缺的基石。有趣的是,随着云服务器的兴起,不少工程师竟然未曾亲眼见过实体的硬件服务器。然而,事实是,无论是…...

dataV组件使用——数据更新更新组件
bug 当数据更新只更新一个属性页面不会刷新(this.config1.data arr;) 必须重新赋值整个config 方式一:检测到数据更新重新赋值config this.config1 {data: arr,header: ["所在单位", "人员姓名", "职位", &q…...
solana合约编写
文章目录 solana 合约编写整体思路Cargo.toml配置代码实现在 Solana 智能合约中,定义和管理可能的错误类型自定义一个 Solana 账户结构一个帐户的约束条件什么是bump账号获取指令参数编码基础常用总结format! 格式化字符串Option<String>Vec<u8>编译部署到localne…...

C++调用C#方法(附踩坑点)
C调用C#方法 写在前面效果思路步骤可能的问题 写在后面 写在前面 工作需要用C调用C#写到代码,看来网上写的方法,自己也踩了一些坑,这里总结一下,我只试了CLR的方法。 主要参考了下面几篇博客 C调用C#库简单例程(Lucky…...

开源前端埋点监控插件Web-Tracing
Web-Tracing是一款专为前端项目设计的前端监控插件,它基于JavaScript设计,兼容跨平台使用,并提供了全方位的监控功能。 开源地址:https://gitee.com/junluoyu/web-tracing-analysis 以下是关于Web-Tracing的详细介绍:…...

智慧排水远程监测系统物联网解决方案
智慧排水监测系统是一种集成了现代信息技术、物联网技术、大数据分析及云计算能力的高效城市排水管理解决方案。该系统通过全面、实时地监控城市排水网络的运行状态,旨在预防内涝灾害,优化水资源管理,保障城市安全运行,促进可持续…...
【SVN(Subversion)是一个版本控制系统】
Question SVN所有命令 Answer SVN(Subversion)是一个版本控制系统,用于管理和跟踪文件和目录的更改。以下是一些常用的SVN命令: 检出(Checkout) svn checkout URL从版本库中检出一个工作副本。 更新&am…...

leetcode108.把升序数组转换成二叉搜索树
题目描述 [-10,-3,0,5,9] 转换成如下二叉搜索树: 解题的核心原理是:二叉搜索树的中序遍历结果是一个升序数组,所以根节点的数值,也位于数组的中部。 class Solution {public TreeNode sortedArrayToBST(int[] nums) {return h…...

用QTdesigner制作自己的双目标定软件
目录 1,设计布局软件界面 2,导出界面ui文件为python的.py文件 3,为界面添加对应的功能 4,导出为exe可执行文件 5,运行测试效果 5.1 双击启动 5.2 添加必要的参数 5.3 ,运行结果 效果展示 动手制作双…...
MySQL:基础巩固-DDL
一、对数据库的操作 1.查询所有数据库 SHOW DATABASES;2. 查询当前使用的数据库 SELECT DATABASE();3. 创建数据库 CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;4. 删除数据库 DROP DATABASE IF EXISTS test;5. 使用数据库 …...
翻译软件在医学中的应用
翻译软件在医学中的应用非常广泛,主要体现在以下几个方面: 患者沟通:翻译软件可以帮助医务人员与非母语患者进行有效沟通,确保患者能够准确表达自己的症状和需求,也使医生能够清晰地解释治疗方案和用药说明。这对提升…...

政务大数据解决方案(六)
政务大数据解决方案通过建立综合数据平台,将来自各政府部门的异构数据整合并进行深入分析,利用人工智能和机器学习技术实现智能化数据处理与预测,从而提升政府决策的科学性和实时响应能力。方案涵盖数据采集、存储、处理、分析与可视化&#…...
【MATLAB机器人系统工具箱】【manipulatorRRT规划器】属性和方法解析
启用了连接启发式(heuristic)后,双向快速扩展随机树(RRT)算法会在以下情况下忽略 MAXCONNECTIONDISTANCE 的限制:当两棵树(起始树和目标树)之间的节点距离足够接近时,算法…...
MySQL 多表连接(JOIN)
在数据库开发中,多表连接(JOIN)是一个非常重要的技术,它使得我们可以在查询中整合多个表的数据,进而实现更加复杂的数据操作。本文将深入探讨 MySQL 中的多表连接,帮助读者全面理解 JOIN 的基本概念、类型和…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...