java中级程序员面试可能遇到的问题

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

 

1.BeanFactory 和FactoryBean区别;

BeanFactory为IOC的一个接口或者对象工厂, 创建、实例化、定位、配置应用程序中的对象及建立这些对象间的依赖;

FactoryBean也是接口 , 是一种工厂bean,可以返回bean的实例,我们可以通过实现该接口对bean进行额外的操作,例如根据不同的配置类型返回不同类型的bean,简化xml配置等;

2.AOP原理及其运用;

3.事务的隔离级别,事务是什么;

四种隔离级别,读写未提交,读写提交,可重复度,串行化;事务4种特性,原子性,一致性,持久性,隔离性,既ACID

4.set不重复存储的原理(equals()和hashcode()方法来实现)

5.@Autoriwed和@Resource注解的区别;

@Autowired只按照byType 注入(加@Qualifier使用和 @Resource一样);@Resource默认按byName自动注入,也提供按照byType 注入;

6.RequestMapping的path 加不加/的区别;

带上/是绝对路径,不带是相对,规范应该带,虽然带不带都能正确访问到后台

7.myBatis和hibernate的区别;

8.IO和NIO的原理;

9.spring反射机制;

反射就是把实例化的对象放入spring容器

10.MongoDB和关系型数据库定型区别;

MongoDB是基于对象的存储,改变对象字段比较容易;

关系型数据基于表,表之间的联系拓展性较高,

11.for循环中删除ArrayList的问题;(不能删除,因为list会减少;用foreach会报下标越界异常,迭代器iterator可以)

12.dubbo原理,zookeeper原理,redis原理;

13.乐观锁和悲观锁;

悲观锁总假设最坏的情况,每次拿数据的时候都认为会修改,所以就会上锁, 这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程),像 synchronizedReentrantLock等独占锁就是悲观锁思想;

总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现; 乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁

14.线程安全和线程不安全;

线程安全就是多线程访问时,采用了 synchronized加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染;

线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据;

15.servlet线程不安全?;

解决办法:

1.同步对共享数据的操作

使用synchronized关键字来保障一次只有一个线程可以去访问被保护的区域

2.避免使用实例变量

线程安全问题还有些是由于实例变量造成的,只要在servlet里面的任何地方都不去使用实例变量,

那么该Servlet就可以保证线程安全。

 

16.hashMap和concurrentHashmap的区别;

hashMap基于数组和链表,线程不安全,key和value可以为空;concurrentHashmap也基于数组和链表,它分为多个segmentsegment 通过继承 ReentrantLock 来进行加锁,所以每次需要加锁的操作锁住的是一个 segment,这样只要保证每个 Segment 是线程安全的,也就实现了全局的线程安全。

17.多线程使用及其线程池;

多线程用继承Thread类,实现Runnable接口,四种线程池,常用的ArrayBlockingQueue,和LinkedBlockingQueue区别

18说一下Spring的核心模块

  • Spring Core【核心容器】:核心容器提供了Spring的基本功能。核心容器的核心功能是用IOC容器来管理类的依赖关系。
  • Spring AOP【面向切面】:Spring的AOP模块提供了面向切面编程的支持。SpringAOP采用的是纯Java实现,采用基于代理的AOP实现方案,AOP代理由IOC容器负责生成、管理,依赖关系也一并由IOC容器管理。
  • Spring ORM【对象实体映射】:提供了与多个第三方持久层框架的良好整合。
  • Spring DAO【持久层模块】: Spring进一步简化DAO开发步骤,能以一致的方式使用数据库访问技术,用统一的方式调用事务管理,避免具体的实现侵入业务逻辑层的代码中。
  • Spring Context【应用上下文】:它是一个配置文件,为Spring提供上下文信息,提供了框架式的对象访问方法。
  • Spring Web【Web模块】:提供了基础的针对Web开发的集成特性。
  • Spring MVC【MVC模块】:提供了Web应用的MVC实现。Spring的MVC框架并不是仅仅提供一种传统的实现,它提供了一种清晰的分离模型。

19.说一下spring中Bean的作用域

singleton:

    Spring IoC容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象。Singleton作用域是Spring中的缺省作用域。

