Web,网络,线程总结


前端三剑客:
1.HTML
2.CSS
3.JS

JQuery

1.根据id获取元素:jQuery (“#id”)
2.赋值:jQuery (“#id”).val(“值);
3.设置属性:jQuery(“#id”).attr(“str”,"");
4.去空:trim();
5.Ajax请求:Jquery.getJSON(”后端API地址“, {参数},function(data){…})

Tomcat:发布应用程序

8.5.X->servlet3.1
9.X
bin:启动和停止
logs:查看日志----->tail -f
webapps:war/jar存放在根路径
conf:配置文件目录 servlet.xml可以修改tomcat端口号
查询Java程序列表:ps -ef|

HTTP

在这里插入图片描述

HTTP状态码(重要)

请求端:request
1.首行(方法类型 URL 版本号)
2.header
3.空行:标识着header的结束
4.body:当是get请求时body是空

响应端:response
1.首行(版本号 状态码 状态码描述信息)
2.header
3.空行:标识着header的结束
4.body

Maven:构建和打包Java项目的工具

作用:
可以管理所有的外部引用
可以打包项目
可以把项目发布到中央仓库
谷歌---->安卓默认Gradle(新型的打包工具)

Maven和Gradle的不同?

1.Gradle实现是依赖脚本的,而Maven依赖pom.xml
2.Gradle比Maven的更加简洁
3.Gradle性能比Maven高(Gradle使用的是增量式的构建方式)
4.Gradle灵活性更高

Servlet

Servlet路由创建:
1.web.xml—>一组路由
2.@WebServlet (“url”)

Servlet生命周期
1.调用init方法(执行1次)
2.执行service
3.执行销毁destory方法(执行1次)
getSessoin()尝试获取session,获取不到不会创建session【权限效验】
getSessoin(true)尝试获取session,获取不到则创建一个session【登录场景】

session和cookie不同?

1.cookie保存在客户端,session保存在服务器端
2.默认情况下session的实现是依赖sessionId,而sessionId是存储在cookie,如果禁止使用cookie那么整个session机制也不能使用。
3.cookie有大小限制,为了防止网络传输中的负担,一般最大值未4K
4.cookie在本地容易被串改,而session在服务端

网络

OSI

应用层:将标准的数据转化成程序需要的格式
表示层:将设备数据格式转化成标准的格式
会话层:用来管理通讯双方之间的会话
传输层:保证通讯双方的数据能够正常传输
网络层:地址的管理和路由选择
数据链路层:保证相邻结点间的数据传递
物理层:将数字信号转换成光电信号

TCP/IP

应用层 :HTTP(80),FTP(21),SSH(22),TELNET(23),DNS(53)
传输层(TCP/UDP)
网络层
数据链路层

数据传输的5要素
1.源地址IP
2.源地址端口号
3.目的地IP
4.目的地端口号
5.协议类型

IP:32位
MAC:48位  JF-XX

UDP

1.无连接
2.不可靠
3.面向数据报
无发送缓冲区,有接收缓冲区
UDP经典使用场景:DNS,NFS

TCP

16位窗口大小指的是接口缓冲区的大小

*TCP十大特性

1.确认应答(保障稳定性最关键的措施)

2.超时重传
策略:a)动态发送重传频率,每次重发的时间间隔是上一次的一倍
b)当重试一定次数之后就会停止重传

连接管理
3次握手:为了验证客户端和服务端的收发能力
4次挥手
服务端什么情况会有大量的TIME_WAIT?
服务器端没有正常的进行关闭

4.滑动窗口
快重传。

5.流量控制
接收缓冲区
当接收缓冲区大小为0时,停止消息发送,启动一个检测包来定时检测接收缓冲区剩余空间大小。

6.拥塞控制:慢启动
7.延迟应答(提升性能)
策略:
a)每隔一定次数延迟应答一次
b)每隔一定时间延迟一次
注意事项:延迟应答(200ms)的时间不能超过超时重传的时间(500ms)

8.捎带应答
能够实现3次挥手的机制

9.面向数据流
沾包/半包
解决方案:
1.使用固定大小的传输包(造成不必要的网络开销)
2.使用结束符来明确消息边界

10.TCP异常处理
没有缓冲时间的异常:断电,断网【TCP健康检测机制】
有缓冲时间的异常:关机(和正常关闭相同)

网络层

内网网段:
10.,前八位是网络号,共16777216个地址
172.16到173.31,前12位是网络号,共1048576个地址
192.168.
.前16位是网络号,共65.,536个地址包含在这个范围中的,都成为私有IP,
其余的则称为全局IP(或公网IP);

