JAVA三年经验面试题总结

【面试】JAVA三年经验面试题 整理一下最近面试遇到过的问题,有一些想不起来了,希望能给大家一点帮助吧,也给自己留个底,嘿嘿,平时还是得多注意知识的积累,以及技术细节 - 1.JAVA基础类型各占几个字节? int 32bit short 16bit long 64bit byte 8bit char 16bit float 32bit double 64bit boolean 1bi... 阅读详情

文章目录

面试题

java
jvm、gc
  1. 聊聊你对jvm的认识
    JVM由JVM运行时数据区、执行引擎、本地库接口、本地方法库组成。
    JVM运行时数据区,分为线程共享部分(方法区、堆)和线程隔离区(虚拟机栈、本地方法栈和程序计数器)。
    1.1. 方法区
    用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
    运行时常量池(Runtime Constant Pool)是方法区的一部分。.Class文件中除了有类的版本/字段/方法/接口等描述信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将类在加载后进入方法区的运行时常量池中存放.
    运行时常量区的内容并不只是在编译期间产生,通过String.intern()也可以实现在运行时向常量区中添加内容。
    需要注意的是:从JDK8开始,方法区被元数据区替代了。具体的原因和两者的区别可以参考官网。
    2.堆
    是JVM中最大的一块内存区域,该区域的目的只是用于存储对象实例及数组。该区域也是GC的最主要区域。
    根据Java虚拟机规范的规定,Java堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可,就像我们的磁盘空间一样.在实现时,既可以实现固定大小的,也可以是可扩展的,不过当前主流的虚拟机都是按照可扩展来实现的(通过-Xmx和-Xms控制).如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,就会抛出OutOfMemoryError异常。
    3.虚拟机栈
    每个线程方法在执行时都会创建一个栈帧,包含局部变量表、返回地址、操作数栈等信息。每个方法的执行与完成就对应的栈帧的入栈与出栈过程 。局部变量表占用空间的大小在编译期就确定了。这里需要注意:如果线程请求的栈深度大于虚拟机所允许的深度,将会抛出StackOverflowError异常;如果虚拟机栈可以动态扩展(当前大部分的Java虚拟机都可动态扩展,只不过Java虚拟机规范中也允许固定长度的虚拟机栈),当扩展时无法申请到足够的内存时将会抛出OutOfMemoryError异常。
    4.本地方法栈
    与虚拟机栈类似,不过其中执行是本地方法。对于HotSpot虚拟机而言,本地方法栈和虚拟机栈是统一的。
    5.程序计数器
    是一个小的内存空间,如果线程正在执行的是一个java方法,则此内存区域记录正在执行的虚拟机字节码指令的地址;如果线程正在执行的是native方法,则计算器中的值为空。此内存区域是唯一一个在JAVA虚拟机规范中没有规定任何OutOfMemoryError情况的区域。

    这几部分都有相关的JDK自带工具可以分析查看,比如jps, jstack, jmap, jhat, jstat等,还有图形化工具jconsole,jvisualvm,但对于Linux服务器就无能为力了。
    好了,关于JVM就讲完了,接下来进行提问:JVM哪些区域会发生OOME,以及各自原因是什么
    堆内存不足是最常见的 OOM 原因之一,抛出的错误信息是“java.lang.OutOfMemoryError:Java heap space”,原因可能千奇百怪,例如,可能存在内存泄漏问题;也很有可能就是堆的大小不合理,比如我们要处理比较可观的数据量,但是没有显式指定 JVM 堆大小或者指定数值偏小;或者出现 JVM 处理引用不及时,导致堆积起来,内存无法释放等。
    而对于 Java 虚拟机栈和本地方法栈,这里要稍微复杂一点。如果我们写一段程序不断的进行递归调用,而且没有退出条件,就会导致不断地进行压栈。类似这种情况,JVM 实际会抛出 StackOverFlowError;当然,如果 JVM 试图去扩展栈空间的的时候失败,则会抛出 OutOfMemoryError。
    对于老版本的 Oracle JDK,因为永久代的大小是有限的,并且 JVM 对永久代垃圾回收(如,常量池回收、卸载不再需要的类型)非常不积极,所以当我们不断添加新类型的时候,永久代出现 OutOfMemoryError 也非常多见,尤其是在运行时存在大量动态类型生成的场合;类似 Intern 字符串缓存占用太多空间,也会导致 OOM 问题。对应的异常信息,会标记出来和永久代相关:“java.lang.OutOfMemoryError: PermGen space”。
    随着元数据区的引入,方法区内存已经不再那么窘迫,所以相应的 OOM 有所改观,出现 OOM,异常信息则变成了:“java.lang.OutOfMemoryError: Metaspace”。
    直接内存不足,也会导致 OOM。

  2. 对GC了解哪些
    参考链接:谈谈对Java GC的了解

