- 博客(48)
- 收藏
- 关注
原创 关于OpenFeign的返回类型包装问题
使用feign的解码器。也就是从controller层的返回前端的数据。拆包取出响应的数据。在后来,也就是今天。说:feign的调用会有一个编码器和解码器。我在使用feign的调用时,突然出现了一点点问题。就是对于feign类型的包装问题。这个会让feign调用的数据拆包。
2024-04-01 20:32:41
436
原创 温故而知新——多态
答:在多态中,无法直接访问子类的私有属性。多态是通过父类引用指向子类对象,而父类中没有子类的私有属性。私有属性只能在定义它们的类内部访问,无法从外部或其他类中直接访问。答:是的,你对多态的理解是正确的。多态允许我们使用父类的统一方法名和属性名,在不同的子类中实现不同的方法实现。问:多态可以这样理解吗?用父类统一的方法名以及属性名,然后方法实现是根据子类的内容实现。问:多态中,可以通过多态访问子类的私有属性吗?
2024-02-02 15:08:17
140
1
原创 今日方知-依赖注入
答:在Spring中,如果存在多个类型相同的Bean对象时,Spring容器无法确定要注入哪个Bean对象。为了解决这个问题,Spring提供了根据入参名称来获取Bean对象的方式。这种方式只在Spring容器中生效,而在普通的Java代码中是不生效的。方法名就是Bean的名称,而方法的返回类型就是Bean的类型。当其他组件需要依赖这些Bean对象时,可以通过方法的入参名称来指定要注入的Bean对象。问:当其他组件需要依赖这些Bean对象时,可以通过方法的入参名称来指定要注入的Bean对象。
2024-01-28 19:41:39
217
原创 RabbitMQ快速上手
解耦:通过使用 MQ,发送者和接收者之间的耦合度可以降低。可靠性:MQ 通常提供持久化机制,即使在发送者发送消息后,如果接收者当前不可用,消息也不会丢失。接收者在可用时可以从队列中获取消息并进行处理,确保消息的可靠传递。异步通信:MQ 允许发送者将消息发送到队列中,然后接收者可以异步地从队列中获取消息并进行处理。当发送者发送消息的速度超过接收者的处理速度时,消息可以在队列中暂存,避免系统过载。可以增加多个消费者来处理队列中的消息,从而提高系统的处理能力。前端发送请求后,将消息发送至MQ队列中。
2024-01-28 18:52:11
503
原创 Feign远程调用快速上手
2.在他的同胞,或者父包下写下一个feign调用,这个feign调用要使用@feignClient注解。1.首先写好controller层的代码。3.在调用者的父工程pom文件中引入。4.在使用的包下,调用并且使用。
2024-01-26 18:36:32
273
2
原创 FastDFS快速上手
一般用户使用init方法使用地址加端口填充tracker_server对象。在服务器的主机上找到对象。利用tracker_server上传下载对象。存在多个trackerClient。用来处理多个对象,应对高并发。用于存储大量数据文件,或者用在高并发的场景。而访问非常方便,使用url地址进行访问即可。再利用封装好的接口,上传文件。对于FastDFS的了解。
2024-01-26 17:54:55
274
原创 基于Java实现WebSocket快速上手
或者说启用spring框架,因为spring已经整合了ws。@OnOpen 获取的session很重要。
2024-01-12 13:37:36
792
原创 JWT的前身,Cookie与Session(博主也是一天从不懂到理解的)
web 2.0 它是具有交互性的,所以http协议由于对于交互性的不完善,所以使用了 Cookie 与Session 协助使用。弥补了http无状态的缺陷。session与cookie都是有服务器生成的key-value键值对,用来存储特定的值的。这是因为,状态不可以是随意定义的,需要服务端与客户端双方都认同。session存储在服务器,cookie存储在浏览器。
2024-01-11 10:53:06
554
原创 Gateway快速上手
可以解决统一访问、隐藏真实的服务器地址、网关进行统一认证、解决跨域问题、限流等问题。所以网关只需要处理网址,基本上只需要处理配置文件和启动类。因为在使用微服务的时候,会有多端请求。将启动类发送到注册中心去。
2024-01-06 15:27:43
1518
原创 JVM面试问题
虚拟机栈:每一个线程都有一个虚拟机栈,java的方法调用就是使用栈完成的。由操作系统进行交互。程序计数器:因为java是多线程的,在线程切换时,使用程序计数器来记录字节码运行的行数。堆:存储对象数据,以及数组的数据。堆的内存区域是共享的,所以需要考虑线程安全问题。本地方法栈:和虚拟机栈一个原理。不过本地方法栈使用的是c++完成的。java运行时的内存空间,他在jdk的jre中。方法区:存储已被加载的类、静态方法、常量的信息。方法区又分为:运行时常量池,字符串常量池。
2023-12-24 19:12:28
406
原创 Mysql的基础问题原理
存储引擎是Inndb。它支持行级锁,以及表级锁,支持事务操作,需要主键,若未声明主键,则会寻找表中的 not null 以及 unique 修饰的字段。若表中无此类字段,会隐式生成字段。
2023-12-21 22:14:10
724
原创 volatile
用于读操作,会使其他读操作不得位于他的下方的操作排序到上方。用于写操作,会使其他写操作不得在他的上方排序到下方。1、使被修饰变量在运行内存中相互可见。2、禁止指令重排序。
2023-12-18 22:48:50
315
原创 synchronized关键字的底层原理
他的底层是由monitor实现的,monitor是jvm级别的对象,线程获得锁需要使用对象关联monitor。synchronized对象锁采用互斥的方式,让同一时刻,之多有一个秀安承获取对象锁。在monitor内部由三个属性,分别是owner,entrylist、waitlset。其中owern是关联在获得锁的线程,并且只能关联一个线程。entrylist关联的是竞争锁失败的处于阻塞状态的线程。waitset是出于waiting状态的线程。
2023-12-18 20:37:37
515
原创 Map,Set线程不安全怎么解决?
1.使用HashTable,因为HashTable对于get,put方法加锁(使用synchronized修饰着两个方法)。内部将整个哈希表分成多个段(Segments),每个段都维护着一个子哈希表。ConcurrentHashMap(),他每次只给一个桶(数组项)加锁。的段数与 CPU 核心数相同,这样可以最大限度地提高并发性能。
2023-12-16 12:02:08
384
原创 什么是类加载器,常见的类加载器有哪些?
扩展类加载器(Extension ClassLoader):用来加载java的扩展库,java的虚拟机实现会提供一个 扩展库目录,该类加载器在扩展库目录里面查找并加载java类;系统类加载器(AppClassLoader):它根据java的类路径来加载类,一般来说,java应用的类都是 通过它来加载的;启动类加载器(BootStrapClassLoader):用来加载java核心类库,无法被java程序直接引用;类加载器是指:通过一个类的全限定性类名获取该类的二进制字节流叫做类加载器;
2023-12-15 16:03:15
463
原创 什么是类加载?类加载的过程?
如图所示: 加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班 地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言 的运行时绑定(也称为动态绑定或晚期绑定)类的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析 (Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。
2023-12-15 16:02:28
375
原创 HashMap 的put方法流程?
6. 如果冲突后是链表,判断该链表是否大于 8 ,如果大于 8 并且数组容量小于 64,就进行扩容;如果链表节点大于 8 并且数组的容量大于 64,则将这个结构转换为红黑树;否则,链表插入键值 对,若 key 存在,就覆盖掉 value。1. 首先根据 key 的值计算 hash 值,找到该元素在数组中存储的下标;4. 如果冲突了,且 key 已经存在,就覆盖掉 value;5. 如果冲突后,发现该节点是红黑树,就将这个节点挂在树上;2. 如果数组是空的,则调用 resize 进行初始化;
2023-12-14 22:50:02
385
原创 为什么在解决 hash 冲突的时候,不直接用红黑树?而选择先用链表,再转红黑树?
因为红黑树需要进行左旋,右旋,变色这些操作来保持平衡,而单链表不需要。当元素小于 8 个的时 候,此时做查询操作,链表结构已经能保证查询性能。当元素大于 8 个的时候, 红黑树搜索时间复杂度 是 O(logn),而链表是 O(n),此时需要红黑树来加快查询速度,但是新增节点的效率变慢了。因此,如果一开始就用红黑树结构,元素太少,新增效率又比较慢,无疑这是浪费性能的。
2023-12-14 22:48:59
369
原创 ArrayList 与 Vector 区别?
如果有多个线程会访问到集合,那最好是使用 Vector,因为不需要我们自己再去考虑和编写线程安全的代码。ArrayList在底层数组不够用时在原来的基础上扩展0.5倍,Vector是扩展1倍,这样ArrayList就有利 于节约内存空间。Vector是线程安全的,ArrayList不是线程安全的。其中,Vector在关键性的方法前面都加了 synchronized关键字,来保证线程的安全性。
2023-12-14 22:48:04
339
原创 Arraylist与 LinkedList 异同点?
插入和删除是否受元素位置的影响: ArrayList 采用数组存储,所以插入和删除元素的时间 复杂度受元素位置的影响。比如:执行 add(E e) 方法的时候, ArrayList 会默认在将指定的元 素追加到此列表的末尾,这种情况时间复杂度就是O(1)。: ArrayList的空 间浪费主要体现在在list列表的结尾会预留一定的容量空间,而 LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间(因为要存放直 接后继和直接前驱以及数据)。是否支持快速随机访问。
2023-12-14 22:47:30
339
原创 JVM 是如何处理异常的?
JVM 会顺着调用栈去查找看是否有可以处理异常的代码,如果有,则调用异常处理代码。如果 JVM 没有找到可以处理该异常的代码块,JVM 就 会将该异常转交给默认的异常处理器(默认处理器为 JVM 的一部分),默认异常处理器打印出异常信息 并终止应用程序。在一个方法中如果发生异常,这个方法会创建一个异常对象,并转交给 JVM,该异常对象包含异常名 称,异常描述以及异常发生时应用程序的状态。可能 有一系列的方法调用,最终才进入抛出异常的方法,这一系列方法调用的有序列表叫做调用栈。
2023-12-14 22:46:14
414
原创 逢“四”过
出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常。程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。小明识破了司机的伎俩,准备利用自己的学识打败司机的阴谋。给出计费表的表面读数,返回实际产生的费用。399再多一块钱变为500;23再多一块钱就变为25;39再多一块钱变为50;
2023-12-14 16:50:05
438
原创 访问修饰符的区别
protected(受保护的):对同一个包的类和所有子类可见。default(默认的):在同一个包的类可见;private(私有的):在同一个类中可见;public(公共的):对所有类可见。
2023-12-13 19:57:06
373
原创 String的常用方法
在面试的时候,偶尔就会问你java中的String的一些你常用的方法来考察你对于java的熟练度。但是对于api那种全是英文或者说多个方法杂糅到一块。不花点时间真的不好弄明白。
2023-12-13 16:03:34
557
原创 反射篇笔记
反射的本质:加载类。把某个类的字节码文件加载到内存中。并允许以变成的方式解剖类中的各种成分(成员方法,变量,构造器)。例如在使用IDEA时,他的提示,就是利用反射,提前将类中的信息解剖展示出来。
2023-12-11 16:43:16
392
原创 配置环境下载
链接:https://pan.baidu.com/s/1bh0g4UMwfBWyfWu9KbZ1JQ?# 设置mysql数据库的数据的存放目录 ---------是你的文件路径data文件夹自行创建。# 设置mysql的安装目录 ----------是你的文件路径-------------MYSQL下载(更改my.ini本地地址)(用管理员模式进入)(服务名称在中间激活部分见)# 默认使用“mysql_native_password”插件认证。# 设置mysql客户端连接服务端时默认使用的端口。
2023-06-15 20:07:20
74
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人