但调用 interrupt方法只是传递中断请求消息,并不代表要立马停止目标线程。

8、讲一下 java 中的同步的方法

之所以需要同步,因为在多线程并发控制,当多个线程同时操作一个可共享的资 源时,如果没有采取同步机制,将会导致数据不准确,因此需要加入同步锁,确 保在该线程没有完成操作前被其他线程调用,从而保证该变量的唯一一性和准确性。

1)synchronized 修饰同步代码块或方法

由于 java 的每个对象都有一个内置锁,用此关键字修饰方法时,内置锁会保护 整个方法。在调用该方法前,需获得内置锁,否则就处于阴塞状态。

2)volatile 修饰变量

保证变量在线程间的可见性,每次线程要访问 volatile 修饰的变量时都从内存中 读取,而不缓存中,这样每个线程访问到的变量都是一样的。且使用内存屏障。

3)ReentrantLock 重入锁,它常用的方法有 ReentrantLock:创建一个 ReentrantLock 实例 lock获得锁 unlock释放锁

4)使用局部变量 ThreadLocal 实现线程同步,每个线程都会保存一份该变量的 副本,副本之间相互独立,这样每个线程都可以随意修改自己的副本,而不影响其他线程。常用方法 ThreadLocal创建一个线程本地变量;get返回此线程局 部的当前线程副本变量;initialValue返回此线程局部变量的当前线程的初始 值;set(T value)将此线程变量的当前线程副本中的值设置为 value

5)使用原子变量,如 AtomicInteger,常用方法 AtomicInteger(int value)创 建个有给定初始值的 AtomicInteger 整数;addAndGet(int data)以原子方式 将给定值与当前值相加

6)使用阻塞队列实现线程同步 LinkedBlockingQueue

9、如何保证线程安全?

线程安全性体现在三方法:

1)原子性:提供互斥访问,同一时刻只能有一个线和至数据进行操作。

JDK中提供了很多atomic类,如 AtomicIntegerAtomicBooleanAtomicLong,它们是通过 CAS 完成原子性。JDK 提供锁分为两种:synchronized 依赖 JVM 实现锁,该关键字作用对象的 作用范围内同一时刻只能有一个线程进行操作。另一种是 LOCK,是 JDK 提供的代码层面的锁,依赖 CPU 指令,代表性是 ReentrantLock。

2)可见性:一个线程对主内存的修改及时被其他线程看到。

JVM 提供了 synchronized 和 volatile,volatile 的可见性是通过内存屏障和禁 止重排序实现的,volatile 会在写操作时,在写操作后加一条 store 屏障指令, 将本地内存中的共享变量值刷新到主内存;会在读操作时,在读操作前加一条 load 指令,从内存中读取共享变量。

3)有序性:指令没有被编译器重排序。

可通过 volatile、synchronized、Lock 保证有序性。

10、两个进程同时要求写或者读,能不能实现?如何防止进程的同步?

我认为可以实现,比如两个进程都读取日历进程数据是没有问题,但同时写,应 该会有冲突。

可以使用共享内存实现进程间数据共享。

二、Android 面试帮助篇1、要做一个尽可能流畅的 ListView,你平时在工作中如何进行优化的?

①Item 布局,层级越少越好,使用 hierarchyview 工具查看优化。

②复用 convertView

③使用 ViewHolder

④item 中有图片时,异步加载

⑤快速滑动时,不加载图片

⑥item 中有图片时,应对图片进行适当压缩

⑦实现数据的分页加载2、对于 Android 的安全问题,你知道多少

①错误导出组件

② 参数校验不严

③WebView 引入各种安全问题,webview 中的 js 注入

④不混淆、不防二次打包

⑤明文存储关键信息

⑦ 错误使用 HTTPS

⑧山寨加密方法

⑨滥用权限、内存泄露、使用 debug 签名3、如何缩减 APK 包大小?

代码保持良好的编程习惯,不要重复或者不用的代码,谨慎添加 libs,移除使用不到的 libs。

使用 proguard 混淆代码,它会对不用的代码做优化,并且混淆后也能够减少安 装包的大小。

native code 的部分,大多数情况下只需要支持 armabi 与 x86 的架构即可。如果 非必须,可以考虑拿掉 x86 的部分。

资源

使用 Lint 工具查找没有使用到的资源。去除不使用的图片,String,XML 等等。assets 目录下的资源请确保没有用不上的文件。

生成 APK 的时候,aapt 工具本身会对 png 做优化,但是在此之前还可以使用其 他工具如 tinypng 对图片进行进一步的压缩预处理。

jpeg 还是 png,根据需要做选择,在某些时候 jpeg 可以减少图片的体积。对于 9.png 的图片,可拉伸区域尽量切小,另外可以通过使用 9.png 拉伸达到大图效 果的时候尽量不要使用整张大图。