jdk1.8的新特性
  1. jdk1.8引入了哪些新特性,你用过哪些
    参考链接:JDK1.8 新特性(全)
java基础
  1. 你对Collection的了解
    参考链接:java集合Collection常用方法详解
  2. HashMap了解哪些
    参考链接:java中hashmap的实现原理与底层数据结构
  3. 循环list/map有哪几种方式,优缺点是什么
    参考链接:Java 遍历List或Map集合的4种方式
  4. 实现事务有哪几种方式
    参考链接:Spring事务管理之几种方式实现事务
  5. @Transactional是如何实现事务的
    参考链接:@transactional注解原理
  6. 设计模式有哪些,在项目中用了哪些
    参考链接:项目中用到的设计模式
  7. 事务不生效的场景有哪些
    参考链接:@Transactional来控制事务,事务不生效的场景
框架
spring
  1. ioc
    参考链接:谈谈对Spring IOC的理解
  2. aop
    参考链接:Spring AOP——Spring 中面向切面编程
spring boot
  1. 为什么使用springboot
    参考链接:为什么要使用Springboot
  2. 自动装配是如何实现的
    参考链接:SpringBoot自动装配原理分析
mybatis/mybatis-plus/springDataJpa
  1. mybatis中#和$的区别
    参考链接:https://www.cnblogs.com/hellokitty1/p/6007801.html
  2. 一对多如何实现
    参考链接:mybatis的一对多,多对一,以及多对对的配置和使用
  3. mybatis-plus与mybatis的区别
    参考链接:Mybatis-Plus和Mybatis的区别
  4. mybatis与springDataJpa的区别
    参考链接:深入浅析Mybatis与Hibernate的区别与用途
  5. mybatis-plus的批处理
    参考链接:给你的MyBatis-Plus装上批量插入的翅膀
    面试官问这个问题是为了看是否看过mybatis-plus的批处理源码,了解过的话它其实就是一个for循环单条插入。。。。。。
  6. 二级缓存
    参考链接:Spring二级缓存
    参考链接:MyBatis 二级缓存全详解
mysql
sql优化
  1. 发现一个sql查询过慢,如何去优化它
    参考链接:一条sql执行很慢,可能是因为什么? 怎么优化?
  2. 如何查看这个sql执行计划
    参考链接:查看sql语句的执行计划
  3. 是否有分库分表或读写分离
    参考链接:分库分表、主从、读写分离
索引
  1. mysql索引都有哪些,平时使用哪些
    参考链接:mysql 有哪些索引
  2. InnoDB与MyISAM的区别
    参考链接:mysql中innodb和myisam对比及索引原理区别
  3. 索引的数据结构,为什么选择b+树
    参考链接:MySQL索引底层结构为什么选择B+树
