Spring
1、Spring 创建的 Bean 和普通的 Java 对象有什么区别?
2、Bean 的创建生命周期
调用构造方法(推断构造方法) -> 普通对象 -> 依赖注入(属性赋值) -> 初始化前 (PostConstruct)-> 初始化(InitializingBean.afterPropertiesSet()) -> 初始化后(AOP) -> 代理对象 -> Bean
3、Bean 的销毁生命周期
@Bean 会覆盖 @Component
Spring 容器简单理解就是一个 Map
注入 bean 时,先根据「byType」去 Spring 容器中找,如果找到了多个,就再根据「byName」去找,最终至多只会找到一个
设计模式之单例模式
单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。比如,线程池、缓存等。
如果不用单例模式,那有什么办法能创建一个独一无二的对象吗?
可以使用 Java 的静态变量。
使用静态变量有什么缺点吗?
如果要将对象赋值给一个全局变量,那么在程序一开始就要创建好这个对象。如果创建这个对象需要消耗比较大的资源,同时本次程序的执行过程中又没有用到它,这就会很浪费。
使用单例模式就可以做到,在需要时才创建对象(lazy instantiaze)。
下面是经典的单例模式代码:
public class Singleton_1 { // 使用静态变量来记录唯一实例 private static Singleton_1 uniqueInstance; // 构造器私有化,只有 SingletonPattern_1 类内才可以调用构造器 private Singleton_1() {} // 提供一个全局访问点,返回 uniqueInstance public static Singleton_1 ...
IDEA create class and method comment use template
Class commentIDEA - Settings - Editor - File and Code Templates - Class
/** * @description: ${description} * * @author: YOUR NAME or {USER} * * @create: ${YEAR}-${MONTH}-${DAY} ${HOUR}:${MINUTE} */
Method CommentIDEA - Settings - Editor - Live Templates - create a new Template Groups. I my case i create a Template Groups named “Method Comment”.
Then select “Method Comment” add a new Live Template
NOTICE: there is no / in fi ...
在GitHub上部署Hexo网站
换电脑好久了,个人网站一直拖着没有部署。今天决定要搞一下,发现很多步骤都忘记了,因此写篇帖子记录一下,方便以后查阅
要在新 Mac 上安装 Hexo 首先需要有 Homebrew。Homebrew 官网推荐的安装方式因为某些特殊原因,一直报错。尝试在 /etc/hosts 文件中配置 GitHub,但是没起作用。最终解决方法:使用国内镜像安装 Homebrew
装好 Homebrew 以后,可以去到 Hexo 官网,按官网提示安装 Hexo
npm install hexo-cli -g 安装 hexo
cd blog 进到本地自己的博客文件夹中
npm install
将博客文件部署到 github.io 上
去到博客根文件下修改 _config.yml,将 GitHub 的部署方式修改为 SSH 方式 github: git@github.com:userName/userName.github.io.git
按照 Generating a new SSH key and adding it to the ssh-agent 一步一步的设置 SSH
在博客根目录运行 h ...
我的2022年终总结
今年的重心是秋招和毕业。
秋招 9 月份开始投递简历,主要投的互联网行业,现在是 0 offer,每天笑哈哈。
毕业主要是毕业要求和毕业论文,毕业要求已经达到了,论文也有了大体框架,剩下的就差写出来了。
今年来主要做了如下几件事:
英语学习。听力,一直在坚持听英语播客「ESLPod」,听了 40 期了。阅读,读了一本「小王子」。写作和口语,无。6 级考了还没出成绩。每天也在坚持用英语。
准备秋招。做了 2 个简历上的项目,看了些八股文,读了周志明的 Java 虚拟机。刷题见下面第 3 条。去年定的目标是上岸大、中厂,还是大意了。
刷题。LeetCode 每日一题坚持了 7 个月了,周赛也打了几十场了,算法和数据结构的学习一直没断,每天都在进步,做题也渐入佳境。刷题是打算培养成个人爱好的。
读书。今年读了 32 本书,离去年的 50+ 目标有点差距。
健康。今年牙齿动了个小手术,4 颗智齿全部拔掉了,补了几颗蛀牙。其他方面没啥问题。对了,我已经阳过了,发烧最高到了 39.8 度,直逼 40 度,吃了三片对乙酰氨基酚。其他症状有浑身疼、咳嗽、嗓子疼、流鼻涕、味觉嗅觉衰退,感觉也还好。也给 ...
KMP字符串匹配算法
力扣题目:Find the Index of the First Occurrence in a String
给定原串 s 长度为 n,模式串 p 长度为 m。
先给个暴力解法:
int fun(String s, String t) { int n = s.length(), m = t.length(); for (int idx = 0; idx <= n - m; idx++) { int i = idx, j = 0; for ( ; j < m; ++i, ++j) { if (s.charAt(i) != t.charAt(j)) break; } if (j == m) return idx; } return -1;}
首先,KMP(Knuth–Morris–Pratt algorithm)和暴力解法的不同之处是,当遇到不相同的字符时,暴力解法采取的措施是:原串指针回到本次开始位置的下一个位置, ...
差分数组
适用情况频繁的对区间进行修改操作,单点查询。
基本使用初始化,以及跟新操作int[] diff = new int[n + 1];for (int i = 0; i < n; ++i) { int l = 修改的左区间; int r = 修改的右区间 + 1; int val = 对区间修改的值; diff[l] += val; if (r + 1 < n) diff[r + 1] -= val;}
查询操作int[] res = new int[n];res[0] = diff[0];for (int i = 1; i < n; ++i) { res[i] = res[i - 1] + diff[i];}
基本原理diff[L...]+3 表示对 diff[L...]所有的元素都 +3。diff[R+1...]-3 表示对 diff[R+1...] 所有的元素都 -3。
那么,通过对 diff[R+1...] 所有的元素都 -3,就可以抵消 diff[R+1...] 多余的 +3 操作(该多 ...
计数排序
计数排序(Counting sort)是一种稳定的线性时间排序算法。该算法于 1954 年由 Harold H. Seward 提出。计数排序使用一个额外的数组 C,其中第 i 个元素是待排序数组 A 中值等于 i 的元素的个数。然后根据数组 C 来将 A 中的元素排到正确的位置。维基百科:计数排序。
计数排序要求待排序数组必须是整数,而且值域必须明确。
public void countingSort(int[] nums) { // 取最大、最小值 int max = Arrays.stream(nums).max().getAsInt(); int min = Arrays.stream(nums).min().getAsInt(); // 为额外数组 count 开空间 int range = max - min + 1; int[] count = new int[range]; // 统计元素出现次数(需要计算偏移量) for (int num : nums) count[num - min]++; // 求计 ...
拓扑排序
相关题目:剑指 Offer II 114. 外星文字典、802. 找到最终的安全状态。
拓扑排序只能在有向无环图(DAG, Directed Acyclic Graph)中得到正确的结果(在有环图中可以运行拓扑排序,不会报 BUG,但是结果不正确:完成排序的节点个数和总的结点个数不相等),所以,拓扑排序也可以用来检测一个有向图是不是带环。
拓扑排序的结果不是唯一的。这取决于将入度为 0 的节点插入队列的顺序。队列出队顺序为拓扑排序顺序。
与拓扑排序相关的两个概念:
入度(indegree):有多少条边直接指向该节点;
出度(outdegree):由该节点指出的边有多少条。
拓扑排序的基本过程:
起始时,将所有入度为 0 的结点入队。
对队列进行出队操作,出队顺序就是拓扑排序的顺序。对于当前出队元素 v,遍历图中所有和其直接相连接的结点 w,并将 w 的入度减 1。
如果对 w 的入度减 1 后,w 的入度为 0,则将 w 入队。
重复执行步骤 2、3,直至队列为空。
拓扑排序思想很好理解,代码也不难。在我看来难点在于,能够识别出一个问题可以用图建模,并正确的进行建模。
cl ...