【Android面试】Fragment生命周期专题

Android面试题之Fragment篇,安卓面试题2020 提示:以下是本篇文章正文内容 Fragment ======================================================================= 1.如何切换 fragement(不重新实例化) 翻看了 Android 官方 Doc,和一些组件的源代码,发现 replace()这个方法只是在上一个 Fragment不再需要时采用的简便方法. 正确的切换方式是 add(),切换时 hide(),add()另一个 Fragment;再次切换时,只需 hide()当 阅读详情

文章目录

第一部分:基础入门题(考察核心生命周期认知)

1. 请说出Fragment完整的生命周期方法,按执行顺序罗列。

答案:标准完整生命周期顺序:onAttach() -> onCreate() -> onCreateView() -> onViewCreated() -> onActivityCreated()(已废弃) -> onStart() -> onResume() -> onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()。

注:AndroidX版本中onActivityCreated()已废弃,相关逻辑移至onViewCreated()。

2. Fragment的生命周期中,哪些方法是成对出现的,分别对应什么场景?

答案:

  1. onAttach() 与 onDetach():绑定Activity、脱离Activity成对出现;

  2. onCreate() 与 onDestroy():创建实例、销毁实例成对出现;

  3. onCreateView() 与 onDestroyView():创建视图、销毁视图成对出现;

  4. onStart() 与 onStop():可见、不可见成对出现;

  5. onResume() 与 onPause():获取焦点、失去焦点成对出现。

3. Fragment的onCreate()和onCreateView()有什么区别,各自适合做什么操作?

答案:

  1. onCreate():实例创建阶段调用,此时还未创建视图,执行时机早于onCreateView(),适合做初始化数据、初始化非视图对象、获取参数、注册广播等操作;

  2. onCreateView():用于加载并返回Fragment布局视图,核心是创建视图层级,适合做布局填充,不适合做耗时操作和视图控件绑定;

  3. 区别:onCreate()无视图,onCreateView()负责创建视图;onCreate()只执行一次,onCreateView()可能因视图重建多次执行。

4. Fragment从创建到显示在屏幕上,会依次执行哪些生命周期方法?

答案:onAttach() -> onCreate() -> onCreateView() -> onViewCreated() -> onStart() -> onResume(),执行完onResume()后,Fragment完全可见且可交互。

5. Fragment从屏幕上消失到彻底销毁,会依次执行哪些生命周期方法?

答案:onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()。

6. onCreateView和onViewCreated方法区别

在这里插入图片描述

第二部分:进阶基础题(结合Activity生命周期联动)

1. 请描述Activity正常启动时,与依附的Fragment之间生命周期方法的执行顺序。

Activity的onCreate() -> Fragment的onAttach() -> Fragment的onCreate() -> Fragment的onCreateView() -> Fragment的onViewCreated() -> Activity的onStart() -> Fragment的onStart() -> Activity的onResume() -> Fragment的onResume()。

2. 请描述Activity正常退出销毁时,与依附的Fragment之间生命周期方法的执行顺序。

Fragment的onPause() -> Activity的onPause() -> Fragment的onStop() -> Activity的onStop() -> Fragment的onDestroyView() -> Fragment的onDestroy() -> Fragment的onDetach() -> Activity的onDestroy()。

3. Activity执行onPause()、onStop()时,Fragment会分别触发哪些生命周期方法?

  • Activity执行onPause():Fragment先执行onPause();
  • Activity执行onStop():Fragment先执行onStop();
    整体顺序:Fragment的onPause() → Activity的onPause() → Fragment的onStop() → Activity的onStop()。

4. Activity执行onRestart()时,Fragment会触发哪些生命周期方法

Activity执行onRestart()之后,随后Activity执行onStart()、会触发Fragment的onStart(),Activity执行onResume(),Fragment再执行onResume()。

5. Activity配置变更(如屏幕旋转),不手动处理的情况下,Activity和Fragment的生命周期分别如何变化?

  • Activity:会销毁重建,执行onPause()→onStop()→onDestroy(),随后重新执行onCreate()→onStart()→onResume();
  • Fragment:默认跟随Activity销毁重建,执行onPause()→onStop()→onDestroyView()→onDestroy()→onDetach(),再重新执行onAttach()→onCreate()→onCreateView()→onStart()→onResume();
  • 视图和数据会丢失,除非做状态保存。