事务
  1. 事务的传播机制

    类型

    说明

    PROPAGATION_REQUIRED

    如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。

    PROPAGATION_SUPPORTS

    支持当前事务,如果当前没有事务,就以非事务方式执行。

    PROPAGATION_MANDATORY

    使用当前的事务,如果当前没有事务,就抛出异常。

    PROPAGATION_REQUIRES_NEW

    新建事务,如果当前存在事务,把当前事务挂起。

    PROPAGATION_NOT_SUPPORTED

    以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

    PROPAGATION_NEVER

    以非事务方式执行,如果当前存在事务,则抛出异常。

    PROPAGATION_NESTED

    如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

  2. 事务的四大特性

    • 原子性:事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。
    • 一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。
    • 隔离性:同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。
    • 持久性:指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。
  3. 事务的隔离级别(该问题存在于事务的并发问题,mysql默认的事务隔离级别为repeatable-read)

    事务隔离级别

    脏读

    不可重复读

    幻读

    读未提交(read-uncommitted)

    是

    是

    是

    不可重复读(read-committed)

    否

    是

    是

    可重复读(repeatable-read)

    否

    否

    是

    串行化(serializable)

    否

    否

    否

    • 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
    • 不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
    • 幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
  4. 乐观锁与悲观锁,如何实现乐观锁
    4.1 概念:

    • 悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作
    • 悲观锁,从字面理解就是很悲观,每次去拿数据的时候都认为别人会修改,所以在每次拿的时候对数据上锁,这样就保证了数据的准确性。比如mysql中的表锁,行锁。
    • 乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。
    • 乐观锁,在每次去拿数据的时候认为别人不会修改,不对数据上锁,但是在提交更新的时候会判断在此期间数据是否被更改,如果被更改则提交失败。

    4.2 实现:

    • 使用版本控制字段,再利用行锁的特性实现乐观锁,如下
      有一张订单表order,有字段id、order_no、 price, 为实现乐观锁控制,添加version字段,默认值为0

order表

id

1

order_no

123456

price

5

version

0

* 假设两个人同时进来修改该条数据,操作为:
1. 先查询该数据 select * from order where id = 1
2. 修改该条数据 update order set price = 1 where id = 1
如果两个人同时查询到该条数据price = 5,可以执行update操作,但任意一方还没执行update操作,那么最后双方都执行update,导致数据被修改两次,产生脏数据!
* 使用version字段控制版本后:
1. 两人先查询该数据 select * from order where id = 1
此时两人查询到的数据一样,id = 1, price = 5, order_no = 123456, version = 0
2. 两人都发现该条数据price = 5, 符合update条件,第一人执行update(因为mysql行锁的特性,两人不可能同时修改一条数据,所以update同一条数据的时候,是有先后顺序的,只有在第一个执行完update,才能释放行锁,第二个继续进行update):
update order set price = 1, version = version + 1 where id = 1 and version = 0
3. 执行完成后,version字段值将变成1, 第二人执行update:
update order set price = 1, version = version + 1 where id = 1 and version = 0
**此时的version的值已经被修改为1,所以第二人修改失败,实现乐观锁控制。**

redis
应用场景
  1. redis主要用来做什么
    众多语言都支持Redis,因为Redis交换数据快,在服务器中常用来存储一些需要频繁调取的数据,节省内存开销,也极大的提升了速度。
    将一些热点数据存储到Redis中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。

    • 会话缓存(最常用)
    • 消息队列(支付)
    • 活动排行榜或计数
    • 发布,订阅消息(消息通知)
    • 商品列表,评论列表
  2. 在你项目中哪里用到了redis,用来做了什么(主要讲讲在自己项目中怎么用的就行,会往深了的业务问)
    参考链接:redis常见应用场景

多线程
  1. 实现多线程有哪几种方式
    参考链接:java多线程的6种实现方式详解
  2. 在你项目中哪里用到了多线程
    参考链接:项目中哪里用到了多线程?
  3. 线程池创建的方式及参数
    参考链接:创建线程的四大方法及线程池的七大参数
服务器相关
  1. linux下载安装jdk需要哪些命令
    参考链接:linux下安装jdk 详细步骤

  2. docker的挂载,是否做过自动化部署
    参考链接:docker基础知识之挂载本地目录
    参考链接:Docker自动化部署(超详细)

  3. nginx的应用场景

  4. nginx的正向、反向代理

    • 正向代理:服务器位于客户端和服务器之间,为了从服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端。这里客户端需要要进行一些正向代理的设置的。
      正向代理中被代理的是客户端的请求(比如翻墙)
    • 反向代理:客户端对代理是无感知的,客户端不需要任何配置就可以访问,客户端将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
