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面试题(蚂蚁花呗)相关推荐

  1. 2018阿里集团中间件Java面试题(4面)

    持续分享阿里技术面试 最新天猫3轮面试题目:虚拟机+并发锁+Sql防注入+Zookeeper 最新阿里内推高级Java面试题 蚂蚁金服4轮面经(Java研发):G1收集器+连接池+分布式架构 天猫研发 ...

  2. java实现加减乘除运算符随机生成十道题并判断对错_2020年Java面试题(3年的工作总结),最全的知识点总结...

    这份Java面试题整整花了三个月的时间来整理,都是自己再工作中总结出来,记住多少就写多少,希望这份资料可以帮助你们,文末有其余部分资料的领取方式. Redis12道面试题 1.什么是Redis? 答: ...

  3. 2019 最新蚂蚁花呗Java三面题目:红黑树+并发容器+CAS+Solr+分布式等

    蚂蚁金服专场 涵盖了蚂蚁金服从Java工程师到技术专家面试题目 支付宝高级Java三面题目:线程锁+事务+雪崩+Docker等 蚂蚁花呗团队面试题:LinkedHashMap+SpringCloud+ ...

  4. 花了3个月整理的超级全面的Python资料和Java面试题,分享给大家!

    为广大Python爱好者精心准备的<Python进阶>,是<Intermediate Python>的中文译本,IntermediatePython这本书具有如下几个优点:简单 ...

  5. 最新蚂蚁金服Java面试题:Docker+秒杀设计+RocketMQ+亿级数据设计

    蚂蚁金服一面: 1 自我介绍 2 讲一下ArrayList和linkedlist的区别,ArrayList的扩容方式,扩容时机. 3 hashmap的实现,以及hashmap扩容底层实现. 4 NIO ...

  6. 最新2019 蚂蚁金服4面(Java)面试题

    蚂蚁金服Java一面 1 自我介绍和项目 2 Java的内存分区 3 Java对象的回收方式,回收算法. 4 CMS和G1了解么,CMS解决什么问题,说一下回收的过程. 5 CMS回收停顿了几次,为什 ...

  7. 冲击双十一,我是怎么拿下蚂蚁金服的offer的,Java面试题分享

    本文转载自:冲击双十一,我是怎么拿下蚂蚁金服的offer的,Java面试题分享 一.JVM面试题 1. 说说你对JVM内存模型的了解,每个区的作用是什么? 栈区: 栈分为java虚拟机栈和本地方法栈 ...

  8. 拼多多、饿了么、蚂蚁金服Java面试题大集

    自己当初找工作时参加过众多一线互联网公司的Java研发面试,这段时间处于寒冬,然而前几天跳槽找工作,两天面了3家,已经拿了两个offer,觉得可以和大家分享下: 下面为拼多多.饿了么.蚂蚁金服.哈啰出 ...

  9. 拼多多、饿了么、蚂蚁金服Java面试题大集合

    自己当初找工作时参加过众多一线互联网公司的Java研发面试,这段时间处于寒冬,然而前几天跳槽找工作,两天面了3家,已经拿了两个offer,觉得可以和大家分享下: 下面为拼多多.饿了么.蚂蚁金服.哈啰出 ...

  10. 2021一线互联网拼多多、饿了么、蚂蚁金服、百度等一些Java面试题

    面试主要分为两块: 一块是考查工程师对基础知识(包括了技术广度.深度.对技术的热情度等)的掌握程度,因为基础知识决定了一个技术人员发展的上限;另一块是考察工程师的工程能,力,比如:做过哪些项目?遇到最 ...

最新文章

  1. [codevs1262] 不要把球传我 数论+组合数学
  2. Tensorflow object detection API 搭建自己的目标检测模型并迁移到Android上
  3. JavaScript学习(七十二)—严格模式
  4. 文件的操作,如何做文件上传
  5. matlab低通滤波器库函数代码_【转】Matlab中模拟低通滤波器的函数
  6. surf算法matlab代码,surf算法matlab源码
  7. 修改华为 Echolife HG8010h 的超级用户密码
  8. 2019年房价调整是大概率事件,如果房价下跌,会出现什么问题?
  9. 【LeetCode - 379】电话目录管理系统
  10. hell脚本分享:DebianLNMP一键安装服务器套件
  11. 白帽黑客学习之路-python篇-基础
  12. Android距离传感器
  13. Q4财报发布,腾讯音乐高质量增长背后的创新进化论
  14. c语言口语评分系统,FCE口语评分标准:考官更喜欢这样的考生
  15. 利用python分析电商_基于Word2Vec+SVM对电商的评论数据进行情感分析
  16. 【MMDetection3D】MVXNet踩坑笔记
  17. AD20和立创EDA设计(2)提取立创EDA的原理图库和PCB库
  18. nvcc和nvidia-smi显示的版本不一致?
  19. 手机触摸pass测试软件,PaperPass手机版
  20. 站在孙正义愿景基金背后的男人:他们才是软银科技版图的真正操盘手

热门文章

  1. 华为p50 pro和小米12pro哪个好
  2. Oracle认证考试详细介绍
  3. java int几个字节_java中的int占几个字节
  4. idea包或文件删除恢复
  5. 计算机主板设计什么专业,2017年设计师专用电脑主机 i7-7700专业渲染建模电脑配置推荐...
  6. 手电筒安卓_小米开炮了,安卓手机隐私裸奔揭秘
  7. java-net-php-python-jsp废旧物资回收管理系统计算机毕业设计程序
  8. mmseg中的评价指标
  9. python自编码器降维_自编码器数据降维实践
  10. Apex运行时报错提示“easy anti-cheat”“Game Security Violation Detected(#0000000D)[xxx.exe]“ 问题解决方案