parent
aefb5bd67f
commit
873e396bf5
@ -0,0 +1,118 @@
|
||||
## 数据结构
|
||||
|
||||
* 数据结构是存储、组织数据的方式
|
||||
* 精心选择的数据结构可以带来更高的运行或者存储效率
|
||||
* 数据结构是很多算法得以进行的载体
|
||||
|
||||
### 最基本的数据结构
|
||||
|
||||
* 数组 按照下标寻址的时间复杂度为O(1),不便于增删数据
|
||||
* 链表 便于增删数据,不便于寻址
|
||||
|
||||
### 前缀和数组
|
||||
|
||||
可以考虑使用二维数组保存前缀和,避免每次做减法。
|
||||
|
||||
```Java
|
||||
private static int preSum(int[] arr, int left,int right) {
|
||||
int length = arr.length;
|
||||
int[] preSum = new int[length];
|
||||
for (int i = 0; i < length; i++) {
|
||||
if (i == 0) {
|
||||
preSum[i] = arr[i];
|
||||
} else {
|
||||
preSum[i] = preSum[i - 1] + arr[i];
|
||||
}
|
||||
}
|
||||
return left == 0 ? preSum[right] : preSum[right] - preSum[left];
|
||||
}
|
||||
```
|
||||
|
||||
从1-5随机到1-7随机
|
||||
从a-b随机到c-d随机
|
||||
01不等概率随机到01等概率随机
|
||||
|
||||
```Java
|
||||
private static int f1(){
|
||||
return (int) (Math.random() * 5) + 1;
|
||||
}
|
||||
|
||||
private static int f2(){
|
||||
int ans = 0;
|
||||
do {
|
||||
ans = f1();
|
||||
} while (ans == 3);
|
||||
return ans < 3 ? 0 : 1;
|
||||
}
|
||||
|
||||
// 000 - 111 等概率
|
||||
private static int f3(){
|
||||
return f2() << 2 + f2() << 1 + f2();
|
||||
}
|
||||
```
|
||||
|
||||
固定概率方法等概率返回0或者1
|
||||
|
||||
```Java
|
||||
// 固定概率返回0或者1
|
||||
private static int x(){
|
||||
return Math.random() < 0.84 ? 0 : 1;
|
||||
}
|
||||
|
||||
// 等概率返回0或者1
|
||||
private static int y() {
|
||||
int ans = 0;
|
||||
do {
|
||||
ans = x();
|
||||
} while (ans == x());
|
||||
return ans;
|
||||
}
|
||||
```
|
||||
|
||||
生成随机数组,判断排序结果
|
||||
|
||||
```Java
|
||||
public static void main(String[] args) {
|
||||
int maxLen = 50;
|
||||
int maxValue = 3000;
|
||||
int times = 10000;
|
||||
for (int i = 0; i < times; i++) {
|
||||
int[] arr = randomArr(maxLen, maxValue);
|
||||
int[] tmp = copyArr(arr);
|
||||
// selectionSort(arr);
|
||||
// bubbleSort(arr);
|
||||
insertSort(arr);
|
||||
boolean result = validateArr(arr);
|
||||
if (!result) {
|
||||
for (int j = 0; j < arr.length; j++) {
|
||||
System.out.print(tmp[j] + " ");
|
||||
}
|
||||
System.out.println();
|
||||
System.out.println("排序结果错误");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static int[] copyArr(int[] arr){
|
||||
int[] ans = new int[arr.length];
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
ans[i] = arr[i];
|
||||
}
|
||||
return ans;
|
||||
}
|
||||
|
||||
private static boolean validateArr(int[] arr) {
|
||||
if (arr.length < 2) {
|
||||
return true;
|
||||
}
|
||||
int max = arr[0];
|
||||
for (int i = 1; i < arr.length; i++) {
|
||||
if (max > arr[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
```
|
@ -0,0 +1,32 @@
|
||||
### 框架源码的前置知识
|
||||
|
||||
* 设计模式
|
||||
* 数据结构与算法
|
||||
* 反射
|
||||
* 多线程
|
||||
* JVM
|
||||
|
||||
IOC控制反转
|
||||
DI依赖注入
|
||||
|
||||
```xml
|
||||
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" abstract="xxx" autowire="byName" autowire-candidate="default" depends-on="environment" init-method="afterPropertiesSet">
|
||||
<!-- 注入数据库连接池 -->
|
||||
<property name="dataSource" ref="dataSource"/>
|
||||
</bean>
|
||||
```
|
||||
|
||||
```Java
|
||||
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml")
|
||||
XXX xxbean = context.getBean(XXX.class);
|
||||
xxbean.method();
|
||||
```
|
||||
|
||||
#### SSM框架项目中spring处理bean的主要流程
|
||||
|
||||
* 加载xml文件
|
||||
* 解析xml文件
|
||||
* 封装BeanDefinition
|
||||
* 实例化
|
||||
* 放到容器中
|
||||
* 从容器中获取
|
Loading…
Reference in new issue