java常见面试题库大全

发布于:2022-08-09 ⋅ 阅读:(460) ⋅ 点赞:(0)

java知识

一、Java基础

  1. 实例方法和静态方法有什么不一样?
  2. Java中的异常有哪几类?分别怎么使用?
  3. 常用的集合类有哪些?比如List如何排序?
  4. ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和各自适应的场景是什么?
  5. 内存溢出是怎么回事?
  6. ClassLoader有什么用?
  7. ==和equals的区别?
  8. hashCode方法的作用?
  9. Object类中有哪些方法?列举3个以上。
  10. NIO是什么?适用于何种场景?
  11. HashMap数据结构、扩展策略,Hash冲突攻击如何防范,如何实现线程安全的HashMap?
  12. JVM内存结构,GC算法,CMS、G1的原理
  13. NIO模型,select/epoll的区别,多路复用的原理
  14. Java中一个字符占多少个字节,扩展再问int, long, double占多少字节
  15. 创建一个类的实例都有哪些办法?
  16. final/finally/finalize的区别?
  17. LinkingBlockingQueue与ArrayBlockingQueue的区别,他们的适用场景?
  18. Session/Cookie的区别?
  19. String/StringBuffer/StringBuilder的区别,扩展再问他们的实现?
  20. Servlet的生命周期?
  21. 如何用Java分配一段连续的1G的内存空间?需要注意些什么?
  22. Java有自己的内存回收机制,但为什么还存在内存泄露的问题呢?
  23. Java里面用对象作为Key需要注意些什么? 如何实现hashcode?

二、JVM

  1. JVM堆的基本结构。
  2. JVM的垃圾算法有哪几种?CMS收集算法的流程?
  3. JVM有哪些常用启动参数可以调整?
  4. 如何查看JVM的内存使用情况?
  5. Java程序是否会内存溢出?
  6. 你常用的JVM配置和调优参数都有哪些?分别什么作用?
  7. Java内存分代模型,GC算法,JVM常见的启动参数;
  8. CMS算法的过程,CMS回收过程中JVM是否需要暂停(这块回答较好,也可以只是看毕玄的Java分布式开发或网上文章的学习, 可以结合JVM启动参数常见配置,jstat等命令,看下动手能力,意愿;以及实际线上问题排查)
  9. 什么情况下会出现OOM(堆内存,永久区,堆外区,方法栈)
  10. Java内存结构(堆结构,新生代[S0/S1/Elden],年老代,持久代)
  11. 常用的GC策略,什么时候会触发YGC,什么时候触发FGC

三、数据结构与算法基础

  1. 说一下几种常见的排序算法和分别的复杂度。
  2. 什么是跳表?
  3. 如何确认一个链表有环?进一步,确认环的位置。
  4. 如何遍历一棵二叉树?
  5. 倒排一个LinkedList。
  6. HashSet的实现方式

四、多线程/并发

  1. Java中常见的锁,互斥锁,读写锁,信号量
  2. 原子Atomic类,如何保证原子性,CAS硬件指令
  3. volatile,可见性问题的原因,硬件架构,L3 Cache,QPI,乐观锁
  4. 如何实现一个线程安全的数据结构
  5. 如何避免死锁
  6. 如何解决ABA问题
  7. Synchronized关键字的作用?
  8. Volatile关键字的作用?
  9. Java内存模型是怎样的?
  10. HashMap在多线程环境下使用需要注意什么?为什么?
  11. Java程序中启动一个线程是用run()还是start()?
  12. 什么是守护线程?有什么用?
  13. 什么是死锁?如何避免
  14. 线程和进程的差别是什么?
  15. Java里面的Threadlocal是怎样实现的?
  16. ConcurrentHashMap的实现原理是?
  17. sleep和wait区别
  18. notify和notifyAll区别
  19. volatile关键字的作用
  20. ThreadLocal的作用与实现
  21. 两个线程如何串行执行
  22. 上下文切换是什么含义
  23. 可以运行时kill掉一个线程吗?
  24. 什么是条件锁、读写锁、自旋锁、可重入锁?
  25. 什么是协程(用户态线程,减少数据拷贝,降低CPU开销,无callback函数)?
  26. 线程池ThreadPoolExecutor的实现原理?
  27. J.U.C下的常见类的使用。lock, synchronized, ThreadPool的深入考察; BlockingQueue的使用。(take,poll的区别,put,offer的区别);原子类的实现。
  28. 各种常见锁使用如果上面这些掌握很好,还可以看看更深一点的 False Sharing,Cache Line,可见性与原子性等;

