Compare commits

...

32 Commits

Author SHA1 Message Date
liulinlin 3547346aa8 Merge branch 'liulinlin' into milestone-20260401-学习笔记 5 days ago
liulinlin 76231dafac 4.9 5 days ago
tianqingang 4637af7671 Merge branch 'tianqingang/feature-20260402182447-学习笔记' into milestone-20260401-学习笔记 5 days ago
tianqingang e356cffb32 4.9提交 5 days ago
chenchunxiao 9a4f7b5939 陈春晓4.9学习笔记 5 days ago
chenchunxiao 3daecc6b1f 4.8学习笔记 5 days ago
tianqingang 27adefe523 Merge branch 'tianqingang/feature-20260402182447-学习笔记' into milestone-20260401-学习笔记 6 days ago
tianqingang fc7e30ffae 4.8提交 6 days ago
liulinlin cf122824ce Merge branch 'liulinlin' into milestone-20260401-学习笔记 6 days ago
liulinlin 34dbf9a440 4.8学习笔记 6 days ago
tianqingang 0055c48ce0 Merge branch 'tianqingang/feature-20260402182447-学习笔记' into milestone-20260401-学习笔记 1 week ago
tianqingang 33ecdcdabc 4.7日提交 1 week ago
chenchunxiao b745c548b0 提交陈春晓4.7学习笔记 1 week ago
liulinlin dd82f73017 Merge branch 'liulinlin' into milestone-20260401-学习笔记 1 week ago
liulinlin f2861786fc 4.7学习笔记 1 week ago
tianqingang ca73568ae4 Merge branch 'tianqingang/feature-20260402182447-学习笔记' into milestone-20260401-学习笔记 1 week ago
tianqingang eadb3b3116 tianqingang/feature-20260402182447-学习笔记 1 week ago
chenchunxiao 19077c99c9 Merge branch 'milestone-20260401-学习笔记' of http://39.101.133.168:8807/majun/practiceGit into milestone-20260401-学习笔记 1 week ago
chenchunxiao d390391cbd 提交陈春晓的学习笔记 1 week ago
liulinlin 71652ab605 Merge branch 'liulinlin' into milestone-20260401-学习笔记 1 week ago
liulinlin 9f80cfa0f8 4.4学习笔记 1 week ago
tianqingang fb9524061d Merge branch 'milestone-20260401-学习笔记' of http://39.101.133.168:8807/majun/practiceGit into milestone-20260401-学习笔记 2 weeks ago
tianqingang e150a2c85e Merge branch 'tianqingang/feature-20260402182447-学习笔记' into milestone-20260401-学习笔记 2 weeks ago
tianqingang 07cf473f29 共两日 2 weeks ago
liulinlin 9dd6588928 Merge branch 'liulinlin' into milestone-20260401-学习笔记 2 weeks ago
liulinlin 62cc0aba59 4.3学习笔记 2 weeks ago
tianqingang 65184b1703 Merge remote-tracking branch 'origin/tianqingang/feature-20260402182447-学习笔记' into milestone-20260401-学习笔记 2 weeks ago
liulinlin c0a9714bfc Merge branch 'liulinlin' into milestone-20260401-学习笔记 2 weeks ago
liulinlin b5e2309240 4.2学习笔记 2 weeks ago
chenchunxiao 4580fc6837 学习笔记 2 weeks ago
tianqingang 6867d34b13 4.3日提交 2 weeks ago
tianqingang 534838a1ae 4.2日提交 2 weeks ago
  1. BIN
      刘林林学习笔记/4.3.docx
  2. BIN
      刘林林学习笔记/4.4.docx
  3. BIN
      刘林林学习笔记/4.7.docx
  4. BIN
      刘林林学习笔记/4.8 ...docx
  5. BIN
      刘林林学习笔记/4.8.docx
  6. BIN
      刘林林学习笔记/4.9.docx
  7. BIN
      刘林林学习笔记/~$4.8 ...docx
  8. BIN
      刘林林学习笔记/~$4.9.docx
  9. BIN
      刘林林学习笔记/~$林4.2股票.docx
  10. BIN
      刘林林学习笔记/刘林林4.2git.docx
  11. BIN
      刘林林学习笔记/刘林林4.2股票.docx
  12. BIN
      田庆昂学习笔记/田庆昂4.2学习笔记.docx
  13. BIN
      田庆昂学习笔记/田庆昂4.3学习笔记.docx
  14. BIN
      田庆昂学习笔记/田庆昂4.5学习笔记.docx
  15. BIN
      田庆昂学习笔记/田庆昂4.7学习笔记.docx
  16. BIN
      田庆昂学习笔记/田庆昂4.8学习笔记.docx
  17. BIN
      田庆昂学习笔记/田庆昂4.9学习笔记.docx
  18. 185
      陈春晓的学习笔记/陈春晓4.2学习笔记.md
  19. 321
      陈春晓的学习笔记/陈春晓4.3学习笔记.md
  20. 409
      陈春晓的学习笔记/陈春晓4.4学习笔记.md
  21. 401
      陈春晓的学习笔记/陈春晓4.7学习笔记.md
  22. 778
      陈春晓的学习笔记/陈春晓4.8学习笔记.md
  23. 738
      陈春晓的学习笔记/陈春晓4.9学习笔记.md

BIN
刘林林学习笔记/4.3.docx

BIN
刘林林学习笔记/4.4.docx

BIN
刘林林学习笔记/4.7.docx

BIN
刘林林学习笔记/4.8 ...docx

BIN
刘林林学习笔记/4.8.docx

BIN
刘林林学习笔记/4.9.docx

BIN
刘林林学习笔记/~$4.8 ...docx

BIN
刘林林学习笔记/~$4.9.docx

BIN
刘林林学习笔记/~$林4.2股票.docx

BIN
刘林林学习笔记/刘林林4.2git.docx

BIN
刘林林学习笔记/刘林林4.2股票.docx

BIN
田庆昂学习笔记/田庆昂4.2学习笔记.docx

BIN
田庆昂学习笔记/田庆昂4.3学习笔记.docx

BIN
田庆昂学习笔记/田庆昂4.5学习笔记.docx

BIN
田庆昂学习笔记/田庆昂4.7学习笔记.docx

BIN
田庆昂学习笔记/田庆昂4.8学习笔记.docx

BIN
田庆昂学习笔记/田庆昂4.9学习笔记.docx

185
陈春晓的学习笔记/陈春晓4.2学习笔记.md

@ -0,0 +1,185 @@
# 技术:
今天学习了git命令,并拉取了分支
### 一:git工作区
工作区(Working Directory)
  ↓ add
暂存区(Staging Area)
  ↓ commit
本地仓库(Local Repository)
  ↓ push
远程仓库(Remote Repository)
### 二:git命令
#### 基本命令:
创建仓库:git init
查看仓库状态:git status
添加到暂存区:git add
提交:git commit
查看仓库提交历史记录:git log
回退版本:git reset:--soft
  --hard
  mixed
查看差异:git diff
删除文件:git rm
#### 分支命令:
查看本地分支:git branch
创建分支:git branch 分支名
切换分支:git switch 分支名
合并分支:git merge 分支名
删除分支:git branch -d 分支名
#### 远程仓库:
克隆远程仓库:git clone
拉取:git pull
推送:git push
# 股票:
### 一、核心原则(牢记)
先大后小:先看大盘、行业,再看个股
先长后短:先分析长期趋势,再做短期交易
做熟不做生:只投资自己熟悉的领域和股票
### 二、股票基础概念
#### 1\. 什么是股票?
股票是一种有价证券,是上市公司为了筹集资金向出资人发行的、证明其股东所持股份的凭证。
#### 2\. 证券市场三大作用
筹资、定价、资本配置
#### 3\. 股票四大特性
风险性:高收益伴随高风险
收益性:来自公司分红或买卖差价
流通性:可在二级市场自由交易
永久性:股票不退还给公司,只能在市场卖出
### 三、股票分类
|类型|全称|计价货币|上市地点|投资者|
|-|-|-|-|-|
|A股|人民币普通股票|人民币|内地|境内投资者|
|B股|人民币特种股票|美元/港元|内地|境外投资者|
|H股|港股|港元|香港|全球投资者|
|N股|美股|美元|美国|全球投资者|
### 四、道氏理论
#### 三大公理
1\.市场行为包容一切:所有信息都已反映在价格中
2\.股价以趋势运行:上升、下降、横盘
3\.历史会重演:但不是简单复制
#### 三种趋势
长期趋势、中期趋势、短期趋势
#### 牛市三阶段
积累阶段:熊市结束,聪明钱开始买入
稳定上涨阶段:跟风者入场
反转过渡阶段:散户疯狂,主力出货
#### 三类投资者
先知先觉者:独立思考,理解市场本质
后知后觉者:可从众,但能通过学习改变
不知不觉者:贪婪恐惧,固执己见
#### 五、核心专业名词
多头/看多:看好后市,买入股票
空头/看空:看跌后市,卖出股票
牛市: 长期上涨市场
熊市 :长期下跌市场
牛皮市:横盘震荡,成交低迷
建仓 :买入某只股票
平仓 :卖出持有的股票
满仓 :全部资金买入股票
清仓:全部卖出股票
补仓 :下跌后买入降低成本
持仓 :手中持有的股票
套牢 :买入后股价下跌被套
踏空: 想买没买,股价大涨
洗盘 :主力震出散户
反弹:下跌中的短暂回升
回调:上涨中的短暂回落
跳水:股价快速下跌
K线:
阳线:红色,收盘价 > 开盘价(上涨)
阴线:绿色,收盘价 < 开盘价下跌
实体:盘价与收盘价之间的矩形
影线 :最高/最低价与实体的连线

321
陈春晓的学习笔记/陈春晓4.3学习笔记.md

