初级JAVA面试题分享(5k-8k)

‘进化成更好的人😉’

今天去面试啦!!!

由于之前没有准备充分(这边指的是根本没怎么背面试题🤣)导致看见一些题目一脸懵逼 故打算记录下来 下次面试碰到起码能记起来一点点💦

Spring 中bean的注入方式

  • set注入

  • 构造器注入

  • 静态工厂的方法注入

  • 实例工厂的方法注入

前两种在SpringIOC 注入方式中用的最多

SpringBoot核心注解

  • @Configuration(@SpringBootConfiguration)

    • 任何一个标注了@Configuration的Java类定义都是一个JavaConfig配置类。
    • 任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认成该bean定义的id。
  • @ComponentScan

    自动扫描当前包及子包下被@Component,@Controller,@Service,@Repository注解标记的类,将其作为bean加载到IOC容器中。
    不指定范围则默认从注解所在类的包下进行扫描。

  • @EnableAutoConfiguration

    核心注解,是自动配置的入口,SpringBoot根据添加的jar包来进行项目的默认配置

@SpringBootApplication 包含以上三个注解

image-20211204215619442

Mybatis一级缓存与二级缓存

  • 一级缓存默认是开启的 在整合Spring项目时不生效 默认会关闭sqlSession

    【一级缓存】

    它指的是Mybatis中SqlSession对象的缓存

    当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中。该区域的结构是一个Map。

    当我们再次查询同样的数据,Mybatis会先去SqlSession中查询是否有,有的话直接拿出来用。

    当SqlSession对象消失时,Mybatis的一级缓存也就消失了。

    版权声明:本文为CSDN博主「iqqcode」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_43232955/article/details/105675200

image-20211204220334168