五、Linux使用与问题分析排查

  1. 硬链接和软链接的区别?
  2. inode是什么?
  3. Linux常用命令有哪些?
  4. 怎么看一个Java线程的资源耗用?
  5. Load过高的可能性有哪些?
  6. /etc/hosts文件什么做用?
  7. /etc/resolv.conf文件什么作用?
  8. 如何快速的将一个文本中所有“abc”替换为“xyz”?
  9. 你常用的Linux下用来进行网络和磁盘IO分析的工具有哪些?
  10. 你常用的Linux下用来进行内存和CPU分析的工具有哪些?
  11. 发现磁盘空间不够,如何快速找出占用空间最大的文件?
  12. Java服务端问题排查(OOM,CPU高,Load高,类冲突)
  13. Java常用问题排查工具及用法(top, iostat, vmstat, sar, tcpdump, jvisualvm, jmap, jconsole)
  14. Thread dump文件如何分析(Runnable,锁,代码栈,操作系统线程ID关联)
  15. grep,awk,sed; 是否自己写过shell脚本;
  16. 常见的cpu load过高,us过高,一般是什么问题。引申出是否用过top,jstat,jstack等。
  17. 常见的内存问题一般有哪些。 引申出是否用过free,top, jmap等。

六、框架使用

  1. Spring中Bean的生命周期。
  2. SpringMVC或Struts处理请求的流程。
  3. Spring AOP解决了什么问题?怎么实现的?aop与cglib,与asm的关系。
  4. Spring事务的传播属性是怎么回事?它会影响什么?
  5. Spring中BeanFactory和FactoryBean有什么区别?
  6. Spring框架中IOC的原理是什么?
  7. spring的依赖注入有哪几种方式
  8. struts工作流程
  9. 用Spring如何实现一个切面?
  10. Spring 如何实现数据库事务?
  11. Hibernate和Ibatis这类ORM框架的区别?什么是ORM,解决的痛点是什么?
  12. spriong ioc的生命周期,(init-method,intilizingbean接口方法afterPropertiesSet的先后顺序)等。
  13. Hibernate对一二级缓存的使用,Lazy-Load的理解;
  14. Spring IoC AOP自己用代码如何实现
  15. RPC的负载均衡、服务发现怎么做的
  16. 几种推送模型的区别,long polling,websocket

七、数据库相关

  1. MySQL InnoDB的特点?
  2. 乐观锁和悲观锁的区别?
  3. 数据库隔离级别是什么?有什么作用?
  4. MySQL主备同步的基本原理。
  5. 如何从一张表中查出name字段包含“XYZ”的所有行?
  6. 索引数据结构(字典+BitTree)
  7. 如何优化数据库性能(索引、分库分表、批量操作、分页算法、升级硬盘SSD、业务优化、主从部署)
  8. SQL什么情况下不会使用索引(不包含,不等于,函数)
  9. 一般在什么字段上建索引(过滤数据最多的字段)
  10. 如何从一张表中查出name字段不包含“XYZ”的所有行?
  11. MySQL,B+索引实现,行锁实现,SQL优化
  12. Redis,RDB和AOF,如何做高可用、集群
  13. 如何解决高并发减库存问题

java 高并发商城库存订单处理,下单减库存,如何解决高并发减库存问题_weixin_39968266的博客-CSDN博客

  1. mysql存储引擎中索引的实现机制;

  1. 数据库事务的几种粒度;
  2. 行锁,表锁;乐观锁,悲观锁