@ -0,0 +1,321 @@
# 技术:
#### 一、Java语言概述
**跨平台原理:**
1.Java源码(.java)经编译生成**字节码**(.class)
2.字节码运行在**JVM**上,不同系统有不同JVM实现
3.JVM屏蔽了操作系统差异
**JDK / JRE / JVM 关系:**
1.**JDK**= JRE + 开发工具
2.**JRE**= JVM + 核心类库
3.**JVM**= 执行字节码的虚拟机
---
#### 二、环境搭建
---
#### 三、注释
| 注释类型 | 语法 | 用途 |
| -------- | ----------------- | ------------ |
| 单行注释 | `// 注释内容` | 解释单行代码 |
| 多行注释 | `/* 注释内容 */` | 解释多行代码 |
| 文档注释 | `/** 注释内容 */` | 生成API文档 |
```java
// 单行注释
/* 多行
注释 */
/** 文档注释,可用于生成帮助文档 */
```
---
#### 四、标识符与命名规范
**标识符规则:**
- 由字母、数字、下划线(_)、美元符($)组成
- 数字不能开头
- 不能是Java关键字(如 `class`、`public`、`static`)
- 大小写敏感
**命名规范(约定俗成):**
| 类型 | 规范 | 示例 |
| ------ | ---------------------------------- | ----------------------------- |
| 类名 | 大驼峰(每个单词首字母大写) | `HelloWorld`、`StudentInfo` |
| 方法名 | 小驼峰(首字母小写,后面单词大写) | `getName()`、`calculateSum()` |
| 变量名 | 小驼峰 | `studentName`、`age` |
| 常量名 | 全大写,单词间用下划线 | `MAX_VALUE`、`PI` |
| 包名 | 全小写,域名倒序 | `com.javastudy.day3` |
---
#### 五、变量与数据类型
**变量三要素:** 数据类型 + 变量名 = 值
**基本数据类型(8种):**
| 类型分类 | 关键字 | 字节数 | 取值范围 | 默认值 | 示例 |
| -------- | ----------- | ------ | -------------------- | -------- | ---------------------- |
| 整型 | byte | 1 | -128 ~ 127 | 0 | `byte b = 10;` |
| 整型 | short | 2 | -32768 ~ 32767 | 0 | `short s = 100;` |
| 整型 | **int** | 4 | -21亿 ~ 21亿 | 0 | `int i = 1000;` |
| 整型 | long | 8 | -2^63 ~ 2^63-1 | 0L | `long l = 100L;` |
| 浮点型 | float | 4 | ±3.4E-38 ~ ±3.4E38 | 0.0f | `float f = 3.14f;` |
| 浮点型 | **double** | 8 | ±1.7E-308 ~ ±1.7E308 | 0.0d | `double d = 3.14159;` |
| 字符型 | char | 2 | 0 ~ 65535 | '\u0000' | `char c = 'A';` |
| 布尔型 | **boolean** | 1位 | true / false | false | `boolean flag = true;` |
> **注意:** `long` 类型数值后加 `L`,`float` 类型数值后加 `f`,否则会报错。
**引用数据类型:**
- 类(Class)、接口(Interface)、数组(Array)、枚举(Enum)
- 默认值为 `null`
- 示例:`String str = "Hello";`(String是类)
**基本 vs 引用:**
| 区别 | 基本类型 | 引用类型 |
| -------- | --------- | -------------- |
| 存储内容 | 值本身 | 对象的内存地址 |
| 内存位置 | 栈内存 | 堆内存(对象) |
| 默认值 | 0/false等 | null |
---
#### 六、类型转换
**自动类型转换(隐式):** 小范围 → 大范围(自动完成)
```java
int a = 100;
long b = a; // int自动转long
double c = b; // long自动转double
```
转换顺序:`byte → short → int → long → float → double`
**强制类型转换(显式):** 大范围 → 小范围(可能丢失精度)
```java
double pi = 3.14159;
int intPi = (int) pi; // intPi = 3,丢失小数
int num = 130;
byte b = (byte) num; // 溢出,b = -126(循环取模)
```
---
#### 七、运算符
| 类别 | 运算符 | 示例 | 说明 |
| ---------- | --------------------------- | --------------- | ---------------------------- |
| 算术运算符 | `+` `-` `*` `/` `%` | `10 % 3 = 1` | `/` 整数除法得整数,`%` 取余 |
| 自增自减 | `++` `--` | `a++` `++a` | 前缀先变后用,后缀先用后变 |
| 赋值运算符 | `=` `+=` `-=` `*=` `/=` | `a += 5` | 等价于 `a = a + 5` |
| 比较运算符 | `==` `!=` `>` `<` `>=` `<=` | `a > b` | 结果为boolean |
| 逻辑运算符 | `&&` `||` `!` | `a>0 && a<10` | 短路与、短路或、非 |
| 三元运算符 | `? :` | `a > b ? a : b` | 取两者中较大值 |
**注意:** `==` 是比较运算符,`=` 是赋值运算符,不要混淆。
---
#### 八、流程控制
**1. 顺序结构:** 代码从上往下依次执行
**2. 分支结构:**
**if-else:**
```java
if (条件1) {
// 条件1成立执行
} else if (条件2) {
// 条件2成立执行
} else {
// 都不成立执行
}
```
**switch-case:**
```java
switch (表达式) {
case 值1:
// 执行代码
break; // 跳出switch
case 值2:
// 执行代码
break;
default:
// 所有case都不匹配时执行
}
```
> JDK14后支持箭头语法:`case 1 -> System.out.println("1");`
**3. 循环结构:**
**for循环(已知次数):**
```java
for (初始化; 条件; 迭代) {
// 循环体
}
// 示例:打印1-10
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
```
**while循环(未知次数):**
```java
while (条件) {
// 条件成立时循环
}
```
**do-while循环(至少执行一次):**
```java
do {
// 至少执行一次
} while (条件);
```
**4. 控制语句:**
- `break`:跳出当前循环
- `continue`:跳过本次循环,继续下一次
---
#### 九、数组
**数组特点:**
- 存储**相同类型**数据的集合
- 长度**固定**,创建后不可变
- 索引从 **0** 开始
**声明与初始化:**
```java
// 声明
int[] arr; // 推荐写法
int arr2[]; // C语言风格,不推荐
// 静态初始化(指定值)
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = new int[]{1, 2, 3};
// 动态初始化(指定长度)
int[] arr3 = new int[5]; // 元素默认0
String[] strs = new String[3]; // 元素默认null
```
**数组操作:**
```java
int[] arr = {10, 20, 30};
System.out.println(arr[0]); // 访问第一个元素:10
arr[1] = 25; // 修改第二个元素
System.out.println(arr.length); // 获取长度:3
// 遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 增强for循环(JDK5+)
for (int num : arr) {
System.out.println(num);
}
```
**常见操作:**
| 操作 | 代码 |
| -------- | --------------------------------------------------------- |
| 求最大值 | `int max = arr[0]; for(int num:arr) if(num>max) max=num;` |
| 求和 | `int sum = 0; for(int num:arr) sum += num;` |
| 查找元素 | 遍历比较,返回索引或-1 |
---
#### 十、方法
**方法定义:**
```java
修饰符 返回值类型 方法名(参数列表) {
// 方法体
return 返回值;
}
```
**示例:**
```java
// 无参无返回值
public void sayHello() {
System.out.println("Hello");
}
// 有参有返回值
public int add(int a, int b) {
return a + b;
}
// 调用
int result = add(3, 5); // result = 8
```
**方法重载(Overload):**
- 同一个类中,方法名相同,**参数列表不同**(个数、类型、顺序)
- 与返回值类型无关
```java
public int add(int a, int b) { return a+b; }
public int add(int a, int b, int c) { return a+b+c; }
public double add(double a, double b) { return a+b; }
```
---
# **股票**
## AI雷达
### 一、功能
AI雷达是夺宝奇兵工具中的**动态监控与预警模块**AI雷达侧重于**实时扫描市场异动**,发现潜在的交易机会或风险信号。
---
### 二、天地双轨
天地双轨是AI雷达的核心模型,通过在K线图上叠加**天轨**和**地轨**两条轨道线,判断股价的支撑与压力位置。
---
### 三、买入信号条件
当以下三个条件**同时满足**时,AI雷达会发出关注信号:
| 条件 | 股票术语解释 | 市场含义 |
| ------------------------ | ---------------- | ---------------------------------------- |
| 下跌阴线比前阴线数量增加 | 连续下跌阴线增多 | 空头力量衰竭前的最后释放,恐慌盘出现 |
| 最低价比前阴线最低价低 | 股价创短期新低 | 破位挖坑动作,清洗不坚定散户 |
| 地轨线朝上或天地轨走平 | 支撑位不再下移 | **关键信号**:底背离雏形,下跌可能是假摔 |
---
### 四、两大实战战法
| 战法名称 | 含义 | 操作时机 |
| ------------ | ------------------------------------------------------------ | ------------------------------------ |
| **金刚一击** | 满足上述条件后,出现一根放量阳线,一举吃掉前面多根阴线的跌幅 | 阳线收盘或次日确认时介入(右侧追击) |
| **跨越空间** | 股价成功站稳在天轨之上,由弱转强 | 趋势确认买点,往往是主升浪启动点 |
###

409
陈春晓的学习笔记/陈春晓4.4学习笔记.md

