整理面试问题

数据库

left join 、right join、 inner join 用法

  • left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
  • right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
  • inner join(等值连接) 只返回两个表中联结字段相等的行

https://blog.csdn.net/fanhl111/article/details/89891539

数据库事务的理解

原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
持久性(Durability):一个事务一旦提交,他对数据库的修改应该永久保存在数据库中。

https://www.cnblogs.com/takumicx/p/9998844.html

事物的隔离级别

① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

② Repeatable read (可重复读):可避免脏读、不可重复读的发生。

③ Read committed (读已提交):可避免脏读的发生。

④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。

https://www.cnblogs.com/fjdingsd/p/5273008.html

数据库的三大范式

第一范式(1NF)

原子性:保证每一列不可再分

第二范式(2NF)

前提:满足第一范式

每张表只描述一件事情

第三范式(3NF)

前提:满足第一和第二范式

确保数据表中的每一列数据都和主键直接相关,不能间接相关

https://www.cnblogs.com/wsg25/p/9615100.html

MySQL和Oracle的区别

mysql和oracle的区别有:1、Oracle数据库是一个对象关系数据库管理系统,要收费;MySQL是一个开源的关系数据库管理系统,是免费的;2、数据库安全性的区别;3、对象名称的区别;4、临时表处理方式上的区别等等。

https://www.php.cn/mysql-tutorials-413588.html
https://www.cnblogs.com/bailing80/p/11440927.html

数据库有哪些索引

聚集索引,非聚集索引,联合索引

https://www.cnblogs.com/wwxzdl/p/11116446.html

索引的优点和缺点

索引的作用:创建索引能够大大的提高系统的性能

索引的-优点

①通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性

②大大加快数据的检索速度,这也是创建索引的最主要原因

③加快表与表之间的连接,在实现数据的参考完整性方面特别有意义

④在使用分组和排序,子句进行数据检索时,同样可以显著减少查询中分组和排序的时间

⑤通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
  
索引的缺点
1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
3.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

https://blog.csdn.net/qq_40606397/article/details/101360795

索引的作用以及代价是什么

作用:
与目录在书籍中的作用类似,都是用来提高查找信息的速度。索引提高数据库的性能,不用加内存,不用修改程序,不用调sql,只要执行正确的create index ,查询的速度就可以提高成百上千倍。因此索引的价值在于提高一个海量数据的检索速度。
代价:
查询速度提高是以数据修改操作(插入、更新、删除)的速度为代价的,这些写操作,增加了大量的IO。另外索引还会在硬盘上占用相当大的空间。(以空间换时间)

https://blog.csdn.net/weixin_43683907/article/details/98362412


Java基础

抽象类和接口的区别

  • 抽象类只能单继承,但是一个类可以实现多个接口
  • 抽象类里面可以有普通方法和抽象方法,接口里面的方法只能是public abstract的
  • 抽象类的成员变量可以是各种类型的,接口里只能是public static final的

深入一点:抽象类和接口的目的不一样,抽象类是为了代码复用,是对类本质的抽象;接口是为了对类的行为进行约束,是对类行为进行抽象

JDK和JRE的区别

JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。

JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。

具体来说 JDK 包含 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java程序调试和分析的工具。简单来说:运行 Java 程序,只需安装 JRE ,编写 Java 程序,需要安装 JDK。

int和integer的区别

Java是一种近乎纯洁的面向对象语言,为了方便引入了基本数据类型,但是每一种基本数据类型对应一个包装类型,从Java5开始引入了自动装箱拆箱机制,二者可以相互转换

原始类型包装类型
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
public class AutoUnboxingTest {
    public static void main(String[] args) {
        Integer a=new Integer(3);
        //将3自动装箱成Integer类型
        Integer b=3;        
        int c=3;
        //false 两个引用没有引用同一对象
        System.out.println(a==b);
        //true a自动拆箱成int类型再和b比较
        System.out.println(a==c);
    }
}

maven依赖冲突怎么解决

  1. 首先查看报错信息,如果出现NoSuchMethodError,ClassNotFoundException等信息证明出现了依赖冲突
  2. 查看报错信息确定那个jar包冲突了,如: org.springframework.core
  3. 然后查看pom文件

如果改完pom文件还不能解决问题,我会打开左边的external libraries直接查看jar包,删掉重复的jar包

介绍一下锁

我所知道的锁:

  • 悲观锁:悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改;java中synchronized关键字和Lock的实现类都是悲观锁
    • 悲观锁适合写操作多的场景,先加锁可以保证写操作时数据正确
  • 乐观锁认为自己在使用数据时不会有别的线程修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据
    • 乐观锁适合读操作多的场景,不加锁的特点能够使其读操作的性能大幅提升

https://www.cnblogs.com/jyroy/p/11365935.html

Synchronized实现原理及和Lock的区别

https://www.cnblogs.com/fanBlog/p/11323407.html

spring注入方式

1.构造器注入
2.setter注入
3.接口注入

