add logseq-java
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
- Application Programming Interface
|
||||
- 应用编程接口
|
||||
- 在Java中提供了大量的类,接口,函数等一系列基础工具
|
||||
- 目的
|
||||
- 简化程序员开发
|
||||
- JDK1.8 API文档
|
||||
- [JDK1.8.CHM](../assets/JDK1.8_1649904511236_0.CHM)
|
||||
-
|
||||
-
|
||||
@@ -0,0 +1,14 @@
|
||||
- Java中所有[[类]]都是Class类型的[[对象]]
|
||||
- 类加载器负责加载所有的类,class字节码文载入到内存中,载入到内存的类[[JVM]]会创建一个Java.lang.Class对象
|
||||
- 通过该class对象可以访问该类的所有方法
|
||||
- 获取该类的class对象
|
||||
- 1. 访问类的class属性
|
||||
2. 调用对象的getClass()方法
|
||||
先new
|
||||
3. 通过类的全限定名字符串加载
|
||||
- java.lang.reflect包
|
||||
- 通过[[反射]]调用该类的构造方法
|
||||
- 通过getConstructor()
|
||||
- 1. 获取该类的Class对象
|
||||
2. getConstructor()获取构造器
|
||||
3. 通过newInstance() 新建对象
|
||||
@@ -0,0 +1,17 @@
|
||||
- Java中所有[[类]]都是Class类型的[[对象]]
|
||||
- 类加载器负责加载所有的类,class字节码文载入到内存中,载入到内存的类[[JVM]]会创建一个Java.lang.Class对象
|
||||
- 通过该class对象可以访问该类的所有方法
|
||||
- 获取该类的class对象
|
||||
- 1. 访问类的class属性
|
||||
2. 调用对象的getClass()方法
|
||||
先new一个对象再使用
|
||||
3. 通过类的全限定名字符串加载
|
||||
- java.lang.reflect包
|
||||
- 通过[[反射]]调用该类的构造方法
|
||||
- 通过getConstructor()
|
||||
- 1. 获取该类的Class对象
|
||||
2. getConstructor()获取构造器
|
||||
3. 通过newInstance() 新建对象
|
||||
- getConstructors()
|
||||
- 获取所有构造器
|
||||
- getDeclaredConstructor()
|
||||
21
logseq-java/logseq/bak/pages/DOS/2022-04-22T03_28_46.657Z.md
Normal file
21
logseq-java/logseq/bak/pages/DOS/2022-04-22T03_28_46.657Z.md
Normal file
@@ -0,0 +1,21 @@
|
||||
- 重要程度:中
|
||||
- 目标
|
||||
- 掌握常用的DOS命令
|
||||
- window快捷键
|
||||
- ### DOS命令
|
||||
- DOS窗口
|
||||
- win+R --> CMD
|
||||
- [[cd命令]]
|
||||
- 进入到某一个目录
|
||||
- [[dir命令]]
|
||||
- 列出所有文件及子目录
|
||||
- 跳转盘符 d:
|
||||
- 跳转到其它磁盘
|
||||
- [[cls清屏]]
|
||||
- 清空屏幕
|
||||
- [[ping测试]]
|
||||
- 测试网络是否连通
|
||||
- [[ipconfig]]
|
||||
- 获得本机的ip地址信息
|
||||
- [[exit]]
|
||||
- 退出DOS窗口
|
||||
21
logseq-java/logseq/bak/pages/DOS/2022-04-22T06_15_03.741Z.md
Normal file
21
logseq-java/logseq/bak/pages/DOS/2022-04-22T06_15_03.741Z.md
Normal file
@@ -0,0 +1,21 @@
|
||||
- 重要程度:中
|
||||
- 目标
|
||||
- 掌握常用的DOS命令
|
||||
- window快捷键
|
||||
- ### DOS命令
|
||||
- DOS窗口
|
||||
- win+R --> CMD
|
||||
- [[cd命令]]
|
||||
- 进入到某一个目录
|
||||
- [[dir命令]]
|
||||
- 列出所有文件及子目录
|
||||
- 跳转盘符 d:
|
||||
- 跳转到其它磁盘
|
||||
- [[cls清屏]]
|
||||
- 清空屏幕
|
||||
- [[ping测试]]
|
||||
- 测试网络是否连通
|
||||
- [[ipconfig]]
|
||||
- 获得本机的ip地址信息
|
||||
- [[exit]]
|
||||
- 退出DOS窗口
|
||||
21
logseq-java/logseq/bak/pages/DOS/2022-04-22T14_05_24.627Z.md
Normal file
21
logseq-java/logseq/bak/pages/DOS/2022-04-22T14_05_24.627Z.md
Normal file
@@ -0,0 +1,21 @@
|
||||
- 重要程度:中
|
||||
- 目标
|
||||
- 掌握常用的DOS命令
|
||||
- window快捷键
|
||||
- ### DOS命令
|
||||
- DOS窗口
|
||||
- win+R --> CMD
|
||||
- [[cd命令]]
|
||||
- 进入到某一个目录
|
||||
- [[dir命令]]
|
||||
- 列出所有文件及子目录
|
||||
- 跳转盘符 d:
|
||||
- 跳转到其它磁盘
|
||||
- [[cls清屏]]
|
||||
- 清空屏幕
|
||||
- [[ping测试]]
|
||||
- 测试网络是否连通
|
||||
- [[ipconfig]]
|
||||
- 获得本机的ip地址信息
|
||||
- [[exit]]
|
||||
- 退出DOS窗口
|
||||
@@ -0,0 +1 @@
|
||||
- id:: 6241c20a-25e8-4aa6-85a3-502943039b86
|
||||
@@ -0,0 +1,46 @@
|
||||
- Ctrl+S 保存
|
||||
- Ctrl+Y 回撤
|
||||
- Ctrl+Z 撤销
|
||||
- Ctrl+D 删除一行
|
||||
- Ctrl+X 剪切
|
||||
- Ctrl+V 粘贴
|
||||
- Ctrl+C 复制
|
||||
- 快捷键
|
||||
- 1. 新建项目
|
||||
2. 输入项目名称
|
||||
3. 项目结构
|
||||
4. 新建java程序
|
||||
5. Package位置输入包名
|
||||
6. 右侧代码编辑区域写代码
|
||||
7. 点击工具运行按钮
|
||||
8. 点击下方Console界面查看结果
|
||||
- 使用Eclipse新建项目完成HelloWorld
|
||||
- 修改默认编码模式
|
||||
- 改变默认字体大小
|
||||
- 初始设置
|
||||
- 界面
|
||||
- 打开
|
||||
- Eclipse基本介绍
|
||||
collapsed:: true
|
||||
- 打开
|
||||
- 界面
|
||||
- 初始设置
|
||||
- 改变默认字体大小
|
||||
- 修改默认编码模式
|
||||
- 使用Eclipse新建项目完成HelloWorld
|
||||
- 1. 新建项目
|
||||
2. 输入项目名称
|
||||
3. 项目结构
|
||||
4. 新建java程序
|
||||
5. Package位置输入包名
|
||||
6. 右侧代码编辑区域写代码
|
||||
7. 点击工具运行按钮
|
||||
8. 点击下方Console界面查看结果
|
||||
- 快捷键
|
||||
- Ctrl+C 复制
|
||||
- Ctrl+V 粘贴
|
||||
- Ctrl+X 剪切
|
||||
- Ctrl+D 删除一行
|
||||
- Ctrl+Z 撤销
|
||||
- Ctrl+Y 回撤
|
||||
- Ctrl+S 保存
|
||||
@@ -0,0 +1 @@
|
||||
- HyperText Mark Language
|
||||
@@ -0,0 +1,14 @@
|
||||
- HyperText Markup Language
|
||||
- 结构
|
||||
- 声明`<!DOCTYPE html>`
|
||||
- 完整HTML页面`<html>`
|
||||
- 头部`<head>`
|
||||
- 页面内容<body>
|
||||
- 标题
|
||||
- 通过<h1> - <h6>定义
|
||||
- 段落
|
||||
- 通过<p>标签定义
|
||||
- 链接
|
||||
- 通过<a>标签定义
|
||||
- 图像
|
||||
- 通过<img>标签
|
||||
@@ -0,0 +1,49 @@
|
||||
- 重要程度:中
|
||||
- 课程目标
|
||||
- 掌握Java程序执行步骤
|
||||
- 了解Java类的结构
|
||||
- ### 执行步骤
|
||||
- Hello代码
|
||||
```java
|
||||
public class HelloWorld{
|
||||
public static void main(String[] args) {
|
||||
System.out.println("Hello World");
|
||||
}
|
||||
}
|
||||
```
|
||||
- 编译步骤
|
||||
- > 编译:相当于英文书籍的中文翻译,一定会出来一个新的文件
|
||||
- > 解释:国家领导人参与国际会议,戴的同声传译
|
||||
- Java是一种半编译,半解释性语言
|
||||
- 字节码信息,配合JVM虚拟机,就可以做到跨平台
|
||||
- Java源代码文件基本结构
|
||||
- Java程序依靠类来组织自己的代码
|
||||
- [[类class]]
|
||||
- **类的类名要跟源代码的文件名保持一致**
|
||||
- ```java
|
||||
public class 类的类名{
|
||||
/*
|
||||
Java程序中主函数/主入口
|
||||
一个程序要跑起来,一定要有一个主入口
|
||||
主函数的结构是固定的
|
||||
*/
|
||||
public static void main(String[] arg){
|
||||
|
||||
//其它代码
|
||||
|
||||
}
|
||||
}
|
||||
```
|
||||
- 比如
|
||||
- ```java
|
||||
public class SelfIntroduce{
|
||||
public static void main(String[] args){
|
||||
|
||||
System.out.println("My name is ***")
|
||||
|
||||
}
|
||||
}
|
||||
```
|
||||
- **SelfIntroduce** 类名,和文件名保持一致
|
||||
- **main** 函数方法
|
||||
- **System.out.println("")** 程序输出方
|
||||
@@ -0,0 +1 @@
|
||||
- IDE
|
||||
@@ -0,0 +1 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于卡法
|
||||
@@ -0,0 +1,7 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[]]IEDA**
|
||||
@@ -0,0 +1,8 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
-
|
||||
@@ -0,0 +1,14 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- Eclipse基本介绍
|
||||
- 打开
|
||||
- 界面
|
||||
- 初始设置
|
||||
- 改变默认字体大小
|
||||
- 修改默认编码模式
|
||||
-
|
||||
@@ -0,0 +1,23 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- Eclipse基本介绍
|
||||
- 打开
|
||||
- 界面
|
||||
- 初始设置
|
||||
- 改变默认字体大小
|
||||
- 修改默认编码模式
|
||||
- 使用Eclipse新建项目完成HelloWorld
|
||||
- 1. 新建项目
|
||||
2. 输入项目名称
|
||||
3. 项目结构
|
||||
4. 新建java程序
|
||||
5. Package位置输入包名
|
||||
6. 右侧代码编辑区域写代码
|
||||
7. 点击工具运行按钮
|
||||
8. 点击下方Console界面查看结果
|
||||
- 查看
|
||||
@@ -0,0 +1,31 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- Eclipse基本介绍
|
||||
- 打开
|
||||
- 界面
|
||||
- 初始设置
|
||||
- 改变默认字体大小
|
||||
- 修改默认编码模式
|
||||
- 使用Eclipse新建项目完成HelloWorld
|
||||
- 1. 新建项目
|
||||
2. 输入项目名称
|
||||
3. 项目结构
|
||||
4. 新建java程序
|
||||
5. Package位置输入包名
|
||||
6. 右侧代码编辑区域写代码
|
||||
7. 点击工具运行按钮
|
||||
8. 点击下方Console界面查看结果
|
||||
- 快捷键
|
||||
- Ctrl+C 复制
|
||||
- Ctrl+V 粘贴
|
||||
- Ctrl+X 剪切
|
||||
- Ctrl+D 删除一行
|
||||
- Ctrl+Z 撤销
|
||||
- Ctrl+Y 回撤
|
||||
- Ctrl+S 保存
|
||||
-
|
||||
@@ -0,0 +1,31 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- Eclipse基本介绍
|
||||
- 打开
|
||||
- 界面
|
||||
- 初始设置
|
||||
- 改变默认字体大小
|
||||
- 修改默认编码模式
|
||||
- 使用Eclipse新建项目完成HelloWorld
|
||||
- 1. 新建项目
|
||||
2. 输入项目名称
|
||||
3. 项目结构
|
||||
4. 新建java程序
|
||||
5. Package位置输入包名
|
||||
6. 右侧代码编辑区域写代码
|
||||
7. 点击工具运行按钮
|
||||
8. 点击下方Console界面查看结果
|
||||
- 快捷键
|
||||
- Ctrl+C 复制
|
||||
- Ctrl+V 粘贴
|
||||
- Ctrl+X 剪切
|
||||
- Ctrl+D 删除一行
|
||||
- Ctrl+Z 撤销
|
||||
- Ctrl+Y 回撤
|
||||
- Ctrl+S 保存
|
||||
-
|
||||
@@ -0,0 +1,31 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- Eclipse基本介绍
|
||||
- 打开
|
||||
- 界面
|
||||
- 初始设置
|
||||
- 改变默认字体大小
|
||||
- 修改默认编码模式
|
||||
- 使用Eclipse新建项目完成HelloWorld
|
||||
- 1. 新建项目
|
||||
2. 输入项目名称
|
||||
3. 项目结构
|
||||
4. 新建java程序
|
||||
5. Package位置输入包名
|
||||
6. 右侧代码编辑区域写代码
|
||||
7. 点击工具运行按钮
|
||||
8. 点击下方Console界面查看结果
|
||||
- 快捷键
|
||||
- Ctrl+C 复制
|
||||
- Ctrl+V 粘贴
|
||||
- Ctrl+X 剪切
|
||||
- Ctrl+D 删除一行
|
||||
- Ctrl+Z 撤销
|
||||
- Ctrl+Y 回撤
|
||||
- Ctrl+S 保存
|
||||
- [[java程序注释]]
|
||||
@@ -0,0 +1,31 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- Eclipse基本介绍
|
||||
- 打开
|
||||
- 界面
|
||||
- 初始设置
|
||||
- 改变默认字体大小
|
||||
- 修改默认编码模式
|
||||
- 使用Eclipse新建项目完成HelloWorld
|
||||
- 1. 新建项目
|
||||
2. 输入项目名称
|
||||
3. 项目结构
|
||||
4. 新建java程序
|
||||
5. Package位置输入包名
|
||||
6. 右侧代码编辑区域写代码
|
||||
7. 点击工具运行按钮
|
||||
8. 点击下方Console界面查看结果
|
||||
- 快捷键
|
||||
- Ctrl+C 复制
|
||||
- Ctrl+V 粘贴
|
||||
- Ctrl+X 剪切
|
||||
- Ctrl+D 删除一行
|
||||
- Ctrl+Z 撤销
|
||||
- Ctrl+Y 回撤
|
||||
- Ctrl+S 保存
|
||||
- [[Java程序注释]]
|
||||
@@ -0,0 +1,8 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- [[Java程序注释]]
|
||||
@@ -0,0 +1,31 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- Eclipse基本介绍
|
||||
- 打开
|
||||
- 界面
|
||||
- 初始设置
|
||||
- 改变默认字体大小
|
||||
- 修改默认编码模式
|
||||
- 使用Eclipse新建项目完成HelloWorld
|
||||
- 1. 新建项目
|
||||
2. 输入项目名称
|
||||
3. 项目结构
|
||||
4. 新建java程序
|
||||
5. Package位置输入包名
|
||||
6. 右侧代码编辑区域写代码
|
||||
7. 点击工具运行按钮
|
||||
8. 点击下方Console界面查看结果
|
||||
- 快捷键
|
||||
- Ctrl+C 复制
|
||||
- Ctrl+V 粘贴
|
||||
- Ctrl+X 剪切
|
||||
- Ctrl+D 删除一行
|
||||
- Ctrl+Z 撤销
|
||||
- Ctrl+Y 回撤
|
||||
- Ctrl+S 保存
|
||||
- [][java程序注释]
|
||||
@@ -0,0 +1,32 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- Eclipse基本介绍
|
||||
collapsed:: true
|
||||
- 打开
|
||||
- 界面
|
||||
- 初始设置
|
||||
- 改变默认字体大小
|
||||
- 修改默认编码模式
|
||||
- 使用Eclipse新建项目完成HelloWorld
|
||||
- 1. 新建项目
|
||||
2. 输入项目名称
|
||||
3. 项目结构
|
||||
4. 新建java程序
|
||||
5. Package位置输入包名
|
||||
6. 右侧代码编辑区域写代码
|
||||
7. 点击工具运行按钮
|
||||
8. 点击下方Console界面查看结果
|
||||
- 快捷键
|
||||
- Ctrl+C 复制
|
||||
- Ctrl+V 粘贴
|
||||
- Ctrl+X 剪切
|
||||
- Ctrl+D 删除一行
|
||||
- Ctrl+Z 撤销
|
||||
- Ctrl+Y 回撤
|
||||
- Ctrl+S 保存
|
||||
- [[Java程序注释]]
|
||||
@@ -0,0 +1,32 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
collapsed:: true
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- Eclipse基本介绍
|
||||
- 打开
|
||||
- 界面
|
||||
- 初始设置
|
||||
- 改变默认字体大小
|
||||
- 修改默认编码模式
|
||||
- 使用Eclipse新建项目完成HelloWorld
|
||||
- 1. 新建项目
|
||||
2. 输入项目名称
|
||||
3. 项目结构
|
||||
4. 新建java程序
|
||||
5. Package位置输入包名
|
||||
6. 右侧代码编辑区域写代码
|
||||
7. 点击工具运行按钮
|
||||
8. 点击下方Console界面查看结果
|
||||
- 快捷键
|
||||
- Ctrl+C 复制
|
||||
- Ctrl+V 粘贴
|
||||
- Ctrl+X 剪切
|
||||
- Ctrl+D 删除一行
|
||||
- Ctrl+Z 撤销
|
||||
- Ctrl+Y 回撤
|
||||
- Ctrl+S 保存
|
||||
- [[Java程序注释]]
|
||||
@@ -0,0 +1,9 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
collapsed:: true
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- [[Java程序注释]]
|
||||
@@ -0,0 +1,33 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
collapsed:: true
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- Eclipse基本介绍
|
||||
collapsed:: true
|
||||
- 打开
|
||||
- 界面
|
||||
- 初始设置
|
||||
- 改变默认字体大小
|
||||
- 修改默认编码模式
|
||||
- 使用Eclipse新建项目完成HelloWorld
|
||||
- 1. 新建项目
|
||||
2. 输入项目名称
|
||||
3. 项目结构
|
||||
4. 新建java程序
|
||||
5. Package位置输入包名
|
||||
6. 右侧代码编辑区域写代码
|
||||
7. 点击工具运行按钮
|
||||
8. 点击下方Console界面查看结果
|
||||
- 快捷键
|
||||
- Ctrl+C 复制
|
||||
- Ctrl+V 粘贴
|
||||
- Ctrl+X 剪切
|
||||
- Ctrl+D 删除一行
|
||||
- Ctrl+Z 撤销
|
||||
- Ctrl+Y 回撤
|
||||
- Ctrl+S 保存
|
||||
- [[Java程序注释]]
|
||||
@@ -0,0 +1,32 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- Eclipse基本介绍
|
||||
collapsed:: true
|
||||
- 打开
|
||||
- 界面
|
||||
- 初始设置
|
||||
- 改变默认字体大小
|
||||
- 修改默认编码模式
|
||||
- 使用Eclipse新建项目完成HelloWorld
|
||||
- 1. 新建项目
|
||||
2. 输入项目名称
|
||||
3. 项目结构
|
||||
4. 新建java程序
|
||||
5. Package位置输入包名
|
||||
6. 右侧代码编辑区域写代码
|
||||
7. 点击工具运行按钮
|
||||
8. 点击下方Console界面查看结果
|
||||
- 快捷键
|
||||
- Ctrl+C 复制
|
||||
- Ctrl+V 粘贴
|
||||
- Ctrl+X 剪切
|
||||
- Ctrl+D 删除一行
|
||||
- Ctrl+Z 撤销
|
||||
- Ctrl+Y 回撤
|
||||
- Ctrl+S 保存
|
||||
- [[Java程序注释]]
|
||||
@@ -0,0 +1,31 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- Eclipse基本介绍
|
||||
- 打开
|
||||
- 界面
|
||||
- 初始设置
|
||||
- 改变默认字体大小
|
||||
- 修改默认编码模式
|
||||
- 使用Eclipse新建项目完成HelloWorld
|
||||
- 1. 新建项目
|
||||
2. 输入项目名称
|
||||
3. 项目结构
|
||||
4. 新建java程序
|
||||
5. Package位置输入包名
|
||||
6. 右侧代码编辑区域写代码
|
||||
7. 点击工具运行按钮
|
||||
8. 点击下方Console界面查看结果
|
||||
- 快捷键
|
||||
- Ctrl+C 复制
|
||||
- Ctrl+V 粘贴
|
||||
- Ctrl+X 剪切
|
||||
- Ctrl+D 删除一行
|
||||
- Ctrl+Z 撤销
|
||||
- Ctrl+Y 回撤
|
||||
- Ctrl+S 保存
|
||||
- [[Java程序注释]]
|
||||
@@ -0,0 +1,28 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- Eclipse基本介绍
|
||||
- 打开
|
||||
- 界面
|
||||
- 初始设置
|
||||
- 改变默认字体大小
|
||||
- 修改默认编码模式
|
||||
- 使用Eclipse新建项目完成HelloWorld
|
||||
- 1. 新建项目
|
||||
2. 输入项目名称
|
||||
3. 项目结构
|
||||
4. 新建java程序
|
||||
5. Package位置输入包名
|
||||
6. 右侧代码编辑区域写代码
|
||||
7. 点击工具运行按钮
|
||||
8. 点击下方Console界面查看结果
|
||||
- 快捷键
|
||||
- Ctrl+C 复制
|
||||
- Ctrl+V 粘贴
|
||||
- Ctrl+X 剪切
|
||||
- Ctrl+D 删除一行
|
||||
- [[Java程序注释]]
|
||||
@@ -0,0 +1,23 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- Eclipse基本介绍
|
||||
- 打开
|
||||
- 界面
|
||||
- 初始设置
|
||||
- 改变默认字体大小
|
||||
- 修改默认编码模式
|
||||
- 使用Eclipse新建项目完成HelloWorld
|
||||
- 1. 新建项目
|
||||
2. 输入项目名称
|
||||
3. 项目结构
|
||||
4. 新建java程序
|
||||
5. Package位置输入包名
|
||||
6. 右侧代码编辑区域写代码
|
||||
7. 点击工具运行按钮
|
||||
8. 点击下方Console界面查看结果
|
||||
- [[Java程序注释]]
|
||||
@@ -0,0 +1,8 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**使用最多,太方便,集成大多插件
|
||||
- [[Java程序注释]]#程序/注释
|
||||
@@ -0,0 +1,8 @@
|
||||
- [[IDE]]全称Integrated Development Environment(集成开发环境),是用于开发程序的软件
|
||||
- 常见IDE
|
||||
- **[[Eclipse]]**
|
||||
- Myeclipes
|
||||
- STS
|
||||
- VS
|
||||
- **[[IEDA]]**
|
||||
- [[Java程序注释]]#程序/注释
|
||||
@@ -0,0 +1,42 @@
|
||||
- 重要程度:高
|
||||
- 课程目标
|
||||
- 掌握如何安装JDK
|
||||
- 掌握如何配置环境变量
|
||||
- 安装JDK
|
||||
- [下载地址](https://www.oracle.com/java/technologies/downloads/)JDK8
|
||||
- 检测java是否安装完成
|
||||
```
|
||||
java -version
|
||||
```
|
||||
- 编写HelloWorld #HelloWorld
|
||||
- ```java
|
||||
public class HelloWorld{
|
||||
public static void main(String[] args) {
|
||||
System.out.println("Hello World");
|
||||
}
|
||||
}
|
||||
```
|
||||
- 编译运行
|
||||
```
|
||||
javac HelloWorld.java
|
||||
java HelloWorld
|
||||
```
|
||||
- 如果编译遇到问题
|
||||
- 修改编译命令为
|
||||
```
|
||||
javac -encoding utf-8 HelloWorld.java
|
||||
```
|
||||
- 配置环境变量
|
||||
- [[cd命令]]系统命令,任何目录都可运行
|
||||
- java提升为系统级命令后也可以在任何目录运行
|
||||
- 变量配置
|
||||
- JAVA_HOME:jiava安装目录
|
||||
- JAVA_HOME
|
||||
C:\\Program Files\\java\\jre...
|
||||
- Path:Java的命令执行目录
|
||||
- Path
|
||||
%JAVA_HOME%\\bin
|
||||
- Classpath:配置class字节码文件所在位置
|
||||
- CLASSPATH
|
||||
.
|
||||
-
|
||||
@@ -0,0 +1,53 @@
|
||||
- 课程目标:
|
||||
- 了解Java起源
|
||||
- 了解Java发展历程
|
||||
- 掌握Java的技术特点和对应的组成结构
|
||||
- Java起源
|
||||
- Java是一种高级编程语言
|
||||
- 1991,起源SUN Green小组开发Star 7项目[整合了C++ Lisp SmallTalk](智能家居)
|
||||
- 1992,开发后没市场
|
||||
- 1993,团队面临解散,决定Java去走互联网
|
||||
- 早期叫Oak(橡树),据说Java之父手(詹姆斯·高斯林)上爪哇的咖啡
|
||||
- Java的发展史
|
||||
- 95/5/23,java正式诞生
|
||||
- 96/1/23,JDK1.0
|
||||
- 97/2/18,JDK1.1,此时算是最初级的版本
|
||||
- 98/12/8,JDK1.2,milestone version
|
||||
- 更名为Java2.0
|
||||
- 确定Java未来的走向
|
||||
- 1. **J2SE**(标准),开发桌面应用,Eclipse,IDEA
|
||||
2. **J2ME**(微型),手机嵌入式程序,Nokia
|
||||
3. **J2EE**(企业),开发企业级,互联网应用
|
||||
- 04/10,JDK1.5 another milestone
|
||||
- 1. Java更名Java5.0
|
||||
2. 提供了注解,枚举,多线程等一系列的新功能或优化功能
|
||||
- J2SE-->Java SE
|
||||
J2ME-->Java ME
|
||||
J2EE-->Java EE
|
||||
- 2010/4/20,SUN被Orcale收购
|
||||
- 目前最新Java18,JDK18
|
||||
- Java技术组成
|
||||
- 1. Java编程语言
|
||||
- 特点
|
||||
- 1. 简单性:
|
||||
- 抛弃C语言头文件,结构体,联合体,指针等一系列非常复杂的内容
|
||||
- 前辈多,现任广
|
||||
- 2. 结构中立:
|
||||
- Java语言在项目开发中,可以和其他任何语言共存
|
||||
- 3. 面向对象
|
||||
- 4. 支持分布式
|
||||
- 5. 跨平台:
|
||||
- 一次编写,处处运行
|
||||
- 6. 高性能
|
||||
- 7. 多线程
|
||||
- 8. 健壮性,安全性
|
||||
- 2.Java平台
|
||||
- JDK
|
||||
- Java Development Kit(Java开发工具包)
|
||||
- JRE+[[API]]工具
|
||||
- JRE
|
||||
- Java Runtime Environment(Java运行环境)
|
||||
- JVM+核心库类
|
||||
- JVM
|
||||
- Java Virtual Machine(Java虚拟机)
|
||||
- Java虚拟机出现目的:跨平台
|
||||
@@ -0,0 +1,14 @@
|
||||
- 单行注释
|
||||
- ```java
|
||||
public class dnahangzhushi {
|
||||
public static void mian(String[] args) {
|
||||
//这是一段输出语句
|
||||
System.out.println("Hello World")
|
||||
}
|
||||
}
|
||||
```
|
||||
- 多行注释
|
||||
- ```java
|
||||
Public
|
||||
```
|
||||
- 文档注释
|
||||
@@ -0,0 +1,16 @@
|
||||
- 单行注释
|
||||
- ```java
|
||||
public class dnahangzhushi {
|
||||
public static void mian(String[] args) {
|
||||
//这是一段输出语句
|
||||
System.out.println("Hello World")
|
||||
}
|
||||
}
|
||||
```
|
||||
- 多行注释
|
||||
- ```java
|
||||
public class duohangzhushi {
|
||||
public static void main(String[] args)
|
||||
}
|
||||
```
|
||||
- 文档注释
|
||||
@@ -0,0 +1 @@
|
||||
- Java程序不是运行在系统上,二十运行在
|
||||
@@ -0,0 +1,13 @@
|
||||
- > Java程序不是运行在系统上,而是运行在了虚拟机上,Java开发团队针对每一种不同的系统开发了不同的虚拟机
|
||||
- ## Java的跨平台 #JVM
|
||||
- 一次编写,处处运行
|
||||
- 一般在Windows上开发代码,而在Linux/Unix操作系统上运行
|
||||
- 如何做到
|
||||
- 通过JVM做到
|
||||
- JVM特点
|
||||
- 不同操作系统对应不同JVM
|
||||
- ## JVM内部执行
|
||||
- [[JIT编译器]]
|
||||
-
|
||||
- 小结
|
||||
- 不同操作系统,对应不同JVM做到跨平台
|
||||
@@ -0,0 +1,13 @@
|
||||
- Object类
|
||||
- 是所有Java类的超类,基类,父类,以及所有的类,都有Object的方法
|
||||
- [[toString]]
|
||||
- 打印对象内存地址
|
||||
- ((62564ae5-f389-453b-b790-5c15d527aacf))
|
||||
- [[equals]]
|
||||
- 比较两个对象是否是同一个对象
|
||||
- ==在比较[[基本数据类型]]时是比较值 #关系运算符
|
||||
比较 [[引用数据类型]]时是比较地址
|
||||
- ==与equals的区别 #Java面试
|
||||
- equals()通常比较对象的内容
|
||||
- [[finalize()]] #Java面试
|
||||
- 该方法是JVM销毁对象的方法,程序员不需要调用
|
||||
166
logseq-java/logseq/bak/pages/Redis/2022-07-07T01_35_56.315Z.md
Normal file
166
logseq-java/logseq/bak/pages/Redis/2022-07-07T01_35_56.315Z.md
Normal file
@@ -0,0 +1,166 @@
|
||||
- 一个key-value存储系统,是跨平台的[[非关系型数据库]]
|
||||
- NOSQL
|
||||
- Not Only SQL
|
||||
- 一个系统不应该仅仅关注数据间关系,还应关注数据的存储
|
||||
- 所有非关系数据库都是 [[关系型数据库]]的补充
|
||||
- 特性
|
||||
collapsed:: true
|
||||
- 性能高(读的速度是 110000 次/s,写的速度是 81000 次/s),且提供持久化操作
|
||||
- 结构简单,数据类型丰富,值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
|
||||
- 采用单线程,保证所有命令操作的原子性
|
||||
- 支持数据热备(Master slave模式),支持哨兵模式,主动切换主从模式
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 在**主从复制的基础**上,哨兵实现了**自动化故障恢复**。如上图所示,哨兵模式由两部分组成,哨兵节点和数据节点:
|
||||
- 哨兵节点:哨兵节点是特殊的 Redis 节点,不存储数据;
|
||||
- 数据节点:主节点和从节点都是数据节点。
|
||||
- Redis Sentinel 是分布式系统中监控 Redis 主从服务器,并提供主服务器下线时自动故障转移功能的模式。其中三个特性为:
|
||||
- 监控(Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常;
|
||||
- 提醒(Notification):当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知;
|
||||
- 自动故障迁移(Automatic failover):当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作。
|
||||
- 支持集群
|
||||
- 
|
||||
- 使用场景
|
||||
collapsed:: true
|
||||
- 应用程序的状态服务器
|
||||
- 记录某人的登录状态
|
||||
- 高热点数据的缓存服务器
|
||||
- 购物网站的分类列表
|
||||
- 微博热搜
|
||||
- 系统分析后的存储服务器
|
||||
- 数据报表
|
||||
- 排行榜
|
||||
- 好友关系
|
||||
- 利用集合求并集,交集 --> 共同好友
|
||||
- 电商系统秒杀,抢优惠券前数据预热
|
||||
- 社交系统点赞
|
||||
- 模拟队列模式FIFO(List特性)
|
||||
- MQ服务器
|
||||
- 不适用
|
||||
- 数据量过大
|
||||
- 内存限制
|
||||
- 访问频率低
|
||||
- 架构
|
||||
- 基础命令
|
||||
collapsed:: true
|
||||
- String
|
||||
- 存储简单数据,最大512M
|
||||
- Hash
|
||||
- 一组K-V结构数据
|
||||
- 存储对象,最大
|
||||
- List
|
||||
- 双向链表
|
||||
- Set
|
||||
- 无序,不能存储重复元素
|
||||
- 求交并差
|
||||
- ZSet
|
||||
- 有序集合,使用分数排序
|
||||
- 排行榜单
|
||||
- [[Spring]]集成Redis
|
||||
collapsed:: true
|
||||
- [[Spring Data Redis]]
|
||||
- 1. 导入依赖
|
||||
- ```xml
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||
</dependency>
|
||||
```
|
||||
- 2. 修改xml配置
|
||||
- ```yml
|
||||
spring:
|
||||
redis:
|
||||
host: 127.0.0.1
|
||||
jedis:
|
||||
pool:
|
||||
max-active: 10 #最大连接数10 默认8
|
||||
max-wait: 2000ms # 2S未连接抛出异常 -1永不超时
|
||||
min-idle: 0 #最小连接空闲数
|
||||
max-idle: 5 #最大连接空闲数量
|
||||
```
|
||||
- 3. 设置配置类
|
||||
- ```java
|
||||
package com.woniuxy.community.configure;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
||||
import com.fasterxml.jackson.annotation.PropertyAccessor;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||
import org.springframework.data.redis.core.*;
|
||||
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
|
||||
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||
|
||||
/**
|
||||
* redis配置类
|
||||
*/
|
||||
@Configuration
|
||||
public class RedisConfig {
|
||||
|
||||
@Autowired
|
||||
RedisConnectionFactory redisConnectionFactory;
|
||||
|
||||
/**
|
||||
* 向Spring容器,装配一个组件
|
||||
* 组件的ID是:redisTemplate
|
||||
* @Scope 设定组件在容器内部的作用域
|
||||
* singleton 单实例(默认)
|
||||
* prototype 原型(克隆)
|
||||
* request 跟HttpRequest有关
|
||||
* session 跟HttpSession有关
|
||||
* application 跟ServletContext有关
|
||||
* @return
|
||||
*/
|
||||
@Bean
|
||||
@Scope("singleton")
|
||||
public RedisTemplate<String,Object> redisTemplate(){
|
||||
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
|
||||
// 配置连接工厂
|
||||
redisTemplate.setConnectionFactory(redisConnectionFactory);
|
||||
// 针对key序列化
|
||||
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
|
||||
redisTemplate.setKeySerializer(stringRedisSerializer);
|
||||
redisTemplate.setHashKeySerializer(stringRedisSerializer);
|
||||
// 针对value序列化
|
||||
Jackson2JsonRedisSerializer jsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
// 设定控制访问修饰符,Jackson工具可以操作Value对象的所有属性
|
||||
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
|
||||
jsonRedisSerializer.setObjectMapper(objectMapper);
|
||||
redisTemplate.setValueSerializer(jsonRedisSerializer);
|
||||
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
|
||||
// RedisTemplate在属性设置之后使用
|
||||
redisTemplate.afterPropertiesSet();
|
||||
return redisTemplate;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ValueOperations<String,Object> valueOperations(){
|
||||
return redisTemplate().opsForValue();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ListOperations<String,Object> ListOperations(){
|
||||
return redisTemplate().opsForList();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public SetOperations<String,Object> SetOperations(){
|
||||
return redisTemplate().opsForSet();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ZSetOperations<String,Object> ZSetOperations(){
|
||||
return redisTemplate().opsForZSet();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public HashOperations<String,String,Object> HashOperations(){
|
||||
return redisTemplate().opsForHash();
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1 @@
|
||||
- 套接字变成
|
||||
@@ -0,0 +1,11 @@
|
||||
- {{video https://www.bilibili.com/video/BV1rb4y147F2?p=2}}
|
||||
- UserService类->无参构造方法->对象->依赖注入->初始化前->初始化->初始化后->放入单例池Map->Bean
|
||||
- 通过@Autowired进行依赖注入
|
||||
判断属性上是否有@Autowired注解
|
||||
- 初始化前要通过@PostConstruct注解来执行一个方法
|
||||
判断方法上是否有@PostConstruct注解
|
||||
- 初始化通过实现InitializingBean接口的afterPropertiesSet方法
|
||||
通过InstanceOf来判断是否实现了这个接口
|
||||
- 初始化AOP后置处理器
|
||||
-
|
||||
-
|
||||
@@ -0,0 +1,3 @@
|
||||
- Uniform Resource Locator
|
||||
- [统一资源定位符](https://zh.wikipedia.org/wiki/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E5%AE%9A%E4%BD%8D%E7%AC%A6)
|
||||
- [[协议]]://[[域名]]或[[IP]]地址:
|
||||
@@ -0,0 +1,8 @@
|
||||
- 修饰类,方法,变量
|
||||
- 修饰类
|
||||
- 表示是一个最终类,该类不能被继承
|
||||
- 修饰方法
|
||||
- 表示该方法子类重写
|
||||
- 修饰变量
|
||||
- [[自定义常量]]
|
||||
- [[常量]]可以解决代码中魔法值的问题
|
||||
@@ -0,0 +1,2 @@
|
||||
- 
|
||||
- 
|
||||
@@ -0,0 +1,18 @@
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
-
|
||||
@@ -0,0 +1,26 @@
|
||||
- % | ^
|
||||
- int a = 3 & 4
|
||||
boolean b = true & false
|
||||
- 使用时可以放数值,也可以放布尔值
|
||||
- 位与运算&
|
||||
- 比较两个二进制数据的同位数,如果都为1,此位结果为1
|
||||
- 位或运算|
|
||||
- 比较两个二进制数据的同位数,如果任意为1,此位结果为1
|
||||
- 异或运算^
|
||||
- 比较两个二进制数据的同位数,如果相同为0,不同为1
|
||||
- 移位运算
|
||||
- 如何快速的把2变成32?
|
||||
id:: 62451ad0-4023-43ff-82ad-a114bfb9ac7f
|
||||
- 2 \<< 4
|
||||
- <<
|
||||
表示将二进制整体向左移动多少位
|
||||
2<<3 --> 2*2^3 -->16
|
||||
移动多少位就乘以2的多少平方
|
||||
- \>>
|
||||
考虑符号的位移,位移之后符号不变
|
||||
表示将二进制整体向右移动多少位
|
||||
移动多少位就除以2的多少次方
|
||||
- \>>>
|
||||
不考虑符号的位移
|
||||
- 当进行运算的是个负数,可能变成一个非常大的数
|
||||
-
|
||||
@@ -0,0 +1,15 @@
|
||||
- 包含==,!=,>,<,=,<=,>=,instanceof
|
||||
id:: 6243f2ea-e08c-4ec2-850d-3ecf6e67889a
|
||||
- ==
|
||||
判断是否等于
|
||||
- !=
|
||||
- \>,<
|
||||
- =
|
||||
- \>=,<=
|
||||
- 键盘录入
|
||||
- Scanner
|
||||
- java.util.Scanner
|
||||
- Scanner scanner = new Scanner(System.in)
|
||||
- int a = scanner.nextInt()
|
||||
- 扫描控制台输入
|
||||
- 自动导入包 [[IDEA]]
|
||||
73
logseq-java/logseq/bak/pages/变量/2022-04-19T01_19_43.248Z.md
Normal file
73
logseq-java/logseq/bak/pages/变量/2022-04-19T01_19_43.248Z.md
Normal file
@@ -0,0 +1,73 @@
|
||||
- 字面量
|
||||
- 以文件形式直接出现在程序中的数据
|
||||
- ```java
|
||||
public static void main(String[] args) {
|
||||
System.out.println(11); //int类型
|
||||
System.out.println(1.1F); //float类型,需要在末尾加F
|
||||
System.out.println(1.11); //double类型
|
||||
System.out.println(1000000L); //long类型,需要在末尾加L
|
||||
System.out.println('字'); //char类型,需要单引号
|
||||
System.out.println(true); //boolean类型
|
||||
System.out.println("字符!") //String类型字面量,需要双引号
|
||||
}
|
||||
```
|
||||
- 变量
|
||||
- 最基本存储单元
|
||||
- 定义单个变量
|
||||
- ## [[Java程序注释]]
|
||||
- 变量:在一定范围内可以变化的量,本质上是内存空间的一个变化
|
||||
- 语法结构
|
||||
- ```java
|
||||
数据类型 变量名;
|
||||
变量名 = 初始值;
|
||||
```
|
||||
```java
|
||||
数据类型 变量名 = 初始值;
|
||||
```
|
||||
- 先定义,后赋值
|
||||
```java
|
||||
public static void main(String[] args) {
|
||||
|
||||
int num;
|
||||
|
||||
num=10;
|
||||
|
||||
System.out.println(num);
|
||||
|
||||
num=20;
|
||||
|
||||
System.out.println(num);
|
||||
|
||||
}
|
||||
```
|
||||
- 定义的同时赋值
|
||||
```java
|
||||
public static void main(String[] args) {
|
||||
|
||||
int num = 10;
|
||||
|
||||
System.out.println(num);
|
||||
|
||||
num=20;
|
||||
|
||||
System.out.println(num);
|
||||
|
||||
}
|
||||
```
|
||||
- 注意:
|
||||
- 变量一定要赋初值
|
||||
- 在同一方法内部变量名不能重复
|
||||
- 变量赋值过程
|
||||
- 在内存中根据数据类型申请对应内存空间
|
||||
- 给内存空间定义一个名字num
|
||||
- 给num的变量空间赋初始值10
|
||||
- [[局部变量]]
|
||||
- [[全局变量]]
|
||||
- 常量:恒久不变的量
|
||||
- PI = 3.14
|
||||
- [[字面量常量]]
|
||||
- [[自定义常量]]
|
||||
- 小结
|
||||
- 单行,多行,文档注释
|
||||
- 变量含义,分类
|
||||
- 常量含义
|
||||
27
logseq-java/logseq/bak/pages/周考2/2022-04-16T07_33_49.764Z.md
Normal file
27
logseq-java/logseq/bak/pages/周考2/2022-04-16T07_33_49.764Z.md
Normal file
@@ -0,0 +1,27 @@
|
||||
- [第2周周考题.doc](../assets/第2周周考题_1650089024252_0.doc)
|
||||
- 一
|
||||
1-5 DCADA
|
||||
6-10 DCDDB
|
||||
11-13 DAC
|
||||
14 ACE
|
||||
15 AC
|
||||
- 二
|
||||
1. 重写是指将父类的方法在子类中实现不同的方法
|
||||
重载是指一个方法可以传入不同的参数个数,顺序.类型
|
||||
2. 抽象类是带有abstract关键字修饰的类,抽象类中可以放普通的属性,方法以及抽象方法
|
||||
接口是定义为interface的类,是比抽象类还要抽象的类,是用来拓展类的功能的,
|
||||
抽象类需要有子类继承实现,接口需要有实现类来实现
|
||||
抽象类只能单继承,单实现,接口可以多继承,多实现
|
||||
3. 封装,继承,多态,抽象
|
||||
4. F5 进入到方法的内部
|
||||
F6 执行下一步,不进入方法内部
|
||||
F7 结束目前的方法
|
||||
F8 跳出当前方法,进入下一步
|
||||
5. valueOf
|
||||
add
|
||||
splite
|
||||
charAt
|
||||
trim
|
||||
6. 基本数据类型直接将值赋给这个变量
|
||||
引用数据类型变量存储的是在堆中的地址
|
||||
7. public
|
||||
@@ -0,0 +1,16 @@
|
||||
- 分类
|
||||
- 基本数据类型
|
||||
- 用于存储一些比较简单的数据,内存中存储的是数据本身
|
||||
- [[引用数据类型
|
||||
- 用于存储一些结构更加复杂,数据量更大的数据,内存空间中存储的是一个内存空间的地址
|
||||
- **基本数据类型分类**
|
||||
|类型|名称|字节占用|
|
||||
|byte|[[字节类型]]|1字节|
|
||||
|short|[[短整数类型]]|2字节|
|
||||
|int|[[整型]]|4字节|
|
||||
|long|[[长整型]]|8字节|
|
||||
|float|[[单精度浮点]]|4字节|
|
||||
|double|[[双精度浮点]]|8字节|
|
||||
|boolean|[[布尔类型]]|4字节|
|
||||
|char|[[字符类型]]|2字节|
|
||||
-
|
||||
@@ -0,0 +1,16 @@
|
||||
- 分类
|
||||
- 基本数据类型
|
||||
- 用于存储一些比较简单的数据,内存中存储的是数据本身
|
||||
- [[引用数据类型]]
|
||||
- 用于存储一些结构更加复杂,数据量更大的数据,内存空间中存储的是一个内存空间的地址
|
||||
- **基本数据类型分类**
|
||||
|类型|名称|字节占用|
|
||||
|byte|[[字节类型]]|1字节|
|
||||
|short|[[短整数类型]]|2字节|
|
||||
|int|[[整型]]|4字节|
|
||||
|long|[[长整型]]|8字节|
|
||||
|float|[[单精度浮点]]|4字节|
|
||||
|double|[[双精度浮点]]|8字节|
|
||||
|boolean|[[布尔类型]]|4字节|
|
||||
|char|[[字符类型]]|2字节|
|
||||
-
|
||||
@@ -0,0 +1,40 @@
|
||||
- Java是一种强类型的编程语言,任何的变量都必须要有对应的数据类型
|
||||
- 数据类型出现的含义
|
||||
- 规范变量空间的内容
|
||||
- 规范变量控制的大小
|
||||
- 分类
|
||||
- 基本数据类型
|
||||
- 用于存储一些比较简单的数据,内存中存储的是数据本身
|
||||
- [[引用数据类型]]
|
||||
- 用于存储一些结构更加复杂,数据量更大的数据,内存空间中存储的是一个内存空间的地址
|
||||
- **基本数据类型分类**
|
||||
- 整数型
|
||||
- byte
|
||||
- short
|
||||
- int
|
||||
- long
|
||||
- 浮点型
|
||||
- float
|
||||
- double
|
||||
- 字符型
|
||||
- char
|
||||
- 布尔型
|
||||
- boolean
|
||||
- 计算机中默认使用byte作为最小的存储单位
|
||||
- 1字节由8个二进制位构成
|
||||
- |类型|名称|字节占用|取值范围|
|
||||
|byte|[[字节类型]]|1[[字节]]|-128~127|
|
||||
|short|[[短整数类型]]|2字节|-32768~32767|
|
||||
|int|[[整型]]|4字节|-2,147,483,648(-2^31)||
|
||||
|long|[[长整型]]|8字节|1.45E-45|
|
||||
|float|[[单精度浮点]]|4字节|
|
||||
|double|[[双精度浮点]]|8字节|
|
||||
|boolean|[[布尔类型]]|未知,由JVM决定|true&false 默认为false|
|
||||
|char|[[字符类型]]|2字节|
|
||||
- 默认整数类型:int
|
||||
- 默认浮点类型:double
|
||||
- 小结
|
||||
- 两种类型
|
||||
- 基本数据类型
|
||||
- 引用数据类型
|
||||
- 8个基本数据类型
|
||||
@@ -0,0 +1,3 @@
|
||||
- [[字符串]]
|
||||
- [[String]]
|
||||
-
|
||||
23
logseq-java/logseq/bak/pages/字节流/2022-04-21T03_23_01.565Z.md
Normal file
23
logseq-java/logseq/bak/pages/字节流/2022-04-21T03_23_01.565Z.md
Normal file
@@ -0,0 +1,23 @@
|
||||
- 流操作的最小单位
|
||||
- 方向
|
||||
- 输入字节流[[InputStream]]
|
||||
- 输出字节流[[OutputStream]]
|
||||
- [[File]]
|
||||
- ```java
|
||||
File f = new File(path);
|
||||
if(!f.exist()){
|
||||
f.mkdir();
|
||||
}else if(f.isDirectory()){
|
||||
File[] files = f.listFiles
|
||||
if(files != null && files.length > 0){
|
||||
for(File f2:files){
|
||||
boolean flag = f2.isDirectory();
|
||||
System.out.println(f2.getName + ((flag)?"目录":"文件"));
|
||||
}
|
||||
}
|
||||
}else{
|
||||
|
||||
}
|
||||
```
|
||||
- 输入流
|
||||
- FileInputStream]]
|
||||
30
logseq-java/logseq/bak/pages/异常/2022-04-19T12_06_54.975Z.md
Normal file
30
logseq-java/logseq/bak/pages/异常/2022-04-19T12_06_54.975Z.md
Normal file
@@ -0,0 +1,30 @@
|
||||
- 异常处理,是Java[[健壮性]]的体现
|
||||
- 程序在编码或运行过程中,出现的问题
|
||||
- 产生异常的可能性
|
||||
- 用户录入错误数据
|
||||
- 断网
|
||||
- 内存不足
|
||||
- 硬盘空间不足
|
||||
- 程序员乱写代码
|
||||
- 分类
|
||||
- [[错误]]
|
||||
- > 错误,是程序员无法修改代码解决的
|
||||
- 内存不足
|
||||
- 硬盘空间不足
|
||||
- 网络无法访问
|
||||
- [[编译异常]]
|
||||
- > 程序员写代码时,由[[编译器]]发现的异常
|
||||
- 文件找不到
|
||||
- 用户胡乱输入
|
||||
- [[运行异常]]
|
||||
- > 程序在运行中,动态抛出的异常
|
||||
- 空指针
|
||||
- 数组下标越界
|
||||
- 编译异常解决方案
|
||||
- 抓捕异常,直接处理
|
||||
- [[try]][[catch]]
|
||||
- 不抓捕,继续向下抛出
|
||||
- 不抓捕,直接处理 [[throw]] 抛出
|
||||
- 在代码中写throw error;在函数后加上throws ParseException
|
||||
- 之要代码中使用了throws抛出异常,那么对应的方法就会被弹出方法栈
|
||||
-
|
||||
@@ -0,0 +1,14 @@
|
||||
- 异常的捕获,只针对编译异常
|
||||
- {{embed [[try-catch-finally]]}}
|
||||
- [[finally]]
|
||||
- 不管成功还是失败都要执行的代码
|
||||
- 多个[[catch]]块的问题
|
||||
- ```java
|
||||
try{
|
||||
|
||||
}catch (error e){
|
||||
|
||||
}catch (error f){
|
||||
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,14 @@
|
||||
- 高类型数据转低类型数据不能直接转
|
||||
- 如果要转换,需要指定转换的数据类型
|
||||
- 数据溢出
|
||||
- 转换时高数据类型的值超出低数据类型的范围
|
||||
- 溢出后会从最低值到最高值循环,直到未超出范围
|
||||
- 精度丢失
|
||||
- 高类型转低类型时,精度会丢失
|
||||
- double-->float
|
||||
- 丢失小数点7位之后的部分
|
||||
- double/float-->int
|
||||
- 丢失小数点后的部分
|
||||
- 自动提升
|
||||
- 参与运算的整数类型,小于int会自动提升为int类型,int+int为int类型,不能直接转型为byte
|
||||
- 参与运算的最高类型为最终运算的结果的类型
|
||||
34
logseq-java/logseq/bak/pages/抽象类/2022-04-19T01_19_45.126Z.md
Normal file
34
logseq-java/logseq/bak/pages/抽象类/2022-04-19T01_19_45.126Z.md
Normal file
@@ -0,0 +1,34 @@
|
||||
- [[抽象]]
|
||||
- 具有 [[抽象方法]] 的类
|
||||
- 具有抽象方法的必须是抽象类
|
||||
id:: 6254e692-cdf6-43ff-a045-637b1253591c
|
||||
- 抽象类无法被实例化,因为有方法不确定,无法用[[new]]使用
|
||||
- 抽象类中的方法一定要让子类实现
|
||||
id:: 6254e7f4-1f9b-4da4-bca3-af5b328ff3e7
|
||||
- ```java
|
||||
public abstract class Girl{
|
||||
public abstract void smile();
|
||||
}
|
||||
```
|
||||
- 特点
|
||||
- ((6254e692-cdf6-43ff-a045-637b1253591c))
|
||||
- 抽象类中不一定要有抽象方法,此时定义抽象类没有多大意义
|
||||
- ((6254e7f4-1f9b-4da4-bca3-af5b328ff3e7)),通过[[abstract]]关键字定义,不实现会报错
|
||||
- 子类如果不实现时,将子类也定义为抽象类
|
||||
- 抽象类无法实例化
|
||||
- 可放置元素
|
||||
- 普通类所有元素+抽象方法
|
||||
- 抽象方法
|
||||
- 非抽象方法
|
||||
- 属性
|
||||
- > 抽象类定义属性目的:
|
||||
给子类定义的东西
|
||||
- 构造器
|
||||
- > 抽象类定义构造器目的:
|
||||
给子类定义的东西
|
||||
- 抽象方法,不可定义为[[private]] #Java面试
|
||||
私有代表无法被[[重写]],抽象方法一定要子类重写
|
||||
- 抽象方法不能定义[[static]] #Java面试
|
||||
static方法的调用方式:类名.方法名 意味着这个方法一定有过实现,但是抽象方法没有实现
|
||||
- 抽象方法不可定义为[[final]] #Java面试
|
||||
final定义在方法上不能被重写,但是抽象方法一定要子类重写
|
||||
@@ -0,0 +1,26 @@
|
||||
- 冒泡排序
|
||||
- 特点:
|
||||
每一轮循环后,最大的一个数被交换到末尾,因此,下一轮循环就可以跑相互最后的数,没一轮循环都比上一轮循环的结束位置靠前一位
|
||||
- ```java
|
||||
int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36};
|
||||
System.out.println(Arrays.toString(ns));
|
||||
for (int i = 0; i < ns.length - 1; i++){
|
||||
for(int j = 0; j <ns.length - i - 1; j++){
|
||||
if(ns[j] > ns[j+1]){
|
||||
int tmp = ns[j]; //交换时要先定义一个临时变量
|
||||
ns[j] = ns[j+1];
|
||||
ns[j+1] = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
System.out.println(Arrays.toString[ns])
|
||||
```
|
||||
- 使用JDK提供的Arrays.sort()
|
||||
- ```java
|
||||
import java.util.Arrays;
|
||||
|
||||
nt[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36};
|
||||
Arrays.sort(ns);
|
||||
System.out.println(Arrays.toStrint(ns));
|
||||
```
|
||||
-
|
||||
@@ -0,0 +1,3 @@
|
||||
- 占四个字节内存空间,共32位
|
||||
- 取值$-2^31$~$2^31$
|
||||
-
|
||||
@@ -0,0 +1,2 @@
|
||||
- 在创建对象时候初始化里面的值
|
||||
id:: 6253973f-838a-4d3e-a33b-e42497af6185
|
||||
22
logseq-java/logseq/bak/pages/构造器/2022-04-19T01_19_45.362Z.md
Normal file
22
logseq-java/logseq/bak/pages/构造器/2022-04-19T01_19_45.362Z.md
Normal file
@@ -0,0 +1,22 @@
|
||||
- [[构造方法]]
|
||||
- 作用
|
||||
- 配合 [[new]] 关键字,创建对象的实例
|
||||
- 编译器会自动的在类中,给每个类产生一个无参构造方法
|
||||
- 自己定义
|
||||
- ```java
|
||||
public Book(){
|
||||
|
||||
}
|
||||
```
|
||||
- 方法名用类名一致
|
||||
- 无任何返回值,无void
|
||||
- [[无参构造器]]
|
||||
- [[有参构造器]]
|
||||
- 作用
|
||||
- ((62539750-497b-42e9-965e-d1d4ddf2888a))
|
||||
id:: 6253975b-b401-45c2-90c9-693d59ebc80a
|
||||
- 注意
|
||||
- 写有参时要先写一个无参构造器
|
||||
- 编译器发现构建了有参构造器就不会自动创建无参构造器
|
||||
-
|
||||
-
|
||||
97
logseq-java/logseq/bak/pages/标识符/2022-04-19T01_19_45.398Z.md
Normal file
97
logseq-java/logseq/bak/pages/标识符/2022-04-19T01_19_45.398Z.md
Normal file
@@ -0,0 +1,97 @@
|
||||
- 标识符
|
||||
- 任何一种编程语言,都是由一些符号构成
|
||||
- 单词,特殊符号
|
||||
- 有的系统默认,默认标识符称为关键字,非系统默认成为自定义标识符
|
||||
- Java中的关键字
|
||||
- 共50个
|
||||
|关键字|||||
|
||||
|abstract|char|class|const|continue|
|
||||
|catch|do|double|else|extends|
|
||||
|default|boolean|break|byte|case|
|
||||
|assert|final|finally|float|for|
|
||||
|goto|ig|implements|import|instanceof|
|
||||
|strictfp|package|private|protected|public|
|
||||
- 类别 关键字 说明
|
||||
访问控制 private 私有的
|
||||
protected 受保护的
|
||||
public 公共的
|
||||
default 默认
|
||||
类、方法和变量修饰符 abstract 声明抽象
|
||||
class 类
|
||||
extends 扩充,继承
|
||||
final 最终值,不可改变的
|
||||
implements 实现(接口)
|
||||
interface 接口
|
||||
native 本地,原生方法(非 Java 实现)
|
||||
new 新,创建
|
||||
static 静态
|
||||
strictfp 严格,精准
|
||||
synchronized 线程,同步
|
||||
transient 短暂
|
||||
volatile 易失
|
||||
程序控制语句 break 跳出循环
|
||||
case 定义一个值以供 switch 选择
|
||||
continue 继续
|
||||
default 默认
|
||||
do 运行
|
||||
else 否则
|
||||
for 循环
|
||||
if 如果
|
||||
instanceof 实例
|
||||
return 返回
|
||||
switch 根据值选择执行
|
||||
while 循环
|
||||
错误处理 assert 断言表达式是否为真
|
||||
catch 捕捉异常
|
||||
finally 有没有异常都执行
|
||||
throw 抛出一个异常对象
|
||||
throws 声明一个异常可能被抛出
|
||||
try 捕获异常
|
||||
包相关 import 引入
|
||||
package 包
|
||||
基本类型 boolean 布尔型
|
||||
byte 字节型
|
||||
char 字符型
|
||||
double 双精度浮点
|
||||
float 单精度浮点
|
||||
int 整型
|
||||
long 长整型
|
||||
short 短整型
|
||||
变量引用 super 父类,超类
|
||||
this 本类
|
||||
void 无返回值
|
||||
保留关键字 goto 是关键字,但不能使用
|
||||
const 是关键字,但不能使用
|
||||
- > goto const是java中不常用的关键字
|
||||
goto 跳转指针,Java不操作指针
|
||||
const定义常量,但是Java中的final替换掉了
|
||||
- 3个保留关键字
|
||||
- true
|
||||
- false
|
||||
- null
|
||||
- 自定义标识符
|
||||
- > 代码中不会变颜色的符号
|
||||
- 类的类名
|
||||
- 方法的方法名
|
||||
- 变量名
|
||||
- 参数名
|
||||
- SUN公司定义规则
|
||||
- 标识符组成由数字,大小写字母,下划线,美元符号组成
|
||||
- 不能数字开头,严格区分大小写,长度不限
|
||||
- 不能是关键字
|
||||
- 行业潜规则
|
||||
- 类的类名,方法的方法名,变量的变量名,参数的参数名,在定义时遵守"驼峰命名法"
|
||||
- 类的类名遵从大驼峰,单词首字母大写
|
||||
- 方法的方法名,变量的变量名,参数的参数名,遵守"小驼峰"
|
||||
- 第一个首字母小写,单词之间首字母大写
|
||||
- 标识符在定义时,要见名知意
|
||||
- 常量的名字单词全大写,单词之间使用_分割
|
||||
- ```java
|
||||
final double MATH_PI = 3.14;
|
||||
```
|
||||
- 
|
||||
- 小结
|
||||
- 标识符可分为关键字和自定义标识符
|
||||
- 关键字50个
|
||||
- 大驼峰
|
||||
- 小驼峰
|
||||
@@ -0,0 +1,17 @@
|
||||
- > println是peint line的缩写,表示输出后换行,不换行可以用print()
|
||||
- ### 格式化输出System.out.printf()
|
||||
- ```java
|
||||
double d = 3.1415926
|
||||
System.out.printf("%.2f\n",d);
|
||||
System.out.printf("%.2f\n",d);
|
||||
```
|
||||
- |占位符|说明|
|
||||
|%d|格式化输出整数|
|
||||
|%x|格式化输出十六进制整数|
|
||||
|%f|格式化输出浮点数|
|
||||
|%e|格式化输出科学计数法表示的浮点数|
|
||||
|%s|格式化字符串|
|
||||
- > 由于%表述占位符,因此,两个%%表示一个%字符本身
|
||||
- JDK格式化参数模板[java.util.Formatter](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Formatter.html#syntax)
|
||||
-
|
||||
-
|
||||
@@ -0,0 +1,554 @@
|
||||
- ## 一阶段
|
||||
- ### 1.1 集合
|
||||
collapsed:: true
|
||||
- 1. [[HashMap和ConcurrentHashMap的区别]]
|
||||
- 2. [[线程安全的集合有哪些]]
|
||||
- 3. [[如何做到集合变遍历,边删除]]
|
||||
- 4. [[HashMap的底层原理是什么,如何扩容,并解决Hash碰撞的]]
|
||||
- 5. [[HashMap在什么情况下单链表需要转为红黑树]]
|
||||
- 6. [[ConcurrentHashMap为什么是线程安全的,如何做到的]]
|
||||
- 7. [[是否写过HashMap的底层,了解过什么]]
|
||||
- 8. [[Collection集合和Map体系集合的区别]]
|
||||
- 9. [[HashMap在JDK1.7和JDK1.8的区别]]
|
||||
- 10. [[HashSet的去重原理]]
|
||||
- 11. [[写个时间复杂度为O(n)的算法,找到一个数列第二大的数]]
|
||||
- 12. [[Collection 和 Collections 的区别是啥]]
|
||||
- 13. [[如何获得Map集合中的所有的Key]]
|
||||
- 14. [[HashMap 什么情况下会产生死锁的问题如何解决]]
|
||||
- 15. [[如何使用jdk1.8新特性从商品集合中单独把某一个字段(比如id)拿出来当做一个集合]]
|
||||
- 16. [[ArrayList和LinkedList的区别]]
|
||||
- 17. [[遍历Set和List的通用方法]]
|
||||
- 18. [[有几种方法可以遍历JAVA集合]]
|
||||
- 19. [[ArrayList哪些操作效率较高]]
|
||||
- 20. [[HashMap为什么要重写hashcode]]
|
||||
- 21. [[JDK中有哪些队列]]
|
||||
- 22. [[HashMap 和 Hashtable 有什么区别]]
|
||||
- 23. [[List、Set、map区别]]
|
||||
- 24. [[HashMap的put方法的执行过程]]
|
||||
- 25. [[分析HashMap为什么线程不安全]]
|
||||
- 26. [[集合的分类,分别的特性是哪些]]
|
||||
- 27. [[给你一个数值类型数组,如何以最快的方式,查找到某一个元素]]
|
||||
- 28. [[编程题,给你一个整数数组,进行排序,输入一个k,从小到大输出k个数]]
|
||||
- 29. [[有个数组,如何颠倒所有的元素]]
|
||||
- 30. [[银行系统,我给你168的数字,你应该给我多少张不同面额的人民币(口述如何实现)]]
|
||||
- 31. [[HashMap的底层是如何解决Hash碰撞的]]
|
||||
- 32. [[Collection 和 Collections 有什么区别]]
|
||||
- 33. [[数组,链表,哪个查询效率高,为什么高]]
|
||||
- 34. [[CurrentHashMap的在JDK1.7和1.8期间分别的特征]]
|
||||
- 35. [[自旋锁的特征]]
|
||||
- 36. [[遍历Set和List的通用方法]]
|
||||
- 37. [[数组的排序算法,你都知道哪些请列举并手写一个出来]]
|
||||
- ### 1.2 多线程
|
||||
collapsed:: true
|
||||
- 1. [[进程与线程的区别]]
|
||||
- 2. [[为什么要用多线程]]
|
||||
- 3. [[多线程的创建方式有哪些]]
|
||||
- 4. [[是继承Thread类好,还是实现Runnable接口好]]
|
||||
- 5. [[ThreadLocal类是什么类]]
|
||||
- 6. [[你项目中的哪些地方使用到多线程]]
|
||||
- 7. [[什么是线程安全]]
|
||||
- 8. [[如何解决多线程间线程安全问题]]
|
||||
- 9. [[为什么使用同步或锁,就可以让多线程解决线程安全问题]]
|
||||
- 10. [[什么是线程同步]]
|
||||
- 11. [[什么是同步代码块]]
|
||||
- 12. [[同步代码块和同步函数之间有什么区别]]
|
||||
- 13. [[同步函数和静态同步函数之间有什么区别]]
|
||||
- 14. [[什么是多线程死锁]]
|
||||
- 15. [[wait() 和notify() 方法的区别]]
|
||||
- 16. [[同步与异步的区别]]
|
||||
- 17. [[线程的生命周期]]
|
||||
- 18. [[线程同步的几个方法]]
|
||||
- 19. [[并发与并行的区别]]
|
||||
- 20. [[关于多线程锁升级的理解]]
|
||||
- 21. [[怎么理解过程一致性和结果一致性]]
|
||||
- 22. [[synchronized与Lock锁的区别]]
|
||||
- 23. [[同步方法与同步块的区别]]
|
||||
- 24. [[什么是线程池它的作用是什么]]
|
||||
- 25. [[线程池有哪些核心参数]]
|
||||
- 26. [[synchronized与乐观锁的区别]]
|
||||
- 27. [[你是怎么创建线程池的]]
|
||||
- 28. [[线程的原子性是什么]]
|
||||
- 29. [[说说你对线程的3个特性(原子,可见,有序)的理解]]
|
||||
- 30. [[sleep()和wait() 的区别]]
|
||||
- 31. [[如何停止一根线程]]
|
||||
- 32. [[什么是守护线程,如何做到]]
|
||||
- 33. [[yield() 与 join() 方法的区别]]
|
||||
- 34. [[什么是Volatile,它的作用是什么]]
|
||||
- 35. [[什么是AtomicInteger]]
|
||||
- 36. [[你都知道哪些锁]]
|
||||
- 提示:自旋锁,可重入锁,互斥锁,悲观锁,乐观锁,偏向锁,轻量级锁,重量级锁
|
||||
- 37. [[线程是如何开始的]]
|
||||
- 38. [[守护线程是什么如何实现]]
|
||||
- 39. [[JDK1.8 针对synchronized,都做过哪些优化]]
|
||||
- ### 1.3 JVM
|
||||
collapsed:: true
|
||||
- 1. [[请说下Java的内存模型,也就是JMM]]
|
||||
- Java内存模型(JMM):JVM规范中定义了Java的内存模型(Java Memory Model,JMM),
|
||||
- JMM主要分为2个部分:主内存以及每个线程的本地内存。
|
||||
- 
|
||||
- JVM中运行的每个线程都拥有自己的线程栈,线程栈包含了当前线程执行的方法调用相关信息,我们也把它称作调用栈。随着代码的不断执行,调用栈会不断变化。共享的对象我们会放置在堆中!
|
||||
- 
|
||||
- 现在的电脑,一般都是多CPU的。那么多个CPU如何操作内存呢
|
||||
- 现代计算机一般都有2个以上CPU,而且每个CPU还有可能包含多个核心。因此,如果我们的应用是多线程的话,这些线程可能会在各个CPU核心中并行运行。
|
||||
- 
|
||||
- 在CPU内部有一组CPU寄存器,也就是CPU的储存器。CPU操作寄存器的速度要比操作计算机主存快的多。在主存和CPU寄存器之间还存在一个CPU缓存,CPU操作CPU缓存的速度快于主存但慢于CPU寄存器。某些CPU可能还有多个缓存层(一级缓存和二级缓存)。计算机的主存也称作RAM,所有的CPU都能够访问主存,而且主存比上面提到的缓存和寄存器大很多。
|
||||
- 当一个CPU需要访问主存时,会先读取一部分主存数据到CPU缓存,进而在读取CPU缓存到寄存器。当CPU需要写数据到主存时,同样会先flush寄存器到CPU缓存,然后再在某些节点把缓存数据flush到主存
|
||||
- 2. [[请说下JVM的运行时的内存结构]]
|
||||
- JDK1.8以前:
|
||||
- 
|
||||
- JDK1.8以后:
|
||||
- 
|
||||
- JDK1.8中,移除了方法区的概念,将类的类信息等元数据使用元数据区(或者叫:元空间)来进行存储。
|
||||
- 但是程序计数器,本地方法栈,线程栈这3个部分,依旧是线程所独有!堆,元空间还是被线程所共享!
|
||||
- 3. [[JVM虚拟机的原理]]
|
||||
- 提示:就是一台虚拟的机器。同样是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机,大名鼎鼎的Visual Box、Vmware就属于系统虚拟机,他们完全是对物理计算的仿真,提供了一个可以运行完整操作系统的软件平台。
|
||||
- 程序虚拟机典型代码就是Java虚拟机,它专门为执行单个计算程序而计算,在Java虚拟机中执行的指令我们成为Java自己码指令。无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。目前Java使用最广泛的是HotSpot虚拟机。
|
||||
- 4. [[什么是虚拟机参数配置 你是否配置过 在哪里配置]]
|
||||
- 提示:
|
||||
- 虚拟机参数配置,其实就是围绕着堆、栈、方法区的内存空间大小进行配置。
|
||||
- 其目的:就是为了更高效,更合理的利用虚拟机,减少FullGC的次数,提升内存的利用率
|
||||
- 配置方式多种:可在tomcat的bin目录下的catalina.bat中配置,也可以在开发工具中配置
|
||||
- 5. [[都有哪些堆的参数,可以配置]]
|
||||
- 提示:
|
||||
- -XX:+PrintGC 每次触发GC的时候打印相关日志
|
||||
- -XX:+UseSerialGC 串行回收
|
||||
- -XX:+PrintGCDetails 更详细的GC日志
|
||||
- -Xms 堆初始值
|
||||
- -Xmx 堆最大可用值
|
||||
- -Xmn 新生代堆最大可用值
|
||||
- -XX:SurvivorRatio 用来设置新生代中eden空间和from/to空间的比例.
|
||||
- 含以-XX:SurvivorRatio=eden/from=den/to
|
||||
- 总结:在实际工作中,我们可以直接将初始的堆大小与最大堆大小相等,
|
||||
- 这样的好处是可以减少程序运行时垃圾回收次数,从而提高效率。
|
||||
- -XX:SurvivorRatio 用来设置新生代中eden空间和from/to空间的比例.
|
||||
- 6. [[如何设置最大堆空间大小]]
|
||||
- 提示:
|
||||
- 参数: -Xms20m -Xmx20m -XX:+PrintGCDetails -XX:+UseSerialGC -XX:+PrintCommandLineFlags
|
||||
- 7. [[设置新生代与老年代优化参数]]
|
||||
- 提示:
|
||||
- -Xmn 新生代大小,一般设为整个堆的1/3到1/4左右
|
||||
- -XX:SurvivorRatio 设置新生代中eden区和from/to空间的比例关系n/1 默认是8:1:1
|
||||
- 参数: -Xms20m -Xmx20m -Xmn5m -XX:SurvivorRatio=8 -XX:+PrintGCDetails -XX:+UseSerialGC
|
||||
- 8. [[设置新生与老年代代参数]]
|
||||
- 提示:
|
||||
- -Xms20m -Xmx20m -XX:SurvivorRatio=8 -XX:+PrintGCDetails -XX:+UseSerialGC
|
||||
- -XX:NewRatio=2
|
||||
- 总结:不同的堆分布情况,对系统执行会产生一定的影响,在实际工作中,
|
||||
- 应该根据系统的特点做出合理的配置,基本策略:尽可能将对象预留在新生代,
|
||||
- 减少老年代的GC次数。
|
||||
- 除了可以设置新生代的绝对大小(-Xmn),可以使用(-XX:NewRatio)设置新生代和老年
|
||||
- 代的比例:-XX:NewRatio=老年代/新生代
|
||||
- 9. [[内存溢出你是咋解决的]]
|
||||
- 提示:
|
||||
- 错误原因: java.lang.OutOfMemoryError: Java heap space
|
||||
- 解决办法:设置堆内存大小 -Xms1m -Xmx70m -XX:+HeapDumpOnOutOfMemoryError
|
||||
- 10. [[栈溢出你是咋解决的]]
|
||||
- 提示:
|
||||
- 错误原因: java.lang.StackOverflowError
|
||||
- 栈溢出 产生于递归调用,循环遍历是不会的,但是循环方法里面产生递归调用, 也会发生栈溢出。
|
||||
- 解决办法:设置线程最大调用深度
|
||||
- -Xss5m 设置最大调用深度
|
||||
- 11. [[Tomcat内存溢出在catalina.sh 修改JVM堆内存大小]]
|
||||
- 提示:
|
||||
- JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m"
|
||||
- 12. [[内存泄漏与内存溢出的区别]]
|
||||
- 提示:
|
||||
- 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
|
||||
- 内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
|
||||
- memory leak会最终会导致out of memory!
|
||||
- 内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。
内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。这就是溢出!比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出.
以发生的方式来分类,内存泄漏可以分为4类:
1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
4. 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。
从用户使用程序的角度来看,内存泄漏本身不会产生什么危害,作为一般的用户,根本感觉不到内存泄漏的存在。真正有危害的是内存泄漏的堆积,这会最终消耗尽系统所有的内存。从这个角度来说,一次性内存泄漏并没有什么危害,因为它不会堆积,而隐式内存泄漏危害性则非常大,因为较之于常发性和偶发性内存泄漏它更难被检测到
|
||||
- 13. [[JVM参数调优的总结]]
|
||||
- 提示:
|
||||
- 在JVM启动参数中,可以设置跟内存、垃圾回收相关的一些参数设置,默认情况不做任何设置JVM会工作的很好,但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能。通过设置我们希望达到一些目标:
|
||||
- 1. GC的时间足够的小
|
||||
- 2. GC的次数足够的少
|
||||
- 3. 发生Full GC的周期足够的长
|
||||
- 前两个目前是相悖的,要想GC时间小必须要一个更小的堆,要保证GC次数足够少,必须保证一个更大的堆,我们只能取其平衡。
|
||||
- 1. 针对JVM堆的设置,一般可以通过-Xms -Xmx限定其最小、最大值,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,我们通常把最大、最小设置为相同的值
|
||||
- 2. 年轻代和年老代将根据默认的比例(1:2)分配堆内存,可以通过调整二者之间的比率NewRadio来调整二者之间的大小,也可以针对回收代,比如年轻代,通过 -XX:newSize -XX:MaxNewSize来设置其绝对大小。同样,为了防止年轻代的堆收缩,我们通常会把-XX:newSize -XX:MaxNewSize设置为同样大小
|
||||
- 3. 年轻代和年老代设置多大才算合理 毫无疑问是没有答案的,否则也就不会有调优。我们观察一下二者大小变化有哪些影响
|
||||
- 1. 更大的年轻代必然导致更小的年老代,大的年轻代会延长普通GC的周期,但会增加每次GC的时间;小的年老代会导致更频繁的Full GC
|
||||
- 2. 更小的年轻代必然导致更大年老代,小的年轻代会导致普通GC很频繁,但每次的GC时间会更短;大的年老代会减少Full GC的频率
|
||||
- 3. 如何选择应该依赖应用程序对象生命周期的分布情况:如果应用存在大量的临时对象,应该选择更大的年轻代;如果存在相对较多的持久对象,年老代应该适当增大。但很多应用都没有这样明显的特性,在抉择时应该根据以下两点:
|
||||
- 1. 本着Full GC尽量少的原则,让年老代尽量缓存常用对象,JVM的默认比例1:2也是这个道理
|
||||
- 2. 通过观察应用一段时间,看其他在峰值时年老代会占多少内存,在不影响Full GC的前提下,根据实际情况加大年轻代,比如可以把比例控制在1:1。但应该给年老代至少预留1/3的增长空间
|
||||
- ### 1.4 GC
|
||||
collapsed:: true
|
||||
- 1. [[说说你对Java的GC回收机制的理解]]
|
||||
- 提示:
|
||||
- Java语言有个特征:安全性,就是指Java程序员摆脱了C++ 程序员关于内存管理的问题。使得Java程序员在编写程序时,不需要通过指针操作内存,同时也不需要再去关注内存何时将会被回收清理。这一切,都是因为有的GC回收机制的功劳。
|
||||
- ### 1.5 MySQL
|
||||
collapsed:: true
|
||||
- 1. [[项目中SQL调优的场景有哪些,数据库调优如何做]]
|
||||
- 2. [[最多有过几张表的连表处理]]
|
||||
- 3. [[为什么选择MySQL5.7,而不用5.5 5.6]]
|
||||
- 4. [[数据库中Btree 与Hash索引的区别]]
|
||||
- 5. [[什么是数据库回表,如何避免回表查询]]
|
||||
- 6. [[InnoDB的行级锁什么情况下会使用]]
|
||||
- 7. [[数据库中如何快速插入100W级数据]]
|
||||
- 8. [[联合索引与普通索引的区别在哪里]]
|
||||
- 9. [[有张100W级的表中存在大量的重复数据,如何快速去重]]
|
||||
- 10. [[数据库中复合索引的字段中可以有null值吗]]
|
||||
- 11. [[数据库中两张表如何要联合查询,要如何实现]]
|
||||
- 12. [[mysql数据库索引是用什么数据结构存储的]]
|
||||
- 13. [[事务在什么情况下会失效]]
|
||||
- 14. [[怎么用Sql语句复制另一张表]]
|
||||
- 15. [[数据库连表查询,左外联,右外联,内联查的区别]]
|
||||
- 16. [[sql语句过慢怎么定位问题]]
|
||||
- 17. [[说一下JDBC在连接数据库的操作上几个步骤]]
|
||||
- 18. [[Like 后 加% 和 加_ 的区别在哪里]]
|
||||
- 19. [[说一下事务的隔离级别和事务的传播性质]]
|
||||
- 20. [[说一下怎么防止超卖,SQL怎么写]]
|
||||
- 21. [[如果给你一个功能,你觉得从数据库设计开始的思路是什么]]
|
||||
- 22. [[说一下 ACID 是什么]]
|
||||
- 23. [[数据库用户ID主键策略]]
|
||||
- 24. [[数据库的执行计划]]
|
||||
- 25. [[JDBC如何提升读取数据的性能]]
|
||||
- 26. [[select count(*) ,select count(1),select count(字段) 说一下区别]]
|
||||
- 27. [[索引失效的场景有哪些]]
|
||||
- 28. [[数据库的SQL语句如何加锁]]
|
||||
- 29. [[数据库中哪些字段适合加索引 ,哪些不适合加索引]]
|
||||
- 30. [[什么是聚簇索引,什么是非聚簇索引]]
|
||||
- 31. [[Union 和 union all 的区别是什么]]
|
||||
- 32. [[什么是SQL注入,如何防止]]
|
||||
- 33. [[关闭连接一定能成功吗 怎么保证一定成功关闭连接]]
|
||||
- 34. [[有哪些地方必须关闭资源]]
|
||||
- 35. [[有没有设计过数据库 数据库三范式讲一下]]
|
||||
- 36. [[In 与 exits 的区别是什么]]
|
||||
- 37. [[MySQL中存储引擎InnoDB,MyIsam的区别在哪里]]
|
||||
- 38. [[MySQL中锁机制]]
|
||||
- 39. [[数据库中复合索引的字段中可以有null值吗]]
|
||||
- 40. [[MySQL数据库的my.ini文件中可以配置什么参数]]
|
||||
- 答:在mysql的安装根目录中,创建一个文件my.ini编写以下内容:
|
||||
- ```ini
|
||||
#client mysql 都是设置客户端
|
||||
[client]
|
||||
#port参数表示的是MySQL数据库的端口,默认的端口是3306
|
||||
port=3306
|
||||
[mysql]
|
||||
#default-character-set参数是客户端默认的字符集
|
||||
default-character-set=utf8
|
||||
#mysqld 设置服务端
|
||||
[mysqld]
|
||||
#port参数也是表示数据库的端口
|
||||
port=3306
|
||||
#basedir参数表示MySQL的安装路径
|
||||
basedir="C:/Program Files/MySQL/MySQL Server 5.7/"
|
||||
#datadir参数表示MySQL数据文件的存储位置,也是数据库表的存放位置
|
||||
datadir="C:/ProgramData/MySQL/MySQL Server 5.7/Data/"
|
||||
#default-character-set参数表示默认的字符集,这个字符集是服务器端的
|
||||
character-set-server=utf8
|
||||
#default-storage-engine参数默认的存储引擎
|
||||
default-storage-engine=INNODB
|
||||
#sql-mode参数表示SQL模式的参数,通过这个参数可以设置检验SQL语句的严格程度
|
||||
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
|
||||
#max_connections参数表示允许同时访问MySQL服务器的最大连接数(默认151,最大值16384),其中一个连接是保留的,留给管理员专用的
|
||||
max_connections=1000
|
||||
#query_cache_size参数表示查询时的缓存大小,缓存中可以存储以前通过select语句查询过的信息,再次查询时就可以直接从缓存中拿出信息
|
||||
query_cache_size=0
|
||||
#table_cache参数表示所有进程打开表的总数
|
||||
table_cache=256
|
||||
#tmp_table_size参数表示内存中临时表的总数
|
||||
tmp_table_size=35M
|
||||
#thread_cache_size参数表示保留客户端线程的缓存
|
||||
thread_cache_size=8
|
||||
#myisam_max_sort_file_size参数表示MySQL重建索引时所允许的最大临时文件的大小
|
||||
myisam_max_sort_file_size=100G
|
||||
#myisam_sort_buffer_size参数表示重建索引时的缓存大小
|
||||
myisam_sort_buffer_size=69M
|
||||
#key_buffer_size参数表示关键词的缓存大小
|
||||
key_buffer_size=55M
|
||||
#read_buffer_size参数表示MyISAM表全表扫描的缓存大小
|
||||
read_buffer_size=64K
|
||||
#read_rnd_buffer_size参数表示将排序好的数据存入该缓存中
|
||||
read_rnd_buffer_size=256K
|
||||
#sort_buffer_size参数表示用于排序的缓存大小
|
||||
sort_buffer_size=256K
|
||||
#innodb_additional_mem_pool_size参数表示附加的内存池,用来存储InnoDB表的内容
|
||||
innodb_additional_mem_pool_size=3M
|
||||
#innodb_flush_log_at_trx_commit参数是设置提交日志的时机,若设置为1,
|
||||
#InnoDB会在每次提交后将事务日志写到磁盘上
|
||||
innodb_flush_log_at_trx_commit=1
|
||||
#innodb_log_buffer_size参数表示用来存储日志数据的缓存区的大小
|
||||
innodb_log_buffer_size=2M
|
||||
#innodb_buffer_pool_size参数表示缓存的大小,InnoDB使用一个缓冲池类保存索引和原始数据
|
||||
innodb_buffer_pool_size=107M
|
||||
#innodb_log_file_size参数表示日志文件的大小
|
||||
innodb_log_file_size=54M
|
||||
#innodb_thread_concurrency参数表示在InnoDB存储引擎允许的线程最大数
|
||||
innodb_thread_concurrency=18
|
||||
```
|
||||
- ### 1.6 Mybatis
|
||||
- 1. [[#{} 与 ${} 的区别]]
|
||||
- 2. [[Mybatis的实现原理]]
|
||||
- 3. [[Mybatis级联的配置]]
|
||||
- 4. [[Mybatis的一二级缓存是什么样的]]
|
||||
- 5. [[Mybits的缺点有哪些]]
|
||||
- 6. [[Mybatis如何防止SQL注入]]
|
||||
- ### 1.7 网络编程
|
||||
- 1. [[什么是Socket编程]]
|
||||
- 2. [[TCP与UDP在概念上的区别]]
|
||||
- 3. [[TCP协议的特点,你能说说吗 具体说说3次握手,4次挥手的过程]]
|
||||
- 4. [[OSI七层模型,大概了解么]]
|
||||
- ### 1.8 设计原则与设计模式
|
||||
- 1. [[7大设计原则有哪些]]
|
||||
- 2. [[什么是设计模式,有多少个]]
|
||||
- 3. [[单例设计模式,你会手写么 在项目中哪些地方有应用]]
|
||||
- 4. [[代理设计模式中,静态代理和动态代理的区别]]
|
||||
- 5. [[动态代理中JDK代理和CGLIB代理区别 代理模式,在项目中哪些地方有应用]]
|
||||
- 6. [[工厂设计模式的作用 简单工厂会写不 在项目中哪些地方有应用]]
|
||||
- 7. [[如何克隆一个对象 浅克隆与深克隆区别在哪里]]
|
||||
- 8. [[设计模式中,工厂设计模式有啥用 项目中在哪些地方用过]]
|
||||
- ### 1.9 其它题目
|
||||
- 1. [[异常的分类,如何自定义异常]]
|
||||
- 2. [[普通类和抽象类有哪些区别]]
|
||||
- 3. [[讲讲类的加载过程以及双亲委派机制]]
|
||||
- 4. [[JDK1.8的新特性,你都用过哪些]]
|
||||
- 5. [[网络通讯中tcp协议,udp协议的区别]]
|
||||
- 6. [[普通类和抽象类的区别 接口和抽象的区别]]
|
||||
- 7. [[常用操作字符串有哪些类 StringBuffer,StringBuilder]]
|
||||
- 8. [[String,StringBuffer及StringBuilder的区别]]
|
||||
- 9. [[如何跳出多重循环]]
|
||||
- 10. [[什么是反射]]
|
||||
- 11. [[final 在 Java 中有什么作用]]
|
||||
- 12. [[说一下你熟悉的设计模式]]
|
||||
- 13. [[谈谈面向对象]]
|
||||
- 14. [[谈谈多线程并发]]
|
||||
- 15. [[什么是Java的反射]]
|
||||
- 16. [[Java的反射,在哪些地方有过应用]]
|
||||
- 17. [[反射获得Class对象的3种方式]]
|
||||
- 18. [[反射操作私有属性时,需要注意什么]]
|
||||
- 19. [[抽象类可以继承实体类么]]
|
||||
- 20. [[抽象类可以继承接口么]]
|
||||
- 21. [[接口可以继承抽象类么]]
|
||||
- 22. [[IO流的分类有哪些]]
|
||||
- 23. [[谈谈BIO,NIO,AIO的区别是什么,你都用过哪些IO框架]]
|
||||
- 24. [[Object类的常见方法都有哪些]]
|
||||
- 25. [[Java中异常的分类,分别说说都哪些具体的异常]]
|
||||
- 26. [[遇到BUG,你是如何调试的]]
|
||||
- 27. [[如果运行结果跟预期不一样,但是代码没报错,怎么处理]]
|
||||
- 28. [[有没有用过断点调试 怎么用的]]
|
||||
- 29. [[JDK,JRE,JVM的区别]]
|
||||
- 30. [[重写和重载的区别在哪里]]
|
||||
- ## 二阶段
|
||||
- ### 2.1 Spring
|
||||
- 1. [[对springIOC的理解]]
|
||||
- 2. [[讲下springAOP,项目中你是如何应用的]]
|
||||
- 3. [[动态代理模式中JDK与CGLIB的区别]]
|
||||
- 4. [[Spring的循环依赖问题,如何解决]]
|
||||
- 5. [[谈谈你对Spring bean的生命周期的理解]]
|
||||
- 6. [[Spring中对事务的支持,有哪些方式 你项目中如何处理事务]]
|
||||
- 7. [[Spring中bean基本都是单例的,如果一个方法要对bean中的属性值进行修改,这个方法会被多次执行,怎么确保安全]]
|
||||
- 8. [[讲一下浅克隆与深克隆]]
|
||||
- 9. [[@Resource和@Autowired的区别]]
|
||||
- 10. [[介绍一下你的项目AOP日志功能如何实现的]]
|
||||
- 11. [[Spring依赖注入的方式有哪些 有区别么]]
|
||||
- 12. [[Spring的常用注解都有哪些]]
|
||||
- 13. [[Spring 事务实现方式有哪些]]
|
||||
- 14. [[BeanFactory 和 ApplicationContext的区别]]
|
||||
- 15. [[Spring中bean基本都是单例的,如果一个方法要对bean中的属性值进行修改,这个方法会被多次执行,怎么确保安全]]
|
||||
- 16. [[Spring实例化组件时,如何设置属性]]
|
||||
- ### 2.2 SpringMVC
|
||||
- 1. [[SpringMVC框架的工作流程]]
|
||||
- 2. [[forward和redirect的区别]]
|
||||
- 3. [[说一下@requestMapping的作用]]
|
||||
- 4. [[知道拦截器么,你项目中哪里使用过拦截器]]
|
||||
- 5. [[Springmvc 过滤器 拦截器的使用场景和区别是什么]]
|
||||
- ### 2.3 SpringBoot
|
||||
- 1. [[SpringBoot如何实现自动配置 原理是什么]]
|
||||
- 2. [[SpringBoot的web模块自动集成了Tomcat,如何剔除]]
|
||||
- 3. [[说说你常用的几个SpringBoot注解]]
|
||||
- 4. [[你上个项目用的SpringBoot版本是那个版本的]]
|
||||
- 5. [[SpringBoot主要的配置类有哪些]]
|
||||
- 6. [[Spring,Springmvc,SpringBoot的区别是啥]]
|
||||
- 7. [[可不可以配置两个数据源 比如一个mysql和一个oracle 在哪里配置,怎么配置]]
|
||||
- 8. [[SpringBoot在yaml中配置了开发环境配置文件和测试配置文件,有几种方式在不同环境去使用不同的配置文件]]
|
||||
- 9. [[SpringBoot的优点在哪里]]
|
||||
- 10. [[当application.properties,application.yaml,bootstrap.yaml文件同时存在的情况下,它们的执行顺序是怎样的]]
|
||||
- 11. [[Spring的启动流程是怎么样的]]
|
||||
- ### 2.4 Web题
|
||||
- 1. [[HTTPS 通讯协议是如何实现的 它的加密方式是什么]]
|
||||
- 2. [[在HTTP请求中如何存储客户信息(分如何获取和如何存储)]]
|
||||
- 3. [[Ajax怎么实现同步]]
|
||||
- 4. [[你们项目中,使用的什么 数据交换格式]]
|
||||
- 5. [[HTTP通讯协议分为几个部分 请求协议的组成]]
|
||||
- 6. [[JSON的解析框架,你用过什么]]
|
||||
- 7. [[XML与JSON之间的区别]]
|
||||
- 8. [[页面加载很慢,有什么优化方案]]
|
||||
- 9. [[重定向和请求转发的区别是什么]]
|
||||
- 10. [[JSON格式长什么样 那么JSONArray呢]]
|
||||
- 11. [[Servlet的生命周期]]
|
||||
- 12. [[Tomcat如何配置连接池 默认连接数是多少 == 生产环境,Tomcat性能比较差,如何调优]]
|
||||
- 答:修改conf目录下的server.xml即可实现:
|
||||
- ```xml
|
||||
<!--线程池的设置-->
|
||||
<Executor executor="tomcatThreadPool"
|
||||
namePrefix="catalina-exec-"
|
||||
maxThreads="500"
|
||||
minSpareThreads="100"
|
||||
maxSpareThreads="500"
|
||||
prestartminSpareThreads="true"
|
||||
maxQueueSize="10000"
|
||||
/>
|
||||
|
||||
<!--name:连接池名称;
|
||||
namePrefix:连接池创建的每个线程的名称前缀。单个线程的线程名称将为namePrefix + threadNumber;
|
||||
maxThreads:此池中活动线程的最大数量,默认值为200;也就是最大的并发数
|
||||
minSpareThreads:此池中始终保持活动状态的线程最小数量,默认值为25
|
||||
maxSpareThreads;此池中始终保持活动状态的线程最大数量 prestartminSpareThreads:启动连接池,激活最小活跃线程minSpareThreads也同时生效
|
||||
maxQueueSize:HTTP请求的最大的队列长度,默认值是Integer.MAX_VALUE。-->
|
||||
|
||||
<!--连接器的设置-->
|
||||
<Connector
|
||||
port="8080"
|
||||
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
|
||||
connectionTimeout="20000"
|
||||
maxConnections="10000"
|
||||
acceptCount="10000"
|
||||
acceptorThreadCount="2"
|
||||
enableLookups="false"
|
||||
executor="tomcatThreadPool"
|
||||
redirectPort="8443"
|
||||
/>
|
||||
<!--
|
||||
connectionTimeout:连接超时时间,单位是毫秒;
|
||||
maxConnections:服务器在任何给定时间接受和处理的最大连接数。请注意,一旦达到限制,
|
||||
操作系统仍然可以接受基于acceptCount设置的连接。默认值因连接器类型而异。
|
||||
对于NIO和NIO2,默认值为10000.对于APR /本机,默认值为8192;
|
||||
acceptCount:当连接不够时,可以使用队列暂时存放HTTP请求,队列满时收到的任何请求都将被拒绝。默认值是100
|
||||
acceptorThreadCount:每个连接可以获得的线程数,最大不要超过2;
|
||||
enableLookups:是否允许DNS查询;
|
||||
executor:连接池的名字;
|
||||
redirectPort:重定向端口-->
|
||||
```
|
||||
- 13. [[在请求中如何存储客户信息]]
|
||||
- 14. [[如何防止表单重复提交]]
|
||||
- 15. [[HTTP协议中GET与POST提交方法的区别在哪里]]
|
||||
- 16. [[你对RestFul架构风格是如何理解的 平时都是怎么样的]]
|
||||
- ### 2.5 Shiro
|
||||
- 1. [[Shiro的执行流程]]
|
||||
- ## 三阶段
|
||||
- ### 1. RabbitMQ
|
||||
- 请说说消息队列的工作模式有哪些
|
||||
- MQ是如何保证消息不丢失的
|
||||
- MQ的工作原理
|
||||
- 如果保证用户一定能消费成功
|
||||
- 延迟队列,死信队列的区别是什么
|
||||
- 请说说RabbitMQ的优缺点
|
||||
- 延迟队列如何实现
|
||||
- 如果让你自己写个MQ服务器,你的思路是什么 需要使用到什么技术
|
||||
- 如何解决消息延时及过期失效的问题 如果有几百万条消息持续积压几小时,说说怎么解决
|
||||
- 讲一下MQ服务器的推拉模式,你在项目中是如何运用的
|
||||
- rabbitmq怎么实现订单延迟支付
|
||||
- 说一下怎么用rabbitmq实现取消订单的用户积分减少的
|
||||
- MQ是什么 你用过哪个 怎么配置的
|
||||
- Redis
|
||||
- 什么是接口幂等性,如何保证接口幂等性操作
|
||||
- 幂等性问题会出现在哪些地方
|
||||
- Redis支持的数据类型
|
||||
- Redis的持久化方式,以及各自的区别,项目中用的哪一种,怎么配置的
|
||||
- 如何保证与数据库的双写一致性
|
||||
- 缓存穿透,击穿,雪崩对应的解决方案是什么
|
||||
- 使用的Redis是集群的嘛 有多少个节点,采用的是那种集群方案
|
||||
- 说一下Reddis怎么做集群的
|
||||
- Redis 都有哪些使用场景
|
||||
- Redis 有哪些功能
|
||||
- 分布式锁的目的
|
||||
- 为什么要用redis不用map
|
||||
- Redis是原子性的吗 是线程安全的吗 多线程还是单线程
|
||||
- Redis的特性是哪些,可以用来干嘛
|
||||
- 项目中你们部署了多少台Redis服务器,一般配置多少台,熟悉哨兵机制么
|
||||
- 假设你redis里面有9个商品,我现在有10人来买,怎么防止超卖问题
|
||||
- Redis的单线程原理是什么 如果有10个用户同时操作Redis,那么Redis是否按照先后顺序来处理情况
|
||||
- Redis的分布式锁用过没 描述一下
|
||||
- Redis设置永不过期也可以解决缓存击穿,为什么还要用分布式锁
|
||||
- Redis如何保证与数据库的数据一致性问题
|
||||
- 红锁是怎么实现的 原理是什么
|
||||
- 知道Redis的看门狗机制么,为什么要用到看门狗
|
||||
- Redis的5种数据类型,分别的使用场景
|
||||
- Redis集群知道么,如何实现
|
||||
- Redis持久化机制中AOF与RDB区别在哪里
|
||||
- Redis如何配置RDB
|
||||
- ES
|
||||
- ES怎么保持和数据库的一致性
|
||||
- ES怎么配权重 可以做数据库吗
|
||||
- ES实现全文检索的原理是什么
|
||||
- ES查询一个张三,李四。张三名字可能会重复,要按照张三的生日去进行排序,这个ES语句怎么写
|
||||
- Linux
|
||||
- 用过的Linux系统都有哪些 什么版本
|
||||
- chmod 改用户组的权限
|
||||
- 如果你在linux部署的项目出现报错时,你需要定位报错信息在哪怎么做
|
||||
- nginx反向代理原理
|
||||
- Nginx的负载均衡策略
|
||||
- Linux如何查看资源的使用情况
|
||||
- chmod如何改用户组的权限
|
||||
- 3.5.VUE
|
||||
- 1、Vue的生命周期是什么,都有哪些钩子函数
|
||||
- 2、谈谈MVC架构与MVVM架构的区别在哪里
|
||||
- 3、VUE都有哪些组件
|
||||
- 四阶段
|
||||
- SpringCloud
|
||||
- 服务熔断和服务降级,项目是如何运用的
|
||||
- 你们通过哪些手段处理系统的高并发问题
|
||||
- 项目中,关于鉴权你们是咋做的
|
||||
- Nacos 与 Eureka的区别
|
||||
- 分布式事务的原理
|
||||
- 为什么选择Seata来处理分布式事务
|
||||
- 说说项目开发流程
|
||||
- SpringCloud体系的几大组件
|
||||
- 讲一下spring cloud 中的服务注册的机制和配置方法
|
||||
- feign远程调用的时候,如何确保feign接口的参数和controller层方法参数一致
|
||||
- 你觉得SpringCloud相比传统的SpringMVC有什么优势
|
||||
- 说一下熔断器,你怎么用的,代码怎么写的
|
||||
- 做集群的时候事务怎么处理
|
||||
- 网关限流时,采用什么技术,使用什么限流算法 咋配置
|
||||
- 分布式高并发下的订单id是如何生成的
|
||||
- 介绍一下spring,springboot,springcloud
|
||||
- openfeign的工作原理,是如何调用服务的
|
||||
- Feign远程调用的时候,如何确保Feign接口的参数和Controller层方法参数一致
|
||||
- 为什么要使用微服务,它的优缺点
|
||||
- 微服务的搭建步骤
|
||||
- 微服务组件都用过哪些,你们微服务的业务逻辑是什么样子的
|
||||
- Eureka如何搭建,如何才能规避因为网络原因导致客户端大面积下线的情况
|
||||
- Eureka高可用怎么配置
|
||||
- 了解网关么,网关的作用是什么,你都在网关中配置过什么内容
|
||||
- 网关限流如何配置 限流算法都用过哪些
|
||||
- 网关是如何找到其他微服务的
|
||||
- Eureka关闭之后,其他的微服务之间还能调用么
|
||||
- Nginx都配置过什么 如何做负载配置,都哪些负载算法
|
||||
- Ngnix代理配置是在哪个文件
|
||||
- Mysql的ini文件,都有些参数可以配置
|
||||
- Mybatis和MybatisPlus 你在项目中,哪个用的较多
|
||||
- 有哪些方法可以防止微服务接口被攻击
|
||||
- 4.2.Seata
|
||||
- 1、什么是分布式事务,项目中哪些地方遇到分布式事务
|
||||
- 2、什么是2阶段提交,Seata是如何做2阶段提交的
|
||||
- 3、Seata是三大核心组件是哪些,他们分别的作用是什么
|
||||
- 4、Seata的AT模式与TCC模式区别在哪里
|
||||
- 5、AT模式在运行过程中,如何进行2阶段处理的
|
||||
- 6、分布式事务的两个理论特性 是什么
|
||||
- 7、请说一下Seata的执行流程
|
||||
- 4.3.Alibaba组件
|
||||
- 1、说说nacos吧
|
||||
- 2、
|
||||
- 其他问题
|
||||
- 你在项目中遇到的最大问题是什么 如何解决的
|
||||
- 项目部署没有 有没有经过压力测试 有没有经过渗透测试
|
||||
- 用过哪些经典的设计模式,谈谈你对它们的理解
|
||||
- 假如1个接口的QPS只有10,超过10会怎样 如何解决
|
||||
- 在使用git的过程中,遇到冲突,你是如何处理的
|
||||
- 单点登录的实现原理
|
||||
- 如何防止后端接口被攻击
|
||||
- 每天1万人访问主页并发量有多少
|
||||
- 负载均衡怎么实现
|
||||
- 你们开发规范是什么,具体开发流程是什么,需求分析谁做,原型设计怎么来的
|
||||
- 测试怎么做的
|
||||
- 项目中有哪些设计是存在缺陷或者不合理的
|
||||
- 你熟悉秒杀流程 那么秒杀如何保证数据一致性
|
||||
- 你们项目上线前会在哪里测试 怎么部署的 多个环境你该怎么设置
|
||||
- 大佬跟你讲的东西,你怎么判断正不正确
|
||||
- 三层架构是哪三层 具体说说,你知道它们分别对应的架构模式采用的是什么么
|
||||
- 在生成订单过程中,如果MySQL崩了,怎么办
|
||||
- 能详细说下非对称加密的流程吗
|
||||
- 生产环境中应用有问题如何分析问题
|
||||
- GIT回退上个版本,用什么命令 切换分支用哪个命令
|
||||
@@ -0,0 +1,554 @@
|
||||
- ## 一阶段
|
||||
- ### 1.1 集合
|
||||
collapsed:: true
|
||||
- 1. [[HashMap和ConcurrentHashMap的区别]]
|
||||
- 2. [[线程安全的集合有哪些]]
|
||||
- 3. [[如何做到集合变遍历,边删除]]
|
||||
- 4. [[HashMap的底层原理是什么,如何扩容,并解决Hash碰撞的]]
|
||||
- 5. [[HashMap在什么情况下单链表需要转为红黑树]]
|
||||
- 6. [[ConcurrentHashMap为什么是线程安全的,如何做到的]]
|
||||
- 7. [[是否写过HashMap的底层,了解过什么]]
|
||||
- 8. [[Collection集合和Map体系集合的区别]]
|
||||
- 9. [[HashMap在JDK1.7和JDK1.8的区别]]
|
||||
- 10. [[HashSet的去重原理]]
|
||||
- 11. [[写个时间复杂度为O(n)的算法,找到一个数列第二大的数]]
|
||||
- 12. [[Collection 和 Collections 的区别是啥]]
|
||||
- 13. [[如何获得Map集合中的所有的Key]]
|
||||
- 14. [[HashMap 什么情况下会产生死锁的问题如何解决]]
|
||||
- 15. [[如何使用jdk1.8新特性从商品集合中单独把某一个字段(比如id)拿出来当做一个集合]]
|
||||
- 16. [[ArrayList和LinkedList的区别]]
|
||||
- 17. [[遍历Set和List的通用方法]]
|
||||
- 18. [[有几种方法可以遍历JAVA集合]]
|
||||
- 19. [[ArrayList哪些操作效率较高]]
|
||||
- 20. [[HashMap为什么要重写hashcode]]
|
||||
- 21. [[JDK中有哪些队列]]
|
||||
- 22. [[HashMap 和 Hashtable 有什么区别]]
|
||||
- 23. [[List、Set、map区别]]
|
||||
- 24. [[HashMap的put方法的执行过程]]
|
||||
- 25. [[分析HashMap为什么线程不安全]]
|
||||
- 26. [[集合的分类,分别的特性是哪些]]
|
||||
- 27. [[给你一个数值类型数组,如何以最快的方式,查找到某一个元素]]
|
||||
- 28. [[编程题,给你一个整数数组,进行排序,输入一个k,从小到大输出k个数]]
|
||||
- 29. [[有个数组,如何颠倒所有的元素]]
|
||||
- 30. [[银行系统,我给你168的数字,你应该给我多少张不同面额的人民币(口述如何实现)]]
|
||||
- 31. [[HashMap的底层是如何解决Hash碰撞的]]
|
||||
- 32. [[Collection 和 Collections 有什么区别]]
|
||||
- 33. [[数组,链表,哪个查询效率高,为什么高]]
|
||||
- 34. [[CurrentHashMap的在JDK1.7和1.8期间分别的特征]]
|
||||
- 35. [[自旋锁的特征]]
|
||||
- 36. [[遍历Set和List的通用方法]]
|
||||
- 37. [[数组的排序算法,你都知道哪些请列举并手写一个出来]]
|
||||
- ### 1.2 多线程
|
||||
collapsed:: true
|
||||
- 1. [[进程与线程的区别]]
|
||||
- 2. [[为什么要用多线程]]
|
||||
- 3. [[多线程的创建方式有哪些]]
|
||||
- 4. [[是继承Thread类好,还是实现Runnable接口好]]
|
||||
- 5. [[ThreadLocal类是什么类]]
|
||||
- 6. [[你项目中的哪些地方使用到多线程]]
|
||||
- 7. [[什么是线程安全]]
|
||||
- 8. [[如何解决多线程间线程安全问题]]
|
||||
- 9. [[为什么使用同步或锁,就可以让多线程解决线程安全问题]]
|
||||
- 10. [[什么是线程同步]]
|
||||
- 11. [[什么是同步代码块]]
|
||||
- 12. [[同步代码块和同步函数之间有什么区别]]
|
||||
- 13. [[同步函数和静态同步函数之间有什么区别]]
|
||||
- 14. [[什么是多线程死锁]]
|
||||
- 15. [[wait() 和notify() 方法的区别]]
|
||||
- 16. [[同步与异步的区别]]
|
||||
- 17. [[线程的生命周期]]
|
||||
- 18. [[线程同步的几个方法]]
|
||||
- 19. [[并发与并行的区别]]
|
||||
- 20. [[关于多线程锁升级的理解]]
|
||||
- 21. [[怎么理解过程一致性和结果一致性]]
|
||||
- 22. [[synchronized与Lock锁的区别]]
|
||||
- 23. [[同步方法与同步块的区别]]
|
||||
- 24. [[什么是线程池它的作用是什么]]
|
||||
- 25. [[线程池有哪些核心参数]]
|
||||
- 26. [[synchronized与乐观锁的区别]]
|
||||
- 27. [[你是怎么创建线程池的]]
|
||||
- 28. [[线程的原子性是什么]]
|
||||
- 29. [[说说你对线程的3个特性(原子,可见,有序)的理解]]
|
||||
- 30. [[sleep()和wait() 的区别]]
|
||||
- 31. [[如何停止一根线程]]
|
||||
- 32. [[什么是守护线程,如何做到]]
|
||||
- 33. [[yield() 与 join() 方法的区别]]
|
||||
- 34. [[什么是Volatile,它的作用是什么]]
|
||||
- 35. [[什么是AtomicInteger]]
|
||||
- 36. [[你都知道哪些锁]]
|
||||
- 提示:自旋锁,可重入锁,互斥锁,悲观锁,乐观锁,偏向锁,轻量级锁,重量级锁
|
||||
- 37. [[线程是如何开始的]]
|
||||
- 38. [[守护线程是什么如何实现]]
|
||||
- 39. [[JDK1.8 针对synchronized,都做过哪些优化]]
|
||||
- ### 1.3 JVM
|
||||
collapsed:: true
|
||||
- 1. [[请说下Java的内存模型,也就是JMM]]
|
||||
- Java内存模型(JMM):JVM规范中定义了Java的内存模型(Java Memory Model,JMM),
|
||||
- JMM主要分为2个部分:主内存以及每个线程的本地内存。
|
||||
- 
|
||||
- JVM中运行的每个线程都拥有自己的线程栈,线程栈包含了当前线程执行的方法调用相关信息,我们也把它称作调用栈。随着代码的不断执行,调用栈会不断变化。共享的对象我们会放置在堆中!
|
||||
- 
|
||||
- 现在的电脑,一般都是多CPU的。那么多个CPU如何操作内存呢
|
||||
- 现代计算机一般都有2个以上CPU,而且每个CPU还有可能包含多个核心。因此,如果我们的应用是多线程的话,这些线程可能会在各个CPU核心中并行运行。
|
||||
- 
|
||||
- 在CPU内部有一组CPU寄存器,也就是CPU的储存器。CPU操作寄存器的速度要比操作计算机主存快的多。在主存和CPU寄存器之间还存在一个CPU缓存,CPU操作CPU缓存的速度快于主存但慢于CPU寄存器。某些CPU可能还有多个缓存层(一级缓存和二级缓存)。计算机的主存也称作RAM,所有的CPU都能够访问主存,而且主存比上面提到的缓存和寄存器大很多。
|
||||
- 当一个CPU需要访问主存时,会先读取一部分主存数据到CPU缓存,进而在读取CPU缓存到寄存器。当CPU需要写数据到主存时,同样会先flush寄存器到CPU缓存,然后再在某些节点把缓存数据flush到主存
|
||||
- 2. [[请说下JVM的运行时的内存结构]]
|
||||
- JDK1.8以前:
|
||||
- 
|
||||
- JDK1.8以后:
|
||||
- 
|
||||
- JDK1.8中,移除了方法区的概念,将类的类信息等元数据使用元数据区(或者叫:元空间)来进行存储。
|
||||
- 但是程序计数器,本地方法栈,线程栈这3个部分,依旧是线程所独有!堆,元空间还是被线程所共享!
|
||||
- 3. [[JVM虚拟机的原理]]
|
||||
- 提示:就是一台虚拟的机器。同样是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机,大名鼎鼎的Visual Box、Vmware就属于系统虚拟机,他们完全是对物理计算的仿真,提供了一个可以运行完整操作系统的软件平台。
|
||||
- 程序虚拟机典型代码就是Java虚拟机,它专门为执行单个计算程序而计算,在Java虚拟机中执行的指令我们成为Java自己码指令。无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。目前Java使用最广泛的是HotSpot虚拟机。
|
||||
- 4. [[什么是虚拟机参数配置 你是否配置过 在哪里配置]]
|
||||
- 提示:
|
||||
- 虚拟机参数配置,其实就是围绕着堆、栈、方法区的内存空间大小进行配置。
|
||||
- 其目的:就是为了更高效,更合理的利用虚拟机,减少FullGC的次数,提升内存的利用率
|
||||
- 配置方式多种:可在tomcat的bin目录下的catalina.bat中配置,也可以在开发工具中配置
|
||||
- 5. [[都有哪些堆的参数,可以配置]]
|
||||
- 提示:
|
||||
- -XX:+PrintGC 每次触发GC的时候打印相关日志
|
||||
- -XX:+UseSerialGC 串行回收
|
||||
- -XX:+PrintGCDetails 更详细的GC日志
|
||||
- -Xms 堆初始值
|
||||
- -Xmx 堆最大可用值
|
||||
- -Xmn 新生代堆最大可用值
|
||||
- -XX:SurvivorRatio 用来设置新生代中eden空间和from/to空间的比例.
|
||||
- 含以-XX:SurvivorRatio=eden/from=den/to
|
||||
- 总结:在实际工作中,我们可以直接将初始的堆大小与最大堆大小相等,
|
||||
- 这样的好处是可以减少程序运行时垃圾回收次数,从而提高效率。
|
||||
- -XX:SurvivorRatio 用来设置新生代中eden空间和from/to空间的比例.
|
||||
- 6. [[如何设置最大堆空间大小]]
|
||||
- 提示:
|
||||
- 参数: -Xms20m -Xmx20m -XX:+PrintGCDetails -XX:+UseSerialGC -XX:+PrintCommandLineFlags
|
||||
- 7. [[设置新生代与老年代优化参数]]
|
||||
- 提示:
|
||||
- -Xmn 新生代大小,一般设为整个堆的1/3到1/4左右
|
||||
- -XX:SurvivorRatio 设置新生代中eden区和from/to空间的比例关系n/1 默认是8:1:1
|
||||
- 参数: -Xms20m -Xmx20m -Xmn5m -XX:SurvivorRatio=8 -XX:+PrintGCDetails -XX:+UseSerialGC
|
||||
- 8. [[设置新生与老年代代参数]]
|
||||
- 提示:
|
||||
- -Xms20m -Xmx20m -XX:SurvivorRatio=8 -XX:+PrintGCDetails -XX:+UseSerialGC
|
||||
- -XX:NewRatio=2
|
||||
- 总结:不同的堆分布情况,对系统执行会产生一定的影响,在实际工作中,
|
||||
- 应该根据系统的特点做出合理的配置,基本策略:尽可能将对象预留在新生代,
|
||||
- 减少老年代的GC次数。
|
||||
- 除了可以设置新生代的绝对大小(-Xmn),可以使用(-XX:NewRatio)设置新生代和老年
|
||||
- 代的比例:-XX:NewRatio=老年代/新生代
|
||||
- 9. [[内存溢出你是咋解决的]]
|
||||
- 提示:
|
||||
- 错误原因: java.lang.OutOfMemoryError: Java heap space
|
||||
- 解决办法:设置堆内存大小 -Xms1m -Xmx70m -XX:+HeapDumpOnOutOfMemoryError
|
||||
- 10. [[栈溢出你是咋解决的]]
|
||||
- 提示:
|
||||
- 错误原因: java.lang.StackOverflowError
|
||||
- 栈溢出 产生于递归调用,循环遍历是不会的,但是循环方法里面产生递归调用, 也会发生栈溢出。
|
||||
- 解决办法:设置线程最大调用深度
|
||||
- -Xss5m 设置最大调用深度
|
||||
- 11. [[Tomcat内存溢出在catalina.sh 修改JVM堆内存大小]]
|
||||
- 提示:
|
||||
- JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m"
|
||||
- 12. [[内存泄漏与内存溢出的区别]]
|
||||
- 提示:
|
||||
- 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
|
||||
- 内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
|
||||
- memory leak会最终会导致out of memory!
|
||||
- 内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。
内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。这就是溢出!比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出.
以发生的方式来分类,内存泄漏可以分为4类:
1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
4. 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。
从用户使用程序的角度来看,内存泄漏本身不会产生什么危害,作为一般的用户,根本感觉不到内存泄漏的存在。真正有危害的是内存泄漏的堆积,这会最终消耗尽系统所有的内存。从这个角度来说,一次性内存泄漏并没有什么危害,因为它不会堆积,而隐式内存泄漏危害性则非常大,因为较之于常发性和偶发性内存泄漏它更难被检测到
|
||||
- 13. [[JVM参数调优的总结]]
|
||||
- 提示:
|
||||
- 在JVM启动参数中,可以设置跟内存、垃圾回收相关的一些参数设置,默认情况不做任何设置JVM会工作的很好,但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能。通过设置我们希望达到一些目标:
|
||||
- 1. GC的时间足够的小
|
||||
- 2. GC的次数足够的少
|
||||
- 3. 发生Full GC的周期足够的长
|
||||
- 前两个目前是相悖的,要想GC时间小必须要一个更小的堆,要保证GC次数足够少,必须保证一个更大的堆,我们只能取其平衡。
|
||||
- 1. 针对JVM堆的设置,一般可以通过-Xms -Xmx限定其最小、最大值,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,我们通常把最大、最小设置为相同的值
|
||||
- 2. 年轻代和年老代将根据默认的比例(1:2)分配堆内存,可以通过调整二者之间的比率NewRadio来调整二者之间的大小,也可以针对回收代,比如年轻代,通过 -XX:newSize -XX:MaxNewSize来设置其绝对大小。同样,为了防止年轻代的堆收缩,我们通常会把-XX:newSize -XX:MaxNewSize设置为同样大小
|
||||
- 3. 年轻代和年老代设置多大才算合理 毫无疑问是没有答案的,否则也就不会有调优。我们观察一下二者大小变化有哪些影响
|
||||
- 1. 更大的年轻代必然导致更小的年老代,大的年轻代会延长普通GC的周期,但会增加每次GC的时间;小的年老代会导致更频繁的Full GC
|
||||
- 2. 更小的年轻代必然导致更大年老代,小的年轻代会导致普通GC很频繁,但每次的GC时间会更短;大的年老代会减少Full GC的频率
|
||||
- 3. 如何选择应该依赖应用程序对象生命周期的分布情况:如果应用存在大量的临时对象,应该选择更大的年轻代;如果存在相对较多的持久对象,年老代应该适当增大。但很多应用都没有这样明显的特性,在抉择时应该根据以下两点:
|
||||
- 1. 本着Full GC尽量少的原则,让年老代尽量缓存常用对象,JVM的默认比例1:2也是这个道理
|
||||
- 2. 通过观察应用一段时间,看其他在峰值时年老代会占多少内存,在不影响Full GC的前提下,根据实际情况加大年轻代,比如可以把比例控制在1:1。但应该给年老代至少预留1/3的增长空间
|
||||
- ### 1.4 GC
|
||||
collapsed:: true
|
||||
- 1. [[说说你对Java的GC回收机制的理解]]
|
||||
- 提示:
|
||||
- Java语言有个特征:安全性,就是指Java程序员摆脱了C++ 程序员关于内存管理的问题。使得Java程序员在编写程序时,不需要通过指针操作内存,同时也不需要再去关注内存何时将会被回收清理。这一切,都是因为有的GC回收机制的功劳。
|
||||
- ### 1.5 MySQL
|
||||
collapsed:: true
|
||||
- 1. [[项目中SQL调优的场景有哪些,数据库调优如何做]]
|
||||
- 2. [[最多有过几张表的连表处理]]
|
||||
- 3. [[为什么选择MySQL5.7,而不用5.5 5.6]]
|
||||
- 4. [[数据库中Btree 与Hash索引的区别]]
|
||||
- 5. [[什么是数据库回表,如何避免回表查询]]
|
||||
- 6. [[InnoDB的行级锁什么情况下会使用]]
|
||||
- 7. [[数据库中如何快速插入100W级数据]]
|
||||
- 8. [[联合索引与普通索引的区别在哪里]]
|
||||
- 9. [[有张100W级的表中存在大量的重复数据,如何快速去重]]
|
||||
- 10. [[数据库中复合索引的字段中可以有null值吗]]
|
||||
- 11. [[数据库中两张表如何要联合查询,要如何实现]]
|
||||
- 12. [[mysql数据库索引是用什么数据结构存储的]]
|
||||
- 13. [[事务在什么情况下会失效]]
|
||||
- 14. [[怎么用Sql语句复制另一张表]]
|
||||
- 15. [[数据库连表查询,左外联,右外联,内联查的区别]]
|
||||
- 16. [[sql语句过慢怎么定位问题]]
|
||||
- 17. [[说一下JDBC在连接数据库的操作上几个步骤]]
|
||||
- 18. [[Like 后 加% 和 加_ 的区别在哪里]]
|
||||
- 19. [[说一下事务的隔离级别和事务的传播性质]]
|
||||
- 20. [[说一下怎么防止超卖,SQL怎么写]]
|
||||
- 21. [[如果给你一个功能,你觉得从数据库设计开始的思路是什么]]
|
||||
- 22. [[说一下 ACID 是什么]]
|
||||
- 23. [[数据库用户ID主键策略]]
|
||||
- 24. [[数据库的执行计划]]
|
||||
- 25. [[JDBC如何提升读取数据的性能]]
|
||||
- 26. [[select count(*) ,select count(1),select count(字段) 说一下区别]]
|
||||
- 27. [[索引失效的场景有哪些]]
|
||||
- 28. [[数据库的SQL语句如何加锁]]
|
||||
- 29. [[数据库中哪些字段适合加索引 ,哪些不适合加索引]]
|
||||
- 30. [[什么是聚簇索引,什么是非聚簇索引]]
|
||||
- 31. [[Union 和 union all 的区别是什么]]
|
||||
- 32. [[什么是SQL注入,如何防止]]
|
||||
- 33. [[关闭连接一定能成功吗 怎么保证一定成功关闭连接]]
|
||||
- 34. [[有哪些地方必须关闭资源]]
|
||||
- 35. [[有没有设计过数据库 数据库三范式讲一下]]
|
||||
- 36. [[In 与 exits 的区别是什么]]
|
||||
- 37. [[MySQL中存储引擎InnoDB,MyIsam的区别在哪里]]
|
||||
- 38. [[MySQL中锁机制]]
|
||||
- 39. [[数据库中复合索引的字段中可以有null值吗]]
|
||||
- 40. [[MySQL数据库的my.ini文件中可以配置什么参数]]
|
||||
- 答:在mysql的安装根目录中,创建一个文件my.ini编写以下内容:
|
||||
- ```ini
|
||||
#client mysql 都是设置客户端
|
||||
[client]
|
||||
#port参数表示的是MySQL数据库的端口,默认的端口是3306
|
||||
port=3306
|
||||
[mysql]
|
||||
#default-character-set参数是客户端默认的字符集
|
||||
default-character-set=utf8
|
||||
#mysqld 设置服务端
|
||||
[mysqld]
|
||||
#port参数也是表示数据库的端口
|
||||
port=3306
|
||||
#basedir参数表示MySQL的安装路径
|
||||
basedir="C:/Program Files/MySQL/MySQL Server 5.7/"
|
||||
#datadir参数表示MySQL数据文件的存储位置,也是数据库表的存放位置
|
||||
datadir="C:/ProgramData/MySQL/MySQL Server 5.7/Data/"
|
||||
#default-character-set参数表示默认的字符集,这个字符集是服务器端的
|
||||
character-set-server=utf8
|
||||
#default-storage-engine参数默认的存储引擎
|
||||
default-storage-engine=INNODB
|
||||
#sql-mode参数表示SQL模式的参数,通过这个参数可以设置检验SQL语句的严格程度
|
||||
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
|
||||
#max_connections参数表示允许同时访问MySQL服务器的最大连接数(默认151,最大值16384),其中一个连接是保留的,留给管理员专用的
|
||||
max_connections=1000
|
||||
#query_cache_size参数表示查询时的缓存大小,缓存中可以存储以前通过select语句查询过的信息,再次查询时就可以直接从缓存中拿出信息
|
||||
query_cache_size=0
|
||||
#table_cache参数表示所有进程打开表的总数
|
||||
table_cache=256
|
||||
#tmp_table_size参数表示内存中临时表的总数
|
||||
tmp_table_size=35M
|
||||
#thread_cache_size参数表示保留客户端线程的缓存
|
||||
thread_cache_size=8
|
||||
#myisam_max_sort_file_size参数表示MySQL重建索引时所允许的最大临时文件的大小
|
||||
myisam_max_sort_file_size=100G
|
||||
#myisam_sort_buffer_size参数表示重建索引时的缓存大小
|
||||
myisam_sort_buffer_size=69M
|
||||
#key_buffer_size参数表示关键词的缓存大小
|
||||
key_buffer_size=55M
|
||||
#read_buffer_size参数表示MyISAM表全表扫描的缓存大小
|
||||
read_buffer_size=64K
|
||||
#read_rnd_buffer_size参数表示将排序好的数据存入该缓存中
|
||||
read_rnd_buffer_size=256K
|
||||
#sort_buffer_size参数表示用于排序的缓存大小
|
||||
sort_buffer_size=256K
|
||||
#innodb_additional_mem_pool_size参数表示附加的内存池,用来存储InnoDB表的内容
|
||||
innodb_additional_mem_pool_size=3M
|
||||
#innodb_flush_log_at_trx_commit参数是设置提交日志的时机,若设置为1,
|
||||
#InnoDB会在每次提交后将事务日志写到磁盘上
|
||||
innodb_flush_log_at_trx_commit=1
|
||||
#innodb_log_buffer_size参数表示用来存储日志数据的缓存区的大小
|
||||
innodb_log_buffer_size=2M
|
||||
#innodb_buffer_pool_size参数表示缓存的大小,InnoDB使用一个缓冲池类保存索引和原始数据
|
||||
innodb_buffer_pool_size=107M
|
||||
#innodb_log_file_size参数表示日志文件的大小
|
||||
innodb_log_file_size=54M
|
||||
#innodb_thread_concurrency参数表示在InnoDB存储引擎允许的线程最大数
|
||||
innodb_thread_concurrency=18
|
||||
```
|
||||
- ### 1.6 Mybatis
|
||||
- 1. [[#{} 与 ${} 的区别]]
|
||||
- 2. [[Mybatis的实现原理]]
|
||||
- 3. [[Mybatis级联的配置]]
|
||||
- 4. [[Mybatis的一二级缓存是什么样的]]
|
||||
- 5. [[Mybits的缺点有哪些]]
|
||||
- 6. [[Mybatis如何防止SQL注入]]
|
||||
- ### 1.7 网络编程
|
||||
- 1. [[什么是Socket编程]]
|
||||
- 2. [[TCP与UDP在概念上的区别]]
|
||||
- 3. [[TCP协议的特点,你能说说吗 具体说说3次握手,4次挥手的过程]]
|
||||
- 4. [[OSI七层模型,大概了解么]]
|
||||
- ### 1.8 设计原则与设计模式
|
||||
- 1. [[7大设计原则有哪些]]
|
||||
- 2. [[什么是设计模式,有多少个]]
|
||||
- 3. [[单例设计模式,你会手写么 在项目中哪些地方有应用]]
|
||||
- 4. [[代理设计模式中,静态代理和动态代理的区别]]
|
||||
- 5. [[动态代理中JDK代理和CGLIB代理区别 代理模式,在项目中哪些地方有应用]]
|
||||
- 6. [[工厂设计模式的作用 简单工厂会写不 在项目中哪些地方有应用]]
|
||||
- 7. [[如何克隆一个对象 浅克隆与深克隆区别在哪里]]
|
||||
- 8. [[设计模式中,工厂设计模式有啥用 项目中在哪些地方用过]]
|
||||
- ### 1.9 其它题目
|
||||
- 1. [[异常的分类,如何自定义异常]]
|
||||
- 2. [[普通类和抽象类有哪些区别]]
|
||||
- 3. [[讲讲类的加载过程以及双亲委派机制]]
|
||||
- 4. [[JDK1.8的新特性,你都用过哪些]]
|
||||
- 5. [[网络通讯中tcp协议,udp协议的区别]]
|
||||
- 6. [[普通类和抽象类的区别 接口和抽象的区别]]
|
||||
- 7. [[常用操作字符串有哪些类 StringBuffer,StringBuilder]]
|
||||
- 8. [[String,StringBuffer及StringBuilder的区别]]
|
||||
- 9. [[如何跳出多重循环]]
|
||||
- 10. [[什么是反射]]
|
||||
- 11. [[final 在 Java 中有什么作用]]
|
||||
- 12. [[说一下你熟悉的设计模式]]
|
||||
- 13. [[谈谈面向对象]]
|
||||
- 14. [[谈谈多线程并发]]
|
||||
- 15. [[什么是Java的反射]]
|
||||
- 16. [[Java的反射,在哪些地方有过应用]]
|
||||
- 17. [[反射获得Class对象的3种方式]]
|
||||
- 18. [[反射操作私有属性时,需要注意什么]]
|
||||
- 19. [[抽象类可以继承实体类么]]
|
||||
- 20. [[抽象类可以继承接口么]]
|
||||
- 21. [[接口可以继承抽象类么]]
|
||||
- 22. [[IO流的分类有哪些]]
|
||||
- 23. [[谈谈BIO,NIO,AIO的区别是什么,你都用过哪些IO框架]]
|
||||
- 24. [[Object类的常见方法都有哪些]]
|
||||
- 25. [[Java中异常的分类,分别说说都哪些具体的异常]]
|
||||
- 26. [[遇到BUG,你是如何调试的]]
|
||||
- 27. [[如果运行结果跟预期不一样,但是代码没报错,怎么处理]]
|
||||
- 28. [[有没有用过断点调试 怎么用的]]
|
||||
- 29. [[JDK,JRE,JVM的区别]]
|
||||
- 30. [[重写和重载的区别在哪里]]
|
||||
- ## 二阶段
|
||||
- ### 2.1 Spring
|
||||
- 1. [[对springIOC的理解]]
|
||||
- 2. [[讲下springAOP,项目中你是如何应用的]]
|
||||
- 3. [[动态代理模式中JDK与CGLIB的区别]]
|
||||
- 4. [[Spring的循环依赖问题,如何解决]]
|
||||
- 5. [[谈谈你对Spring bean的生命周期的理解]]
|
||||
- 6. [[Spring中对事务的支持,有哪些方式 你项目中如何处理事务]]
|
||||
- 7. [[Spring中bean基本都是单例的,如果一个方法要对bean中的属性值进行修改,这个方法会被多次执行,怎么确保安全]]
|
||||
- 8. [[讲一下浅克隆与深克隆]]
|
||||
- 9. [[@Resource和@Autowired的区别]]
|
||||
- 10. [[介绍一下你的项目AOP日志功能如何实现的]]
|
||||
- 11. [[Spring依赖注入的方式有哪些 有区别么]]
|
||||
- 12. [[Spring的常用注解都有哪些]]
|
||||
- 13. [[Spring 事务实现方式有哪些]]
|
||||
- 14. [[BeanFactory 和 ApplicationContext的区别]]
|
||||
- 15. [[Spring中bean基本都是单例的,如果一个方法要对bean中的属性值进行修改,这个方法会被多次执行,怎么确保安全]]
|
||||
- 16. [[Spring实例化组件时,如何设置属性]]
|
||||
- ### 2.2 SpringMVC
|
||||
- 1. [[SpringMVC框架的工作流程]]
|
||||
- 2. [[forward和redirect的区别]]
|
||||
- 3. [[说一下@requestMapping的作用]]
|
||||
- 4. [[知道拦截器么,你项目中哪里使用过拦截器]]
|
||||
- 5. [[Springmvc 过滤器 拦截器的使用场景和区别是什么]]
|
||||
- ### 2.3 SpringBoot
|
||||
- 1. [[SpringBoot如何实现自动配置 原理是什么]]
|
||||
- 2. [[SpringBoot的web模块自动集成了Tomcat,如何剔除]]
|
||||
- 3. [[说说你常用的几个SpringBoot注解]]
|
||||
- 4. [[你上个项目用的SpringBoot版本是那个版本的]]
|
||||
- 5. [[SpringBoot主要的配置类有哪些]]
|
||||
- 6. [[Spring,Springmvc,SpringBoot的区别是啥]]
|
||||
- 7. [[可不可以配置两个数据源 比如一个mysql和一个oracle 在哪里配置,怎么配置]]
|
||||
- 8. [[SpringBoot在yaml中配置了开发环境配置文件和测试配置文件,有几种方式在不同环境去使用不同的配置文件]]
|
||||
- 9. [[SpringBoot的优点在哪里]]
|
||||
- 10. [[当application.properties,application.yaml,bootstrap.yaml文件同时存在的情况下,它们的执行顺序是怎样的]]
|
||||
- 11. [[Spring的启动流程是怎么样的]]
|
||||
- ### 2.4 Web题
|
||||
- 1. [[HTTPS 通讯协议是如何实现的 它的加密方式是什么]]
|
||||
- 2. [[在HTTP请求中如何存储客户信息(分如何获取和如何存储)]]
|
||||
- 3. [[Ajax怎么实现同步]]
|
||||
- 4. [[你们项目中,使用的什么 数据交换格式]]
|
||||
- 5. [[HTTP通讯协议分为几个部分 请求协议的组成]]
|
||||
- 6. [[JSON的解析框架,你用过什么]]
|
||||
- 7. [[XML与JSON之间的区别]]
|
||||
- 8. [[页面加载很慢,有什么优化方案]]
|
||||
- 9. [[重定向和请求转发的区别是什么]]
|
||||
- 10. [[JSON格式长什么样 那么JSONArray呢]]
|
||||
- 11. [[Servlet的生命周期]]
|
||||
- 12. [[Tomcat如何配置连接池 默认连接数是多少 == 生产环境,Tomcat性能比较差,如何调优]]
|
||||
- 答:修改conf目录下的server.xml即可实现:
|
||||
- ```xml
|
||||
<!--线程池的设置-->
|
||||
<Executor executor="tomcatThreadPool"
|
||||
namePrefix="catalina-exec-"
|
||||
maxThreads="500"
|
||||
minSpareThreads="100"
|
||||
maxSpareThreads="500"
|
||||
prestartminSpareThreads="true"
|
||||
maxQueueSize="10000"
|
||||
/>
|
||||
|
||||
<!--name:连接池名称;
|
||||
namePrefix:连接池创建的每个线程的名称前缀。单个线程的线程名称将为namePrefix + threadNumber;
|
||||
maxThreads:此池中活动线程的最大数量,默认值为200;也就是最大的并发数
|
||||
minSpareThreads:此池中始终保持活动状态的线程最小数量,默认值为25
|
||||
maxSpareThreads;此池中始终保持活动状态的线程最大数量 prestartminSpareThreads:启动连接池,激活最小活跃线程minSpareThreads也同时生效
|
||||
maxQueueSize:HTTP请求的最大的队列长度,默认值是Integer.MAX_VALUE。-->
|
||||
|
||||
<!--连接器的设置-->
|
||||
<Connector
|
||||
port="8080"
|
||||
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
|
||||
connectionTimeout="20000"
|
||||
maxConnections="10000"
|
||||
acceptCount="10000"
|
||||
acceptorThreadCount="2"
|
||||
enableLookups="false"
|
||||
executor="tomcatThreadPool"
|
||||
redirectPort="8443"
|
||||
/>
|
||||
<!--
|
||||
connectionTimeout:连接超时时间,单位是毫秒;
|
||||
maxConnections:服务器在任何给定时间接受和处理的最大连接数。请注意,一旦达到限制,
|
||||
操作系统仍然可以接受基于acceptCount设置的连接。默认值因连接器类型而异。
|
||||
对于NIO和NIO2,默认值为10000.对于APR /本机,默认值为8192;
|
||||
acceptCount:当连接不够时,可以使用队列暂时存放HTTP请求,队列满时收到的任何请求都将被拒绝。默认值是100
|
||||
acceptorThreadCount:每个连接可以获得的线程数,最大不要超过2;
|
||||
enableLookups:是否允许DNS查询;
|
||||
executor:连接池的名字;
|
||||
redirectPort:重定向端口-->
|
||||
```
|
||||
- 13. [[在请求中如何存储客户信息]]
|
||||
- 14. [[如何防止表单重复提交]]
|
||||
- 15. [[HTTP协议中GET与POST提交方法的区别在哪里]]
|
||||
- 16. [[你对RestFul架构风格是如何理解的 平时都是怎么样的]]
|
||||
- ### 2.5 Shiro
|
||||
- 1. [[Shiro的执行流程]]
|
||||
- ## 三阶段
|
||||
- ### 3.1 RabbitMQ
|
||||
- 请说说消息队列的工作模式有哪些
|
||||
- MQ是如何保证消息不丢失的
|
||||
- MQ的工作原理
|
||||
- 如果保证用户一定能消费成功
|
||||
- 延迟队列,死信队列的区别是什么
|
||||
- 请说说RabbitMQ的优缺点
|
||||
- 延迟队列如何实现
|
||||
- 如果让你自己写个MQ服务器,你的思路是什么 需要使用到什么技术
|
||||
- 如何解决消息延时及过期失效的问题 如果有几百万条消息持续积压几小时,说说怎么解决
|
||||
- 讲一下MQ服务器的推拉模式,你在项目中是如何运用的
|
||||
- rabbitmq怎么实现订单延迟支付
|
||||
- 说一下怎么用rabbitmq实现取消订单的用户积分减少的
|
||||
- MQ是什么 你用过哪个 怎么配置的
|
||||
- ### 3.2 Redis
|
||||
- 什么是接口幂等性,如何保证接口幂等性操作
|
||||
- 幂等性问题会出现在哪些地方
|
||||
- Redis支持的数据类型
|
||||
- Redis的持久化方式,以及各自的区别,项目中用的哪一种,怎么配置的
|
||||
- 如何保证与数据库的双写一致性
|
||||
- 缓存穿透,击穿,雪崩对应的解决方案是什么
|
||||
- 使用的Redis是集群的嘛 有多少个节点,采用的是那种集群方案
|
||||
- 说一下Reddis怎么做集群的
|
||||
- Redis 都有哪些使用场景
|
||||
- Redis 有哪些功能
|
||||
- 分布式锁的目的
|
||||
- 为什么要用redis不用map
|
||||
- Redis是原子性的吗 是线程安全的吗 多线程还是单线程
|
||||
- Redis的特性是哪些,可以用来干嘛
|
||||
- 项目中你们部署了多少台Redis服务器,一般配置多少台,熟悉哨兵机制么
|
||||
- 假设你redis里面有9个商品,我现在有10人来买,怎么防止超卖问题
|
||||
- Redis的单线程原理是什么 如果有10个用户同时操作Redis,那么Redis是否按照先后顺序来处理情况
|
||||
- Redis的分布式锁用过没 描述一下
|
||||
- Redis设置永不过期也可以解决缓存击穿,为什么还要用分布式锁
|
||||
- Redis如何保证与数据库的数据一致性问题
|
||||
- 红锁是怎么实现的 原理是什么
|
||||
- 知道Redis的看门狗机制么,为什么要用到看门狗
|
||||
- Redis的5种数据类型,分别的使用场景
|
||||
- Redis集群知道么,如何实现
|
||||
- Redis持久化机制中AOF与RDB区别在哪里
|
||||
- Redis如何配置RDB
|
||||
- ### 3.3 ES
|
||||
- ES怎么保持和数据库的一致性
|
||||
- ES怎么配权重 可以做数据库吗
|
||||
- ES实现全文检索的原理是什么
|
||||
- ES查询一个张三,李四。张三名字可能会重复,要按照张三的生日去进行排序,这个ES语句怎么写
|
||||
- ### 3.4Linux
|
||||
- 用过的Linux系统都有哪些 什么版本
|
||||
- chmod 改用户组的权限
|
||||
- 如果你在linux部署的项目出现报错时,你需要定位报错信息在哪怎么做
|
||||
- nginx反向代理原理
|
||||
- Nginx的负载均衡策略
|
||||
- Linux如何查看资源的使用情况
|
||||
- chmod如何改用户组的权限
|
||||
- ### 3.5 VUE
|
||||
- 1. Vue的生命周期是什么,都有哪些钩子函数
|
||||
- 2. 谈谈MVC架构与MVVM架构的区别在哪里
|
||||
- 3. VUE都有哪些组件
|
||||
- 四阶段
|
||||
- 4.1 SpringCloud
|
||||
- 服务熔断和服务降级,项目是如何运用的
|
||||
- 你们通过哪些手段处理系统的高并发问题
|
||||
- 项目中,关于鉴权你们是咋做的
|
||||
- Nacos 与 Eureka的区别
|
||||
- 分布式事务的原理
|
||||
- 为什么选择Seata来处理分布式事务
|
||||
- 说说项目开发流程
|
||||
- SpringCloud体系的几大组件
|
||||
- 讲一下spring cloud 中的服务注册的机制和配置方法
|
||||
- feign远程调用的时候,如何确保feign接口的参数和controller层方法参数一致
|
||||
- 你觉得SpringCloud相比传统的SpringMVC有什么优势
|
||||
- 说一下熔断器,你怎么用的,代码怎么写的
|
||||
- 做集群的时候事务怎么处理
|
||||
- 网关限流时,采用什么技术,使用什么限流算法 咋配置
|
||||
- 分布式高并发下的订单id是如何生成的
|
||||
- 介绍一下spring,springboot,springcloud
|
||||
- openfeign的工作原理,是如何调用服务的
|
||||
- Feign远程调用的时候,如何确保Feign接口的参数和Controller层方法参数一致
|
||||
- 为什么要使用微服务,它的优缺点
|
||||
- 微服务的搭建步骤
|
||||
- 微服务组件都用过哪些,你们微服务的业务逻辑是什么样子的
|
||||
- Eureka如何搭建,如何才能规避因为网络原因导致客户端大面积下线的情况
|
||||
- Eureka高可用怎么配置
|
||||
- 了解网关么,网关的作用是什么,你都在网关中配置过什么内容
|
||||
- 网关限流如何配置 限流算法都用过哪些
|
||||
- 网关是如何找到其他微服务的
|
||||
- Eureka关闭之后,其他的微服务之间还能调用么
|
||||
- Nginx都配置过什么 如何做负载配置,都哪些负载算法
|
||||
- Ngnix代理配置是在哪个文件
|
||||
- Mysql的ini文件,都有些参数可以配置
|
||||
- Mybatis和MybatisPlus 你在项目中,哪个用的较多
|
||||
- 有哪些方法可以防止微服务接口被攻击
|
||||
- 4.2.Seata
|
||||
- 1、什么是分布式事务,项目中哪些地方遇到分布式事务
|
||||
- 2、什么是2阶段提交,Seata是如何做2阶段提交的
|
||||
- 3、Seata是三大核心组件是哪些,他们分别的作用是什么
|
||||
- 4、Seata的AT模式与TCC模式区别在哪里
|
||||
- 5、AT模式在运行过程中,如何进行2阶段处理的
|
||||
- 6、分布式事务的两个理论特性 是什么
|
||||
- 7、请说一下Seata的执行流程
|
||||
- 4.3.Alibaba组件
|
||||
- 1、说说nacos吧
|
||||
- 2、
|
||||
- 其他问题
|
||||
- 你在项目中遇到的最大问题是什么 如何解决的
|
||||
- 项目部署没有 有没有经过压力测试 有没有经过渗透测试
|
||||
- 用过哪些经典的设计模式,谈谈你对它们的理解
|
||||
- 假如1个接口的QPS只有10,超过10会怎样 如何解决
|
||||
- 在使用git的过程中,遇到冲突,你是如何处理的
|
||||
- 单点登录的实现原理
|
||||
- 如何防止后端接口被攻击
|
||||
- 每天1万人访问主页并发量有多少
|
||||
- 负载均衡怎么实现
|
||||
- 你们开发规范是什么,具体开发流程是什么,需求分析谁做,原型设计怎么来的
|
||||
- 测试怎么做的
|
||||
- 项目中有哪些设计是存在缺陷或者不合理的
|
||||
- 你熟悉秒杀流程 那么秒杀如何保证数据一致性
|
||||
- 你们项目上线前会在哪里测试 怎么部署的 多个环境你该怎么设置
|
||||
- 大佬跟你讲的东西,你怎么判断正不正确
|
||||
- 三层架构是哪三层 具体说说,你知道它们分别对应的架构模式采用的是什么么
|
||||
- 在生成订单过程中,如果MySQL崩了,怎么办
|
||||
- 能详细说下非对称加密的流程吗
|
||||
- 生产环境中应用有问题如何分析问题
|
||||
- GIT回退上个版本,用什么命令 切换分支用哪个命令
|
||||
@@ -0,0 +1,554 @@
|
||||
- ## 一阶段
|
||||
- ### 1.1 集合
|
||||
collapsed:: true
|
||||
- 1. [[HashMap和ConcurrentHashMap的区别]]
|
||||
- 2. [[线程安全的集合有哪些]]
|
||||
- 3. [[如何做到集合变遍历,边删除]]
|
||||
- 4. [[HashMap的底层原理是什么,如何扩容,并解决Hash碰撞的]]
|
||||
- 5. [[HashMap在什么情况下单链表需要转为红黑树]]
|
||||
- 6. [[ConcurrentHashMap为什么是线程安全的,如何做到的]]
|
||||
- 7. [[是否写过HashMap的底层,了解过什么]]
|
||||
- 8. [[Collection集合和Map体系集合的区别]]
|
||||
- 9. [[HashMap在JDK1.7和JDK1.8的区别]]
|
||||
- 10. [[HashSet的去重原理]]
|
||||
- 11. [[写个时间复杂度为O(n)的算法,找到一个数列第二大的数]]
|
||||
- 12. [[Collection 和 Collections 的区别是啥]]
|
||||
- 13. [[如何获得Map集合中的所有的Key]]
|
||||
- 14. [[HashMap 什么情况下会产生死锁的问题如何解决]]
|
||||
- 15. [[如何使用jdk1.8新特性从商品集合中单独把某一个字段(比如id)拿出来当做一个集合]]
|
||||
- 16. [[ArrayList和LinkedList的区别]]
|
||||
- 17. [[遍历Set和List的通用方法]]
|
||||
- 18. [[有几种方法可以遍历JAVA集合]]
|
||||
- 19. [[ArrayList哪些操作效率较高]]
|
||||
- 20. [[HashMap为什么要重写hashcode]]
|
||||
- 21. [[JDK中有哪些队列]]
|
||||
- 22. [[HashMap 和 Hashtable 有什么区别]]
|
||||
- 23. [[List、Set、map区别]]
|
||||
- 24. [[HashMap的put方法的执行过程]]
|
||||
- 25. [[分析HashMap为什么线程不安全]]
|
||||
- 26. [[集合的分类,分别的特性是哪些]]
|
||||
- 27. [[给你一个数值类型数组,如何以最快的方式,查找到某一个元素]]
|
||||
- 28. [[编程题,给你一个整数数组,进行排序,输入一个k,从小到大输出k个数]]
|
||||
- 29. [[有个数组,如何颠倒所有的元素]]
|
||||
- 30. [[银行系统,我给你168的数字,你应该给我多少张不同面额的人民币(口述如何实现)]]
|
||||
- 31. [[HashMap的底层是如何解决Hash碰撞的]]
|
||||
- 32. [[Collection 和 Collections 有什么区别]]
|
||||
- 33. [[数组,链表,哪个查询效率高,为什么高]]
|
||||
- 34. [[CurrentHashMap的在JDK1.7和1.8期间分别的特征]]
|
||||
- 35. [[自旋锁的特征]]
|
||||
- 36. [[遍历Set和List的通用方法]]
|
||||
- 37. [[数组的排序算法,你都知道哪些请列举并手写一个出来]]
|
||||
- ### 1.2 多线程
|
||||
collapsed:: true
|
||||
- 1. [[进程与线程的区别]]
|
||||
- 2. [[为什么要用多线程]]
|
||||
- 3. [[多线程的创建方式有哪些]]
|
||||
- 4. [[是继承Thread类好,还是实现Runnable接口好]]
|
||||
- 5. [[ThreadLocal类是什么类]]
|
||||
- 6. [[你项目中的哪些地方使用到多线程]]
|
||||
- 7. [[什么是线程安全]]
|
||||
- 8. [[如何解决多线程间线程安全问题]]
|
||||
- 9. [[为什么使用同步或锁,就可以让多线程解决线程安全问题]]
|
||||
- 10. [[什么是线程同步]]
|
||||
- 11. [[什么是同步代码块]]
|
||||
- 12. [[同步代码块和同步函数之间有什么区别]]
|
||||
- 13. [[同步函数和静态同步函数之间有什么区别]]
|
||||
- 14. [[什么是多线程死锁]]
|
||||
- 15. [[wait() 和notify() 方法的区别]]
|
||||
- 16. [[同步与异步的区别]]
|
||||
- 17. [[线程的生命周期]]
|
||||
- 18. [[线程同步的几个方法]]
|
||||
- 19. [[并发与并行的区别]]
|
||||
- 20. [[关于多线程锁升级的理解]]
|
||||
- 21. [[怎么理解过程一致性和结果一致性]]
|
||||
- 22. [[synchronized与Lock锁的区别]]
|
||||
- 23. [[同步方法与同步块的区别]]
|
||||
- 24. [[什么是线程池它的作用是什么]]
|
||||
- 25. [[线程池有哪些核心参数]]
|
||||
- 26. [[synchronized与乐观锁的区别]]
|
||||
- 27. [[你是怎么创建线程池的]]
|
||||
- 28. [[线程的原子性是什么]]
|
||||
- 29. [[说说你对线程的3个特性(原子,可见,有序)的理解]]
|
||||
- 30. [[sleep()和wait() 的区别]]
|
||||
- 31. [[如何停止一根线程]]
|
||||
- 32. [[什么是守护线程,如何做到]]
|
||||
- 33. [[yield() 与 join() 方法的区别]]
|
||||
- 34. [[什么是Volatile,它的作用是什么]]
|
||||
- 35. [[什么是AtomicInteger]]
|
||||
- 36. [[你都知道哪些锁]]
|
||||
- 提示:自旋锁,可重入锁,互斥锁,悲观锁,乐观锁,偏向锁,轻量级锁,重量级锁
|
||||
- 37. [[线程是如何开始的]]
|
||||
- 38. [[守护线程是什么如何实现]]
|
||||
- 39. [[JDK1.8 针对synchronized,都做过哪些优化]]
|
||||
- ### 1.3 JVM
|
||||
collapsed:: true
|
||||
- 1. [[请说下Java的内存模型,也就是JMM]]
|
||||
- Java内存模型(JMM):JVM规范中定义了Java的内存模型(Java Memory Model,JMM),
|
||||
- JMM主要分为2个部分:主内存以及每个线程的本地内存。
|
||||
- 
|
||||
- JVM中运行的每个线程都拥有自己的线程栈,线程栈包含了当前线程执行的方法调用相关信息,我们也把它称作调用栈。随着代码的不断执行,调用栈会不断变化。共享的对象我们会放置在堆中!
|
||||
- 
|
||||
- 现在的电脑,一般都是多CPU的。那么多个CPU如何操作内存呢
|
||||
- 现代计算机一般都有2个以上CPU,而且每个CPU还有可能包含多个核心。因此,如果我们的应用是多线程的话,这些线程可能会在各个CPU核心中并行运行。
|
||||
- 
|
||||
- 在CPU内部有一组CPU寄存器,也就是CPU的储存器。CPU操作寄存器的速度要比操作计算机主存快的多。在主存和CPU寄存器之间还存在一个CPU缓存,CPU操作CPU缓存的速度快于主存但慢于CPU寄存器。某些CPU可能还有多个缓存层(一级缓存和二级缓存)。计算机的主存也称作RAM,所有的CPU都能够访问主存,而且主存比上面提到的缓存和寄存器大很多。
|
||||
- 当一个CPU需要访问主存时,会先读取一部分主存数据到CPU缓存,进而在读取CPU缓存到寄存器。当CPU需要写数据到主存时,同样会先flush寄存器到CPU缓存,然后再在某些节点把缓存数据flush到主存
|
||||
- 2. [[请说下JVM的运行时的内存结构]]
|
||||
- JDK1.8以前:
|
||||
- 
|
||||
- JDK1.8以后:
|
||||
- 
|
||||
- JDK1.8中,移除了方法区的概念,将类的类信息等元数据使用元数据区(或者叫:元空间)来进行存储。
|
||||
- 但是程序计数器,本地方法栈,线程栈这3个部分,依旧是线程所独有!堆,元空间还是被线程所共享!
|
||||
- 3. [[JVM虚拟机的原理]]
|
||||
- 提示:就是一台虚拟的机器。同样是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机,大名鼎鼎的Visual Box、Vmware就属于系统虚拟机,他们完全是对物理计算的仿真,提供了一个可以运行完整操作系统的软件平台。
|
||||
- 程序虚拟机典型代码就是Java虚拟机,它专门为执行单个计算程序而计算,在Java虚拟机中执行的指令我们成为Java自己码指令。无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。目前Java使用最广泛的是HotSpot虚拟机。
|
||||
- 4. [[什么是虚拟机参数配置 你是否配置过 在哪里配置]]
|
||||
- 提示:
|
||||
- 虚拟机参数配置,其实就是围绕着堆、栈、方法区的内存空间大小进行配置。
|
||||
- 其目的:就是为了更高效,更合理的利用虚拟机,减少FullGC的次数,提升内存的利用率
|
||||
- 配置方式多种:可在tomcat的bin目录下的catalina.bat中配置,也可以在开发工具中配置
|
||||
- 5. [[都有哪些堆的参数,可以配置]]
|
||||
- 提示:
|
||||
- -XX:+PrintGC 每次触发GC的时候打印相关日志
|
||||
- -XX:+UseSerialGC 串行回收
|
||||
- -XX:+PrintGCDetails 更详细的GC日志
|
||||
- -Xms 堆初始值
|
||||
- -Xmx 堆最大可用值
|
||||
- -Xmn 新生代堆最大可用值
|
||||
- -XX:SurvivorRatio 用来设置新生代中eden空间和from/to空间的比例.
|
||||
- 含以-XX:SurvivorRatio=eden/from=den/to
|
||||
- 总结:在实际工作中,我们可以直接将初始的堆大小与最大堆大小相等,
|
||||
- 这样的好处是可以减少程序运行时垃圾回收次数,从而提高效率。
|
||||
- -XX:SurvivorRatio 用来设置新生代中eden空间和from/to空间的比例.
|
||||
- 6. [[如何设置最大堆空间大小]]
|
||||
- 提示:
|
||||
- 参数: -Xms20m -Xmx20m -XX:+PrintGCDetails -XX:+UseSerialGC -XX:+PrintCommandLineFlags
|
||||
- 7. [[设置新生代与老年代优化参数]]
|
||||
- 提示:
|
||||
- -Xmn 新生代大小,一般设为整个堆的1/3到1/4左右
|
||||
- -XX:SurvivorRatio 设置新生代中eden区和from/to空间的比例关系n/1 默认是8:1:1
|
||||
- 参数: -Xms20m -Xmx20m -Xmn5m -XX:SurvivorRatio=8 -XX:+PrintGCDetails -XX:+UseSerialGC
|
||||
- 8. [[设置新生与老年代代参数]]
|
||||
- 提示:
|
||||
- -Xms20m -Xmx20m -XX:SurvivorRatio=8 -XX:+PrintGCDetails -XX:+UseSerialGC
|
||||
- -XX:NewRatio=2
|
||||
- 总结:不同的堆分布情况,对系统执行会产生一定的影响,在实际工作中,
|
||||
- 应该根据系统的特点做出合理的配置,基本策略:尽可能将对象预留在新生代,
|
||||
- 减少老年代的GC次数。
|
||||
- 除了可以设置新生代的绝对大小(-Xmn),可以使用(-XX:NewRatio)设置新生代和老年
|
||||
- 代的比例:-XX:NewRatio=老年代/新生代
|
||||
- 9. [[内存溢出你是咋解决的]]
|
||||
- 提示:
|
||||
- 错误原因: java.lang.OutOfMemoryError: Java heap space
|
||||
- 解决办法:设置堆内存大小 -Xms1m -Xmx70m -XX:+HeapDumpOnOutOfMemoryError
|
||||
- 10. [[栈溢出你是咋解决的]]
|
||||
- 提示:
|
||||
- 错误原因: java.lang.StackOverflowError
|
||||
- 栈溢出 产生于递归调用,循环遍历是不会的,但是循环方法里面产生递归调用, 也会发生栈溢出。
|
||||
- 解决办法:设置线程最大调用深度
|
||||
- -Xss5m 设置最大调用深度
|
||||
- 11. [[Tomcat内存溢出在catalina.sh 修改JVM堆内存大小]]
|
||||
- 提示:
|
||||
- JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m"
|
||||
- 12. [[内存泄漏与内存溢出的区别]]
|
||||
- 提示:
|
||||
- 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
|
||||
- 内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
|
||||
- memory leak会最终会导致out of memory!
|
||||
- 内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。
内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。这就是溢出!比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出.
以发生的方式来分类,内存泄漏可以分为4类:
1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
4. 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。
从用户使用程序的角度来看,内存泄漏本身不会产生什么危害,作为一般的用户,根本感觉不到内存泄漏的存在。真正有危害的是内存泄漏的堆积,这会最终消耗尽系统所有的内存。从这个角度来说,一次性内存泄漏并没有什么危害,因为它不会堆积,而隐式内存泄漏危害性则非常大,因为较之于常发性和偶发性内存泄漏它更难被检测到
|
||||
- 13. [[JVM参数调优的总结]]
|
||||
- 提示:
|
||||
- 在JVM启动参数中,可以设置跟内存、垃圾回收相关的一些参数设置,默认情况不做任何设置JVM会工作的很好,但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能。通过设置我们希望达到一些目标:
|
||||
- 1. GC的时间足够的小
|
||||
- 2. GC的次数足够的少
|
||||
- 3. 发生Full GC的周期足够的长
|
||||
- 前两个目前是相悖的,要想GC时间小必须要一个更小的堆,要保证GC次数足够少,必须保证一个更大的堆,我们只能取其平衡。
|
||||
- 1. 针对JVM堆的设置,一般可以通过-Xms -Xmx限定其最小、最大值,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,我们通常把最大、最小设置为相同的值
|
||||
- 2. 年轻代和年老代将根据默认的比例(1:2)分配堆内存,可以通过调整二者之间的比率NewRadio来调整二者之间的大小,也可以针对回收代,比如年轻代,通过 -XX:newSize -XX:MaxNewSize来设置其绝对大小。同样,为了防止年轻代的堆收缩,我们通常会把-XX:newSize -XX:MaxNewSize设置为同样大小
|
||||
- 3. 年轻代和年老代设置多大才算合理 毫无疑问是没有答案的,否则也就不会有调优。我们观察一下二者大小变化有哪些影响
|
||||
- 1. 更大的年轻代必然导致更小的年老代,大的年轻代会延长普通GC的周期,但会增加每次GC的时间;小的年老代会导致更频繁的Full GC
|
||||
- 2. 更小的年轻代必然导致更大年老代,小的年轻代会导致普通GC很频繁,但每次的GC时间会更短;大的年老代会减少Full GC的频率
|
||||
- 3. 如何选择应该依赖应用程序对象生命周期的分布情况:如果应用存在大量的临时对象,应该选择更大的年轻代;如果存在相对较多的持久对象,年老代应该适当增大。但很多应用都没有这样明显的特性,在抉择时应该根据以下两点:
|
||||
- 1. 本着Full GC尽量少的原则,让年老代尽量缓存常用对象,JVM的默认比例1:2也是这个道理
|
||||
- 2. 通过观察应用一段时间,看其他在峰值时年老代会占多少内存,在不影响Full GC的前提下,根据实际情况加大年轻代,比如可以把比例控制在1:1。但应该给年老代至少预留1/3的增长空间
|
||||
- ### 1.4 GC
|
||||
collapsed:: true
|
||||
- 1. [[说说你对Java的GC回收机制的理解]]
|
||||
- 提示:
|
||||
- Java语言有个特征:安全性,就是指Java程序员摆脱了C++ 程序员关于内存管理的问题。使得Java程序员在编写程序时,不需要通过指针操作内存,同时也不需要再去关注内存何时将会被回收清理。这一切,都是因为有的GC回收机制的功劳。
|
||||
- ### 1.5 MySQL
|
||||
collapsed:: true
|
||||
- 1. [[项目中SQL调优的场景有哪些,数据库调优如何做]]
|
||||
- 2. [[最多有过几张表的连表处理]]
|
||||
- 3. [[为什么选择MySQL5.7,而不用5.5 5.6]]
|
||||
- 4. [[数据库中Btree 与Hash索引的区别]]
|
||||
- 5. [[什么是数据库回表,如何避免回表查询]]
|
||||
- 6. [[InnoDB的行级锁什么情况下会使用]]
|
||||
- 7. [[数据库中如何快速插入100W级数据]]
|
||||
- 8. [[联合索引与普通索引的区别在哪里]]
|
||||
- 9. [[有张100W级的表中存在大量的重复数据,如何快速去重]]
|
||||
- 10. [[数据库中复合索引的字段中可以有null值吗]]
|
||||
- 11. [[数据库中两张表如何要联合查询,要如何实现]]
|
||||
- 12. [[mysql数据库索引是用什么数据结构存储的]]
|
||||
- 13. [[事务在什么情况下会失效]]
|
||||
- 14. [[怎么用Sql语句复制另一张表]]
|
||||
- 15. [[数据库连表查询,左外联,右外联,内联查的区别]]
|
||||
- 16. [[sql语句过慢怎么定位问题]]
|
||||
- 17. [[说一下JDBC在连接数据库的操作上几个步骤]]
|
||||
- 18. [[Like 后 加% 和 加_ 的区别在哪里]]
|
||||
- 19. [[说一下事务的隔离级别和事务的传播性质]]
|
||||
- 20. [[说一下怎么防止超卖,SQL怎么写]]
|
||||
- 21. [[如果给你一个功能,你觉得从数据库设计开始的思路是什么]]
|
||||
- 22. [[说一下 ACID 是什么]]
|
||||
- 23. [[数据库用户ID主键策略]]
|
||||
- 24. [[数据库的执行计划]]
|
||||
- 25. [[JDBC如何提升读取数据的性能]]
|
||||
- 26. [[select count(*) ,select count(1),select count(字段) 说一下区别]]
|
||||
- 27. [[索引失效的场景有哪些]]
|
||||
- 28. [[数据库的SQL语句如何加锁]]
|
||||
- 29. [[数据库中哪些字段适合加索引 ,哪些不适合加索引]]
|
||||
- 30. [[什么是聚簇索引,什么是非聚簇索引]]
|
||||
- 31. [[Union 和 union all 的区别是什么]]
|
||||
- 32. [[什么是SQL注入,如何防止]]
|
||||
- 33. [[关闭连接一定能成功吗 怎么保证一定成功关闭连接]]
|
||||
- 34. [[有哪些地方必须关闭资源]]
|
||||
- 35. [[有没有设计过数据库 数据库三范式讲一下]]
|
||||
- 36. [[In 与 exits 的区别是什么]]
|
||||
- 37. [[MySQL中存储引擎InnoDB,MyIsam的区别在哪里]]
|
||||
- 38. [[MySQL中锁机制]]
|
||||
- 39. [[数据库中复合索引的字段中可以有null值吗]]
|
||||
- 40. [[MySQL数据库的my.ini文件中可以配置什么参数]]
|
||||
- 答:在mysql的安装根目录中,创建一个文件my.ini编写以下内容:
|
||||
- ```ini
|
||||
#client mysql 都是设置客户端
|
||||
[client]
|
||||
#port参数表示的是MySQL数据库的端口,默认的端口是3306
|
||||
port=3306
|
||||
[mysql]
|
||||
#default-character-set参数是客户端默认的字符集
|
||||
default-character-set=utf8
|
||||
#mysqld 设置服务端
|
||||
[mysqld]
|
||||
#port参数也是表示数据库的端口
|
||||
port=3306
|
||||
#basedir参数表示MySQL的安装路径
|
||||
basedir="C:/Program Files/MySQL/MySQL Server 5.7/"
|
||||
#datadir参数表示MySQL数据文件的存储位置,也是数据库表的存放位置
|
||||
datadir="C:/ProgramData/MySQL/MySQL Server 5.7/Data/"
|
||||
#default-character-set参数表示默认的字符集,这个字符集是服务器端的
|
||||
character-set-server=utf8
|
||||
#default-storage-engine参数默认的存储引擎
|
||||
default-storage-engine=INNODB
|
||||
#sql-mode参数表示SQL模式的参数,通过这个参数可以设置检验SQL语句的严格程度
|
||||
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
|
||||
#max_connections参数表示允许同时访问MySQL服务器的最大连接数(默认151,最大值16384),其中一个连接是保留的,留给管理员专用的
|
||||
max_connections=1000
|
||||
#query_cache_size参数表示查询时的缓存大小,缓存中可以存储以前通过select语句查询过的信息,再次查询时就可以直接从缓存中拿出信息
|
||||
query_cache_size=0
|
||||
#table_cache参数表示所有进程打开表的总数
|
||||
table_cache=256
|
||||
#tmp_table_size参数表示内存中临时表的总数
|
||||
tmp_table_size=35M
|
||||
#thread_cache_size参数表示保留客户端线程的缓存
|
||||
thread_cache_size=8
|
||||
#myisam_max_sort_file_size参数表示MySQL重建索引时所允许的最大临时文件的大小
|
||||
myisam_max_sort_file_size=100G
|
||||
#myisam_sort_buffer_size参数表示重建索引时的缓存大小
|
||||
myisam_sort_buffer_size=69M
|
||||
#key_buffer_size参数表示关键词的缓存大小
|
||||
key_buffer_size=55M
|
||||
#read_buffer_size参数表示MyISAM表全表扫描的缓存大小
|
||||
read_buffer_size=64K
|
||||
#read_rnd_buffer_size参数表示将排序好的数据存入该缓存中
|
||||
read_rnd_buffer_size=256K
|
||||
#sort_buffer_size参数表示用于排序的缓存大小
|
||||
sort_buffer_size=256K
|
||||
#innodb_additional_mem_pool_size参数表示附加的内存池,用来存储InnoDB表的内容
|
||||
innodb_additional_mem_pool_size=3M
|
||||
#innodb_flush_log_at_trx_commit参数是设置提交日志的时机,若设置为1,
|
||||
#InnoDB会在每次提交后将事务日志写到磁盘上
|
||||
innodb_flush_log_at_trx_commit=1
|
||||
#innodb_log_buffer_size参数表示用来存储日志数据的缓存区的大小
|
||||
innodb_log_buffer_size=2M
|
||||
#innodb_buffer_pool_size参数表示缓存的大小,InnoDB使用一个缓冲池类保存索引和原始数据
|
||||
innodb_buffer_pool_size=107M
|
||||
#innodb_log_file_size参数表示日志文件的大小
|
||||
innodb_log_file_size=54M
|
||||
#innodb_thread_concurrency参数表示在InnoDB存储引擎允许的线程最大数
|
||||
innodb_thread_concurrency=18
|
||||
```
|
||||
- ### 1.6 Mybatis
|
||||
- 1. [[#{} 与 ${} 的区别]]
|
||||
- 2. [[Mybatis的实现原理]]
|
||||
- 3. [[Mybatis级联的配置]]
|
||||
- 4. [[Mybatis的一二级缓存是什么样的]]
|
||||
- 5. [[Mybits的缺点有哪些]]
|
||||
- 6. [[Mybatis如何防止SQL注入]]
|
||||
- ### 1.7 网络编程
|
||||
- 1. [[什么是Socket编程]]
|
||||
- 2. [[TCP与UDP在概念上的区别]]
|
||||
- 3. [[TCP协议的特点,你能说说吗 具体说说3次握手,4次挥手的过程]]
|
||||
- 4. [[OSI七层模型,大概了解么]]
|
||||
- ### 1.8 设计原则与设计模式
|
||||
- 1. [[7大设计原则有哪些]]
|
||||
- 2. [[什么是设计模式,有多少个]]
|
||||
- 3. [[单例设计模式,你会手写么 在项目中哪些地方有应用]]
|
||||
- 4. [[代理设计模式中,静态代理和动态代理的区别]]
|
||||
- 5. [[动态代理中JDK代理和CGLIB代理区别 代理模式,在项目中哪些地方有应用]]
|
||||
- 6. [[工厂设计模式的作用 简单工厂会写不 在项目中哪些地方有应用]]
|
||||
- 7. [[如何克隆一个对象 浅克隆与深克隆区别在哪里]]
|
||||
- 8. [[设计模式中,工厂设计模式有啥用 项目中在哪些地方用过]]
|
||||
- ### 1.9 其它题目
|
||||
- 1. [[异常的分类,如何自定义异常]]
|
||||
- 2. [[普通类和抽象类有哪些区别]]
|
||||
- 3. [[讲讲类的加载过程以及双亲委派机制]]
|
||||
- 4. [[JDK1.8的新特性,你都用过哪些]]
|
||||
- 5. [[网络通讯中tcp协议,udp协议的区别]]
|
||||
- 6. [[普通类和抽象类的区别 接口和抽象的区别]]
|
||||
- 7. [[常用操作字符串有哪些类 StringBuffer,StringBuilder]]
|
||||
- 8. [[String,StringBuffer及StringBuilder的区别]]
|
||||
- 9. [[如何跳出多重循环]]
|
||||
- 10. [[什么是反射]]
|
||||
- 11. [[final 在 Java 中有什么作用]]
|
||||
- 12. [[说一下你熟悉的设计模式]]
|
||||
- 13. [[谈谈面向对象]]
|
||||
- 14. [[谈谈多线程并发]]
|
||||
- 15. [[什么是Java的反射]]
|
||||
- 16. [[Java的反射,在哪些地方有过应用]]
|
||||
- 17. [[反射获得Class对象的3种方式]]
|
||||
- 18. [[反射操作私有属性时,需要注意什么]]
|
||||
- 19. [[抽象类可以继承实体类么]]
|
||||
- 20. [[抽象类可以继承接口么]]
|
||||
- 21. [[接口可以继承抽象类么]]
|
||||
- 22. [[IO流的分类有哪些]]
|
||||
- 23. [[谈谈BIO,NIO,AIO的区别是什么,你都用过哪些IO框架]]
|
||||
- 24. [[Object类的常见方法都有哪些]]
|
||||
- 25. [[Java中异常的分类,分别说说都哪些具体的异常]]
|
||||
- 26. [[遇到BUG,你是如何调试的]]
|
||||
- 27. [[如果运行结果跟预期不一样,但是代码没报错,怎么处理]]
|
||||
- 28. [[有没有用过断点调试 怎么用的]]
|
||||
- 29. [[JDK,JRE,JVM的区别]]
|
||||
- 30. [[重写和重载的区别在哪里]]
|
||||
- ## 二阶段
|
||||
- ### 2.1 Spring
|
||||
- 1. [[对springIOC的理解]]
|
||||
- 2. [[讲下springAOP,项目中你是如何应用的]]
|
||||
- 3. [[动态代理模式中JDK与CGLIB的区别]]
|
||||
- 4. [[Spring的循环依赖问题,如何解决]]
|
||||
- 5. [[谈谈你对Spring bean的生命周期的理解]]
|
||||
- 6. [[Spring中对事务的支持,有哪些方式 你项目中如何处理事务]]
|
||||
- 7. [[Spring中bean基本都是单例的,如果一个方法要对bean中的属性值进行修改,这个方法会被多次执行,怎么确保安全]]
|
||||
- 8. [[讲一下浅克隆与深克隆]]
|
||||
- 9. [[@Resource和@Autowired的区别]]
|
||||
- 10. [[介绍一下你的项目AOP日志功能如何实现的]]
|
||||
- 11. [[Spring依赖注入的方式有哪些 有区别么]]
|
||||
- 12. [[Spring的常用注解都有哪些]]
|
||||
- 13. [[Spring 事务实现方式有哪些]]
|
||||
- 14. [[BeanFactory 和 ApplicationContext的区别]]
|
||||
- 15. [[Spring中bean基本都是单例的,如果一个方法要对bean中的属性值进行修改,这个方法会被多次执行,怎么确保安全]]
|
||||
- 16. [[Spring实例化组件时,如何设置属性]]
|
||||
- ### 2.2 SpringMVC
|
||||
- 1. [[SpringMVC框架的工作流程]]
|
||||
- 2. [[forward和redirect的区别]]
|
||||
- 3. [[说一下@requestMapping的作用]]
|
||||
- 4. [[知道拦截器么,你项目中哪里使用过拦截器]]
|
||||
- 5. [[Springmvc 过滤器 拦截器的使用场景和区别是什么]]
|
||||
- ### 2.3 SpringBoot
|
||||
- 1. [[SpringBoot如何实现自动配置 原理是什么]]
|
||||
- 2. [[SpringBoot的web模块自动集成了Tomcat,如何剔除]]
|
||||
- 3. [[说说你常用的几个SpringBoot注解]]
|
||||
- 4. [[你上个项目用的SpringBoot版本是那个版本的]]
|
||||
- 5. [[SpringBoot主要的配置类有哪些]]
|
||||
- 6. [[Spring,Springmvc,SpringBoot的区别是啥]]
|
||||
- 7. [[可不可以配置两个数据源 比如一个mysql和一个oracle 在哪里配置,怎么配置]]
|
||||
- 8. [[SpringBoot在yaml中配置了开发环境配置文件和测试配置文件,有几种方式在不同环境去使用不同的配置文件]]
|
||||
- 9. [[SpringBoot的优点在哪里]]
|
||||
- 10. [[当application.properties,application.yaml,bootstrap.yaml文件同时存在的情况下,它们的执行顺序是怎样的]]
|
||||
- 11. [[Spring的启动流程是怎么样的]]
|
||||
- ### 2.4 Web题
|
||||
- 1. [[HTTPS 通讯协议是如何实现的 它的加密方式是什么]]
|
||||
- 2. [[在HTTP请求中如何存储客户信息(分如何获取和如何存储)]]
|
||||
- 3. [[Ajax怎么实现同步]]
|
||||
- 4. [[你们项目中,使用的什么 数据交换格式]]
|
||||
- 5. [[HTTP通讯协议分为几个部分 请求协议的组成]]
|
||||
- 6. [[JSON的解析框架,你用过什么]]
|
||||
- 7. [[XML与JSON之间的区别]]
|
||||
- 8. [[页面加载很慢,有什么优化方案]]
|
||||
- 9. [[重定向和请求转发的区别是什么]]
|
||||
- 10. [[JSON格式长什么样 那么JSONArray呢]]
|
||||
- 11. [[Servlet的生命周期]]
|
||||
- 12. [[Tomcat如何配置连接池 默认连接数是多少 == 生产环境,Tomcat性能比较差,如何调优]]
|
||||
- 答:修改conf目录下的server.xml即可实现:
|
||||
- ```xml
|
||||
<!--线程池的设置-->
|
||||
<Executor executor="tomcatThreadPool"
|
||||
namePrefix="catalina-exec-"
|
||||
maxThreads="500"
|
||||
minSpareThreads="100"
|
||||
maxSpareThreads="500"
|
||||
prestartminSpareThreads="true"
|
||||
maxQueueSize="10000"
|
||||
/>
|
||||
|
||||
<!--name:连接池名称;
|
||||
namePrefix:连接池创建的每个线程的名称前缀。单个线程的线程名称将为namePrefix + threadNumber;
|
||||
maxThreads:此池中活动线程的最大数量,默认值为200;也就是最大的并发数
|
||||
minSpareThreads:此池中始终保持活动状态的线程最小数量,默认值为25
|
||||
maxSpareThreads;此池中始终保持活动状态的线程最大数量 prestartminSpareThreads:启动连接池,激活最小活跃线程minSpareThreads也同时生效
|
||||
maxQueueSize:HTTP请求的最大的队列长度,默认值是Integer.MAX_VALUE。-->
|
||||
|
||||
<!--连接器的设置-->
|
||||
<Connector
|
||||
port="8080"
|
||||
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
|
||||
connectionTimeout="20000"
|
||||
maxConnections="10000"
|
||||
acceptCount="10000"
|
||||
acceptorThreadCount="2"
|
||||
enableLookups="false"
|
||||
executor="tomcatThreadPool"
|
||||
redirectPort="8443"
|
||||
/>
|
||||
<!--
|
||||
connectionTimeout:连接超时时间,单位是毫秒;
|
||||
maxConnections:服务器在任何给定时间接受和处理的最大连接数。请注意,一旦达到限制,
|
||||
操作系统仍然可以接受基于acceptCount设置的连接。默认值因连接器类型而异。
|
||||
对于NIO和NIO2,默认值为10000.对于APR /本机,默认值为8192;
|
||||
acceptCount:当连接不够时,可以使用队列暂时存放HTTP请求,队列满时收到的任何请求都将被拒绝。默认值是100
|
||||
acceptorThreadCount:每个连接可以获得的线程数,最大不要超过2;
|
||||
enableLookups:是否允许DNS查询;
|
||||
executor:连接池的名字;
|
||||
redirectPort:重定向端口-->
|
||||
```
|
||||
- 13. [[在请求中如何存储客户信息]]
|
||||
- 14. [[如何防止表单重复提交]]
|
||||
- 15. [[HTTP协议中GET与POST提交方法的区别在哪里]]
|
||||
- 16. [[你对RestFul架构风格是如何理解的 平时都是怎么样的]]
|
||||
- ### 2.5 Shiro
|
||||
- 1. [[Shiro的执行流程]]
|
||||
- ## 三阶段
|
||||
- ### 3.1 RabbitMQ
|
||||
- 请说说消息队列的工作模式有哪些
|
||||
- MQ是如何保证消息不丢失的
|
||||
- MQ的工作原理
|
||||
- 如果保证用户一定能消费成功
|
||||
- 延迟队列,死信队列的区别是什么
|
||||
- 请说说RabbitMQ的优缺点
|
||||
- 延迟队列如何实现
|
||||
- 如果让你自己写个MQ服务器,你的思路是什么 需要使用到什么技术
|
||||
- 如何解决消息延时及过期失效的问题 如果有几百万条消息持续积压几小时,说说怎么解决
|
||||
- 讲一下MQ服务器的推拉模式,你在项目中是如何运用的
|
||||
- rabbitmq怎么实现订单延迟支付
|
||||
- 说一下怎么用rabbitmq实现取消订单的用户积分减少的
|
||||
- MQ是什么 你用过哪个 怎么配置的
|
||||
- ### 3.2 Redis
|
||||
- 什么是接口幂等性,如何保证接口幂等性操作
|
||||
- 幂等性问题会出现在哪些地方
|
||||
- Redis支持的数据类型
|
||||
- Redis的持久化方式,以及各自的区别,项目中用的哪一种,怎么配置的
|
||||
- 如何保证与数据库的双写一致性
|
||||
- 缓存穿透,击穿,雪崩对应的解决方案是什么
|
||||
- 使用的Redis是集群的嘛 有多少个节点,采用的是那种集群方案
|
||||
- 说一下Reddis怎么做集群的
|
||||
- Redis 都有哪些使用场景
|
||||
- Redis 有哪些功能
|
||||
- 分布式锁的目的
|
||||
- 为什么要用redis不用map
|
||||
- Redis是原子性的吗 是线程安全的吗 多线程还是单线程
|
||||
- Redis的特性是哪些,可以用来干嘛
|
||||
- 项目中你们部署了多少台Redis服务器,一般配置多少台,熟悉哨兵机制么
|
||||
- 假设你redis里面有9个商品,我现在有10人来买,怎么防止超卖问题
|
||||
- Redis的单线程原理是什么 如果有10个用户同时操作Redis,那么Redis是否按照先后顺序来处理情况
|
||||
- Redis的分布式锁用过没 描述一下
|
||||
- Redis设置永不过期也可以解决缓存击穿,为什么还要用分布式锁
|
||||
- Redis如何保证与数据库的数据一致性问题
|
||||
- 红锁是怎么实现的 原理是什么
|
||||
- 知道Redis的看门狗机制么,为什么要用到看门狗
|
||||
- Redis的5种数据类型,分别的使用场景
|
||||
- Redis集群知道么,如何实现
|
||||
- Redis持久化机制中AOF与RDB区别在哪里
|
||||
- Redis如何配置RDB
|
||||
- ### 3.3 ES
|
||||
- ES怎么保持和数据库的一致性
|
||||
- ES怎么配权重 可以做数据库吗
|
||||
- ES实现全文检索的原理是什么
|
||||
- ES查询一个张三,李四。张三名字可能会重复,要按照张三的生日去进行排序,这个ES语句怎么写
|
||||
- ### 3.4Linux
|
||||
- 用过的Linux系统都有哪些 什么版本
|
||||
- chmod 改用户组的权限
|
||||
- 如果你在linux部署的项目出现报错时,你需要定位报错信息在哪怎么做
|
||||
- nginx反向代理原理
|
||||
- Nginx的负载均衡策略
|
||||
- Linux如何查看资源的使用情况
|
||||
- chmod如何改用户组的权限
|
||||
- ### 3.5 VUE
|
||||
- 1. Vue的生命周期是什么,都有哪些钩子函数
|
||||
- 2. 谈谈MVC架构与MVVM架构的区别在哪里
|
||||
- 3. VUE都有哪些组件
|
||||
- ## 四阶段
|
||||
- ### 4.1 SpringCloud
|
||||
- 服务熔断和服务降级,项目是如何运用的
|
||||
- 你们通过哪些手段处理系统的高并发问题
|
||||
- 项目中,关于鉴权你们是咋做的
|
||||
- Nacos 与 Eureka的区别
|
||||
- 分布式事务的原理
|
||||
- 为什么选择Seata来处理分布式事务
|
||||
- 说说项目开发流程
|
||||
- SpringCloud体系的几大组件
|
||||
- 讲一下spring cloud 中的服务注册的机制和配置方法
|
||||
- feign远程调用的时候,如何确保feign接口的参数和controller层方法参数一致
|
||||
- 你觉得SpringCloud相比传统的SpringMVC有什么优势
|
||||
- 说一下熔断器,你怎么用的,代码怎么写的
|
||||
- 做集群的时候事务怎么处理
|
||||
- 网关限流时,采用什么技术,使用什么限流算法 咋配置
|
||||
- 分布式高并发下的订单id是如何生成的
|
||||
- 介绍一下spring,springboot,springcloud
|
||||
- openfeign的工作原理,是如何调用服务的
|
||||
- Feign远程调用的时候,如何确保Feign接口的参数和Controller层方法参数一致
|
||||
- 为什么要使用微服务,它的优缺点
|
||||
- 微服务的搭建步骤
|
||||
- 微服务组件都用过哪些,你们微服务的业务逻辑是什么样子的
|
||||
- Eureka如何搭建,如何才能规避因为网络原因导致客户端大面积下线的情况
|
||||
- Eureka高可用怎么配置
|
||||
- 了解网关么,网关的作用是什么,你都在网关中配置过什么内容
|
||||
- 网关限流如何配置 限流算法都用过哪些
|
||||
- 网关是如何找到其他微服务的
|
||||
- Eureka关闭之后,其他的微服务之间还能调用么
|
||||
- Nginx都配置过什么 如何做负载配置,都哪些负载算法
|
||||
- Ngnix代理配置是在哪个文件
|
||||
- Mysql的ini文件,都有些参数可以配置
|
||||
- Mybatis和MybatisPlus 你在项目中,哪个用的较多
|
||||
- 有哪些方法可以防止微服务接口被攻击
|
||||
- ### 4.2 Seata
|
||||
- 1、什么是分布式事务,项目中哪些地方遇到分布式事务
|
||||
- 2、什么是2阶段提交,Seata是如何做2阶段提交的
|
||||
- 3、Seata是三大核心组件是哪些,他们分别的作用是什么
|
||||
- 4、Seata的AT模式与TCC模式区别在哪里
|
||||
- 5、AT模式在运行过程中,如何进行2阶段处理的
|
||||
- 6、分布式事务的两个理论特性 是什么
|
||||
- 7、请说一下Seata的执行流程
|
||||
- ### 4.3 Alibaba组件
|
||||
- 1、说说nacos吧
|
||||
- 2、
|
||||
- 其他问题
|
||||
- 你在项目中遇到的最大问题是什么 如何解决的
|
||||
- 项目部署没有 有没有经过压力测试 有没有经过渗透测试
|
||||
- 用过哪些经典的设计模式,谈谈你对它们的理解
|
||||
- 假如1个接口的QPS只有10,超过10会怎样 如何解决
|
||||
- 在使用git的过程中,遇到冲突,你是如何处理的
|
||||
- 单点登录的实现原理
|
||||
- 如何防止后端接口被攻击
|
||||
- 每天1万人访问主页并发量有多少
|
||||
- 负载均衡怎么实现
|
||||
- 你们开发规范是什么,具体开发流程是什么,需求分析谁做,原型设计怎么来的
|
||||
- 测试怎么做的
|
||||
- 项目中有哪些设计是存在缺陷或者不合理的
|
||||
- 你熟悉秒杀流程 那么秒杀如何保证数据一致性
|
||||
- 你们项目上线前会在哪里测试 怎么部署的 多个环境你该怎么设置
|
||||
- 大佬跟你讲的东西,你怎么判断正不正确
|
||||
- 三层架构是哪三层 具体说说,你知道它们分别对应的架构模式采用的是什么么
|
||||
- 在生成订单过程中,如果MySQL崩了,怎么办
|
||||
- 能详细说下非对称加密的流程吗
|
||||
- 生产环境中应用有问题如何分析问题
|
||||
- GIT回退上个版本,用什么命令 切换分支用哪个命令
|
||||
@@ -0,0 +1,3 @@
|
||||
- 占两字节内存空间,共16位
|
||||
- 取值$-2^15$~$2^15$
|
||||
-
|
||||
@@ -0,0 +1,9 @@
|
||||
- [[java跨平台原理]]
|
||||
- [[IDE集成开发环境]]
|
||||
- [[基本数据类型]]
|
||||
- [[标识符]]
|
||||
- [[变量]]
|
||||
- [[隐式转换]]
|
||||
- [[强制转换]]
|
||||
- [[算术运算符]]
|
||||
- [[关系运算符]]
|
||||
@@ -0,0 +1,9 @@
|
||||
- [[java跨平台原理]]
|
||||
- [[IDE集成开发环境]]
|
||||
- [[基本数据类型]]
|
||||
- [[标识符]]
|
||||
- [[变量]]
|
||||
- [[隐式转换]]
|
||||
- [[强制转换]]
|
||||
- [[算术运算符]]
|
||||
- [[关系运算符]]
|
||||
@@ -0,0 +1,34 @@
|
||||
- 计算机编程语言
|
||||
- 自然语言:人与人之间的语言
|
||||
- 中文
|
||||
- 英语...
|
||||
- 人和电脑交互的语言
|
||||
- 编程语言发展
|
||||
- 1. 二进制语言
|
||||
- 第一代:二进制编程语言/机器语言
|
||||
- 组成:0和1
|
||||
- 特点:阅读性极差,维护性极差,开发效率非常低下
|
||||
- ```
|
||||
00010011
|
||||
```
|
||||
- 2. 汇编语言(符号语言)
|
||||
- 思想:使用一些特殊的符号,替代难于理解的01
|
||||
- AB-10101111
|
||||
&A-00110101
|
||||
- ```
|
||||
AB &A CB
|
||||
```
|
||||
- 特点:阅读性,维护性仍旧很差,但是简化了大量的01组合
|
||||
- 3.高级编程语言
|
||||
- 采用人类的语言作为编程的标准
|
||||
- ```java
|
||||
system.out.println("Hello");
|
||||
```
|
||||
- 分类
|
||||
- 结构化编程
|
||||
- C语言
|
||||
- 面向对象
|
||||
- C++
|
||||
- Java
|
||||
- 来自对C++的封装,C++来自对C的封装,所以Java也是C系语言中的一种
|
||||
- C#
|
||||
@@ -0,0 +1,37 @@
|
||||
- [[预习]]
|
||||
- [[练习]]
|
||||
- ## 第一周
|
||||
- ### 第一天 [[Mar 28th, 2022]]
|
||||
- [[计算机基础理论]]
|
||||
- 课堂总结
|
||||
- 1. 硬件&软件
|
||||
2. 软件
|
||||
3. 编程语言
|
||||
- [[DOS命令]]
|
||||
- [[windows快捷键]]
|
||||
- 课堂总结
|
||||
- 1. 打开DOS
|
||||
2. DOS命令
|
||||
3. 快捷键
|
||||
- [[Java发展历程]]
|
||||
- 课堂总结
|
||||
- 1. JDK里程版本
|
||||
2. Java三个开发方向:桌面,手机,企业/互联网
|
||||
3. Java语言特点
|
||||
简单...
|
||||
4. JDK>JRE>JVM
|
||||
- [[JDK环境搭建]]
|
||||
- 课堂小结
|
||||
- 变量配置
|
||||
- JAVA_HOME
|
||||
- Path
|
||||
- CLASSPATH
|
||||
- 编译javac
|
||||
- 运行java
|
||||
- [[HelloWorld详解]]
|
||||
- 课堂小结
|
||||
- Java编写执行:编译-->解释
|
||||
- 编译:源代码-->Class字节码
|
||||
- 解释:将Class字节码中信息解释为01二进制信息给JVM执行
|
||||
- 编译javac.exe执行
|
||||
解释java.exe执行
|
||||
@@ -0,0 +1,38 @@
|
||||
- [[练习]]
|
||||
- [[总结]]
|
||||
- ## 第一周
|
||||
- ### [[第一天 [[Mar 28th, 2022]]]]
|
||||
id:: 6243f2eb-1936-487f-9b7e-f755bc19a26c
|
||||
- ### [[第二天 [[Mar 29th, 2022]]]]
|
||||
id:: 6243f2eb-c01a-4a1e-b0a0-3d5da4c01d3a
|
||||
- ### [[第三天[[Mar 30th, 2022]]]]
|
||||
id:: 6243f2eb-7784-4d21-85a9-0d5769977cd1
|
||||
- ### [[第四天[[Mar 31th, 2022]]]]
|
||||
id:: 62443d8f-0b57-4183-9c26-4d6c709a7e0d
|
||||
- ### [[第五天[[Apr 1st, 2022]]]]
|
||||
id:: 62443e30-53da-464a-a0f8-d6df37f2351a
|
||||
- [[面向对象的定义]]
|
||||
- [[类与对象]]
|
||||
- [[类和对象的创建]]
|
||||
- [[属性与方法]]
|
||||
- [[参数的传递]]
|
||||
- [[对象的内存模型分析]]
|
||||
- [[构造方法]]
|
||||
- [[JavaBean规范]]
|
||||
- [[修饰符]]
|
||||
- [[getter/setter方法]]
|
||||
- [[this]]
|
||||
- [[static]]
|
||||
- [[重载]]
|
||||
- [[继承的定义]]
|
||||
- [[继承方式]]
|
||||
- [[重写]]
|
||||
- [[final方法]]
|
||||
- [[super关键字]]
|
||||
- [[类的初始化顺序]]
|
||||
- [[抽象类]]
|
||||
- [[接口]]
|
||||
- [[向上转型与向下转型]]
|
||||
- [[多态的应用]]
|
||||
- [[面向对象的特征]]
|
||||
-
|
||||
@@ -0,0 +1,11 @@
|
||||
- 计算机发展
|
||||
- 46y2m 第一台计算机产生
|
||||
- 1. 电子管计算机时代40-50
|
||||
- 特点:体积大,能耗高,执行效率低下
|
||||
- 2. 晶体管50-60体积
|
||||
- 特点:体积依旧大,能耗依旧大,效率有所提升
|
||||
- 3. 中小规模集成电路60-70
|
||||
- 特点:体积,能耗,效率进一步提升
|
||||
- 4. 大规模集成电路70-80
|
||||
- 特点:体积,能耗,效率进一步提升
|
||||
-
|
||||
@@ -0,0 +1,6 @@
|
||||
- 重要程度:低
|
||||
- 课程目标
|
||||
- 1. 了解[[计算机组成]]
|
||||
2. 了解[[计算机发展历程]]
|
||||
3. 什么叫[[软硬件]]
|
||||
4. 什么叫[[编程语言]]
|
||||
@@ -0,0 +1,6 @@
|
||||
- 重要程度:低
|
||||
- 课程目标
|
||||
- 1. 了解[[计算机组成]]
|
||||
- 2. 了解[[计算机发展历程]]
|
||||
- 3. 什么叫[[软硬件]]
|
||||
- 4. 什么叫[[编程语言]]
|
||||
@@ -0,0 +1,23 @@
|
||||
- 控制类,方法,属性是否能被其它类或方法访问的权限控制
|
||||
- 四个访问修饰符
|
||||
- [[public]]
|
||||
- [[protected]]
|
||||
- [[继承]]的子类包里可以使用
|
||||
- 默认的
|
||||
- 仅在同一个包内可以调用
|
||||
- [[private]]
|
||||
- 在同一个类里面可以用
|
||||
- id:: 624ff0b4-39b0-4eef-9c71-0990589ca29a
|
||||
|访问修饰符|本类|本包|其它包的子类|其它包的其它类|
|
||||
|private|√|×|×|×|
|
||||
|默认|√|√|×|×|
|
||||
|protected|√|√|√|×|
|
||||
|public|√|√|√|√|
|
||||
- 作用范围
|
||||
- public>protected>默认>private
|
||||
- [[封装]]
|
||||
- 面向对象语言三大特征
|
||||
- [[封装]][[继承]][[多态]]
|
||||
- 有时新书中新添加一个[[抽象]]
|
||||
- 变量的二义性
|
||||
- 当方法的形参和对象的属性重名时,不知道操作的是那个值
|
||||
@@ -0,0 +1,23 @@
|
||||
- 控制类,方法,属性是否能被其它类或方法访问的权限控制
|
||||
- 四个访问修饰符
|
||||
- [[public]]
|
||||
- [[protected]]
|
||||
- [[继承]]的子类包里可以使用
|
||||
- 默认的
|
||||
- 仅在同一个包内可以调用
|
||||
- [[private]]
|
||||
- 在同一个类里面可以用
|
||||
- id:: 624ff0b4-39b0-4eef-9c71-0990589ca29a
|
||||
|访问修饰符|本类|本包|其它包的子类|其它包的其它类|
|
||||
|private|√|×|×|×|
|
||||
|默认|√|√|×|×|
|
||||
|protected|√|√|√|×|
|
||||
|public|√|√|√|√|
|
||||
- 作用范围
|
||||
- public>protected>默认>private
|
||||
- [[封装]]
|
||||
- 面向对象语言三大特征
|
||||
- [[封装]][[继承]][[多态]]
|
||||
- 有时新书中新添加一个[[抽象]]
|
||||
- 变量的二义性
|
||||
- 当方法的形参和对象的属性重名时,不知道操作的是那个值
|
||||
21
logseq-java/logseq/bak/pages/重写/2022-04-19T01_19_48.159Z.md
Normal file
21
logseq-java/logseq/bak/pages/重写/2022-04-19T01_19_48.159Z.md
Normal file
@@ -0,0 +1,21 @@
|
||||
-
|
||||
- Overload[[方法的重载]]
|
||||
- 同一个类中
|
||||
- 父子之间,由子类去重新编写父类的方法
|
||||
- 当父类的方法不符合子类的需求时,子类可以重写父类的方法
|
||||
- 注意
|
||||
- 子类不能重写父类的私有方法
|
||||
- 子类[[访问修饰符]]必须大于或等于父类
|
||||
- 重写方法的返回值类型可以不一样,父类的返回类型范围要大于子类,且 返回类型存在继承关系
|
||||
- [[注解]]
|
||||
- @override
|
||||
- 表示下面的方法是重载
|
||||
- @override与javac达成约定,让javac检查注解下的方法是否来自于父类
|
||||
- 经典案例
|
||||
- 默认情况下使用System.out.println(对象)
|
||||
- 调用Object上的toString()
|
||||
- 打印对象的[[地址值]]
|
||||
- 地址值作用
|
||||
- 让程序员知道这个对象是否new成功
|
||||
但是不知道对象里具体内容
|
||||
- 重写父类的toString方法
|
||||
@@ -0,0 +1,35 @@
|
||||
- [[强制转换]]
|
||||
- Java允许低类型数据保存到高类型变量中
|
||||
- byte<char<short<int<long<float<double
|
||||
- char
|
||||
- 每一个字符都有对应十进制数来表示
|
||||
- ASCII编码
|
||||
- 在Java中,小容量的数据类型可以向大容量的数据类型转换
|
||||
- 字符类型也可以参与计算
|
||||
- 字符类型会根据[[ASCII]]码转换,然后参与计算
|
||||
- ```java
|
||||
public static void main(String[] args){
|
||||
char a = 'A';
|
||||
int b = 10;
|
||||
System.out.println(a + b);
|
||||
}
|
||||
```
|
||||
- 总结
|
||||
- 隐式转换
|
||||
- 字符集
|
||||
- 隐式转换ibyte+byte编译错误 #Java面试
|
||||
id:: 6243be14-7a99-4175-8975-50f29880f478
|
||||
- ```java
|
||||
public static void main(String[] args){
|
||||
byte a = 1;
|
||||
byte b = 10;
|
||||
//错误 byte c = a + b;
|
||||
int c = a + b
|
||||
System.out.println(c);
|
||||
}
|
||||
```
|
||||
- 使用short相加后也是int
|
||||
- byte + 数字后也是int类型
|
||||
- byte a = 126 +1 这个不报错
|
||||
编译器会自动检测后面计算的值是否超出范围
|
||||
- 
|
||||
Reference in New Issue
Block a user