Mybatis的一级缓存的作用域是session,是SqlSession级别的缓存,只要SqlSession没有flush或close,它就存在。(mybatis整合spring,一级缓存会失效,mybatis会在每次查询之后自动关闭sqlSession。!!!

如果执行相同的SQL(相同语句和参数), MyBatis不进行执行SQL,而是从缓存中命中返回查询;如果命中直接返回,没有命中则执行SQL,从数据库中査询

  • 二级缓存在映射配置文件中开启

    MyBatis 的二级缓存是mapper映射级别的缓存,作用域是同一个mapper的namespace ,同一个namespace中查询SQL可以从缓存中命中,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

image-20211204223224661

二级缓存要求查询结果所涉及到的实体类要实现 java.io.Serializable 接口

pojo类实现序列化接口是为了将缓存数据取出执行反序列化操作,因为二级缓存数据存储介质多种多样,不一定在内存有可能是硬盘或者远程服务器。


SpringBoot的三种启动方式

spring-boot的启动方式主要有三种:

  • . 运行带有main方法类

  • . 通过命令行 java -jar 的方式

  • . 通过spring-boot-plugin的方式


​ org.springframework.boot
​ spring-boot-maven-plugin

mvn spring-boot:run

SpringBoot与SpringCloud的关系与区别

一、SpringBoot和SpringCloud简介

1、SpringBoot:是一个快速开发框架,通过用MAVEN依赖的继承方式,帮助我们快速整合第三方常用框架,完全采用注解化(使用注解方式启动SpringMVC),简化XML配置,内置HTTP服务器(Tomcat,Jetty),最终以Java应用程序进行执行。

2、SpringCloud: 是一套目前完整的微服务框架,它是是一系列框架的有序集合。它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过SpringBoot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用SpringBoot的开发风格做到一键启动和部署。

二、SpringBoot和SpringCloud的关系与区别

1、SpringBoot只是一个快速开发框架,使用注解简化了xml配置,内置了Servlet容器,以Java应用程序进行执行。

2、SpringCloud是一系列框架的集合,可以包含SpringBoot。

三、SpringBoot是微服务框架吗?

1、SpringBoot只是一个快速开发框架,算不上微服务框架。

2、SpringCloud+SpringBoot 实现微服务开发。具体的来说是,SpringCloud具备微服务开发的核心技术:RPC远程调用技术;SpringBoot的web组件默认集成了SpringMVC,可以实现HTTP+JSON的轻量级传输,编写微服务接口,所以SpringCloud依赖SpringBoot框架实现微服务开发。

四、SpringMVC在3.0开始支持采用注解方式启动,所以可以不再配置传统的XML配置文件。

SpringBoot热部署

  • 1.什么是SpringBoot热部署?

在实际开发过程中,每次修改代码就得将项目重启,比较耗费时间,热部署就是解决这个问题,当代码发生修改以后会自动重新编译 其实就是自动重启

  • 具体配置步骤

    • 1.引用devtools依赖

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-devtools</artifactId>
          <optional>true</optional>
      </dependency>
      
      <build>
          <plugins>
              <plugin>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-maven-plugin</artifactId>
                  <configuration>
                      <fork>true</fork>
                  </configuration>
              </plugin>
          </plugins>
      </build>
      
    • application.yml

      debug: true
      spring:
        devtools:
          restart:
            enabled: true  #设置开启热部署
        freemarker:
          cache: false    #页面不加载缓存,修改即时生效
      

JDBC中使用到的设计模式

  • 静态工厂模式
  • 单例模式
  • 装饰者模式
  • 桥接模式

数据库视图的使用和原理

数据库中视图的概念:视图是从一个表或是多个表导出的表,视图与表不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中指存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。

视图是虚表,是从一个或是几个基本表导出的表。可以将视图看做是移动的窗口,通过它可以看到自己感兴趣的数据,视图是从一个或是多个表中获得的,这些表的数据存放在数据库中,那些用户产生视图的表叫做视图的基表,当然也可以从另一个视图中产生视图。

视图看上非常像是数据库的物理表,对它的操作同任何其他的表一样。当通过视图修改数据时候,实际上是改变基表中的数据,相反的,基表数据的改变也会自动反应在由基表产生的视图中。

版权声明:本文为CSDN博主「李太白不白」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/daguairen/article/details/52986051

Thead 类的常用方法

image-20211204233742845

  • public static native Thread currentThread():返回对当前正在执行的线程对象的引用。

  • public static native void yield():使当前线程主动放弃其对处理器的占用,可能会导致当前线程被暂停。

  • public static native void sleep(long millis):使当前线程休眠指定的时间。

  • public synchronized void start():启动线程。

  • public void run():用于实现线程具体的任务处理逻辑。

  • public final void setPriority(int newPriority):修改线程的优先级。

  • public final int getPriority():返回线程的优先级。

  • public final synchronized void setName(String name):修改线程的名字。

  • public final String getName():返回线程的名字。

  • public final void join():等待相应线程运行结束。

  • public final void setDaemon(boolean on):修改线程的类别。

  • public final boolean isDaemon():返回该线程是否为守护线程。

  • public long getId():返回线程的 ID。

  • public State getState():返回该线程的状态。


线程安全和不安全的集合

线程安全的集合类分为两大类:

(1)以Concurrent开头的集合类: 如 ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentLinkedDeque、ConcurrentSkipListMap和ConcurrentSkipListSet .

(2)以CopyOnWrite开头的集合类:如 CopyOnWriteArrayList、CopyOnWriteArraySet .


在集合中学到的ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等都是线程不安全的,也就是说,当多个并发线程向这些集合中存、取元素时,就可能会破坏这些集合的数据完整性。

集合与数组之间的区别

这里写图片描述

Java多线程的三种实现方式

  • 1、继承Thread类创建线程
  • 2、实现Runnable接口创建线程
  • 3、实现Callable接口通过FutureTask包装器来创建Thread线程

结语

面试前还是得做下充足准备 🤪🤪🤪 时间还长慢慢来~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值