6. Activity被系统回收后重建,Fragment会重新执行完整生命周期吗,和初次创建有什么区别?

  • 会重建并执行完整生命周期;
  • 区别:重建时Fragment会恢复之前保存的状态数据,初次创建无历史状态;系统会自动恢复Fragment实例,不需要手动重新添加;如果是动态添加的Fragment,系统会自动恢复,无需重复add。

7. 依附于Activity的Fragment,能不能脱离Activity单独执行生命周期?

不能。Fragment是依赖于Activity的组件,没有独立的任务栈,生命周期完全由宿主Activity和FragmentManager调度控制,必须依附Activity才能运行,无法单独存在、单独执行生命周期。

第三部分:场景应用题(日常开发高频场景)

1. 使用add()方法添加Fragment,隐藏(hide)该Fragment,会触发哪些生命周期方法?

hide()操作不会触发任何生命周期方法,Fragment只是视图不可见,实例、视图依然存活,不会执行onPause、onStop、onDestroyView等方法

2. 被hide的Fragment,再次show()显示出来,会触发哪些生命周期方法?

show()操作同样不会触发任何生命周期方法,只是把隐藏的视图重新显示,实例和视图全程保持存活

3. 使用replace()方法替换Fragment,被替换掉的旧Fragment会执行哪些生命周期方法?

  • 不加入回退栈的情况下,旧Fragment会执行:
    onPause()→onStop()→onDestroyView()→onDestroy()→onDetach(),彻底销毁
  • 加入回退栈的情况下,旧Fragment只会执行:onPause()→onStop()→onDestroyView(),实例保留,不执行onDestroy和onDetach

4. addToBackStack()添加回退栈,对Fragment生命周期有什么影响?

  • 调用replace()时配合addToBackStack(),被替换的Fragment不会彻底销毁,只会销毁视图(执行onDestroyView),实例保留在内存中
  • Fragment会被加入回退栈,点击返回键可以恢复
  • 不会影响新添加Fragment的生命周期执行

5. 点击返回键,弹出回退栈中的Fragment,该Fragment会执行哪些生命周期方法?

弹出回退栈,恢复之前的Fragment,会重新执行视图创建相关方法:onCreateView()→onViewCreated()→onStart()→onResume(),重建视图,实例复用。

6. 使用ViewPager2加载Fragment,左右滑动切换页面时,Fragment会触发哪些生命周期方法?

  • 切离当前页面:Fragment执行onPause()→onStop(),视图保留,实例存活
  • 切回当前页面:Fragment执行onStart()→onResume()
  • 默认不会销毁视图,除非页面被回收

7. 使用ViewPager加载Fragment,结合setOffscreenPageLimit()设置缓存页数,切换页面时,离屏Fragment的生命周期会如何变化?

  • 在缓存页数范围内的离屏Fragment:只会执行onPause()→onStop(),不销毁视图和实例
  • 超出缓存页数的Fragment:会执行onPause()→onStop()→onDestroyView(),销毁视图,实例保留,切回时重建视图

8. DialogFragment弹出和关闭时,自身以及依附的Activity会触发哪些生命周期方法?

  • 弹出:DialogFragment执行onAttach - onCreate - onCreateDialog - onCreateView - onStart()→onResume(),宿主Activity不会触发任何生命周期方法
  • 关闭:DialogFragment执行onPause()→onStop()→onDestroyView() - onDestroy()→onDetach(),宿主Activity依然不会触发生命周期

9. 动态移除(remove)一个Fragment,会触发该Fragment的哪些生命周期方法?

完整销毁流程:onPause()→onStop()→onDestroyView()→onDestroy()→onDetach(),实例和视图全部销毁,无法恢复。

10. Fragment进入后台,再切回前台,生命周期方法如何执行?

  • 进入后台:Fragment执行onPause()→onStop();
  • 切回前台:Fragment执行onStart()→onResume();

全程不销毁视图和实例。

第四部分:疑难场景题(大厂高频难点)

