2021年3月29日 阿里菜鸟实习面试(一面)(含部分总结)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了2021年3月29日 阿里菜鸟实习面试(一面)(含部分总结),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3532字,纯文字阅读大概需要6分钟。
内容图文
![2021年3月29日 阿里菜鸟实习面试(一面)(含部分总结)](/upload/InfoBanner/zyjiaocheng/1017/7bf36f5aeac44ae98ef9bcc69d124148.jpg)
title: 2021年3月29号 阿里菜鸟实习面试(一面)
tags: 面经
2021年3月29日 阿里菜鸟实习面试(一面)
自我介绍
你为什么想做Java开发工程师
你还做了除了飞机大战,还做了什么Java的项目吗?
你讲讲你付出精力最多的项目,讲讲你做了什么工作以及达到什么效果呢?
讲讲你的飞机大战的多线程编程是如何编写的
你是如何实现多线程的呢?还有没其他的方式去实现线程安全呢?
介绍一下synchronized关键字以及底层实现原理
synchronized修饰这个类的时候,会对类中的实例对象加锁吗?
wait和sleep的区别
常见的集合类的你有看过吗?(list,set,map)
你能把这三者的整体框架说一下吗?就是这三者都有哪些实现子类啥的(见下文)
map的数据结构说一下(其实只要说一说hashmap即可)
看过hashmap的实现源码?它对null值支持吗?它是如何实现对null支持的呢?(见下文)
讲一下Java虚拟机的结构(方法区,堆区,虚拟机栈,本地方法栈,程序计数器)
定义 String s = new String(“abc”); 那它在虚拟机中整个的内存分配的过程是怎么样的?(见下文)
你用Java哪个版本呢?你了解lambda 表达式吗?(见下文)
项目的源码你有看过吗?比如说你看到过spring源码吗?
你平常会看哪些开源项目的源码呢?
你有没有做过一个这样一个Java项目呢?
你平常有去关注现在主流的一些框架吗?
反问环节
1.1你能把这三者的整体框架说一下吗?就是这三者都有哪些实现子类啥的
![2021年3月29日 阿里菜鸟实习面试(一面)(含部分总结) - 文章图片](/upload/getfiles/0001/2021/5/18/20210518081658319.jpg)
1.2 看过hashmap的实现源码?它对null值支持吗?它是如何实现对null实现的呢?(见下文)
肯定是支持null值。
实现过程:
HashMap在put的时候会调用hash()方法来计算key的hashcode值,可以从hash算法当中,当key==null时的返回值为0;因此key为null时,hash算法返回值为0,不会调用key的hashcode方法。
这里可以补充一个知识点:***hashtable,对于null值会抛出异常,而对于null键,则会调用null.hashCode(),而导致空指针异常*,而**concurrenthashmap则对于null键值对,直接抛出空异常****。
ConcurrentHashMap不能put null 是因为 无法分辨是key没找到的null,还是有key值为null,这在多线程里面是模糊不清的,所以压根就不让put null。
1.3 定义 String s = new String(“abc”); 那它在虚拟机中整个的内存分配的过程是怎么样的?(见下文)
参考博客:通过Java虚拟机理解String s=new String(“abc”);创建几个对象
当我们写上 String s = new String(“abc”); 时,这里会创建两个对象,一个存放在堆中的 new String(“abc”);**一个是存放在运行时常量池的中的“abc” **。之所以会有存放在常量池总的abc是因为字符串类型的元素会经常创建,如果又新创建一个对象,如String s2=“abc”,这里会直接指向常量池中的”abc“字符串,避免重复创建,提高效率。
1.4 你用Java哪个版本呢?你了解lambda 表达式吗?(见下文)
Lambda表达式:
Lambda 表达式在 Java 语言中引入了一个新的语法元素和操作符。这个操作符为 “->”,该操作符被称 为 Lambda 操作符或箭头操作符。它将 Lambda 分为两个部分:
- 左侧:指定了 Lambda 表达式需要的所有参数
- 右侧:指定了 Lambda 体,即 Lambda 表达式要执行的功能。
Lambda 表达式,也可称为闭包,它是推动Java 8 发布的最重要新特性。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
使用 Lambda 表达式需要注意以下两点:
- Lambda 表达式主要用来定义行内执行的方法类型接口,例如,一个简单方法接口。
- Lambda 表达式免去了使用匿名方法的麻烦,并且给予Java简单但是强大的函数化的编程能力。
使用Lambda表达式的要求:
也许你已经想到了,能够使用Lambda的依据是必须有相应的 函数接口。
函数接口,是指内部只有一个抽象方法的接口。这一点跟Java是强类型语言吻合,也就是说你并不能在代码的任何地方任性的写Lambda表达式。实际上Lambda的类型就是对应函数接口的类型。Lambda表达式另一个依据是类型推断机制,在上下文信息足够的情况下,编译器可以推断出参数表的类型,而不需要显式指名。
在Java 8里面,所有的Lambda的类型都是一个接口,而Lambda表达式本身,也就是”那段代码“,需要是这个接口的实现。这是我认为理解Lambda的一个关键所在,简而言之就是,Lambda表达式本身就是一个接口的实现。
内容总结
以上是互联网集市为您收集整理的2021年3月29日 阿里菜鸟实习面试(一面)(含部分总结)全部内容,希望文章能够帮你解决2021年3月29日 阿里菜鸟实习面试(一面)(含部分总结)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。