策略

有选择性的提供 hdpi,xhdpi,xxhdpi 的图片资源。建议优先提供 xhdpi 的图片, 对于 mdpi,ldpi 与 xxxhdpi 根据需要提供有差异的部分即可。

尽可能的重用已有的图片资源。例如对称的图片,只需要提供一张,另外一张图 片可以通过代码旋转的方式实现。

能用代码绘制实现的功能,尽量不要使用大量的图片。例如减少使用多张图片组 成 animate-list 的 AnimationDrawable,这种方式提供了多张图片很占空间。

4、Android 与服务器交互的方式中的对称加密和非对称加密是什么?

对称加密,就是加密和解密数据都是使用同一个 key,这方面的算法有 DES。非对称加密,加密和解密是使用不同的 key。发送数据之前要先和服务端约定生 成公钥和私钥,使用公钥加密的数据可以用私钥解密,反之。这方面的算法有 RSA。ssh 和 ssl 都是典型的非对称加密。

三、Android 面试常见题

**1、java 中==和 equals 和 hashCode 的区别 **

基本数据类型的==比较的值相等. 类的==比较的内存的地址,即是否是同一个对象,在不覆盖 equals 的情况下, 同比较内存地址,原实现也为 == ,如 String 等重写了 equals 方法. hashCode 也是 Object 类的一个方法。返回一个离散的 int 型整数。在集合类操作 中使用,为了提高查询速度。(HashMap,HashSet 等比较是否为同一个) 如果两个对象 equals,Java 运行时环境会认为他们的 hashcode 一定相等。如果两个对象不 equals,他们的 hashcode 有可能相等。如果两个对象 hashcode 相等,他们不一定 equals。如果两个对象 hashcode 不相等,他们一定不 equals。

2、int 与 integer 的区别

int 基本类型

integer 对象 int 的封装类

3、String、StringBuffer、StringBuilder 区别

String:字符串常量 不适用于经常要改变值得情况,每次改变相当于生成一个新 的对象

StringBuffer:字符串变量 (线程安全)

StringBuilder:字符串变量(线程不安全) 确保单线程下可用,效率略高于 StringBuffer

4、什么是内部类?内部类的作用

内部类可直接访问外部类的属性

Java 中内部类主要分为成员内部类、局部内部类(嵌套在方法和作用域内)、匿名 内部类(没构造方法)、静态内部类(static 修饰的类,不能使用任何外围类的 非 static 成员变量和方法, 不依赖外围类)

5、进程和线程的区别进程是 cpu 资源分配的最小单位,线程是 cpu 调度的最小单位。进程之间不能共享资源,而线程共享所在进程的地址空间和其它资源。一个进程内可拥有多个线程,进程可开启进程,也可开启线程。一个线程只能属于一个进程,线程可直接使用同进程的资源,线程依赖于进程而存在。

6、final,finally,finalize 的区别final:修饰类、成员变量和成员方法,类不可被继承,成员变量不可变,成员方法 不可重写

finally:与 try...catch...共同使用,确保无论是否出现异常都能被调用到

finalize:类的方法,垃圾回收之前会调用此方法,子类可以重写

finalize方法实现对 资源的回收

7、Serializable 和 Parcelable 的区别

Serializable Java 序列化接口 在硬盘上读写 读写过程中有大量临时变量的生成, 内部执行大量的 i/o 操作,效率很低。

Parcelable Android 序列化接口 效率高 使用麻烦 在内存中读写(AS 有相关插件 一键生成所需方法) ,对象不能保存到磁盘中

8、静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?

可继承 不可重写 而是被隐藏

如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为 "隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名 完成。

9、成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用Java 中内部类主要分为 成员内部类、局部内部类(嵌套在方法和作用域内)、 匿名内部类(没构造方法)、 静态内部类(static 修饰的类,不能使用任何外围类的 非 static 成员变量和方法, 不依赖外围类)

使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现, 所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。

因为 Java 不支持多继承,支持实现多个接口。但有时候会存在一些使用接口很 难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者 抽象的类的能力来解决这些程序设计问题。可以这样说,接口只是解决了部分问 题,而内部类使得多重继承的解决方案变得更加完整。

10、string 转换成 integer 的方式及原理

String integer Intrger.parseInt(string);

Integer string Integer.toString;

四、初级面试专题(中小厂)

1、导致内存泄露的原因有哪些?

2、理解 Activity,View,Window 三者关系

3、Handler 的原理

4、View,ViewGroup 事件分发

5、onNewIntent什么时候调用?(singleTask)

6、mvc 和 mvp mvvm

7、自定义控件

8、Serializable 和 Parcelable 的区别

最后

因文章篇幅长度篇幅限制,后续内容我就不一一的展现出来了。我已将后续的内容上传至我的 GitHub项目上来,如果有需要学习参考可以自行取得。

