JAVA 面试题经典(附答案)

2023-05-16

JAVA

JAVA8大基本数据类型

japhet_JAVA8大数据基本类型
J AVA8大基本数据类型

HashMap和Hashtable的比较
        Hashtable:
            1.Hashtable不允许key或者value为null,线程安全,实现线程安全的方式是在修改数据时锁住整个Hashtable,效率低

            2.Hashtable线程安全的,很多方法都有synchronized修饰,但同时因为加锁导致单线程环境下效率较低。
        Hashmap:
            1.HashMap允许有一个key为null,允许多个value为null,线程不安全

            2.在多线程环境下会容易产生死循环,但是单线程环境下运行效率高;

一般建议用currentHashMap,因为他大量的利用了volatile,final,CAS等lock-free技术来减少锁竞争对于性能的影响,

ArrayList和LinkedList的比较

         共性:ArrayList与LinkedList都是List接口的实现类,因此都实现了List的所有未实现的方法,只是实现的方式有所不同。

         区别:List接口的实现方式不同
                  ArrayList实现了List接口,以数组的方式来实现的,因此对于快速的随机取得对象的需求,使用ArrayList实现执行效率上会比较好。
                  LinkedList是采用链表的方式来实现List接口的,因此在进行insert和remove动作时效率要比ArrayList高。适合用来实现Stack(堆栈)与Queue(队列)。

list和set的区别

        List,Set都是继承自Collection接口

        list:元素有放入顺序,元素可重复

        和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变

        set:元素无放入顺序,元素不可重复,重复元素会覆盖掉

        检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变


Java 重写(Override)与重载(Overload)
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

线程

java 线程(中、高级)总结

Spring

Spring是什么
spring是一个容器,用来装javabean(java对象的) 中间层框架

ioc aop 控制反转,面向切面,避免了依赖注入等问题

Aop是什么
将程序中交叉业务逻辑(日志,事务,参数校验),封装成一个切面,然后注入到目标对象,达到方法复用的功能

IOC是什么
ioc容器:存放map对象,也就是存放的各种对象,项目启动会去读取配置文件里面的bean,

控制反转:对象A获得依赖对象B的过程,由主动变成被动的行为,对象和对象之间没有相互关联,都依赖ioc容器了

依赖注入: 动态的将某种依赖关系注入到对象中

Spring Bean生命周期
1、根据类包解析得到beanDefinition

2、构造方法的推断

3、实例化得到对象

4、对对象中的加了@Autowired直接的属性进行属性填充

5、回调Aware方法,比如 BeanNameAware BeanFactoryAware

6、调用BeanPostProcessor的初始化前的方法

7、调用初始化方法

8、调用初始化后的方法,这里会进行aop

9、如果当前创建的bean是单例的,则会吧bean放入单例池里面

10、使用bean

11、销毁

Spring的事务什么时候会失效,怎么解决

aop的时候会失效,因为spring底层会生成一个代理对象,

1、方法自调用,解决方案: 不要用this来调用,可以通过spring提供的@Autowired 来调用

2、方法不是public的也会失效, 解决方案:开启Aspectj代理模式

3、数据库不支持事务(myisam),解决方案: 使用innodb引擎

4、没有被spring管理,

5、异常被catch了

JVM

mybatis

Mybaits的优缺点

sql灵活,sql写在xml中,与程序耦合度低,方便维护,可以重用,跟jdbc比较减少了大量代码,不需要手动开关连接,与各种数据库兼容,能够被spring集成,

sql语句编写量大,sql语句依赖于数据库,但是移植性差,不能随意更换数据库

#{ } ${}  的区别

#{} 是预编译处理、是占位符,会加上单引号 ,不会造成sql注入

${} 是字符串替换、拼接,不会加上单引号 ,会造成sql注入

MySql

MySql (中、高级)总结_Japhet_jiu的博客-CSDN博客

Redis

redis基本数据类型

String

hash

List 有顺序可重复

Set 无顺序,不能重复

zset 有顺序,不能重复 适合做排行榜 排序需要一个分数属性

redis怎么持久化

rdb:

        默认是开启了持久化,也可以手动设置触发条件 

        save 500 1  #500秒内有一次修改

        save  1000 10  #1000秒内有十次修改

        设置自动触发持久化时间

aof(追加文件 命令日志文件)(默认关闭  appendonly yes )  

        appendfsync:  always、everysec、no

 Redis的过期键的删除策略

惰性过期:访问的时候去检查key

定时过期:每隔一段时间去检查过期的key

 缓存雪崩、缓存穿透、缓存击穿

雪崩:
给缓存设置数据过期时间,时间随机,

缓存预热(启动项目的时候拿个接口来查询缓存,存起来)

穿透:(数据库没有,缓存也没有数据,预防攻击)

接口增加校验

如果数据库、redis都没有数据,可以把这个redis key设置为null,然后设置有效时间30秒,避免暴力攻击

击穿:(缓存没有,数据库有)

热点数据可以设置永不过期等

 Redis主从搭建集群

搭建Redis集群_Japhet_jiu的博客-CSDN博客