Springboot比spring有哪些改进或区别

SpringBoot能够对Spring的缺点进行改善和优化,基于约定大于配置的思想,可以让开发人员不必在配置和逻辑业务之间进行思维的切换,全身心投入到逻辑业务的代码编写中,从而大大提高了开发效率

SpringBoot的特点

  1. 为给予Spring的开发提供更快的入门体验。
  2. 开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求。
  3. 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康监测等
  4. SpringBoot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式。

SpringbootApplication有哪些注解

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

Java元注解有哪些

  • @Target 用来定义你的注解将应用于什么地方(例如是一个方法或者一个域)
  • @Retention 用来定义该注解在哪一个级别可用,在源代码中(SOURCE)、类文件中(CLASS)或者运行时(RUNTIME)
  • @Documented 将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@see,@param 等。
  • @Inherited 允许子类继承父类中的注解。

SpringCloud是什么

Spring Cloud是一个微服务框架的规范,注意,只是规范,他不是任何具体的框架

Spring Bean的加载流程

https://www.bilibili.com/video/BV1Eb4y1R7zd?p=37
https://www.cnblogs.com/wyq178/p/11415877.html

进程和线程的区别

进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。

线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。

https://www.cnblogs.com/coder-programming/p/10595804.html

Tomcat配置文件配置过哪些选项

  • 可以配置端口号
  • 可以配置主机名称
    • 默认的主机名
    • 默认的网站存放位置

https://www.cnblogs.com/senhelpa-vivo/p/11341132.html

哪种map可以保存读写顺序,按照存取的顺序去遍历

LinkedHashMap

可以用来实现LRU算法

哪种map是线程安全的

  • HashTable
  • SynchronizedMap
  • ConcurrentHashMap - 推荐

https://www.cnblogs.com/yaowen/p/9634368.html

实现多线程有以下四种方式:

  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable接口
  4. 线程池:提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。

https://zhuanlan.zhihu.com/p/151407057

多线程开发的工具类有哪些

https://blog.csdn.net/sixabs/article/details/98471709

谈谈操作系统视角下的内存回收过程

https://blog.csdn.net/self_realian/article/details/107061874

用户态与内核态

https://www.cnblogs.com/maxigang/p/9041080.html

Java类加载器

  • BootStrapClassLoader是ExtClassLoader的父类加载器,叫启动类加载器 - 加载存放JAVA_HOME\lib中的jar文件
  • ExtClassLoader 扩展类加载器,是AppClassLoader的父类加载器 - 加载JAVA_HOME\lib\ext中的jar文件
  • AppClassLoader应用程序类加载器 - 加载用户类路径classpath下的jar文件,默认的类加载器

关于二级缓存

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

https://blog.csdn.net/itcastedu/article/details/107650047

https://blog.csdn.net/prestigeding/article/details/100085568

map接口下面有哪些实现类

HashMapHashTableConcurrentHashMapTreeMapLinkedHashMapweakHashMap

Java有哪些集合类型

1、List列表:有序的,可重复的;
2、Queue队列:有序,可重复的;
3、Set集合:不可重复;
4、Map映射:无序,键唯一,值不唯一。

TCP和UDP的区别

在这里插入图片描述

https://blog.csdn.net/weixin_39218743/article/details/88818069

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则是不可靠信道

https://www.cnblogs.com/williamjie/p/9390164.html

网络攻击的种类

https://blog.csdn.net/qq_42036203/article/details/99830112?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.no_search_link

Java线程状态有哪些

新建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、死亡(dead)
在这里插入图片描述

https://www.cnblogs.com/nongzihong/p/10512822.html
https://blog.csdn.net/mccand1234/article/details/51526552

线程怎么进入阻塞态

下面几个行为,会引起线程阻塞。

  • 主动调用 sleep 方法。时间到了会进入就绪状态
  • 主动调用 suspend 方法。主动调用 resume 方法,会进入就绪状态
  • 调用了阻塞式 IO 方法。调用完成后,会进入就绪状态。
  • 试图获取锁。成功的获取锁之后,会进入就绪状态。
  • 线程在等待某个通知。其它线程发出通知后,会进入就绪状态

https://blog.csdn.net/weixin_41101173/article/details/79679300

线程间的通信方式

https://blog.csdn.net/jisuanji12306/article/details/86363390

死锁产生的四个必要条件和避免

https://blog.csdn.net/guaiguaihenguai/article/details/80303835

操作系统用户态和内核态

ArrayList和LinkedList的区别

  1. ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构;
  2. 对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针;
  3. 对于添加和删除操作add和remove,一般大家都会说LinkedList要比ArrayList快,因为ArrayList要移动数据。但是实际情况并非这样,对于添加或删除,LinkedList和ArrayList并不能明确说明谁快谁慢

https://blog.csdn.net/eson_15/article/details/51145788

doGET()和doPost()方法的区别

https://www.cnblogs.com/phpper/p/9127553.html
HTTP方法/HTTP状态码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值