1. 同一个Fragment实例,重复添加到Activity中,生命周期会出现异常吗,会触发哪些方法?

答案:

  • 会出现异常,直接抛出IllegalStateException,提示Fragment已添加;

  • 不会触发完整生命周期,添加操作直接失败;

  • 原因:一个Fragment实例只能绑定一个Activity,且只能添加一次,重复添加会冲突。

2. Fragment嵌套(子Fragment依附父Fragment),父子Fragment的生命周期执行顺序是什么?

答案:

  1. 创建顺序:父Fragment先执行onAttach→onCreate→onCreateView→onViewCreated,随后子Fragment执行完整的创建生命周期(onAttach→onCreate→onCreateView…),最后父子Fragment同步执行onStart→onResume;

  2. 销毁顺序:子Fragment先执行销毁流程(onPause→onStop…),父Fragment再执行销毁流程。

3. 父Fragment执行生命周期方法,子Fragment会同步执行吗,有哪些例外情况?

答案:

  1. 正常情况下会同步执行:父Fragment执行onPause、onStop、onStart、onResume,子Fragment会同步执行;

  2. 例外:父Fragment执行onCreate、onDestroy、onDestroyView时,子Fragment生命周期不受影响;子Fragment单独hide/show,不会影响父Fragment;父Fragment视图重建,子Fragment也会重建视图。

4. 屏幕旋转时,如何避免Fragment重新创建,此时生命周期如何变化?

方案 1:Fragment setRetainInstance (true) 【已废弃】

⚠️ AndroidX 已经废弃 setRetainInstance(true),不再推荐使用,以前老方案。
作用:配置变更(屏幕旋转)时,保留 Fragment 实例,不销毁 Fragment 对象;但 Fragment 的 View 依旧会销毁重建。
生命周期:
Activity 销毁重建 → Fragment 实例保留,执行:
onDestroyView() → 重建后 onCreateView() → onViewCreated()
不走 onDestroy、onDetach;只销毁视图,实例对象还在。

方案 2:官方推荐:ViewModel ✅(现在标准答案)

Fragment/Activity 配置变更重建,ViewModel 对象保留,用来存业务数据;
但是 Fragment 实例本身依然会重新创建,只是数据保存在 ViewModel 里恢复。

注意:Fragment 实例还是 new 新对象,只是数据不丢。

方案 3:Activity 设置 configChanges(不推荐)

android:configChanges="orientation|screenSize"

Activity 不会销毁重建,那么依附它的 Fragment 自然也不会重建。
回调:只会走 onConfigurationChanged()
缺点:要自己处理横竖屏布局适配,系统不会自动加载不同布局资源,项目很少用。

5. Fragment设置setRetainInstance(true),配置变更时,生命周期会跳过哪些方法?

答案:

  1. 会跳过onDestroy()和onDetach(),Fragment实例不会销毁;
  2. 依然会执行onPause→onStop→onDestroyView销毁视图;
  3. 重建时跳过onAttach→onCreate,直接执行onCreateView→onStart→onResume,复用原有实例。

6. Activity设置为单任务模式、透明主题时,依附的Fragment生命周期有什么变化?

答案:

  1. 单任务模式:Activity不会重复创建,Fragment也不会重复创建,切换到该Activity,Fragment执行onStart→onResume;

  2. 透明主题Activity:关闭透明Activity,原Activity和Fragment不会执行onStop,只会执行onPause;启动透明Activity,Fragment直接执行onResume,不执行onStart。

7. Fragment从布局文件静态注册,和代码动态添加,生命周期执行有什么区别?

  1. 静态注册:生命周期跟随Activity自动执行,无法手动控制添加、移除、替换,Activity销毁时Fragment自动销毁;
  2. 动态添加:可手动控制生命周期调度,支持add、remove、replace、hide、show等操作,可加入回退栈,灵活性更高;
  3. 静态注册Fragment不能重复添加,动态添加可灵活管理多个Fragment。

8. Fragment的onDestroyView()和onDestroy()有什么区别,什么情况下会只执行onDestroyView()?

  1. 区别:onDestroyView()仅销毁Fragment的视图层,实例依然存活;onDestroy()销毁Fragment实例,释放所有资源;
  2. 只执行onDestroyView()场景:replace()配合addToBackStack()、ViewPager缓存页面超出限制、屏幕旋转且设置setRetainInstance(true)。