算法
  1. 排序算法除了冒泡排序外还了解哪些
    参考链接:JAVA排序算法:2、选择排序
    参考链接:JAVA排序算法:3、插入排序
    参考链接:JAVA排序算法:4、快速排序
    持续更新中…

  2. 递归求n的阶乘(该题是从笔试题上看到的)

     public class Factorial {
         public static void main(String[] args) {
             System.out.println("n=1 n阶乘为:" + factorialN(1));
             System.out.println("n=2 n阶乘为:" + factorialN(2));
             System.out.println("n=3 n阶乘为:" + factorialN(3));
             System.out.println("n=4 n阶乘为:" + factorialN(4));
         }
         private static int factorialN(int n) {
             //判断传进来的n是否为0,若为零返回阶乘为1
             if (n == 0) {
                 return 1;
             }
             return n * factorialN(n - 1);
         }
     }
    
  3. 二分查找算法
    参考链接:二分查找算法

TCP/HTTP/WebSocket
  1. TCP为什么会出现粘包现象,有何解决方案
    • 产生粘包问题的两个原因:
      1、发送方产生粘包:TCP协议通信连续多次调用send向对方发送数据,如果两次调用send的时间间隔极短,TCP协议为提高传输效率会将两次发送数据打包为一个数据包发送(Nagle算法)
      2、接收方产生粘包:如果在接收方接收数据时,接收方没有及时调用recv接收数据而下一个数据包又发送过来则recv在接收数据时会将两个或多个数据当做一个数据包处理,同样会产生数据粘包现象
    • 解决方法:
      1、取消TCP协议的优化机制(不是很好,降低传输效率)调用Setsockopt函数
      2、延长连续两次发送数据的时间间隔(比如调动Sleep函数)
      3、加包头(在发送数据之前先发送数据的大小,类型等相关信息)或者加间隔(在每段数据的结尾添加标识符以区分不同的数据段),一般包头数据都是定长的(项目中最完美的解决方案也是最常用的解决方案)
      接收方粘包问题的解决方案:对于接收只能尽可能的及时接收数据以避免粘包
  2. HTTP请求与WebSocket区别
    参考链接:webService、webSocket、socket、http之间的区别
  3. webSocket连接断开怎么办
    参考链接:WebSocket断开原因分析,再也不怕为什么又断开了
业务
  1. 单点登录如何实现(不适用安全框架)
    主要考察实现SSO的思路

  2. 让你设计一个接口给第三方调用,你会如何设计
    需要从接口设计(对参数的检验、格式转换)、并发(是否有高并发情况需要负载均衡)、安全机制(有效期token、IP白名单、数据加密)、拦截机制(重复请求的拦截)等方面去考虑

  3. 写一个接口需要用到哪些注解
    主要考察业务的深度,多讲些能提升你业务水准的注解例如:

    • controller层:

      @RestController //相当于@ResponseBody + @Controller
      @RequestMapping //指定url,映射请求
      @GetMapping //仅接收Get请求
      @PostMapping //仅接收Post请求
      @PutMapping //仅接收Put请求,Restful风格
      @DeleteMapping //仅接收Delete请求,Restful风格
      @RepeatSubmit //防止重复提交
      @RequiresPermissions//限制接口权限
      @Api //Swagger注解,使用在类上,表明是swagger资源
      @ApiOperation //使用于在方法上,表示一个http请求的操作

    • service层:

      @Service //标注服务层
      @Slf4j //logback日志
      @Autowired //自动注入
      @Component //把普通pojo实例化到spring容器中
      @DS //多数据源切换
      @Transactional //开启事务