SpringCloud

SpringCloud 和 Dubbo的区别

底层协议: springcloud是基于http协议 ,dubbo是基于tcp协议 

注册中心:springcloud使用eureka,nacos等,dubbo是 zookeeper

模型定义:springcloud是一个应用定义定义为服务,dubbo将一个接口定义为一个服务

 什么是Hystrix (断路器)

阻止故障的连锁反应,实现熔断

快速的失败,实现优雅降级

提供实时的监控和警告

线程隔离:互不影响,但是会建很多线程

型号量隔离:型号量有限

分布式事务(Seata)

XA模式:强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入

        优点:

                事务的强一致,满足ACID原则

                常用数据库都支持,实现简单,没有代码侵入

        缺点:

                因为一阶段需要锁定数据库资源,等待二阶段结束才能释放,性能差

                依赖关系数据库实现事务

TCC模式:最终一致的分阶段事务模式,有业务侵入

        T:  try  资源检查和预留  C:  confirm 业务执行和提交   C: Cancel 预留资源的释放

        优点:

                一阶段完成直接提交事务,释放数据库资源,性能比较好

                相比AT模式,无需生成快照,无需使用全局锁,性能最差

                可以使用非事务型数据库(比如redis)

        缺点:

                有代码侵入,需要人为去编写 Try ,confirm 和cancel 接口,太麻烦

                软状态,事务最终一致

                需要考虑Confirm 和Cancel 的失败情况,做好幂等处理

AT模式:最终一致的分段式事务,无业务侵入,也是seata默认的模式

        优点:

                一阶段完成直接提交事务,释放数据库资源,性能比较好

                利用全局锁实现读写隔离

                没有代码侵入,框架自动完成回滚或提交

        缺点:

                两阶段之间属于软状态,属于最终一致

                框架的快照功能会影响性能,但比XA模式要好

SAGA模式:长事务模式,有业务侵入

        优点:

                一阶段直接提交事务,无锁,性能好

                不用编写TCC中的三个阶段,实现简单

        缺点:

                软状态持续时间不确定,时效性查

                没有锁,没有事务隔离,会有脏读

Rabbitmq

如何确保rabbitmq消息的可靠性

        开启生产确认机制,确保生产消息能到达队列

        开启消息持久功能,确保消息未消费前在队列中不会丢失

        开启消费者确认机制为auto,由spring确认消息后处理成功后完成ack

        开启消费者失败重试机制,并设置 messageRecoverer,多次重试失败后将消息放在另外一个异常交换机里面,由人工去处理

什么是死信交换机

        消费者的消息被拒绝,或者消息消费失败,返回了nack

        消息长时间没有被消费,(过期消息)

        消息队列满了,很久之前的的消息会变成死信

消息堆积的解决方案

        队列上绑定多个消费者,提高消费速度

        开启线程池,提高消费速度

        使用惰性队列

惰性队列(Lazy Queues)

        所有消息直接存入磁盘,不是写在内存里面

        消费者消费消息的时候,才回去从磁盘中读取,加载到内存

        支持上百万数据存储

rabbitmq的高级场景

        rabbitmq的高级场景_Japhet_jiu的博客-CSDN博客

Linux

linux 查看8080端口

netstat -anp|grep 8080

ps -aux|grep java

linux 查看磁盘空间

du -sh *

linux 查看CPU信息

cat /proc/cpuinfo

linux 查看物理内存等信息

free -h

linux远程发送文件

scp -i C:\Users\29574\Downloads\xxxxxxx..pem C:\Users\29574\Desktop\xx\xx\ROOT.zip xxuser@52.xx.xx.188:/home

 

