‘进化成更好的人😉’
今天去面试啦!!!
由于之前没有准备充分(这边指的是根本没怎么背面试题🤣)导致看见一些题目一脸懵逼 故打算记录下来 下次面试碰到起码能记起来一点点💦
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 包含以上三个注解
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
Mybatis的一级缓存的作用域是session,是SqlSession级别的缓存,只要SqlSession没有flush或close,它就存在。(mybatis整合spring,一级缓存会失效,mybatis会在每次查询之后自动关闭sqlSession。!!!)
如果执行相同的SQL(相同语句和参数), MyBatis不进行执行SQL,而是从缓存中命中返回查询;如果命中直接返回,没有命中则执行SQL,从数据库中査询
-
二级缓存在映射配置文件中开启
MyBatis 的二级缓存是
mapper映射
级别的缓存,作用域是同一个mapper的namespace ,同一个namespace中查询SQL可以从缓存中命中,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。
二级缓存要求查询结果所涉及到的实体类要实现 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 类的常用方法
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线程
结语
面试前还是得做下充足准备 🤪🤪🤪 时间还长慢慢来~~