程序员知识体系
2022-01-25 11:23:23 21 举报
AI智能生成
java程序员知识体系.帮助新手程序员快速建立知识框架.
作者其他创作
大纲/内容
浏览器
Dome解析
JS 执行
编码与解码
安全规则
跨域访问
协议不同
域名不同
端口不同
解决方法
服务端允许跨域
服务端程序过滤器实现
Web服务器配置
Jsonp
服务端代理
修改请求源 referer
本地资源访问
cookie
摄像头
麦克风
本地文件
IP, 域名 , DNS
host
DNS
本地DNS
DNS服务器
IP
prot
path
网络传输
URL 与 URI
URL资源定位 http://www.baidu.com/news/1
URI资源标记 www.baidu.com/news/1
协议 TCP/IP
TCP 建立通道才能发送
http
https
公钥
客户端,只加密
私钥
服务端,只解密
WebSocket
使用http建立通道
模拟Socket模式双向通讯
ws
ftp
ssh
Telnet
SMTP
通道管理
三次握手建立通道
关闭通道四次挥手
数据流
UDP 只管发数据包
ping
DNS服务
早期 QQ
数据包
Socket 套接字, 通道保持, 抽象层,非协议
TCP协议
ClientSocket
ServerSocket
UDP 协议: DatagramSocket
通道管理线程
监听
TCP: accept()
UDP: receive()
读写
TCP: 数据流 InputStream,OutputStream
UDP: 数据包 DatagramPacket
传输协议
TCP
UDP
除了点对点通信还可以广播
请求方式
get
head
post
put
delete
Request 与 Response
资料: https://www.cnblogs.com/klb561/p/10090540.html
编码与解码
二进制
byte[]
enCode(str,Charset), deCode(byte[],Charset)
序列化
Serializable 与 serialVersionUID
保持Class版本一致
JVM反序列化过程
Web服务器 (IIS, Nginx , Apache)
配置方式
http
server
listen
port
server_name
ip 或 host
静态资源访问: location
root
index
配置代理
反向代理: proxy_pass
ip:port
服务组名称
负载均衡: upstream
服务组
server ip:port
weigh
iphash
server ip:prot
stream 端口跳板
server
listen port
proxy_pass
upstream
SSL 证书配置
server
listen 443 ssl
ssl_certificate
ssl_certificate_key
应用服务器 (Aapche PHP, Tomcat ,jetty , Weblogic )
Tomcat 请求处理流程
Service
Connector 8080:8443
Engine
Host
appBase
web.xml
Servlet
Service(req,res)
HttpServlet
doGet()
doPost()
过滤器 Filter
doFilter(req,res)
监听器 Listener
监听对象创建及销毁
监听对象属性变化
监听Session中的javaBean变化
Context
Cookie 与 Session
Cookie
服务端创建,返回给客户端
客户端保存
有效期
客户端访问时携带Cookie
域名限制
Session
服务端创建Session并保存, 返回特殊的Cookie
SessionID
Session有效期
客户端保存Cookie
客户端访问时携带Cookie
服务端通过Cookie中的SessionID 获取 Session
Cookie禁用后的处理方式:
url重写
url中携带SessionID
表单隐藏字段
使用token
转发与重定向
转发: forword
request共享
本web应用内
request.forword()
重定向: Redirect
生成新的 request 对象
response.sendRedirect()
项目框架 spring
Spring MVC
DispatchServlet
doService()
HandlerMapping
Handler
Controller Methord
HandlerAdapter
拦截器 Intecepter
HttpServletRequest
doDispatch()
Handler
handle()
ModelAndView
Model
View
IOC 容器
思想: 面向接口编程
参与者
应用程序
容器 ApplicationContext
资源
@Bean @Service @Controller @Compent ...
工具类 XXtemplate
配置类
...
控制反转
应用程序不再创建资源. 交给容器创建
依赖注入
由容器在需要的时候将资源注入给应用程序.单例模式
优点: 依赖抽象, 不依赖实现
动态实现
@Autowrite
byType 方式
@Qualifier("name") 按名称指定实现类
@Resource
默认 byName 方式
@Resource(name = "xxxx") 按名称指定实现类
@Resource(type = "xxxx") 按类型指定实现类
切面AOP
@Aspect 定义准备切入的类
Pointcut 切入点 | 连接点
@Pointcut
目标位置 | 切入位置 表达式
execution 表达式描述方式
@annotation 注解类描述方式
切入点签名
用一个空方法表达
Advice 事件通知
@Before(切入点签名)
@After(切入点签名)
@Around(切入点签名)
JointPoint 连接点对象
获取被切入目标的类名,方法名,参数, 返回值 等信息
总结: 监听目标位置的某些事件, 当事件发生时执行另外一些方法
实际是动态代理原理
用途
记录日志
全局异常处理
权限认证
检查重复提交
...
SpringBoot
@SpringBootApplication
spring-boot-autoconfigure.jar
spring.factories
自动配置 XXAutoConfiguration
ConditionalOnXX
启动器 Starter
编写代码
项目分层
controller
service
Impl
dao | Mapper
Impl
数据对象
vo
值对象 或 页面对象
controller 层
dto
数据传输对象
service层
po
持久化对象
dao 层
pojo
简单java对象
maven
项目中的 pom.xml
project
dependencies
定位标记
groupId
artifactId
version
build
resources
plugins
repositories
使用指定仓库
使用命令
complie
package
install
deploy
clear
组合使用
jar包拉取顺序
1.本地仓库
localRepository
2.中央仓库
Central Repository
https://repo.maven.apache.org/maven2
3.远程仓库
repositories
settings.xml配置
localRepository
本地仓库
profiles
profile
repositories
远程仓库(私服)
activeProfiles
激活profile
mirror
仓库代理
mirrorOf
*
代理所有仓库
central
代理中央仓库
授权访问
第三方授权 OAuth 2.0
基本概念
资源服务
访问用户
授权中心
令牌
流程
1. 用户访问资源
2.资源服务要求用户授权
跳转到授权中心的登录授权页面, 携带返回地址
3.用户登录成功并同意授权
4. 授权中心携带code 返回资源服务的指定页面
5.资源服务向授权中心提交code ,申请token
6.授权中心返回token
7.资源服务返回资源给用户
令牌
jwt
token
时效
有效范围
系统内授权访问
API 拦截器
1. 登录成功生成token并返回给前端
2. 访问api 携带token
3. 服务端验证token
获取请求参数
@RequestParam
queryString
?id=111
@PathVariable
/id/1
key:value
formdata
key:value
文件上传
Spring MultipartFile
@RequestBody
json
text
xml
HttpServletRequest 对象
获取 Header
获取 Content-Type
获取...
inputStream
常用工具
字符串工具
判断是否为空
字符串格式化
String.fomat
日期,时间
格式化
SimpleDateFormat
获取日期或时间
Calendar
数字格式化
NumberFormat
远程访问
Apache Http Client
OkHttp
RestTemplate
属性复制
BeanUtil.copyProperties()
Apache
spring
MapStruct
数据解析
json
fastjson
对象转json
字符串转json
json转对象
json转字符串
mybatis 查询可以直接返回 jsonObject
xml
jaxb
html
excel 导入导出: easyExcel
生成唯一标识
uuid
雪花算法
生成随机数
Math.random()
Random 类
图片压缩: thumbnailator
使用jpg格式
加密工具
base64
64个字符
将二进制数据转成文本数据
MD5
DES
对称加密
AES
非对称加密
字符串编码解码
ASCII 编码表
ISO-8859-1
GB2312
UNICODE 编码表
UTF-8
UTF-16
数据库读写
关系型数据库 Mybatis
事务
SQL
索引
MySql 索引失效的情况
null
where条件使用函数 或 运算
数据值区别小
性别字段,状态字段
不符合复合索引顺序
左优先
like 左边的 %
数据类型不一致
字符串
日期
分库分表
MyCat
独立服务
sharding-jdbc
功能插件
文档型数据库 Spring Data Template
集群
分片
语法
防止重复提交
前端
按钮禁用
不能防止用户刷新页面
后端
token机制
流程
1.用户进入表单页面, 服务端生成token 保存到session 并返回
2.表单页面隐藏 token值
3.表单提交, 服务端验证 token值是否一致
池化
连接池
数据库连接池
Hikari
druid
c3p0
redis连接池
jedis
lettuce
远程访问连接池
HttpComponentsClientHttpRequestFactory
线程池
ThreadPoolTaskExecutor
缓存
springMVC 缓存
Mybatis 缓存
Mysql 缓存
redis
线程
创建并运行
线程返回值
线程间通讯
异常控制
线程销毁
同步锁
I/O 流
输入流
输出流
数据
开始位置
结束位置
数据体
NIO
io多路复用
零 copy
netty
缓冲区
ByteBuffer
ImageBuffer
FileBuffer
DataBuffer
测试 | debug
JUnit
@SpringBootTest
接口测试工具
postman
API文档工具
apizza
showdoc
apiPost
api模拟
Mock
mock.js
项目设计
需求分析
业务分析 UML
业务目标
用户角色
业务对象
业务逻辑
用户行为分析
页面原型
用户操作逻辑
数据展示设计
用户操作与后台代码的关系
压力评估
并发量评估
如何计算并发量
场景一
参数
N: 每日平均访问用户数
400
L: 单个用户每日平均使用时长
4小时
T: 每日使用时长
8小时
平均并发用户数
C = N*L/T
200
峰值并发用户数
MC ≈ C + 3*根号C
242
场景二
1分钟内最大5000个客户端请求. 每个请求响应时间不超过2秒
5000*2/60 = 167 /秒
设计目标为评估量的3倍
压力测试
测试工具
jmeter
Apache ab
关键指标
90% 响应时长
吞吐量 QPS
框架设计
层级
访问层
用户端网关
用户端静态页面
应用层
应用服务
内部网关
数据层
数据库
缓存
消息队列
服务切分
核心业务
不能死的
重逻辑业务
处理时间长的
高压力业务
并发压力大的
服务间通讯
同步
超时设置
异步
重复消费
异常处理
缓存选型
数据库选型
编程思想
设计原则
开闭原则
对扩展开放,对修改关闭
单一职责
一个Class/Interface/Method 只负责一项职责
依赖倒置
依赖抽象不依赖实现
接口隔离
用多个专门(Interface)的接口,而不使用单一的总接口
....
设计模式
工厂模式
门面模式
责任链模式
....
从术到道
画家间的区别
厨师间的区别
运维
服务安装及配置
mysql
nginx
redis
jdk
tomcat
防火墙开放端口
ping
telnet
环境配置
Path
内网IP, 外网IP
JAVA_HOME
应用发布
运行环境参数
profiles
日志
log4j
logback
root
输出器 appender
输出位置 file
输出样式 encoder
日志级别 fileter-level
使用
log.info()
log.error()
分布式日志收集
ELK
备份
mysql
mysqldump
主从复制
redis
快照备份
AOF文件备份
mongo
副本集
服务状态监控
堆
应用程序 new 出来的对象占用内存
新生代
老年代
栈
Class , Methord , 静态成员 占用的内存
CPU占用率
主要受线程处理速度影响
内存占用率
主要受线程数量, 堆内存使用影响
集群
网关
负载均衡
session共享
代理服务器 IP hash
tomcat 配置
spring redis session
分布式锁
出现的问题
1. 2个节点服务同时读取到数据并各自处理. 同时更新数据.
场景
1. 读取数据
2. 业务处理....
3. 更新数据. 后面的更新会覆盖上一次更新的结果
2. 2个节点执行相同的任务. 由于网络问题. 先执行的结果后提交
场景
1. 服务A, B 先后读取数据
2.各自任务处理
3. 由于网络问题 A 提交在B之后. 处理结果被覆盖
解决办法
redis分布式锁
分布式
服务注册发现
服务间通讯
同步通讯RPC
Web API
Spring RestTemplate
阿里: Dubbo
异步通讯
消息队列
服务网关
分布式事务
事务协调器
阶段提交
准备阶段
提交阶段
确认阶段
回滚阶段
CAP理论
C 数据一致性
客户端的每次读操作,要么读到的是最新的数据,要么读取失败
保证数据一致
A 服务可用性
任何客户端的请求都能得到响应数据,不会出现响应错误
保证有数据返回,不保证一致
P 分区容错性
当任意数量的消息丢失或延迟到达时,系统仍会继续提供服务,不会挂掉
保证服务不挂
常用组合
CP
如果由于网络分区而无法保证特定信息是最新的,则系统将返回错误或超时
例如: kafka rebanlce 过程中不能提供服务
AP
系统将始终处理客户端的查询并尝试返回最新的可用的信息版本,即使由于网络分区而无法保证其是最新的
需要保证最终一致性
降级,熔断
单点登录
用户中心
注册
登录
认证机制
cookie
token
资源服务
0 条评论
下一页