prototype:

    每次通过Spring容器获取prototype定义的bean时,容器都将创建一个新的Bean实例,每个Bean实例都有自己的属性和状态,而singleton全局只有一个对象。

request:

    在一次Http请求中,容器会返回该Bean的同一实例。而对不同的Http请求则会产生新的Bean,而且该bean仅在当前Http Request内有效。

session:

    在一次Http Session中,容器会返回该Bean的同一实例。而对不同的Session请求则会创建新的实例,该bean实例仅在当前Session内有效。

global Session:

    在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在使用portlet context时有效。

20.短连接 

连接->传输数据->关闭连接 

HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。 

也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。 

  

长连接 

连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。 

长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。 

21.

http是要基于TCP连接基础上的,简单的说,TCP就是单纯建立连接,不涉及任何我们需要请求的实际数据,简单的传输。http是用来收发数据,即实际应用上来的

 

22.MyBatis和Jdbc区别,及其持久化。

MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集,用SqlSessionFactory和

SqlSession来完成数据持久化

23.synchronized和volatile的区别

1.volatile轻量级,只能修饰变量。synchronized重量级,还可修饰方法;

2. 仅仅使用volatile并不能保证线程安全性。而synchronized则可实现线程的安全性;

3. synchronized不仅保证可见性,而且还保证原子性; volatile只能保证数据的可见性,不能用来同步,不保证原子性

24.mybatis一级缓存和二级缓存的区别

一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构用于存储缓存数据。不同的sqlSession之间的缓存数据区域是互相不影响的。也就是他只能作用在同一个sqlSession中,不同的sqlSession中的缓存是互相不能读取的;

二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

UserMapper有一个二级缓存区域(按namespace分),其它mapper也有自己的二级缓存区域(按namespace分)。每一个namespace的mapper都有一个二级缓存区域,两个mapper的namespace如果相同,这两个mapper执行sql查询到数据将存在相同的二级缓存区域中。

25.线程池中,阻塞队列的作用(用来保存等待执行的任务);submit()和execute()的区别:execute方法用于提交不需要返回值,无法得知是否正常执行,sumbit提交任务会有返回值(Future),;来判断是否执行成功; shutdown()只是中断没有正在执行的任务;shutdownNow()会中断所有正在执行或者暂停的任务。

26.spring cloud eureka 和zookeeper区别

eureka的CAP 理论C(Consistency):数据一致性。大家都知道,分布式系统中,数据会有副本。由于网络或者机器故障等因素,可能有些副本数据写入正确,有些却写入错误或者失败,这样就导致了数据的不一致了。而满足数据一致性规则,就是保证所有数据都要同步。

A(Availability):可用性。我们需要获取什么数据时,都能够正常的获取到想要的数据(当然,允许可接受范围内的网络延迟),也就是说,要保证任何时候请求数据都能够正常响应。

P(Partition Tolerance):分区容错性。当网络通信发生故障时,集群仍然可用,不会因为某个节点挂了或者存在问题,而影响整个系统的正常运作。

Ap原则

。Eureka 各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而 Eureka 的客户端在向某个 Eureka 注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台 Eureka 还在,就能保证注册服务可用(即保证A原则),只不过查到的信息可能不是最新的(不保证B原则)。

 

zookeeper 的CP原则

zookeeper 同步数据sync,也有个缺陷,刚刚提到了 leader 节点,当 master 节点因为网络故障与其他节点失去联系时,剩余节点会重新进行 leader 选举。问题在于,选举 leader 的时间太长,30 ~ 120s, 且选举期间整个 zookeeper 集群都是不可用的,这就导致在选举期间注册服务瘫痪。

27.Elastic-job simple和dataflow 区别

simple 简单的就是调用1次然后执行1次,dataflow用来处理数据流,其中抓取(fetchData)和处理(processData)数据,流式处理数据只有fetchdata方法返回值为null或者集合长度为空时,作业才会停止抓取,否则作业将一直执行下去。

28.TCP与UDP区别

TCP与UDP区别总结:

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的

UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5、TCP首部开销20字节;UDP的首部开销小,只有8个字节