八、网络协议和网络编程

  1. TCP建立连接的过程。
  2. TCP断开连接的过程。
  3. 浏览器发生302跳转背后的逻辑?
  4. HTTP协议的交互流程。HTTP和HTTPS的差异,SSL的交互流程?
  5. Rest和Http什么关系? 大家都说Rest很轻量,你对Rest风格如何理解?
  6. TCP的滑动窗口协议有什么用?讲讲原理。
  7. HTTP协议都有哪些方法?
  8. 交换机和路由器的区别?
  9. 什么是VLAN,有什么作用?
  10. 什么是VXLAN,有什么作用?
  11. http协议(报文结构,断点续传,多线程下载,什么是长连接)
  12. tcp协议(建连过程,慢启动,滑动窗口,七层模型)
  13. webservice协议(wsdl/soap格式,与rest协议的区别)
  14. spdy/http2.0协议是否有了解
  15. NIO的好处,Netty线程模型,什么是零拷贝

九、Redis等缓存系统/中间件/NoSQL/一致性Hash等

  1. 列举一个常用的Redis客户端的并发模型。

常用的Redis客户端的并发模型(转) - 长风破浪 - 博客园

  1. HBase如何实现模糊查询?

【大数据-HBase】HBase根据rowKey模糊查询 - yangyh11 - 博客园

  1. 列举一个常用的消息中间件,如果消息要保序如何实现?
  2. 如何实现一个Hashtable?你的设计如何考虑Hash冲突?如何优化?
  3. 分布式缓存,一致性hash

5. 分布式缓存中的一致性Hash 算法_惜暮的博客-CSDN博客_分布式缓存一致性hash

  1. LRU算法,slab分配,如何减少内存碎片
  2. 如何解决缓存单机热点问题

单机缓存_缓存三大问题深入浅出_你的专属·bug的博客-CSDN博客

  1. 什么是布隆过滤器,其实现原理是? False positive指的是?
  2. memcache与redis的区别
  3. zookeeper有什么功能,选举算法如何进行
  4. map/reduce过程,如何用map/reduce实现两个数据源的联合统计
    十、设计模式与重构
  5. 你在设计一个工厂的包的时候会遵循哪些原则?
  6. 你能列举一个使用了Visitor/Decorator模式的开源项目/库吗?
  7. 你在编码时最常用的设计模式有哪些?在什么场景下用?
  8. 如何实现一个单例?
  9. 代理模式(动态代理)

10、【设计模式】代理模式(动态代理) - 是谁扭曲了时空 - 博客园

  1. 单例模式(懒汉模式,恶汉模式,并发初始化如何解决,volatile与lock的使用)

单例模式之懒汉的并发问题_太阳晒屁股了的博客-CSDN博客

  1. JDK源码里面都有些什么让你印象深刻的设计模式使用,举例看看?
  2. Reactor模式

十一、学习与进取心

  1. 平时会关注哪些技术?
  2. 会看那些技术博客和网站?
  3. 技术上有没有偶像?
  4. 看过哪些技术书籍?
  5. 你平常都看些什么书?你去年和今年看的书中印象最深的基本技术书籍和非技术书籍是?
  6. (如果不看书)你平常都上哪些技术论坛?最喜欢哪个?为什么?
  7. 项目或产品中用到了什么新技术或框架
  8. 最近研究过什么业界流行的技术或框架
  9. 对现在所做的项目或产品的缺陷是否了解,有何规划
  10. 是否有带过项目,如何管理项目
  11. 是否有带过团队,团队管理最大的挑战点是什么

十二、抗压能力及抗压意愿

  1. 刚才你说的XXX实现跟那个开源的YYY很像,是不是抄来的?
  2. 对加班怎么看?
  3. 平台是否有加班,是主动还是被动,是否非常抗拒
  4. 是否有负责多件事情,多件事情如何并行处理
  5. 你对你最近负责项目中最自豪的点是什么?

