Java开发面试题总结

前端知识

1、session和Cookie的区别

计算机知识

1、计算机网络分层模型(OSI 7层模型)
2、说下对TCP/IP协议的理解,三次握手,四次挥手是如何交互的?
3、TCP协议,UDP协议,以及他们的区别?

JAVA基础

1、方法重写和重载
2、类的加载机制
3、自定义注解的实现,自定义注解中的注解有哪些?@Target
里面的参数分别是什么?在实际开发中有没有用过自定义注解,怎么用的?
4、String str = “abc” 和 String str = new String(“abc”)的区别?它们相等么?它们的内存分配
5、Bio和Nio的区别,实际开发中有哪些地方是用到nio的?
6、Nio的实现原理,从Nio的通道,缓冲区,selector选择器说起
7、IO多路复用的实现原理(NIO)
8、实际开发中运行反射原理的地方有哪些?
9、说下volatile关键字的作用,内存屏障是如何实现的?
10、什么是缓存穿透,缓存雪崩?
11、ConCurrentHashMa是如何做到高并发的?
12、动态代理的实现方式?CgLib和jdk的代理有什么区别?
13、java对象的生命周期
14、java内存模型?(Java Memory Model,JMM),有哪些特性?
15、java8有哪些重要特性,分别是什么?
16、java中的拆箱,装箱是如何实现的?

集合相关

1、hashMap的底层实现原理,为什么扩容的时候是以2的冪次进行扩容,扩容之后如何将老的数组移到新的数组上的?
2、arrayList的底层实现原理,扩容机制
3、ConcurrentHashMap的实现原理,与hashMap的区别,hashMap为什么是线程不安全的?
4、HashTable与HashMap的区别?
5、TreeSet和HashSet的区别?
6、TreeMap的底层实现,二叉树,平衡树,B+树
7、什么是跳跃列表?简称跳表

多线程相关

1、线程和进程的区别
2、线程的状态有哪些
3、创建线程的方式有哪些
4、创建线程池的方式有哪些,核心参数是哪些?核心参数的意义
5、线程池的队列有哪些?
6、什么是可重入锁,可重入锁的实现原理?通过可重入锁,可以说到AQS
7、公平锁和共享锁的实现原理是什么?为什么默认是非公平锁?好处是什么?
8、使用 synchronized 关键字,如果在锁中出错了,怎么办,如何进行锁的释放?考的是lock,unlock,finally中进行锁的释放。
9、synchronized 关键字的底层实现?
10、什么是守护线程?
11、CountDownLatch是如何使用的?
12、ThreadPoolTaskExecutor线程池使用过么?如何使用的?底层原理是什么?
13、ArrayBlockingQueue 与 LinkedBlockingQueue的区别?
14、wait() 与 Thread.sleep() 的区别?哪些是会释放锁资源的?
15、ThreadLocal的底层实现原理
16、在使用线程池过程中遇到的坑有哪些?
17、设置线程池参数的时候需要注意哪些东西?IO密集型,CPU密集型是如何参数设置的?
18、如何自己去定义线程池的拒绝策略,然后抛出自定义异常?

JVM相关

1、jvm的内存模型,类加载时都存放在哪些区域
2、jvm的方法区中有哪些东西?
3、jvm的内存分配策略
4、jvm的垃圾回收算法
5、对eden区的监控指标是什么?老年代的呢?
6、Class文件中包含哪些东西?
7、说下对GC roots的理解
8、jvm 命令行工具都有哪些?分别是什么?
9、java中引用类型都有哪些?强引用,弱引用,软引用,虚引用等
10、为什么要划分成年轻代和老年代?
11、jvm 1.7和1.8相比,有什么区别?

框架

Spring

1、过滤器和拦截器的区别
2、Spring IOC,AOP的原理,实际开发中有没有针对AOP的实现
3、Aop的底层实现是什么样的?
4、@Resource注解和@AutoWire注解区别
5、BeanFactory和FactoryBean的区别
6、IOC、AOP的全称是什么?
7、Spring框架中用到的设计模式?哪里用到的?
8、Spring 事务了解么?是如何实现的?

SpringMVC

1、springmvc的运行流程
2、@RequestBody和@ResponseBody如何进行前后端参数绑定的,考的是有没有跟过源码

MyBatis

1、myBatis xml文件中 #{} 和 ${} 接收参数的区别,为什么 #{} 可以防sql注入?mysql是如何执行语句的?mysql预编译的过程
2、myBatis xml文件中的标签有哪些,动态sql的通过标签如何实现?
3、mybatis的常用注解,@Mapper @Param
4、xml文件是如何进行解析,加载的,考的有没有跟过mybatis的源码
5、mybatis的一二级缓存