6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

Java中级面试题及答案(120道Java中级面试题大汇总) Java中级面试题及答案【最新版及答案,干货!!!这是一个中级Java面试系列题中的第一部分。这一部分论述了可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等Java核心问题Java中级面试永远是程序员迈向成功的第一个门槛,想要面试成功,各种面试题的洗礼是必不可少的,下面就来看看小编精心整理的一些java高级工程师面试题及答案吧。如果不背 Java面试题的答案,肯定面试会挂!进程是系统进行资源分配和调度的一个独立单位,线程是CPU调度和分派的基本单位进程和线程的关系:**1、**一个线程只能属于一 阅读详情

相关推荐

Java程序员面试必备:初级至中级知识点总结

面向对象编程的三大特性是封装、继承和多态,它们共同构成了面向对象编程的核心。Java允许我们创建自己的异常类型,以便更精确地描述特定的错误情况。自定义异常通常是扩展了Exception类(非运行时异常)或类(运行时异常)。下面是一个自定义异常的简单例子:// 业务逻辑代码这段代码展示了如何定义一个继承自Exception的自定义异常,并在某个方法中抛出它。集合框架是Java编程语言中处理一组对象的标准方法。它为存储、检索、操作和处理数据集合提供了一种系统化的方案。

weixin_35639680的博客 1103

基于任务调度的企业级分布式批处理方案

分布式任务调度平台 SchedulerX 为企业级分布式批处理提供来完善的解决方案,为用户提供了快速易用的接入模式,并支持定时调度、可视化运行跟踪、可管控简运维、高可用的调度服务,同时配套企业级监控大盘、日志服务、监控报警等能力。...

数据库技术 555

【分布式系统学习】CAP原理详解

概述:互联网最重要任务莫过于海量数据处理,即大规模分布式系统,分布式是互联网的核心技术!!!如上所述,分布式系统是无法同时满足CAP三个特性的。1.Atomicity(原子性)一个事务中的所有操作,要么全部完成,要么全部不完成,不会在中间某个环节结束。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。2.Consistency(一致性)在事务开始之前和事务结束以后,数据库的完整性没有被破坏。3.Isolation(隔离性)

大龄烤红薯的博客 5001

Java中级面试常见题目+答案

目录一.基础知识1.集合类:List和Set比较,各自的子类比较(ArrayList,Vector,LinkedList;HashSet,TreeSet);2.HashMap的底层实现,之后会问ConcurrentHashMap的底层实现;3.如何实现HashMap顺序存储:可以参考LinkedHashMap的底层实现;4.HashTable和ConcurrentHashMap的区别;5.String,StringBuffer和StringBuilder的区别;6.Object的方法有哪些:比如有wait方

vampire_Violet的博客 1万+

java中级面试题集锦

目录 基础 &与&&区别 使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 静态变量和实例变量的区别? 是否可以从一个 static 方法内部发出对非 static 方法的调用? "=="和 equals 方法究竟有什么区别? int和Integer的区别 什么是for each循环,它可以循环那些数据类型 重载与重写区别? ...

软件猿扫地僧 3万+

Java中级工程师面试

由于Java中级工程师的面试题非常广泛,且每个公司或团队的具体需求都可能不同,因此无法列出所有的面试题及其答案。请注意,这些题目只是示例,并不保证涵盖所有可能面试内容。

pythontxt的博客 4616

Java程序员有必要深究源码吗?

最近后台收到很多粉丝反馈,说的是程序员究竟要不要去读源码?当下行情,面试什么样的薪资/岗位才会被问到源码? 对此,我的回答是:一定要去读,并且要提到日程上来! 据不完全统计,现在市面上不管是初级,中级,还是高级岗,面试的时候都有可能会问到源码中的问题,它已经成为程序员常规必备的一个技术点。如果你当下想通过一个面试,或者想把中级薪资要到相对于比较高的话,源码这块就必须要会。

weixin_50205273的博客 375

java中级程序员面试题_中级Java程序员常见面试题汇总

下面是一些中级Java程序员常见面试题汇总,你可以用它来好好准备面试。什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点。线程和进程有...

weixin_39895862的博客 1724

