喜马拉雅java社招面试_(转)喜马拉雅2018 Java面试题目

本文深入探讨了Java中的哈希表、HashMap、ConcurrentHashMap的区别及其数据结构与线程安全性。同时,解释了equals与==的区别,以及重写equals时为何通常要重写hashcode方法。线程池的工作机制也被详细阐述,包括Executors工具类创建的不同线程池类型。此外,文章还涉及了Java序列化、JVM内存模型、GC算法和类加载机制。在并发控制方面,介绍了AQS、重入锁、读写锁以及CountDownLatch、Semaphore等工具。最后,讨论了MySQL索引类型、存储引擎特性以及查询优化策略。

背景:将网上的题目整理下。

java基础

1:hashTable hashMap ConcurrentHashMap 的区别、数据结构、线程安全

2:equals和==区别, 重写equals一定要重写hashcode方法吗?为什么?hashcode方法有什么作用?

这个万年不变的面试题,这是何等的卧槽

==说明:

对于基本类型来说 ,==比较两个基本类型的值是否相等,

对于引用类型来说,==比较的是内个引用类型的内存地址

equals说明:

equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法       进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。

重写equals一般是要重写hashcode方法的,首先equals与hashcode间的关系是这样的:

1、如果两个对象相同(即用equals比较返回true),那么它们的hashCode值一定要相同;

2、如果两个对象的hashCode相同,它们并不一定相同(即用equals比较返回false)

比如说两个字符串的hashcode相同,但是这两个字符串可以是不同的字符串,对象也是同理,自己理解的。

至于hashcode有什么用?

为了提高程序的效率才实现了hashcode方法,先进行hashcode的比较,如果不同,那没就不必在进行equals的比较了,这样就大大减少         了equals比较的次数,这对比需要比较的数量很大的效率提高是很明显的,一个很好的例子就是在集合中的使用;

(转)从一道面试题彻底搞懂hashCode与equals的作用与区别及应当注意的细节

3:线程池的工作机制,Java通过Executors工具类创建出来的线程池有什么区别,为什么这样定义?

Executors.newCachedThreadPool(); //创建一个缓冲池,缓冲池容量大小为Integer.MAX_VALUE

Executors.newSingleThreadExecutor(); //创建容量为1的缓冲池

Executors.newFixedThreadPool(int); //创建固定容量大小的缓冲池

4:线程池有哪些参数,具体含义是什么?

共7个参数

corePoolSize 核心线程数,

maximumPoolSize线程池最大线程数,

RejectedExecutionHandler饱和策略:DiscardPolicy,DiscardOldPolicy,CallerRunPolicy,AbortPolicy

keepAliveTime存活时间,

TimeUnit(线程活动保持时间的单位)

workQueue阻塞队列 ArrayBlockingQueue和PriorityBlockingQueue使用较少,一般使用LinkedBlockingQueue和Synchronous

threadFactory线程工厂,用来创建线程

4:AQS 重入锁 读写锁 countdownlatch 栅栏(cyclicBarrier) 信号量(semaphore)

5:有四个线程A、B、C、D、E,现在需要E线程在ABCD四个线程结束之后再执行

控制线程顺序执行 我知道的

1. join 让主线程等待子线程运行结束后再继续运行

2. 利用并发包里的Excutors的newSingleThreadExecutor产生一个单线程的线程池,而这个线程池的底层原理就是一个先进先出(FIFO)的  队列。代码中executor.submit依次添加了123线程,按照FIFO的特性,执行顺序也就是123的执行结果,从而保证了执行顺序。

3. 使用 CountDownLatch 控制多个线程执行顺序 cutDown()方法和await()方法  参考:https://www.cnblogs.com/flyme/p/4568063.html

6:Java序列化,有ID和没ID会出现问题吗?

(转)java 序列化ID的作用

7:JVM内存模型,为什么survivor需要有2个。

survivor需要2个,主要是为了规避内存碎片化

8:GC算法,回收器

9:类加载机制

加载(内存中生成class对象), 链接(验证 准备 解析), 初始化

ps:解析阶段在某些情况下可以在初始化阶段之后再开始,这是为了支持Java的运行时绑定。

10. synchronized和lock的区别

11 手写生产者消费者

BlockingQueue实现。semaphore,wait/notify,await/signal

mysql

1:索引都有什么类型

2:聚集索引和非聚集索引,主键删掉之后还有聚集索引吗?

3:建了索引,什么时候会不命中索引

4:innodb与myisam存储引擎的区别

5:分库分表,主从复制的延迟

6:查询优化,

redis

淘汰机制

失效策略

持久化rdb、aof

pipeline

主从、集群

数据结构

1:链表,链表倒置、节点交换

2:Btree B+tree 红黑树

协议

tcp

http

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值