数学建模社区-数学中国
标题:
HTML 知识点(未完)
[打印本页]
作者:
杨利霞
时间:
2020-5-5 14:53
标题:
HTML 知识点(未完)
HTML 知识点(未完)
: Y& ]8 C2 @' H4 `8 U# ]* m
" N" R4 Z4 V9 J. O. e( `+ ?
HTML 知识点
6 m6 n3 U3 l. k' G" \
1 G% B: E- L3 f( Q4 S1 `4 O8 t
三列布局- (高度已知,左右宽度固定,中间自适应)
?' P" h" Q3 H6 R" l$ S3 q
# @( q. _7 d9 \ H t% u8 e
布局方案 优点 缺点
4 `$ W0 _6 A& B4 G
浮动 兼容性好 脱离文档流,需清除浮动
% w2 g. B: s0 j) Q
绝对定位 比较快捷。 因为其本身脱离了文档流,导致了其子元素都脱离了文档流,使用性较差。
% J/ F5 ]9 F' r/ u; C
flex布局 目前是比较完美的方案。 只兼容到ie9。
0 b9 t, ~( q8 W7 C' M! |( D
表格布局 兼容性好,当需要兼容ie8时可以用表格布局。 多栏布局时,某栏高度增加,会使其他栏高度一起增加。
4 \1 q" ~+ [0 A
网格布局 新技术,代码量少
' ]6 ?0 `! N0 H" V
<!-- 网格布局 -->
, \- X+ Y# y1 e" D2 d
<body>
; ?( M5 l! Y) m# `" B
<section class="layout grid">
h( z# _7 l; {
<style media="screen">
/ P3 ]3 Q9 Y: e/ X( p* p
.layout.grid .left-right-center{
: Q, C' U. `9 J( [6 C0 S; @7 `7 s
display: grid;
j4 a3 O4 p. z4 Y5 O% t% v8 j
width: 100%;
$ H0 O. G$ f$ i/ ~# O( |5 ^
grid-template-rows: 100px; // 设置行高
, H+ ?" T0 q7 T) c
grid-template-columns: 300px auto 300px; // 设置每列的宽度
7 K* o7 l7 X+ e+ z
: j; M8 m/ n- Z/ x; u
</style>
3 t8 W1 }% F4 h6 M' p5 r
<article class="left-right-center">
5 ~; Q* e- D- s t
<div class="left"></div>
/ S0 q( D6 Q4 i: X, {
<div class="center"></div>
" b: n: a- u. W+ w
<div class="right"></div>
3 B# y2 n# I; B) ^
</article>
" m t( U9 O" |
</section>
1 |1 }# r2 Z5 a: H1 z4 l- @5 D
</body>
% Z. r( a+ p) l1 t( q4 @/ ?
% p5 a, \' _8 D5 { j [
css盒模型
* w9 B: }' V8 p/ ^& x$ u
8 B, o( d0 m, g. d
CSS盒模型的认识
$ _# A- W5 |: D8 l4 j8 v3 ~9 Z
t% U1 u! n( ^4 x' S4 D2 [
css属性: content padding border margin
! u0 i1 _- e# K- c0 J8 \
% x& G& n1 z5 v
两种模型:IE盒模型(怪异盒模型)和 标准盒模型
& ]" v4 l% Y/ w
3 Y6 `8 z* ?; G. l( k+ g
两种模型的区别:计算高度和宽度的不同
# d0 G, J) H7 A0 {2 A0 W
: d3 a$ ]* w0 s3 s4 w k7 L9 f
两种模型如何设置:box-sizing: content-box(标准盒模型); box-sizing: border-box(IE盒模型)
h) E E$ U1 J- W6 G
, p6 I8 n2 q$ @$ T7 O% k
JS如何设置获取盒模型对应的宽和高
8 c9 `+ @$ |1 R7 X( t% o
$ k* H& R" `( I3 w/ E
获取方式 优缺点
1 x8 i" U4 i) `" }0 f1 P" s
dom.style.width/height 只能获取内联样式设置的宽和高
* U* v* A5 s: B
dom.current style.width 获取浏览器渲染后的宽和高,只支持ie
! r, n! n& D$ v3 e* d p: ~9 b- j% t
window.getcomputedstyle(dom).width 兼容性更好
3 X* S* R1 I' R( Z p0 K! a
dom.getboundingclentreact().width 适用于取元素的绝对位置。能取到 left top width height 四个属性 。// 获取浏览器渲染后的宽和高一般用于获取元素绝对位置
( h$ R& l7 f; C( M0 b# }% e
实例题 (根据盒模型解释边距重叠)子元素边距成了父元素边距
9 }7 d3 z# u) P9 B# w
5 A" F: Z& b: G! _) Q$ u
块级元素包含了子块级元素,子元素是100像素
( r0 H- h/ A) z
子元素与父元素上边距是10像素
3 P7 A7 h1 y% c2 B3 o- A$ `
父元素是110px还是100px (100px, 设置了overflow:hidden就成了110px)
& A& S1 h6 H5 Z3 X2 O8 p
另一种兄弟块级元素-
- C" k6 M7 X% l% J& R1 m
# u4 L% f: i- \& }5 \2 }6 b
挨着每个都有上边距或每个都有下边距。-
8 p3 S2 i9 Y) ~9 G
该重叠的原则就是取最大值
% m1 b, | V# S) c0 U
空元素的边距-取margin-top和margin-bottom的最大值
M" b# @! K5 J/ e, ~6 |
解决方案:
! x I' S5 S' e" q1 A
( }7 e8 ]/ S+ M7 o
父元素创建成一个BFC (无论父子,兄弟情况)
6 b- _( b+ f4 _% q/ q
) O$ O( n4 M/ c5 J6 c% H, ~6 t* x
4. BFC (边距重叠解决方案)
7 h/ Z) r- j- n4 Y
$ s l( ~' @- }+ P4 i
BFC(边距重叠解决方案)
0 q* q, I+ [; o- P# r& L. |
6 j, F: x8 e' i1 Z- h
1、BFC的基本概念: 块级格式化上下文;
& B S) B, n( W4 ]) N+ ]' C
9 K- K/ E! {, f1 M! C4 W
2、BFC的原理:BFC的渲染规则。
( l# ?; X: y* ]
$ a4 Y! A0 ^) F8 W
①:在BFC这个元素的垂直方向的边距会发生重叠。(同一个BFC下外边距会发生重叠)
8 R4 i! Z4 c+ W" F! \) o* x- Z
/ W3 Q9 v4 E9 r. k! c; N$ }
②:BFC的区域不会与浮动元素的box重叠。(清除浮动)
1 b! y( Y- [/ N3 d! B
$ G4 ?6 {2 x, V
③:BFC在页面上是一个独立的容器,外面的元素不会影响里面的元素,里面的元素也不会影响外面的元素。
. K0 z; W' k. J+ _! g' F' n, X0 k
5 c) a/ i, q# m, W |6 @9 K& n
④:计算BFC高度时,浮动元素也会参与计算
' P7 i# q: e, g g. [0 N# l
' \; ?3 t2 `2 S6 f% P8 ~- L
3、如何创建BFC
+ x1 G# | g% K
* w4 T* j+ C1 V) G# Y+ R* O
①:float不为none。
7 b& a% S4 Q8 {8 O
# [2 G) _& h% Y- V
②:position不为static或者relative。
( c" m& j1 _" d
+ L$ k+ i$ ?) t4 F) V4 Y, a
③:display为inline-block或者是table相关的。
- T/ b _" K; `( B' E3 m
3 z. T6 r. B& w$ ?3 Z
④:overflow不为visible。
* x: C0 I+ d; B. ]# [6 Q; F
9 E5 K9 |2 Y6 ?+ n6 j/ B+ z
⑤ : body 根元素
& \5 R! b8 o1 y7 T) x6 v
7 D0 q) |1 |$ [
应用场景:
8 m) w4 s# A, e) m
左右布局时,float
! X# t: F' r% I$ J" ?
相邻div使用margin产生边距重叠
0 }/ v# k$ @/ j# D: H2 H5 F
dom事件
+ ?: s3 H1 X5 R4 k) k
1 {1 H( l8 g$ h
基本概念: DOM事件的级别
. W# C/ I$ A6 c) I, Z% L
" X6 f0 n* U% Q! ]1 Z( S
DOM0: element.οnclick=function()
: f" M4 p, t3 C. }3 |# J
) _' z# @& Q: f# J1 h8 V; K
DOM2: element.addEventListener(‘click’, function(){}, false)
+ ?- T) o+ z. p$ E: O+ W
* _; S6 a9 z& h" u! Y% U2 [# ]
DOM3: element.addEventListener(‘keyup’, function(){}, false)
; S: q8 I2 {3 `
$ S3 l8 N" `7 [* o
DOM事件模型
1 f; e4 J+ f* P0 O, b
' ]0 k: ]7 ?0 h: X
event.target 2. event.currentTarget
7 ^0 w* L" ~+ j& t2 k5 p
event.target指向引起触发事件的元素,而event.currentTarget则是事件绑定的元素
p$ Q" a" {& a! K) G/ U0 G2 H! Y
DOM事件流
* L- h; Y- m# X1 a0 S8 V
( R/ `" B0 X- p2 L E
事件流 -->《捕获》 2. 目标阶段 3. 冒泡
+ |) S+ R- j! ]2 G( A; Z
描述DOM事件捕获的具体流程
4 {( L M! q& B& F- t
3 k& K4 @# F" ~! f
window 2. document 3. html 4. body 5. 按html结构 6. 目标元素
( r8 S% E4 p( {# \! B
Event对象的常见应用
+ K) l4 f+ B: o- k7 u! F
0 T! s; C' p9 n- i( |9 G2 z
e.preventDefault() 2. e.stopPropagation() 3. e.stopImmediatePropagation() 4. e.currentTarget() 5. e.target()
& i+ x8 m2 S* K# @: h5 H8 }; T
自定义事件
+ Z( v; R$ [% B( v* ?/ |) E9 v9 Q" P
' ~. F+ W8 }& P1 N
var eve = new Event('custome');
: N2 P# H& ?! L v
ev.addEventListener('custome', function() {
3 A$ _5 `9 V8 a8 U0 }' |7 Y( w7 T
console.log('custome');
4 g: u& Q$ g; ~9 x8 K* I6 z8 ^
});
* G" L( C: x, j" e' m- u! |
ev.dispatchEvent(eve);
( O+ g& h9 V$ _9 I8 }7 x, i
1
2 w n% o4 r* T0 }5 t
2
' o) O( E7 H5 _
3
" J9 G1 Q4 d" T
4
2 V. N ~! \! v6 A0 i
5
7 P" \/ T |6 h4 l* }
http协议
2 f/ X! ^' u( F1 S
$ B6 m' p9 f# U5 @* d6 E- ~" n
HTTP协议的主要特点
; p( x1 }1 `% h8 A5 j. O4 D8 c
0 \$ t/ b6 ^2 q
简单快速(资源的URI是固定的,输入URI)、灵活(头部分有不同数据类型,一个http协议不同传输)、
% i9 q" K! S2 t3 h% z5 w9 w
+ m1 ]. `! i* ~/ ]% q' Z2 T0 ~
无连接(连接一次就断掉)
( x. c& H5 w, Z0 D8 X. f8 Q
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
) o1 m! D* _: G: x% k# C
无状态(两次连接身份)
# P$ \ J; r+ f" Z' n \: c
是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传
r0 u' k. Q8 |3 x# l9 }
HTTP报文的组成部分
* N5 E# T( g5 f! c/ q
0 E9 c( c, u& S. |* s
请求报文
8 e1 k3 H% Z# R" V+ f3 r1 K/ {
8 w; X0 V# l5 J. u! {
请求行 请求头 空行 请求体
9 I b/ M6 u. t1 { q
- F. S0 m& A) |# ^
响应报文
# @. b- f+ x2 I3 Y( K# E8 \! K
( |& Q( v" H/ [" @' a
状态行 响应头 空行 响应体
; w0 m# _, j5 n
b1 y% p2 d8 J4 s' ]* M
HTTP方法
/ l3 B1 p( P$ }$ j
2 Y9 O) a/ d" @' Z% t. s
方法名 方法作用 注意
/ Q9 Y% z( ^2 w+ @& v2 r
GET 获取资源
+ d$ \( H, @ }
POST 传输资源
& w; ]9 s" `" h" H3 x% Y
PUT 更新资源
2 W2 p. x S/ ?" r7 o" L3 j2 M0 I
DELETE 删除资源
# j* P- [9 z @* m4 y9 \' b
HEAD 获得报文首部
/ k/ J! y# F" t
POST和GET的区别
. N$ N+ p" G2 D L; B! _! r2 |
2 r# Z/ T1 F5 u8 ?$ g6 D+ E, Y7 M5 f
get post
3 }* `8 F( a& }# D6 q
在浏览器回退时是无害的 会再次提交请求
A% ]" {% w% n: s6 F3 h4 O& b$ V
产生的URL地址可以被收藏 post不可以
+ c# X$ Z- p, O) a6 Q! n( b
请求会被浏览器主动缓存 不会,除非手动设置
3 e' r& a b. w+ d0 j( [- U( D6 _
只能进行url编码 支持多种编码方式
) X6 m ~* e: P/ Q' l6 Q
请求参数会被完整保留在浏览器历史记录里 参数不会被保留
2 }8 F' F9 t' o; y# k
请求在URL中传送的参数是有长度限制的 没有限制
0 ^1 s+ [) g+ _2 Z& n0 J! e8 [
对参数的数据类型,get只接受ASCII字符 没有限制
% P& y( O! S9 i7 ]5 ^5 q- b
更不安全,因为参数直接暴露在URL上,所以不能咏柳传递敏感信息 没暴露
1 I& x' @* Y/ X1 E5 i% G- U
参数通过URL传递 放在Request body中
. C+ x% b; V% m7 V" N( H4 l
HTTP状态码
; D1 A; n( P- V# E2 N) G
; |6 \6 q# e' R
状态码 意义
. e" w) @3 D3 B' [/ Q
1xx 指示信息 - 表示请求已接收,继续处理。
/ B7 j. n" \& q
2xx 成功 - 表示请求已被成功接收。
+ s+ @) r { [# w( \2 h
3xx 重定向 - 要完成请求必须进行更进一步的操作。
$ _* V& K! A& v: S7 S
4xx 客户端错误 - 请求有语法错误或请求无法实现。
, x- F# U! D6 K# h6 V5 K2 c
5xx 服务器错误 - 服务器未能实现合法的请求。
$ b+ r- f" _ a' F2 h" L
状态码 意义
5 C- t' ?( K2 ^6 A$ Z, _& X
200 OK 客户端请求成功
# w0 Z* K5 ^. g% p- m
206 Parital Content 客户发送了一个带有Range头的GET请求,服务器完成了它
4 n1 {: O/ q& { v
301 Moved Permanently 所请求的页面已经转移至新的url
* d9 a O+ p/ @- m; L
302 Found 所请求的也么已经临时转移至新的url
* {3 i3 ?( n# s
304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求, 服务器告诉客户,原来缓冲的文档还可以继续使用
6 o* w9 O* E3 Q
400 Bad Request 客户端请求有语法错误,不能被服务器所理解
7 E, N" o- W0 V
401 Unanthorized 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
; p. f* t L' [8 o! D- m
403 Forbidden 对被请求页面的访问被禁止
, v$ v, [/ h+ a4 @$ F3 d7 N
404 Not Found 请求资源不存在
; o2 r+ Z# @% d' ?
500 Internal Server Error 服务器发生不可预期的错误原来缓冲的文档还可以继续使用
5 v1 h) D0 |1 G: P$ [
503 Server Unavaliable 请求未完成, 服务器临时过载或当机,一段时间后可能恢复正常
- U( M1 H5 L4 E( y' y
什么是持久连接
7 K/ O/ V% ~" z C* s, {+ E1 ^
/ U4 s* r$ S* K: Z5 S
HTTP协议采用“请求-应答”模式,当使用普通模式,即非Keep-Alive模式时, 每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议)
" Y) H- [ m1 [
/ ^" b- X3 J" Q& P/ j( [6 V! L
当使用Keep-Alive模式(又称持久连接、连接重用)时, Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
; m. y# j; n7 R; R
& A, ]/ l9 k! K( p" ]: z
使用了持久连接
& N% r( @* P- w& l$ f& o
* Z1 p& U% S& J5 E9 V: q
请求1->响应1->请求2->响应2->请求3->响应3
7 a M6 o1 h- F b- R3 W% ~6 }
4 D. N P# m0 d E# W
变成了
& b4 o6 g; u+ e
7 b* F1 ?; u( g7 g8 ?
请求1->请求2->请求3->响应1->响应2->响应3
2 k$ u+ E+ O. A! L; [! {; N; g
1 m9 n8 H6 ~; c' e: O% ^
什么是管线化
7 P( f* G- b2 L) k7 K; t5 g' c6 @- k
- D" s! E- h& Z/ j
管线化通过持久连接完成,仅http/1.1 支持此技术
$ t% J: H# v* y; x7 U1 x
只有get和head请求可以进行管线化,而post则有所限制
* N( [1 X" b1 q1 e
初次创建连接不应启动管线机制,因为对方(服务器)不一定支持HTTP/1.1版本的协议
7 v; V! V. j' _$ B3 e6 |" I. R
…
. E: C" O* _6 b5 ]& |! Z: S& E
安全
% n( B, N6 f' g) f# r, ~
; ~5 ~( Q1 {9 Z' \
CSRF
& b2 n3 w4 c9 F% Z# ?' n
基本概念和缩写
0 @5 C* a$ {! `& z* r5 M: l
CSRF, 通常称为跨站请求伪造,英文名Cross-site request forgery 缩写CSRF。
- }. e# P3 F2 G- h o
攻击原理
$ N: X5 s; f. h; Y4 M4 F& ~" v* k
访问网站B时,网站B引诱点击链接,用户浏览器携带的cookie就被网站B的某些代码访问了。
0 T) y8 c4 n; m; S( j
这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
0 v7 K" ]+ |( C
XSS
$ }' l) \2 v: r8 u Q6 C
基本概念和缩写
* m1 F6 _/ f- f2 `# D5 C3 R' [
XSS, 跨站脚本攻击, 英文名Cross Site Scripting 缩写XSS。
0 M# [2 C. [& o+ |
攻击原理
5 H$ f) c; q0 N
输出脚本code
" {2 e+ L; O' ^' a0 K
跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
O3 ]1 G' B8 n
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
5 K* c U: F. E0 L2 v
渲染机制类
: l. D+ Q) g! `2 n+ e3 \! \
" I/ O& Y* t9 p+ h
什么是DOCTYPE及作用
8 \ }% Y' d u$ Q7 x
$ U7 O. }5 N$ Z5 h
DTD (document type definition, 文档类型定义)是一系列的语法规则,用来定义XML或HTML的文件类型。
% T" L9 s! }) o
作用:浏览器会使用它来判断文档类型, 决定使用何种协议来解析,以及切换浏览器模式。
* _0 A0 N) `- |# S* x
DOCTYPE是用来声明文档类型和DTD规范的,
. b, D C$ @2 X* g) S
作用:一个主要的用途便是文件的合法性验证。如果文件代码不合法, 那么浏览器解析时便会出一些差错。
! i4 j+ P, K4 G/ V/ U
HTML5的DOCTYPE:
1 L3 h) g& j9 u/ [# R; t
5 z" ~! n: R- `& `7 k: {
HTML4有严格模式和传统模式
- A6 F/ w$ Z% J v) Y7 t5 [. A
( J, k. Z; g8 m: H. N2 b* D
浏览器渲染过程
, C' ?$ b0 M2 _1 n$ @4 m
' i) z9 N( G9 n* T; ]8 s
一些概念
2 z9 T+ j, ] P; s" }
! f$ X8 D9 t0 P4 m' S
名称 概念
8 f3 q& D+ H0 Q, r: K }6 \
DOM Tree 浏览器将HTML解析成树形的数据结构。
% E, F' e' B6 c' `
CSS Rule Tree 浏览器将CSS解析成树形的数据结构。
9 g1 p4 X0 j# F
Render Tree DOM和CSSOM合并后生成Render Tree。
$ P9 F9 c5 {: Z3 x
layout 有了Render Tree,浏览器已经能知道网页中有哪些节点、各个节点的CSS定义以及他们的从属关系,从而去计算出每个节点在屏幕中的位置。
: y+ u2 c/ I2 w8 C- ?
painting 按照算出来的规则,通过显卡,把内容画到屏幕上。
( Y! b0 L3 K; Y! }
1。当用户输入一个URL,浏览器就会发送一个请求,请求URL对应的资源
5 C, i: ]. j- d+ s0 `$ z
2。HTML解析器会将这个文件解析,构建成一棵DOM树
/ M+ ?% `: W' Y- L4 x9 v
3。构建DOM树时,遇到JS和CSS元素,HTML解析器就将控制权转让给JS或者CSS解析器
6 ~1 d6 f6 o; e: v3 T+ S. q1 Q
4。JS或者CSS解析器解析完这个元素时候,HTML又继续解析下个元素,直到整棵DOM树构建完成
. V3 ~0 O& \6 q0 @; s% D6 V! V
5。DOM树构建完之后,浏览器把DOM树中的一些不可视元素去掉,然后与CSSOM合成一棵render树
) S. c1 B; @& `1 ^! _2 M( @
6。接着浏览器根据这棵render树,计算出各个节点(元素)在屏幕的位置。这个过程叫做layout,输出的是一棵layout树
% Z! q* H! J" d- w& d" p3 `. O
7。最后浏览器根据这棵layout树,将页面渲染到屏幕上去
9 E( e* P7 Y& _' r+ P$ u' F" P' _
1
- }' B4 _5 @( V! Z s
2
0 h3 Y; m& X- m E v
3
. s- e) d6 ]; }/ h X3 j
4
- h b8 D1 X- W* c; ] B
5
$ C" y6 J! h9 q3 \3 g: @( m. G/ K
6
/ N' c. W3 \# E8 j
7
2 m3 O1 z E- I/ t4 Y7 K
重排Reflow
+ d0 z! e: N( c9 Q
- g& w: s4 S* J! X
定义:当浏览器发现某个部分发生了变化影响了布局,需要倒回去重新渲染,内行称这个回退的过程叫 reflow。
' B5 x) m4 z; z; d0 q- |2 n* O/ M0 x+ L
触发Reflow:
* d/ Y2 G5 f- Q% a6 T
当你增加、删除、修改dom节点时,会导致Reflow或Repaint
& d9 Z/ x* h6 {% k0 o, A
当你移动DOM的位置,或是搞个动画的时候
. w, ^2 x- o" A; R. E* W3 w
当你修改CSS样式的时候
7 Z$ P$ z4 C6 [* D4 \: m; e
当你Resize窗口的时候(移动端没有这个问题),或是滚动的时候
- u# v, z! F X7 V1 _* r( S
当你修改网页的默认字体时
3 w0 j; G; t7 V; Y( `
重绘Repaint
! ]1 {# r) H9 _, A- e' ^
( H" b7 G; b1 z% f" Q2 k! S
定义: 改变某个元素的背景色、文字颜色、边框颜色等等不影响它周围或内部布局的属性时,屏幕的一部分要重画,但是元素的几何尺寸没有变。
$ Z% H$ U6 Y* R4 @
1 K3 |0 h* F( T2 T0 t# M
触发Repaint:
! j: a# U; I! \5 M4 I) U0 Q
! V% f8 T3 _ A' U' \
DOM改动
3 I# m, P, T3 S _6 ^5 {7 o: v
CSS改动
- {, r+ B- k1 p3 o: b6 |/ h
————————————————
# O# p5 e! z/ B, ^. n+ c7 X1 x
版权声明:本文为CSDN博主「ton365」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
5 U, m8 H' S5 y6 {1 K! O# l
原文链接:https://blog.csdn.net/u012015672/article/details/105931291
0 b# Y0 E+ P! b
* w( ?* i) l# ?& c
* g) N/ o1 r% p5 z8 Y' `! Q; o8 c
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5