- 博客(22)
- 收藏
- 关注
原创 日拱一卒:Spring三级缓存
earlySingletonObjects:早期单例对象缓存,用于存放已经创建好但是属性还未注入完成的早期单例对象(用于存储在创建Bean早期对创建的原始bean的一个引用,注意这里是原始bean,即使用工厂方法或构造方法创建出来的对象)以此类推,当需要testA的bean使用setter注入testA时,会使用提前暴露的ObjectFactory工厂,返回一个(提前暴露的)创建中的bean testA,完成setter注入。singletonObjects:单例对象缓存,用于存放已经创建好的对象。
2023-04-02 21:36:15 114
原创 日拱一卒:准备创建Bean
Spring配置中存在lookup-method和replace-method,这两个配置的加载是将配置统一存放在BeanDefinition中的methodOverrides属性里,mbdToUse.prepareMethodOverrides()操作就是针对这两个配置的。lookup-method和replace-method的作用是在bean实例化的时候如果检测到存在methodOverrides属性,会动态地为当前bean生成代理并使用对应的拦截器做增强处理(相关逻辑在bean的实例化部分介绍)
2023-03-28 22:50:53 82
原创 日拱一卒:从bean实例中获取对象
getBean方法中,得到bean实例后是调用getObjectForBeanInstance验证正确性,检测当前bean是否是FactoryBean,如果是要调用对应的FactoryBean实例中的getObject()作为返回值。返回的bean如果是单例的,必须保证全局唯一性,同时可以使用缓存提高性能,doGetObjectFromFactoryBean是起作用的代码。将从Factory中解析bean的工作委托给getObjectFromFactoryBean。《Spring源码解析》
2023-03-27 22:18:07 172
原创 日拱一卒:FactoryBean
当配置文件中的bean的class属性的实现类是FactoryBean时,通过getBean方法返回的是FactoryBean#getObject()返回的对象,而不是FactoryBean本身,即FactoryBean#getObject()代理了getBean方法。在某些情况下,在中需要大量的配置信息,采用编码的方式(FactoryBean可以改善)如果用传统的方式,配置Car的bean时,其每个field对应一个元素标签,这是比较痛苦的;《Spring源码深度解析》
2023-03-26 21:18:24 79
原创 剑指 Offer 20. 表示数值的字符串
题目表示数值的字符串C++代码class Solution {public: bool before(string s) { bool res = false, point = false; for(int i = 0; i < s.size(); i++){ if(s[i] == '+' || s[i] == '-'){ if(i != 0) return
2022-01-07 11:29:40 59
原创 剑指 Offer 19. 正则表达式匹配
题目正则表达式匹配C++代码class Solution {public: bool isMatch(string s, string p) { int m = s.size(), n = p.size(); vector<vector<bool>> dp(m + 1, vector<bool>(n + 1, false)); dp[0][0] = true; for(int i = 1; i
2022-01-07 11:28:01 471
原创 剑指 Offer 18. 删除链表的节点
题目删除链表的节点C++代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* deleteNode(ListNode* head, int val){
2022-01-07 11:13:03 813
原创 剑指 Offer 17. 打印从1到最大的n位数
题目C++代码打印从1到最大的n位数class Solution {public: vector<int> printNumbers(int n){ int end = 1; while(n--){ end *= 10; } vector<int> res; for(int i = 1; i < end; i++){ res.push_
2022-01-07 11:09:44 584
原创 剑指 Offer 15. 二进制中1的个数
题目二进制中1的个数C++代码class Solution {public: int hammingWeight(uint32_t n){ int res = 0; while(n){ res++; n = n & (n - 1); } return res; }};Java代码public class Solution { // you need
2022-01-06 17:12:40 398
原创 剑指 Offer 14- II. 剪绳子 II
题目剪绳子 IIC++代码class Solution {public: int cuttingRope(int n){ if(n <= 1) return -1; if(n == 2) return 1; if(n == 3) return 2; if(n == 4) return 4; long res =
2022-01-06 17:11:48 157
原创 剑指 Offer 14- I. 剪绳子
题目剪绳子C++代码class Solution {public: int cuttingRope(int n){ if(n <= 1) return -1; if(n == 2) return 1; if(n == 3) return 2; if(n == 4) return 4; int res = 1;
2022-01-06 17:02:07 57
原创 剑指 Offer 13. 机器人的运动范围
题目机器人的运动范围C++代码class Solution {public: int dfs(vector<vector<int>>& board, int i, int j, int k){ if(i >= board.size() || j >= board[0].size() || board[i][j] == 1 || (i % 10 + i / 10 + j % 10 + j / 10) > k)
2022-01-05 11:30:21 169
原创 剑指 Offer 12. 矩阵中的路径
题目矩阵中的路径C++代码class Solution {public:bool dfs(vector<vector<char>> &board, int i, int j, string word, int index) { if(i < 0 || i >= board.size() || j < 0 || j >= board[0].size() || board[i][j] == '*' || board[i][j] != wo
2022-01-05 11:28:51 152
原创 剑指 Offer 11. 旋转数组的最小数字
题目旋转数组的最小数字C++代码class Solution {public: int minArray(vector<int>& numbers){ if(numbers.size() == 0) return -1; int left = 0, right = numbers.size() - 1; while(left <= right){ int mid = le
2022-01-05 11:27:16 403
原创 剑指 Offer 10- II. 青蛙跳台阶问题
题目青蛙跳台阶问题C++代码class Solution {public: int numWays(int n){ if(n == 0) return 1; if(n == 1) return 1; if(n == 2) return 2; int a = 1, b = 2; for(int i = 3; i <= n; i++){
2022-01-04 09:56:06 255
原创 剑指 Offer 10- I. 斐波那契数列
题目斐波那契数列C++代码class Solution {public: int fib(int n){ if(n < 1) return 0; if(n == 1) return 1; if(n == 2) return 1; int a = 1, b = 1; for(int i = 3; i <= n; i++){
2022-01-04 09:54:43 161
原创 剑指 Offer 09. 用两个栈实现队列
题目添加链接描述C++代码class CQueue {private: stack<int> left, right;public: CQueue() { } void appendTail(int value) { left.push(value); } int deleteHead() { if(right.empty()){ while(left.size()){
2022-01-04 09:32:57 73
原创 剑指 Offer 06. 从尾到头打印链表
题目从尾到头打印链表C++代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: vector<int> reversePrint(ListNode* head){
2021-12-30 21:06:44 588
原创 剑指 Offer 05. 替换空格
题目替换空格C++代码class Solution {public: string replaceSpace(string s){ string res; for(int i = 0; i < s.size(); i++){ if(s[i] == ' '){ res += "%20"; } else{ res += s[
2021-12-30 20:54:54 300
原创 剑指 Offer 04. 二维数组中的查找
题目二维数组中的查找C++代码class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target){ int m = matrix.size(); if(m == 0) return false; int n = matrix[0].size(); int x =
2021-12-29 17:22:39 352
原创 剑指 Offer 03. 数组中重复的数字
题目数组中的重复的数字C++代码class Solution {public: int findRepeatNumber(vector<int>& nums){ set<int> numsSet; for(int i = 0; i < nums.size(); i++){ if(numsSet.find(nums[i]) == numsSet.end()){ nums
2021-12-29 16:52:59 620
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人