文章部分内容参考链接:
https://www.cnblogs.com/jpcflyer/p/10666099.html
https://blog.youkuaiyun.com/lp2388163/article/details/80683383
https://www.cnblogs.com/cye9971-/p/11267431.html
https://blog.youkuaiyun.com/you_ranxi/article/details/103048747
http://www.voidcn.com/article/p-srcudkft-gq.html
感谢各位原创作者,“我们不生产水,我们只是大自然的搬运工”。
总的来说三年经验面试官问的基础问题变少了,开始问框架底层实现,从事java开发还是要做深做广,该文仅记录本人面试经验,若有错误之处还请指出,谢谢。

三年工作经验java面试题集合 仅以此文记录自己在4-5月份面试过程中遇到的问题,以备不时之需,描述相对简单。 1.actomic的底层原理是什么? AtomicInteger 是对 int 类型的一个封装,提供原子性的访问和更新操作,其原子性的操作实现是基于 CAS (compare-and-swap)技术。 CAS,表征的是一些列操作的集合,获取当前数值,进行一些运算,利用 CAS 指令试图进行更新,如果当前数值不变,代码没有其他线程进行并发修改,则成功更新。否则,可能出现不同的选择,要么进行重试,要么就反应一个成功或者失败的结 阅读详情

相关推荐

2024最新版Anaconda Navigator安装使用指南

本文简要介绍如何下载安装Anaconda Navigator最新版,以及如何使用Python内核搭载来完成应用程序开发。

jackson_lingua的博客 1万+

jvisualvm的使用

在多线程调试的时候用到了java的VisualVM工具,jdk1.6自动带了该工具。介绍下该工具的使用方法:准备 在windows下由于以下原因会导致 Local Applications Cannot Be Detected (Error Dialog On Startup): 1. Java程序缺少读写Windows的临时目录的权限 2. Windows的临时目录是放在非NTFS分区...

pengqb的专栏 334

从加权最小二乘(WLS)到IAA:手把手推导DOA估计中的迭代自适应核心公式

本文深入解析了从加权最小二乘(WLS)到迭代自适应算法(IAA)在DOA估计中的数学推导与应用。通过动态调整加权矩阵,IAA在低快拍数、相干源等复杂场景中展现出卓越性能,显著提升角度分辨率和检测概率。文章详细介绍了算法核心步骤、工程优化策略及前沿发展,为雷达探测和无线通信领域提供重要参考。

weixin_30847865的博客 291

jvisualvm的简单介绍

一、启动 打开cmd窗口,输入jvisualvm后点击回车就可以启动了,或者可以去jdk中的bin中找到jvisualvm.exe双击执行,具体位置例如: 二、作用 监控内存泄露,跟踪垃圾回收,执行内存分析、CPU分析、线程分析…… 三、线程中出现的几种颜色的线程状态解释 运行:正在运行的线程 休眠:执行了sleep()方法的线程 等待:执行了wait()方法的线程 驻留:线程池中的空闲线程 监视:被阻塞的线程,也就是正在等待其他线程释放锁的线程 四、安装Visual GC插件 无法连接Java Vis

qq_42449963的博客 1039

从零解析特斯拉线圈:谐振变压器的核心原理与DIY实践

本文深入解析特斯拉线圈的工作原理与DIY实践,从LC振荡电路到电磁耦合,详细介绍了谐振变压器的核心原理。通过材料清单、绕制技巧和安全指南,帮助爱好者从零开始打造迷你闪电发生器,体验高压电子实验的独特魅力。

weixin_33670786的博客 493

HI3516CV610海思SOC:超高清智慧视觉开发全攻略

本文全面解析海思HI3516CV610 SOC在超高清智慧视觉开发中的应用。该芯片集成双核A7处理器、1Tops NPU、AI ISP及4K视频编码器,专为智能摄像头设计。文章详细介绍了开发环境搭建、核心硬件架构、媒体处理平台(MPP)实战、AI算法集成与系统调优等全流程攻略,帮助开发者高效构建稳定可靠的视觉AI产品。

weixin_29269441的博客 1256

java jvisualvm简要说明

jvisualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存、cpu分析,线程分析... jvisualvm已经被集成在jdk1.6以上的版本中(不是jre)。自身运行需要最低jdk1.6版本,但是可以监控运行在jdk1.4以上版本的java程序 以jdk1.6update45(jdk1.6update45自带的jvisualvm)来做说明,当然也可单独下载独立的jvisu...

weixin_30919571的博客 841

ClickHouse集群扩容实战:用clickhouse-copier搞定数据迁移与分片重平衡

本文详细介绍了使用clickhouse-copier工具实现ClickHouse集群从3分片到5分片的平滑扩容实战。通过分片级并行处理、原子性保证等核心机制,该工具能高效完成数据迁移与分片重平衡,同时保持服务连续性。文章涵盖集群拓扑规划、表结构检查、迁移配置、执行监控及迁移后优化等关键步骤,为大数据量场景下的ClickHouse扩容提供完整解决方案。

weixin_29091837的博客 294

jvisualvm使用说明

jvisualvm是官方推荐的最强大的运行监视和故障处理程序,值得java程序员去熟悉掌握它来分析自己的程序。 启动与配置 命令行执行jvisualvm即可启动jvisualvm工具。但是目前默认的插件中心地址已不再可用,需要在 工具->插件->设置 中重新设置插件中心地址。 插件中心地址可在 https://visualvm.github.io/pluginscenters.htm...

gs_albb的博客 7971

ADS中HB仿真自动优化报错问题解决心得

在ADS HB仿真中自动优化出现报错被强制暂停,解决方法如下

yyyyyyyyyyjy的博客 6543

LCD驱动芯片——BL55072A驱动程序

初始化子程序: START 0x7C; I2C子地址 0xEA;ICSET,软件复位芯片 0xC0;MODSET,关显示 0xF0;BLKCTL,关闪烁 0xA3;DISCTL,80Hz Line inversion,High Power mode 0xE8;ICSET,清复位bit1 STOP 显示刷新子程序: START 0x7C;I2C子地址 0xF0;BLKCTL,关闪烁 0xA3;DISCTL,80Hz Line inversion,High Power mode 0xE8或0xEC;ICSE

love421的博客 3176

Jvisualvm介绍;使用Jvisualvm:运行jvisualvm.exe;安装gc插件;查看gc

Jvisualvm介绍;使用Jvisualvm:运行jvisualvm.exe;安装gc插件;查看gc

weixin_72637723的博客 1329

Unity 编辑器篇|(四)编辑器拓展GUI类 (全面总结 | 建议收藏)

GUI 类是 Unity GUI 的接口,并且具有手动定位功能。“即时模式”GUI 系统(也称为 IMGUI)是一个完全独立的功能系统,不同于 Unity 基于游戏对象的主 UI 系统。IMGUI 是一个代码驱动的 GUI 系统,主要用作程序员的工具。为了驱动该系统,需在实现脚本上调用 OnGUI 函数即时模式 GUI 系统常用于:创建游戏内调试显示和工具。为脚本组件创建自定义检视面板。创建新的编辑器窗口和工具以扩展 Unity 本身。

游戏开发小Y的博客 12万+

Java最新面试题总结(三年经验)

Java集合框架分为单列集合Collection和双列集合Map。Collection包含无序不可重复的Set接口和有序可重复的List接口。常见实现类有ArrayList(数组结构,查询快增删慢)、LinkedList(链表结构,增删快查询慢)、HashSet(哈希表结构,存取快)等。Map存储键值对,常见实现类有HashMap(线程不安全,允许null键值)、HashTable(线程安全,不允许null键值)、ConcurrentHashMap(分段锁机制保证线程安全)。线程安全的Map可通过synch

2401_89221867的博客 1187

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

2025年Java最新面试题总结(三年经验)

threadlocl是作为当前线程中属性ThreadLocalMap集合中的某一个Entry的key值,不同的线程之间threadlocal这个key值是一样,但是不同的线程所拥有的ThreadLocalMap是独一无二的,也就是不同的线程间同一个ThreadLocal(key)对应存储的值(value)不一样,从而到达了线程间变量隔离的目的。这种方法的优点是实现简单,提高系统的性能,缺点是可能会导致数据不一致,因为MySQL写操作的数据和Redis读操作的数据之间的同步延迟,与存在一定的延迟。