点赞和在看就是最大的支持返回搜狐,查看更多

安卓线程同步面试_Android 面试主题集合整理相关推荐

  1. 安卓线程同步面试_Android面试题

    1.java的重载和重写分别是什么含义? 重载: (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载Overloading是一个类中多态 ...

  2. 安卓线程同步面试_面试BAT大厂,可少不了这些题目!

    点击上方的终端研发部,右上角选择"设为星标" 每日早8点半,技术文章准时送上 公众号后台回复"学习",获取作者独家秘制精品资料 往期文章 走出腾讯和阿里,大厂员 ...

  3. 史上最强多线程面试44题和答案:线程锁+线程池+线程同步等

    最全BAT必考题答案系列 最全MySQL面试60题和答案 史上最全Spring面试71题与答案 史上最全Redis面试49题(含答案):哨兵+复制+事务+集群+持久化等 分布式缓存Redis+Memc ...

  4. Android面试之线程同步的方法

    一 什么是进程和线程?进程和线程的区别? 进程是资源分配的最小单元,线程是程序执行的最小单元(进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位) 进程有自己的独立地址空间,每启动一个 ...

  5. Java高级面试-超级全面-大厂集合

    Java研发工程师知识点总结 大纲 一.Java基础(语言.集合框架.OOP.设计模式等) 二.Java高级(JavaEE.框架.服务器.工具等) 三.多线程和并发 四.Java虚拟机 五.数据库(S ...

  6. Java 如何线程间通信,面试被问哭。。。

    Java 如何线程间通信,曾经小编面试被问哭的一道题.. 正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了. 本文涉及 ...

  7. 安卓开发者!Android中高级面试必知必会,详细的Android学习指南

    一些感悟 穷人的一次失败,为了还债可能一辈子都翻不了身,为还债一辈子送外卖.你将不再会有精力去思考和投机.穷人的失败可能断送了他所有暴富的机遇和时间,让不确定的人生瞬间确定下来,让充满无限可能的人生可 ...

  8. 程序员面试金典——9.4集合的子集

    程序员面试金典--9.4集合的子集 Solution1:我的答案 该思路本质上是递归,递归的迭代式写法.之前做过类似的题,这个思路就挺好! class Subset { public:vector&l ...

  9. 程序员面试金典——3.3集合栈

    程序员面试金典--3.3集合栈 Solution1:主要总结下关于vector不太常用的函数 (1)c.pop_back():删除vector对象c中最后一个元素,若c为空,则函数行为未定义.函数返回 ...

最新文章

  1. 利用SIFT和RANSAC算法(openCV框架)实现物体的检测与定位,并求出变换矩阵(findFundamentalMat和findHomography的比较)
  2. pku 1191 棋盘分割 DP / 记忆化搜索
  3. 矢量合成和分解的法则_重点解析丨抛体运动 之 运动的合成与分解
  4. 高倍数泡沫装置PHP_找煤机网:BGP高倍数泡沫灭火装置
  5. 命令点无效怎么处理_CAD执行修改命令,你试过重复选择对象吗?
  6. array python 交集_模糊数学Python库简介和评测
  7. 趣解 XSS和CSRF的原理
  8. 使用 jQuery Mobile 与 HTML5 开发 Web App (三) —— jQuery Mobile 按钮
  9. 机器学习方向企业面试题(一)
  10. 在Centos下启用mysql的远程访问账号
  11. 大工18秋计算机应用基础1,大工18秋《计算机应用基础》在线测试1答案.pdf
  12. 【李宏毅2020 ML/DL】P3 Regression - Case Study
  13. Python-二分及bisect模块
  14. 用wxpython编写登录界面_wxpython+pymysql实现用户登陆功能
  15. FlexSim仿真软件入门笔记:基本操作、快捷键
  16. 一笔四线连9点你可以吗
  17. 域名过期导致的问题-研究DNS相关知识
  18. Python 数据科学入门教程:Pandas
  19. vi使用的时候按esc后按**shift + :**时进入不了末行
  20. 人工智能轨道交通行业周刊-第44期(2023.5.8-5.14)

热门文章

  1. wince 默认输入法_wince下中文输入法
  2. iPhone4升级到ios5教程
  3. python双星号是什么意思_Python字典前双星号(**)的作用
  4. Hive SQL经典面试题:统计连续登陆的三天及以上的用户
  5. MDT/UML2/Getting Started with UML2及我自己的一些理解
  6. 空间规划中的“以流定形”:空间关系-空间活动-空间网络
  7. 风华才气,春华秋实———忆信管学子杨友岁月如歌
  8. 内是不是半包围结构_半包围结构(软笔)
  9. 超大跨度桥梁建设如何突破特异风致灾风险的困局?
  10. 自媒体如何找免费素材