SpringBoot

1、springBoot的运行流程,初始化配置的时候,初始化的是哪些东西(说具体点,精确到类)
2、springBoot的常用注解有哪些,怎么实现的?
3、@conditionOnClass相关注解,分别是什么意思?

SpringCloud

1、说下微服务的缺点?说出几点
2、SpringCloud的实现原理

Dubbo(会问源码)

1、Dubbo框架的应用,如何实现与第三方进行交互(zk,注册中心)
2、Dubbo的底层协议是什么(Netty),了解Netty么
3、dubbo是如何实现可插拔式的?dubbo+zk可以,dubbo+redis也可以
4、dubbo的 register provider consumer标签中分别有什么东西?
5、dubbo序列化的过程是怎样的?反序列化是不是会影响单例模式?readObject(),writeObject()实现
6、JDK的SPI与Dubbo的SPI的区别是什么?

数据库

1、给定一个学生表,学生成绩表,要求学生的各科成绩的总和,以报表的形式呈现。行转列
2、如何优化线上的慢sql的?
3、如何通过sql语法实现 表锁或行锁?
4、一个联合索引,一个时间范围的索引,查询的时候2个都会走索引么?

索引

1、说下聚集索引
2、说下对B+树的理解,如何能从二叉树,平衡二叉树,说到B+树最好
3、mysql InnoDB引擎是 如何存储数据的
4、在插入数据的过程中,如果一页的数据已经满了,但是我还想要往这页里面插入数据,怎么办?考的 页分裂技术
5、mysql索引树是如何维护的,为什么使用索引查询数据比较快?
6、mysql为什么不用Hash索引?而用的是B+树索引
7、mysql为什么不用B树,而用B+树?

事务

1、事务的隔离级别,分别详细说下(经常会问到,mysql的可重复读)
2、分布式事务是如何实现的?
3、事务如何回滚的?(mysql的 undo log)
4、事务的传播机制有哪些?

Git

1、如何将另外一个分支的指定版本合并到自己的分支上?

Redis (考的特别多)

1、redis的五大数据类型,经常都怎么用,list的数据结构是什么样的? set和zset的区别?hash的数据结构,zset有序列表的底层实现是什么?
2、redis是单线程的,为什么我们还要去使用它呢?redis的使用场景
3、redis分布式锁的实现?如何防止死锁
4、redis的集群,存一条数据进redis,redis集群都会有这条数据么?是如何去分发的?
5、redis的主从模式
6、redis为什么是单线程的,而不采用多线程呢,多线程不更快么?
7、redis的常用命令
8、redis的LRU算法
9、第三方分布式锁 redission,有没有了解
10、了解CAP么?redis的CAP原理是怎样的?
11、redis的过期策略
12、JedisClient的各个数据结构的底层实现

消息中间件

1、RabbitMq的实现原理
2、rabbitMq的交换器类型
3、rabbitMq的协议是什么?
4、说下对死信队列了解

Zookeeper

1、zookeeper是干嘛用的?
2、zookeeper的节点类型有哪几种?
3、zk为什么只能配置奇数个服务
4、zk的选举策略是什么?

Docker

1、对Docker了解么?

搜索引擎相关

1、ES搜索引擎了解么?

业务场景相关

1、30个学生的英语成绩都知道,放在缓存中,按照成绩排序,取出最大的前10位。命令是什么?
2、工作流,activity了解么,底层是如何实现的?业务中你们是怎么使用的?
3、C 同时调用A接口,B接口;调用A接口耗时为80ms,调用B接口是30ms,现在需要优化接口性能,将其优化到 55ms以内,怎么做?考的是 CountDownLatch 的使用
3、手写一个拦截器,不使用任何其他第三方的组件。
4、如何实现一个Trace(分布式链路追踪系统)
5、zk 挂掉,consumer 是否可以直接调用provider?

线上问题处理

1、网络定位如何定位?
2、监控系统如何进行打点的?

算法相关

1、从1 加到 1000000,要求时间复杂度是O(1),如何实现?
2、在1000000查找一个数字,要求最快的实现方式,考的是二分查找法
3、给定一个有序的数组,传入一个数字,然后通过二分查找法查找一个数字,有的话返回该数字第一次出现的下标,没有的话,返回 -1; 二分法的时间复杂度是多少?

Linux

1、查询某个进程的 cpu 占用率
2、jdk 查看 GC 的命令
3、查看内存的命令
4、查看磁盘使用情况的命令

面试题转载:https://www.jianshu.com/p/2e33fc09a59c

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值