Java面试题(蚂蚁花呗)
1、Java容器有哪些,哪些是同步容器,哪些是并发容器?
Java容器类类库的用途是“持有对象”,并将其划分为两个不同的概念:
- Collection:一个独立元素的序列,这些元素都服从一条或者多条规则。 List必须按照插入的顺序保存元素,而set不能有重复的元素。Queue按照排队规则来确定对象产生的顺序(通常与它们被插入的顺序相同)。
- Map:一组成对的“键值对”对象,允许你使用键来查找值。
Java中容器间的继承关系如下:
同步容器有:
- vector
- Stack
- HashTable
- Collections.synchronized方法生成
并发容器有:
- ConcurrentHashMap:线程安全的HashMap的实现
- CopyOnWriteArrayList:线程安全且在读操作时无锁的ArrayList
- CopyOnWriteArraySet:基于CopyOnWriteArrayList,不添加重复元素
- ArrayBlockingQueue:基于数组、先进先出、线程安全,可实现指定时间的阻塞读写,并且容量可以限制
- LinkedBlockingQueue:基于链表实现,读写各用一把锁,在高并发读写操
2、ArrayList和LinkedList插入和访问的时间复杂度?
ArrayList是基于动态数组实现的,LinkedList是基于链表实现的,知道这点后就计算时间复杂度很容易了。
ArrayList | LinkedList | |
---|---|---|
插入 | O(n) | O(1) |
访问 | O(1) | O(1) |
3、Java反射、注解原理?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
注解可以看作是对机器的注释,也叫元数据,一种代码级别的说明,与类,接口,枚举是在同一个层次的,它可以声明在包,类,字段,方法,局部变量前面,对这些元素后进行说明,注释。Java中预定义了一些注解,如@Override,@Depreciate,@SuppressWarnings等。
4、新生代分为几个区?使用什么垃圾回收算法?为什么使用这个算法?
新生代分为3个区,分别为Eden、From Survivor、To Survivor,大小比例为:8:1:1。
使用的是复制算法,复制算法适用于对象比较少的情况,当Eden区的内存被填满,会触发minorGC ,Eden区对象会从Eden转移到Survivor区,随着年龄的增加再到老年代。
Java的堆区域划分一般如下图:
5、HashMap在什么情况下会扩容?哪些操作可能导致扩容?
新创建一个HashMap,其初始化容量为DEFAULT_INITIAL_CAPACITY=16,并且设置了一个负载系数DEFAULT_LOAD_FACTOR=0.75,当元素个数>=阈值,即16*0.75=12, 会扩容一倍,以后以此类推。导致扩容的操作有插入、合并等。
多线程情况下使用hashmap可能出现哪些错误?
- 循环链表:
- 数据丢失:假设线程1,线程2都在使用hashmap,如果hash函数为n%16,线程1 插入数字17,计算应该是插在1的位置,但是同时线程2对hashmap进行扩容,扩容后使用hash函数是n%32,那么实际上线程1插入的17应该在17的位置,但是它使用的是扩容之前的函数,导致插入在1的位置,后面查找17时就会查找不到,造成数据丢失。
6、HashMap检测到hash冲突后,是将元素插入到开头还是结尾?
因为JDK1.7是用单链表进行的纵向延伸,采用头插法就是能够提高插入的效率,但是也会容易出现逆序且环形链表死循环问题。但是在JDK1.8之后是因为加入了红黑树使用尾插法,能够避免出现逆序且链表死循环的问题。
在 Java8 中,当链表中的元素超过了 8 个以后,会将链表转换为红黑树,在这些位置进行查找的时候可以降低时间复杂度为 O(logN)。其结构如下
7、1.8还使用了红黑树,讲讲红黑树的特性,为什么要用红黑树而不是AVL,B树之类的?
红黑树,Red-Black Tree 「RBT」是一个自平衡(不是绝对的平衡)的二叉查找树(BST),树上的每个节点都遵循下面的规则:
- 每个节点都有红色或黑色
- 树的根始终是黑色的 (黑土地孕育黑树根, )
- 没有两个相邻的红色节点(红色节点不能有红色父节点或红色子节点,并没有说不能出现连续的黑色节点)
- 从节点(包括根)到其任何后代NULL节点(叶子结点下方挂的两个空节点,并且认为他们是黑色的)的每条路径都具有相同数量的黑色节点。
它的创建过程和平衡二叉树的创建过程差不多,多了一些着色过程。红黑树的关键性质: 内部保证有序,旋转开销小,整体相对平衡。
为什么要用红黑树而不是AVL,B树之类的?
- 在CurrentHashMap中是加锁了的,实际上是读写锁,如果写冲突就会等待,如果插入时间过长必然等待时间更长,而红黑树相对AVL树B树的插入更快,AVL树查询确实更快一些,但是对于操作密集型,红黑树的旋转更少,效率更高。
8、HTTP和HTTPS的区别?
- 1、HTTPS 协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前的网易官网是http,而网易邮箱是 https 。)
- 2、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。
- 3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- 4、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
9、线程池的工作原理,几个重要参数。
先看源码
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory) {this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,threadFactory, defaultHandler);}
- corePoolSize, 核心线程数
- maximumPoolSize, 最大线程数
- keepAliveTime, 线程最大存活时间
- unit 指定存活时间的单位,TimeUnit.HOURS,TimeUnit.SECONDS等等。
- worlQueue,阻塞队列。
10、Linux怎么查看负载情况?
使用命令uptime、top等查看,更多信息也可参考这篇文章。
11、spring 一个bean的装配过程
- 1、读取配置文件
- 2、实例化bean
ApplicationContext context=new ClassPathXmlApplicationContext("Car.xml");
Car car=(Car) context.getBean("car1");
12、CAS算法
CAS是英文单词CompareAndSwap的缩写,中文意思是:比较并替换。CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B。
CAS指令执行时,当且仅当内存地址V的值与预期值A相等时,将内存地址V的值修改为B,否则就什么都不做。整个比较并替换的操作是一个原子操作。
CAS是乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。
Java面试题(蚂蚁花呗)相关推荐
- 2018阿里集团中间件Java面试题(4面)
持续分享阿里技术面试 最新天猫3轮面试题目:虚拟机+并发锁+Sql防注入+Zookeeper 最新阿里内推高级Java面试题 蚂蚁金服4轮面经(Java研发):G1收集器+连接池+分布式架构 天猫研发 ...
- java实现加减乘除运算符随机生成十道题并判断对错_2020年Java面试题(3年的工作总结),最全的知识点总结...
这份Java面试题整整花了三个月的时间来整理,都是自己再工作中总结出来,记住多少就写多少,希望这份资料可以帮助你们,文末有其余部分资料的领取方式. Redis12道面试题 1.什么是Redis? 答: ...
- 2019 最新蚂蚁花呗Java三面题目:红黑树+并发容器+CAS+Solr+分布式等
蚂蚁金服专场 涵盖了蚂蚁金服从Java工程师到技术专家面试题目 支付宝高级Java三面题目:线程锁+事务+雪崩+Docker等 蚂蚁花呗团队面试题:LinkedHashMap+SpringCloud+ ...
- 花了3个月整理的超级全面的Python资料和Java面试题,分享给大家!
为广大Python爱好者精心准备的<Python进阶>,是<Intermediate Python>的中文译本,IntermediatePython这本书具有如下几个优点:简单 ...
- 最新蚂蚁金服Java面试题:Docker+秒杀设计+RocketMQ+亿级数据设计
蚂蚁金服一面: 1 自我介绍 2 讲一下ArrayList和linkedlist的区别,ArrayList的扩容方式,扩容时机. 3 hashmap的实现,以及hashmap扩容底层实现. 4 NIO ...
- 最新2019 蚂蚁金服4面(Java)面试题
蚂蚁金服Java一面 1 自我介绍和项目 2 Java的内存分区 3 Java对象的回收方式,回收算法. 4 CMS和G1了解么,CMS解决什么问题,说一下回收的过程. 5 CMS回收停顿了几次,为什 ...
- 冲击双十一,我是怎么拿下蚂蚁金服的offer的,Java面试题分享
本文转载自:冲击双十一,我是怎么拿下蚂蚁金服的offer的,Java面试题分享 一.JVM面试题 1. 说说你对JVM内存模型的了解,每个区的作用是什么? 栈区: 栈分为java虚拟机栈和本地方法栈 ...
- 拼多多、饿了么、蚂蚁金服Java面试题大集
自己当初找工作时参加过众多一线互联网公司的Java研发面试,这段时间处于寒冬,然而前几天跳槽找工作,两天面了3家,已经拿了两个offer,觉得可以和大家分享下: 下面为拼多多.饿了么.蚂蚁金服.哈啰出 ...
- 拼多多、饿了么、蚂蚁金服Java面试题大集合
自己当初找工作时参加过众多一线互联网公司的Java研发面试,这段时间处于寒冬,然而前几天跳槽找工作,两天面了3家,已经拿了两个offer,觉得可以和大家分享下: 下面为拼多多.饿了么.蚂蚁金服.哈啰出 ...
- 2021一线互联网拼多多、饿了么、蚂蚁金服、百度等一些Java面试题
面试主要分为两块: 一块是考查工程师对基础知识(包括了技术广度.深度.对技术的热情度等)的掌握程度,因为基础知识决定了一个技术人员发展的上限;另一块是考察工程师的工程能,力,比如:做过哪些项目?遇到最 ...
最新文章
- [codevs1262] 不要把球传我 数论+组合数学
- Tensorflow object detection API 搭建自己的目标检测模型并迁移到Android上
- JavaScript学习(七十二)—严格模式
- 文件的操作,如何做文件上传
- matlab低通滤波器库函数代码_【转】Matlab中模拟低通滤波器的函数
- surf算法matlab代码,surf算法matlab源码
- 修改华为 Echolife HG8010h 的超级用户密码
- 2019年房价调整是大概率事件,如果房价下跌,会出现什么问题?
- 【LeetCode - 379】电话目录管理系统
- hell脚本分享:DebianLNMP一键安装服务器套件
- 白帽黑客学习之路-python篇-基础
- Android距离传感器
- Q4财报发布,腾讯音乐高质量增长背后的创新进化论
- c语言口语评分系统,FCE口语评分标准:考官更喜欢这样的考生
- 利用python分析电商_基于Word2Vec+SVM对电商的评论数据进行情感分析
- 【MMDetection3D】MVXNet踩坑笔记
- AD20和立创EDA设计(2)提取立创EDA的原理图库和PCB库
- nvcc和nvidia-smi显示的版本不一致?
- 手机触摸pass测试软件,PaperPass手机版
- 站在孙正义愿景基金背后的男人:他们才是软银科技版图的真正操盘手
热门文章
- 华为p50 pro和小米12pro哪个好
- Oracle认证考试详细介绍
- java int几个字节_java中的int占几个字节
- idea包或文件删除恢复
- 计算机主板设计什么专业,2017年设计师专用电脑主机 i7-7700专业渲染建模电脑配置推荐...
- 手电筒安卓_小米开炮了,安卓手机隐私裸奔揭秘
- java-net-php-python-jsp废旧物资回收管理系统计算机毕业设计程序
- mmseg中的评价指标
- python自编码器降维_自编码器数据降维实践
- Apex运行时报错提示“easy anti-cheat”“Game Security Violation Detected(#0000000D)[xxx.exe]“ 问题解决方案