️ 邪神
过好生活每一天, 火辣辣的日子也时常伴随着你
展开
-
Kotlin 面试题
注意,协程的取消并不一定会立即停止协程的执行,它只是向协程发送了一个取消的信号,协程可能会在任何时候检查这个信号,并据此决定是否停止执行。的实例在应用程序的生命周期中是单例的或者有一个全局唯一的实例。如果不是这样,你可能需要使用其他的同步机制,例如使用synchronized。这样的Java同步原语。是一个关键字,用于确保在同一时刻只有一个线程可以进入被同步的代码块。类的一个方法,它用于通过一个特定的标签来查找一个已经被添加到。,后续的调用将会等待,直到当前的对话框显示和同步块完成。原创 2024-04-14 19:11:12 · 281 阅读 · 0 评论 -
Kotlin 面试题
在实际应用中,如果你的协程需要和特定的组件(如Activity或Fragment)的生命周期绑定,那么使用。的整个生命周期内运行,并在生命周期结束时取消协程。创建了一个新的协程范围,并且阻塞了主线程直到协程完成。是一个在ImageView类中定义的方法,用于设置图片资源。是一个协程构造器,它会创建一个新的协程并且立即返回一个Job。如果你想要在主线程中等待一个协程完成,并且你想要使用。,它可以返回一个新的值,在这个例子中,返回的是字符串。对象的一个方法,它会阻塞当前线程直到协程执行完毕。原创 2024-04-14 16:56:11 · 703 阅读 · 0 评论 -
Kotlin 面试题
当用户点击按钮时,会启动一个新的协程来获取数据,并在1秒后更新TextView的文本。依赖注入是一种设计模式,它允许你将对象(依赖项)的实例传递给需要它们的代码,而不是让代码自己创建或查找这些实例。方法的实现委托给另一个对象。在依赖注入的上下文中,这通常意味着你委托给某个能够为你提供依赖项的对象。库的两个关键函数,它们被广泛用于Android开发中,以简化协程的使用。方法,你需要确保你已经在你的项目中包含了正确版本的 LiveData。的特殊语法糖,它是一个顶层函数,可以在任何表达式中作为闭包使用。原创 2024-04-14 09:56:35 · 593 阅读 · 0 评论 -
Kotlin by关键字
但是我们要是理解了其真实的实现原理就比较好理解了,下面我们就来分析一下上面这个类委托的示例。我们在类NewList中定义了几个简单的方法,我们并没有让NewList自己去实现这些方法的逻辑。函数中的函数类型的参数拥有一个返回值,该返回值的类型决定了我们被委托属性的类型,我们可以在。不能满足我们的现有的需求时我们完全可以使用委托来实现,我们可以在。表达式中设置任意的类型作为被委托属性的值,我们就可以推断出。函数需要返回一个委托类的对象,委托类中的对象重载的。关键字后面的表达式是该委托,属性对应的。原创 2024-03-27 11:33:17 · 397 阅读 · 0 评论 -
Kotlin object
不管是对象声明,还是下面会说到的另外两种用法,都是遵循这一语义的。原创 2024-03-26 17:10:07 · 246 阅读 · 0 评论 -
安卓Java面试题 226- 230
226. 简述ContentProvider的权限管理 ? Content Provider的权限的管理很复杂,所以需要慢慢的说。 一个Provider里面可能有私有数据,也有公有数据。也就是说,有可能有些数据可以公开,有些不能公开。并且,有些 数据可以让别人修改,有些不能让别人修改。 围绕上诉的可能情况,Provider就需要设置读权限(android:readPermission),和写权限 (android:writePermission),或者干脆都设置(android:原创 2024-03-25 01:23:49 · 509 阅读 · 0 评论 -
安卓Java面试题 221- 225
人员混杂的项目,没有一个BaseActivity,无法获取到当前的Activity,实现就比较困难,通过网上学习,找到了一种获。出全局的dialog,往往通过广播的方式,交由App中当前显示的Activity来实现,但是项目过大,尤其对于代码量庞大,同样的需求,可以通过弹出一个全局的Activity来实现,虽然同样需要弹出对话框,我们可以在Activity里将布局绘制为。重点来了,上面的代码可能适合快速开发,实现功能测试,但是保存当前的Activity实例,会严重影响程序性能,并且导。原创 2024-03-24 01:38:16 · 274 阅读 · 0 评论 -
安卓Java面试题 216- 220
216. 简述如何给Activity设置进入和退出的动画 ? 其实设置Activity动画的根本也就是设置View的动画,因为Activity有一个根的View叫DecorView。下面介绍两种设置 Activity的动画 1.修改Activity Theme 然后在themes.xml中 在AndroidMainfest.xml中为Activity指定theme 在styles.xml中输入以下代码 2.使用代码设定 通过调用overridePendingTrans原创 2024-03-24 01:34:05 · 775 阅读 · 0 评论 -
安卓Java面试题 211- 215
214. 简述在隐式启动中Intent可以设置多个action,多个category吗 & 顺便讲讲它们的匹配规则?原创 2024-03-24 01:30:34 · 259 阅读 · 0 评论 -
安卓Java面试题 206- 210
206. 简述如何统计Activity的工作时间 ? 如何统计Activity启动所用的时间? 可以通过分析Log得到(这个就是DDMS的那个Log)。 当我们点击触摸时会了类似以下的Log A: 03-06 03:36:47.865: VERBOSE/InputDevice(2486): ID[0]=0(0) Dn (0=>1) 03-06 03:36:47.865: INFO/PowerManagerService(2486): Ulight 3->7|0原创 2024-03-24 01:25:04 · 225 阅读 · 0 评论 -
安卓Java面试题 201- 205
3.在里面添加:android:process="xxx.xxx.xxx",这里所有的application都要填写的一样,内容就是process的名字,一般来说Android中process的名字就是manifest中的package的取值。2.在里面添加:android:sharedUserLabel="@string/shared_user_label",这个label必须是一个string资源,不能是raw string。4.所有的application用同样的一个key来sign。原创 2024-03-23 18:17:05 · 322 阅读 · 0 评论 -
安卓Java面试题 196- 200
196. 简述Android Window的更新过程 ? 说到Window的更新过程,个人认为其实也就是Window里面View的更新过程了,和创建/删除过程一样,最后照样也是到了WindowManagerGlobal里 面执行具体的操作了,具体来讲的话就是执行updateViewLayout方法了, 这个方法里面做了以下几件事: (1):首先获取到最新的View的 LayoutParams属性,然后将其设置到我们当前需要更新的View上面; (2):接着通过数组遍历的方式找到当前Vi原创 2024-03-23 18:07:52 · 234 阅读 · 0 评论 -
安卓Java面试题 191- 195
我们都知道平常在使用 Activity的过程中,只需要调用Activity的startActivity方法,传入适当的参数就可以启动一个我们想要启动的Activity 了,但是你知道这个过程中经历了些什么吗?(4):最后调用ViewRootImpl 的addView方法,这个方法里面真正的进行View添加操作是通过创建ViewRootImpl的时候创建的Session对象完成的,而在 Session中添加操作实际上是通过WindowManagerService完成的,后期的添加操作是有涉及到IPC通信的;原创 2024-03-22 23:08:45 · 233 阅读 · 0 评论 -
安卓面试题多线程 146-152
146. 简述AQS 支持两种同步方式 ? 1、独占式 2、共享式 这样方便使用者实现不同类型的同步组件,独占式如 ReentrantLock,共享式如Semaphore,CountDownLatch,组合式的如 ReentrantReadWriteLock。总之,AQS 为使用提供了底层支撑,如何组装实现,使用者可以自由发挥。 147. 简述ReadWriteLock 是什么 ? 首先明确一下,不是说 ReentrantLock 不好,只是 ReentrantLock 某些时候有局原创 2024-03-22 01:05:22 · 345 阅读 · 0 评论 -
安卓面试题多线程 141-145
141. 简述同步方法和同步块,哪个是更好的选择 ? 同步块是更好的选择,因为它不会锁住整个对象(当然你也可以让它锁住整个对象)。同步方法会锁住整个对象,哪怕这个类中有多个不相关联的同步块,这通常会导致他们停止执行并需要等待获得这个对象上的锁。 同步块更要符合开放调用的原则,只在需要锁住的代码块锁住相应的对象,这样从侧面来说也可以避免死锁 142. 简述如何创建守护线程 ? 使用 Thread 类的 setDaemon(true)方法可以将线程设置为守护线程,需要注意的是,需要在调用 st原创 2024-03-22 01:00:25 · 180 阅读 · 0 评论 -
安卓面试题多线程 136-140
136. 简述什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing ) ? 线程调度器是一个操作系统服务,它负责为 Runnable 状态的线程分配 CPU 时间。 一旦我们创建一个线程并启动它,它的执行便依赖于线程调度器的实现。 同上一个问题,线程调度并不受到 Java 虚拟机控制,所以由应用程序来控制它是更好的选择(也就是说不要让你的程序依赖于线程的优先级)。 时间分片是指将可用的 CPU 时间分配给可用的 Runnable 线程的过程。分配 C原创 2024-03-22 00:55:35 · 62 阅读 · 0 评论 -
安卓面试题多线程 131-135
131. 简述什么是阻塞式方法 ? 阻塞式方法是指程序会一直等待该方法完成期间不做其他事情,ServerSocket 的accept()方法就是一直等待客户端连接。这里的阻塞是指调用结果返回之前,当前线程会被挂起,直到得到结果之后才会返回。此外,还有异步和非阻塞式方法在任务完成前就返回 132. 简述volatile 变量和 atomic 变量有什么不同? Volatile 变量可以确保先行关系,即写操作会发生在后续的读操作之前, 但它并不能保证原子性。例如用 volatile 修饰 count原创 2024-03-22 00:50:59 · 65 阅读 · 0 评论 -
安卓面试题多线程 126-130
126. 简述为什么你应该在循环中检查等待条件? 处于等待状态的线程可能会收到错误警报和伪唤醒,如果不在循环中检查等待条件,程序就会在没有满足结束条件的情况下退出。 127. 简述Java 中的同步集合与并发集合有什么区别 ? 同步集合与并发集合都为多线程和并发提供了合适的线程安全的集合,不过并发集合的可扩展性更高。在 Java1.5 之前程序员们只有同步集合来用且在多线程并发的时候会导致争用,阻碍了系统的扩展性。Java5 介绍了并发集合像ConcurrentHashMap,不仅提供线程安全还原创 2024-03-21 18:26:23 · 225 阅读 · 0 评论 -
安卓面试题多线程 116-120
线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。顾名思义,内核模式就是指利用系统内核对象的单一性来进行同步,使用时需要切换内核态与用户态,而用户模式就是不需要切换到内核态,只在用户态完成操作。线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。原创 2024-03-20 15:16:01 · 139 阅读 · 0 评论 -
安卓面试题多线程 111-115
111. 简述在 Java 中 Executor 和 Executors 的区别 ? Executors 工具类的不同方法按照我们的需求创建了不同的线程池,来满足业务的需求。 Executor 接口对象能执行我们的线程任务。 ExecutorService 接口继承了 Executor 接口并进行了扩展,提供了更多的方法我们能获得任务执行的状态并且可以获取任务的返回值。 使用 ThreadPoolExecutor 可以创建自定义线程池Future 表示异步计算的结果,他提供了检查计算是原创 2024-03-20 14:26:02 · 88 阅读 · 0 评论 -
安卓面试题多线程 101-105
101. 简述Java体系中锁的优化机制 ? 从JDK1.6版本之后,synchronized本身也在不断优化锁的机制,有些情况下他并不会是一个很重量级的锁了。优化机制包括自适应锁、自旋锁、锁消除、锁粗化、轻量级锁和偏向锁。 锁的状态从低到高依次为无锁->偏向锁->轻量级锁->重量级锁,升级的过程就是从低到高,降级在一定条件也是有可能发生的。自旋锁:由于大部分时候,锁被占用的时间很短,共享变量的锁定时间也很短,所有没有必要挂起线程,用户态和内核态的来回上下文切换严重影响性能。自旋原创 2024-03-20 13:42:40 · 167 阅读 · 0 评论 -
安卓面试题多线程 96-100
96. 简述notify()和notifyAll()有什么区别 ? notify可能会导致死锁,而notifyAll则不会任何时候只有一个线程可以获得锁,也就是说只有一个线程可以运行synchronized 中的代码 使用notifyall,可以唤醒 所有处于wait状态的线程,使其重新进入锁的争夺队列中,而notify只能唤醒一个。 wait() 应配合while循环使用,不应使用if,务必在wait()调用前后都检查条件,如果不满足,必须调用notify()唤醒另外的线程来处理,自己继续原创 2024-03-20 03:08:55 · 69 阅读 · 0 评论 -
安卓面试题多线程 81-85
81. 共享变量在多线程下如何保证线程安全? 因为多线程是交替执⾏,每个线程操作共享变量时可能会导致数据不⼀致,要确保线程 安全,需要在访问共享变量时添加同步机制。当然,如果这个变量本⾝是线程安全的,⽐如AtomicLong,那么多线程访问也是安全 的 🚀🚀🚀🚀🚀🚀 82. Java中 是否共享变量都使⽤类似AtomicLong原⼦安全类,多线程访问就是安全的? 这个不确定,因为⽆法保证多个变量同时操作,⼀个原⼦变量可以保证⾃⼰的安全性,但是同时操作多个有逻辑依赖原⼦的变量,仍可原创 2024-03-19 21:05:47 · 175 阅读 · 0 评论 -
安卓面试题多线程 76-80
76. 简述普通线程与守护线程的区别 ? java 中的线程分为两种:守护线程(Daemon)和用户线程(User) 任何线程都可以设置为守护线程和用户线程,通过方法 Thread.setDaemon(boolon);true 则把该线程设置为守护线程,反之则为用户线程。Thread.setDaemon()必须在 Thread.start()之前调用,否则运行时会抛出异常。 两者的区别: 唯一的区别是判断虚拟机 (JVM)何时离开,Daemon 是为其他线程提供服务,如果全部的 Use原创 2024-03-19 21:02:07 · 186 阅读 · 0 评论 -
安卓面试题多线程 71-75
71. 简述线程池都有哪些状态? RUNNING:这是最正常的状态,接受新的任务,处理等待队列中的任务。 SHUTDOWN:不接受新的任务提交,但是会继续处理等待队列中的任务。 STOP:不接受新的任务提交,不再处理等待队列中的任务,中断正在执行任务的线程。 TIDYING:所有的任务都销毁了,workCount 为 0,线程池的状态在转换为 TIDYING 状态时,会执行钩子方法 terminated()。 TERMINATED:terminated()方法结束后,线程池的状态原创 2024-03-19 20:19:46 · 209 阅读 · 0 评论 -
安卓面试题多线程 66-70
66. 如何避免 Java 线程死锁? 要想避免死锁,只需要破坏掉至少一个构造死锁的必要条件即可,而在操作系统中,互斥条件和不可剥夺条件是系统规定的,这也没办法人为更改,而且这两个条件很明显是一个标准的程序应该所具备的特性。所以目前只有请求并持有和环路等待条件是可以被破坏的。 (1)保持加锁顺序:当多个线程都需要加相同的几个锁的时候(例如上述情况一的死锁),按照不同的顺序枷锁那么就可能导致死锁产生,所以我们如果能确保所有的线程都是按照相同的顺序获得锁,那么死锁就不会发生。 (2)获取锁添加时原创 2024-03-19 20:14:20 · 258 阅读 · 0 评论 -
安卓面试题多线程 61-65
61. 简述什么是原子操作?Java 中有哪些原子操作? java中的原子操作和线程安全是具有一定的联系性的,这其中的内容也是比较复杂的。它们所涉及的范围也是非常的广阔的。不知道你掌握了吗?一起来看看吧。 首先说一下,什么叫原子的(原子操作)? Java原子操作是指:不会被打断地的操作。(就是做到互斥和可见性) 那难道原子操作就可以真的达到线程安全同步效果了吗?实际上有一些原子操作不一定是线程安全的。那么,原子操作在什么情况下不是线程安全的呢? 也许是这个原因导致的:java线程原创 2024-03-19 20:10:45 · 189 阅读 · 0 评论 -
安卓面试题多线程56-60
60. 如何在 Java 中实现一个阻塞队列?原创 2024-03-19 20:05:37 · 92 阅读 · 1 评论 -
安卓面试题多线程51-55
51. 简述多线程中 synchronized 锁升级的原理? synchronized 锁升级原理:在锁对象的对象头里面有一个 threadid 字段,在第一次访问的时候 threadid 为空,jvm 让其持有偏向锁,并将 threadid 设置为其线程 id,再次进入的时候会先判断 threadid 是否与其线程 id 一致,如果一致则可以直接使用此对象,如果不一致,则升级偏向锁为轻量级锁,通过自旋循环一定次数来获取锁,执行一定次数之后,如果还没有正常获取到要使用的对象,此时就会把锁从轻量级升级为原创 2024-03-19 20:01:29 · 87 阅读 · 0 评论 -
安卓面试题多线程41-45
45. 简述Java Volatile 关键字的作用?44. 请简述Java线程池中的线程是怎么创建的?原创 2024-03-19 19:53:07 · 225 阅读 · 0 评论 -
安卓面试题多线程36-40
40. 简述如何让 Java 的线程彼此同步?38. 简述AQS 框架?原创 2024-03-19 19:49:06 · 181 阅读 · 0 评论 -
安卓面试题多线程31-35
31. 详细阐述volatile ?为什么它能保证变量对所有线程的可见性? volatile只能作用于变量,保证了操作可见性和有序性,不保证原子性。 在Java的内存模型中分为主内存和工作内存,Java内存模型规定所有的变量存储在主内存中,每条线程都有自己的工作内存。 主内存和工作内存之间的交互分为8个原子操作: 1.lock 2.unlock 3.read 4.load 5.assign 6.use 7.store 8.write vo原创 2024-03-19 19:44:32 · 330 阅读 · 0 评论 -
安卓面试题多线程26-30
26. 简述 Synchronized 的原理 ? (1)可重入性 synchronized的锁对象中有一个计数器(recursions变量)会记录线程获得几次锁; 可重入的好处: 可以避免死锁; 可以让我们更好的封装代码; synchronized是可重入锁,每部锁对象会有一个计数器记录线程获取几次锁,在执行完同步代码块时,计数器的数量会-1,直到计数器的数量为0,就释放这个锁。 (2)不可中断性 一个线程获得锁后,另一个线程想要获得锁,必须处于阻塞或等待状态原创 2024-03-19 18:17:37 · 25 阅读 · 0 评论 -
安卓面试题多线程21-25
21. 说明哪些Java集合类是线程安全的? Vector、HashTable、Properties和Stack是同步类,所以它们是线程安全的,可以在多线程环境下使用。Java1.5并发API包括一些集合类,允许迭代时修改,因为它们都工作在集合的克隆上,所以它们在多线程环境中是安全的。 🚀🚀🚀🚀🚀🚀 22. 请简述Java堆和栈的区别 ? 栈区(stack)由编译器自动分配释放 ,存放方法(函数)的参数值, 局部变量的值等,栈是向低地址扩展的数据结构,是一块连续的内存的区域。即栈顶的地址和栈原创 2024-03-19 18:17:12 · 37 阅读 · 0 评论 -
安卓面试题多线程11-15
11. 如何使用thread dump?你将如何分析Thread dump? 在UNIX中你可以使用kill -3,然后thread dump将会打印日志,在windows中你可以使用”CTRL+Break”。非常简单和专业的线程面试问题,但是如果他问你怎样分析它,就会很棘手。 🚀🚀🚀🚀🚀🚀 12. Java中你怎样唤醒一个阻塞的线程? 在Java中,线程可以通过等待/通知机制来实现线程之间的协作和同步。当一个线程需要等待另一个线程的某个条件满足时,可以调用wait()方法进入阻塞状态,并释原创 2024-03-18 17:15:59 · 169 阅读 · 0 评论 -
安卓面试题多线程5-10
6. 解释什么是死锁( deadlock )? 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去;此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 1:死锁的概念是什么? 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。原创 2024-03-18 17:02:18 · 73 阅读 · 0 评论 -
安卓面试题多线程1-5
1. 详细阐述Java进程和线程的区别 ? 进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;或者更专业化来说:进程是指程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。 线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。进程——资源分配的最小单位,线程——程序执行的最小单位。 线程进程的区别体现在4个方面: 1、因为进程拥有独立的堆栈空间和数据段原创 2024-03-18 16:38:54 · 444 阅读 · 0 评论 -
安卓面试网络知识基础 61-68
61. 简述交换机是如何转发数据包的 ? 交换机收到流量后,首先进行自学习功能,即将数据包中的MAC地址与接收到的接口进行绑定 存储在本地的MAC地址表中(二进制表格,CAM表),然后查看数据包中的目的MAC地址,查询本地的MAC地址表,如果存在记录,则按其进行转发即可,若不存在,那就除接收到的接口,向其他所有的接口进行洪范,这里其实是向处在同一个VLAN下的其他所有接口继续洪范 🚀🚀🚀🚀🚀🚀 62. 网络冗余技术有哪些(网络冗余是什么意思) ? 交换机的冗余性:spanning-tree、原创 2024-03-18 16:18:36 · 95 阅读 · 0 评论 -
安卓面试网络知识基础 56-60
56. 简述什么是子网掩码 ? 子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。 子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在广域网上。 子网掩码是在IPv4地址资源紧缺的背景下为了解决lP地址分配而产生的虚拟lP技术,通过子网掩码将A、B、C三类地址划分为若干子网,从原创 2024-03-18 16:11:27 · 69 阅读 · 0 评论 -
安卓面试网络知识基础 51-55
只有当设备连入网络时,才能根据他进入了哪个子网来为其分配IP地址,在设备还没有IP地址的时候,或者在分配IP的过程中。IP 地址可以比作为地址,MAC 地址为收件人,在一次通信过程中,两者是缺一不可的。而动态路由则是由动态路由协议自动维护的,不需人工干预,适合比较复杂大型的网络。静态路由是由管理员手工配置的,适合比较简单的网络或需要做路由特殊控制。我们需要MAC地址来区分不同的设备。原创 2024-03-18 16:00:33 · 28 阅读 · 0 评论