查漏补缺!市面上并不常见的Java面试题+面试经验合集;记得收藏

it2023-05-01  64

背景

现在是2020年的黄金跳槽季,不光是很多在职人员跃跃欲试,也有很多大学生积极地加入到应聘行列。作为技术出身的我们,找工作的一大前提就是技术是否能过关。而对于java程序员来说,至少是两关的面试,这首个关卡就是笔试,今天我总结了一些关于java的面试题和面试经验,希望能帮助到正在求职的你!老司机看看自己有没有不会的哦!

java基础

java八大类型和对应字节数Integer缓冲池?抽象类和接口区别,从设计模式层面的理解,为什么要有这么2个东西String/StringBuilder string几种拼接方式区别,+和append底层有没有区别==和equals区别泛型 泛型 List<Integer> 与 List<String> 这两个的getClass是否相对?<? extends String> 有什么作用?多态反射重载和重写,底层如何实现的equals 和 ==区别final的作用和用法深拷贝浅拷贝,参数传递,值传递和引用传递的关系,String和char数组作为入参,结果会改变吗类修饰词default和protected关系异常都有几大类?运行时的空指针会抛异常吗?IO Exception异常发生需要自己去捕获?编译期间需要捕获,运行时不需要捕获静态变量线程安全Object的基本方法Java序列化,如何不让某个成员序列化comparator排序,对于一个容器,比如set,你想实现自定义排序规则的话怎么做说一下byte a = 127; byte b = 127; a+=b和a = a+b的区别分别会出现什么问题。Class.forName和ClassLoader的区别lambda表达式,每个用户有个黑名单标识位,如何用lamda表达式来实现把黑名单标识位为true的过滤出来并得出String的形式

数据结构

说一种我最熟悉的数据结构,具体到每种api操作,除了链表数组之外的数据结构讲讲知道哪些数据结构AVL和红黑树有什么区别?二三树转变成红黑树的过程集合框架源码,concurrenthashmap,hashmap,linkedhashmap实现LRUhashmap(ConcurrentHashMap已成必问) resize死循环hashtable和hahsmap区别说说copyOnwriteArrayList以及他们分别采用的并发修改(fast-fail,fast-safe)为什么使用红黑树HashMap的数据结构是什么?HashMap当在扩容时候进行put操作时||JDK1.7头插法的缺陷||JDK1.8有那些变化HashMap get/put过程为什么链表是8次以后就转换为红黑树,什么时候转回链表HashMap的put操作是怎么实现的?HashMap是线程安全的吗,为什么?(引出线程安全的解决方法,hashtable或ConcurrentHashMap)ConcurrentHashMap是怎么保证线程安全的?HashMap如何解决哈希冲突,还有什么方法(开放寻址法,线性探查,二次探查;布谷鸟哈希)HashMap和ConcurrentHashMap的put/get操作ArrayList ArrayList和LinkedList有什么区别,底层怎么实现?ArrayList扩容时做了什么操作?扩容时是在数组的后面加的吗还是?数组怎么实现对象排序LinkedhashMap 数据结构红黑树的细节,有什么特点

操作系统

进程调度,进程状态生命周期图操作系统组成进程给线程划分了什么资源操作系统内存模型不连续空间分配,说说分段,分页,虚拟内存,页淘汰算法fork子进程在linux里时两倍的进程开销吗操作系统的虚拟内存机制,操作系统的内存管理(伙伴系统,slab缓存)===由锁慢引出的知识点。线程和进程的区别==肯定不是一句话就能回答这么简单的哈

并发

为什么要线程安全为什么要同步,同步的方式有哪些Java有哪些锁同步机制死锁的条件,你是如何排查死锁的(重点在于你)介绍线程池 为什么使用线程池(如果服务器性能足够好下)怎么实现一个线程池线程池怎么调度(看看源码)进程和线程,区别哪个效率高,为什么为什么需要锁说说AQS说说CAS Unsafe类实现CAS?直接使用Unsafe会有什么问题吗?锁为什么慢,操作系统调度为什么慢volatile关键字,(x86CPU层面解读==要有时间能说出CPU协议更牛逼了)Atomic Integer和Integer区别,Atomic Integer原理 讨论各种同步锁的性能,i++操作用Synchronize锁吗?列举常用的并发工具,指JUC包里面的类synchronized实现原理 synchronized怎么保证可见性,在占有锁这个线程占有锁之前,有其他线程复制了变量到工作内存中,那么占有锁的线程改完的结果其他线程能立即可见吗final修饰什么的时候能够保证可见性Reentranlock底层实现优化方案,采用reentranlock的condition实现多线程画出状态图ThreadLocal原理 ThreadLocal模式出现内存泄露吗?ThreadLocal怎么用的可以反过来项目的时候自爆知识点各种锁 悲观锁和乐观锁线程池阻塞队列满了怎么办:详细说了拒绝策略和FixedCachePool的无界队列造成的OOm(当到了最大线程数时如何处理)==很喜欢问线程池爆了怎么办(你通常用哪个策略?)

