面试题-JVM内存溢出之后其他线程能正常工作吗
[TOC]
概述文章参考:https://mp.weixin.qq.com/s?__biz=MzUzMTA2NTU2Ng==&mid=2247487176&idx=1&sn=5555114ea990e77e08eac3ac0bdf39c9&chksm=fa497179cd3ef86f4b75ce7b82c3e7d25bd4dffce458f1df0e9437c0cbec2ae8268aacf81b06&mpshare=1&scene=1&srcid=#rd
最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”。我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。
由于题目中给出的OOM,java中OOM又分很多类型;比如:
1、堆溢出(“java.lang.OutOfMemoryError: Java heap space”)、
2、永久带溢出(“java.lang.OutOfMemoryError:Permgen space”)、
3、不能创 ...
Android之性能监控框架
[TOC]
文章参考:https://blog.csdn.net/qq_16669583/article/details/106220189
文章参考:https://www.cnblogs.com/albertrui/p/14577656.html
概述I/O 模型简单理解为:就是使用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。
Java 支持 3 种网络编程模型:BIO、NIO、AIO
BIO(Block IO)BIO (Blocking I/O):同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。这里使用那个经典的烧开水例子,这里假设一个烧开水的场景,有一排水壶在烧开水,BIO的工作模式就是, 叫一个线程停留在一个水壶那,直到这个水壶烧开,才去处理下一个水壶。但是实际上线程在等待水壶烧开的时间段什么都没有做。
BIO的服务端通信模型简单来说就是:采用BIO通信模型的服务端,通常由一个独立的Acceptor线程负责监听客户端的连接,它接收到客户端连接请求之后为每个客户端创建一个新的线程进行链路处理没处理完成后,通过 ...
Android之性能监控框架
[TOC]
概述在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类。
ByteBuffer提供了两种静态实例方式:
public static ByteBuffer allocate(int capacity)
public static ByteBuffer allocateDirect(int capacity)
为什么要提供两种方式呢?这与Java的内存使用机制有关。
第一种分配方式产生的内存开销是在JVM中的,而另外一种的分配方式产生的开销在JVM之外,也就是系统级的内存分配。
当Java程序接收到外部传来的数据时,首先是被系统内存所获取,然后在由系统内存复制复制到JVM内存中供Java程序使用。
所以在另外一种分配方式中,能够省去复制这一步操作,效率上会有所提高。可是系统级内存的分配比起JVM内存的分配要耗时得多,所以并非不论什么时候allocateDirect的操作效率都是最高的。
以下是一个不同容量情况下两种分配方式的操作时间对照:
由图能够看出,当操作数据量非常小时,两种 ...
Java随机数之ThreadLocalRandom学习
[TOC]
挑战10个最难回答的Java面试题(附答案)https://juejin.im/post/5d5033c86fb9a06b031fefca
Java随机数之ThreadLocalRandom学习
[TOC]
文章参考:https://www.cnblogs.com/en-heng/p/5041124.html
Java泛型的逆变与协变用来描述类型转换(type transformation)后的继承关系。
其定义:如果A、B表示类型,f(⋅)表示类型转换,≤表示继承关系(比如,A≤B表示A是由B派生出来的子类)
f(⋅)是逆变(contravariant)的,当A≤B时有f(B)≤f(A)成立;f(⋅)是协变(covariant)的,当A≤B时,有f(A)≤f(B)成立;f(⋅)是不变(invariant)的,当A≤B时上述两个式子均不成立,即f(A)与f(B)相互之间没有继承关系。
数组是协变的Java中数组是协变的,可以向子类型的数组赋予基类型的数组引用,请看下面代码。
1234567891011121314151617181920212223// CovariantArrays.javaclass Fruit {}class Apple extends Fruit {}class Jonathan extends Apple ...
Java随机数之ThreadLocalRandom学习
[TOC]
文章转自:https://blog.csdn.net/lonelyroamer/article/details/7868820
文章转自:https://blog.csdn.net/briblue/article/details/76736356
文章参考:https://www.ibm.com/developerworks/cn/java/java-language-type-erasure/index.html
泛型概述泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
Java 5 支持泛型类, ...
Android中高级面试题大纲
[TOC]
文章参考:https://blog.csdn.net/singwhatiwanna/article/details/106846308
文章参考:https://blog.csdn.net/huangqili1314/article/details/79824830
文章参考:https://blog.csdn.net/chuhe1989/article/details/104385096
文章参考:https://www.cnblogs.com/huangjialin/p/12411842.html
文章参考:https://juejin.im/post/6844903891625050119
文章参考:https://www.jianshu.com/p/5e5908ab3ea9
概述但是发现纯看面试题是不行的,因为靠背的东西是记不牢的,需要知识成体系才可以,所以笔者整理了一份复习大纲,基本涵盖了 Android 中高级工程师面试所必须知识点,希望可以通过此文帮助一些想换工作的朋友更好的复习,准备面试。本文只罗列出大纲内容,至于每个模块的详细内容,网上很多资料,可自行查阅 ...
Android之BroadcastReceiver基础学习
[TOC]
概述Ubuntu Linux中设置adb环境变量系统:linux ubuntu12
1. 配置环境变量
复制代码代码如下:
1sudo gedit /etc/profile
在文件的最后追加一下内容(your_android-sdk-linux_path是绝对路径):
复制代码代码如下:
123#set path for android sdk toolsexport PATH=$PATH:/your_android-sdk-linux_path/tools/export PATH=$PATH:/your_android-sdk-linux_path/platform-tools/
复制代码代码如下:
123#set path for android sdk toolsexport PATH=$PATH:/home/zhangle/software/android-sdk-linux/tools/export PATH=$PATH:/home/zhangle/software/android-sdk-linux/platform-tools/
保存后,同步 ...
Android之OKHttp3学习(基于Kotlin)
[TOC]
文章参考:https://www.jianshu.com/p/abcc381a3a27
概述OkHttp3的使用添加依赖库具体请求Http 请求有多种类型,常用的分为 Get 和 Post,而 POST 又分为 Form 和 Multiple 等,下面我们以Get请求为例:
123456789101112131415161718192021222324// 1.创建OkHttpClient 对象,// var client = OkHttpClient();//方式一 //方式二: val client = OkHttpClient.Builder().readTimeout(5, TimeUnit.SECONDS).build() //2.创建请求对象并添加请求参数信息 val request = Request.Builder().url("").build() //3.构建进行请求操作的call对象 val call = client.newCall(request) //同步请求 Call (RealCall)—>execute() 返回r ...
leakcanary2.0的学习与使用
[TOC]
概述源码参考:https://github.com/square/leakcanary
官网地址:https://square.github.io/leakcanary/
我们先看一下使用方法:添加依赖
1234567891011121314151617// 1.0的最新版本 debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3'// Optional, if you use support library fragments:debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.3'public class MyApp extends MultiDexApplication & ...