java开发岗位面试

java开发岗位面试

技术栈:springboot框架+redis
个人笔试/技术面问题整理

1、SpringBoot有什么组件?
举例说几个:
①auto-configuration组件:核心特征。其约定大于配置思想,赋予了SpringBoot开箱即用的强大能力。
②starter组件:将复杂配置统一集成进starter,maven导入starter后,SpringBoot就自动扫描加载配置。
③springboot cli 组件:命令行工具,通过springboot cli,可通过Groovy脚本快速构建SpringBoot应用,并可通过命令行方式运行。
④actuator 组件:用来对应用系统进行自省和监控的功能模块,是SpringBoot的监控插件,本身提供了很多接口可以获取当前项目的各项运行状态指标。借助于Actuator开发者可以很方便地对应用系统某些监控指标进行查看、统计等。

2、@Service和@Autowired的区别?
@Service根据名称
@Autowired默认按类型配置

3、SpringBoot是基于什么服务器启动的?启动的原理是什么 ?
Tomcat
启动原理:
SpringBoot因内置了tomcat或者jetty服务器,不需要直接部署war文件,所以SpringBoot的程序起点是一个普通的主函数。
主函数:

@SpringBootApplication
public class DemoApplication{public  static void main (string[] args){springApplication.run(DemoApplication.class,args);}}

SpringBoot的启动过程都是通过@SpringBootApplication注解和SpringApplication.run方法来实现。

Curl localhost:8080/hello
Curl:验证接口

4、定义一个post接口使用的注解?
注解@PostMapping定义一个post接口
@RequestBody:把前端传过来的Json转换成Java对象(将Json对象映射成后台Java实体)。例:(@RequestBody User user)

5、Long型跟long型的区别,Long型中equals和“==”的区别?
long是基本数据类型,没有属性方法,只能进行数学运算;而Long是long相对应的引用数据类型,也是包装类,它有方法和属性。
类里面有方法和属性,而基本数据类型里面没有方法和属性。

long a = 1 ;
Long a1 = new Long(1);
Long a2 = new Long(1);

以上:a与a1相等,a与a2相等,a1与a2 equals相等。
由此可见,
Long定义的变量为一个Long类型对象;对应的是对象的引用地址;
long定义的变量为一个长整型数值的数值变量。

到底是选择Long还是long这个还得看具体环境,如果你认为这个属性不能为null,那就用long,因为它默认值为0;如果这个字段可以为null,那就应该选择Long。
long可以用“>”,“=”,“<”作比较,Long是一个对象,使用.equals方法进行相等比较,大小比较时使用“>”“<”对Long对象longValue()。例 : L1.longValue()>L2.longValue()

6、开发过程中错误代码,文件找不到的错误代码:404,服务器内部失败:500,内部网络故障或设置问题的状态:502,请求失败(错误的请求 400);

7、SpringBoot中如何处理事务?使用的任务注解?
SpringBoot提供了一个名为“@Transational”的注解来管理事务。
假设一个场景,需要在一个service中处理数据,并通过Rest调用将数据发送到另一个service。如若另一个服务器突然停止,如果在向另一个service服务发送Api调用之前将数据信息保存在自己的数据库中,那么将来会发生差异,因为另一个service正在丢失该记录。
为了避免这种情况,我们可以将“@Transactional”注解放入另一个service的方法中,然后从那里开始,如果调用另一个service时出现故障,正在进行的流程中的所有数据都将回滚!

@Transational 
public A a(B b,Double c)
{
//数据处理
//向另一个service发送Rest调用
}

8、MySQL数据库有自增序主键,Oracle有UUID主键来辨别唯一,但是无序,Oracle怎么实现自增长主键?
Oracle数据库自增长没有Mysql数据库简单,mysql可以在建表的时候设置auto_increment就好了,但Oracle这样不行,Oracle数据库必须建立序列,然后再mybatis插入id时,使用这个序列后,才能实现Oracle id 的子增长。
序列创建语句:

create sequence TBAL_OA_HOLIDAY_TYPE             //序列名称
increment  by 1                                  //以1倍的速度增长,也可以设置其他数字
start with 1                                     //从id=1开始 开始增长
maxvalue 9999                                    //最大值为9999,根据情况
minvalue 1                                       //最小值为1
nocycle                                          //不循环,也就一直增长
cache 20                                         //设置缓存cache个序列,如果系统down掉或者有其他情况不连续,也可以设置为 ---NOCACHE
noorder ;