JVM

内存泄漏如何发现,举例子(你自己遇到过吗?),怎么排查,OOM异常||内存溢出和泄露有区别吗?日志->jconsole->jmap->jvisuavmCMS和G1垃圾回收算法 G1解决了CMS的缺点吗 让我自己实现垃圾回收算法的标记过程。我说BFS,他让我描述算法的细节。然后让我用DFS做一遍。优缺点哪个版本的JDK用哪个收集器年轻代存活的对象为啥不直接放老年代JVM内存区域,每个部分都要详细说说 堆和栈的区别堆外内存垃圾回收原理,全流程要掌握类加载过程讲讲JVM创建对象过程双亲委派机制 怎么自己写一个java.lang.Object如何打破为什么要引入双亲委派机制静态内部类会被编译成几个class?为什么内部类可以访问外部类的private的方法我在jvm上运行一段java程序输出一条语句,它是怎么输出到屏幕上的线程的生命周期JVM有哪些优化配置参数,JVM还是要考参数,尤其你拿JVM作为项目更会考了如何避免full gc

数据库

数据库范式,数据库为什么要有范式(可能很多时候都是答题的中心思想)数据库设计,你会怎么设计数据库表(回到范式题)数据库各种锁+使用场景我们的数据库当中如何做的优化?举案例。==引索引MyISAM和InnoDB区别 为什么不支持行锁,myisam的优点如果是存储日志,用什么存储引擎比较合适mysql底层是什么,为什么效率高,主键能不能太大,为什么,如果太大,底层数据结构会不会变化,为什么mysql join的底层原理是什么,有哪几种(不是左右连接这种)MySQL 索引原理 聚簇索引和非聚集索引auto_increment有什么好处数据结构,为什么要这样使用,B+树历史必问的啦,B+为什么不用B-索引失效情况,什么情况下会放弃使用索引用过的InnoDB索引?优势何在?(应该先问是按逻辑方面还是物理方面...)联合索引怎么使用“like”查询在什么时候能够用上索引一个表十几个字段,怎么建立索引==真实情况下如何考虑整个表的构建==性别这种索引放在前面还是后面SQL语句(基本数据库语句,通常是考连接语句join,groupby) 写sql 学生成绩教师三个表、 查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩和对应的老师写sql 找出语文成绩及格平均成绩不及格的学生姓名语文成绩SQL各种连接的概念,区别。连接后的行数和列数交换性别值;交换职务值(学生,老师,教授)性别反转 表中有个字段性别 = 'm' 代表男性 'f'代表女性,一句sql反转过来事务===极其重要,因为实际业务事务回滚的常见,所有面试官都对这个了如指掌 特性/概念,具体介绍事务隔离级别场景题@Transaction的原理,还有比如在一个类中两个方法,一个是B方法,一个是C方法,B上没有注解,C上有那么在外面调用B方有事务,为什么,根据底层原理能不能推断出来(给提示问你能不能推断出来)脏读,幻读,不可重复读 试验RR级别下出现幻读MVCC mysql有什么优化策略mysql连接池的作用mysql调优?==explain,如何分析一条SQL的索引使用情况(细问到Explain 中的字段)MySQL的主从复制原理,如何实现数据库中一行记录大小10K,一个表只有主键索引,可以存多少条数据?你有没有试过数据库一个表中最多可以插入多少数据什么样的查询会有回表查询

Redis

redis高并发 如果有10w请求插入Redis,如何优化?1w条的插入和更新有什么区别怎么保证redis的时效性(双写)redis数据类型源码级别 zset底层实现,为什么,效率是多少存验证码的话用的哪个数据类型redis持久化方式,aof文件比较大怎么办Redis缓存怎么解决数据一致性redis原理redis场景题说说redis和mysql区别,从而引出redis和mysql的使用场景缓存击穿,雪崩,穿透

SM