9. 使用导航组件(Navigation)切换Fragment,生命周期和普通replace()有什么不同?

答案:

  1. Navigation切换:默认自动加入回退栈,离开的Fragment只执行onDestroyView,实例保留;返回时重建视图,复用实例;

  2. 普通replace():不加回退栈会彻底销毁Fragment;

  3. Navigation生命周期更规范,能自动处理状态恢复和回退逻辑。

10. 系统内存不足,回收后台Fragment,Fragment恢复时生命周期如何执行?

  1. 系统回收时,Fragment会执行完整销毁流程;
  2. 恢复时,重新执行完整生命周期:onAttach→onCreate→onCreateView→onStart→onResume;
  3. 会恢复之前保存的状态数据,视图重新创建。

第五部分:原理深挖题(高级工程师考察)

1. Fragment的生命周期由谁控制,和Activity的生命周期管理有什么核心区别?

答案:

  1. 控制方:Fragment生命周期由宿主Activity和FragmentManager(SupportFragmentManager/ChildFragmentManager)共同调度,通过事务(FragmentTransaction)触发;

  2. 核心区别:Activity生命周期由系统AMS调度,受任务栈和系统资源管理;Fragment生命周期受控于宿主和代码手动事务,灵活性更高,可单独控制显示、隐藏、销毁视图,不依赖系统调度。

2. 为什么Fragment的onCreateView()不能耗时操作,onViewCreated()适合做什么?

答案:

  1. onCreateView()是UI绘制关键流程,耗时操作会阻塞主线程,导致页面卡顿、黑屏;该方法核心职责是填充布局,必须快速返回View对象;

  2. onViewCreated()在视图创建完成后调用,适合做控件绑定、设置监听、加载数据、初始化视图样式、接收数据赋值等操作。

3. FragmentManager是如何调度Fragment生命周期的,核心流程是什么?

答案:

  1. FragmentManager通过FragmentTransaction收集操作(add、remove、replace等),提交事务后执行调度;

  2. 监听宿主Activity生命周期,同步分发onStart、onResume、onPause等生命周期;

  3. 维护Fragment栈和状态,根据事务类型、回退栈状态,决定执行完整销毁还是仅销毁视图;

  4. 配置变更时,负责保存和恢复Fragment状态,重建Fragment实例。

4. 为什么hide()/show()不会触发Fragment的视图销毁重建,而replace()会?

答案:

  1. hide()/show()只是改变Fragment视图的可见性(setVisibility),不改变Fragment的添加状态和实例状态,FragmentManager不会调度生命周期;

  2. replace()本质是remove旧Fragment+add新Fragment,会触发Fragment的移除和添加逻辑,视图层会被销毁重建;

  3. 两者底层实现逻辑不同,hide/show是视图操作,replace是实例调度操作。

5. Fragment生命周期中,哪些方法可以做耗时操作,哪些方法严禁耗时操作?

答案:

  1. 严禁耗时操作(主线程阻塞):onCreate、onCreateView、onViewCreated、onStart、onResume、onPause、onStop、onDestroyView,这些方法属于UI生命周期,耗时会卡顿;

  2. 可做轻量耗时(建议开子线程):onDestroy、onDetach(资源释放);

  3. 所有耗时操作必须放在子线程执行,配合回调更新UI。

6. AndroidX Fragment和support库中的Fragment,生命周期有什么差异?

答案:

  1. AndroidX移除了onActivityCreated()方法,相关逻辑合并到onViewCreated();

  2. AndroidX新增了onViewCreated()、onStateChanged()等更细化的生命周期回调;

  3. AndroidX生命周期调度更严谨,修复了旧support库的内存泄漏、状态丢失问题;

  4. AndroidX支持更好的状态保存和恢复,嵌套Fragment生命周期更稳定。

7. 如何监听Fragment的生命周期,除了重写方法还有哪些方式?