十三、稳定性考察

  1. 了解家庭婚姻状况, 了解购房及居住地,籍贯情况,了解目前薪资,评估稳定性
  2. 如果让你接手一个历史悠久的模块,你会怎么做?
  3. 看简历跳槽情况,针对性发问,如跳槽频繁的话问清楚为什么

十四、开放性问题

  1. 一个大文件4G,里面一行行的数字,这时内存只有256M,如果做排序?

一个100G的文件,内存只有4G,如何对其进行全排序?_百度知道

  1. 如果你部署的应用所在机器硬盘坏了,会发生什么?你的程序要如何处理这种异常?(分布式系统中故障是一种常态,设计要避免单点故障,能容错,保证系统高可用)
  2. 实现一个消息队列系统

设计一个简单的消息队列_yozzs的博客-CSDN博客_设计消息队列

  1. 如何设计一个高可用的架构

如何做高可用的架构设计 - 茶轴的青春 - 博客园

  1. 多次Hash来解决URL重复访问问题。
  2. 全局唯一ID问题。
  3. 秒杀如何设计。
  4. 如何进行性能优化。
  5. 发现CPU 100%,如何排查?
  6. 实现一个分布式打点系统。
  7. taobao.com和tmall.com的互相登录的问题。
  8. 如何快速对一个2亿数据的List进行排序?

其他

1.基本synchronized,ReentrantLock,volatile等的使用

2. 本地线程安全synchronized和Lock的使用方案及原理介绍

3. 分布式环境多机器之间的线程安全处理方案介绍

4. spring 常用注解功能介绍

5. spring aop ioc 实现原理介绍

  1. 实际fullgc排查过程
  2. ReentrantLock 实现机制
  3. JAVA中需要CAS操作,根本原因是什么,怎么去实现CAS
  4. 在分布式布置时,多线程并发时,有哪些方式去作同步锁,优缺点

评测题目

基础算法

1.无重复字符的最长子串

力扣

2.最长回文子串

力扣

3.盛水最多的容器

力扣

4.三数之和

力扣

5.电话号码的字母组合

业务编程

1.编程实现一个本地流控算法,用于限制每一类业务请求的速率,比如每个user_id(keys)每10秒钟(duration)只能访问5次(times)。类信息如下,请填充空白部分:

 

public class RateLimiter {

        private int duration;

        private int times;



        public RateLimit(int duration, int times) {

            this.duration = duration;

            this.times = times;

        }

   

        // 每次业务请求之前调用该方法

 public boolean isLimit(String key) {



      }

  }

*/

java锁之RateLimiter(限制访问速率) - 知乎

2.使用Java语言实现(模拟)100个人同时往一个余额为0的银行账户转账1元钱的过程

java编程题:100个线程同时向一个银行账户中存入1元钱_魅力降不住美丽的博客-CSDN博客

3.问题:业务需求中,经常有发起请求后,必须等待上一次请求结束才能执行下一次请求的需求。

编写一个高阶函数,传递promise,返回一个新promise。

连续触发时,若首次promise未执行完,后续promise直接废弃(不执行then/catch)

基于JAVA的Promise模式实现_chengyan521489的博客-CSDN博客

用例设计

问题:请针对下述业务场景需求进行测试用例分析设计:

    某淘宝店铺想在三八节做大型促销活动,活动时间3月5日~8日,预计流量是每天100万的pv。店铺卖家提前设置优惠券的面额和使用条件(满X元可以使用Y元优惠券)。优惠券领取时间是3月3日~3月4日,优惠券使用时间是3月5日~3月8日。

     1)每个商品可以设置5张优惠券,每个订单只能使用1张优惠券,用户在购买商品时可以选择使用哪张优惠券。1张优惠券可以关联多个商品。

     2)优惠券状态:不可用,可用,使用优惠券支付成功后,优惠券状态变为不可用,交易成功前发生退款,优惠券状态变为可用

优惠券测试用例_穿过棱镜的光的博客-CSDN博客_优惠券测试用例


网站公告

今日签到

点亮在社区的每一天
去签到