@ -0,0 +1,409 @@
# 技术
# Redis入门
## 概述
>**Redis是什么?**
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI [C语言](https://baike.baidu.com/item/C语言/105958?fromModule=lemma_inlink)编写、支持网络、可基于内存亦可持久化的日志型、Key-Value[数据库](https://baike.baidu.com/item/数据库/103728?fromModule=lemma_inlink),并提供多种语言的API。
![QQ_1775274090376](C:\Users\Mayn\AppData\Local\Temp\QQ_1775274090376.png)
免费和开源!结构化数据库!
区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
>Redis能干什么?
1、内存存储、持久化、内存中是断电即失、所以持久化很重要(AOF\RDB )
2、效率高、高速缓存
3、发布订阅系统
4、......
> 特性
1、多样数据类型
2、持久化
3、集群
4、事务
5、......
>与其他数据库对比
| 特性 | Redis | MySQL | MongoDB |
| :------- | :----------- | :--------- | :--------- |
| 数据存储 | 内存 | 磁盘 | 磁盘 |
| 读写速度 | 极快 | 较慢 | 中等 |
| 数据结构 | 5+种 | 二维表 | 文档型 |
| 典型用途 | 缓存、计数器 | 持久化存储 | 日志、文档 |
## 基础知识
redis默认16个数据库。
默认使用第0个(使用select切换)。
```
127.0.0.1:6379> select 3
OK
```
数据库大小:dbsize
```
127.0.0.1:6379[3]> dbsize
(integer) 0
```
查看所有key
```
127.0.0.1:6379[3]> keys *
(empty array)
```
清空
```
127.0.0.1:6379[3]> flushdb//清空当前数据库
OK
flushall//清空全部数据库
```
>Redis是单线程的!!
Redis是将所有数据全部存放在内存中的,所以说使用单线程操作效率就是最高的。
## Redis数据类型
### Redis-Key
#### 代码练习
```
127.0.0.1:6379[3]> set name =chenchunxiao
OK
127.0.0.1:6379[3]> keys *
1) "name"
127.0.0.1:6379[3]> set age 21
OK
127.0.0.1:6379[3]> keys *
1) "name"
2) "age"
127.0.0.1:6379[3]> exists name
(integer) 1
127.0.0.1:6379[3]> move name 1
(integer) 1
127.0.0.1:6379[3]> keys *
1) "age"
127.0.0.1:6379[3]> set name xiaobao
OK
127.0.0.1:6379[3]> keys *
1) "name"
2) "age"
127.0.0.1:6379[3]> get name
"xiaobao"
127.0.0.1:6379[3]> expire name 10//设置过期时间
(integer) 1
127.0.0.1:6379[3]> ttl name//查看剩余时间
(integer) 0
127.0.0.1:6379[3]> get name
(nil)
127.0.0.1:6379[3]>type name//查看类型
```
### 数据类型
#### 1. String(字符串)
**特点:** 最基本类型,最大512MB
| 命令 | 说明 | 示例 |
| :------- | :------------------------------------------- | :----------------------------------------------------------- |
| SET | 设置值 | `SET name "zhangsan"` |
| MSET | 同时设置多个值 | MSET k1 v1 k2 v2 k3 v3 |
| GET | 获取值 | `GET name` |
| DEL | 删除键 | `DEL name` |
| SETNX | 不存在时设置 | `SETNX name "lisi"` |
| INCR | 自增1 | `INCR age` |
| INCRBY | 增加指定值 | `INCRBY age 10` |
| EXPIRE | 设置过期时间(秒) | `EXPIRE name 60` |
| TTL | 查看剩余过期时间 | `TTL name` |
| EXISTS | 判断某个key是否存在 | EXISTS key |
| APPEND | 追加字符串,如果当前key不存在,就相当于setkey | APPEND key1 "hell |
| GETRANGE | 截取字符串 | GETRANGE key1 0 3(截取字符串[0,3]) GETRANGE key1 0 -1(获取全部字符串 ) |
##### #对象
**代码练习**
```
127.0.0.1:6379[3]> set user:1 {name:xiaobao,age:2}
OK
127.0.0.1:6379[3]> mset user:1:name xiaobao user:1:age 2
OK
127.0.0.1:6379[3]> mget user:1:name user:1:age
1) "xiaobao"
2) "2"
```
##### #先get然后再set
**代码练习**
```
127.0.0.1:6379[3]> getset db redis
(nil)
127.0.0.1:6379[3]> get db
"redis"
127.0.0.1:6379[3]> getset db mongodb
"redis"
127.0.0.1:6379[3]> get db
"mongodb"
```
**应用场景:** 缓存、计数器、分布式锁
#### 2. Hash(哈希)
**特点:** 键值对集合,适合存储对象
| 命令 | 说明 | 示例 |
| :------ | :----------- | :------------------------------- |
| HSET | 设置字段 | `HSET user:1 name "张三" age 20` |
| HGET | 获取字段 | `HGET user:1 name` |
| HGETALL | 获取所有字段 | `HGETALL user:1` |
| HDEL | 删除字段 | `HDEL user:1 age` |
| HINCRBY | 字段自增 | `HINCRBY user:1 age 1` |
**应用场景:** 存储对象(用户信息、商品信息)、购物车
#### 3. List(列表)
![QQ_1775293393918](C:\Users\Mayn\AppData\Local\Temp\QQ_1775293393918.png)
**特点:** 有序可重复,双向链表
| 命令 | 说明 | 示例 |
| :----- | :----------- | :------------------- |
| LPUSH | 左侧插入 | `LPUSH list "a" "b"` |
| RPUSH | 右侧插入 | `RPUSH list "c" "d"` |
| LPOP | 左侧弹出 | `LPOP list` |
| RPOP | 右侧弹出 | `RPOP list` |
| LRANGE | 获取指定范围 | `LRANGE list 0 -1` |
| LLEN | 获取长度 | `LLEN list` |
**代码练习**
```
127.0.0.1:6379[3]> LPUSH LIST ONE
(integer) 1
127.0.0.1:6379[3]> LPUSH LIST TWO
(integer) 2
127.0.0.1:6379[3]> LPUSH LIST THREE
(integer) 3
127.0.0.1:6379[3]> lrange list 0 -1
(empty array)
127.0.0.1:6379[3]> LRANGE LIST 0 -1
1) "THREE"
2) "TWO"
3) "ONE"
127.0.0.1:6379[3]> RPUSH LIST RIGHT
(integer) 4
127.0.0.1:6379[3]> LRANGE LIST 0 -1
1) "THREE"
2) "TWO"
3) "ONE"
4) "RIGHT"
```
**应用场景:** 消息队列、最新消息列表、历史记录
#### 4. Set(集合)
**特点:** 无序不可重复,支持集合运算
| 命令 | 说明 | 示例 |
| :-------- | :----------- | :-------------------------- |
| SADD | 添加元素 | `SADD tags "java" "python"` |
| SMEMBERS | 获取所有元素 | `SMEMBERS tags` |
| SISMEMBER | 判断是否存在 | `SISMEMBER tags "java"` |
| SREM | 删除元素 | `SREM tags "python"` |
| SINTER | 交集 | `SINTER set1 set2` |
| SUNION | 并集 | `SUNION set1 set2` |
| SDIFF | 差集 | `SDIFF set1 set2` |
**应用场景:** 标签系统、共同好友、抽奖
#### 5. ZSet(有序集合)
**特点:** 每个元素关联分数(score),按分数排序
| 命令 | 说明 | 示例 |
| :-------- | :------- | :------------------------------- |
| ZADD | 添加元素 | `ZADD rank 100 "张三" 90 "李四"` |
| ZRANGE | 升序获取 | `ZRANGE rank 0 -1` |
| ZREVRANGE | 降序获取 | `ZREVRANGE rank 0 -1` |
| ZSCORE | 获取分数 | `ZSCORE rank "张三"` |
| ZINCRBY | 增加分数 | `ZINCRBY rank 10 "张三"` |
| ZRANK | 获取排名 | `ZRANK rank "张三"` |
**应用场景:** 排行榜、延迟队列
## 持久化
Redis提供两种持久化方式:
| 方式 | RDB | AOF |
| :--------- | :------------------- | :-------------- |
| 原理 | 定时生成内存快照 | 记录每条写命令 |
| 文件 | dump.rdb | appendonly.aof |
| 恢复速度 | 快 | 慢 |
| 数据安全性 | 可能丢失最后一次快照 | 最多丢失1秒数据 |
| 默认 | 开启 | 关闭 |
## 事务
#### 1. 事务特点
- Redis事务是**一次性、顺序性、排他性**的命令队列
- **不支持回滚**:某条命令失败,其他命令仍会执行
- 通过 `MULTI`、`EXEC`、`DISCARD`、`WATCH` 实现
#### 2. 事务命令
| 命令 | 说明 |
| :---------- | :------------------------------------------- |
| `MULTI` | 开启事务 |
| `EXEC` | 执行事务中的所有命令 |
| `DISCARD` | 取消事务 |
| `WATCH key` | 监视一个或多个键,事务执行前被修改则事务中断 |
| `UNWATCH` | 取消监视 |
# 股票知识
## AI金牛
### 一、功能模块
| 功能名称 | 定位 |
| :----------- | :----------------------- |
| **金牛起爆** | 捕捉即将启动主升浪的个股 |
| **进攻K线** | 识别强势突破的K线形态 |
| **小牛** | 筛选处于上升初期的个股 |
| **度牛尺** | 量化评估个股强弱程度 |
| **疯牛出栏** | 捕捉强势加速上涨的个股 |
------
### 二、各功能解读
#### 1. 金牛起爆
**含义:** 找那些**可能要涨**的股票
**技术特征:**
- 长期横盘或小幅上涨后
- 成交量突然放大
- 出现突破性阳线
**操作参考:** 信号出现后关注,配合放量确认可考虑跟进
------
#### 2. 进攻K线
**含义:** 找那些**K线长得像要进攻**的股票(比如大阳线)
**常见形态:**
| 形态 | 特征 | 含义 |
| :------ | :--------------- | :----------- |
| 大阳线 | 涨幅>5%,实体长 | 多方强势 |
| 突破K线 | 突破前期高点 | 打开上涨空间 |
| 反包K线 | 阳线包住前日阴线 | 反转信号 |
------
#### 3. 小牛
**含义:** 找那些**刚有点起色**的股票,涨得还不高
**特征:**
- 刚从底部启动
- 涨幅不大(通常<30%
- 均线开始多头排列
**操作参考:** 适合低位布局,风险相对较小
------
#### 4. 度牛尺
**含义:** 量化评估个股“牛气”程度的指标
**可能的评估维度:**
| 维度 | 权重 |
| :------------- | :--- |
| 涨幅排名 | 30% |
| 成交量放大倍数 | 25% |
| 均线排列 | 20% |
| 相对强度 | 15% |
| 换手率 | 10% |
**使用方式:** 分数越高,代表个股越强势
------
#### 5. 疯牛出栏
**含义:** 找那些**已经涨疯了**的股票,追高风险大
**特征:**
- 连续大阳线或涨停
- 成交量急剧放大
- 脱离原有轨道
**风险提示:** 涨幅已大,追高风险较高,适合短线激进策略
------
### 三、功能使用流程
text
```
第一步:金牛起爆 / 小牛 → 初筛关注标的
第二步:度牛尺 → 量化评分,优中选优
第三步:进攻K线 → 确认买入时机
第四步:疯牛出栏 → 捕捉加速段(高风险)
```
------
### 四、风险等级对比
| 功能 | 风险等级 | 适合人群 |
| :------- | :------- | :------- |
| 小牛 | 低 | 稳健型 |
| 金牛起爆 | 中 | 平衡型 |
| 进攻K线 | 中 | 波段操作 |
| 疯牛出栏 | 高 | 激进短线 |

401
陈春晓的学习笔记/陈春晓4.7学习笔记.md

@ -0,0 +1,401 @@
# 技术
## MySQL
---
### 一、MySQL概述
| 项目 | 内容 |
| -------- | ------------------------------------ |
| 定义 | 关系型数据库管理系统(RDBMS) |
| 特点 | 开源、免费、性能好、使用广泛 |
| 存储结构 | 数据库 → 表 → 行(记录)→ 列(字段) |
**与Redis对比:**
| 对比 | MySQL | Redis |
| ---------- | ------------ | -------------- |
| 存储位置 | 磁盘 | 内存 |
| 速度 | 较慢 | 极快 |
| 数据持久性 | 永久保存 | 可能丢失 |
| 用途 | 主要数据存储 | 缓存、临时数据 |
---
### 二、安装与连接
#### 1. 启动MySQL服务
```cmd
# Windows 启动服务
net start mysql
# 关闭服务
net stop mysql
```
#### 2. 连接MySQL
```cmd
mysql -u root -p
# 输入密码后进入
```
#### 3. 常用命令
```sql
SHOW DATABASES; -- 查看所有数据库
USE 数据库名; -- 切换数据库
SHOW TABLES; -- 查看当前库所有表
DESC 表名; -- 查看表结构
SELECT DATABASE(); -- 查看当前在哪个库
```
---
### 三、数据库操作(DDL)
```sql
-- 创建数据库
CREATE DATABASE mydb;
-- 删除数据库
DROP DATABASE mydb;
-- 创建数据库(指定字符集)
CREATE DATABASE mydb DEFAULT CHARACTER SET utf8mb4;
```
---
### 四、表操作(DDL)
#### 1. 创建表
```sql
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT,
email VARCHAR(100),
create_time DATETIME
);
```
#### 2. 数据类型
| 类型分类 | 常用类型 | 说明 |
| -------- | ------------- | -------------------- |
| 整数 | INT | 整数 |
| 小数 | DECIMAL(10,2) | 10位总长,2位小数 |
| 字符串 | VARCHAR(n) | 可变长度,n最大65535 |
| 字符串 | TEXT | 长文本 |
| 日期时间 | DATETIME | YYYY-MM-DD HH:MM:SS |
| 日期 | DATE | YYYY-MM-DD |
#### 3. 修改表
```sql
-- 添加列
ALTER TABLE user ADD phone VARCHAR(20);
-- 修改列类型
ALTER TABLE user MODIFY age SMALLINT;
-- 修改列名
ALTER TABLE user CHANGE name username VARCHAR(50);
-- 删除列
ALTER TABLE user DROP phone;
-- 删除表
DROP TABLE user;
```
---
### 五、增删改(DML)
```sql
-- 插入数据
INSERT INTO user (name, age, email) VALUES ('张三', 25, 'zhang@test.com');
-- 批量插入
INSERT INTO user (name, age) VALUES ('李四', 30), ('王五', 28);
-- 修改数据
UPDATE user SET age = 26 WHERE name = '张三';
-- 删除数据
DELETE FROM user WHERE id = 1;
-- 删除所有数据(重置表)
TRUNCATE TABLE user;
```
**DELETE vs TRUNCATE:**
| 对比 | DELETE | TRUNCATE |
| ---------- | ------ | -------- |
| 能否回滚 | 可以 | 不可以 |
| 速度 | 慢 | 快 |
| 重置自增ID | 否 | 是 |
---
### 六、查询(DQL)- 重点
#### 1. 基础查询
```sql
-- 查询所有列
SELECT * FROM user;
-- 查询指定列
SELECT name, age FROM user;
-- 去重
SELECT DISTINCT age FROM user;
-- 起别名
SELECT name AS 姓名, age AS 年龄 FROM user;
```
#### 2. 条件查询(WHERE)
```sql
-- 比较运算
SELECT * FROM user WHERE age > 20;
SELECT * FROM user WHERE age >= 18 AND age <= 60;
SELECT * FROM user WHERE age BETWEEN 18 AND 60;
-- 模糊查询
SELECT * FROM user WHERE name LIKE '张%'; -- 以张开头
SELECT * FROM user WHERE name LIKE '%三%'; -- 包含三
-- 范围查询
SELECT * FROM user WHERE id IN (1, 3, 5);
-- 空值判断
SELECT * FROM user WHERE email IS NULL;
SELECT * FROM user WHERE email IS NOT NULL;
```
#### 3. 排序(ORDER BY)
```sql
-- 升序(默认)
SELECT * FROM user ORDER BY age;
-- 降序
SELECT * FROM user ORDER BY age DESC;
-- 多列排序
SELECT * FROM user ORDER BY age DESC, id ASC;
```
#### 4. 分页(LIMIT)
```sql
-- 取前5条
SELECT * FROM user LIMIT 5;
-- 从第3条开始取5条(跳过2条)
SELECT * FROM user LIMIT 2, 5;
```
#### 5. 聚合函数
```sql
SELECT
COUNT(*) AS 总条数,
AVG(age) AS 平均年龄,
SUM(age) AS 年龄总和,
MAX(age) AS 最大年龄,
MIN(age) AS 最小年龄
FROM user;
```
#### 6. 分组(GROUP BY)
```sql
-- 按年龄分组,统计每组人数
SELECT age, COUNT(*) FROM user GROUP BY age;
-- 分组后筛选(HAVING)
SELECT age, COUNT(*) FROM user GROUP BY age HAVING COUNT(*) > 1;
```
**WHERE vs HAVING:**
| 对比 | WHERE | HAVING |
| -------------- | ------ | ------ |
| 筛选时机 | 分组前 | 分组后 |
| 能否用聚合函数 | 不能 | 能 |
---
### 七、查询执行顺序
```
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
```
---
### 八、今日练习
```sql
-- 1. 创建学生表
CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
gender VARCHAR(2),
score INT,
class VARCHAR(20)
);
-- 2. 插入数据
INSERT INTO student VALUES
(NULL, '张三', '男', 85, '一班'),
(NULL, '李四', '女', 92, '一班'),
(NULL, '王五', '男', 78, '二班'),
(NULL, '赵六', '女', 88, '二班');
-- 3. 查询一班所有学生
SELECT * FROM student WHERE class = '一班';
-- 4. 查询成绩大于80的学生
SELECT * FROM student WHERE score > 80;
-- 5. 查询每个班的平均分
SELECT class, AVG(score) FROM student GROUP BY class;
-- 6. 查询成绩最高的学生
SELECT * FROM student ORDER BY score DESC LIMIT 1;
```
![QQ_1775554515673](C:\Users\Mayn\AppData\Local\Temp\QQ_1775554515673.png)
---
### 九、今日小结
| 知识点 | 掌握要求 |
| ------------- | ----------------------- |
| 数据库/表操作 | CREATE、DROP、ALTER |
| 增删改 | INSERT、UPDATE、DELETE |
| 基础查询 | SELECT、WHERE、ORDER BY |
| 聚合分组 | COUNT、AVG、GROUP BY |
| 分页 | LIMIT |
---
**明日计划:** 多表查询(JOIN)、索引、事务、JDBC连接MySQL
# 股票知识
## 超级云脑
---
### 一、投资决策的三大难题
在股票投资中,我们经常面临三个核心问题:
| 问题编号 | 核心问题 | 具体描述 |
| -------- | -------------- | -------------------------------------- |
| 问题一 | 能持有吗? | 股票买完后,不知道能不能继续持有 |
| 问题二 | 有风险吗? | 股票在上涨过程中,不知道风险有多大 |
| 问题三 | 主力什么态度? | 股票遇到压力时,不知道主力是在买还是卖 |
**解决方案:** 利用人工智能(AI)分析金融大数据,用AI解决决策难题。
---
### 二、超级云脑是什么?
**定义:** 超级云脑是将人工智能与金融股票领域融合的工具,能够快速处理大量金融数据,为投资者提供行情分析和预判。
**三大优势:**
| 优势 | 说明 |
| ---------- | -------------------------------------- |
| 处理速度快 | 瞬间处理大量金融数据 |
| 能赚钱 | 通过大数据分析帮助投资者获利 |
| 天然匹配 | 金融市场本身就是大数据市场,AI正好适合 |
---
### 三、核心功能一:六色罗盘(判断安全与风险)
六色罗盘是一个从**绿色(安全)到红色(风险)** 的图示工具。
| 区域 | 含义 | 操作建议 |
| -------- | ------ | ------------------ |
| 绿色区域 | 安全区 | 相对安全,可持有 |
| 红色区域 | 风险区 | 注意风险,考虑减仓 |
**罗盘细分:**
- 强撑强压区
- 弱撑强压区
- 强撑中压区
- 弱撑中压区
- 强撑弱压区
- 弱撑弱压区
> **使用方法:** 看指针指向哪个区域,绿色安全,红色危险。
---
### 四、核心功能二:技术指标分析(判断压力与支撑)
技术指标分析告诉我们以下关键信息:
| 指标 | 含义 | 示例数据 |
| ---------------- | ---------------------------- | ------------------ |
| 中长期筹码成本价 | 大多数持股者的平均成本 | 1.648 |
| 短期资金成本价 | 近期买入资金的平均成本 | 1.589 |
| 压力位 | 股价涨到这个位置可能遇到阻力 | 3.084 |
| 支撑位 | 股价跌到这个位置可能获得支撑 | 0.505 |
| 趋势 | 股价的长期运行方向 | 中长期处于上升趋势 |
**关键判断:**
- 压力强度大 → 需要放巨量才能突破
- 获利筹码增加 + 获利了结意愿不明显 → 筹码稳定性好
---
### 五、核心功能三:资金流向(判断主力态度)
| 观察点 | 判断依据 | 结论 |
| ---------------- | ---------------- | ---------- |
| 庄家在买还是卖? | 当前多头资金占优 | 主力在买 |
| 资金是否持续? | 多头资金持续流入 | 资金在流进 |
> **结论:** 当前市场多头资金占优,且持续流入,整体资金在流进。
---
### 六、超级云脑四大分析维度
| 维度 | 要回答的问题 | 对应功能 |
| -------- | ---------------------- | ------------ |
| 安全性 | 我的股票安全吗? | 六色罗盘 |
| 压力点 | 涨到什么价位要注意? | 技术指标分析 |
| 主力态度 | 主力在买还是卖? | 资金流向分析 |
| 资金动向 | 市场资金流入还是流出? | 资金流向分析 |
---
### 七、今日小结
| 知识点 | 掌握要求 |
| ------------- | ---------------------------------------- |
| 三大难题 | 能说出买完后能否持有、有无风险、主力态度 |
| 超级云脑 | 能说出它是AI+金融的分析工具 |
| 六色罗盘 | 绿色安全、红色风险 |
| 压力位/支撑位 | 压力位是上涨阻力,支撑位是下跌支撑 |
| 资金流向 | 多头占优+持续流入=看好 |
###

778
陈春晓的学习笔记/陈春晓4.8学习笔记.md

@ -0,0 +1,778 @@
# 技术
## MySQL
---
### 一、多表查询
#### 1. 为什么要多表查询?
实际开发中,数据会分散在多张表中(为了减少冗余)。例如:
- 用户表:存用户基本信息
- 订单表:存订单信息
- 查询“张三的订单”就需要同时查两张表
#### 2. 连接查询分类
| 连接类型 | 关键字 | 说明 |
| -------- | ---------- | ------------------------- |
| 内连接 | INNER JOIN | 只返回匹配的记录 |
| 左外连接 | LEFT JOIN | 左表全部 + 右表匹配的 |
| 右外连接 | RIGHT JOIN | 右表全部 + 左表匹配的 |
| 全外连接 | FULL JOIN | 两张表全部(MySQL不支持) |
| 交叉连接 | CROSS JOIN | 笛卡尔积(慎用) |
#### 3. 内连接(INNER JOIN)
```sql
-- 标准写法
SELECT u.name, o.order_no, o.amount
FROM user u
INNER JOIN orders o ON u.id = o.user_id;
-- 隐式写法(不推荐,可读性差)
SELECT u.name, o.order_no, o.amount
FROM user u, orders o
WHERE u.id = o.user_id;
```
#### 4. 左外连接(LEFT JOIN)
```sql
-- 查询所有用户及其订单(没有订单的用户也会显示)
SELECT u.name, o.order_no, o.amount
FROM user u
LEFT JOIN orders o ON u.id = o.user_id;
-- 结果示例:
-- 张三 | 001 | 100
-- 张三 | 002 | 200
-- 李四 | NULL | NULL (李四没有订单)
```
#### 5. 多表连接(三张以上)
```sql
-- 查询订单详情:用户 + 订单 + 商品
SELECT u.name, o.order_no, p.product_name, od.quantity
FROM user u
INNER JOIN orders o ON u.id = o.user_id
INNER JOIN order_detail od ON o.id = od.order_id
INNER JOIN product p ON od.product_id = p.id;
```
#### 6. 自连接
一张表和自己连接,用于存储层级关系(如员工-上级)。
```sql
-- 员工表:id, name, manager_id
SELECT e.name AS 员工, m.name AS 上级
FROM employee e
LEFT JOIN employee m ON e.manager_id = m.id;
```
#### 7. 子查询
```sql
-- WHERE子查询:查询成绩高于平均分的学生
SELECT name, score
FROM student
WHERE score > (SELECT AVG(score) FROM student);
-- FROM子查询:将查询结果当作临时表
SELECT t.class, AVG(t.score)
FROM (SELECT * FROM student WHERE score > 60) t
GROUP BY t.class;
-- EXISTS子查询:存在性判断
SELECT * FROM user u
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);
```
#### 8. UNION合并查询
```sql
-- 合并两个查询结果(去重)
SELECT name FROM user
UNION
SELECT name FROM vip_user;
-- UNION ALL(不去重,性能更好)
SELECT name FROM user
UNION ALL
SELECT name FROM vip_user;
```
---
### 二、索引
#### 1. 索引的底层数据结构
MySQL默认使用**B+树**作为索引结构:
| 数据结构 | 特点 |
| -------- | ------------------------------------------ |
| B+树 | 叶子节点存储数据,非叶子节点存指针,矮胖型 |
| 哈希表 | 等值查询快,范围查询慢 |
| 红黑树 | 高度太高,磁盘IO多 |
**B+树优点:**
- 高度低(3-4层可存千万级数据)
- 叶子节点有序链表,支持范围查询
- 磁盘IO次数少
#### 2. 索引分类
| 分类 | 说明 | 特点 |
| -------- | ------------ | -------------------------- |
| 主键索引 | PRIMARY KEY | 唯一、非空、一张表只有一个 |
| 唯一索引 | UNIQUE | 列值必须唯一,允许NULL |
| 普通索引 | INDEX | 最基本的索引,无限制 |
| 复合索引 | INDEX(a,b,c) | 多列组合,遵循最左前缀 |
| 全文索引 | FULLTEXT | 用于文本搜索(MyISAM) |
| 空间索引 | SPATIAL | 用于地理数据 |
#### 3. 索引操作
```sql
-- 创建索引
CREATE INDEX idx_name ON user(name);
CREATE UNIQUE INDEX idx_email ON user(email);
CREATE INDEX idx_name_age ON user(name, age); -- 复合索引
-- 建表时指定
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20),
email VARCHAR(50) UNIQUE,
INDEX idx_name (name)
);
-- 删除索引
DROP INDEX idx_name ON user;
-- 查看索引
SHOW INDEX FROM user;
-- 强制使用索引
SELECT * FROM user FORCE INDEX (idx_name) WHERE name = '张三';
```
#### 4. 复合索引最左前缀原则
```sql
-- 创建复合索引 (a, b, c)
CREATE INDEX idx_abc ON table(a, b, c);
-- 能用到索引的查询
WHERE a = 1
WHERE a = 1 AND b = 2
WHERE a = 1 AND b = 2 AND c = 3
-- 用不到索引的查询
WHERE b = 2 -- 没带最左边a
WHERE a = 1 AND c = 3 -- 跳过了b,只有a能用
```
#### 5. 索引失效场景
| 场景 | 示例 | 原因 |
| ------------ | ------------------------------ | ----------------------- |
| 函数操作 | `WHERE YEAR(create_time)=2024` | 对列用了函数 |
| 隐式类型转换 | `WHERE phone=13800138000` | phone是字符串,没用引号 |
| 模糊匹配开头 | `WHERE name LIKE '%三'` | 通配符在开头 |
| OR条件 | `WHERE a=1 OR b=2` | 两边都要有索引 |
| 不等号 | `WHERE age != 18` | 不等于不走索引 |
| IS NULL | 部分情况 | 取决于NULL值比例 |
#### 6. 索引使用原则
| 原则 | 说明 |
| -------- | --------------------------------------- |
| 区分度高 | 列值越唯一越好(如手机号 > 性别) |
| 经常查询 | 建在WHERE、ORDER BY、GROUP BY、JOIN列上 |
| 不宜过多 | 单表索引不超过5-6个 |
| 小表不用 | 数据量小,全表扫描更快 |
| 避免重复 | 同样功能的索引只建一个 |
#### 7. 查看SQL执行计划
```sql
EXPLAIN SELECT * FROM user WHERE name = '张三';
```
**关键字段:**
| 字段 | 含义 | 好坏 |
| ------------- | ------------ | --------------------------------- |
| type | 连接类型 | const > ref > range > index > ALL |
| possible_keys | 可能用的索引 | - |
| key | 实际用的索引 | 看是否用了想要的 |
| rows | 扫描行数 | 越少越好 |
| Extra | 额外信息 | Using index(覆盖索引)最好 |
---
### 三、事务
#### 1. ACID详解
| 特性 | 含义 | 例子 |
| ------ | -------- | ---------------------------------- |
| 原子性 | 不可分割 | 转账:扣钱和加钱必须同时成功或失败 |
| 一致性 | 数据正确 | 转账前后总金额不变 |
| 隔离性 | 互不干扰 | 两个事务同时执行,互不影响 |
| 持久性 | 永久保存 | 提交后数据不丢失 |
#### 2. 事务并发问题
| 问题 | 说明 | 例子 |
| ---------- | ------------------------ | --------------------------- |
| 脏读 | 读到未提交的数据 | A修改未提交,B读到,A回滚 |
| 不可重复读 | 同一事务两次读取结果不同 | A两次读,中间B修改了 |
| 幻读 | 读到新增的数据 | A查询,B插入,A再查多了一条 |
#### 3. 隔离级别与问题对应
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
| ---------------- | ---- | ---------- | ----------------- |
| READ UNCOMMITTED | 可能 | 可能 | 可能 |
| READ COMMITTED | 不会 | 可能 | 可能 |
| REPEATABLE READ | 不会 | 不会 | 可能(MySQL解决) |
| SERIALIZABLE | 不会 | 不会 | 不会 |
> MySQL默认 REPEATABLE READ,通过MVCC解决了幻读问题。
#### 4. 事务操作
```sql
-- 开启事务
START TRANSACTION;
-- 或
BEGIN;
-- 执行SQL
UPDATE account SET money = money - 100 WHERE id = 1;
UPDATE account SET money = money + 100 WHERE id = 2;
-- 查看当前事务隔离级别
SELECT @@transaction_isolation;
-- 设置保存点(回滚到指定位置)
SAVEPOINT sp1;
ROLLBACK TO sp1;
-- 提交
COMMIT;
-- 回滚
ROLLBACK;
```
---
### 四、视图
#### 1. 什么是视图?
视图是**虚拟表**,不存储数据,查询时动态生成。
#### 2. 视图操作
```sql
-- 创建视图
CREATE VIEW user_order_view AS
SELECT u.name, o.order_no, o.amount
FROM user u
LEFT JOIN orders o ON u.id = o.user_id;
-- 使用视图(和表一样)
SELECT * FROM user_order_view WHERE amount > 100;
-- 查看视图
SHOW FULL TABLES WHERE Table_type = 'VIEW';
-- 删除视图
DROP VIEW user_order_view;
```
#### 3. 视图的优缺点
| 优点 | 缺点 |
| ---------------------- | ------------ |
| 简化复杂查询 | 性能可能下降 |
| 数据安全(隐藏敏感列) | 增删改有限制 |
| 逻辑封装 | 维护成本 |
---
### 五、存储过程
#### 1. 什么是存储过程?
预编译的SQL代码块,类似Java中的方法。
```sql
-- 创建存储过程
DELIMITER //
CREATE PROCEDURE get_user_by_id(IN uid INT)
BEGIN
SELECT * FROM user WHERE id = uid;
END //
DELIMITER ;
-- 调用
CALL get_user_by_id(1);
-- 删除
DROP PROCEDURE get_user_by_id;
```
#### 2. 带输出参数的存储过程
```sql
DELIMITER //
CREATE PROCEDURE get_user_count(OUT total INT)
BEGIN
SELECT COUNT(*) INTO total FROM user;
END //
DELIMITER ;
-- 调用
CALL get_user_count(@total);
SELECT @total;
```
#### 3. 存储过程优缺点
| 优点 | 缺点 |
| -------------- | ---------- |
| 减少网络传输 | 调试困难 |
| 预编译,性能好 | 移植性差 |
| 业务逻辑封装 | 维护成本高 |
> 实际开发中,业务逻辑通常放在Java代码中,存储过程用得较少。
---
### 六、触发器
#### 1. 什么是触发器?
在某个表执行INSERT、UPDATE、DELETE时**自动触发**执行的SQL。
```sql
-- 创建触发器:用户删除时,记录日志
DELIMITER //
CREATE TRIGGER user_delete_log
AFTER DELETE ON user
FOR EACH ROW
BEGIN
INSERT INTO user_log(user_id, action, time)
VALUES (OLD.id, 'DELETE', NOW());
END //
DELIMITER ;
-- 查看触发器
SHOW TRIGGERS;
-- 删除触发器
DROP TRIGGER user_delete_log;
```
> 注意:触发器使用要谨慎,会增加数据库压力,调试困难。
---
### 七、JDBC连接MySQL
#### 1. 引入依赖
```xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
```
#### 2. 完整代码示例
```java
import java.sql.*;
public class MySQLDemo {
// 连接参数
private static final String URL = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8";
private static final String USER = "root";
private static final String PASSWORD = "123456";
public static void main(String[] args) {
// 1. 加载驱动(MySQL8可选,但建议保留)
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// 2. try-with-resources自动关闭资源
String sql = "SELECT id, name, age FROM user WHERE age > ?";
try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
PreparedStatement ps = conn.prepareStatement(sql)) {
// 设置参数
ps.setInt(1, 18);
// 执行查询
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println(id + " | " + name + " | " + age);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
#### 3. CRUD完整操作
```java
public class UserDao {
// 增
public void add(User user) {
String sql = "INSERT INTO user(name, age, email) VALUES(?, ?, ?)";
try (Connection conn = DBUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
ps.setString(1, user.getName());
ps.setInt(2, user.getAge());
ps.setString(3, user.getEmail());
int rows = ps.executeUpdate();
if (rows > 0) {
ResultSet rs = ps.getGeneratedKeys();
if (rs.next()) {
user.setId(rs.getInt(1)); // 获取自增ID
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 删
public void delete(int id) {
String sql = "DELETE FROM user WHERE id = ?";
try (Connection conn = DBUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, id);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 改
public void update(User user) {
String sql = "UPDATE user SET name=?, age=?, email=? WHERE id=?";
try (Connection conn = DBUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, user.getName());
ps.setInt(2, user.getAge());
ps.setString(3, user.getEmail());
ps.setInt(4, user.getId());
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 查(单个)
public User getById(int id) {
String sql = "SELECT * FROM user WHERE id = ?";
try (Connection conn = DBUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, id);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
user.setEmail(rs.getString("email"));
return user;
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
// 查(列表)
public List<User> listAll() {
List<User> list = new ArrayList<>();
String sql = "SELECT * FROM user";
try (Connection conn = DBUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
user.setEmail(rs.getString("email"));
list.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
}
```
#### 4. 连接池工具类(Druid)
```java
import com.alibaba.druid.pool.DruidDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class DBUtil {
private static DruidDataSource dataSource;
static {
dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai");
dataSource.setUsername("root");
dataSource.setPassword("123456");
// 连接池配置
dataSource.setInitialSize(5); // 初始连接数
dataSource.setMinIdle(5); // 最小空闲连接
dataSource.setMaxActive(20); // 最大活跃连接
dataSource.setMaxWait(60000); // 最大等待时间(毫秒)
dataSource.setValidationQuery("SELECT 1"); // 心跳检测
dataSource.setTestOnBorrow(true); // 借用时检测
}
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
public static DataSource getDataSource() {
return dataSource;
}
}
```
#### 5. JDBC事务操作
```java
public void transfer(int fromId, int toId, double amount) {
Connection conn = null;
try {
conn = DBUtil.getConnection();
conn.setAutoCommit(false); // 开启事务
// 扣钱
String sql1 = "UPDATE account SET money = money - ? WHERE id = ?";
try (PreparedStatement ps = conn.prepareStatement(sql1)) {
ps.setDouble(1, amount);
ps.setInt(2, fromId);
ps.executeUpdate();
}
// 加钱
String sql2 = "UPDATE account SET money = money + ? WHERE id = ?";
try (PreparedStatement ps = conn.prepareStatement(sql2)) {
ps.setDouble(1, amount);
ps.setInt(2, toId);
ps.executeUpdate();
}
conn.commit(); // 提交
System.out.println("转账成功");
} catch (Exception e) {
try {
if (conn != null) {
conn.rollback(); // 回滚
}
} catch (SQLException ex) {
ex.printStackTrace();
}
e.printStackTrace();
System.out.println("转账失败");
} finally {
try {
if (conn != null) {
conn.setAutoCommit(true); // 恢复自动提交
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
---
### 八、SQL优化技巧
| 优化点 | 错误写法 | 正确写法 |
| -------------- | -------------------------- | -------------------------------- |
| 避免SELECT * | `SELECT * FROM user` | `SELECT id, name FROM user` |
| 用LIMIT | 全表查 | `SELECT * FROM user LIMIT 10` |
| 用EXISTS代替IN | `WHERE id IN (SELECT ...)` | `WHERE EXISTS (SELECT 1...)` |
| 批量插入 | 循环单条INSERT | `INSERT INTO VALUES (1),(2),(3)` |
| 用UNION ALL | `UNION`(去重) | 不需要去重用`UNION ALL` |
| 避免OR | `WHERE a=1 OR b=2` | 用UNION或分开查 |
---
### 九、今日练习
```sql
-- 1. 三表连接查询
SELECT u.name, o.order_no, p.product_name
FROM user u
INNER JOIN orders o ON u.id = o.user_id
INNER JOIN order_item oi ON o.id = oi.order_id
INNER JOIN product p ON oi.product_id = p.id
WHERE u.id = 1;
-- 2. 创建复合索引
CREATE INDEX idx_name_age ON user(name, age);
-- 3. 查看执行计划
EXPLAIN SELECT * FROM user WHERE name = '张三';
-- 4. 事务操作
START TRANSACTION;
UPDATE account SET money = money - 100 WHERE id = 1;
UPDATE account SET money = money + 100 WHERE id = 2;
COMMIT;
-- 5. 创建视图
CREATE VIEW rich_user AS
SELECT * FROM user WHERE money > 10000;
-- 6. 分页查询(每页10条)
SELECT * FROM user ORDER BY id LIMIT 0, 10; -- 第1页
SELECT * FROM user ORDER BY id LIMIT 10, 10; -- 第2页
```
# 股票知识
## 超级云脑
---
### 一、投资决策的三大难题
在股票投资中,我们经常面临三个核心问题:
| 问题编号 | 核心问题 | 具体描述 |
| -------- | -------------- | -------------------------------------- |
| 问题一 | 能持有吗? | 股票买完后,不知道能不能继续持有 |
| 问题二 | 有风险吗? | 股票在上涨过程中,不知道风险有多大 |
| 问题三 | 主力什么态度? | 股票遇到压力时,不知道主力是在买还是卖 |
**解决方案:** 利用人工智能(AI)分析金融大数据,用AI解决决策难题。
---
### 二、超级云脑是什么?
**定义:** 超级云脑是将人工智能与金融股票领域融合的工具,能够快速处理大量金融数据,为投资者提供行情分析和预判。
**三大优势:**
| 优势 | 说明 |
| ---------- | -------------------------------------- |
| 处理速度快 | 瞬间处理大量金融数据 |
| 能赚钱 | 通过大数据分析帮助投资者获利 |
| 天然匹配 | 金融市场本身就是大数据市场,AI正好适合 |
---
### 三、核心功能一:六色罗盘(判断安全与风险)
六色罗盘是一个从**绿色(安全)到红色(风险)** 的图示工具。
| 区域 | 含义 | 操作建议 |
| -------- | ------ | ------------------ |
| 绿色区域 | 安全区 | 相对安全,可持有 |
| 红色区域 | 风险区 | 注意风险,考虑减仓 |
**罗盘细分:**
- 强撑强压区
- 弱撑强压区
- 强撑中压区
- 弱撑中压区
- 强撑弱压区
- 弱撑弱压区
> **使用方法:** 看指针指向哪个区域,绿色安全,红色危险。
---
### 四、核心功能二:技术指标分析(判断压力与支撑)
技术指标分析告诉我们以下关键信息:
| 指标 | 含义 | 示例数据 |
| ---------------- | ---------------------------- | ------------------ |
| 中长期筹码成本价 | 大多数持股者的平均成本 | 1.648 |
| 短期资金成本价 | 近期买入资金的平均成本 | 1.589 |
| 压力位 | 股价涨到这个位置可能遇到阻力 | 3.084 |
| 支撑位 | 股价跌到这个位置可能获得支撑 | 0.505 |
| 趋势 | 股价的长期运行方向 | 中长期处于上升趋势 |
**关键判断:**
- 压力强度大 → 需要放巨量才能突破
- 获利筹码增加 + 获利了结意愿不明显 → 筹码稳定性好
---
### 五、核心功能三:资金流向(判断主力态度)
| 观察点 | 判断依据 | 结论 |
| ---------------- | ---------------- | ---------- |
| 庄家在买还是卖? | 当前多头资金占优 | 主力在买 |
| 资金是否持续? | 多头资金持续流入 | 资金在流进 |
> **结论:** 当前市场多头资金占优,且持续流入,整体资金在流进。
---
### 六、超级云脑四大分析维度
| 维度 | 要回答的问题 | 对应功能 |
| -------- | ---------------------- | ------------ |
| 安全性 | 我的股票安全吗? | 六色罗盘 |
| 压力点 | 涨到什么价位要注意? | 技术指标分析 |
| 主力态度 | 主力在买还是卖? | 资金流向分析 |
| 资金动向 | 市场资金流入还是流出? | 资金流向分析 |
---
###

738
陈春晓的学习笔记/陈春晓4.9学习笔记.md

@ -0,0 +1,738 @@
# 技术
---
### 一、JavaWeb概述
#### 1. 什么是JavaWeb?
JavaWeb是用Java技术开发**Web应用程序**的技术栈,通过浏览器访问(如淘宝、京东)。
| 术语 | 说明 |
| ------- | ----------------------------------- |
| B/S架构 | 浏览器/服务器,无需安装客户端 |
| C/S架构 | 客户端/服务器,需要安装软件(如QQ) |
#### 2. Web应用发展历程
| 阶段 | 技术 | 特点 |
| ---------- | -------------- | ---------------------------- |
| 静态页面 | HTML | 内容固定,无法交互 |
| CGI | Perl/C | 性能差 |
| Servlet | Java | 动态生成页面,但输出HTML麻烦 |
| JSP | Java + HTML | 在HTML中写Java代码 |
| 前后端分离 | JSP/Vue + Ajax | 前端负责展示,后端提供接口 |
#### 3. Web服务器
| 服务器 | 说明 |
| -------- | ----------------------------- |
| Tomcat | 最常用,开源免费,Servlet容器 |
| Jetty | 轻量级 |
| JBoss | 支持完整JavaEE |
| WebLogic | 商业,大型项目 |
---
### 二、Tomcat服务器
#### 1. 下载安装
```cmd
# 下载地址
https://tomcat.apache.org/
# 启动
cd bin
startup.bat # Windows
./startup.sh # Linux
# 关闭
shutdown.bat
# 访问
http://localhost:8080
```
#### 2. Tomcat目录结构
| 目录 | 说明 |
| ------- | ------------------------------- |
| bin | 启动/关闭脚本 |
| conf | 配置文件(server.xml、web.xml) |
| lib | 依赖jar包 |
| logs | 日志文件 |
| webapps | 存放Web应用 |
| work | JSP编译后的Servlet |
#### 3. 配置端口(conf/server.xml)
```xml
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
```
---
### 三、Servlet
#### 1. 什么是Servlet?
Servlet是运行在**服务器端**的Java程序,用于处理客户端请求并返回响应。
**工作流程:**
```
浏览器 → 请求 → Tomcat → Servlet → 处理 → 响应 → 浏览器
```
#### 2. 创建Servlet
```java
// 方式1:实现Servlet接口(不常用)
// 方式2:继承HttpServlet(常用)
@WebServlet("/hello") // 访问路径
public class HelloServlet extends HttpServlet {
// 处理GET请求
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 设置响应类型
resp.setContentType("text/html;charset=UTF-8");
// 输出内容
resp.getWriter().write("Hello JavaWeb!");
}
// 处理POST请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
```
#### 3. web.xml配置方式
```xml
<!-- web.xml -->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.demo.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
```
#### 4. Servlet生命周期
| 阶段 | 方法 | 时机 |
| ---------- | ------------------------ | ------------------------ |
| 加载实例化 | 构造方法 | 第一次访问或服务器启动时 |
| 初始化 | init() | 实例化后执行一次 |
| 处理请求 | service() → doGet/doPost | 每次请求 |
| 销毁 | destroy() | 服务器关闭或应用卸载 |
```java
@WebServlet("/life")
public class LifeServlet extends HttpServlet {
public LifeServlet() {
System.out.println("1. 构造方法");
}
@Override
public void init() throws ServletException {
System.out.println("2. init初始化");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("3. service处理请求");
super.service(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("4. doGet");
resp.getWriter().write("OK");
}
@Override
public void destroy() {
System.out.println("5. destroy销毁");
}
}
```
---
### 四、HttpServletRequest
#### 1. 获取请求参数
```java
@WebServlet("/request")
public class RequestServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 获取单个参数
String name = req.getParameter("name");
String age = req.getParameter("age");
// 获取多个参数(复选框)
String[] hobbies = req.getParameterValues("hobby");
// 获取所有参数名
Enumeration<String> names = req.getParameterNames();
// 获取请求方式
String method = req.getMethod(); // GET/POST
// 获取URL
String url = req.getRequestURL().toString(); // http://localhost:8080/xxx
String uri = req.getRequestURI(); // /项目名/路径
// 获取客户端IP
String ip = req.getRemoteAddr();
// 获取请求头
String userAgent = req.getHeader("User-Agent");
// 设置编码(解决中文乱码)
req.setCharacterEncoding("UTF-8");
}
}
```
#### 2. 请求转发
```java
// 转发到另一个Servlet或JSP(浏览器地址栏不变)
@WebServlet("/forward")
public class ForwardServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 设置数据
req.setAttribute("message", "转发过来的数据");
// 转发到 /target
req.getRequestDispatcher("/target").forward(req, resp);
}
}
```
---
### 五、HttpServletResponse
```java
@WebServlet("/response")
public class ResponseServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 设置响应类型
resp.setContentType("text/html;charset=UTF-8");
// 设置状态码
resp.setStatus(200); // 成功
// resp.sendError(404, "页面不存在");
// 设置响应头
resp.setHeader("Refresh", "3"); // 3秒后刷新
// 输出内容
resp.getWriter().write("输出内容");
}
}
```
#### 2. 重定向
```java
// 重定向(浏览器地址栏改变,两次请求)
@WebServlet("/redirect")
public class RedirectServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 重定向到百度
resp.sendRedirect("https://www.baidu.com");
// 重定向到项目内的其他路径
resp.sendRedirect(req.getContextPath() + "/login");
}
}
```
#### 3. 转发 vs 重定向
| 对比 | 转发(forward) | 重定向(redirect) |
| ------------------- | --------------- | ------------------ |
| 地址栏 | 不变 | 改变 |
| 请求次数 | 1次 | 2次 |
| 能否共享request数据 | 能 | 不能 |
| 路径写法 | 内部路径 | 完整路径或带项目名 |
| 效率 | 高 | 低 |
---
### 六、JSP
#### 1. 什么是JSP?
JSP = HTML + Java代码,用于动态生成HTML页面。
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>第一个JSP</title>
</head>
<body>
<h1>Hello JSP</h1>
<%-- JSP注释 --%>
<%
// Java代码
String name = "张三";
out.print("姓名:" + name);
%>
<p>当前时间:<%= new java.util.Date() %></p>
</body>
</html>
```
#### 2. JSP三种脚本元素
| 类型 | 语法 | 说明 |
| ------ | --------------- | ------------------ |
| 声明 | `<%! 代码 %>` | 定义成员变量和方法 |
| 脚本 | `<% 代码 %>` | 执行Java代码 |
| 表达式 | `<%= 表达式 %>` | 输出结果 |
```jsp
<%!
// 声明:成员变量
private int count = 0;
// 声明:方法
public String getInfo() {
return "Hello";
}
%>
<%
// 脚本:执行代码
count++;
String name = request.getParameter("name");
%>
<p>访问次数:<%= count %></p>
<p>姓名:<%= name %></p>
```
#### 3. JSP内置对象(9个)
| 对象 | 类型 | 说明 |
| ----------- | ------------------- | --------------------- |
| request | HttpServletRequest | 请求对象 |
| response | HttpServletResponse | 响应对象 |
| out | JspWriter | 输出对象 |
| session | HttpSession | 会话对象 |
| application | ServletContext | 全局对象 |
| pageContext | PageContext | 页面上下文 |
| config | ServletConfig | 配置对象 |
| page | Object | 当前页面对象 |
| exception | Throwable | 异常对象(errorPage) |
```jsp
<%
// 使用内置对象
request.getParameter("name");
response.setContentType("text/html");
out.print("输出");
session.setAttribute("user", "张三");
application.setAttribute("count", 100);
%>
```
#### 4. JSP指令
```jsp
<!-- page指令:页面设置 -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.*, java.sql.*" %>
<%@ page errorPage="error.jsp" %>
<%@ page isErrorPage="true" %>
<!-- include指令:静态包含 -->
<%@ include file="header.jsp" %>
<!-- taglib指令:引入标签库 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
```
#### 5. JSP四大作用域
| 作用域 | 对象 | 说明 | 生命周期 |
| ----------- | ----------- | -------- | ---------------- |
| page | pageContext | 当前页面 | 请求结束 |
| request | request | 一次请求 | 请求结束 |
| session | session | 一次会话 | 浏览器关闭或超时 |
| application | application | 整个应用 | 服务器关闭 |
```jsp
<%
pageContext.setAttribute("pageData", "页面数据");
request.setAttribute("reqData", "请求数据");
session.setAttribute("sessionData", "会话数据");
application.setAttribute("appData", "应用数据");
%>
```
---
### 七、Session和Cookie
#### 1. Cookie(客户端存储)
```java
@WebServlet("/cookie")
public class CookieServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 创建Cookie
Cookie cookie = new Cookie("username", "张三");
cookie.setMaxAge(60 * 60); // 有效期1小时(秒)
cookie.setPath("/"); // 有效路径
resp.addCookie(cookie);
// 获取Cookie
Cookie[] cookies = req.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
if ("username".equals(c.getName())) {
String value = c.getValue();
}
}
}
// 删除Cookie
cookie.setMaxAge(0);
resp.addCookie(cookie);
}
}
```
#### 2. Session(服务端存储)
```java
@WebServlet("/session")
public class SessionServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 获取Session(true:不存在则创建)
HttpSession session = req.getSession();
// 设置属性
session.setAttribute("userId", 1001);
session.setAttribute("username", "张三");
// 获取属性
String username = (String) session.getAttribute("username");
// 移除属性
session.removeAttribute("username");
// 设置超时时间(秒)
session.setMaxInactiveInterval(1800); // 30分钟
// 手动销毁
session.invalidate();
// 获取Session ID
String sessionId = session.getId();
}
}
```
#### 3. Cookie vs Session
| 对比 | Cookie | Session |
| -------- | ------------------ | -------------------- |
| 存储位置 | 客户端(浏览器) | 服务端 |
| 存储大小 | 4KB左右 | 无限制(受内存限制) |
| 安全性 | 低(可被篡改) | 高 |
| 生命周期 | 可设置 | 超时或手动销毁 |
| 适用场景 | 记住密码、自动登录 | 登录状态、验证码 |
#### 4. 登录案例
```java
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
// 模拟验证
if ("admin".equals(username) && "123".equals(password)) {
// 登录成功,保存Session
HttpSession session = req.getSession();
session.setAttribute("user", username);
// 记住密码(Cookie)
String remember = req.getParameter("remember");
if ("on".equals(remember)) {
Cookie cookie = new Cookie("username", username);
cookie.setMaxAge(7 * 24 * 60 * 60);
resp.addCookie(cookie);
}
resp.sendRedirect(req.getContextPath() + "/index.jsp");
} else {
req.setAttribute("error", "用户名或密码错误");
req.getRequestDispatcher("/login.jsp").forward(req, resp);
}
}
}
```
---
### 八、过滤器
#### 1. 什么是Filter?
Filter用于拦截请求和响应,在Servlet执行前后进行处理。
**常见应用:**
- 编码过滤(解决乱码)
- 登录验证
- 日志记录
- 权限控制
#### 2. 创建Filter
```java
@WebFilter("/*") // 拦截所有请求
public class EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器初始化");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 前置处理
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println("请求到达前");
// 放行(继续执行下一个过滤器或Servlet)
chain.doFilter(request, response);
// 后置处理
System.out.println("响应返回后");
}
@Override
public void destroy() {
System.out.println("过滤器销毁");
}
}
```
#### 3. 登录验证Filter
```java
@WebFilter({"/user/*", "/admin/*"}) // 拦截需要登录的路径
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
HttpSession session = req.getSession();
Object user = session.getAttribute("user");
if (user == null) {
// 未登录,跳转到登录页
resp.sendRedirect(req.getContextPath() + "/login.jsp");
} else {
// 已登录,放行
chain.doFilter(request, response);
}
}
}
```
---
### 九、监听器
#### 1. 什么是Listener?
Listener监听Web应用中的事件,在特定时机执行代码。
**监听器类型:**
| 类型 | 接口 | 触发时机 |
| ---------- | ---------------------- | ---------------- |
| 上下文监听 | ServletContextListener | 服务器启动/关闭 |
| 会话监听 | HttpSessionListener | Session创建/销毁 |
| 请求监听 | ServletRequestListener | 请求开始/结束 |
| 属性监听 | 对应AttributeListener | 属性增删改 |
---
### 十、MVC模式
#### 1. 什么是MVC?
| 组件 | 全称 | 说明 | 技术 |
| ---- | ---------- | -------- | ---------------------- |
| M | Model | 数据模型 | JavaBean、Service、DAO |
| V | View | 视图 | JSP、HTML |
| C | Controller | 控制器 | Servlet |
**工作流程:**
```
浏览器 → 控制器(Servlet) → 调用Model(Service/DAO) → 获取数据 → 转发到View(JSP) → 响应
```
---
# 股票知识
## 超级云脑
---
### 一、投资决策的三大难题
在股票投资中,我们经常面临三个核心问题:
| 问题编号 | 核心问题 | 具体描述 |
| -------- | -------------- | -------------------------------------- |
| 问题一 | 能持有吗? | 股票买完后,不知道能不能继续持有 |
| 问题二 | 有风险吗? | 股票在上涨过程中,不知道风险有多大 |
| 问题三 | 主力什么态度? | 股票遇到压力时,不知道主力是在买还是卖 |
**解决方案:** 利用人工智能(AI)分析金融大数据,用AI解决决策难题。
---
### 二、超级云脑是什么?
**定义:** 超级云脑是将人工智能与金融股票领域融合的工具,能够快速处理大量金融数据,为投资者提供行情分析和预判。
**三大优势:**
| 优势 | 说明 |
| ---------- | -------------------------------------- |
| 处理速度快 | 瞬间处理大量金融数据 |
| 能赚钱 | 通过大数据分析帮助投资者获利 |
| 天然匹配 | 金融市场本身就是大数据市场,AI正好适合 |
---
### 三、核心功能一:六色罗盘(判断安全与风险)
六色罗盘是一个从**绿色(安全)到红色(风险)** 的图示工具。
| 区域 | 含义 | 操作建议 |
| -------- | ------ | ------------------ |
| 绿色区域 | 安全区 | 相对安全,可持有 |
| 红色区域 | 风险区 | 注意风险,考虑减仓 |
**罗盘细分:**
- 强撑强压区
- 弱撑强压区
- 强撑中压区
- 弱撑中压区
- 强撑弱压区
- 弱撑弱压区
> **使用方法:** 看指针指向哪个区域,绿色安全,红色危险。
---
### 四、核心功能二:技术指标分析(判断压力与支撑)
技术指标分析告诉我们以下关键信息:
| 指标 | 含义 | 示例数据 |
| ---------------- | ---------------------------- | ------------------ |
| 中长期筹码成本价 | 大多数持股者的平均成本 | 1.648 |
| 短期资金成本价 | 近期买入资金的平均成本 | 1.589 |
| 压力位 | 股价涨到这个位置可能遇到阻力 | 3.084 |
| 支撑位 | 股价跌到这个位置可能获得支撑 | 0.505 |
| 趋势 | 股价的长期运行方向 | 中长期处于上升趋势 |
**关键判断:**
- 压力强度大 → 需要放巨量才能突破
- 获利筹码增加 + 获利了结意愿不明显 → 筹码稳定性好
---
### 五、核心功能三:资金流向(判断主力态度)
| 观察点 | 判断依据 | 结论 |
| ---------------- | ---------------- | ---------- |
| 庄家在买还是卖? | 当前多头资金占优 | 主力在买 |
| 资金是否持续? | 多头资金持续流入 | 资金在流进 |
> **结论:** 当前市场多头资金占优,且持续流入,整体资金在流进。
---
### 六、超级云脑四大分析维度
| 维度 | 要回答的问题 | 对应功能 |
| -------- | ---------------------- | ------------ |
| 安全性 | 我的股票安全吗? | 六色罗盘 |
| 压力点 | 涨到什么价位要注意? | 技术指标分析 |
| 主力态度 | 主力在买还是卖? | 资金流向分析 |
| 资金动向 | 市场资金流入还是流出? | 资金流向分析 |
---
### 七、今日小结
| 知识点 | 掌握要求 |
| ------------- | ---------------------------------------- |
| 三大难题 | 能说出买完后能否持有、有无风险、主力态度 |
| 超级云脑 | 能说出它是AI+金融的分析工具 |
| 六色罗盘 | 绿色安全、红色风险 |
| 压力位/支撑位 | 压力位是上涨阻力,支撑位是下跌支撑 |
| 资金流向 | 多头占优+持续流入=看好 |
###
Loading…
Cancel
Save