2401_89221445的博客 762

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java三年工作经验面试题整理《精华》

springboot启动原理,Spring传播行为,Nacos的高可用特性,jvm调优

weixin_43552549的博客 6776

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【面试题】 Java 三年工作经验(2025)

1. 为什么选择 spring boot 框架,它与 Spring 有什么区别? 2. spring mvc 的执行流程是什么? 3. 如何实现 spring 的 IOC 过程,会用到什么技术? 4. spring boot 的自动化配置的原理是什么? 5. 如何理解 spring boot 中的 star? 6. spring boot 为什么要用嵌入式的 web 容器?

言之。 1万+

JAVA三年经验面试题

前言 与刚开始找工作面试相同的是都会问一些相同的问题, 不同的是现在面试官会更注重为什么, 也就是说注重深度而非广度. 3年, 5年, 10年分别是个人从事技术方面职业规划中的一个坎, 3年大部分时间应对了业务逻辑, 培养良好的规范和思想, 基础知识还是欠缺. 找工作时, 除了薪资符合个人职业规划也是相当重要的.废话少说, 以下是我前两天面试总结的面试题. JavaSE 集合 hashmap结构及原理 扩容因子, 如何扩容, 数据结构图…. ArrayList, LinkedList 原理及区

HongYu012的博客 860

java三年经验面试题_Java三年经验 - 面试总结

一轮面试下来,由最初的自信什么都能做,到现在感觉什么都不会做;但是面对面试官,却更坦然。对自己还能记得起来的面试题,稍微整理一下。欢迎指正。private、默认、protected、public作用范围1)private,同类2)默认,同类、同包3)protected,同类,同包,子类4)public,所有String trim的实现原理去掉首尾ASCII码值小于' '(空格)的字符StringB...

weixin_35679331的博客 1945

三年java经验面试总结,整理了一些java面试题供参考

此内容偏中高级,适合有三年或以上经验者。1. java中wait和sleep有什么区别?多线程条件下如何保证数据安全?答:最大区别是等待时wait会释放锁,而sleep会一直持有锁,wait通常用于线程时交,互,sleep通常被用于暂停执行。2. java中volatile和synchronized有什么区别?1.volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。

BASK2311的博客 1503

Java开发面试题目,java三年经验面试题

阶段一:筑基 Java基础掌握不牢,对于一个开发人员来说无疑是非常致命的。学习任何一个技术知识无疑不是从基础开始;在面试的时候,面试官无疑不是从基础开始拷问。 内容包括:Java概述、Java基本语法、Java 执行控制流程、面向对象、访问控制权限、接口和抽象类、异常、内部类、集合、泛形、反射、枚举、I/O、关于 null 的几种处理方式、思维导图。 1、Java概述 2、Java基本语法 3、Java 执行控制流程 4、面向对象 5、访问控制权限 由于文章内容比较多,篇幅不允许,部分未展示

m0_57066201的博客 641

java大厂面试真题,java三年开发经验面试题总结

前言 关于技术人如何成长的问题,一直以来都备受关注,因为程序员职业发展很快,即使是相同起点的人,经过几年的工作或学习,会迅速拉开极大的差距,所以技术人保持学习,提升自己,才能够扛得住不断上赶的后浪,也不至于被“拍死”在沙滩上。 近日,经过一朋友的透露,Alibaba也首发了一份限量的“Java成长笔记”,里面记载的知识点非常齐全,看完之后才知道,差距真的不止一点点! Java成长笔记主要是将Java程序员按照年限来进行分层,清晰的标注着Java程序员应该按照怎样的路线来提升自己,需要去学习哪些技术点。 下

EDGNB123的博客 296
上一篇: Java中高级面试题及答案
下一篇: Python中List的insert方法
普通网友
博客等级 码龄4年 3126粉丝 192原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值