一个JAVA中级程序员面试准备

JAVA面试准备: 文章目录JAVA面试准备:1,JAVA——SE基本数据类型:字符串:面向对象:集合:多线程设计模式相关算法:面试题之:某某与某某有什么区别2,JAVA——EESPRINGSPRINGMVCMYBATISSPRINGBOOTSPRINTCLOUDDOUBBOZOOKEEPER3,MYSQL NOSQLMYSQLREDISMongDB4,前端 js5,LINUX 环境,GIT,S...

sinat_32568213的博客 5444

Java程序员面试必备:“基础 - 中级 - 高级”Java 程序员面试复习路线

不管是基础还是中级、高级,每个 part 都至关重要重要的,而且我觉得特别是基础这一块,如果基础都没有打牢,那怎么去盖楼?而以上我所例举的全部基础部分的面试题、中级开发所对应问题以及高级程序员要掌握的知识点,相关的完整解析都有全部整理的啦。基础部分题目+答案有 40 多页,中级开发的也有 40 多页,高级部分的内容就比较多了(有 180 页了),全都弄成 PDF 文件了,有需要的的朋友来找小编领取就行。

m0_69632475的博客 611

2025 金三银四必备:“基础 - 中级 - 高级”Java 程序员面试复习路线

不管是基础还是中级、高级,每个 part 都至关重要重要的,而且我觉得特别是基础这一块,如果基础都没有打牢,那怎么去盖楼?

m0_46995061的博客 876

中级程序员面试

JAVA 中级面试题 (附答案)

qq_42117592的博客 663

金三银四必备:“基础 - 中级 - 高级”Java 程序员面试复习路线

不管是基础还是中级、高级,每个 part 都至关重要重要的,而且我觉得特别是基础这一块,如果基础都没有打牢,那怎么去盖楼?而以上我所例举的全部基础部分的面试题、中级开发所对应问题以及高级程序员要掌握的知识点,相关的完整解析都有全部整理的啦。基础部分题目+答案有 40 多页,中级开发的也有 40 多页,高级部分的内容就比较多了(有 180 页了),全都弄成 PDF 文件了,有需要的的朋友来找小编领取就行。

m0_69632475的博客 724

2024一位Java中级程序员的跳槽面经,java技术支持面试

Java面试核心知识点一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!Java面试核心知识点《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!Java面试核心知识点一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间![外链图片转存中…(img-cDp9ebgA-1713590751309)]Java面试核心知识点。

2401_84408291的博客 956

中级java面试经历

2018年已经远去,2019年悄然而至。跳槽不仅是为了涨薪,更是为了锻炼自己,提高自己的能力。树挪死,人挪活。在一个公司呆的时间越长,就越老油条,从而失去不断前进的动力。现在下面就主要讲述我这一个月面试下来,面试官对中级java程序员的技术要求和面试技巧。 首先讲对中级java程序员的技术要求: 第一部分: java ...

dengpengfu4092的博客 335

java中级程序员面试题,2024最新Java面试题目

互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。下面有部分截图希望能对大家有所帮助。人,相信经过一些面试,大家都会有这些感触。

m0_60606468的博客 845

10年Java面试总结:Java程序员面试必备的面试技巧

作为一名Java程序员面试是你职业生涯中不可或缺的一部分。一个成功的面试不仅能展现你的技术能力,更能展示你的思维过程、问题解决能力和与人合作的态度。通过这些18个技巧的运用,你可以在面试中更好地展示自己,从而获得心仪的工作机会。记住,持续学习和不断实践是提升自己的关键。祝你面试成功!本文已收录于,我的技术网站ddkk.com,有大厂完整面经,工作技术,架构师成长之路,等经验分享。

架构师专栏 2356

【视频】今天帮公司面试了个要25K的Java程序员,看看我都问他些什么问题

你猜最后我给了他多少K?

敖丙 2万+
上一篇: POI导出Excel的三种方式HSSFWorkbook ,XSSFWorkbook ,SXSSFWorkbook区别
下一篇: ActiveMq和RabbitMq区别及其解析
CLG_csdn
博客等级 码龄10年 8粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值