0.1用

一、问spring常用的注解,**
1.@springBootApplication //启动类注解
2.@RestController //请求处理类的注解
3.@RequestMapping("/hello") //浏览器将来处理/hello这个地址最终就会调用这个方法
集合接收参数
4.因为默认情况下,多个参数的值会封装到数组当中,所以对于集合List就要用到注解@RequestParam
5.关于实体对象,前面使用@RequestBody注解来标识,就可以将json格式的请求数据直接封装到实体对象中
6.路径参数。既是传递的参数又是请求路径url的一部分。@PathVariable 通过注解来指定路径参数
7. @ResponseBody可以作用在controller方法上也可以是类上
如果在类上加了@ResponseBody注解就代表当前类下所有的方法返回值都会作为响应数据
如果是对象或者集合,它会先自动转json然后再来响应
@RestController = @Controller + @ResponseBody ;
8. Bean的四大注解@component、@Controller、@Service、@Repository
Service以及Dao的实现类交给IOC容器管理只需要在类上面注解@component来指定为bean
9. @Resource 与 @Autowired区别
@Autowired 是spring框架提供的注解,而@Resource是IDK提供的注解。
@Autowired 默认是按照类型注入,而@Resource默认是按照名称注入。
依赖注入的注解
@Autowired:默认按照类型自动装配
如果同类型的bean存在多个
@Primary
@Autowired +@Qualifier("bean的名称”)
@Resource(name="bean的名称”)

二、问mysql字段的理解,
常见的数据类型包括整数、浮点数、字符串、日期和时间。常见的约束包括主键、唯一键、外键、非空。

三、redis了解多少。
redis作为非关系型数据库储存在内存中,访问速度快。
常用的十个应用场景、1、字符串设置缓存,提升访问速度;2、设置分布式锁(设置时效);3、共享数据仓库(分布式session多台服务器访问使用,用来判断用户登陆);4、计数器(文章访问量);5、限流;6、购物车,hash(key-field-value)(用户id-商品id-商品数量);7、set消息队列;8、抽奖set中抽取uid;9、点赞set;10、排行榜sortset类型;

四、还问了对于ioc容器的理解ioc容器/di依赖注入
IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击。
但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。
依赖注入:他是实现控制反转思想的的技术方式,从应用程序的角度来描述:应用程序依赖容器创建并注入它所需要的外部资源。

五、集合
List接口下的类与特点,Map接口,Set接口

六、autowired和Resource的区别,
@Resource 与 @Autowired区别
@Autowired 是spring框架提供的注解,而@Resource是jdK提供的注解。
@Autowired 默认是按照类型注入,而@Resource默认是按照名称注入。

七、MySQL索引的理解,

避免sql语句的耗时过多 创建索引create index 索引名 on 表名(字段名);
无索引数据量越大,效率越低,就需要全表扫描,然而索引是帮助数据库高校获取数据的数据结构
有索引也就是把数据建立为一个二叉排序树,这样查询是极高效的 默认索引是B+树结构组织的索引

八、多表查询,
多表查询的结果叫做,笛卡尔积,就是A集合和B集合.组合情况就叫做笛卡尔积,A集合5行,B集合3行,总共就查出来15行
消除无用的数据.
以下消除方式
1.内连接查询
从哪些表查询,条件是什么,需要查询哪些字段的信息?
  -1.隐式内连接:使用where 条件消除无用的数据
select emp.name,dep.name from emp,dept where emp.dep_id = dep.id
  -2.显示内连接:查询所有员工信息和对应的部门信息
select emp.name,d.name from emp inner join dept on emp.dep.id = dept.id
select e,p.name,dept.name from emp join dept on emp.dep.id = dept.id    --inner可以省略
个人理解这个内连接的隐式 和 显示,  其实显示效果一样的,区别就是一个是where条件,一个是join on条件

2.外连接查询
-1.左外连接
select 字段列表 from 表1 left outer join 表2 on 条件; --outer可以省略
select 字段列表 from 表1 left join 表2 on 条件;
select t1.*,t2.name from emp t1 left join dep t2 on t1.dep_id = t2.id;
左外连接就是查询左表所有数据以及交集部分

内连接(Inner Join)只返回两个表中都存在的记录,即只匹配的行。而外连接(Outer Join)则返回两个表中的所有数据,包括匹配的行和未匹配的行。

九、还掌握了什么技术?悬念

十、反射
Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。

十一、类加载机制,
java程序在编译的时候会产生class文件,在编译过程中产生的中间码也被称为字节码。jvm加载字节码的过程被称为类加载
(把一份被javac编译过的class文本文件通过加载,生成某种形式的class数据进入内存,程序可以调用这个数据结构来构造出object,过程是运行时的进行的。所以是java可以是运行时的动态拓展)。。加载是一个读取class文件,将其转化为某种静态数据结构存储在方法区内,并在堆中生成一个便于用户调用的java.lang.class对象的过程
这里的class不一定是本地文件,泛指各种来源不明的二进制流,比如说来自于网络,数据库,甚至是即时生成的class
方法区。堆,都是jvm内存模型中的相关概念

十二、是否会微服务springcloud,

十三、AOP了解多少。
自定义一个特殊的处理方式,比如公共字段填充。写成aop形式,统一填充属性。

十四、redis变量类型。
字符串,列表,哈希表,集合,有序集合

十五、hash表能不能存null值。
应该是不能的

十六、线程threadlocal问题
ThreadLocal:为共享变量在每个线程中创建一个副本,每个线程都可以访问自己
内部的副本变量。通过threadlocal保证线程的安全性。
其实在ThreadLocal 类中有一个静态内部类ThreadLocalMap(其类似于Map),
用键值对的形式存储每一个线程的变量副本,ThreadLocalMap中元素的key为当前
ThreadLocal 对象,而value对应线程的变量副本。
ThreadLocal 本身并不存储值,它只是作为一个 key保存到ThreadLocalMap
中,但是这里要注意的是它作为一个key用的是弱引用,因为没有强引用链,弱引用在GC
的时候可能会被回收。这样就会在ThreadLocalMap中存在一些key为null的键值对
(Entry)。因为key变成null了,我们是没法访问这些Entry的,但是这些Entry本身是
不会被清除的。如果没有手动删除对应key就会导致这块内存即不会回收也无法访问,也
就是内存泄漏。
使用完ThreadLocal 之后,记得调用remove方法。 在不使用线程池的前提下,
即使不调用remove方法,线程的"变量副本"也会被gc回收,即不会造成内存泄漏的情况。

十七、多表查询,比如另一表字段很少,会不会全部显示

大概是内连接不显示,外连接一个左连接就是左表全部显示,右表显示限制

十八、mysql数据库 enum枚举字段类型设置性别安全吗
应该是不安全的。因为返回失败可能也是表示0

十九、java8有什么不一样的特性。
1、Lambda 表达式
Lambda 允许把函数作为一个方法的参数。
2、方法引用
方法引用允许直接引用已有 Java 类或对象的方法或构造方法。
3、接口允许定义默认方法和静态方法
从 JDK8 开始,允许接口中存在一个或多个默认非抽象方法和静态方法
Optional 类是一个可以为 null 的容器对象。如果值存在则 isPresent()方法会返
回 true,调用 get()方法会返回该对象

二十、target注解什么意思
在Java中定义一个注解类似定义类只不过替换class为@interface 上面标记Target(spring提供的常量类型)表示这个自定义注解只能标记在哪些类型上,比如Result只能在方法上或者Field只能在字段上。
Constractor构造方法上


一、Java内存模型是哪些
java内存模型是一种符合计算机内存模型规范的模型,屏蔽了各种硬件以及操作系统的访问差异的,保证了Java程序在各平台下对内存的访问都得到了一致的效果的 一种机制以及规范。目的是为了解决由于多线程通过共享内存进行通讯的时候,存在的一些原子性以及可见性有序性的问题。

二、Java内存结构(运行时数据区域) JVM了解多少**
堆栈,方法区

三、多线程怎么理解
线程:是进程的一个实体,是 cpu 调度和分派的基本单位,是比进程更小的
可以独立运行的基本单位。
进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作
系统进行资源分配和调度的一个独立单位。
特点:线程的划分尺度小于进程,这使多线程程序拥有高并发性,进程在运行
时各自内存单元相互独立,线程之间 内存共享,这使多线程编程可以拥有更好
的性能和用户体验

创建线程的几种方式
1.继承Thread 类并重写 run 方法创建线程,实现简单但不可以继承其他类
2.实现Runnable 接口并重写 run 方法。避免了单继承局限性,编程更加灵活,实
现解耦。
3..实现 Callable 接口并重写 call 方法,创建线程。可以获取线程执行结果的返回
值,并且可以抛出异常。
4.使用线程池创建

Runnable 和Callable 的区别?(必会)
主要区别
Runnable 接口 run 方法无返回值;Callable 接口 call 方法有返回值,支持泛型
Runnable 接口 run 方法只能抛出运行时异常,且无法捕获处理;Callable 接口 call 方
法允许抛出异常,可以获取异常信息

四、聊一下对于内存结构中存储的理解,个人认为可以说堆,栈的理解

RabbitMQ
erang开发,对消息堆积的支持并不好,当大量消息积压的时候,会导致RabbitMQ 的性能急剧下降。每秒钟可以处理几万到十几万条消息。
为什么要使用MQ?
因为项目比较大,做了分布式系统,所有远程服务调用请求都是同步执行经常出问题,所以引入了mq

作用 描述
解耦 系统耦合度降低,没有强依赖关系
异步 不需要同步执行的远程调用可以有效提高响应时间
削峰 请求达到峰值后,后端 serice 还可以保持固定消费速率消费,不会被压垮

RabbitMQ是一个开源的消息代理软件,它实现了高级消息队列协议(AMQP)标准,用于在分布式系统中进行消息传递。理解RabbitMQ可以从以下几个方面入手:

消息队列:RabbitMQ通过消息队列的方式实现了消息的传递。消息队列是一种存储消息的结构,可以将消息从发送者传递给接收者。这种模式可以实现解耦、异步通信和负载均衡等功能。

发布-订阅模式:在RabbitMQ中,消息的发送者称为生产者(producer),消息的接收者称为消费者(consumer)。生产者将消息发送到队列中,而消费者从队列中接收消息。这种模式适用于需要一对多的消息传递场景。

队列:RabbitMQ中的队列是消息的存储区域,消费者可以从队列中获取消息。队列可以持久化、自动删除、设置优先级等,具有丰富的配置选项。

路由:RabbitMQ支持多种消息路由机制,如Direct Exchange、Fanout Exchange、Topic Exchange等,可以根据消息的特性将消息路由到不同的队列中。

可靠性:RabbitMQ提供了消息确认、持久化、重试等机制,确保消息的可靠传递。生产者发送消息后可以确认消息是否已经被消费者正确接收,保证消息不会丢失。

扩展性:RabbitMQ支持集群、分区等方式,可以实现高可用性和水平扩展。通过多个RabbitMQ节点组成集群,可以提高系统的可靠性和性能。

总的来说,理解RabbitMQ需要熟悉其基本概念和工作原理,了解消息队列的应用场景和优势,以及如何利用RabbitMQ实现不同的消息传递需求。

五、设计模式

  1. 工厂模式:BeanFactory 就是简单工厂模式的体现,用来创建对象的实例
  2. 单例模式:Bean默认为单例模式
  3. 代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术
  4. 模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate,
    JpaTemplate
  5. 观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,
    所有依赖于它的对象都会得到通知被制动更新,如Spring 中 listener 的实现

六、为什么使用线程池
1、使用线程池可以重复利用已有的线程继续执行任务,避免线程在创建销毁时造成的消耗
2、由于没有线程创建和销毁时的消耗,可以提高系统响应速度
3、通过线程可以对线程进行合理的管理,根据系统的承受能力调整可运行线程数量的大小

springcloud

Spring Cloud 是一个用于开发分布式系统的开源框架,它基于Spring Boot 构建。Spring Cloud 提供了一系列开箱即用的工具和组件,帮助开发者快速构建、部署和管理分布式系统。主要特点包括:

微服务架构支持:Spring Cloud 提供了一系列组件,如服务注册与发现、负载均衡、断路器、分布式配置等,帮助开发者构建基于微服务架构的应用。

分布式系统开发:Spring Cloud 提供了一些常用的分布式系统开发工具,如服务注册与发现、负载均衡、断路器、消息总线、分布式配置等,方便开发者构建分布式系统。

与云平台集成:Spring Cloud 项目有很好的云平台集成,可以很容易地在诸如AWS、Azure、Google Cloud等云平台上部署和管理应用。

总的来说,Spring Cloud 提供了一套完整的解决方案,帮助开发者简化分布式系统开发的复杂性,提高开发效率,降低系统维护成本。通过理解和使用Spring Cloud,可以更好地构建稳定、可靠的分布式系统。

posted @ 2024-03-05 14:50  launch  阅读(8)  评论(0)    收藏  举报