代理模式怎么实现 静态代理,jdk动态代理和cglib动态代理 问的很细(jdk为什么一定要实现接口,如果不实现接口会出现什么问题MyBatis的原理分析,Mybatis执行流程Mybatis问你觉得从哪体现的优缺点Mybaits里面参数#和$有什么区别,要举一个sql注入攻击的例子spring常用的注解,有没有扩展过spring自己的功能Spring底层问题 spring bean生命周期spring aop,ioc实现原理==请举生活中aop/ioc的一个例子循环依赖,动态代理spring 拦截器知识什么样的bean你会设置为延迟加载Spring的事务传播机制SpringMVC执行原理springboot启动流程 springboot启动类放置目录在哪里spring boot加载bean过程springboot特点

网络

http原理 http缓存,http完整流程 Cookie的传输过程?Cookie失效HTTP报文格式什么样HTTP请求头中表示请求数据格式的是哪个HTTP返回码有哪些HTTP返回码206什么意思https原理,HTTPS怎么建立的连接,其中用到对称加密还是非对称加密;tcp原理 tcp连接三次握手,释放四次挥手,为什么是三次而不是四次或是两次 每次握手发送的参数,timewait和closewait状态含义TCP中有哪些涉及到超时的TCP的滑动窗口机制http tcp联系和区别NIO了解吗,说了buffer、channel,还有Seletor(浅)然后说如果客户端线程被系统释放了,丢失的这个上下文怎么办,提到了BIO,知识盲区,很尴尬墨迹了半天说不会(阿里好像很喜欢问这个地方,然而我并不会netty) poll 和 epoll 的区别

Linux

Linux查看文件第n行Linux文件系统原理/inode和datablock那一块的知识点linux查询tcp连接处理CLOSE_WAIT的状态的数目Linux查看进程,删除过期文件平时怎么用linux做定时任务的进程fork的过程还是要了解一下介绍一下你用过的Linux命令linux五种io模型

设计模式

说说你知道的设计模式(你要结合spring具体场景讲,追问spring为什么要使用这个设计模式) 工厂模式、适配器模式单例模式那几种实现和优缺点都要知道 手写双重检查锁单例模式五大设计原则也要记住,在答别的题不会时就扯这五个原则

项目

项目你觉得最大的难点项目你学到了什么项目你是如何优化的

手写系列

手写jdk中的优先级队列 PriorityQueue手写代码 实现阻塞队列,ArrayBlocking源码手撕一个阻塞队列,生产者生产0~100的随机数,消费者消费后将其存储到一个list,需要保持list中元素保持递增。(信号量+线程安全)两个栈实现一个队列实现一个Java栈结构 ==话说这种一般能用的数据结构是什么?leetcode155 最小栈

 

快排和堆排的区别,手写快排,堆排。泛型快排学到了装杯的东西手写算法求最长子序列求下一个大的数62:圆圈剩下的数字twoSum如何查询一个文件内的重复最多的次数的数字,如何高效实现,时间复杂度,空间复杂度、镜像二叉树矩阵顺时针转90度判断回文字符串[1,2,3,2,3]找出其中只出现一次的数(让用位操作去实现)1亿个int short类型的数据进行排序10w个手机号找一个合并链表海量集合A和B求交集leetcode1247美团外卖有100台服务器,美团财务只有2台,美团财务要对每笔订单记账???怎么做,我实在不会,bala了一下消息队列,说先存着,慢慢处理。。。。。面试官说消息队列是搞存储的吗?我说只存个编号。线上一台MySQL服务,随着时间增加SQL性能越来越差,排查思路如果说有一个操作需要创建一个对象,这个对象很大,需要消耗很多资源,如果说每调用一次方法就创建一个对象的话,开销太大,如果把它定义成一个静态变量,又会产生并发问题,那么多线程并发操作的时候就需要加锁,降低效率。怎么优化才能既不用加锁又能提高并发访问的效率 (1)利用“资源池”的思想,,用一个资源池,存放10个该对象,每次创建的时候从池中获取,降低并发度(2)ThreadLocal:看倒是看过,就是没想到。知识还是要融会贯通呀存储了0-100的数据,如何删除其中小于10的数字(其实问的是list中如何删除元素——迭代器) 为什么不能在遍历list的时候删除其中的元素呢如果现在有8G内存,一个程序很大,由于还要留下一部分内存供其他程序使用,那么如何控制这个程序使其占用的内存不能超过6G呢?考JVM参数基于B+树索引的特点,更新操作慢,现在有这样的需求,就是存储日志文件(一般来说日志文件只有在出错的时候才会去看它,平时基本上不会去查)应该如何设计索引的数据结构?》》就还是用树来存储,只是不维护索引顺序环形链表判断有环,环入口节点岛屿数量(leetcode 200) DFS秒解数组实现栈(入栈、出栈、扩容)除了垃圾回收,还有那些工作会造成CPU负载过高(其实这里给出的是一个场景,就是让描述一下除了垃圾回收之外,还有那些工作会让线上CPU占用到百分之90-100,并且给出排查过程。希尔排序、快速排序、归并排序的细节,时间复杂度和空间复杂度;aaaaaabbbbbbzzzz.....zzzccccccc这样的字符串有100kb,怎么压缩?记录每个字母出现的开始位置即可hashmap实现一个缓存,要求有过期时间 初始化的时候有个aliveTime,用两个hashmap一个用来存key~ value,一个用来存key~createTime,然后put的时候两个map都存一下,获取的时候先get一下createTime,判断时间有没有超过aliveTime,超过就返回null,否则返回value就好啦(时间是用Date类来获取的)对链表两个节点一反转:1->2->3->4变成2->1->4->3(编程题)给定一个数组判断是不是二叉搜索树的后序遍历的结果(编程题)求数组中子数组的和的最大值求二维数组中子矩阵和的最大值求二维数组中子矩阵的积的最大值Leetcode的430题. Flatten a Multilevel Doubly Linked List(编程题)数组中找出最小的k个数,空间复杂度O(1)(编程题)二维数组,每一行从左到右递增,从上到下递增,判断给定的数是否存在(编程题) 1,0,0,1,1,0,1变成0,0,0,1,1,1,并保证稳定(编程题) 给定一个数组,求子数组的最大和(智力题)1-1000个数,每次删除奇数位置的数(位置从1开始计数),最后剩下哪个数一个系统在注册账号的时候需要完成若干操作,比如创建账号、验证身份信息、发送欢迎邮件等等,又希望这些操作尽量快的完成,你怎么设计

代码题

以下代码题输出什么?(巨坑,输出100,从泛型+向上转型+map+equals原理上想) 因为i-1转integer,所以不会删除 Map<Short, String> map = new HashMap<>(); for(short i = 0; i <100; i++) { map.put(i, String.valueOf(i)); map.remove(i-1); } System.out.println(map.size());

2. 这是一个多叉树,Node应该是这样,当时并没有给,这是我觉得是这样的,当时只给了方法和说明是多叉树

Node <T>{ T value; Node[] children; } public Integer getValue(Node<Integer> root, int level, int index){ }

找到第 i 层的第 index 个结点的值,如果没有,返回null,时间复杂度是多少

 

人生题

最近在看什么书,对自己有什么提升最近了解的新技术,怎么了解的,用它做了什么(我当时答得docker,导师项目中用到的)去实习想学到什么东西学的最好的课==引导面试官的机会

反问面试官

您觉得我有哪些方面需要提高 如何提高(让他给你建议) ,这个问题可以折射出你这次面试的评价 ,如果面试官对你满意的话 他会直说的 ,同时也可以知道自己的薄弱点 ,通过面试官的建议来针对性的提高。所以如果是正常面试的话我就会问面试官这个问题还可以问面试官部门的业务 ,他们部门主要使用的框架 ,还有就是可以试探一下有没有下一次面试让他给你的建议主要是 思维 基础 方面如何提高 ,或者如何横向扩展/深入扩展知识面 这种问题 。(但是不要问面试中出现的问题,比如面试中有个问题没答上 ,千万别问)

没看懂的考点

谈一下Java后端编译优化。 Java分层编译,0、1、2、3、4是啥?方法内联,分支预测。如果通过JIT日志分析出来没有优化,怎么在代码中体现?什么时候会进行内联优化?介绍一下虚方法表。

 

刚二面完:就三题 第一题:一个超大的文件,文件每行是一个数字,找出出现频次最高的5个数字 分块->hash->大顶堆第二题:10亿个手机号找一个? 10亿个手机号的文件转储,如何压缩,同时要能够计数,就是给出一个手机号,判断出现过没,出现过给出出现次数?CIDR压缩-》字典树-》数组存储-》按手机号号段

需要文章面试题答案解析的朋友,以及Java面试资料,面经资料,视频笔记的;可以一键三连后:“加我VX小助理”即可免费获取到!

 

最新回复(0)