后续更新,请等待。。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA 面试题经典(附答案) 的相关文章

  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • Mockito:如何通过模拟测试我的服务?

    我是模拟测试新手 我想测试我的服务方法CorrectionService correctPerson Long personId 实现尚未编写 但这就是它将执行的操作 CorrectionService将调用一个方法AddressDAO这将
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • Nginx服务安全漏洞修复

    1 安全漏洞说明 使用Nginx提供服务的产品 xff0c 经过安全扫描工具扫描后报出三个高风险 三个中风险安全漏洞 2 nginx版本过低自带安全漏洞 升级nginx版本到1 21 1后 xff0c 三个高风险漏洞消失 3 HTTP 信息
  • C/S架构的应用程序开发实战(二)

    后端服务 后端用python实现 xff0c 采用flask web框架 可从github上获取flasky源码 xff0c 在此基础上进行业务逻辑的实现 程序结构如下 xff1a app 业务逻辑实现代码 common 公共函数实现 这里
  • MySql安装相关

    windows安装mysql xff1a 1 获取并解压安装包 xff1a mysql 8 0 20 winx64 zip 2 配置环境变量 xff1a 3 管理员权限打开cmd xff0c 进入安装目录 xff1a H gt cd H t
  • MySql之索引

    通常小型项目涉及数据量比较小 xff0c 数据查询频率不高 xff0c 索引通常会被忽略 但当数据量较大 xff0c 涉及多个表 xff0c 查询较为频繁时 xff0c 我们需要对查询性能进行优化 xff0c 此时 xff0c 建立合适的索
  • jupyter-notebook二次开发

    背景 公司内部提供给算法人员用于模型训练的平台开发需求中提出了嵌入Jupyter Notebook模块 xff0c 而Jupyter Notebook是开源的 xff0c 方便后续对部分细节进行功能定制和优化 xff0c 需要对其进行调研
  • python中大数据文件读取

    python中大数据文件读取 python中经常会遇到读取大文件的场景 文件较小时 xff0c 我通常采用下面方法 xff0c readlines xff08 xff09 xff0c 该方法会一次性读取文件的所有行 xff0c 并将其放入l
  • Linux|奇怪的知识|locate命令---文件管理小工具

    前言 Linux的命令是非常多的 xff0c 有一些冷门的命令 xff0c 虽然很少用 xff0c 但可能会有意想不到的功能 xff0c 例如 xff0c 本文将要介绍的locate命令 xff08 平常很少会想到使用此命令 xff0c f
  • python之装饰器

    引言 软件开发中 xff0c 当需要创建高度重复的代码时 xff0c 需要寻求一种优雅的解决方案 python中的元编程即解决这类问题 xff0c 通过创建函数和类来修改 生成或包装已有的代码 装饰器就是python中用来包装函数的一种机制
  • docker容器中程序退出异常,GPU未释放

    1 问题描述 近期在docker容器中对一批数据通过算法进行清洗时 xff0c 当数据处理完成后发现进程未正常退出 xff0c GPU内存未正常释放 span class token punctuation span root 64 ai6
  • 初识Redis

    什么是Redis Remote Dictionary Server xff0c 即远程字典服务 xff0c 是一款开源的 基于内存也支持持久化的key value数据库 xff0c 提供多种语言API 通常应用于需要处理大规模数据读写的场景
  • python之闭包

    前言 闭包作为python高级特性中的一个 xff0c 初学总觉其披着一层神秘的面纱 xff0c 这里我们来一起揭开这层面纱吧 那什么是闭包呢 xff1f 闭包 xff0c 又称闭包函数 xff0c 和普通的嵌套函数类似 xff0c 闭包中
  • 三个基础排序算法

    排序在计算机算法中非常常见也非常基础 xff0c 不管是准备面试还是纯属兴趣 xff0c 掌握它都很有必要 选择排序 基本思想 xff1a 预置list i 为最小 xff0c 逐个比较range i len list 里的元素 xff0c
  • 数据结构之链表

    和顺序表相对应 xff0c 有个链式存储的数据结构 xff0c 命名曰链表 单链表 节点中只存储后项节点指针的链表 xff0c 称为单链表 定义节点 class LinkNode object def init self data 61 N
  • 数据结构之哈希表

    概念 哈希表是一种数据结构 xff0c 通过哈希函数来组织数据 xff0c 以支持快速插入和搜索 哈希表的关键思想是使用哈希函数将键映射到存储桶 更确切地说 xff0c 当我们插入一个新的键时 xff0c 哈希函数将决定该键应该分配到哪个桶
  • 图片数据清洗

    前言 数据对于深度学习算法模型的效果至关重要 通常 xff0c 在对采集到的大量数据进行标注前需要做一些数据清洗工作 对于大量的数据 xff0c 人工进行直接清洗速度会很慢 xff0c 因此开发一些自动化清洗工具对批量数据首先进行自动清洗
  • PyQt5 多线程实例

    前言 PyQt的所有窗口都在UI主线程中 xff0c 也就是main函数中执行了QApplication exec 的线程中 xff0c 在该线程中执行耗时较长的操作时 xff0c 会导致当前窗口停止响应 为了避免上述情况发生 xff0c
  • 模型评价标准

    机器学习 机器学习是通过一些让计算机可以自动学习的算法 xff0c 从数据中分析获得规律 xff0c 然后利用规律对新样本进行预测 评价标准 为了了解模型的泛化能力 xff0c 即判断模型的好坏 xff0c 我们需要用某个指标来衡量 xff
  • postgresql|数据库|【postgresql-12的基于pg_basebackup的主从复制部署】

    前言 xff1a postgresql数据库说实话是真心好用 xff0c 但 xff0c 想用好是比较困难的 那么 xff0c 造成该数据库使用困难的是它的内置工具非常的多 xff0c 并且整体优化是比较难的 比如 xff0c 自带的备份工
  • windows上的中文文件名上传到linux上乱码问题解决

    问题描述 有很多多层文件夹存放的数据保存在windows上 xff0c 文件夹和文件名均含有中文 xff0c 将这些文件目录传到linux上 xff0c 中文名显示乱码 问题分析 windows上中文默认编码格式是gbk xff0c 而li
  • JAVA 面试题经典(附答案)

    JAVA JAVA8大基本数据类型 J AVA8大基本数据类型 HashMap和Hashtable的比较 Hashtable xff1a 1 Hashtable不允许key或者value为null xff0c 线程安全 xff0c 实现线程