流利说

作者: 潇萧之炎 | 来源:发表于2022-02-10 18:27 被阅读0次

1.怎么终止一个正在运行的线程,如果线程是wait

https://blog.csdn.net/youanyyou/article/details/104509220/

(1)使用退出标志,使线程正常退出,也就是当run方法完成后线程终止
(2)使用interrupt方法中断线程。(调用interrupt方法是在当前线程中打了一个停止标志,并不是真的停止线程)
(3)使用stop方法强行终止,但是不推荐。(stop()方法作废,因为如果强制让线程停止有可能使一些清理性的工作得不到完成。
另外一个情况就是对锁定的对象进行了解锁,导致数据得不到同步的处理,出现数据不一致的问题)
(4)sleep()状态下停止线程,那么会抛异常java.lang.InterruptedException: sleep interrupted

2.单例模式

两次判空:(1)避免不必要的同步;(2)避免创建相同的对象
volatile作用:禁止指令重排序,避免产生未初始化的对象

3.事件分发中,MotionEvent.ACTION_CANCEL事件什么情况下被触发

https://juejin.cn/post/6874589638925746190#heading-9

(1)当用户保持按下操作,并从你的控件转移到外层控件时,会触发ACTION_CANCEL,触发cancel事件就不会接收到up事件
(2)View收到ACTION_DOWN事件以后,上一个事件还没有结束(可能因为APP的切换、ANR等导致系统扔掉了后续的事件),这个时候会先执行一次ACTION_CANCEL
(3)子View之前拦截了事件,但是后面父View重新拦截了事件,这个时候会给子View发送ACTION_CANCEL事件

如何解决滑动冲突,两个方法:
(1)通过重写父类的 onInterceptTouchEvent 来拦截滑动事件
(2)通过在子类中调用 parent.requestDisallowInterceptTouchEvent 来通知父类是否要拦截事件,

4.handler产生内存泄漏的原因

问题1:Message的target其实是handler,持有activity的引用
问题2:handler的postDelay(1)和postDelay(3)是如何实现的
(17条消息) 你真的懂Handler.postDelayed()的原理吗?_qingtiantianqing的博客-CSDN博客_handler postdelayed

具体:
postDelay()一个10秒钟的Runnable A、消息进队,MessageQueue调用nativePollOnce()阻塞,Looper阻塞;
紧接着post()一个Runnable B、消息进队,判断现在A时间还没到、正在阻塞,把B插入消息队列的头部(A的前面),然后调用nativeWake()方法唤醒线程;
MessageQueue.next()方法被唤醒后,重新开始读取消息链表,第一个消息B无延时,直接返回给Looper;
Looper处理完这个消息再次调用next()方法,MessageQueue继续读取消息链表,第二个消息A还没到时间,计算一下剩余时间(假如还剩9秒)继续调用nativePollOnce()阻塞;
直到阻塞时间到或者下一次有Message进队;
这样,基本上就能保证Handler.postDelayed()发布的消息能在相对精确的时间被传递给Looper进行处理而又不会阻塞队列了。

5.git rebase和git merge区别

https://www.jianshu.com/p/4079284dd970

rebase方式不会产生新的commit,但是merge方式必须产生新的commit。
rebase会把你当前分支的 commit 放到公共分支的最后面,所以叫变基,相当于是更改了基点。就好像你从公共分支又重新拉出来这个分支一样。
举例:如果你从 master 拉了个feature分支出来,然后你提交了几个 commit,这个时候刚好有人把他开发的东西合并到 master 了,
这个时候 master 就比你拉分支的时候多了几个 commit,如果这个时候你 rebase master 的话,就会把你当前的几个 commit,放到那个人 commit 的后面。

6.ViewModel是如何在Activity发生旋转时保留数据的

https://blog.csdn.net/jackzhouyu/article/details/109031202 (完整答案,非常好仔细看,涉及AMS)

因为ViewModel会使用一个空的fragment会保存数据,是系统帮我们保存的,可以设置isChangingConfigurations返回true(setSavedeainsace?)

model = new ViewModelProvider(this).get(NotifyDeModel.class);
先去ComponentActivity的ViewModelStore内的HashMap去查找,如果找到就直接复用,反之则会利用反射创建一个ViewModel并保存到HashMap中去,以后需要时复用即可

在onDestroy之前,会保存Activity的retainNonConfigurationInstances()方法返回值,而这个retainNonConfigurationInstances()
就来源于Activity的onRetainNonConfigurationInstance()方法,保存了NonConfigurationInstances实例,这个实例里面就保存了ViewModelStore

7.retrofit

问题1:动态代理
问题2:一般会有哪些设置addgSonFactory、Adapter作用
mRetrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(GSON))
.addCallAdapterFactory(LiveDataCallAdapterFactory.create())

8.hook的应用

换肤

相关文章

  • 流利说,流利说英语

    说一口流利的英语是我多年的梦想。2014年7月,女儿开始在杨东东老师那边学习《走遍美国》,我也跟着一起学。可是效果...

  • 流利说

    litter tt发de garbage垃圾 trash垃圾桶 put down 放下,put down keys...

  • 流利说

    I am a slow walker,but I never walk back. 我走的不快,但我从不回头。 L...

  • 流利说

    今天学到了一个新概念,原来不止词汇量大的人才会流利说英语。词汇量少的人也可以流利说英语。无非就是话白一点,句子结构...

  • 流利说

    1.怎么终止一个正在运行的线程,如果线程是wait https://blog.csdn.net/youanyyou...

  • 20200319@前端早读课

    【第1889期】提升流利说图片生产10倍效率的方法 概要:流利说前端开发2019加入流利说,主要负责流利说APP商...

  • 流利说英语需要“英语流利说”

    声明:这不是一篇广告软文,只是将自己所见所思写出来。 最近受到学英语朋友们的推荐,再次下载了英语流利说APP,这是...

  • 流利说英语就选英语流利说

    英语就是说话。说话就得一句一句说。想流利说好每一句英语,可以下载一个英语流利说,比较简单实用。 一 可以先选择轻...

  • 英语流利说

    懂你英语 Level 2 - Unit 3 - Part 2 Listening Yesterday's Sche...

  • 英语流利说

    懂你英语 Level 2 - Unit 3 - Part 1 Listening Bus Schedule Her...

网友评论

      本文标题:流利说

      本文链接:https://www.haomeiwen.com/subject/nwqokrtx.html