答案:

  1. 重写Fragment生命周期方法(最常用);

  2. 通过FragmentManager.registerFragmentLifecycleCallbacks()注册全局监听;

  3. 使用LifeCycleOwner,配合LiveData、LifecycleObserver观察者模式监听;

  4. 通过ViewModel感知生命周期变化。

8. Fragment状态保存和恢复,对应哪些生命周期方法,和Activity的状态保存有什么关联?

答案:

  1. Fragment状态保存:onSaveInstanceState()(销毁前调用),恢复:onViewCreated()、onActivityCreated()(废弃)中获取Bundle数据;

  2. 关联:Activity的onSaveInstanceState()会触发Fragment的状态保存;Activity重建时,会把保存的状态分发给Fragment,完成数据恢复;

  3. Fragment和Activity共用状态保存机制,状态数据相互关联。

9. 为什么在 Fragment 中监听 LiveData 要使用 viewLifecycleOwner

在 Fragment 中监听 LiveData 时使用 viewLifecycleOwner 是为了确保观察者的生命周期与 Fragment 的视图生命周期保持一致,避免在视图已经销毁后仍然收到数据更新,从而导致崩溃或内存泄漏。

Fragment 的生命周期比它的视图更长,例如在 onDestroyView() 之后,Fragment 实例可能还存在,但视图已经被销毁。如果使用 this(即 Fragment 本身)作为生命周期所有者,LiveData 的观察者仍然活跃,一旦数据更新,可能会尝试更新已经不存在的 UI 组件,引发空指针异常。

而 viewLifecycleOwner 的生命周期绑定的是 Fragment 的视图创建到销毁的过程(从 onCreateView 到 onDestroyView)。使用它来观察 LiveData,可以确保在视图销毁后自动解除监听,避免不必要的风险。

Android 面试题之 Fragment 使用+实例,致Android高级工程师的一封信 android.app.Fragment在API 级别 11 中 添加,已在API 级别 28 中弃用。 阅读详情

相关推荐

Android面试专题系列(五):说一下Fragment与Activity的关系

不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨—https://blog.youkuaiyun.com/cjm2484836553/article/details/105150473 如果面试官问:“来,说一下什么是Fragment吧,它和Activity有什么关系呢?” 不要觉得Fragment有什么好说的,然后就尬出几个字来。 大家不妨参考一下以下几点,说出个几条来也是不错的呀~ ...

cjm2484836553的博客 1916

【Android】27,Android者升职加薪的8项技能

public class MainActivity extends AppCompatActivity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);if (savedInstanceState == null) {getSupportFragmentManager().beginTra

930

【Android面试八股文】Fragment的add和replace的区别,分别对Fragment的生命周期有什么影响?

replace方法:直接替换当前容器中的 Fragment,适用于完全切换视图内容的情况。replace方法并添加到返回栈:在替换的同时将原 Fragment 添加到返回栈,可以支持返回操作。hide和add方法结合:保留 FragmentA 的状态,仅在需要切换时显示或隐藏,适用于需要快速切换视图的情况。add和remove方法结合:完全移除原 Fragment 并添加新的 Fragment,适用于需要精确控制添加和移除过程的情况。

字节卷动 2094

android LifeCycle-简单使用和详细原理解析

class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) lifecycle.addObserver(MainObserver()) } }class MainObserver : LifecycleObserver { @OnL

2401_86968180的博客 1472

IAR for ARM 搭建STM32F103C8T6工程模板(实战指南)

本文详细介绍了如何在IAR for ARM开发环境中为STM32F103C8T6微控制器搭建完整的工程模板。从环境准备、固件库获取、目录结构设计到工程配置与编译调试,提供了实战指南和常见问题解决方案,帮助开发者快速建立稳定的STM32开发环境。

fun88的博客 990

避坑指南:ZYNQ平台上AXI 1G/2.5G Ethernet Subsystem实现IEEE1588的5个关键点

本文详细解析了在ZYNQ平台上使用AXI 1G/2.5G以太网子系统实现IEEE1588精密时间协议(PTP)的5个关键避坑点。从硬件选型、Vivado工程配置到Linux驱动适配,提供了实战经验与优化技巧,帮助工程师在工业自动化、电力系统等场景中实现纳秒级时间同步。

weixin_30687051的博客 239

华为“事件”,引发了Android开发者们的思考。。。

笼统的说,比高级工程师技术面更广,学习主动性更强,更能紧跟时代发展的就是Android架构师。Android架构师技术深度和广度都要兼顾,需要时间的积累和经验的沉淀,这里给大家看一张大厂的薪资与级别成长路线图。当然从结果来论,能力突出架构师的薪资也同样会水涨船高,一个Android架构师能够拿到40万的年薪都再正常不过了。现在Android岗位需求更趋于饱和,对于岗位的要求就更高了,不再是画画界面,写点简单的业务代码那么简单。更多的要求你了解底层原理,架构,性能优化,技术更新,提升效率等等。

2401_84149444的博客 748

从帧结构到数据解析:深入理解CJ/T 188 MBUS水表通信协议

本文深入解析CJ/T 188 MBUS水表通信协议,从帧结构到数据解析提供完整指南。通过典型报文示例和实战案例,详细讲解地址域、控制码、数据标识符(DI)等关键字段的解析技巧,并分享校验算法与常见错误排查方法,帮助开发者快速掌握MBUS协议在水表通信中的应用。

weixin_28710999的博客 424

面试专题之一Fragment的生命周期

面试的时候,如果被面试官问到Fragment的生命周期,想必大家直接脱口而出:onCreate()、onCreateView()、onActivityCreated()、on……,然后就没有然后了。学习生命周期不是为了应付面试,背个执行顺序就完了,要理解每个方法的含义,而它们的真正含义,只有通过不断做实验,把每种情况都实验一遍才能得出答案,过程是漫长又繁琐的。下面的结果就是博主不断实验的结果,当然

u013519989的博客 3504

EAST算法(Efficient and Accuracy Scene Text))

