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