MTU:最大网络传输大小
MTU:1500-8-10=1472(UDP)

当输入一个url之后会发生什么?

1.效验url的正确性
2.检测本地的缓存
3.访问DNS服务器
4.建立TCP连接,三次握手的过程
5.浏览器会将参数和请求信息发送给服务器端
6.服务器得到请求的参数信息再进行业务处理
7.服务器将结果返回给客户端
8.浏览器拿到响应的信息之后,通过浏览器的执行引擎,解析结果并且展示用户
9TCP4次挥手

并发和并行

并行:多个任务在多个CPU下,同时执行就叫并行
并发:多个任务采用时间轮询的方式进行

进程和线程不同?

1.进程是系统分配资源的最小单位,线程是系统调度的最小单位
2.一个进程中至少要包含一个线程,线程是附议进程存在的,而进程的实际执行单位是线程
3.进程之间不能共享资源,而线程之间可以共享资源

现场的3种创建方式

a)继续Thread类,实现入run方法
b)实现Runnable重写run方法
c)实现Callable重写call方法
现场的构造函数:
1.定义线程的名称
2.定义线程的分组
3.定义线程的任务
线程的常用属性
1.定义优先级(默认5)1-10
2.设置线程名称
3.定义线程类型(守护线程,用户线程)

线程的常用方法
1.start /run
2.sleep–>TIMED_WAITING
3.join
4.线程通讯wait/notify/notifyAll

注意事项:
a)wait要配合synchronized使用
b)wait和synchronized必须要保证是一个对象
LookSupport park /unpark
线程终止:
a)使用全局变量
b)使用interrupted()终止线程
c)stop【已过时】
实例方法:isInterrupted()—不会重置interrupted的结果
静态方法:Interrupted()----重置interrupted的结果

线程安全问题:
1.CPU抢占式执行
2.非原子性
3.多个线程同时修改同一个变量
4.指令重排序
5.内存可见性

线程安全解决方案:
1.加锁synchronized/Lock-------->volatile:解决内存可见性问题,禁止指令重排序
2.ThreadLocal

synchronized和Lock的区别?
1.synchronized JVM提供的锁的解决方案。
2.synchronized和Lock修饰的范围不同,Lock只能修饰代码块
3.synchronized无需手动加锁和释放锁,而Lock需要
4.synchronized是非公平锁,而Lock既可以是公平锁也可以是非公平锁

synchronized实现原理?
Java层面来说,他就是将所信息存放在对象头种,当使用synchronized修饰代码的时候会在编译之后在代码的前面和后面加上监视器锁,在操作系统层面,他是使用互斥锁实现的。
synchronized执行流程?/synchronized锁优化
无锁----->偏向锁----->轻量级锁----->重量级锁 (JDK1.6)

Lock()一定要放在try之前
在finally中必须执行释放锁的操作

死锁

1.互斥条件
2.请求拥有条件
3.不可剥夺条件
4.环路等待条件

思索解决方案:
按序请求锁来破坏环路等待条件
死锁怎么排除有什么工具?
jconsole/vm/jmc

线程池

1.线程数量和任务数量可控。
2.线程池可以友好的拒绝任务
3.复用线程
4.线程池拥有更多功能,比如执行定时任务

线程池的7种创建方式:

1.第一种:创建固定个数的线程池(任务数取向无限大,建议谨慎使用)
2.创建带缓存的线程池(根据任务的数量生成对应的线程数,适用于短期大量任务)
3.创建可以执行定时任务的线程池
scheduleAtFixedRate 和cheduleWithFixedDelay的区别:
4.创建单个执行定时任务的线程池
5.创建单个线程的线程池
a:频繁的创建和消耗;
b:更好的分配和执行任务,并且可以将任务存放到任务队列
6.根据当前工作环境(CPU核心数,任务量)创建一个异步线程池 JDK1.8
7.ThreadPoolExecutor------7大参数

ThreadPoolExecutor7大参数

1,核心线程数
2,最大线程数
3,最大存活时间
4,存活时间的单位
5,任务队列
6,现场工厂(优先级,命名规则…)
7,拒绝策略

ThreadPoolExecutor执行流程

在这里插入图片描述

拒绝策略

JDK提供了4种
1.默认拒绝策略,不执行
2.使用调用的线程来执行任务
3.放弃任务
4.放弃最老的任务

ThreadLocal使用的时候必须要进行remove(脏读,内存溢出)
如果使用ThreadLocal默认情况下子线程是得不到父线程的数据

ThreadLocal原理?

Thread–>ThreadLocal---->ThreadLocalMap---->Entry[]—>Entry(key,value)
ThreadLocal哈希处理

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值