1.EAST模型简介 本文介绍的文本检测模型EAST,便简化了中间的过程步骤,直接实现端到端文本检测,优雅简洁,检测的准确性和速度都有了进一步的提升。如下图: 其中,(a)、(b)、(c)、(d)是几种常见的文本检测过程,典型的检测过程包括候选框提取、候选框过滤、bouding box回归、候选框合并等阶段,中间过程比较冗长。而(e)即是本文介绍的EAST模型检测过程,从上图可看出,其过程简化为只有FCN阶段(全卷积网络)、NMS阶段(非极大抑制),中间过程大大缩减,而且输出结果支持文本行、单词的多个角度

博客 9579

[LVGL]:MACOS下使用LVGL模拟器

[LVGL]:MACOS下使用LVGL模拟器

LINKKEEE的博客 2458

学习 Android(十)Fragment的生命周期

Android 的 Fragment 是一个具有独立生命周期的可重用 UI 组件,能够在运行时动态添加、移除和替换,支持单 Activity 多界面、动态布局和响应式设计。Fragment 的生命周期与 Activity 紧密关联,但包含更多与视图相关的回调方法,如 onAttach()、onCreateView()、onViewCreated() 等。掌握这些生命周期方法有助于在适当的阶段执行初始化、资源绑定、状态保存与释放操作,避免内存泄漏和 UI 崩溃。通过合理使用 Fragment 的生命周期,开发

m0_56334538的博客 4391

YOLOv8改进002:添加小目标检测头(小目标检测大量涨点)

YOLOv8 目标检测算法改进之添加小目标检测头,亲测在小目标检测的数据集上有大幅度的涨点效果(mAP直接涨了 0.04 左右)。

m0_46496775的博客 9878

Android面试题之Fragment篇

Fragment篇前言Fragment1.如何切换 fragement(不重新实例化)2.Fragment 的的优点3.Fragment 如何实现类似 Activity 栈的压栈和出栈效果4.Fragment 的 replace 和 add 方法的区别5.Fragment与Activity之间是如何传值的6.Fragment生命周期7.ViewPager对Fragment生命周期的影响关于整理问题 前言 秋招在即,计蒙准备在国庆假期结束前整理一套Android初级面试题籍,希望对大家有所帮助 提示:以下是

计蒙不吃鱼的博客 3477

YOLOv5/v7/v8/v9/v10/v11/v12/13目标检测结果解析,超w字精读,IoU、GIoU、DIoU、CIoU、EIoU详细解释,精确率、召回率、AP、mAP与P-R 曲线图深度解析

