- 博客(26)
- 收藏
- 关注
原创 记一次实战项目所学(JWT篇)
需要一个通用方法,获取token里的userid(一般放在请求头里)因为id是唯一的所以id可以作为token。先获取公钥准备将前端输入的进行加密。dao层为数据操作不再贴代码啦。(controller层) (Service层)
2024-03-13 13:28:05
421
原创 算法——哈希王
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1: 输入: s = "anagram", t = "nagaram" 输出: true示例 2: 输入: s = "rat", t = "car" 输出: false你可以假设字符串只包含小写字母。没什么难的,用桶的思想。
2024-03-11 16:08:53
1044
原创 记一次实战项目所学(通用接口篇)
如果exception是conditionException的话,可以获得一个状态码,再用Json返回数据类返回,用于主动抛出异常,如密码错误等。把公钥返回前端,用公钥把前端输入密码进行加密,将暗文返回后端。generateKeyPair用于生成公钥和私钥。encrypt 方法用于加密 (根据公钥)sign用于加密 (内容,加密盐,编码)encrypt 方法用于加密。decrypt 方法用于解密。decrypt 方法用于解密。将 状态码和状态与数据封装。verify用于解密。
2024-03-11 14:43:44
585
原创 弄清Resource、ResourceLoader、容器之间的微妙关系
ApplicationContext接口继承了ResourcePattenrnResolver,AbstractApplicationContext继承了ResourcePattenrnResolver,高级容器支持统一资源加载。DefaultResourceLoader获取Resource的具体实现类的实例。ResourcePattenrnResolver 实现了ant风格的资源访问。上述通过ResourceLoader实现。Resource家族。
2024-03-09 18:30:19
562
原创 算法——链表王
其实这种情况和n为1的时候 效果是一样的,一样可以通过这个方法找到 环形的入口节点,只不过,index1 指针在环里 多转了(n-1)圈,然后再遇到index2,相遇点依然是环形的入口节点。双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]因为要找环形的入口,那么要求的是x,因为x表示 头结点到 环形入口节点的的距离。
2024-03-08 14:32:52
2140
1
原创 直击Spring源码——高级容器
之所以叫高级容器是因为在简单容器(beanFactory)的基础上加了很多功能,继承了EnvironmentCapable接口,用于获取容器的一些启动参数,对于web容器来说,可以用Environment获取servlet的一些配置信息,继承ListableBeanFactory,说明实现类可以通过列表的方式管理bean,ResourcePatterResolver 用于获取资源,ApplicationEventPublisher用于实现监听机制等,观察者模式。抽象方法:必须让子类实现的方法。
2024-03-08 14:29:38
532
1
原创 直击Spring源码——简单容器
Autowired默认使用byType来自动装配,如果存在类型的多个实例就尝试使用byName匹配,如果通过byName也确定不了,可以通过Primary和Priority注解来确定,否则报错。spring中要求所有的IOC容器,都要实现BeanFactory,BeanFactory顶级接口,Bean大都是尤其实现类管理FactoryBean是一个Bean,生成其他Bean。DefaultListableBeanFactory第一个可以独立运行的IOC容器;
2024-03-06 14:20:35
413
1
原创 直击Spring源码——Bean与BeanDefinition
不管是通过xml还是注解方式来定义Bean,都会被框架定位和读取到内存中,解析成一个个BeanDefinition实例,存储在容器中,整个过程发生在容器初始化的过程中。Bean的本质就是java对象,Spring中使用BeanDefinition来描述Bean。java中使用Class来描述类,
2024-03-06 13:35:49
427
1
原创 仿写Spring——实现容器的依赖注入(自研框架IOC容器完结)
自研框架IOC容器的实现,最后一个点实现容器的依赖注入这些实例对外提供服务还是不完备的实现容器的依赖注入实现思路:定义相关的注解标签:使用标签标记需要容器注入bean实例的地方实现创建被注解标记的成员变量实例,并将其注入到成员变量里依赖注入的使用:为了减少成本,只支持成员变量,工厂方法等级别的注入创建注解用于标记成员变量,完成标签的创建:Autowired接下来,有了注解,我们来实现依赖注入,对被注解标记的地方进行处理依赖注入针对的是容器本身的class对象,所以需要先获取到容器实例。
2024-03-04 18:02:44
681
原创 仿写Spring——能够防御反射和序列化的IOC单例模式容器载体
!!反射和序列化攻击无法穿透枚举内部,因为枚举的构造函数在类加载时就创建好了。即EnumStarvingSingleton只有一份。解释:这段代码实现了单例模式的一种变体,称为枚举式单例模式(Enum Singleton)。让我详细解释一下代码的每个部分:EnumStarvingSingleton 类:这是一个普通的 Java 类,它私有化了构造函数,这意味着其他类无法直接实例化该类的对象。它提供了一个静态的 getInstance() 方法,用于获取单例对象的实例。
2024-03-01 20:32:50
988
原创 IOC与DI
以前简单工厂,工厂方法,抽象工厂,说到底都是要产生一个产品的对象,这些代码都是写死在工厂中,假如需要成千上万,那么…给出类名,来动态的生成对象,可以让对象在生成时被决定时哪一种对象。将对象的创建、依赖关系的管理以及生命周期交由Ioc容器管理。使用注解标记需要工厂管理的实例,并根据注解属性做精细控制。降低系统在实现上的复杂性和耦合度,易于扩展,满足开闭原则。含义:把底层类作为参数传递给上层类,实现上层对下层的控制。容器管理着bean的生命周期,控制着bean的依赖注入。创建实例的时候不要了解其中的细节。
2024-02-28 15:23:03
534
原创 JAVA-注解
上面的说法是为了方便理解的,那么下面来个稍微正式一点的:注解是提供一种为程序元素设置元数据的方法,理解起来还是一样的,程序元素就是指接口、类、属性、方法,这些都是属于程序的元素,那啥叫元数据呢?在Java中注解其实就是写在接口、类、属性、方法上的一个标签,或者说是一个特殊形式的注释,与普通的//或/**/注释不同的是:普通注释只是一个注释,而注解在代码运行时是可以被反射读取并进行相应的操作,而如果没有使用反射或者其他检查,那么注解是没有任何真实作用的,也不会影响到程序的正常运行结果。
2024-02-28 15:16:36
944
原创 Spring源码前置——反射
2).public Field getDeclaredField(String fieldName):获取某个字段(可以是私有的)public Method[] getDeclaredMethods():获取所有的成员方法,包括私有的(不包括继承的)1).public Field getField(String fieldName):获取某个"公有的"字段;·Class类只有一个私有的构造函数,只有JVM能够创建Class类的实例。1).Field[] getFields():获取所有的"公有字段"
2024-02-27 18:38:12
2161
原创 synchronized 重量锁
在很多的情况下,在Java程序运行时,同步块中的代码都是不存在竞争的,不同的线程交替的执行同步块中的代码。这种情况下,用重量级锁是没必要的。当锁为轻量级锁时,另一个线程虽然是自旋,但自旋不会一直持续下去,当自旋一定次数后还没获取到锁,就进入阻塞,该锁膨胀为重量级锁。存储在对象头的mark word中,同时也设置偏向锁的标识为101,如果对象处于无锁状态则修改成功,代表该线程获得了偏向锁。当锁是偏向锁时,被另一线程所访问,偏向锁就好升级为轻量级锁,其他线程会通过自旋的形式尝试获取锁,不会阻塞,提供性能。
2023-12-12 14:49:50
1160
原创 深度剖析线程安全性问题与底层(一)
线程安全的三个问题: 原子性 可见性 有序性原子性:不能拆可见性:当一个线程对共享变量进行修改后,其他线程能够立即看到修改后的值有序性: 有重排序问题,单线程下重排序后结果不变,多线程情况下会出现问题。
2023-12-11 16:24:39
461
原创 并发编程学前准备
方法1:使用Interrupt(),当一个线程的 interrupt 属性被设置为true后,这次线程执行完后就会停止执行,sleep方法会在抛出异常的同时把线程的Interrupt属性设置为false。添加无用的多余数据填充数据至64字节,使一个数据占一个缓存行(dispute)核心1改了A的数据会导致核心2的数据全部失效,核心2只能重新再读一遍AB。其他线程执行完后,当前线程再执行(先预热,主线程才能烤面包)在java中只需要加volatile关键字即可。
2023-12-11 15:29:57
377
原创 求求二分不要再折磨我了QAQ
题目描述求出序列中以及第,这样元素x在序列中存在的区间就是左闭右开。【L,R)假如对下标从 0开始,有 5个元素的序列,则 x 应当存在的位置。------先来考虑第一小问:求序列中第一个大于等于 x 的元素的位置。假设当前二分区间为 [l,r],那么根据 mid 位置处的元素与欲查元素 x的大小判断应当往哪个子区间继续查找:①如果 A[mid]>=x,则说明第一个大于等于 x 的元素的位置,一定在 mid 处或 mid的左侧,应往左子区间 [l,mid]继续查询,即令 r=mid。
2023-12-11 13:42:31
1652
原创 力扣122. 买卖股票的最佳时机 II
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0。
2023-11-30 18:31:03
372
原创 力扣121. 买卖股票的最佳时机
在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回。设计一个算法来计算你所能获取的最大利润。在这种情况下, 没有交易完成, 所以最大利润为 0。买入这只股票,并选择在。
2023-11-30 18:29:14
416
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