0%

⛑️ 整数和罗马数字之间的转换

罗马数字包含以下七种字符: IVXLCDM

字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给你一个整数,将其转为罗马数字。

🍏 6.引入ApplicationContext和后置处理器

​ 在上节中,我们实现了从配置文件中读取bean的配置信息,也就是说在实例化之前增加了一个配置文件的读取和利用的模块,但资源文件读取还是要手动调用loadBeanDefinitions方法,没有模拟出spring中真正的配置文件加载过程。所以,本节中我们继续完善spring框架,对外提供修改的接口,可以在bean 对象注册后但未实例化之前,对 Bean 的定义信息 BeanDefinition 执行修改操作。还可以在bean对象实例化之后进行修改。并且将bean对象的配置文件加载,注册,实例化,修改等操作都融合到一个上下文操作类中,本节中主要是将之前的一些操作都进行封装,对外只暴露这个上下文操作类,使其更加符合spring框架的特点。本节中涉及到的代码放在了 仓库

🍒 5.将bean的注册信息放入配置文件

之前几节已经实现了将bean的创建交给IOC容器,并且创建和属性填充已经分开,但是bean的定义、注册、属性填充、对象调用都是手动在测试方法中实现的,这与真正的spring并不相符,所以本节在之前的基础上将spring中bean的定义,注册,属性填充等都配置到配置文件中,然后编写代码读取配置文件中的信息,完成定义,注册,属性填充等操作,使其变得更一个spring框架,详细的代码在 仓库

🍅 380.线性时间时间插入、删除和获取随机元素

实现RandomizedSet 类:

  • RandomizedSet() 初始化 RandomizedSet 对象
  • bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false
  • bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false
  • int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 相同的概率 被返回。

你必须实现类的所有函数,并满足每个函数的 平均 时间复杂度为 O(1)

🍐 4.bean的实例化和属性填充分离

本节中主要是修改上一节中留下来的小问题,上一节中实现了带参的bean对象创建,但是一旦当前bean对象依赖另一个bean对象时,这种创建方式就会失效,因为上一节的带参bean对象创建需要先得到所有的参数。也就是说,当内部依赖另外一个bean对象时,需要先将这个bean对象new出来,然后将其当成参数传递给getBean方法,但是这又不符合bean对象的设计模式了,我们前面千辛万苦将bean的创建交给了IOC容器,现在不能将bean的创建工作交给自己,所以这里需要另辟蹊径,来实现bean的另外一种创建模式(先创建再属性填充),具体的代码在 仓库

🍈 3.创建带参bean对象

本文主要是在上一章的基础上对上一章中代码存在的问题进行改造,上一章中将bean对象的创建交给了IOC容器,利用反射创建bean对象并保存到IOC容器中,但是忽略了一点,上章中代码只能创建不携带参数的bean对象,所以这一章主要解决的问题就是创建有参数的bean对象,正常的spring创建带参的bean对象时,参数应该注册到了BeanDefinition中,然后先创建然后属性填充,但是本节中我们直接一步到位,简化bean的创建过程。具体的代码在 仓库

🏞️ H指数

给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数

根据维基百科上 h 指数的定义 h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且每篇论文 至少 被引用 h 次。如果 h 有多种可能的值,h 指数 是其中最大的那个。

🤔 2.自动创建bean对象

本节中主要是以上一节为基础,并对上一节制作的IOC容器进行改良,上一节中,bean对象的实例化是手动new出来的,这一节中将bean对象的创建交给IOC容器本身,并且为了考虑扩展性,尽可能的使得每一个类都只执行一个职责,最终让整个项目变得更加健壮,本节中创建的bean默认单例。关于项目的源码存放在 仓库