「java面试阿里」阿里java面试经验
今天给各位分享java面试阿里的知识,其中也会对阿里java面试经验进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
java社招如何面阿里
1)Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap,TreeMap这一类的。以下简单模拟一个数据结构的连环炮。
比如,面试官先问你HashMap是不是有序的?
你肯定回答说,不是有序的。那面试官就会继续问你,有没有有顺序的Map实现类?
你如果这个时候说不知道的话,那这个问题就到此结束了。如果你说有TreeMap和LinkedHashMap。
那么面试官接下来就可能会问你,TreeMap和LinkedHashMap是如何保证它的顺序的?
如果你回答不上来,那么到此为止。如果你依然回答上来了,那么面试官还会继续问你,你觉得它们两个哪个的有序实现比较好?
如果你依然可以回答的话,那么面试官会继续问你,你觉得还有没有比它更好或者更高效的实现方式?
如果你还能说出来的话,那么就你所说的实现方式肯定依然可以问你很多问题。
以上就是一个面试官一步一步提问的例子。所以,如果你了解的不多,千万不要敷衍,因为可能下一个问题你就暴露了,还不如直接说不会,把这个问题结束掉,赶紧切换到你熟悉的领域。
01
2)Java并发包当中的类,它们都有哪些作用,以及它们的实现原理,这些类就是java.concurrent包下面的。与上面一样,咱们也简单的模拟一个并发包的连环炮。
比如面试官可能会先问你,如果想实现所有的线程一起等待某个事件的发生,当某个事件发生时,所有线程一起开始往下执行的话,有什么好的办法吗?
这个时候你可能会说可以用栅栏(Java的并发包中的CyclicBarrier),那么面试官就会继续问你,你知道它的实现原理吗?
如果你继续回答的话,面试官可能会继续问你,你还知道其它的实现方式吗?
如果你还能说出很多种实现方式的话,那么继续问你,你觉得这些方式里哪个方式更好?
如果你说出来某一个方式比较好的话,面试官依然可以继续问你,那如果让你来写的话,你觉得还有比它更好的实现方式吗?
如果你这个时候依然可以说出来你自己更好的实现方式,那么面试官肯定还会揪着这个继续问你。
为什么说面试的时候要引导面试官,原因就在这了。
因为面试官的提问很多时候都是有迹可循的,你如果抓住了他的轨迹,能够猜到他下面很可能会问什么,那你在回答的时候就可以往你想要谈的方向去说。这样面试时就会显得更加从容,更加的游刃有余。
02
3)IO包和NIO包中的内容。这部分里面NIO会是重点,IO包大部分都会比较熟悉,因此可能会直接略过,直接问你NIO的内容。
IO包和NIO包的内容相对来说不是很多,首先NIO模型要熟悉,特别是其中的selector一定要非常清楚它的职责和实现原理。其实NIO的核心是IO线程池,一定要记住这个关键点。有的时候,面试官可能也会问你IO包的设计模式(装饰器模式),为什么要这样设计?
有的面试官还会问你有没有更好的设计,这个时候如果你不知道请果断说自己现在的水平有限,想不出来更好的设计,千万不要信口开河,随意YY。
03
4)Java的虚拟机的内容。这部分主要包括三部分,GC、类加载机制,以及内存。一个GC部分简单的连环炮。
阿里面试官:讲解一下JNI的三种引用
从Java虚拟机创建的对象传到本地 C/C++ 代码时就会产生引用。根据Java的垃圾回收机制,只要有引用存在就不会触发该引用指向的Java对象的垃圾回收。这些引用在 JNI 中分为三种
全局引用 (Global Reference)
局部引用 (Local Reference)
弱全局引用 (Weak Global Reference), JDK 1.2 引入
最常见的引用类型,基本上通过JNI返回来的引用都是局部引用
例如,使用NewObject就会返回创建出来的实例的局部引用。局部引用只在该native函数中有效,所有在该函数中产生的局部引用,都会在函数返回的时候自动释放(freed)。也可以使用DeleteLocalRef函数进行手动释放该引用。
想一想既然局部引用能够在函数返回时自动释放,为什么还需要DeleteLocalRef函数呢?
实际上局部引用存在,就会防止其指向的对象被垃圾回收。尤其是当一个局部引用指向一个很庞大的对象,或是在一个循环中生成了局部应用;最好的做法就是在使用完该对象后,或在该循环尾部把这个引用释放掉,以确保在垃圾回收器被触发的时候被回收。
在局部引用的有效期中,可以传递到别的本地函数中,要强调的是它的有效期仍然只在一次的Java本地函数调用中,所以千万不能用C++全局变量保存它或是把它定义为C++静态局部变量。
全局引用可以跨越当前线程,在多个native函数中有效,不过需要编程人员手动来释放该引用。全局引用存在期间会防止在Java的垃圾回收的回收。
与局部引用不同,全局引用的创建不是由 JNI 自动创建的,全局引用需要调用 NewGlobalRef 函数,而释放它需要使用 ReleaseGlobalRef 函数。
弱全局应用是 JDK 1.2 新出来的功能,与全局引用相似,创建跟释放都需要由编程人员来进行操作。这种引用与全局引用一样可以在多个本地代码有效,也可以跨越多线程有效;不一样的是,这种引用将不会阻止垃圾回收器回收这个引用所指向的对象。
使用 NewWeakGlobalRef 跟 ReleaseWeakGlobalRef 来产生和释放应用。
IsSameObject 函数对于弱引用全局应用还有一个特别的功能,把NULL传入要比较的对象中,就能够判断弱全局引用所指向的Java对象是否被回收。
获取 jfieldID与jmethodID 的时候会通过该属性/方法名称加上签名来查询相应的 jfieldID/jmethodID。这种查询相对来说开销较大。在开发中可以将这些 FieldID/MethodID 缓存起来,这样就只需要查询一次,以后就使用缓存起来的 FieldID/MethodID。
下面介绍两种缓存方式
在使用时缓存 (Caching at the Point of Use)
在Java类初始化时缓存 (Caching at the Defining Class's Inititalizer)
在native 代码中使用static局部变量来保存已经查询过的jfieldID/jmethodID ,这样就不会在每次的函数调用时查询,而只要一次查询成功后就保存起来了。
不过这种情况下,就不得不考虑多线程同时调用此函数时可能导致同时查询的并发问题,不过这种情况是无害的,因为查询同一个属性或者方法的ID,通常返回的值是一样的。
更好的一个方式就是在任何native函数调用之前把id全部缓存起来。
可以让Java在第一次加载这个类的时候,首先调用本地代码初始化所有的 jfieldID/jmethodID,这样的话就可以省去多次判断id是否存在的冗余代码。当然,这些 jfieldID/jmethodID 是定义在C/C++ 的全局。
使用这种方式还有好处,当Java类卸载或者重新加载的时候,也会重新调用该本地代码来重新计算IDs。
java代码
C/C++ 代码
最简单的Java调用C/C++函数的方法
获取方法/属性的ID;学会了获取/设置属性;还有Java函数的调用
Java/C++之间的字符串的转换问题
在C/C++下如何操作Java的数组
三种引用方式
如何缓存属性/方法的ID
使用了JNI,那么这个Java应用将不能跨平台了。如果要移植到别的平台上,那么native代码就需要重新进行编写
Java是强类型的语言,而C/C++不是。因此,必须在写JNI时倍加小心
总之,必须在构建Java程序的时候,尽量不用或者少用本地代码
附
异常处理
C/C++ 如何启动JVM
JNI与多线程
java 一道算法题,阿里面试的题,我同学给我的,希望有人解答下?
HashMapString, Object ihp = new LinkedHashMapString, Object();
自定义一个类
static class MyMap
{
List[] lists;
public MyMap(List... lists)
{
this.lists = lists;
}
public String toString()
{
if (lists == null || lists.length == 0)
{
return "{}";
}
StringBuilder sb = new StringBuilder();
sb.append('{');
int i = 0;
for (List list: lists)
{
sb.append(list);
i++;
if (i == lists.length)
return sb.append('}').toString();
sb.append(",");
}
return "{}";
}
}
ihp.put("on1",new MyMap(list2,list1));
ihp.put("on2",new MyMap(list4,list3));
ihp.put("on3",new MyMap(list5));
ihp.put("on4",new MyMap(list6));
System.out.println(ihp.toString());
估计有更好的办法,最开始想到的是List[],发现打印出来是[[xxx,xxx,xxx],[xx,x,x]]这种结构
阿里java第二轮面试40分钟结束有戏吗
有机会成功的,面试时间长,有可能是面试官对你的技术比较感兴趣,喜欢和你多聊一会儿的。
关于java面试阿里和阿里java面试经验的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-03,除非注明,否则均为
原创文章,转载请注明出处。