建立了Oracle序列之后,我们就可以再mybatis中插入这样使用,来插入id了;

insert into TBAL_OA_HOLIDAY_TYPE(ID,TYPE_NAME,REMARK) values(TBAL_OA_HOLIDAY_TYPE.NEXTVAL,#{typename},#{remark})

我们在mybatis插入id的位置用(序列名称+.NEXTVAL)的形式代替这个id
(若是uuid作为主键,Oracle中有有sys_guid函数可以产生uuid)
例:

select sys_guid() from dual

mysql中使用uuid的话,建议在Java中生成uuid再存库
( 引入java.util.UUID包。String uuid = UUID.randomUUID().toString().replace(“_”,“”) )

9、Vue前端若多次对后端进行点击响应,后端怎么能减少这个冗余?
后端:(数据库+索引)

10、Arraylist、Linkedlist和Vector三者区别
①从存储结构来看:
Arraylist和Vector是由数组构成,其默认的初始容量为10。而Linkedlist是由双向链表构成。
②从线程安全来看:
Arraylist和Linkedlist是线程不安全的,如果需要在并发的环境下使用它们,可以用Collections类中的静态方法synchronizedlist()对Arraylist和Linkedlist进行调用即可。
而Vector是线程安全的,它的源码中大部分方法中都包含关键字synchronized,但Vector的效率没有Arraylist高。
③从扩容机制来看:
Linkedlist是没有扩容的,因为是链表实现的。
Arraylist和Vector的扩容机制:(1)Arraylist扩容之后的容量是之前的1.5倍(默认);(2)Vector扩容之后的容量是之前的两倍(默认);(3)Vector可设置容量增量,Arraylist不可以。
④从增删查改的效率来看:
Arraylist和Vector:如果是在指定位置检查,或者是在集后尾部进行插入和删除的话,时间复杂度是O(1),但如果是其他地方插入或者删除的话,时间复杂度就变成了O(n)。

注意:可变长度数组的原理:当元素哥个数超过数组长度时,会产生一个新的数组,将原数组的数据复制到新数组,再将新的元素添加到新数组中。

11、equals和“= =”的区别?
“= =”是比较两个变量或实例是否指向同一个内存空间,而equals是比较两个变量或实例所指向的内存空间的值是否相等。
对于基本数据类型的变量,如Byte,short,char,int,float,long,double和boolean,“==”直接对其值进行比较;
对于引用数据类型的变量,则是对其内存地址的比较。
因此,“= =”比较的是值,只是引用类型变量存的是对象的地址。
而equals方法是Object类的方法,比较的是字符串中所包含的内容是否相同。

12、使用过的关系型数据库以及非关系型数据库,它们之间的区别
关系型数据库:mysql、Oracle
非关系型数据库:redis --是一个key-value的nosql数据库
Oracle与mysql区别:
mysql开源免费的中小型,关系数据库管理系统(RDBMS);
Oracle收费的大型、对象关系数据库管理系统(ORDMS);
mysql使用三(用户名、密码、位置)验证客户;
Oracle有用户名、密码、配置文件、本地身份验证、外部身份验证等;
mysql事务是自动提交;
Oracle需要手动,写commit或点提交按钮;
mysql没有Oracle的表空间、角色管理、快照、同义词、包、自动存储管理。
字符类型:
mysql:char(0-255)、varchar(0-65,535)
Oracle:char、nchar(1-2000),varchar2、nvarchar2(0-4000)
mysql:like ‘%字符串%’
oracle:也有li’ke ‘%字符串%’,使用字符串比较数instr(字符串,‘字符串’)>0更精确
mysql有Date、Time日期类型
Oracle只有Date
mysql非空字段也有空的内容
Oracle定义非空字段就不允许有空的内容
(所以,将mysql数据传过来Oracle,要注意导数据时要对空字符进行判断,如果为null或者空字符、需要把它转换成一个空格的字符串)

oracle与redis的区别:
①数据模型
Oracle和MySQL都是关系型数据库,数据以表格形式存储,每个表格由若干个列组成,每列定义了数据的类型和约束条件。表格之间可以建立关系,例一对多,多对多等,这些关系需要使用外键进行定义。
redis是一种键值型数据库,数据以键值对的形式存储的,其中键是一个字符串,值可以是字符串、哈希、列表、集合或有序集合等。
②查询语句
Oracle和MySQL都是使用sql查询语言来查询数据。sql是一种标准的关系型数据库查询语言。
redis使用一种类似于命令的语言来查询和操作数据,其中每个命令都对应一个具体的操作,例如set用于设置键值对,get用于获取键值对应的值等。
③扩展性
mysql和Oracle支持分布式和扩展性,但需额外配置且复杂。
redis支持分布式,可在多台服务器上分布数据,以提高性能和可用性。
④适用场景
mysql和Oracle使用于处理结构化数据的场景,支持高度优化的查询引擎,可处理复杂的查询和聚合操作
redis适用于高速读写的场景,例如缓存、消息队列等,redis读写速度非常快,可以在短时间内处理大量的请求

13、mao集合取并集、差集、交集
map1、map2
map是一个key和value的键值对的集合
①map并集:

public static Map<String,Object> getUnion( Map<String,Object> map1, Map<String,Object> map2){Set<String> bigMapKey = map1.keySet();Set<String> smallMapKey = map2.keySet();Set<String> differenceSet = Sets.union(bigMapKey,smallMapKey);Map<String,Object> result = Maps.newHashMap();for(String key : differenceSet){if(map1.containsKey(key)){result.put(key,map1.get(key));}else{result.put(key,map2.get(key));}}return result ;
}     

.containsKey:判断是否有key
.get():获取对应的value
Guava的union():返回两个集合的不可修改的视图

②差集
bigmap、smallmap

public static Map<String,Object> getDifference( Map<String,Object> bigMap, Map<String,Object> smallMap){Set<String> bigMapKey = bigMap.keySet();Set<String> smallMapKey = smallMap.keySet();Set<String> differenceSet = Sets.difference(bigMapKey,smallMapKey);Map<String,Object> result = Maps.newHashMap();for(String key : differenceSet){result.put(key,bigMapKey.get(key));  }return result ;
}     

difference():函数返回两个集合的差集、即返回的在第一个集合但不在第二个集合中的元素。

③map交集:
map1、map2

public static Map<String,Object> getInter( Map<String,Object> map1, Map<String,Object> map2){Set<String> bigMapKey = map1.keySet();Set<String> smallMapKey = map2.keySet();Set<String> differenceSet = Sets.intersection(bigMapKey,smallMapKey);Map<String,Object> result = Maps.newHashMap();for(String key : differenceSet){result.put(key,map1.get(key));  }return result ;
}     

intersection():方法用于返回两个或者更多集合中包含的元素,即交集。

14、String、StringBuffer和StringBuilder的区别
string:
①String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低,且浪费优先的内存空间。
②不可变


StringBuffer:
①StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象,每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动分配容量。
②可变
③线程安全
④多线程操作字符串
StringBuilder:
①可变类,速度更快。
②可变
③线程不安全
④单线程操作字符串

StringBuffer对象是一个字符序列可变的字符串,没有重新生成一个对象,而是在原来的对象中可以连接新的字符串。
StringBuilder类也代表可变字符串对象。StringBuffer和StringBuilder基本相似。不同的是:StringBuffer是线程安全的,而StringBuilder没有实现线程安全功能。

执行速度:
StringBuilder>StringBuffer>String

操作少量数据用String;多线程操作字符串缓冲区下操作大量数据用StringBuffer;单线程操作字符串缓冲区下操作大量数据用StringBuilder。

15、Java常用包、集合、线程、io、数据库索引
java常用包:
java.io包:通过文件系统,数据流和序列化提供系统的输入与输出
java.lang包:提供了java语言进行程序设计的基础类
java.util包:集合类。日期等各种实用工具类
java.sql包:Java访问并处理存储数据源中的数据api
java.net包:提供实现网络应用与开发的类
集合:
Java集合大致可分为:List、Set、queue和Map四种体系;
其中List代表有序、重复的集合;Set代表无序、不可重复的集合;Queue代表一种队列集合实现;Map接口中键和值一一映射。
线程:
java语言主要提供了两种实现线程的方式:
①继承Thread类创建线程类
②实现Runable接口创建线程类
①:
(1)定义继承Thread类,并重写Thread类的run()方法,该run()方法的方法体就代表了线程需要完成的任务。因此把run()方法称为线程执行体。
(2)创建Thread子类的实例,即创建子线程对象。
(3)调用线程对象的start()方法来启动该线程。
②:
(1)定义实现Runable接口,并重写Runable接口的run()方法,该run()方法的方法体就代表了线程需要完成的任务。
(2)创建Runable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
(3)调用该Thread对象的start()方法来启动该线程。

16、空指针异常怎么避免?
①加判断:if(status.equals(success)){}
②初始化默认值
③返回空集合:return list ==null ? new ArrayList() : list;

17、怎么通过内部循环结束整体循环
break跳出循环、结束循环(如果是内层循环,仅终止内层循环,外层循环不会终止)
continue跳出本次循环、继续下次循环
return程序返回到调用某方法的地方
break+标签:跳出循环到标签处,结束标签内的循环,在多重循环的最外层设置标签,配合break可终止整个循环
(设置a for循环外加“a:” break a;)
continue+标签:跳出循环到标签处,结束此次循环,从此标签处开始下一次循环

18、MVC模型
M-model模型是指模型表示业务规则
V-view试图是指用户看到并与之交互的界面
C-controller控制器是指控制器接受用户的输入并调用模型和试图去完成用户的需求,控制器本身不输出任何东西和做任何处理

19、面向对象是什么
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事件在整个解决问题的步骤中的行为。
面向过程:就是分析出解决问题所需的步骤,然后用函数把这些步骤一步步实现,使用的时候一个个依次调用就可以了。

20、Java线程池、Java的jvm、 数据库sql优化、spring特征
Java的线程池通过Executor框架来实现
用到Executor、ExecutorService
ThreadPoolExecutor、Future、FutureTask等几个大类

21、什么是三次握手?

22、什么是依赖注入?

23、GC是什么?原理?(垃圾回收)

24、REST接口用到的注解?以及注解的作用?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147819.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

大语言模型之十四-PEFT的LoRA

在《大语言模型之七- Llama-2单GPU微调SFT》和《大语言模型之十三 LLama2中文推理》中我们都提到了LoRA&#xff08;低秩分解&#xff09;方法&#xff0c;之所以用低秩分解进行参数的优化的原因是为了减少计算资源。 我们以《大语言模型之四-LlaMA-2从模型到应用》一文中的图…

vscode 打开后 默认terminal power shell 报错 名为“.C”的驱动器不存在。

这是 默认terminal power shell 打开报的错 Test-Path : 找不到驱动器。名为“.C”的驱动器不存在。 所在位置 C:\Users\HUAWEI\Documents\WindowsPowerShell\profile.ps1:4 字符: 5 If (Test-Path "C:\Users\HUAWEI\AppData\Local\Temp\_MEI319962\Scripts\ ... …

RabbitMQ核心总结

AMQP协议核心概念 RabbitMQ是基于AMQP协议的&#xff0c;通过使用通用协议就可以做到在不同语言之间传递。 server&#xff1a;又称broker&#xff0c;接受客户端连接&#xff0c;实现AMQP实体服务。 connection&#xff1a;连接和具体broker网络连接。 channel&#xff1a…

leetCode 45.跳跃游戏 II 贪心算法

45. 跳跃游戏 II - 力扣&#xff08;LeetCode&#xff09; 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 &…

Django之ORM操作初了解

文章开篇&#xff0c;我们首先复习下Django架构中的MTV模式&#xff0c;分别以字母来翻译就是&#xff1a; Views-代码的核心逻辑Tamplates-展示在页面上的html代码Models-对数据库的操作 那么Models中最为核心的便是本篇所介绍的ORM。 一&#xff09;基本知识 ORM&#xf…

react 网页/app复制分享链接到剪切板,分享到国外各大社交平台,通过WhatsApp方式分享以及SMS短信方式分享链接内容

1.需求 最近在做一个国际网站app,需要把app中某个页面的图文链接分享到国外各大社交平台上(facebook,whatapp,telegram,twitter等),以及通过WhatApp聊天方式分享&#xff0c;和SMS短信方式分享链接内容&#xff0c;该怎么做呢&#xff1f;图示如下: 分享到国外各大社交平台&am…

DS线性表之链表

前言 我们上一期介绍了顺序表&#xff0c;它的底层就是数组&#xff0c;我们也分别对顺序表的动态版本和静态版本进行了实现&#xff01;并且分析了顺序表的优缺点&#xff0c;优点是&#xff1a;尾插、尾删效率很高&#xff0c;其时间复杂度是O(1)&#xff1b;缺点是&#xff…

代码随想录算法训练营第五十五天 | 动态规划 part 12 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

目录 300.最长递增子序列思路代码 674. 最长连续递增序列思路代码 718. 最长重复子数组思路代码 300.最长递增子序列 Leetcode 思路 dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度递推公式&#xff1a;if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1)初…

格点数据可视化(美国站点的日降雨数据)

获取美国站点的日降雨量的格点数据&#xff0c;并且可视化 导入模块 from datetime import datetime, timedelta from urllib.request import urlopenimport cartopy.crs as ccrs import cartopy.feature as cfeature import matplotlib.colors as mcolors import matplotli…

解决u盘在我的电脑中重复显示两个

删除注册表&#xff1a; [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\DelegateFolders\{F5FB2C77-0E2F-4A16-A381-3E560C68BC83}]

postgresql-备份与恢复

postgresql-备份与恢复 基本概念备份类型物理备份与逻辑备份在线备份与离线备份全量备份与增量备份 备份恢复工具备份与恢复逻辑备份与还原备份单个数据库psqlpg_dumppg_store 备份整个集群 基本概念 服务器系统错误、硬件故障或者人为失误都可能导致数据的丢失或损坏。因此&am…

Redis学习笔记(下):持久化RDB、AOF+主从复制(薪火相传,反客为主,一主多从,哨兵模式)+Redis集群

十一、持久化RDB和AOF 持久化&#xff1a;将数据存入硬盘 11.1 RDB&#xff08;Redis Database&#xff09; RDB&#xff1a;在指定的时间间隔内将内存中的数据集快照写入磁盘&#xff0c;也就是行话讲的Snapshot快照&#xff0c;它恢复时是将快照文件直接读到内存里。 备份…

vtk 动画入门 1 代码

实现效果如图&#xff1a; #include <vtkAutoInit.h> //VTK_MODULE_INIT(vtkRenderingOpenGL2); //VTK_MODULE_INIT(vtkInteractionStyle); VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); //VTK_MODULE_INIT(vtkRenderingFreeType); #in…

新手学习笔记-----编译和链接

目录 1. 翻译环境和运⾏环境 2. 翻译环境&#xff1a;预编译编译汇编链接 2.1 预处理 2.2 编译 2.2.1 词法分析 2.2.2 语法分析 2.2.3 语义分析 2.3 汇编 2.4 链接 3. 运⾏环境 1. 翻译环境和运⾏环境 在ANSI C的任何⼀种实现中&#xff0c;存在两个不同的环境。 第…

JSON的MIME媒体类型是application/json

JSON&#xff08;全称 JavaScript Object Notation&#xff09;即JavaScript对象表示法&#xff0c;通知使用application/json媒体类型。 目录 1、JSON介绍 2、JSON语法 3、实践总结 运行环境&#xff1a; Windows-7-Ultimate-x64、Windows-10-BusinessEditions-21h2-x64 1…

Can‘t pickle <class ‘__main__.Test‘>: it‘s not the same object as __main__.Test

目录 原因1 类名重复了 案例1 变量名和类名重复 原因1 类名重复了 检查项目代码&#xff0c;是不是其他地方有同名类。 案例1 变量名和类名重复 转自&#xff1a;python3报错Cant pickle <class __main__.Test>: its not the same object as __main__.Test解决 - 知乎…

SpringBoot Validation入参校验国际化

在 Spring Boot 中&#xff0c;可以使用 Validation 和国际化来实现对入参的校验。 常用的校验 NotNull验证字段值不能为 nullNotEmpty验证字段值不能为 null 或空字符串NotBlank验证字符串字段值不能为空、null&#xff0c;并且必须至少包含一个非空白字符Size验证字符串、…

lv8 嵌入式开发-网络编程开发 01什么是互联网

目录 1 计算机网络的定义与分类 1.1 按照网络的作用范围进行分类 1.2 按照网络的使用者进行分类 2 网络的网络 2.1 名词解释 2.2 边缘与核心 3 互联网基础结构发展的三个阶段 3.1 第一阶段&#xff1a;1969 – 1990 3.2 第二阶段&#xff1a;1985 – 1993 3.3 第三阶…

小谈设计模式(14)—建造者模式

小谈设计模式&#xff08;14&#xff09;—建造者模式 专栏介绍专栏地址专栏介绍 建造者模式角色分类产品&#xff08;Product&#xff09;抽象建造者&#xff08;Builder&#xff09;具体建造者&#xff08;Concrete Builder&#xff09;指挥者&#xff08;Director&#xff0…

Java之SpringCloud Alibaba【六】【Alibaba微服务分布式事务组件—Seata】

一、事务简介 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。 在关系数据库中&#xff0c;一个事务由一组SQL语句组成。 事务应该具有4个属性: 原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity) ∶个事务…