(转)喜马拉雅2018 Java面试题目
背景:将网上的题目整理下。
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 手写生产者消费者
https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Java%20%E5%B9%B6%E5%8F%91.md
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
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,让更多的人能够享受到获取知识的快乐!因为本人初入职场,鉴于自身阅历有限,所以本博客内容大部分来源于网络中已有知识的汇总,欢迎各位转载,评论,大家一起学习进步!如有侵权,请及时和我联系,切实维护您的权益!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
2017-04-06 Centos7 安装keepalived实现高可用
2017-04-06 (转)rpm安装和卸载软件
2017-04-06 (转)Centos7 Nginx安装
2017-04-06 模拟行工程部署记录