YOLOv5/v7/v8/v9/v10/v11/v12/13目标检测结果解析,超w字精读,IoU、GIoU、DIoU、CIoU、EIoU详细解释,精确率、召回率、AP、mAP与P-R 曲线图深度解析

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1417

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android面试必备——Fragment

Android面试中Fragment也是会经常被问到的知识点,本文介绍一下Fragment。 概述 Fragment是Activity中用户界面的一个行为或者是一部分。主要是支持在大屏幕上动态和更为灵活的去组合或是交换UI组件,通过将Activity的布局分割成若干个Fragment,可以在运行时编辑Activity的呈现,并且那些变化会被保存在由Activity管理的后台栈里面。 Fragmen...

ai-exception的博客 1027

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

android面试之fragment,Android面试题之Fragment篇

Fragment篇 前言Fragment1.如何切换 fragement(不重新实例化)2.Fragment 的的优点3.Fragment 如何实现类似 Activity 栈的压栈和出栈效果4.Fragment 的 replace 和 add 方法的区别5.Fragment与Activity之间是如何传值的6.Fragment生命周期7.ViewPager对Fragment生命周期的影响关于整理问...

weixin_35980011的博客 226

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

android fragment 面试

总结 参考:https://www.jianshu.com/p/28ca4cbe190c 参考:https://www.jianshu.com/p/11c8ced79193 1.生命周期 参考:https://blog.youkuaiyun.com/gyh790005156/article/details/79487576 2.Fragment实现原理和Back Stack 参考:https://www.ji...

风的方向 757

InterviewQuestion解析:Android中的Fragment与Activity生命周期终极指南

在Android应用开发中,Fragment和Activity的生命周期管理是每个开发者必须掌握的核心知识点。无论是新手入门还是资深开发,理解Fragment与Activity的生命周期对于构建稳定、高效的Android应用至关重要。本文将深入解析Android中Fragment与Activity生命周期的完整流程,帮助您全面掌握这一面试常考点。 ## Fragment与Activity生命周期

gitblog_00235的博客 997

2024年安卓最新Android Fragment 使用解析,头条面试一定会有作业吗

Fragment是依赖于Activity的,不能独立存在的。一个Activity里可以有多个Fragment。一个Fragment可以被多个Activity重用。Fragment有自己的生命周期,并能接收输入事件。我们能在Activity运行时动态地添加或删除Fragment。考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了PDF文档网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

2301_82243523的博客 507

android fragment和activity的区别

Fragments基础          到 Android3.0+ 以后,Android新增了Fragments,在没有 Fragment 之前,一个屏幕只能放一个 Activity,Fragment 从功能上讲相当于一个子活动(Activity),它可以让多个活动放到同一个屏幕上,也就是对用户界面和功能的重用,因为对于大屏设备来说,纯粹的 Activity 有些力不从心  Fragme

倾听雨落 1万+

android Fragment生命周期介绍

官网帮助文档链接:  http://developer.android.com/guide/components/fragments.html 主要看两张图,和跑代码 一,Fragment的生命周             二,与Activity生命周期的对比       场景演示 : 切换到该Fragment 11-29 14:26:35.095: D/

成长的味道 1197

[Java、Android面试]_17_Fragment和Service生命周期

本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。

qq_41915623的博客 506

2024年Android最全Android面试题之Fragment篇(1),阿里巴巴android面试

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。最后针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、移动架构师、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!

2301_82243558的博客 894

android fragment和activity生命周期的关系

1.Fragment 为什么会被称为第五大组件? Android 中的 4 大组件为:Activity,Broadcast,Service,ContentProvider,那么为什么 Fragment 可以称之为第 5 大组件呢?你可以这么回答: 因为 Fragment 有生命周期,使用频率不输于 4 大组件,可灵活加载到 Activity 中。然 后谈论谈论 Fragment 如何加载到 Activity 中: 1.1 Fragment 加载到 Activity 的 2 种方式 Fragment 加载到

u013750244的博客 1008
上一篇: 【Android面试】Handler专题
下一篇: 【Android面试】Gradle专题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值