From 6d8cef8cd1d2ed8ea9327d1c0cddfe05b8e8eb2f Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sun, 29 Jul 2018 11:24:25 +0800 Subject: [PATCH 001/172] auto commit --- notes/Linux.md | 2 +- notes/剑指 offer 题解.md | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/notes/Linux.md b/notes/Linux.md index 705b9b0d..6325e86e 100644 --- a/notes/Linux.md +++ b/notes/Linux.md @@ -903,7 +903,7 @@ declare -x HOME="/home/dmtsai" declare -x HOSTNAME="study.centos.vbird" .....(其他省略)..... -$ export | cut -c 12 +$ export | cut -c 12- ``` ## 排序指令 diff --git a/notes/剑指 offer 题解.md b/notes/剑指 offer 题解.md index e1655922..05d43578 100644 --- a/notes/剑指 offer 题解.md +++ b/notes/剑指 offer 题解.md @@ -898,7 +898,7 @@ public double Power(double base, int exponent) { ## 题目描述 -输入数字 n,按顺序打印出从 1 最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数即 999。 +输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数即 999。 ## 解题思路 @@ -911,16 +911,16 @@ public void print1ToMaxOfNDigits(int n) { if (n <= 0) return; char[] number = new char[n]; - print1ToMaxOfNDigits(number, -1); + print1ToMaxOfNDigits(number, 0); } private void print1ToMaxOfNDigits(char[] number, int digit) { - if (digit == number.length - 1) { + if (digit == number.length) { printNumber(number); return; } for (int i = 0; i < 10; i++) { - number[digit + 1] = (char) (i + '0'); + number[digit] = (char) (i + '0'); print1ToMaxOfNDigits(number, digit + 1); } } @@ -1050,13 +1050,13 @@ public boolean match(char[] str, char[] pattern) { ```html [] : 字符集合 -() : 分组,在这里是为了让表达式更清晰 +() : 分组 ? : 重复 0 ~ 1 + : 重复 1 ~ n * : 重复 0 ~ n . : 任意字符 \\. : 转义后的 . -\\d : 任意数字 +\\d : 数字 ``` ```java From 65a50dbc7edfae216060432242280f66e39e05a7 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sun, 29 Jul 2018 12:38:35 +0800 Subject: [PATCH 002/172] auto commit --- notes/剑指 offer 题解.md | 2 +- pics/f94389e9-55b1-4f49-9d37-00ed05900ae0.png | Bin 0 -> 12288 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 pics/f94389e9-55b1-4f49-9d37-00ed05900ae0.png diff --git a/notes/剑指 offer 题解.md b/notes/剑指 offer 题解.md index 05d43578..9cf7dc2a 100644 --- a/notes/剑指 offer 题解.md +++ b/notes/剑指 offer 题解.md @@ -170,7 +170,7 @@ Given target = 20, return false. 当前元素的查找区间为左下角的所有元素,例如元素 12 的查找区间如下: -

+

复杂度:O(M + N) + O(1) diff --git a/pics/f94389e9-55b1-4f49-9d37-00ed05900ae0.png b/pics/f94389e9-55b1-4f49-9d37-00ed05900ae0.png new file mode 100644 index 0000000000000000000000000000000000000000..4981769799bd772cfc25fc4a65b926e022683920 GIT binary patch literal 12288 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 Date: Sun, 29 Jul 2018 14:12:07 +0800 Subject: [PATCH 003/172] auto commit --- notes/剑指 offer 题解.md | 20 ++++++++++++------ pics/27ff9548-edb6-4465-92c8-7e6386e0b185.png | Bin 0 -> 8192 bytes pics/280f7728-594f-4811-a03a-fa8d32c013da.png | Bin 0 -> 7168 bytes pics/2858f8ad-aedb-45a5-a706-e98c96d690fa.jpg | Bin 0 -> 23552 bytes pics/6539b9a4-2b24-4d10-8c94-2eb5aba1e296.png | Bin 0 -> 17408 bytes pics/ea2304ce-268b-4238-9486-4d8f8aea8ca4.png | Bin 0 -> 23552 bytes pics/faecea49-9974-40db-9821-c8636137df61.jpg | Bin 0 -> 18432 bytes 7 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 pics/27ff9548-edb6-4465-92c8-7e6386e0b185.png create mode 100644 pics/280f7728-594f-4811-a03a-fa8d32c013da.png create mode 100644 pics/2858f8ad-aedb-45a5-a706-e98c96d690fa.jpg create mode 100644 pics/6539b9a4-2b24-4d10-8c94-2eb5aba1e296.png create mode 100644 pics/ea2304ce-268b-4238-9486-4d8f8aea8ca4.png create mode 100644 pics/faecea49-9974-40db-9821-c8636137df61.jpg diff --git a/notes/剑指 offer 题解.md b/notes/剑指 offer 题解.md index 9cf7dc2a..e36e7a85 100644 --- a/notes/剑指 offer 题解.md +++ b/notes/剑指 offer 题解.md @@ -1,4 +1,5 @@ +* [1. 前言](#1-前言) * [2. 实现 Singleton](#2-实现-singleton) * [3. 数组中重复的数字](#3-数组中重复的数字) * [4. 二维数组中的查找](#4-二维数组中的查找) @@ -80,6 +81,13 @@ +# 1. 前言 + +本文的绘图可通过以下途径免费获得并使用: + +- [ProcessOn](https://www.processon.com/view/5a3e4c7be4b0909c1aa18b49) +- [DrawIO](https://drive.google.com/file/d/1nSSCpPUC05MFoeFuf_aeTtkm7dG5-bJ1/view?usp=sharing) + # 2. 实现 Singleton [单例模式](https://github.com/CyC2018/Interview-Notebook/blob/master/notes/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.md) @@ -456,7 +464,7 @@ public int pop() throws Exception { 如果使用递归求解,会重复计算一些子问题。例如,计算 f(10) 需要计算 f(9) 和 f(8),计算 f(9) 需要计算 f(8) 和 f(7),可以看到 f(8) 被重复计算了。 -

+

递归是将一个问题划分成多个子问题求解,动态规划也是如此,但是动态规划会把子问题的解缓存起来,从而避免重复求解子问题。 @@ -941,11 +949,11 @@ private void printNumber(char[] number) { ① 如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点,再删除下一个节点,时间复杂度为 O(1)。 -

+

② 否则,就需要先遍历链表,找到节点的前一个节点,然后让前一个节点指向 null,时间复杂度为 O(N)。 -

+

综上,如果进行 N 次操作,那么大约需要操作节点的次数为 N-1+N=2N-1,其中 N-1 表示 N-1 个不是尾节点的每个节点以 O(1) 的时间复杂度操作节点的总次数,N 表示 1 个尾节点以 O(N) 的时间复杂度操作节点的总次数。(2N-1)/N \~ 2,因此该算法的平均时间复杂度为 O(1)。 @@ -1103,7 +1111,7 @@ public void reOrderArray(int[] nums) { 设链表的长度为 N。设两个指针 P1 和 P2,先让 P1 移动 K 个节点,则还有 N - K 个节点可以移动。此时让 P1 和 P2 同时移动,可以知道当 P1 移动到链表结尾时,P2 移动到 N - K 个节点处,该位置就是倒数第 K 个节点。 -

+

```java public ListNode FindKthToTail(ListNode head, int k) @@ -1140,7 +1148,7 @@ public ListNode FindKthToTail(ListNode head, int k) 在相遇点,slow 要到环的入口点还需要移动 z 个节点,如果让 fast 重新从头开始移动,并且速度变为每次移动一个节点,那么它到环入口点还需要移动 x 个节点。在上面已经推导出 x=z,因此 fast 和 slow 将在环入口点相遇。 -

+

```java public ListNode EntryNodeOfLoop(ListNode pHead) @@ -1346,7 +1354,7 @@ boolean isSymmetrical(TreeNode t1, TreeNode t2) 下图的矩阵顺时针打印结果为:1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10 -

+

## 解题思路 diff --git a/pics/27ff9548-edb6-4465-92c8-7e6386e0b185.png b/pics/27ff9548-edb6-4465-92c8-7e6386e0b185.png new file mode 100644 index 0000000000000000000000000000000000000000..1aee414c9a6fd74adb821d697ad4fac16b7c4734 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/pics/280f7728-594f-4811-a03a-fa8d32c013da.png b/pics/280f7728-594f-4811-a03a-fa8d32c013da.png new file mode 100644 index 0000000000000000000000000000000000000000..526b684733c8abff09b0b086edf2ed6a71e66128 GIT binary patch literal 7168 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

2GwZ} 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 literal 0 HcmV?d00001 diff --git a/pics/ea2304ce-268b-4238-9486-4d8f8aea8ca4.png b/pics/ea2304ce-268b-4238-9486-4d8f8aea8ca4.png new file mode 100644 index 0000000000000000000000000000000000000000..59b54d2fa80a3fba02e0280a61b036d51bad4d4c GIT binary patch literal 23552 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 XS>@Zsw+#LNb2pxUJ^%k-p8x*`n)c!L literal 0 HcmV?d00001 diff --git a/pics/faecea49-9974-40db-9821-c8636137df61.jpg b/pics/faecea49-9974-40db-9821-c8636137df61.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b236b6ed7c055f45bbd6ea90bc60031378c1a54 GIT binary patch literal 18432 zcmeIZ2UL??w=Vi3O=_e`Cn_i?A_!8H64Vb6ktPBHLPVqs5d;a4f+D?1|3o1asR|Kk zQbR{kn)FTrN{56RNa5uB_uc2-vG2dn`S!kdpE2&Z=S}9w$aq(hHCNV}<(bbs8atW; zPTbZv)CZWDm;gBA0US*NHv#5j$NqXUE*8d<^*Adl3kxeJJ3HHPZcc7)E>12k9$x+v zJiL6oTwEtkp5PM@6cQ5R1__It6cphX6cYUFOPH7$pJ8F;U}fbHdtV zrV^$NW~MX1F+L_{KBl8~01N<3tc=fcz}%7jjE|u5i^QDc(l^RmgzgRyWmF#dzU1IMDJ&u?cJ`dC z-1!SvRMpfqu3o$Ohn~K{EyLRu_bjcf@7vfqJ$80+b#wQ4=I8%B03H|=`YJ3uA~GsE zDLExIE&b0o8M%4y^9u@#ic3CMR902je5tK#ZENr7?E3nx`{&@$@W|-c_ynFXzwqn# z;?nX8X={6DcWf*{y#4tJj7D7l08P%N6l;|u`?Nj>tdi{S)o=BXr*;4O(yZ# z{1E^;*7!%zD_``IOh0?Bxr0+7eGtv5DjlhF%I)eAP>>!2riVpuTmcKap)N%94)|w6 ztRouIgblCJJ&XZQb3H-ef1TVN@sCjixvOVnf@8}4|eO?5*|ih3-l@Hr$K`$0#Fs!H5!T|XuX zZp(OLbuuxQKO6S?2nc*zdxdF>hFOEoXyxT{k7O5faB3Ul(LVAXpOO>>0U+I=2)zZ_1hX#MooJ zMgwX;zr%a7X`Bop6}Dm|8f4jUc>CL$UnM}-re2?`MlGN5w>Xr_PP~7uAl0>Wtj8Jc zB{}`R+v=8!S$Ff^snIT|KojpO?sGzP9yy=*u8)=|__hkkdOv0B+d|j|?t3&qlgw?P z%)vS{+2{M(R>6WxDs1u4>8VM9?a4d9v^dE8wL#IT(d>REJwdboa)I)pW@iPeOiy}B zfytuy^CGKKr!v%sGPLL`$F4IqvXj7j_eLkH4rYn`i*#YodK5{vYsL8&n_ChPga zn)wlcIGGJ9XcDDD26cqVig$<`$($WtuKYR9BFbu4U3O(g&Gq2>Q8-VB*Y2BN zZ5*y{F&E<^Ey%Q_Dmh$fowjvd%k!f0d4sslo6JLET_Xs8{3h>|yO~E&PikyN_Qw4QeFt)Yh}e;5M6C)#6qf21DD zLOIbbx?1PYY zRV(Rx1Dk7+Uu$cU1df1XcOj(+rXzr5sUAX%C2uqnz5Ji5WsQUAf=s*MxGDu#17cZz zFn;~C|GI}rjqP&jwdPA;>0dKbilPgL)-9NFOr(~xaHpb#q4OME6}HY}DQsJpba)nd z-qxLKK0tYHgVOk%lg5jU#XX!oIFA!M0@f}-cKka4KM2QolM-soL5HMwu)U@wEVe9m z&$zoo`lR(!P4(}xkoAPy^Js6#_@;3su_hKJ2lWg}%m46A`{Q#pWy2Uxxp6{Vs&&${ zZK-TTSM0VudM$UB7)|d7OK8dZQ|iB|UM_Ae9iDf6mbls;buel{L7=~VCdbg5o*V%? zIdV)02w@d-4AmCo-RLr@c(LKEIKwPWzit&Wox6nuL3cOijO&m89GaID`+0(4gKUD5+&-sv9i? zR*H==E+#*nGAw)`u-!Sb_#?r6MdyaaGSrCP136Jh&LJAKHl1ofE7R>@XO@qE#*0s! zT&TAfN!UwdPrPQr`2ODc;lXx}J>x%?)6;8|G??;|oKH(b)*t51kJMqtBHC)C#A$C4 z@{&JOk~VuAImf{=Nfolczd+&uKX8@)TUseY`IY zsJ#q+M!vIt1XNf-){Tpf0B3q%lX`70=hz9zNpqT~6JvBf+J!Ng7x8d9Y6CQ{f~9}g z1?&BD0guZYn zWf%bqMAb!+k~B$iiNT_5kTUrf(FGQFXp)*U?YWr`_myw28~T`CJ*#k-)7|kKCS|*r zyj7#I9KGYoC62t*In(=7sHUnW?oqT{rx2h1u@_4~@rr!?mnUA%wOh&82L|l(t(0Gq){xfe)lo9ROdMS0we-`oO%{NHt0I$M@}8u zOAKc$O4pkY+v4pQiAq>BrfNUJzmHF*g3Nqt=x%F&!mj2E*&o{R4;Dw6kn+2ASNYw3 z-Wt26#Qm}GRA_%c^HOd!AopJ?d0)On|D3T|OmqzYOVQSn7fFU|KsGOwklx-Sj0e5& zhYES_ALHUW9<$!pC%Mu348cErLQA7#eJAtWlLKGH zQxDNT*H@F&Y zbngpkvF-jy8v)bCW74~!Qia{wft_!rD}3>840>VDlfa1j@Y*B88LRg`CzI0%U&}y? zy5L&_&}%dF8Ae>TcIc5l%Knqfcy^?gf}PCQGLW8tvp0)vMqwo$2`5SOyOv8!Ld1Z> z7_%WSzqePtH(ldLCWI7ZK7X<_(@chnQ?1A~W%Lm#xdgmxtB;D?mSG&!-pmSeQA!uK zf!2}F{&@trpyOsM7Y1e!j8LTob@KU?7NihJQa%FwBaQ&!`cmW@A{Gw{LvfQGc-UJr z?p^bL|1dD=!f%_&`meP67*r-3D*y+zgT?~d%uwGe;9PBcE23<+E-hj6TGi7)ASzOhnZ0Mqk)!q z1bAqJ2zy}yvSC^Vvg1{6;hlVsH9#2SHqZD2(5fytd&p8jz^0OPGQqjz{+*hW)~`Pj zzZQmDiL&p0sQfR@53Jj9HSAsM)()c=by%sI3IT*n{}Ba!&u7UnzQylfmu`Jm&&4(d z8?1X#^v6+s5MG)3xHK65id|{t2PNOWb5{{TmkbDcfqiSL6t!uxx@kT6?fhd;tRy*E zh3$)I@cjoHUD~2wAi8qQ;}BO+$f4;Pg*fxQZSVMJs1pC|jMML|M^|MId52e0%yn4> z&2{-6*tP|7wfXRya>ZWpm2;M!5+hW>UO;&Ln`ga=iV=kh!?+4ZD+uva_Nc!e5ZIYa z(V$-HpH#~Nh=&-PC(`Lhz)iOLOxYWQ2ncKssc2F)=ye1vroQLmr{4xX4E;+i{eZm- z_UaJbi3>ZN4O3;Y*ef!!>o&N2he>XpG{0mVuw%yFaRd-eaWUz8N~<_l>VtLRD1?Ga zjOmrR@34ASeRSO|>7iTN^6Q*r$lh zYz_z11#yiu@|Gmuat#ty`NqmqL4VriZlR{3MDafRnUHI@<#Izf|0`q>bqcu^bQGfHngAbe(D2RWn-Nkw@SYReZlHtb%Y-pdGt~yX%NL3Zs(4FFjIFQLZXNjEd z5Rh~4{7TO{H0MIjJwS;au!4kA&*qZ_S`T3nJ9hUfe(sR1j-QTw$SO&HzmPnY)J8dln zH}blh^7Ae=)hBanBI2NM>rN=q3=_)mMB_oSogfZrJp!7eH|fEZo4=E017Ofn;Sov@F$hpK(w-q<$E{M131lPTaV8|;ez_pfyiG1Gnbgxj+OMp}( zoyRx(3F}BpL%SkX_MVYl-E*6Zb*g+>JByJC8Saq_%(P)jcCc%)>OAIC-x{UFj#e=b zYFAXIbk0bh`wglBWlYE}KG#%X9{kkYCA6mv2%78tyCP&^^>f|7=hCK0W0?2Fja;{L zQJpvQjvc4Q+2w{nbm+%CM#1Grz`Er}g#1YUV`4<~aGwD26wqS4B^ zi@S2@sK@3ZV>?g4-67h&(Q?_x{vXSY8!ru;v6>{@x&Uzy|HFIc6sauv@wfdP!}gyE zB?h&)+rW;k{BJJRGA`fb*9x3Ls`}{DnPgVp~L1O{zucrq;|{!`4c9A z@{0#Rp4aoy;UbUDK_U}7>5?SxY--oeeu>z0b^&J`3FA%Cl ztB2DQ_m`iasNC*5jlaiDS~1nt%pj}GZHDbaC*RI@bhY=Lv@-;?m9qI}n7mP(%1oh_ z1oL&?-(T>tp!d&cjG&)j;;hhYT0DLOWCP=OMrA7l&%~cV)TN6Y+UlM1k>BRP$Ckl7 z2O!YoBN*?_|T!C(Kc+d?(`h+5~6FvQ=F00My#53B|=#n!Wv+hqk2~Icy*sHXqycE?9xQGy55v4R$wv-fA-am^d`baP8Q2d}QxEa$Jp)p@-o(0+bVfZE z)xPnRwI{BbcH@NnI6|6qvsFhYOoq4_<=5y0|7v9PK9GG_{C>oD^425TrnSL7~&yOwAdeNE4v)q>_ zJImW+Bs`Q#@&Hi2PKee-*Pb`ov0#2}hU4d>uJ>2zF1bT!7id^r$){SPe#) z+A|Jrts#nQAoM)6#=R`ReD&sh_t>%g9no|1_JFoPaNZ4G>iCe!yW0h94z+eniW;_}g9)zTqIOEKmYWpj+6xj(sVgvI#*rjBZ9meJlCzQ?78v{l#6|-%@LX+&Fennj- zr;mWu(HwJ!O1HuIXt{-F$6FEYT%{i#sr}(=y`ARqT0^!5TQ%wtPs7 znZRSzTG!z9Tkp-A+^K8Ku_qwRPz!U5i`wTuXvE!1dG6YcI!P;QlBfTmpZUaCs!sdM zyPMqI1Uc&UC+c-i8Pglq1>l zyCJlFM(8KPIq!kH?QrZhMjo@CB$}cGp#>cn-5#mh90L&$0Y1pWdt`$$6Mne9-P)5N zzNPO&K_Pl@_&f2u&9-|1cT4;7rf71xMN1hyn8?Z)ZBx_COHaHBHaQt8ss4_yuYVZ+ zoq76iW356l^DsWpak2_@)Fz-Ty>QAQRh#-{oOA@l_p`Ump2Ys9m7+Z(5t2!CHlkLz z-Prb)>6zE!I<*?mJh8(KjS-QND`rJ`Zsz?=&~ty`+J06|L~M+fyB}h8`k4iKR()pT z{etUiLU&Uo!`F3^(qndT02yjQ;;r)8vsW|?E6loc^0dK2&7`NmhH)UK88>l5F@7R! zZjdTjwltyj^i64%*X>XQE^+oTtec|?r2KH>_C17375l0&4M ze0qT3U7-$m#XLAnOCS*c#UE*~)(;Oi=gmZvS4?y-9Lw%j{_y&`sI=-tKdWT$&CjGu zF~RvBN(wz;3kod6FJJu}UqYmzD)der*&!4Q)t3ZrZgg>dd*{u}zFuk{;Dll?__Zii z&{TkpKLR|9`&y5H1Pmui#tyaC0Z$ucf^XlbCV;5y3@DxdZ=6=9r0&<9Ten)Ib#2~! z0eA~=R}u1okac&8#mbEOkR_&72b8>a=v;~M>*g5qSxv0hDUx5qO~iC25Gi{|(nu|s zzpbD_?%7MRyQkTS%FJZz9`vUpAk3QK1CRNwj*6H0M>!lCYJPI+M7^W?PlpziSXwU^ zhq?Q<-CW|7E3+m9w3iCw6+>YNBkcDx_ig8%gasJNm$&9}$Cm572U$SxOhngfb(BS} z6k#uurAbxvEBB#L#W2+bp79&f!S1`a_DUyo2vRDsCzP(T#OpmFL+2S8r6V}9>`IT( zk5Bz)-C(;MPHyXY&Mcq!l{lN3lJpHs&CN>m4X^Br$Jk1i3eBa>)(E$XXFhe$YZvG& zl})SpY;(JMVNrCt=2Y-&c2w$e&}avSn;g(F0g6!N`dy71y;q$nt>4KNi{|WRo1RwU z`1W;IFwg2;)!myuNz;;H&mjB_tc6r#qJAm9(O9Syo9))dhfz4pOYnaP!rQ9~<=wvh zBeP1&l+LkE(!4h~*^XhO-u~eazT2+B{SzcFOJ`}O3mr;BPuoiM=0!M-zN*dr(_Bv|(edvbR|ji~g@@^TdN1xo z;hhaHvEP@pB{{(ZABN@oAZ~Gr6wf(GySQ=vn@aH!%Pymqn4z7s-OqHkcfNX_XXu%R)yYm zDrVA$*aDQz*1AxS8PT6GjOK>dqm;!m8zy>Hv1R3|%%C5|^VShC+#=SA(^b0A^Y3O; z{~A&wzB7JXWGJg^&ysY}=$(C!7njpuuQlCG9G(~Ae`W~5mu6W-Y_US@RISa|5+Me{if1w>Aw<~tQ zPUn;a$3XDRRq*$N5Ihg%k27v#kV&24^cDxTwaLwQqoc#yed|4Vq-)14%ShLapNdr< zX4mCpC~BA|+uthLzI*AKumz2lMm-pMocPUn!fjDe%bvuJ-&{+;dd$ey4YV&BRo4v2 z3{aZ~Ixbv%_^kmn!_!Ra62jtV!>rUGAuqJGS>$H zE2iv`Pr=L2X)5xsrW>|Ek{o^c$kUYD2+f*LwB((F!A<&XAYSB2*_!I(Clyb|!u7o2 z7ksa-Y0LMhV#VN_?Xwl@nATf5Jme%Ezw5ji`@UnJZRFx2HZ8kDI3}*j$bHjHK<&@l z$Mv=JjTL-v70Ya$_6#_=cX(Uoi5=o2{*A!Ug>dF2`78(v7F*v~x^*S^Lx4^M8A?ba z;o1_oS2yVu=7V#!2z21i9T8fGBb~AHDsGGQC-}pbp?S9^6HSYHP=55EmyZA#eFV&W#e6%@ zLrJUTYBS~bW4aA?;Hg@O{O`+{uEga5@`*}wJ)gIKp>Y3GxsG(@&3E>3eX2_$H^5vvvTnGOR8dEQ0`G#c*VE7+u{1Ii ztgNwiJ)5_Vk^X}qMBx@~E<83?%LwbHZX5OPSHub3blO1RD>D%#qcx}js6=Jo3p8lc-!sYy>EJe@ zeeK8A;2neSiM0Me+5VsrFjZi5E_E{uArMRgwGVuqxj?den>5P2pV(|-eRX3tnA8Cv zga3vjV^<-mxAMU$_{B)-Rb~0Id`H#K8%vU}*C3$}=|aTOH87ztp|$BWQGt>&)S!)6 zDK~8UGfG-xhXq7g!QEKhuHUO9HZHEUQEs~7gm*Lz#oMk;VO&RYUZ5;p@D-C6mD{S# zf<~>xu;oSX_mqpJ;A4kn(cg)Rq`vFNb_IE zmp)5N7dbn={HT0Q z06kg330SuMnoujeZEhxNzE6T2+&(egu{-Z3^UXQGGV)^D-Dkf)Kbh)Px}4VBOsKDu zOSzZ&=edyFRaaLeN{DiH~pk z_0CHsUw@%kIx!Lu7>{eao8CwaUflJT#52*ST2;y<>#?t35lTQ;-KRo!n zNS7*NrVal@bpKG6mZiP+f!?tGYGU&K9mZlb`j;W&WSE)#&5|P%12210wXU{kI^>nt zP+l9Co57LpdoA(hacp;-MHd(40(~Is{9u!aYFBiF^zrRog$t^#cK$15M@%hk}iu7~DP#OOcN7+yq+`CJb6 zkMtSk(e&P-#Xn(krF|(JhYN?8d;o$6bwQ6)J^Kkb;zquBueFN%wvyeSpr_wP6UmdioH(`*KKH<9EP9twc!hkzhR_9Oua~ZP%EmO@jr)yu z_dshH(6>&{N$h8XlIVN~XmJKcR4PeVyXjNt&~v-Wr3HqiJ6SmN?Un0S@#ap+1Rz` zLmqGN7F;He{ff`-N0yv=XnaPr?!gxdg;d< z{}--;h#<++ITj1MN@^le0`Qmf%|UZstKMa^&a#sdMSI5@C3KYUSzoL&(7t^ksI<>9 zx5<4-hE~!fTvB=jyt;_+cNLkaaBsho#57gnyuB+F^^9VTuo@6|sUjNKeNN718}a|f zU@a&Fm3NsVpZH!A&?(PtvaX`#=xCDvWEo(fsF5=GOWt0E_oNQwtE(aS>-3*Ev7GqH zj*LCboC2=}Wi?n-@W)b6@z!?o+OTrhK=h#bN3EIPi(QHn6^w|Q>-N%w24gCiPGN;# zcFWJ%doC=#zQ_u++KCS9Q;m)kMA6i50vd@!uyK zgZ7(oV~dRCYp#_Zy7e+*q7w9BJ?%zZnf$A6qLlwiq*c$7w59 zcJtxi$U6T)g2ZZ)w@G>WWDs%oF3F_)Ofu)e^R)4UGTBq>*AE^a0-j$+RAV5ZW$U1{ z93RR2xQ|{}25&tr%6^;-&8$AL3MQKMO`P8NEntU`A-?;fJI>)dz8t?s{R9HM1^s&>%%H9_M|!uOq)AFj1yg^j4N(VioqM!oqtxr>-# zeDijK)OjLFeF72HrX=y%brwh{Yy^;}^$Ic!16#eNUm58o;5@5>#? zNMnC|VQd<<9c=dBXOb3tmiIS98PJ@q$uGJS7R?n~#wMMxO? z%z6^LIrJeym~41coXCf%14FTJ?IF83AOWI{M7yOk3^H3=S5k9`5cTW_Yi#5 zWD+sds^3P?<7si-U_saUYoQ@JdD2_hiwv8Jq&}@B;X<$t>;zf220J{5&bN!tz*)DH zZ(w}$ZA`N#8HH<`zv&5q|M)nI;VMsKt~<3uii<{enr;&|F0b+Cy5ATqTTxQi{J9vS z3jTK$Ays(Aa{)WHI5$&EsweR5cg;p!zA`HOOvNqj8Fz`?fn~F{ zknRNTM)0V-xCfeOwmAU~6qux*B{qDy-d)-Wg6?CmpPI1)_Ub0p13MH?aXIO#is~rG zaFLV?ozZ|L^Cy5w_oUmuv#I3gKof7<(q}*8)1~G%vyVnkMIv(ImG6T# z<-YDm9*)lLc2FOYT??rX$*?lG#oaguaWZG;56E!$RRi$NgtjY818`XTNrwylel#bO zH{KUvIX3u2lj~NZr5DHvdjL7V2ySQ1z{>iBzxJ(o)sf_WRB9q;0eM@a~bz=@|jXvysNWV9_RJc)%R&#io`KK|WD}kLS~5v6ORr zW+FQl=RxLQ)g$Lqe94KbI6?a#hAIw$lZ74$%S<$h|qAu!WJ7j52I32 zEXQ}i?VDt|#kNg$kGsn#(a%k!-h8R+_E)?jv@he>A*q3{Fx9Yi;dy;`>Um;T_nXymuD}FXeY%besggbZ7P@CrC z?Y6=br5z zYlzuvC%1g0!b!Uk%?aTZw8HhfawD+P$@4XJC&A6^3aeks7`5iYwc$C_nCG8)EN;aQ znn^DVUDSA%{ZM;ZhJ0I)gpPUofhwa7j@FE^EdGyHpev6Di#XRzG`u<0^|& z0i(PXT5MoHFlbWgT4=GOIL8RT1?EiK8dX{|ByM(B>v~_h)i(75MU6!o_VqvHWepg9 zF$a}!o8{M%FC<6kHW;m6+Pf^{dwL=01MiP(e0IC7-v5eB{IgfYWlA7Ib*M?4{JjkV z);i5~mLBs=!uIox%S~sVmd$isWZ+HJ@~eGexDz|G(M?PP4d(f`KTmj^xQIJXiA#86 zn!{G5WsgTfI%hwZe^;`d77_gTw%uD7ltmKxUpxjp-vGgN|PU&R%?Y#wbGilWq{r z2dd}^A)3z$z^k8m68rGZ8y}?6C3QnJf6n%=+cP{%QwgpGHx_VfV8QeR)vzJG6Llfw z;4@d$o4L5gtD5f;?mk7zFVi%QDt;>5o#_0@CGRJ4-)sJO=n~KYAj)RJIL}hgKM}0& zmror5gY`Z~0P@z5;<_lsc1gZ&5#O8q;f!zB+UD0IAf&r$H%^dg+cW|)m!Gs0z~M@g z#rGEC$M1!uZT(RBqw$MAn4*fbCl1aVgz6}|yCd=TL8BJ>qHd|psoHNqSIg`ih%>2# z7}1MW$ZMl_t6mGamE~HCK+HQ3c_fQH`Fdj0do4$zomDNdD^kI(m)>LZHTr?X`i&rT z-QMpx}%1XMY+IObRR@UxN6rJeL-zo!4WVkQ;0o}4wjtNK5Ms{YxA z5VF2ER9fk!_M5(C`Eq1JEzL$`?!t>Ck6}bABYHkXP7K6DLhI1se)ZusLk$*)i!W|| zi*$lhjT8X5OS)7Z-+UG7Ffq~QvcWZCylt(Era&~;(yub$)qmN*Ca>!9cn3cTf zwSpuZ>~kt=OBuO=R9oB%CvN!{yRMXAdeGM56P=~8r_ zh4Gu^0gRTv_Dr-~ne@|t9!@f73Z}E=WCoiqE+-phI(dN3M~;DeFfOeea! zAbeHlJbP4h-<0~Ldf%1KEGCD2JA46s)c=2NHDK?>Rk^P1E5=t=k+84qclxB3oYt*s zPR`0tJvpd;j24y%CVGxToHi$zP!NP{<&dJiKzkkf@Z1MrF3LKNye5vV_OVw*M9hst z@R?|sxR=_up2Bd%(?8XwPyC>A2R*uZV8*^=`F9Yfe>(=jOmX{)u%@^&vg7u`p7Q8{ zOAgZemJ>Fg(K5Fwhd7-kZTXvw9Vkc)w)ahPPefuSHxqt~Rpnyup5H%%=F-7rzvIqg z6&!c6$%RijO9)AijgCoO-BRp;MoX!Z!zi~D+e|s(Kfx?ZBh^`mx|GZBOXUw7zsV%7 z2+BE5y(2j!l7b1nIO0D2gd#KC+tbUn%a)p`tEecg$lo5q;VpTSxldMfZ6LR?Hv9|)2PxJ)3Z>WhsYxUo*X;+(PpB1AN#XRS_GNBEM;qDY!;P_71cSiyHfoXNPi?69ik8Ie)Y zSMx!d-DQZn2q0jNI77zI50k$YBQB8Ryb9E+)52H!EC+@g3dL{wiWjxa;R7G=^?Jt8 za%|@bHS6m51UC2;gKT)0Ug-K=a{haNxYGpm`#lK_ruy9}1LmtSb5rTK<7khbo2_(B zIKrHOLcRBq4oj~}NO6K(IKTCF<3(JyF9X-3!K z8>#T_uymF~S_d@@X>6bJc)|xM8S9c3=P$pa=3eZ+Zxal?h&X4c~ zGoH5JVFdwg=$s;N6RwgJ;&bxPe8^TXj)NQ{zo@CRnF~&Rcb(dZ8LwFrIIGd_Q3sp5eK@KqW)V6ESkc{z22fHOw z2|r%Mk315N@D}8)WLiP<($6ET$vEPN_N>dq^|VA!?dj#1He2L^p27G}U98N8-ESFh zW)V^LGQGgr_RUymCAJmB(L+$=pM;+qG>IEI{c9so=D7xEiOe@`(|!TyEmYq%|E5%; zVsqNamo009>W8|WM*5-&1Ve0Qlfnb=g!o=Faki~-CLoL|gPRabaY{*g$gBkGy~0Qk zwE=&+92rki#4olS0RZ*pXeCX@$S6vhfd{0U#80Q)a!gG~l`-&{xRKiZI#9Y$btfym z*v|8sS3d3C2krbJBQ0gDfj&?SHuLO7yEk5&G^1rvgIOqdg?`GumU#Lxrq)C|I=Ywk zdY5BYaU9qDdCE2D{=up8Zx`abaoLPkB_UEDRZs}pR)ga~*tk>bDGC!15`imYL*E8yOyQ5SWRg^BCD<%hcy!7e#3csc26{%JZ$`TL zPBY@uhkdJdSN_9klXdfKji77`rYfRkQ~Uu)(b!Ed#&E3e`)TQ|H=dgr2MKge4r1;$ z!L+#+wo`?PV;)cFajE!i}0 zCGiWzzu{5up4P9l$7UQ5^Kh!?kms7yS&iaLh4F(i6T{M7XO+lkEo_nx0 zO!+))BUL@H$rTcyF+S691nfnZe<53t+FHOOkD_MvVtK$1+*)+*nB1}f)%2o;n7?3) zUs5nIhHalWo>?PeqA?X-HSL=s?&uQ;X-0R=ad^%dV+No720=cun)<%r*S86u zcXRQ_ugr!+DlU-0U89VF&huPYF>=l$=lH`7J};inUM;5s)KB|f3t`d($XLSHxQOr_vPo3#owj3(FwliV?93t!=L9ty(6iSFR&~7n z;78#{5A&r%y>)6&wfuc4SJ_XNGDpA#5{P_`H$kB@on+7v#!)#^m0}bKLSO9eIlNs3 zTF)Wr!WHqsZYO2FW66p1Hg|5<#mU6R5UM45&T_|e4MVJ=Gnfp-u80jj3$rcMaA2i> znu#faZGdbY^XHJsZLXa0h`8j$)gg1eK=z0KESt7IPjYJ8B4hEe*emx1eqhW7HWeO0 zt>O08yJza^ZZJN&cDK{|!XcM6MU48h$^`PjGy_4>Vsv`Ve(_(naQ z9y~_$>*K*+%VPD_X2@q@kWK6HD@=SH_0sJ*+4FgA;PXO>C>qYFYtoi3Az zaWAJp#$P19E8D!h?{D6ZoY?D@V_r;{)a)2lhVzc%M?x@OB-hviJ8{oj2hJf%%3o(< zUc^$8$41K;-KP)0yj13FxXW}+NB(%17ml*_VOyQxixyjEP)eILX$`3ju7tj@CYH~% z-}&g`D66w8Hzh-Nv7g>2I>xTv|FoiD z&%_md->?HE1OYTI%i}rs9Ce$IrTr&bp^G*Y=Id+HI9?lamzWRKDJQ-J;qNlqTr+f( ziN6~u98|xi;hd_ZeLOV!lDc}DvcmnO=M0?lUU^qZ;xhEX(zV@)sLB|7(>t~C8=b#c z5{*Q^o{HXuO2I)l$?15zO%Ob~Q~Rb-gYoA-<`b8?gO%1i=WzT8adIg|WOZu=#UU)E zO?H(}e|!7M+nDQX>}Y-S&|d4tAov4l`Mzw;!ZXXfzLKfKx@ZzE98!f2X*&C8a(z*E zL^$foy4{JoPbhsU}+2BB!3uY$E^7=utm7z!NCipMXIt(8?9bi{$=c)NvVOv62I~8e&l_RH99Lee} z0mk`mFVQ08sQ9mIS5jx{8@WQzq<+r~vJd4F^(L*b!H_+Mt}E%Q8uy z8G*z5e~+5N-V3Q7U7PeFZR4jbmh2vp!Xp`ViNSn^Ymc{8n68+d;@nOchwjCqqs08O z1WC4N7xL;YDZQSCHm3((^Kj^9&N$;pi2=K5NKLg5w!$xpMA3o`Gm z?_A@!{8hF9k9q3GJmiK=(gIU#;puqoA%~OXU-%E}VDqqs{L$AM6sl-5B!m zW$10VD*+Nlb#`SPiNP)(zEa`&_RFL`fy(kOq1}w#Ku=JG^{!#Fq#*+wo=3QoVp`Ck zopG4|EZ>+-2l$=<`)iDDO!A?1&&(MHiB)_rt)9^Zd>%j912M^LsK*GbaQ!OLho3b) zjmq=cVJ-zcP{SCBD*NX&ofA~`s47z-Pv}yO@1z7ROKq-5I_K0@F!w&T2<<%kLJe23 z*ostdbGz$h9xU`(za6a zy@!&)*zW%ey8WN&B0Dd7^E}IAspD4|#g|xw87+Y>M78@8-00e7Zntt#30673V6;2u z)z>87x|={ghp^hNhg%bBA}hsF#V}>@5be)0roW(G1IB9A%yapSm@}AaoaDqZD}HID z-OvBUce-8Ic3I4I#toOHtq1HRbbA6nJoi$8;JGny&jO)oF!yar)|!<;8dZVz1|?3F zJfN!J-`WM^2o3K7E5OLEoI@sud_5uQe;TL$8-}t{gZ&(mxohHH1}xGq#@?a(dS!>d z2<+=FI1DjN*d(9ZY_qpDyriXy{zz6P#ot@rKbs3BGch8nt`DmhBS3sNyl*CYWSoeeb9hR(+_w~D+S+`Ho6AIV zBGk34gW7G=V>VxhyQ>B#eYG2sYXQH(zGpN>FK3Ak5 Date: Sun, 29 Jul 2018 15:24:29 +0800 Subject: [PATCH 004/172] auto commit --- notes/剑指 offer 题解.md | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/notes/剑指 offer 题解.md b/notes/剑指 offer 题解.md index e36e7a85..47d5d94e 100644 --- a/notes/剑指 offer 题解.md +++ b/notes/剑指 offer 题解.md @@ -1640,6 +1640,19 @@ private void backtracking(TreeNode node, int target, ArrayList path) 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的 head。 +```java +public class RandomListNode +{ + int label; + RandomListNode next = null; + RandomListNode random = null; + + RandomListNode(int label) { + this.label = label; + } +} +``` +

## 解题思路 @@ -1820,7 +1833,7 @@ private void backtracking(char[] chars, boolean[] hasUsed, StringBuilder s) 多数投票问题,可以利用 Boyer-Moore Majority Vote Algorithm 来解决这个问题,使得时间复杂度为 O(N)。 -使用 cnt 来统计一个元素出现的次数,当遍历到的元素和统计元素不相等时,令 cnt--。如果前面查找了 i 个元素,且 cnt == 0 ,说明前 i 个元素没有 majority,或者有 majority,但是出现的次数少于 i / 2 ,因为如果多于 i / 2 的话 cnt 就一定不会为 0 。此时剩下的 n - i 个元素中,majority 的数目依然多于 (n - i) / 2,因此继续查找就能找出 majority。 +使用 cnt 来统计一个元素出现的次数,当遍历到的元素和统计元素不相等时,令 cnt--。如果前面查找了 i 个元素,且 cnt == 0,说明前 i 个元素没有 majority,或者有 majority,但是出现的次数少于 i / 2 ,因为如果多于 i / 2 的话 cnt 就一定不会为 0 。此时剩下的 n - i 个元素中,majority 的数目依然多于 (n - i) / 2,因此继续查找就能找出 majority。 ```java public int MoreThanHalfNum_Solution(int[] nums) @@ -1924,7 +1937,7 @@ public ArrayList GetLeastNumbers_Solution(int[] nums, int k) if (maxHeap.size() > k) maxHeap.poll(); } - return new ArrayList<>(maxHeap) ; + return new ArrayList<>(maxHeap); } ``` @@ -2005,7 +2018,7 @@ public char FirstAppearingOnce() ## 题目描述 -{6,-3,-2,7,-15,1,2,2},连续子数组的最大和为 8(从第 0 个开始,到第 3 个为止)。 +{6, -3, -2, 7, -15, 1, 2, 2},连续子数组的最大和为 8(从第 0 个开始,到第 3 个为止)。 ## 解题思路 From 8a42a419be5a062cb59bc19e536e4b3de826e7cb Mon Sep 17 00:00:00 2001 From: fighterhit Date: Mon, 30 Jul 2018 15:26:33 +0800 Subject: [PATCH 005/172] Update Linux.md --- notes/Linux.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Linux.md b/notes/Linux.md index 6325e86e..8f27d75c 100644 --- a/notes/Linux.md +++ b/notes/Linux.md @@ -1078,7 +1078,7 @@ dmtsai pts/0 192.168.1.100 Thu Jul 9 17:23 - 23:36 (06:12) dmtsai pts/0 192.168.1.100 Thu Jul 9 08:02 - 08:17 (00:14) dmtsai tty1 Fri May 29 11:55 - 12:11 (00:15) -$ last -n 5 | awk '{print $1 "\t" $3} +$ last -n 5 | awk '{print $1 "\t" $3}' ``` 可以根据字段的某些条件进行匹配,例如匹配字段小于某个值的那一行数据。 From f8600a4611fe45f847e6a1e869aad7a1d43bcda4 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Mon, 30 Jul 2018 23:22:52 +0800 Subject: [PATCH 006/172] auto commit --- README.md | 8 ++- notes/剑指 offer 题解.md | 41 +++++++++--- notes/{安全性.md => 攻击技术.md} | 0 notes/系统设计基础.md | 104 +++++++++++++++++++++++++++++++ 4 files changed, 141 insertions(+), 12 deletions(-) rename notes/{安全性.md => 攻击技术.md} (100%) create mode 100644 notes/系统设计基础.md diff --git a/README.md b/README.md index 63067ac8..4b1411b5 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,10 @@ Leetcode 上数据库题目的解题记录。 ## 系统设计 :bulb: +> [系统设计基础](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/系统设计基础.md) + +性能、伸缩性、扩展性、可用性、安全性 + > [分布式](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/分布式.md) 分布式锁、分布式事务、CAP、BASE、Paxos、Raft @@ -113,9 +117,9 @@ Leetcode 上数据库题目的解题记录。 负载均衡、Session 管理 -> [安全性](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/安全性.md) +> [攻击技术](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/攻击技术.md) -XSS、CSRF、SQL 注入、DDos +XSS、CSRF、SQL 注入、DDoS > [消息队列](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/消息队列.md) diff --git a/notes/剑指 offer 题解.md b/notes/剑指 offer 题解.md index 05d43578..47d5d94e 100644 --- a/notes/剑指 offer 题解.md +++ b/notes/剑指 offer 题解.md @@ -1,4 +1,5 @@ +* [1. 前言](#1-前言) * [2. 实现 Singleton](#2-实现-singleton) * [3. 数组中重复的数字](#3-数组中重复的数字) * [4. 二维数组中的查找](#4-二维数组中的查找) @@ -80,6 +81,13 @@ +# 1. 前言 + +本文的绘图可通过以下途径免费获得并使用: + +- [ProcessOn](https://www.processon.com/view/5a3e4c7be4b0909c1aa18b49) +- [DrawIO](https://drive.google.com/file/d/1nSSCpPUC05MFoeFuf_aeTtkm7dG5-bJ1/view?usp=sharing) + # 2. 实现 Singleton [单例模式](https://github.com/CyC2018/Interview-Notebook/blob/master/notes/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.md) @@ -170,7 +178,7 @@ Given target = 20, return false. 当前元素的查找区间为左下角的所有元素,例如元素 12 的查找区间如下: -

+

复杂度:O(M + N) + O(1) @@ -456,7 +464,7 @@ public int pop() throws Exception { 如果使用递归求解,会重复计算一些子问题。例如,计算 f(10) 需要计算 f(9) 和 f(8),计算 f(9) 需要计算 f(8) 和 f(7),可以看到 f(8) 被重复计算了。 -

+

递归是将一个问题划分成多个子问题求解,动态规划也是如此,但是动态规划会把子问题的解缓存起来,从而避免重复求解子问题。 @@ -941,11 +949,11 @@ private void printNumber(char[] number) { ① 如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点,再删除下一个节点,时间复杂度为 O(1)。 -

+

② 否则,就需要先遍历链表,找到节点的前一个节点,然后让前一个节点指向 null,时间复杂度为 O(N)。 -

+

综上,如果进行 N 次操作,那么大约需要操作节点的次数为 N-1+N=2N-1,其中 N-1 表示 N-1 个不是尾节点的每个节点以 O(1) 的时间复杂度操作节点的总次数,N 表示 1 个尾节点以 O(N) 的时间复杂度操作节点的总次数。(2N-1)/N \~ 2,因此该算法的平均时间复杂度为 O(1)。 @@ -1103,7 +1111,7 @@ public void reOrderArray(int[] nums) { 设链表的长度为 N。设两个指针 P1 和 P2,先让 P1 移动 K 个节点,则还有 N - K 个节点可以移动。此时让 P1 和 P2 同时移动,可以知道当 P1 移动到链表结尾时,P2 移动到 N - K 个节点处,该位置就是倒数第 K 个节点。 -

+

```java public ListNode FindKthToTail(ListNode head, int k) @@ -1140,7 +1148,7 @@ public ListNode FindKthToTail(ListNode head, int k) 在相遇点,slow 要到环的入口点还需要移动 z 个节点,如果让 fast 重新从头开始移动,并且速度变为每次移动一个节点,那么它到环入口点还需要移动 x 个节点。在上面已经推导出 x=z,因此 fast 和 slow 将在环入口点相遇。 -

+

```java public ListNode EntryNodeOfLoop(ListNode pHead) @@ -1346,7 +1354,7 @@ boolean isSymmetrical(TreeNode t1, TreeNode t2) 下图的矩阵顺时针打印结果为:1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10 -

+

## 解题思路 @@ -1632,6 +1640,19 @@ private void backtracking(TreeNode node, int target, ArrayList path) 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的 head。 +```java +public class RandomListNode +{ + int label; + RandomListNode next = null; + RandomListNode random = null; + + RandomListNode(int label) { + this.label = label; + } +} +``` +

## 解题思路 @@ -1812,7 +1833,7 @@ private void backtracking(char[] chars, boolean[] hasUsed, StringBuilder s) 多数投票问题,可以利用 Boyer-Moore Majority Vote Algorithm 来解决这个问题,使得时间复杂度为 O(N)。 -使用 cnt 来统计一个元素出现的次数,当遍历到的元素和统计元素不相等时,令 cnt--。如果前面查找了 i 个元素,且 cnt == 0 ,说明前 i 个元素没有 majority,或者有 majority,但是出现的次数少于 i / 2 ,因为如果多于 i / 2 的话 cnt 就一定不会为 0 。此时剩下的 n - i 个元素中,majority 的数目依然多于 (n - i) / 2,因此继续查找就能找出 majority。 +使用 cnt 来统计一个元素出现的次数,当遍历到的元素和统计元素不相等时,令 cnt--。如果前面查找了 i 个元素,且 cnt == 0,说明前 i 个元素没有 majority,或者有 majority,但是出现的次数少于 i / 2 ,因为如果多于 i / 2 的话 cnt 就一定不会为 0 。此时剩下的 n - i 个元素中,majority 的数目依然多于 (n - i) / 2,因此继续查找就能找出 majority。 ```java public int MoreThanHalfNum_Solution(int[] nums) @@ -1916,7 +1937,7 @@ public ArrayList GetLeastNumbers_Solution(int[] nums, int k) if (maxHeap.size() > k) maxHeap.poll(); } - return new ArrayList<>(maxHeap) ; + return new ArrayList<>(maxHeap); } ``` @@ -1997,7 +2018,7 @@ public char FirstAppearingOnce() ## 题目描述 -{6,-3,-2,7,-15,1,2,2},连续子数组的最大和为 8(从第 0 个开始,到第 3 个为止)。 +{6, -3, -2, 7, -15, 1, 2, 2},连续子数组的最大和为 8(从第 0 个开始,到第 3 个为止)。 ## 解题思路 diff --git a/notes/安全性.md b/notes/攻击技术.md similarity index 100% rename from notes/安全性.md rename to notes/攻击技术.md diff --git a/notes/系统设计基础.md b/notes/系统设计基础.md new file mode 100644 index 00000000..e132aa2c --- /dev/null +++ b/notes/系统设计基础.md @@ -0,0 +1,104 @@ + +* [一、性能](#一性能) +* [二、伸缩性](#二伸缩性) +* [三、扩展性](#三扩展性) +* [四、可用性](#四可用性) +* [五、安全性](#五安全性) + + + +# 一、性能 + +## 性能指标 + +### 1. 响应时间 + +指从某个请求发出到接收到响应消耗的时间。 + +在对响应时间进行测试时,通常采用重复请求方式,然后计算平均响应时间。 + +### 2. 吞吐量 + +指系统在单位时间内可以处理的请求数量,通常使用每秒的请求数来衡量。 + +### 3. 并发用户数 + +指系统能同时处理的并发用户请求数量。 + +在没有并发存在的系统中,请求被顺序执行,此时响应时间为吞吐量的倒数。例如系统支持的吞吐量为 100 req/s,那么平均响应时间应该为 0.01s。 + +目前的大型系统都支持多线程来处理并发请求,多线程能够提高吞吐量以及缩短响应时间,主要有两个原因: + +- 多 CPU +- IO 等待时间 + +使用 IO 多路复用等方式,系统在等待一个 IO 操作完成的这段时间内不需要被阻塞,可以去处理其它请求。通过将这个等待时间利用起来,使得 CPU 利用率大大提高。 + +并发用户数不是越高越好,因为如果并发用户数太高,系统来不及处理这么多的请求,会使得过多的请求需要等待,那么响应时间就会大大提高。 + +## 性能优化 + +### 1. 集群 + +将多台服务器组成集群,使用负载均衡将请求转发到集群中,避免单一服务器的负载压力过大导致性能降低。 + +### 2. 缓存 + +缓存能够提高性能的原因如下: + +- 缓存数据通常位于内存等介质中,这种介质对于读操作特别快; +- 缓存数据可以位于靠近用户的地理位置上; +- 可以将计算结果进行缓存,从而避免重复计算。 + +### 3. 异步 + +某些流程可以将操作转换为消息,将消息发送到消息队列之后立即返回,之后这个操作会被异步处理。 + +# 二、伸缩性 + +指不断向集群中添加服务器来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。 + +## 伸缩性与性能 + +如果系统存在性能问题,那么单个用户的请求总是很慢的; + +如果系统存在伸缩性问题,那么单个用户的请求可能会很快,但是在并发数很高的情况下系统会很慢。 + +## 实现伸缩性 + +应用服务器只要不具有状态,那么就可以很容易地通过负载均衡器向集群中添加新的服务器。 + +关系型数据库的伸缩性通过 Sharding 来实现,将数据按一定的规则分布到不同的节点上,从而解决单台存储服务器存储空间限制。 + +对于非关系型数据库,它们天生就是为海量数据而诞生,对伸缩性的支持特别好。 + +# 三、扩展性 + +指的是添加新功能时对现有系统的其它应用无影响,这就要求不同应用具备低耦合的特点。 + +实现可扩展主要有两种方式: + +- 使用消息队列进行解耦,应用之间通过消息传递的方式进行通信; +- 使用分布式服务将业务和可复用的服务分离开来,业务使用分布式服务器框架调用可复用的服务。新增的产品可以用过调用可复用的服务来实现业务逻辑,对其它产品没有影响。 + +# 四、可用性 + +## 冗余 + +保证高可用的主要手段是使用冗余,当某个服务器故障时就请求其它服务器。 + +应用服务器的冗余比较容易实现,只要保证应用服务器不具有状态,那么某个应用服务器故障时,负载均衡器将该应用服务器原先的用户请求转发到另一个应用服务器上不会对用户有任何影响。 + +存储服务器的冗余需要使用主从复制来实现,当主服务器故障时,需要提升从服务器为主服务器,这个过程称为切换。 + +## 监控 + +对 CPU、内存、磁盘、网络等系统负载信息进行监控,当某个数据达到一定阈值时通知运维人员,从而在系统发生故障之前及时发现问题。 + +## 服务降级 + +服务器降级是系统为了应对大量的请求,主动关闭部分功能,从而保证核心功能可用。 + +# 五、安全性 + +要求系统的应对各种攻击手段时能够有可靠的应对措施。 From 75e5fd8be63458f7fd7f519d46bb2a811ad087b3 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Tue, 31 Jul 2018 00:30:14 +0800 Subject: [PATCH 007/172] auto commit --- README.md | 4 + notes/缓存.md | 265 ++++++++++++++++++ pics/15313ed8-a520-4799-a300-2b6b36be314f.jpg | Bin 0 -> 33792 bytes pics/66402828-fb2b-418f-83f6-82153491bcfe.jpg | Bin 0 -> 38912 bytes pics/68b110b9-76c6-4ee2-b541-4145e65adb3e.jpg | Bin 0 -> 34816 bytes 5 files changed, 269 insertions(+) create mode 100644 notes/缓存.md create mode 100644 pics/15313ed8-a520-4799-a300-2b6b36be314f.jpg create mode 100644 pics/66402828-fb2b-418f-83f6-82153491bcfe.jpg create mode 100644 pics/68b110b9-76c6-4ee2-b541-4145e65adb3e.jpg diff --git a/README.md b/README.md index 4b1411b5..5e49a332 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,10 @@ Leetcode 上数据库题目的解题记录。 XSS、CSRF、SQL 注入、DDoS +> [缓存](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/缓存.md) + +缓存特征、缓存位置、缓存问题、数据分布、一致性哈希、LRU、CDN + > [消息队列](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/消息队列.md) 消息处理模型、使用场景、可靠性 diff --git a/notes/缓存.md b/notes/缓存.md new file mode 100644 index 00000000..e60373dd --- /dev/null +++ b/notes/缓存.md @@ -0,0 +1,265 @@ + +* [一、缓存特征](#一缓存特征) +* [二、LRU](#二lru) +* [三、缓存位置](#三缓存位置) +* [四、CDN](#四cdn) +* [五、缓存问题](#五缓存问题) +* [六、数据分布](#六数据分布) +* [七、一致性哈希](#七一致性哈希) + + + +# 一、缓存特征 + +## 命中率 + +当某个请求能够通过访问缓存而得到响应时,称为缓存命中。 + +缓存命中率越高,缓存的利用率也就越高。 + +## 最大空间 + +缓存通常位于内存中,内存的空间通常比磁盘空间小的多,因此缓存的最大空间不可能非常大。 + +当缓存存放的数据量超过最大空间时,就需要淘汰部分数据来存放新到达的数据。 + +## 淘汰策略 + +- FIFO(First In First Out):先进先出策略,在实时性的场景下,需要经常访问最新的数据,那么就可以使用 FIFO,使最先进入的数据(最晚的数据)被淘汰。 + +- LRU(Least Recently Used):最近最久未使用策略,优先淘汰最久未使用的数据,也就是上次被访问时间距离现在最远的数据。该策略可以保证内存中的数据都是热点数据,也就是经常被访问的数据,从而保证缓存命中率。 + +参考资料: + +- [缓存那些事](https://tech.meituan.com/cache_about.html) + +# 二、LRU + +以下是一个基于 双向队列 + HashMap 的 LRU 算法实现,对算法的解释如下: + +- 最基本的思路是当访问某个节点时,将其从原来的位置删除,并重新插入到链表头部,这样就能保证链表尾部存储的就是最近最久未使用的节点,当节点数量大于缓存最大空间时就删除链表尾部的节点。 +- 为了使删除操作时间复杂度为 O(1),那么就不能采用遍历的方式找到某个节点。HashMap 存储这 Key 到节点的映射,通过 Key 就能以 O(1) 的时间得到节点,然后再以 O(1) 的时间将其从双向队列中删除。 + +```java +public class LRU implements Iterable { + + private Node head; + private Node tail; + private HashMap map; + private int maxSize; + + private class Node { + + Node pre; + Node next; + K k; + V v; + + public Node(K k, V v) { + this.k = k; + this.v = v; + } + } + + public LRU(int maxSize) { + + this.maxSize = maxSize; + this.map = new HashMap<>(maxSize * 4 / 3); + + head = new Node(null, null); + tail = new Node(null, null); + + head.next = tail; + tail.pre = head; + } + + public V get(K key) { + + if (!map.containsKey(key)) { + return null; + } + + Node node = map.get(key); + unlink(node); + appendHead(node); + + return node.v; + } + + public void put(K key, V value) { + + if (map.containsKey(key)) { + Node node = map.get(key); + unlink(node); + } + + Node node = new Node(key, value); + map.put(key, node); + appendHead(node); + + if (map.size() > maxSize) { + Node toRemove = removeTail(); + map.remove(toRemove); + } + } + + private void unlink(Node node) { + Node pre = node.pre; + node.pre = node.next; + node.next = pre; + } + + private void appendHead(Node node) { + node.next = head.next; + head.next = node; + } + + private Node removeTail() { + Node node = tail.pre; + node.pre = tail; + return node; + } + + @Override + public Iterator iterator() { + + return new Iterator() { + + private Node cur = head.next; + + @Override + public boolean hasNext() { + return cur != tail; + } + + @Override + public K next() { + Node node = cur; + cur = cur.next; + return node.k; + } + }; + } +} +``` + +# 三、缓存位置 + +## 浏览器 + +当 HTTP 响应允许进行缓存时,浏览器会将 HTML、CSS、JavaScript、图片等静态资源进行缓存。 + +## ISP + +网络服务提供商(ISP)是网络访问的第一跳,通过将数据缓存在 ISP 中能够大大提高用户的访问速度。 + +## 反向代理 + +反向代理位于服务器之前,请求与响应都需要经过反向代理。通过将数据缓存在反向代理,在用户请求时就可以直接使用缓存进行响应。 + +## 本地缓存 + +使用 Guava Cache 将数据缓存在服务器本地内存中,服务器代码可以直接读取本地内存中的缓存,速度非常快。 + +## 分布式缓存 + +使用 Redis、Memcache 等分布式缓存将数据缓存在分布式缓存系统中。相对于本地缓存来说,分布式缓存单独部署,可以根据需求分配硬件资源。不仅如此,服务器集群都可以访问分布式缓存,本地缓存需要在服务器集群之间进行同步,实现和性能开销上都非常大。 + +## 数据库缓存 + +MySQL 等数据库管理系统具有自己的查询缓存机制来提高 SQL 查询效率。 + +# 四、CDN + +内容分发网络(Content distribution network,CDN)是一种通过互连的网络系统,利用更靠近用户的服务器更快更可靠地将 HTML、CSS、JavaScript、音乐、图片、视频等静态资源其它数据分发给用户。 + +CDN 主要有以下优点: + +- 更快地将数据分发给用户; +- 通过部署多台服务器,从而提高系统整体的带宽性能; +- 多台服务器可以看成是一种冗余机制,从而具有高可用性。 + +

+ +参考资料: + +- [内容分发网络](https://zh.wikipedia.org/wiki/%E5%85%A7%E5%AE%B9%E5%82%B3%E9%81%9E%E7%B6%B2%E8%B7%AF) +- [How Aspiration CDN helps to improve your website loading speed?](https://www.aspirationhosting.com/aspiration-cdn/) + +# 五、缓存问题 + +## 缓存穿透 + +指的是对某个一定不存在的数据进行请求,该请求将会穿透缓存来到数据库。 + +解决方案: + +- 对这些不存在的数据缓存一个空数据; +- 对这类请求进行过滤。 + +## 缓存雪崩 + +指的是由于数据没有被加载到缓存中,或者缓存数据在同一时间大面积失效(过期),又或者缓存服务器宕机,导致大量的请求都去到达数据库。 + +在存在缓存的系统中,系统非常依赖于缓存,缓存分担了很大一部分的数据请求。当发生缓存雪崩时,数据库无法处理这么大的请求,导致数据库崩溃。 + +解决方案: + +- 为了防止缓存在同一时间大面积过期导致的缓存雪崩,可以通过观察用户行为,合理设置缓存过期时间来实现; +- 为了防止缓存服务器宕机出现的缓存雪崩,可以使用分布式缓存,分布式缓存中每一个节点只缓存部分的数据,当某个节点宕机时可以保证其它节点的缓存仍然可用。 + +## 缓存一致性 + +缓存一致性要求数据更新的同时缓存数据也能够实时更新。 + +解决方案: + +- 在数据更新的同时立即去更新缓存; +- 在读缓存之前先判断缓存是否是最新的,如果不是最新的先进行更新。 + +要保证缓存一致性需要付出很大的代价,缓存数据最好是那些对一致性要求不高的数据,允许缓存数据存在一些脏数据。 + +# 六、数据分布 + +## 哈希分布 + +哈希分布就是将数据计算哈希值之后,按照哈希值分配到不同的节点上。例如有 N 个节点,数据的主键为 key,则将该数据分配的节点序号为:hash(key)%N。 + +传统的哈希分布算法存在一个问题:当节点数量变化时,也就是 N 值变化,那么几乎所有的数据都需要重新分布,将导致大量的数据迁移。 + +## 顺序分布 + +将数据划分为多个连续的部分,按数据的 ID 或者时间分布到不同节点上。例如 User 表的 ID 范围为 1 \~ 7000,使用顺序分布可以将其划分成多个子表,对应的主键范围为 1 \~ 1000,1001 \~ 2000,...,6001 \~ 7000。 + +顺序分布相比于哈希分布的主要优点如下: + +- 能保持数据原有的顺序; +- 并且能够准确控制每台服务器存储的数据量,从而使得存储空间的利用率最大。 + +参考资料: + +- 大规模分布式存储系统 + +# 七、一致性哈希 + +Distributed Hash Table(DHT) 是一种哈希分布方式,其目的是为了克服传统哈希分布在服务器节点数量变化时大量数据失效的问题。 + +## 基本原理 + +将哈希空间 [0, 2n-1] 看成一个哈希环,每个服务器节点都配置到哈希环上。每个数据对象通过哈希取模得到哈希值之后,存放到哈希环中顺时针方向第一个大于等于该哈希值的节点上。 + +

+ +一致性哈希在增加或者删除节点时只会影响到哈希环中相邻的节点,例如下图中新增节点 X,只需要将它前一个节点 C 上的数据重新进行分布即可,对于节点 A、B、D 都没有影响。 + +

+ +## 虚拟节点 + +上面描述的一致性哈希存在数据分布不均匀的问题,节点存储的数据量有可能会存在很大的不同。 + +数据不均匀主要是因为节点在哈希环上分布的不均匀,这种情况在节点数量很少的情况下尤其明显。解决方式是通过增加虚拟节点,然后将虚拟节点映射到真实节点上。虚拟节点的数量比真实节点来得大,那么虚拟节点在哈希环上分布的均匀性就会比原来的真是节点号,从而使得数据分布也更加均匀。 + +参考资料: + +- [一致性哈希算法](https://my.oschina.net/jayhu/blog/732849) diff --git a/pics/15313ed8-a520-4799-a300-2b6b36be314f.jpg b/pics/15313ed8-a520-4799-a300-2b6b36be314f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cbba7f360c3fad591be2a96b334935a44e792685 GIT binary patch literal 33792 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 literal 0 HcmV?d00001 diff --git a/pics/68b110b9-76c6-4ee2-b541-4145e65adb3e.jpg b/pics/68b110b9-76c6-4ee2-b541-4145e65adb3e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d82f46eb69175c1da45cacef5545b9f797f8c2ab GIT binary patch literal 34816 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%0Ayfr^s5<>k${W2Fl14%w#Gf;{*s58 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 bEY0oT|4j=1uVO#m@7e$V`TzgU^Z)+<8N5@c literal 0 HcmV?d00001 From d78b96587829957eb46f5046ed6a640b8d58e9ff Mon Sep 17 00:00:00 2001 From: HenryChan98 Date: Tue, 31 Jul 2018 14:35:08 +0800 Subject: [PATCH 008/172] Update SQL exercises --- other/sql 经典练习题.sql | 51 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/other/sql 经典练习题.sql b/other/sql 经典练习题.sql index 72965fa2..a4b4f964 100644 --- a/other/sql 经典练习题.sql +++ b/other/sql 经典练习题.sql @@ -430,3 +430,54 @@ where SCORE.SNO = STUDENT.SNO and SSEX = '男' and CNO = ( +-- 46、使用游标方式来同时查询每位同学的名字,他所选课程及成绩。 + +declare + cursor student_cursor is + select S.SNO,S.SNAME,C.CNAME,SC.DEGREE as DEGREE + from STUDENT S, COURSE C, SCORE SC + where S.SNO=SC.SNO + and SC.CNO=C.CNO; + + student_row student_cursor%ROWTYPE; + +begin + open student_cursor; + loop + fetch student_cursor INTO student_row; + exit when student_cursor%NOTFOUND; + dbms_output.put_line( student_row.SNO || '' || + +student_row.SNAME|| '' || student_row.CNAME || '' || + +student_row.DEGREE); + end loop; + close student_cursor; +END; +/ + + +-- 47、 声明触发器指令,每当有同学转换班级时执行触发器显示当前和之前所在班级。 + +CREATE OR REPLACE TRIGGER display_class_changes +AFTER DELETE OR INSERT OR UPDATE ON student +FOR EACH ROW +WHEN (NEW.sno > 0) + +BEGIN + + dbms_output.put_line('Old class: ' || :OLD.class); + dbms_output.put_line('New class: ' || :NEW.class); +END; +/ + + +Update student +set class=95031 +where sno=109; + + +-- 48、 删除已设置的触发器指令 + +DROP TRIGGER display_class_changes; + From b1bbd3d41895c488ead8768b6e882e2c102e7e12 Mon Sep 17 00:00:00 2001 From: fighter Date: Tue, 31 Jul 2018 17:30:04 +0800 Subject: [PATCH 009/172] change XSRF to CSRF --- notes/攻击技术.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/攻击技术.md b/notes/攻击技术.md index 22af60ea..c99071a0 100644 --- a/notes/攻击技术.md +++ b/notes/攻击技术.md @@ -141,7 +141,7 @@ http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName ### 1. 检查 Referer 首部字段 -Referer 首部字段位于 HTTP 报文中,用于标识请求来源的地址。检查这个首部字段并要求请求来源的地址在同一个域名下,可以极大的防止 XSRF 攻击。 +Referer 首部字段位于 HTTP 报文中,用于标识请求来源的地址。检查这个首部字段并要求请求来源的地址在同一个域名下,可以极大的防止 CSRF 攻击。 这种办法简单易行,工作量低,仅需要在关键访问处增加一步校验。但这种办法也有其局限性,因其完全依赖浏览器发送正确的 Referer 字段。虽然 HTTP 协议对此字段的内容有明确的规定,但并无法保证来访的浏览器的具体实现,亦无法保证浏览器没有安全漏洞影响到此字段。并且也存在攻击者攻击某些浏览器,篡改其 Referer 字段的可能。 From 37b833c347b8d0e03802ad5c3e44845de43a54a1 Mon Sep 17 00:00:00 2001 From: cyc2018 Date: Tue, 31 Jul 2018 10:34:59 +0000 Subject: [PATCH 010/172] Updates SUMMARY.md Auto commit by GitBook Editor --- SUMMARY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SUMMARY.md b/SUMMARY.md index e60f018e..3ae54443 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -30,7 +30,7 @@ * [一致性](/notes/一致性.md) * [分布式问题分析](/notes/分布式问题分析.md) - +This file is used to generate gitbook catalogue. From 6cf167f64bac2e18ed31365bf2304113791941e3 Mon Sep 17 00:00:00 2001 From: cyc2018 Date: Tue, 31 Jul 2018 10:36:23 +0000 Subject: [PATCH 011/172] Updates SUMMARY.md Auto commit by GitBook Editor --- SUMMARY.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SUMMARY.md b/SUMMARY.md index 3ae54443..dde02f47 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -1,3 +1,5 @@ +This file is used to generate gitbook catalogue. + # Summary * 算法 @@ -30,7 +32,5 @@ * [一致性](/notes/一致性.md) * [分布式问题分析](/notes/分布式问题分析.md) -This file is used to generate gitbook catalogue. - From 529152680cfa299f2d2c3e651e4e6b96f4ec77e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B0=B8=E5=B7=9D?= Date: Tue, 31 Jul 2018 18:37:56 +0800 Subject: [PATCH 012/172] Update SUMMARY.md --- SUMMARY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SUMMARY.md b/SUMMARY.md index dde02f47..69b6103c 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -1,4 +1,4 @@ -This file is used to generate gitbook catalogue. +This file used to generate gitbook catalogue. # Summary From 7515d4a8df2e8f4c5860071098250f522581e680 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Tue, 31 Jul 2018 23:30:59 +0800 Subject: [PATCH 013/172] auto commit --- notes/Docker.md | 102 ++++++++++++++++++ ...011f3ef6-d824-4d43-8b2c-36dab8eaaa72-1.png | Bin 0 -> 32768 bytes pics/71f61bc3-582d-4c27-8bdd-dc7fb135bf8f.png | Bin 0 -> 24576 bytes pics/7e873b60-44dc-4911-b080-defd5b8f0b49.png | Bin 0 -> 17408 bytes pics/docker-filesystems-busyboxrw.png | Bin 0 -> 32768 bytes 5 files changed, 102 insertions(+) create mode 100644 notes/Docker.md create mode 100644 pics/011f3ef6-d824-4d43-8b2c-36dab8eaaa72-1.png create mode 100644 pics/71f61bc3-582d-4c27-8bdd-dc7fb135bf8f.png create mode 100644 pics/7e873b60-44dc-4911-b080-defd5b8f0b49.png create mode 100644 pics/docker-filesystems-busyboxrw.png diff --git a/notes/Docker.md b/notes/Docker.md new file mode 100644 index 00000000..f230f762 --- /dev/null +++ b/notes/Docker.md @@ -0,0 +1,102 @@ + +* [一、解决的问题](#一解决的问题) +* [二、与虚拟机的比较](#二与虚拟机的比较) +* [三、优势](#三优势) +* [四、使用场景](#四使用场景) +* [五、镜像与容器](#五镜像与容器) + + + +

+ +# 一、解决的问题 + +由于不同的机器有不同的操作系统,以及不同的库和组件,在将一个应用部署到多台机器上需要进行大量的环境配置操作。 + +Docker 主要解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立于宿主操作系统和其它隔离的进程。使用 Docker 可以不修改应用程序代码,不需要开发人员学习特定环境下的技术,就能够将现有的应用程序部署在其他机器中。 + +参考资料: + +- [DOCKER 101: INTRODUCTION TO DOCKER WEBINAR RECAP](https://blog.docker.com/2017/08/docker-101-introduction-docker-webinar-recap/) +- [Docker 入门教程](http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html) + +# 二、与虚拟机的比较 + +虚拟机也是一种虚拟化技术,它与 Docker 最大的区别在于它是通过模拟硬件,并在硬件上安装操作系统来实现。 + +

+ +

+ +## 启动速度 + +启动虚拟机需要启动虚拟机的操作系统,再启动相应的应用,这个过程会非常慢; + +而启动 Docker 相当于启动宿主操作系统上的一个进程。 + +## 占用资源 + +虚拟机是一个完整的操作系统,需要占用大量的磁盘空间、内存和 CPU,一台机器只能开启几十个的虚拟机。 + +而 Docker 只是一个进程,只需要将应用以及相应的组件打包,在运行时占用很少的资源,一台机器可以开启成千上万个 Docker。 + +参考资料: + +- [Docker container vs Virtual machine](http://www.bogotobogo.com/DevOps/Docker/Docker_Container_vs_Virtual_Machine.php) + +# 三、优势 + +除了启动速度快以及占用资源少之外,Docker 具有以下优势: + +## 更容易迁移 + +Docker 可以提供一致性的运行环境,可以在不同的机器上进行迁移,而不用担心环境变化导致无法运行。 + +## 更容易维护 + +Docker 使用分层技术和镜像,使得应用可以更容易复用重复部分。复用程度越高,维护工作也越容易。 + +## 更容易扩展 + +可以使用基础镜像进一步扩展得到新的镜像,并且官方和开源社区提供了大量的镜像,通过扩展这些镜像得到我们想要的镜像非常容易。 + +参考资料: + +- [为什么要使用 Docker?](https://yeasy.gitbooks.io/docker_practice/introduction/why.html) + +# 四、使用场景 + +## 持续集成 + +持续集成指的是频繁地将代码集成到主干上,这样能够更快地发现错误。 + +Docker 具有轻量级以及隔离性的特点,在将代码集成到一个 Docker 中不会对其它 Docker 产生影响。 + +## 提供可伸缩的云服务 + +根据应用的负载情况,可以很容易地增加或者减少 Docker。 + +## 搭建微服务架构 + +Docker 轻量级的特点使得它很适合用于部署、维护、组合微服务。 + +参考资料: + +- [What is Docker](https://www.docker.com/what-docker) +- [持续集成是什么?](http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html) + +# 五、镜像与容器 + +镜像是一种静态的结构,可以看成面向对象里面的类,而容器是镜像的一个实例。 + +镜像包含着容器运行时所需要的代码以及其它组件,它是一种分层结构,每一层都是只读的(read-only layers)。构建镜像时,会一层一层构建,前一层是后一层的基础。镜像的这种分层存储结构很适合镜像的复用以及定制。 + +在构建容器时,通过在镜像的基础上添加一个可写层(writable layer),用来保存着容器运行过程中的修改。 + +

+ +参考资料: + +- [How to Create Docker Container using Dockerfile](https://linoxide.com/linux-how-to/dockerfile-create-docker-container/) +- [理解 Docker(2):Docker 镜像](http://www.cnblogs.com/sammyliu/p/5877964.html) + diff --git a/pics/011f3ef6-d824-4d43-8b2c-36dab8eaaa72-1.png b/pics/011f3ef6-d824-4d43-8b2c-36dab8eaaa72-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0e56341c391316a7ce1b9e6c973ec469bdea1f43 GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/pics/7e873b60-44dc-4911-b080-defd5b8f0b49.png b/pics/7e873b60-44dc-4911-b080-defd5b8f0b49.png new file mode 100644 index 0000000000000000000000000000000000000000..66e26e808a4b282cbed5ecb69c1568ce4d90274a GIT binary patch literal 17408 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 literal 0 HcmV?d00001 diff --git a/pics/docker-filesystems-busyboxrw.png b/pics/docker-filesystems-busyboxrw.png new file mode 100644 index 0000000000000000000000000000000000000000..c12710afa6197895db15399046882676a86d3858 GIT binary patch literal 32768 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 z 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 Date: Tue, 31 Jul 2018 23:32:22 +0800 Subject: [PATCH 014/172] auto commit --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 5e49a332..e6c2eea2 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,10 @@ XSS、CSRF、SQL 注入、DDoS 一些 Git 的使用和概念。 +> [Docker](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Docker.md) + +Docker 基本原理。 + > [正则表达式](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/正则表达式.md) 参考 正则表达式必知必会。 From ec0f8feef7c9fb2e283921f6305c048915c8ba83 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Wed, 1 Aug 2018 00:14:36 +0800 Subject: [PATCH 015/172] auto commit --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index e6c2eea2..fe167481 100644 --- a/README.md +++ b/README.md @@ -143,6 +143,10 @@ Docker 基本原理。 参考 正则表达式必知必会。 +> [构建工具](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/构建工具.md) + +参考 正则表达式必知必会。 + ## 编码实践 :speak_no_evil: > [重构](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/重构.md) From 872c20998733315311b2cbbefbbee131f4c0ca07 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Wed, 1 Aug 2018 00:15:26 +0800 Subject: [PATCH 016/172] auto commit --- notes/构建工具.md | 147 ++++++++++++++++++ pics/897503d0-59e3-4752-903d-529fbdb72fee.jpg | Bin 0 -> 20480 bytes 2 files changed, 147 insertions(+) create mode 100644 notes/构建工具.md create mode 100644 pics/897503d0-59e3-4752-903d-529fbdb72fee.jpg diff --git a/notes/构建工具.md b/notes/构建工具.md new file mode 100644 index 00000000..ae1cac20 --- /dev/null +++ b/notes/构建工具.md @@ -0,0 +1,147 @@ + +* [一、什么是构建工具](#一什么是构建工具) +* [二、Java 主流构建工具](#二java-主流构建工具) +* [三、Maven](#三maven) + + + +# 一、什么是构建工具 + +构建工具用于构建项目的自动化工具,主要包含以下工作: + +## 依赖管理 + +不再需要手动导入 Jar 依赖包,并且可以自动处理依赖关系,也就是说某个依赖如果依赖于其它依赖,构建工具可以帮助我们自动处理这种依赖管理; + +## 运行单元测试 + +不再需要在项目代码中添加测试代码。 + +## 将源代码转化为可执行文件 + +包含预处理、编译、汇编、链接等步骤。 + +## 将可执行文件进行打包 + +不再需要使用 IDE 将应用程序打包成 Jar 包。 + +## 发布到生成服务器上 + +不再需要通过 FTP 将 Jar 包上传到服务器上。 + +参考资料: + +- [What is a build tool?](https://stackoverflow.com/questions/7249871/what-is-a-build-tool) + +# 二、Java 主流构建工具 + +主要包括 Ant、Maven 和 Gradle。 + +


+ +Gradle 和 Maven 的区别是,它使用 Groovy 这种特定领域语言(DSL)来管理构建脚本,而不再使用 XML 这种标记性语言。因为项目如果庞大的话,XML 很容易就变得臃肿。 + +例如要在项目中引入 Junit,Maven 的代码如下: + +```xml + + + 4.0.0 + + jizg.study.maven.hello + hello-first + 0.0.1-SNAPSHOT + + + + junit + junit + 4.10 + test + + + +``` + +而 Gradle 只需要几行代码: + +```java +dependencies { + testCompile "junit:junit:4.10" +} +``` + +参考资料: + +- [Java Build Tools Comparisons: Ant vs Maven vs Gradle](https://programmingmitra.blogspot.com/2016/05/java-build-tools-comparisons-ant-vs.html) +- [maven 2 gradle](http://sagioto.github.io/maven2gradle/) +- [新一代构建工具 gradle](https://www.imooc.com/learn/833) + +# 三、Maven + +## 概述 + +提供了项目对象模型(POM)文件来管理项目的构建。 + +## 仓库 + +仓库的搜索顺序为:本地仓库、中央仓库、远程仓库。 + +- 本地仓库用来存储项目的依赖库; +- 中央仓库是下载依赖库的默认位置; +- 远程仓库,因为并非所有的库存储在中央仓库,或者中央仓库访问速度很慢,远程仓库是中央仓库的补充。 + +## POM + +POM 代表项目对象模型,它是一个 XML 文件,保存在项目根目录的 pom.xml 文件中。 + +```xml + + junit + junit + 4.12 + test + +``` + +[groupId, artifactId, version, packaging, classfier] 称为一个项目的坐标,其中 groupId、artifactId、version 必须定义,packaging 可选(默认为 Jar),classfier 不能直接定义的,需要结合插件使用。 + +- groupId:项目组 Id,必须全球唯一; +- artifactId:项目 Id,即项目名; +- version:项目版本; +- packaging:项目打包方式。 + +## 依赖原则 + +### 依赖路径最短优先原则 + +```html +A -> B -> C -> X(1.0) +A -> D -> X(2.0) +``` +由于 X(2.0) 路径最短,所以使用 X(2.0)。 + +### 声明顺序优先原则 + +```html +A -> B -> X(1.0) +A -> C -> X(2.0) +``` + +在 POM 中最先声明的优先,上面的两个依赖如果先声明 B,那么最后使用 X(1.0)。 + +### 覆写优先原则 + +子 POM 内声明的依赖优先于父 POM 中声明的依赖。 + +## 解决依赖冲突 + +找到 Maven 加载的 Jar 包版本,使用 `mvn dependency:tree` 查看依赖树,根据依赖原则来调整依赖在 POM 文件的声明顺序。 + +参考资料: + +- [POM Reference](http://maven.apache.org/pom.html#Dependency_Version_Requirement_Specification) + + + diff --git a/pics/897503d0-59e3-4752-903d-529fbdb72fee.jpg b/pics/897503d0-59e3-4752-903d-529fbdb72fee.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e0935e5715e3a6e196b2046bcf0547d4800d4c3f GIT binary patch literal 20480 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 Date: Wed, 1 Aug 2018 00:16:52 +0800 Subject: [PATCH 017/172] auto commit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fe167481..c06de1d0 100644 --- a/README.md +++ b/README.md @@ -145,7 +145,7 @@ Docker 基本原理。 > [构建工具](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/构建工具.md) -参考 正则表达式必知必会。 +构建工具的基本概念、主流构建工具介绍 ## 编码实践 :speak_no_evil: From 5c6d152dba5f4cdcd78827db3605e206424b6713 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Wed, 1 Aug 2018 00:20:53 +0800 Subject: [PATCH 018/172] auto commit --- notes/构建工具.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/notes/构建工具.md b/notes/构建工具.md index ae1cac20..c0e4acd5 100644 --- a/notes/构建工具.md +++ b/notes/构建工具.md @@ -7,15 +7,15 @@ # 一、什么是构建工具 -构建工具用于构建项目的自动化工具,主要包含以下工作: +构建工具是用于构建项目的自动化工具,主要包含以下工作: ## 依赖管理 -不再需要手动导入 Jar 依赖包,并且可以自动处理依赖关系,也就是说某个依赖如果依赖于其它依赖,构建工具可以帮助我们自动处理这种依赖管理; +不再需要手动导入 Jar 依赖包,并且可以自动处理依赖关系,也就是说某个依赖如果依赖于其它依赖,构建工具可以帮助我们自动处理这种依赖管理。 ## 运行单元测试 -不再需要在项目代码中添加测试代码。 +不再需要在项目代码中添加测试代码,从而污染项目代码。 ## 将源代码转化为可执行文件 @@ -25,7 +25,7 @@ 不再需要使用 IDE 将应用程序打包成 Jar 包。 -## 发布到生成服务器上 +## 发布到生产服务器上 不再需要通过 FTP 将 Jar 包上传到服务器上。 From 428975aef07fa091034df033790aade5e189e78b Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 1 Aug 2018 00:56:41 +0800 Subject: [PATCH 019/172] =?UTF-8?q?Java=20=E5=87=BD=E6=95=B0=E9=87=8D?= =?UTF-8?q?=E5=86=99=E6=97=B6=EF=BC=8C=E5=AD=90=E7=B1=BB=E7=9A=84=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=80=BC=E7=B1=BB=E5=9E=8B=E8=A6=81=E7=AD=89=E4=BA=8E?= =?UTF-8?q?=E6=88=96=E8=80=85=E5=B0=8F=E4=BA=8E=E7=88=B6=E7=B1=BB=E7=9A=84?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/Java 基础.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/notes/Java 基础.md b/notes/Java 基础.md index 907eea00..564d643e 100644 --- a/notes/Java 基础.md +++ b/notes/Java 基础.md @@ -549,9 +549,9 @@ SuperExtendExample.func() ## 重写与重载 -- 重写(Override)存在于继承体系中,指子类实现了一个与父类在方法声明上完全相同的一个方法; +- 重写(Override)存在于继承体系中,指子类实现了一个与父类在方法声明上完全相同的一个方法,子类的返回值类型要等于或者小于父类的返回值; -- 重载(Overload)存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。应该注意的是,返回值不同,其它都相同不算是重载。 +- 重载(Overload)存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。应该注意的是,返回值不同,其它都相同不算是重载,但如果返回值类型等于或者小于父类的返回值则算是重写。 # 五、Object 通用方法 From 34f1d045617c9db1c36e71f1d44f268ae455252a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B0=B8=E5=B7=9D?= Date: Wed, 1 Aug 2018 09:53:19 +0800 Subject: [PATCH 020/172] Update README.md --- README.md | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index c06de1d0..fe49083c 100644 --- a/README.md +++ b/README.md @@ -175,7 +175,9 @@ Google 开源项目的代码风格规范。 笔记内容是笔者一个字一个字打上去的,难免会有一些笔误,如果发现笔误可直接在相应文档进行编辑修改。 -欢迎提交对本仓库的改进建议~ +如果想要提交一个仓库现在还没有的全新内容,可以先将相应的文档放到 other 目录下。 + +欢迎在 Issue 中提交对本仓库的改进建议~ **Authorization** @@ -183,21 +185,21 @@ Google 开源项目的代码风格规范。 转载使用请注明出处,谢谢! -**Uploading** - -笔者在本地使用为知笔记软件进行书写,为了方便将本地笔记内容上传到 Github 上,实现了一整套自动化上传方案,包括文本文件的导出、提取图片、Markdown 文档转换、Git 同步。 - -进行 Markdown 文档转换是因为 Github 使用的 GFM 不支持 MathJax 公式和 TOC 标记,所以需要替换 MathJax 公式为 CodeCogs 的云服务和重新生成 TOC 目录。 - -这里提供了笔者实现的 GFM 文档转换工具的链接:[GFM-Converter](https://github.com/CyC2018/GFM-Converter)。 - **Typesetting** 笔记内容按照 [中文文案排版指北](http://mazhuang.org/wiki/chinese-copywriting-guidelines/) 进行排版,以保证内容的可读性。 笔记不使用 `![]()` 这种方式来引用图片,而是用 `` 标签。一方面是为了能够控制图片以合适的大小显示,另一方面是因为 GFM 不支持 `
![]()
` 让图片居中显示,只能使用 `
` 达到居中的效果。 -这里提供了笔者实现的中英混排文档在线排版工具的链接:[Text-Typesetting](https://github.com/CyC2018/Markdown-Typesetting)。 +笔者将自己实现的文档排版功能提取出来,放在 Github Page 中,无需下载安装即可免费试用:[Text-Typesetting](https://github.com/CyC2018/Markdown-Typesetting)。 + +**Uploading** + +笔者在本地使用为知笔记软件进行书写,为了方便将本地笔记内容上传到 Github 上,实现了一整套自动化上传方案,包括文本文件的导出、提取图片、Markdown 文档转换、Git 同步。 + +进行 Markdown 文档转换是因为 Github 使用的 GFM 不支持 MathJax 公式和 TOC 标记,所以需要替换 MathJax 公式为 CodeCogs 的云服务和重新生成 TOC 目录。 + +笔者将自己实现文档转换功能提取出来,方便大家在需要将本地 Markdown 上传到 Github,或者制作项目 README 文档时生成目录时使用:[GFM-Converter](https://github.com/CyC2018/GFM-Converter)。 **Statement** From a255b9913befb2158d8310c116742158bb34cf32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B0=B8=E5=B7=9D?= Date: Wed, 1 Aug 2018 09:56:51 +0800 Subject: [PATCH 021/172] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fe49083c..294ac656 100644 --- a/README.md +++ b/README.md @@ -191,7 +191,7 @@ Google 开源项目的代码风格规范。 笔记不使用 `![]()` 这种方式来引用图片,而是用 `` 标签。一方面是为了能够控制图片以合适的大小显示,另一方面是因为 GFM 不支持 `
![]()
` 让图片居中显示,只能使用 `
` 达到居中的效果。 -笔者将自己实现的文档排版功能提取出来,放在 Github Page 中,无需下载安装即可免费试用:[Text-Typesetting](https://github.com/CyC2018/Markdown-Typesetting)。 +笔者将自己实现的文档排版功能提取出来,放在 Github Page 中,无需下载安装即可免费使用:[Text-Typesetting](https://github.com/CyC2018/Markdown-Typesetting)。 **Uploading** From fa13575bfb2e56f4479f9a5501d446a722e00d90 Mon Sep 17 00:00:00 2001 From: fighter Date: Wed, 1 Aug 2018 18:20:48 +0800 Subject: [PATCH 022/172] fix typos --- notes/MySQL.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/notes/MySQL.md b/notes/MySQL.md index d49fc952..0ab28ad8 100644 --- a/notes/MySQL.md +++ b/notes/MySQL.md @@ -95,15 +95,15 @@ VARCHAR 会保留字符串末尾的空格,而 CHAR 会删除。 ## 时间和日期 -MySQL 提供了两种相似的日期时间类型:DATATIME 和 TIMESTAMP。 +MySQL 提供了两种相似的日期时间类型:DATETIME 和 TIMESTAMP。 -### 1. DATATIME +### 1. DATETIME 能够保存从 1001 年到 9999 年的日期和时间,精度为秒,使用 8 字节的存储空间。 它与时区无关。 -默认情况下,MySQL 以一种可排序的、无歧义的格式显示 DATATIME 值,例如“2008-01-16 22:37:08”,这是 ANSI 标准定义的日期和时间表示方法。 +默认情况下,MySQL 以一种可排序的、无歧义的格式显示 DATETIME 值,例如“2008-01-16 22:37:08”,这是 ANSI 标准定义的日期和时间表示方法。 ### 2. TIMESTAMP @@ -329,7 +329,7 @@ Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explai 一个大查询如果一次性执行的话,可能一次锁住很多数据、占满整个事务日志、耗尽系统资源、阻塞很多小的但重要的查询。 ```sql -DELEFT FROM messages WHERE create < DATE_SUB(NOW(), INTERVAL 3 MONTH); +DELETE FROM messages WHERE create < DATE_SUB(NOW(), INTERVAL 3 MONTH); ``` ```sql @@ -351,7 +351,7 @@ do { - 查询本身效率也可能会有所提升。例如下面的例子中,使用 IN() 代替连接查询,可以让 MySQL 按照 ID 顺序进行查询,这可能比随机的连接要更高效。 ```sql -SELECT * FROM tab +SELECT * FROM tag JOIN tag_post ON tag_post.tag_id=tag.id JOIN post ON tag_post.post_id=post.id WHERE tag.tag='mysql'; From ef16ad9ed6152cbcf28a3636c846632ca104bd34 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Thu, 2 Aug 2018 00:24:52 +0800 Subject: [PATCH 023/172] auto commit --- notes/HTTP.md | 81 ++++++++++++++++++++++++++--------------- notes/Java 基础.md | 2 +- notes/MySQL.md | 6 +-- notes/计算机操作系统.md | 31 +++++++++++----- 4 files changed, 77 insertions(+), 43 deletions(-) diff --git a/notes/HTTP.md b/notes/HTTP.md index 7f54bd1a..243dc283 100644 --- a/notes/HTTP.md +++ b/notes/HTTP.md @@ -360,9 +360,9 @@ console.log(document.cookie); ### 5. Secure 和 HttpOnly -标记为 Secure 的 Cookie 只应通过被 HTTPS 协议加密过的请求发送给服务端。但即便设置了 Secure 标记,敏感信息也不应该通过 Cookie 传输,因为 Cookie 有其固有的不安全性,Secure 标记也无法提供确实的安全保障。 +标记为 Secure 的 Cookie 只能通过被 HTTPS 协议加密过的请求发送给服务端。但即便设置了 Secure 标记,敏感信息也不应该通过 Cookie 传输,因为 Cookie 有其固有的不安全性,Secure 标记也无法提供确实的安全保障。 -标记为 HttpOnly 的 Cookie 不能被 JavaScript 脚本调用。因为跨站脚本攻击 (XSS) 常常使用 JavaScript 的 `Document.cookie` API 窃取用户的 Cookie 信息,因此使用 HttpOnly 标记可以在一定程度上避免 XSS 攻击。 +标记为 HttpOnly 的 Cookie 不能被 JavaScript 脚本调用。跨站脚本攻击 (XSS) 常常使用 JavaScript 的 `Document.cookie` API 窃取用户的 Cookie 信息,因此使用 HttpOnly 标记可以在一定程度上避免 XSS 攻击。 ```html Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly @@ -382,15 +382,15 @@ Path 标识指定了主机下的哪些路径可以接受 Cookie(该 URL 路径 除了可以将用户信息通过 Cookie 存储在用户浏览器中,也可以利用 Session 存储在服务器端,存储在服务器端的信息更加安全。 -Session 可以存储在服务器上的文件、数据库或者内存中。也可以将 Session 存储在内存型数据库中,比如 Redis。 +Session 可以存储在服务器上的文件、数据库或者内存中。也可以将 Session 存储在内存型数据库中,比如 Redis,效率会更高。 使用 Session 维护用户登录的过程如下: - 用户进行登录时,用户提交包含用户名和密码的表单,放入 HTTP 请求报文中; - 服务器验证该用户名和密码; -- 如果正确则把用户信息存储到 Redis 中,它在 Redis 中的 ID 称为 Session ID; +- 如果正确则把用户信息存储到 Redis 中,它在 Redis 中的 Key 称为 Session ID; - 服务器返回的响应报文的 Set-Cookie 首部字段包含了这个 Session ID,客户端收到响应报文之后将该 Cookie 值存入浏览器中; -- 客户端之后对同一个服务器进行请求时会包含该 Cookie 值,服务器收到之后提取出 Session ID,从 Redis 中取出用户信息,继续之后的业务操作。 +- 客户端之后对同一个服务器进行请求时会包含该 Cookie 值,服务器收到之后提取出 Session ID,从 Redis 中取出用户信息,继续之前的业务操作。 应该注意 Session ID 的安全性问题,不能让它被恶意攻击者轻易获取,那么就不能产生一个容易被猜到的 Session ID 值。此外,还需要经常重新生成 Session ID。在对安全性要求极高的场景下,例如转账等操作,除了使用 Session 管理用户状态之外,还需要对用户进行重新验证,比如重新输入密码,或者使用短信验证码等方式。 @@ -409,7 +409,7 @@ Session 可以存储在服务器上的文件、数据库或者内存中。也可 ### 1. 优点 - 缓解服务器压力; -- 降低客户端获取资源的延迟(缓存资源比服务器上的资源离客户端更近)。 +- 降低客户端获取资源的延迟:缓存通常位于内存中,读取缓存的速度更快。并且缓存在地理位置上也有可能比源服务器来得近,例如浏览器缓存。 ### 2. 实现方法 @@ -460,7 +460,10 @@ max-age 指令出现在响应报文中,表示缓存资源在缓存服务器中 Cache-Control: max-age=31536000 ``` -Expires 首部字段也可以用于告知缓存服务器该资源什么时候会过期。在 HTTP/1.1 中,会优先处理 Cache-Control : max-age 指令;而在 HTTP/1.0 中,Cache-Control : max-age 指令会被忽略掉。 +Expires 首部字段也可以用于告知缓存服务器该资源什么时候会过期。 + +- 在 HTTP/1.1 中,会优先处理 max-age 指令; +- 在 HTTP/1.0 中,max-age 指令会被忽略掉。 ```html Expires: Wed, 04 Jul 2012 08:26:05 GMT @@ -496,13 +499,16 @@ If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT ### 1. 短连接与长连接 -当浏览器访问一个包含多张图片的 HTML 页面时,除了请求访问 HTML 页面资源,还会请求图片资源,如果每进行一次 HTTP 通信就要断开一次 TCP 连接,连接建立和断开的开销会很大。长连接只需要建立一次 TCP 连接就能进行多次 HTTP 通信。 +当浏览器访问一个包含多张图片的 HTML 页面时,除了请求访问 HTML 页面资源,还会请求图片资源。如果每进行一次 HTTP 通信就要断开一次 TCP 连接,连接建立和断开的开销会很大。 -从 HTTP/1.1 开始默认是长连接的,如果要断开连接,需要由客户端或者服务器端提出断开,使用 Connection : close;而在 HTTP/1.1 之前默认是短连接的,如果需要长连接,则使用 Connection : Keep-Alive。 +长连接只需要建立一次 TCP 连接就能进行多次 HTTP 通信。 + +- 从 HTTP/1.1 开始默认是长连接的,如果要断开连接,需要由客户端或者服务器端提出断开,使用 `Connection : close`; +- 在 HTTP/1.1 之前默认是短连接的,如果需要使用长连接,则使用 `Connection : Keep-Alive`。 ### 2. 流水线 -默认情况下,HTTP 请求是按顺序发出的,下一个请求只有在当前请求收到相应之后才会被发出。由于会受到网络延迟和带宽的限制,在下一个请求被发送到服务器之前,可能需要等待很长时间。 +默认情况下,HTTP 请求是按顺序发出的,下一个请求只有在当前请求收到响应之后才会被发出。由于会受到网络延迟和带宽的限制,在下一个请求被发送到服务器之前,可能需要等待很长时间。 流水线是在同一条长连接上发出连续的请求,而不用等待响应返回,这样可以避免连接延迟。 @@ -512,17 +518,17 @@ If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT ### 1. 类型 -**(一)服务端驱动型内容协商** +**(一)服务端驱动型** 客户端设置特定的 HTTP 首部字段,例如 Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Languag,服务器根据这些字段返回特定的资源。 它存在以下问题: - 服务器很难知道客户端浏览器的全部信息; -- 客户端提供的信息相当冗长(HTTP/2 协议的首部压缩机制缓解了这个问题),并且存在隐私风险(HTTP 指纹识别技术)。 +- 客户端提供的信息相当冗长(HTTP/2 协议的首部压缩机制缓解了这个问题),并且存在隐私风险(HTTP 指纹识别技术); - 给定的资源需要返回不同的展现形式,共享缓存的效率会降低,而服务器端的实现会越来越复杂。 -**(二)代理驱动型协商** +**(二)代理驱动型** 服务器返回 300 Multiple Choices 或者 406 Not Acceptable,客户端从中选出最合适的那个资源。 @@ -538,9 +544,11 @@ Vary: Accept-Language ## 内容编码 -内容编码将实体主体进行压缩,从而减少传输的数据量。常用的内容编码有:gzip、compress、deflate、identity。 +内容编码将实体主体进行压缩,从而减少传输的数据量。 -浏览器发送 Accept-Encoding 首部,其中包含有它所支持的压缩算法,以及各自的优先级,服务器则从中选择一种,使用该算法对响应的消息主体进行压缩,并且发送 Content-Encoding 首部来告知浏览器它选择了哪一种算法。由于该内容协商过程是基于编码类型来选择资源的展现形式的,在响应中,Vary 首部中至少要包含 Content-Encoding,这样的话,缓存服务器就可以对资源的不同展现形式进行缓存。 +常用的内容编码有:gzip、compress、deflate、identity。 + +浏览器发送 Accept-Encoding 首部,其中包含有它所支持的压缩算法,以及各自的优先级。服务器则从中选择一种,使用该算法对响应的消息主体进行压缩,并且发送 Content-Encoding 首部来告知浏览器它选择了哪一种算法。由于该内容协商过程是基于编码类型来选择资源的展现形式的,在响应的 Vary 首部至少要包含 Content-Encoding。 ## 范围请求 @@ -622,10 +630,14 @@ HTTP/1.1 使用虚拟主机技术,使得一台服务器拥有多个域名, - 网络访问控制 - 访问日志记录 -代理服务器分为正向代理和反向代理两种,用户察觉得到正向代理的存在;而反向代理一般位于内部网络中,用户察觉不到。 +代理服务器分为正向代理和反向代理两种: + +- 用户察觉得到正向代理的存在。

+- 而反向代理一般位于内部网络中,用户察觉不到。 +

### 2. 网关 @@ -634,7 +646,7 @@ HTTP/1.1 使用虚拟主机技术,使得一台服务器拥有多个域名, ### 3. 隧道 -使用 SSL 等加密手段,为客户端和服务器之间建立一条安全的通信线路。 +使用 SSL 等加密手段,在客户端和服务器之间建立一条安全的通信线路。 # 六、HTTPs @@ -644,7 +656,7 @@ HTTP 有以下安全性问题: - 不验证通信方的身份,通信方的身份有可能遭遇伪装; - 无法证明报文的完整性,报文有可能遭篡改。 -HTTPs 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信。也就是说 HTTPs 使用了隧道进行通信。 +HTTPs 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是说 HTTPs 使用了隧道进行通信。 通过使用 SSL,HTTPs 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。 @@ -727,7 +739,11 @@ HTTP/2.0 将报文分成 HEADERS 帧和 DATA 帧,它们都是二进制格式

-在通信过程中,只会有一个 TCP 连接存在,它承载了任意数量的双向数据流(Stream)。一个数据流都有一个唯一标识符和可选的优先级信息,用于承载双向信息。消息(Message)是与逻辑请求或响应消息对应的完整的一系列帧。帧(Fram)是最小的通信单位,来自不同数据流的帧可以交错发送,然后再根据每个帧头的数据流标识符重新组装。 +在通信过程中,只会有一个 TCP 连接存在,它承载了任意数量的双向数据流(Stream)。 + +- 一个数据流都有一个唯一标识符和可选的优先级信息,用于承载双向信息。 +- 消息(Message)是与逻辑请求或响应消息对应的完整的一系列帧。 +- 帧(Fram)是最小的通信单位,来自不同数据流的帧可以交错发送,然后再根据每个帧头的数据流标识符重新组装。

@@ -739,7 +755,11 @@ HTTP/2.0 在客户端请求一个资源时,会把相关的资源一起发送 ## 首部压缩 -HTTP/1.1 的首部带有大量信息,而且每次都要重复发送。HTTP/2.0 要求客户端和服务器同时维护和更新一个包含之前见过的首部字段表,从而避免了重复传输。不仅如此,HTTP/2.0 也使用 Huffman 编码对首部字段进行压缩。 +HTTP/1.1 的首部带有大量信息,而且每次都要重复发送。 + +HTTP/2.0 要求客户端和服务器同时维护和更新一个包含之前见过的首部字段表,从而避免了重复传输。 + +不仅如此,HTTP/2.0 也使用 Huffman 编码对首部字段进行压缩。

@@ -751,7 +771,9 @@ GET 用于获取资源,而 POST 用于传输实体主体。 ## 参数 -GET 和 POST 的请求都能使用额外的参数,但是 GET 的参数是以查询字符串出现在 URL 中,而 POST 的参数存储在实体主体中。 +GET 和 POST 的请求都能使用额外的参数,但是 GET 的参数是以查询字符串出现在 URL 中,而 POST 的参数存储在实体主体中。不能因为 POST 参数存储在实体主体中就认为它的安全性更高,因为照样可以通过一些抓包工具(Fiddler)查看。 + +因为 URL 只支持 ASCII 码,因此 GET 的参数中如果存在中文等字符就需要先进行编码。例如 `中文` 会转换为 `%E4%B8%AD%E6%96%87`,而空格会转换为 `%20`。POST 参考支持标准字符集。 ``` GET /test/demo_form.asp?name1=value1&name2=value2 HTTP/1.1 @@ -763,10 +785,6 @@ Host: w3schools.com name1=value1&name2=value2 ``` -不能因为 POST 参数存储在实体主体中就认为它的安全性更高,因为照样可以通过一些抓包工具(Fiddler)查看。 - -因为 URL 只支持 ASCII 码,因此 GET 的参数中如果存在中文等字符就需要先进行编码,例如`中文`会转换为`%E4%B8%AD%E6%96%87`,而空格会转换为`%20`。POST 支持标准字符集。 - ## 安全 安全的 HTTP 方法不会改变服务器状态,也就是说它只是可读的。 @@ -779,9 +797,13 @@ GET 方法是安全的,而 POST 却不是,因为 POST 的目的是传送实 ## 幂等性 -幂等的 HTTP 方法,同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。换句话说就是,幂等方法不应该具有副作用(统计用途除外)。在正确实现的条件下,GET,HEAD,PUT 和 DELETE 等方法都是幂等的,而 POST 方法不是。所有的安全方法也都是幂等的。 +幂等的 HTTP 方法,同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。换句话说就是,幂等方法不应该具有副作用(统计用途除外)。 -GET /pageX HTTP/1.1 是幂等的。连续调用多次,客户端接收到的结果都是一样的: +所有的安全方法也都是幂等的。 + +在正确实现的条件下,GET,HEAD,PUT 和 DELETE 等方法都是幂等的,而 POST 方法不是。 + +GET /pageX HTTP/1.1 是幂等的,连续调用多次,客户端接收到的结果都是一样的: ``` GET /pageX HTTP/1.1 @@ -790,7 +812,7 @@ GET /pageX HTTP/1.1 GET /pageX HTTP/1.1 ``` -POST /add_row HTTP/1.1 不是幂等的。如果调用多次,就会增加多行记录: +POST /add_row HTTP/1.1 不是幂等的,如果调用多次,就会增加多行记录: ``` POST /add_row HTTP/1.1 -> Adds a 1nd row @@ -820,7 +842,8 @@ DELETE /idX/delete HTTP/1.1 -> Returns 404 > XMLHttpRequest 是一个 API,它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了一个通过 URL 来获取数据的简单方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户。XMLHttpRequest 在 AJAX 中被大量使用。 -在使用 XMLHttpRequest 的 POST 方法时,浏览器会先发送 Header 再发送 Data。但并不是所有浏览器会这么做,例如火狐就不会。而 GET 方法 Header 和 Data 会一起发送。 +- 在使用 XMLHttpRequest 的 POST 方法时,浏览器会先发送 Header 再发送 Data。但并不是所有浏览器会这么做,例如火狐就不会。 +- 而 GET 方法 Header 和 Data 会一起发送。 # 九、HTTP/1.0 与 HTTP/1.1 的区别 diff --git a/notes/Java 基础.md b/notes/Java 基础.md index 907eea00..cda00ea0 100644 --- a/notes/Java 基础.md +++ b/notes/Java 基础.md @@ -549,7 +549,7 @@ SuperExtendExample.func() ## 重写与重载 -- 重写(Override)存在于继承体系中,指子类实现了一个与父类在方法声明上完全相同的一个方法; +- 重写(Override)存在于继承体系中,指子类实现了一个与父类在方法声明上完全相同的一个方法,子类的返回值类型要等于或者小于父类的返回值; - 重载(Overload)存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。应该注意的是,返回值不同,其它都相同不算是重载。 diff --git a/notes/MySQL.md b/notes/MySQL.md index d49fc952..f6aa853b 100644 --- a/notes/MySQL.md +++ b/notes/MySQL.md @@ -95,15 +95,15 @@ VARCHAR 会保留字符串末尾的空格,而 CHAR 会删除。 ## 时间和日期 -MySQL 提供了两种相似的日期时间类型:DATATIME 和 TIMESTAMP。 +MySQL 提供了两种相似的日期时间类型:DATETIME 和 TIMESTAMP。 -### 1. DATATIME +### 1. DATETIME 能够保存从 1001 年到 9999 年的日期和时间,精度为秒,使用 8 字节的存储空间。 它与时区无关。 -默认情况下,MySQL 以一种可排序的、无歧义的格式显示 DATATIME 值,例如“2008-01-16 22:37:08”,这是 ANSI 标准定义的日期和时间表示方法。 +默认情况下,MySQL 以一种可排序的、无歧义的格式显示 DATETIME 值,例如“2008-01-16 22:37:08”,这是 ANSI 标准定义的日期和时间表示方法。 ### 2. TIMESTAMP diff --git a/notes/计算机操作系统.md b/notes/计算机操作系统.md index 52c74dd7..5c9f63a7 100644 --- a/notes/计算机操作系统.md +++ b/notes/计算机操作系统.md @@ -1,7 +1,7 @@ * [一、概述](#一概述) - * [操作系统基本特征](#操作系统基本特征) - * [操作系统基本功能](#操作系统基本功能) + * [基本特征](#基本特征) + * [基本功能](#基本功能) * [系统调用](#系统调用) * [大内核和微内核](#大内核和微内核) * [中断分类](#中断分类) @@ -35,7 +35,7 @@ # 一、概述 -## 操作系统基本特征 +## 基本特征 ### 1. 并发 @@ -63,7 +63,7 @@ 异步指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。 -## 操作系统基本功能 +## 基本功能 ### 1. 进程管理 @@ -152,19 +152,27 @@ Linux 的系统调用主要有以下这些: 一个进程中可以有多个线程,它们共享进程资源。 +QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。 +

### 3. 区别 -- 拥有资源:进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。 +(一)拥有资源 -- 调度:线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换。 +进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。 -- 系统开销:由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。 +(二)调度 -- 通信方面:进程间通信 (IPC) 需要进程同步和互斥手段的辅助,以保证数据的一致性。而线程间可以通过直接读/写同一进程中的数据段(如全局变量)来进行通信。 +线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换。 -举例:QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。 +(三)系统开销 + +由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。 + +(四)通信方面 + +进程间通信 (IPC) 需要进程同步和互斥手段的辅助,以保证数据的一致性。而线程间可以通过直接读/写同一进程中的数据段(如全局变量)来进行通信。 ## 进程状态的切换 @@ -211,7 +219,10 @@ Linux 的系统调用主要有以下这些: 将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 时间分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 时间分配给队首的进程。 -时间片轮转算法的效率和时间片的大小有很大关系。因为进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,会导致进程切换得太频繁,在进程切换上就会花过多时间。 +时间片轮转算法的效率和时间片的大小有很大关系: + +- 因为进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,会导致进程切换得太频繁,在进程切换上就会花过多时间。 +- 而如果时间片过长,那么实时性就不能得到保证。

From 4ab241fd8175ec4105727c790f01d4a37f6f440c Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Thu, 2 Aug 2018 00:25:48 +0800 Subject: [PATCH 024/172] auto commit --- notes/Java 基础.md | 2 +- notes/MySQL.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/notes/Java 基础.md b/notes/Java 基础.md index 564d643e..cda00ea0 100644 --- a/notes/Java 基础.md +++ b/notes/Java 基础.md @@ -551,7 +551,7 @@ SuperExtendExample.func() - 重写(Override)存在于继承体系中,指子类实现了一个与父类在方法声明上完全相同的一个方法,子类的返回值类型要等于或者小于父类的返回值; -- 重载(Overload)存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。应该注意的是,返回值不同,其它都相同不算是重载,但如果返回值类型等于或者小于父类的返回值则算是重写。 +- 重载(Overload)存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。应该注意的是,返回值不同,其它都相同不算是重载。 # 五、Object 通用方法 diff --git a/notes/MySQL.md b/notes/MySQL.md index 0ab28ad8..f6aa853b 100644 --- a/notes/MySQL.md +++ b/notes/MySQL.md @@ -329,7 +329,7 @@ Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explai 一个大查询如果一次性执行的话,可能一次锁住很多数据、占满整个事务日志、耗尽系统资源、阻塞很多小的但重要的查询。 ```sql -DELETE FROM messages WHERE create < DATE_SUB(NOW(), INTERVAL 3 MONTH); +DELEFT FROM messages WHERE create < DATE_SUB(NOW(), INTERVAL 3 MONTH); ``` ```sql @@ -351,7 +351,7 @@ do { - 查询本身效率也可能会有所提升。例如下面的例子中,使用 IN() 代替连接查询,可以让 MySQL 按照 ID 顺序进行查询,这可能比随机的连接要更高效。 ```sql -SELECT * FROM tag +SELECT * FROM tab JOIN tag_post ON tag_post.tag_id=tag.id JOIN post ON tag_post.post_id=post.id WHERE tag.tag='mysql'; From 2abde21661dcefbddebdfe96719d7cb12d658bf2 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 2 Aug 2018 08:03:42 +0800 Subject: [PATCH 025/172] =?UTF-8?q?Update=20Java=20=E8=99=9A=E6=8B=9F?= =?UTF-8?q?=E6=9C=BA.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/Java 虚拟机.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/notes/Java 虚拟机.md b/notes/Java 虚拟机.md index 3bb9f289..d67ef5bd 100644 --- a/notes/Java 虚拟机.md +++ b/notes/Java 虚拟机.md @@ -102,7 +102,7 @@ Class 文件中的常量池(编译器生成的各种字面量和符号引用 ## 直接内存 -在 JDK 1.4 中新加入了 NIO 类,它可以使用 Native 函数库直接分配堆外内存,然后通过一个存储在 Java 堆里的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在 Java 堆和 Native 堆中来回复制数据。 +在 JDK 1.4 中新加入了 NIO 类,它可以使用 Native 函数库直接分配堆外内存,然后通过一个存储在 Java 堆里的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因此避免了在 Java 堆和 Native 堆中来回复制数据。 # 二、垃圾收集 @@ -146,7 +146,7 @@ Java 虚拟机使用该算法来判断对象是否可被回收,在 Java 中 GC ### 3. 引用类型 -无论是通过引用计算算法判断对象的引用数量,还是通过可达性分析算法判断对象是否可达,判定对象是否可被回收都与引用有关。 +无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象是否可达,判定对象是否可被回收都与引用有关。 Java 具有四种强度不同的引用类型。 @@ -256,7 +256,7 @@ finalize() 类似 C++ 的析构函数,用来做关闭外部资源等工作。 一般将 Java 堆分为新生代和老年代。 - 新生代使用:复制算法 -- 老年代使用:标记 - 清理 或者 标记 - 整理 算法 +- 老年代使用:标记 - 清除 或者 标记 - 整理 算法 ## 垃圾收集器 From ef9dc26fb6af0862f532d3efc26915b2c6c4f4be Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 2 Aug 2018 08:10:35 +0800 Subject: [PATCH 026/172] =?UTF-8?q?Update=20Java=20=E8=99=9A=E6=8B=9F?= =?UTF-8?q?=E6=9C=BA.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/Java 虚拟机.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Java 虚拟机.md b/notes/Java 虚拟机.md index d67ef5bd..906f4ef6 100644 --- a/notes/Java 虚拟机.md +++ b/notes/Java 虚拟机.md @@ -102,7 +102,7 @@ Class 文件中的常量池(编译器生成的各种字面量和符号引用 ## 直接内存 -在 JDK 1.4 中新加入了 NIO 类,它可以使用 Native 函数库直接分配堆外内存,然后通过一个存储在 Java 堆里的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因此避免了在 Java 堆和 Native 堆中来回复制数据。 +在 JDK 1.4 中新加入了 NIO 类,它可以使用 Native 函数库直接分配堆外内存,然后通过一个存储在 Java 堆里的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为其避免了在 Java 堆和 Native 堆中来回复制数据。 # 二、垃圾收集 From 726366858b1c19bf495e95d2b8d092fdd654e0d6 Mon Sep 17 00:00:00 2001 From: luocaodan Date: Thu, 2 Aug 2018 18:28:38 +0800 Subject: [PATCH 027/172] =?UTF-8?q?Update=20Java=20=E5=B9=B6=E5=8F=91.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/Java 并发.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Java 并发.md b/notes/Java 并发.md index ab3528f2..b704f70c 100644 --- a/notes/Java 并发.md +++ b/notes/Java 并发.md @@ -1419,7 +1419,7 @@ public final int incrementAndGet() { } ``` -以下代码是 getAndAddInt() 源码,var1 指示内存地址,var2 指示旧值,var4 指示操作需要加的数值,这里为 1。通过 getIntVolatile(var1, var2) 得到旧的预期值,通过调用 compareAndSwapInt() 来进行 CAS 比较,如果 var2==var5,那么就更新内存地址为 var1 的变量为 var5+var4。可以看到 getAndAddInt() 在一个循环中进行,发生冲突的做法是不断的进行重试。 +以下代码是 getAndAddInt() 源码,var1 指示对象内存地址,var2 指示该字段相对对象内存地址的偏移,var4 指示操作需要加的数值,这里为 1。通过 getIntVolatile(var1, var2) 得到旧的预期值,通过调用 compareAndSwapInt() 来进行 CAS 比较,如果 该字段内存地址中的值==var5,那么就更新内存地址为 var1+var2 的变量为 var5+var4。可以看到 getAndAddInt() 在一个循环中进行,发生冲突的做法是不断的进行重试。 ```java public final int getAndAddInt(Object var1, long var2, int var4) { From 1d99676008f1f907397315a3fa9ef1a6eb01257d Mon Sep 17 00:00:00 2001 From: Zoctan <752481828@qq.com> Date: Thu, 2 Aug 2018 22:40:04 +0800 Subject: [PATCH 028/172] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20=E2=80=9D=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E4=BC=A0=E9=80=92=E2=80=9C=20=E4=B8=AD=E4=B8=80?= =?UTF-8?q?=E7=82=B9=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/Java 基础.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/notes/Java 基础.md b/notes/Java 基础.md index cda00ea0..675b0918 100644 --- a/notes/Java 基础.md +++ b/notes/Java 基础.md @@ -223,7 +223,7 @@ System.out.println(s4 == s5); // true Java 的参数是以值传递的形式传入方法中,而不是引用传递。 -Dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。 +Dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。而在方法中改变对象的成员变量值也会使原对象的成员变量发生变化,因为是改变同一个地址指向的内容。 ```java public class Dog { @@ -236,6 +236,10 @@ public class Dog { String getName() { return name; } + + void setName(String name) { + this.name = name; + } String getObjectAddress() { return super.toString(); @@ -251,6 +255,9 @@ public class PassByValueExample { func(dog); System.out.println(dog.getObjectAddress()); // Dog@4554617c System.out.println(dog.getName()); // A + func2(dog); + System.out.println(dog.getObjectAddress()); // Dog@4554617c + System.out.println(dog.getName()); // C } private static void func(Dog dog) { @@ -259,6 +266,13 @@ public class PassByValueExample { System.out.println(dog.getObjectAddress()); // Dog@74a14482 System.out.println(dog.getName()); // B } + + private static void func2(Dog dog) { + System.out.println(dog.getObjectAddress()); // Dog@4554617c + dog.setName("C"); + System.out.println(dog.getObjectAddress()); // Dog@4554617c + System.out.println(dog.getName()); // C + } } ``` From fd0e8c11a843e112518a85969cce083a8a233a84 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Thu, 2 Aug 2018 23:03:37 +0800 Subject: [PATCH 029/172] add group --- README.md | 2 +- other/Group.md | 9 +++++++++ other/group.jpg | Bin 0 -> 114283 bytes 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 other/Group.md create mode 100644 other/group.jpg diff --git a/README.md b/README.md index 294ac656..a2816aeb 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@
diff --git a/other/Group.md b/other/Group.md new file mode 100644 index 00000000..59b35913 --- /dev/null +++ b/other/Group.md @@ -0,0 +1,9 @@ +创建交流群的主要目的是为了为大家提供一个交流平台,方便大家在学习的过程中互相讨论。 + +这个交流群不是一个笔者的问题回答群,我更希望大家能够愿意积极回答,我相信提问和回答的过程都可以提升自己对知识的掌握程度。 + +至于交流群和 Issue 有什么区别,主要是两方面:一是交流群实时性高一些,二是交流群会更活跃一些。另外,Issue 主要是用来发布一些项目中的错误和一些改进建议,当然也可以发布一些可以讨论的问题,交流群可以讨论的内容比较广,例如在阅读本项目过程中不理解的地方可以在交流群中寻求别人的帮助、新技术的讨论、招聘信息、学习和工作的感受等等。 + +交流群不讨论政治,不讨论有争议性的话题,不发表仇视言论,不传播谣言,不发布广告(招聘信息之类的可以)。 + +

diff --git a/other/group.jpg b/other/group.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cbc68eb523bc7a466b58c2130065abdb8faf9388 GIT binary patch literal 114283 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%0A~;-3FYl(^4L+xSclz4?ogH^B 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 Date: Thu, 2 Aug 2018 23:04:38 +0800 Subject: [PATCH 030/172] fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a2816aeb..c015a100 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ From 5fefd1a67f3b1d19d10b74d40a8ba379884a799f Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Thu, 2 Aug 2018 23:05:50 +0800 Subject: [PATCH 031/172] fix --- other/Group.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/other/Group.md b/other/Group.md index 59b35913..388b0ac6 100644 --- a/other/Group.md +++ b/other/Group.md @@ -6,4 +6,4 @@ 交流群不讨论政治,不讨论有争议性的话题,不发表仇视言论,不传播谣言,不发布广告(招聘信息之类的可以)。 -

+

From 77f2be3635e017caf238bbbdc53093fde762b813 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B0=B8=E5=B7=9D?= <1029579233@qq.com> Date: Thu, 2 Aug 2018 23:06:41 +0800 Subject: [PATCH 032/172] fix --- other/Group.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/other/Group.md b/other/Group.md index 388b0ac6..15d2b7d0 100644 --- a/other/Group.md +++ b/other/Group.md @@ -6,4 +6,4 @@ 交流群不讨论政治,不讨论有争议性的话题,不发表仇视言论,不传播谣言,不发布广告(招聘信息之类的可以)。 -

+

From 274026e13816b13e067d859d0a9c55071d30b7e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B0=B8=E5=B7=9D?= <1029579233@qq.com> Date: Thu, 2 Aug 2018 23:07:16 +0800 Subject: [PATCH 033/172] fix --- other/Group.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/other/Group.md b/other/Group.md index 15d2b7d0..ae3a89f6 100644 --- a/other/Group.md +++ b/other/Group.md @@ -6,4 +6,5 @@ 交流群不讨论政治,不讨论有争议性的话题,不发表仇视言论,不传播谣言,不发布广告(招聘信息之类的可以)。 -

+ +

From d0fa9aff51e474dab7db2fb64c3c841c40d40a02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B0=B8=E5=B7=9D?= <1029579233@qq.com> Date: Thu, 2 Aug 2018 23:10:09 +0800 Subject: [PATCH 034/172] fix --- other/Group.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/other/Group.md b/other/Group.md index ae3a89f6..5e7bbc90 100644 --- a/other/Group.md +++ b/other/Group.md @@ -2,9 +2,10 @@ 这个交流群不是一个笔者的问题回答群,我更希望大家能够愿意积极回答,我相信提问和回答的过程都可以提升自己对知识的掌握程度。 +因为笔者白天要上班,因此不能及时进行回复,大部分时间会处于潜水状态。 + 至于交流群和 Issue 有什么区别,主要是两方面:一是交流群实时性高一些,二是交流群会更活跃一些。另外,Issue 主要是用来发布一些项目中的错误和一些改进建议,当然也可以发布一些可以讨论的问题,交流群可以讨论的内容比较广,例如在阅读本项目过程中不理解的地方可以在交流群中寻求别人的帮助、新技术的讨论、招聘信息、学习和工作的感受等等。 交流群不讨论政治,不讨论有争议性的话题,不发表仇视言论,不传播谣言,不发布广告(招聘信息之类的可以)。 -

From 480a8070cd9daf6954749c7de45fbb9846874337 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Fri, 3 Aug 2018 00:12:55 +0800 Subject: [PATCH 035/172] auto commit --- notes/Java 基础.md | 16 +----------- notes/Java 并发.md | 2 +- notes/Java 虚拟机.md | 6 ++--- notes/Linux.md | 58 ++++++++++++++--------------------------- notes/MySQL.md | 47 +++++++++++---------------------- notes/Redis.md | 3 +++ notes/计算机操作系统.md | 34 ++++++++++++++++-------- 7 files changed, 66 insertions(+), 100 deletions(-) diff --git a/notes/Java 基础.md b/notes/Java 基础.md index 675b0918..0bce5622 100644 --- a/notes/Java 基础.md +++ b/notes/Java 基础.md @@ -223,7 +223,7 @@ System.out.println(s4 == s5); // true Java 的参数是以值传递的形式传入方法中,而不是引用传递。 -Dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。而在方法中改变对象的成员变量值也会使原对象的成员变量发生变化,因为是改变同一个地址指向的内容。 +以下代码中 Dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。但是如果在方法中改变对象的字段值会改变原对象该字段值,因为改变的是同一个地址指向的内容。 ```java public class Dog { @@ -236,10 +236,6 @@ public class Dog { String getName() { return name; } - - void setName(String name) { - this.name = name; - } String getObjectAddress() { return super.toString(); @@ -255,9 +251,6 @@ public class PassByValueExample { func(dog); System.out.println(dog.getObjectAddress()); // Dog@4554617c System.out.println(dog.getName()); // A - func2(dog); - System.out.println(dog.getObjectAddress()); // Dog@4554617c - System.out.println(dog.getName()); // C } private static void func(Dog dog) { @@ -266,13 +259,6 @@ public class PassByValueExample { System.out.println(dog.getObjectAddress()); // Dog@74a14482 System.out.println(dog.getName()); // B } - - private static void func2(Dog dog) { - System.out.println(dog.getObjectAddress()); // Dog@4554617c - dog.setName("C"); - System.out.println(dog.getObjectAddress()); // Dog@4554617c - System.out.println(dog.getName()); // C - } } ``` diff --git a/notes/Java 并发.md b/notes/Java 并发.md index b704f70c..627b824f 100644 --- a/notes/Java 并发.md +++ b/notes/Java 并发.md @@ -1419,7 +1419,7 @@ public final int incrementAndGet() { } ``` -以下代码是 getAndAddInt() 源码,var1 指示对象内存地址,var2 指示该字段相对对象内存地址的偏移,var4 指示操作需要加的数值,这里为 1。通过 getIntVolatile(var1, var2) 得到旧的预期值,通过调用 compareAndSwapInt() 来进行 CAS 比较,如果 该字段内存地址中的值==var5,那么就更新内存地址为 var1+var2 的变量为 var5+var4。可以看到 getAndAddInt() 在一个循环中进行,发生冲突的做法是不断的进行重试。 +以下代码是 getAndAddInt() 源码,var1 指示对象内存地址,var2 指示该字段相对对象内存地址的偏移,var4 指示操作需要加的数值,这里为 1。通过 getIntVolatile(var1, var2) 得到旧的预期值,通过调用 compareAndSwapInt() 来进行 CAS 比较,如果 该字段内存地址中的值 ==var5,那么就更新内存地址为 var1+var2 的变量为 var5+var4。可以看到 getAndAddInt() 在一个循环中进行,发生冲突的做法是不断的进行重试。 ```java public final int getAndAddInt(Object var1, long var2, int var4) { diff --git a/notes/Java 虚拟机.md b/notes/Java 虚拟机.md index 906f4ef6..3bb9f289 100644 --- a/notes/Java 虚拟机.md +++ b/notes/Java 虚拟机.md @@ -102,7 +102,7 @@ Class 文件中的常量池(编译器生成的各种字面量和符号引用 ## 直接内存 -在 JDK 1.4 中新加入了 NIO 类,它可以使用 Native 函数库直接分配堆外内存,然后通过一个存储在 Java 堆里的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为其避免了在 Java 堆和 Native 堆中来回复制数据。 +在 JDK 1.4 中新加入了 NIO 类,它可以使用 Native 函数库直接分配堆外内存,然后通过一个存储在 Java 堆里的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在 Java 堆和 Native 堆中来回复制数据。 # 二、垃圾收集 @@ -146,7 +146,7 @@ Java 虚拟机使用该算法来判断对象是否可被回收,在 Java 中 GC ### 3. 引用类型 -无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象是否可达,判定对象是否可被回收都与引用有关。 +无论是通过引用计算算法判断对象的引用数量,还是通过可达性分析算法判断对象是否可达,判定对象是否可被回收都与引用有关。 Java 具有四种强度不同的引用类型。 @@ -256,7 +256,7 @@ finalize() 类似 C++ 的析构函数,用来做关闭外部资源等工作。 一般将 Java 堆分为新生代和老年代。 - 新生代使用:复制算法 -- 老年代使用:标记 - 清除 或者 标记 - 整理 算法 +- 老年代使用:标记 - 清理 或者 标记 - 整理 算法 ## 垃圾收集器 diff --git a/notes/Linux.md b/notes/Linux.md index 8f27d75c..ebcc347b 100644 --- a/notes/Linux.md +++ b/notes/Linux.md @@ -11,7 +11,6 @@ * [GNU](#gnu) * [开源协议](#开源协议) * [二、磁盘](#二磁盘) - * [HDD](#hdd) * [磁盘接口](#磁盘接口) * [磁盘的文件名](#磁盘的文件名) * [三、分区](#三分区) @@ -185,21 +184,6 @@ GNU 计划,译为革奴计划,它的目标是创建一套完全自由的操 # 二、磁盘 -## HDD - -Hard Disk Drives(HDD) 俗称硬盘,具有以下结构: - -- 盘面(Platter):一个硬盘有多个盘面; -- 磁道(Track):盘面上的圆形带状区域,一个盘面可以有多个磁道; -- 扇区(Track Sector):磁道上的一个弧段,一个磁道可以有多个扇区,它是最小的物理储存单位,目前主要有 512 bytes 与 4 K 两种大小; -- 磁头(Head):与盘面非常接近,能够将盘面上的磁场转换为电信号(读),或者将电信号转换为盘面的磁场(写); -- 制动手臂(Actuator arm):用于在磁道之间移动磁头; -- 主轴(Spindle):使整个盘面转动。 - -

- -[Decoding UCS Invicta – Part 1](https://blogs.cisco.com/datacenter/decoding-ucs-invicta-part-1) - ## 磁盘接口 ### 1. IDE @@ -1025,10 +1009,10 @@ g/re/p(globally search a regular expression and print),使用正则表示式 ```html $ grep [-acinv] [--color=auto] 搜寻字符串 filename --c : 计算找到个数 +-c : 统计个数 -i : 忽略大小写 -n : 输出行号 --v : 反向选择,亦即显示出没有 搜寻字符串 内容的那一行 +-v : 反向选择,也就是显示出没有 搜寻字符串 内容的那一行 --color=auto :找到的关键字加颜色显示 ``` @@ -1068,7 +1052,7 @@ $ printf '%10s %5i %5i %5i %8.2f \n' $(cat printf.txt) awk 每次处理一行,处理的最小单位是字段,每个字段的命名方式为:\$n,n 为字段号,从 1 开始,\$0 表示一整行。 -示例 1:取出登录用户的用户名和 ip +示例:取出登录用户的用户名和 IP ```html $ last -n 5 @@ -1077,7 +1061,9 @@ dmtsai pts/0 192.168.1.100 Thu Jul 9 23:36 - 02:58 (03:22) dmtsai pts/0 192.168.1.100 Thu Jul 9 17:23 - 23:36 (06:12) dmtsai pts/0 192.168.1.100 Thu Jul 9 08:02 - 08:17 (00:14) dmtsai tty1 Fri May 29 11:55 - 12:11 (00:15) +``` +```html $ last -n 5 | awk '{print $1 "\t" $3}' ``` @@ -1087,7 +1073,7 @@ $ last -n 5 | awk '{print $1 "\t" $3}' $ awk '条件类型 1 {动作 1} 条件类型 2 {动作 2} ...' filename ``` -示例 2:/etc/passwd 文件第三个字段为 UID,对 UID 小于 10 的数据进行处理。 +示例:/etc/passwd 文件第三个字段为 UID,对 UID 小于 10 的数据进行处理。 ```text $ cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}' @@ -1104,7 +1090,7 @@ awk 变量: | NR | 目前所处理的是第几行数据 | | FS | 目前的分隔字符,默认是空格键 | -示例 3:输出正在处理的行号,并显示每一行有多少字段 +示例:显示正在处理的行号以及每一行有多少字段 ```html $ last -n 5 | awk '{print $1 "\t lines: " NR "\t columns: " NF}' @@ -1125,19 +1111,19 @@ dmtsai lines: 5 columns: 9 示例一:查看自己的进程 -``` +```sh # ps -l ``` 示例二:查看系统所有进程 -``` +```sh # ps aux ``` 示例三:查看特定的进程 -``` +```sh # ps aux | grep threadx ``` @@ -1147,7 +1133,7 @@ dmtsai lines: 5 columns: 9 示例:两秒钟刷新一次 -``` +```sh # top -d 2 ``` @@ -1157,7 +1143,7 @@ dmtsai lines: 5 columns: 9 示例:查看所有进程树 -``` +```sh # pstree -A ``` @@ -1167,14 +1153,12 @@ dmtsai lines: 5 columns: 9 示例:查看特定端口的进程 -``` +```sh # netstat -anp | grep port ``` ## 进程状态 -

- | 状态 | 说明 | | :---: | --- | | R | running or runnable (on run queue) | @@ -1183,9 +1167,11 @@ dmtsai lines: 5 columns: 9 | Z | zombie (terminated but not reaped by its parent) | | T | stopped (either by a job control signal or because it is being traced) | +

+ ## SIGCHLD -当一个子进程改变了它的状态时:停止运行,继续运行或者退出,有两件事会发生在父进程中: +当一个子进程改变了它的状态时(停止运行,继续运行或者退出),有两件事会发生在父进程中: - 得到 SIGCHLD 信号; - waitpid() 或者 wait() 调用会返回。 @@ -1194,7 +1180,7 @@ dmtsai lines: 5 columns: 9 其中子进程发送的 SIGCHLD 信号包含了子进程的信息,包含了进程 ID、进程状态、进程使用 CPU 的时间等。 -在子进程退出时,它的进程描述符不会立即释放,这是为了让父进程得到子进程信息。父进程通过 wait() 和 waitpid() 来获得一个已经退出的子进程的信息。 +在子进程退出时,它的进程描述符不会立即释放,这是为了让父进程得到子进程信息,父进程通过 wait() 和 waitpid() 来获得一个已经退出的子进程的信息。 ## wait() @@ -1206,11 +1192,7 @@ pid_t wait(int *status) 如果成功,返回被收集的子进程的进程 ID;如果调用进程没有子进程,调用就会失败,此时返回 -1,同时 errno 被置为 ECHILD。 -参数 status 用来保存被收集的子进程退出时的一些状态,如果对这个子进程是如何死掉的毫不在意,只想把这个子进程消灭掉,可以设置这个参数为 NULL: - -```c -pid = wait(NULL); -``` +参数 status 用来保存被收集的子进程退出时的一些状态,如果对这个子进程是如何死掉的毫不在意,只想把这个子进程消灭掉,可以设置这个参数为 NULL。 ## waitpid() @@ -1238,9 +1220,9 @@ options 参数主要有 WNOHANG 和 WUNTRACED 两个选项,WNOHANG 可以使 w 僵尸进程通过 ps 命令显示出来的状态为 Z(zombie)。 -系统所能使用的进程号是有限的,如果大量的产生僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。 +系统所能使用的进程号是有限的,如果产生大量僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。 -要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进程就会变成孤儿进程,从而被 init 所收养,这样 init 就会释放所有的僵死进程所占有的资源,从而结束僵尸进程。 +要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进程就会变成孤儿进程,从而被 init 所收养,这样 init 就会释放所有的僵尸进程所占有的资源,从而结束僵尸进程。 # 参考资料 diff --git a/notes/MySQL.md b/notes/MySQL.md index f6aa853b..1c575fae 100644 --- a/notes/MySQL.md +++ b/notes/MySQL.md @@ -9,7 +9,7 @@ * [字符串](#字符串) * [时间和日期](#时间和日期) * [三、索引](#三索引) - * [B Tree 原理](#b-tree-原理) + * [B+ Tree 原理](#b-tree-原理) * [索引分类](#索引分类) * [索引的优点](#索引的优点) * [索引优化](#索引优化) @@ -125,49 +125,33 @@ MySQL 提供了 FROM_UNIXTIME() 函数把 UNIX 时间戳转换为日期,并提 索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现。 -## B Tree 原理 +## B+ Tree 原理 -### 1. B-Tree +### 1. 数据结构 -

+B Tree 指的是 Balance Tree,也就是平衡树。平衡树时一颗查找树,并且所有叶子节点位于同一层。 -定义一条数据记录为一个二元组 [key, data],B-Tree 是满足下列条件的数据结构: +B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具有 B Tree 的平衡性,并且通过顺序访问指针来提高区间查询的性能。 -- 所有叶节点具有相同的深度,也就是说 B-Tree 是平衡的; -- 一个节点中的 key 从左到右非递减排列; -- 如果某个指针的左右相邻 key 分别是 keyi 和 keyi+1,且不为 null,则该指针指向节点的所有 key 大于等于 keyi 且小于等于 keyi+1。 - -查找算法:首先在根节点进行二分查找,如果找到则返回对应节点的 data,否则在相应区间的指针指向的节点递归进行查找。 - -由于插入删除新的数据记录会破坏 B-Tree 的性质,因此在插入删除时,需要对树进行一个分裂、合并、旋转等操作以保持 B-Tree 性质。 - -### 2. B+Tree - -

- -与 B-Tree 相比,B+Tree 有以下不同点: - -- 每个节点的指针上限为 2d 而不是 2d+1(d 为节点的出度); -- 内节点不存储 data,只存储 key; -- 叶子节点不存储指针。 - -### 3. 顺序访问指针 +在 B+ Tree 中,一个节点中的 key 从左到右非递减排列,如果某个指针的左右相邻 key 分别是 keyi 和 keyi+1,且不为 null,则该指针指向节点的所有 key 大于等于 keyi 且小于等于 keyi+1

-一般在数据库系统或文件系统中使用的 B+Tree 结构都在经典 B+Tree 基础上进行了优化,在叶子节点增加了顺序访问指针,做这个优化的目的是为了提高区间访问的性能。 +### 2. 操作 -### 4. 优势 +操作时,首先在根节点进行二分查找,找到一个 key 所在的指针,然后递归地在指针所指向的节点进行查找。直到查找到叶子节点,然后在叶子节点上进行二分查找,找出 key 所对应的 data。 -红黑树等平衡树也可以用来实现索引,但是文件系统及数据库系统普遍采用 B Tree 作为索引结构,主要有以下两个原因: +插入删除操作记录会破坏平衡树的平衡性,因此在插入删除时,需要对树进行一个分裂、合并、旋转等操作。 + +### 3. 与红黑树的比较 + +红黑树等平衡树也可以用来实现索引,但是文件系统及数据库系统普遍采用 B+ Tree 作为索引结构,主要有以下两个原因: (一)更少的检索次数 平衡树检索数据的时间复杂度等于树高 h,而树高大致为 O(h)=O(logdN),其中 d 为每个节点的出度。 -红黑树的出度为 2,而 B Tree 的出度一般都非常大。红黑树的树高 h 很明显比 B Tree 大非常多,因此检索的次数也就更多。 - -B+Tree 相比于 B-Tree 更适合外存索引,因为 B+Tree 内节点去掉了 data 域,因此可以拥有更大的出度,检索效率会更高。 +红黑树的出度为 2,而 B+ Tree 的出度一般都非常大。红黑树的树高 h 很明显比 B+ Tree 大非常多,因此检索的次数也就更多。 (二)利用计算机预读特性 @@ -175,8 +159,6 @@ B+Tree 相比于 B-Tree 更适合外存索引,因为 B+Tree 内节点去掉了 操作系统一般将内存和磁盘分割成固态大小的块,每一块称为一页,内存与磁盘以页为单位交换数据。数据库系统将索引的一个节点的大小设置为页的大小,使得一次 I/O 就能完全载入一个节点,并且可以利用预读特性,相邻的节点也能够被预先载入。 -更多内容请参考:[MySQL 索引背后的数据结构及算法原理](http://blog.codinglabs.org/articles/theory-of-mysql-index.html) - ## 索引分类 ### 1. B+Tree 索引 @@ -442,3 +424,4 @@ MySQL 读写分离能提高性能的原因在于: - [服务端指南 数据存储篇 | MySQL(09) 分库与分表带来的分布式困境与应对之策](http://blog.720ui.com/2017/mysql_core_09_multi_db_table2/ "服务端指南 数据存储篇 | MySQL(09) 分库与分表带来的分布式困境与应对之策") - [How to create unique row ID in sharded databases?](https://stackoverflow.com/questions/788829/how-to-create-unique-row-id-in-sharded-databases) - [SQL Azure Federation – Introduction](http://geekswithblogs.net/shaunxu/archive/2012/01/07/sql-azure-federation-ndash-introduction.aspx "Title of this entry.") +- [MySQL 索引背后的数据结构及算法原理](http://blog.codinglabs.org/articles/theory-of-mysql-index.html) diff --git a/notes/Redis.md b/notes/Redis.md index 247d0987..c54287c8 100644 --- a/notes/Redis.md +++ b/notes/Redis.md @@ -420,6 +420,8 @@ Reids 具体有 6 种淘汰策略: 使用 Redis 缓存数据时,为了提高缓存命中率,需要保证缓存数据都是热点数据。可以将内存最大使用量设置为热点数据占用的内存量,然后启用 allkeys-lru 淘汰策略,将最近最少使用的数据淘汰。 +Redis 4.0 引入了 volatile-lfu 和 allkeys-lfu 淘汰策略,LFU 策略通过统计访问频率,将访问频率最少的键值对淘汰。 + # 八、持久化 Redis 是内存型数据库,为了保证数据在断电后不会丢失,需要将内存中的数据持久化到硬盘上。 @@ -601,3 +603,4 @@ Redis 没有关系型数据库中的表这一概念来将同种类型的数据 - [Redis 3.0 中文版- 分片](http://wiki.jikexueyuan.com/project/redis-guide) - [Redis 应用场景](http://www.scienjus.com/redis-use-case/) - [Observer vs Pub-Sub](http://developers-club.com/posts/270339/) +- [Using Redis as an LRU cache](https://redis.io/topics/lru-cache) diff --git a/notes/计算机操作系统.md b/notes/计算机操作系统.md index 5c9f63a7..6bfb559c 100644 --- a/notes/计算机操作系统.md +++ b/notes/计算机操作系统.md @@ -23,6 +23,7 @@ * [段页式](#段页式) * [分页与分段的比较](#分页与分段的比较) * [五、设备管理](#五设备管理) + * [磁盘结构](#磁盘结构) * [磁盘调度算法](#磁盘调度算法) * [六、链接](#六链接) * [编译系统](#编译系统) @@ -304,7 +305,7 @@ void P2() { 为了同步生产者和消费者的行为,需要记录缓冲区中物品的数量。数量可以使用信号量来进行统计,这里需要使用两个信号量:empty 记录空缓冲区的数量,full 记录满缓冲区的数量。其中,empty 信号量是在生产者进程中使用,当 empty 不为 0 时,生产者才可以放入物品;full 信号量是在消费者进程中使用,当 full 信号量不为 0 时,消费者才可以取走物品。 -注意,不能先对缓冲区进行加锁,再测试信号量。也就是说,不能先执行 down(mutex) 再执行 down(empty)。如果这么做了,那么可能会出现这种情况:生产者对缓冲区加锁后,执行 down(empty) 操作,发现 empty = 0,此时生产者睡眠。消费者不能进入临界区,因为生产者对缓冲区加锁了,也就无法执行 up(empty) 操作,empty 永远都为 0,那么生产者和消费者就会一直等待下去,造成死锁。 +注意,不能先对缓冲区进行加锁,再测试信号量。也就是说,不能先执行 down(mutex) 再执行 down(empty)。如果这么做了,那么可能会出现这种情况:生产者对缓冲区加锁后,执行 down(empty) 操作,发现 empty = 0,此时生产者睡眠。消费者不能进入临界区,因为生产者对缓冲区加锁了,消费者就无法执行 up(empty) 操作,empty 永远都为 0,导致生产者永远等待下,不会释放锁,消费者因此也会永远等待下去。 ```c #define N 100 @@ -314,7 +315,7 @@ semaphore empty = N; semaphore full = 0; void producer() { - while(TRUE){ + while(TRUE) { int item = produce_item(); down(&empty); down(&mutex); @@ -325,7 +326,7 @@ void producer() { } void consumer() { - while(TRUE){ + while(TRUE) { down(&full); down(&mutex); int item = remove_item(); @@ -542,7 +543,7 @@ int pipe(int fd[2]); 它具有以下限制: -- 只支持半双工通信(单向传输); +- 只支持半双工通信(单向交替传输); - 只能在父子进程中使用。

@@ -707,7 +708,7 @@ FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户 虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。 -为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当程序引用到一部分不在物理内存中的地址空间时,由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失败的指令。 +为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当程序引用到不在物理内存中的页时,由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失败的指令。 从上面的描述中可以看出,虚拟内存允许程序不用将地址空间中的每一页都映射到物理内存,也就是说一个程序不需要全部调入内存就可以运行,这使得有限的内存运行大程序称为可能。例如有一台计算机可以产生 16 位地址,那么一个程序的地址空间范围是 0\~64K。该计算机只有 32KB 的物理内存,虚拟内存技术允许该计算机运行一个 64K 大小的程序。 @@ -715,12 +716,11 @@ FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户 ## 分页系统地址映射 -- 内存管理单元(MMU):管理着地址空间和物理内存的转换。 -- 页表(Page table):页(地址空间)和页框(物理内存空间)的映射表。例如下图中,页表的第 0 个表项为 010,表示第 0 个页映射到第 2 个页框。页表项的最后一位用来标记页是否在内存中。 +内存管理单元(MMU)管理着地址空间和物理内存的转换,其中的页表(Page table)存储着页(程序地址空间)和页框(物理内存空间)的映射表。 -下图的页表存放着 16 个页,这 16 个页需要用 4 个比特位来进行索引定位。因此对于虚拟地址(0010 000000000100),前 4 位是用来存储页面号,而后 12 位存储在页中的偏移量。 +下图的页表存放着 16 个页,这 16 个页需要用 4 个比特位来进行索引定位,也就是存储页面号,剩下 12 个比特位存储偏移量。 -(0010 000000000100)根据前 4 位得到页号为 2,读取表项内容为(110 1),它的前 3 为为页框号,最后 1 位表示该页在内存中。最后映射得到物理内存地址为(110 000000000100)。 +例如对于虚拟地址(0010 000000000100),前 4 位是存储页面号 2,读取表项内容为(110 1)。该页在内存中,并且页框的地址为 (110 000000000100)。

@@ -828,11 +828,22 @@ FIFO 算法可能会把经常使用的页面置换出去,为了避免这一问 # 五、设备管理 +## 磁盘结构 + +- 盘面(Platter):一个磁盘有多个盘面; +- 磁道(Track):盘面上的圆形带状区域,一个盘面可以有多个磁道; +- 扇区(Track Sector):磁道上的一个弧段,一个磁道可以有多个扇区,它是最小的物理储存单位,目前主要有 512 bytes 与 4 K 两种大小; +- 磁头(Head):与盘面非常接近,能够将盘面上的磁场转换为电信号(读),或者将电信号转换为盘面的磁场(写); +- 制动手臂(Actuator arm):用于在磁道之间移动磁头; +- 主轴(Spindle):使整个盘面转动。 + +

+ ## 磁盘调度算法 读写一个磁盘块的时间的影响因素有: -- 旋转时间(主轴旋转磁盘,使得磁头移动到适当的扇区上) +- 旋转时间(主轴转动盘面,使得磁头移动到适当的扇区上) - 寻道时间(制动手臂移动,使得磁头移动到适当的磁道上) - 实际的数据传输时间 @@ -933,8 +944,9 @@ gcc -o hello hello.c - Tanenbaum A S, Bos H. Modern operating systems[M]. Prentice Hall Press, 2014. - 汤子瀛, 哲凤屏, 汤小丹. 计算机操作系统[M]. 西安电子科技大学出版社, 2001. - Bryant, R. E., & O’Hallaron, D. R. (2004). 深入理解计算机系统. +- 史蒂文斯. UNIX 环境高级编程 [M]. 人民邮电出版社, 2014. - [Operating System Notes](https://applied-programming.github.io/Operating-Systems-Notes/) -- [进程间的几种通信方式](http://blog.csdn.net/yufaw/article/details/7409596) - [Operating-System Structures](https://www.cs.uic.edu/\~jbell/CourseNotes/OperatingSystems/2_Structures.html) - [Processes](http://cse.csusb.edu/tongyu/courses/cs460/notes/process.php) - [Inter Process Communication Presentation[1]](https://www.slideshare.net/rkolahalam/inter-process-communication-presentation1) +- [Decoding UCS Invicta – Part 1](https://blogs.cisco.com/datacenter/decoding-ucs-invicta-part-1) From df8cd08303067a37e7b6a5326bad88cfdc7abbf5 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Fri, 3 Aug 2018 00:17:10 +0800 Subject: [PATCH 036/172] auto commit --- other/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 other/README.md diff --git a/other/README.md b/other/README.md new file mode 100644 index 00000000..39876f02 --- /dev/null +++ b/other/README.md @@ -0,0 +1,3 @@ +- 其他人添加的全新内容 +- 主页 README 引用的图片 +- 微信群描述文件 \ No newline at end of file From c4cd8a30ffde6049ee703943e5fc9a53a93c54ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B0=B8=E5=B7=9D?= <1029579233@qq.com> Date: Fri, 3 Aug 2018 00:20:20 +0800 Subject: [PATCH 037/172] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c015a100..39cedf7b 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ From ae14046536061e69d46858fb168ac6bb53cbb716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B0=B8=E5=B7=9D?= <1029579233@qq.com> Date: Fri, 3 Aug 2018 00:20:56 +0800 Subject: [PATCH 038/172] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 39cedf7b..56627328 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ From 54073390ecefa3457a027026a7aefed7c19ef2a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B0=B8=E5=B7=9D?= <1029579233@qq.com> Date: Fri, 3 Aug 2018 00:22:26 +0800 Subject: [PATCH 039/172] Update Group.md --- other/Group.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/other/Group.md b/other/Group.md index 5e7bbc90..fee7b8bf 100644 --- a/other/Group.md +++ b/other/Group.md @@ -1,10 +1,14 @@ -创建交流群的主要目的是为了为大家提供一个交流平台,方便大家在学习的过程中互相讨论。 +创建交流群的主要目的是为了给大家提供一个交流平台,方便大家在学习的过程中互相讨论。 -这个交流群不是一个笔者的问题回答群,我更希望大家能够愿意积极回答,我相信提问和回答的过程都可以提升自己对知识的掌握程度。 +这个交流群不是一个笔者的问题回答群,我更希望大家能够愿意积极回答,我相信提问和回答的过程都可以帮助大家对知识的掌握程度。 因为笔者白天要上班,因此不能及时进行回复,大部分时间会处于潜水状态。 -至于交流群和 Issue 有什么区别,主要是两方面:一是交流群实时性高一些,二是交流群会更活跃一些。另外,Issue 主要是用来发布一些项目中的错误和一些改进建议,当然也可以发布一些可以讨论的问题,交流群可以讨论的内容比较广,例如在阅读本项目过程中不理解的地方可以在交流群中寻求别人的帮助、新技术的讨论、招聘信息、学习和工作的感受等等。 +至于交流群和 Issue 有什么区别,主要是两方面:一是交流群实时性高一些,二是交流群会更活跃一些。 + +另外,Issue 主要是用来发布一些项目中的错误和一些改进建议,当然也可以发布一些可以讨论的问题。 + +交流群可以讨论的内容比较广,例如在阅读本项目过程中不理解的地方可以在交流群中寻求别人的帮助、新技术的讨论、招聘信息、学习和工作的感受等等。 交流群不讨论政治,不讨论有争议性的话题,不发表仇视言论,不传播谣言,不发布广告(招聘信息之类的可以)。 From 781259816ddebe5a41bf08ba169156b81e99c1e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B0=B8=E5=B7=9D?= <1029579233@qq.com> Date: Fri, 3 Aug 2018 13:01:18 +0800 Subject: [PATCH 040/172] Update README.md --- README.md | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 56627328..87d4d460 100644 --- a/README.md +++ b/README.md @@ -15,59 +15,59 @@ > [剑指 Offer 题解](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/剑指%20offer%20题解.md) -目录根据原书第二版进行编排。 +目录根据原书第二版进行编排,代码和原书有所不同,尽量实现地比原书更加简洁。 > [Leetcode 题解](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Leetcode%20题解.md) -做了一个大致分类,并对每种分类题型的解题思路做了总结。 +对题目做了一个大致分类,并对每种题型的解题思路做了总结。 > [算法](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/算法.md) -主要参考 Robert Sedgewick 的算法书进行实现,源代码以及测试代码可在另一个仓库获取。 +排序、并查集、栈和队列、红黑树、散列表。 ## 操作系统 :computer: > [计算机操作系统](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/计算机操作系统.md) -参考 现代操作系统、Unix 环境高级编程、深入理解计算机系统。 +进程管理、内存管理、设备管理、链接。 > [Linux](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Linux.md) -参考 鸟哥的 Linux 私房菜。 +基本实现原理以及基本操作。 ## 网络 :cloud: > [计算机网络](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/计算机网络.md) -参考 谢希仁的计算机网络、计算机网络 自顶向下方法、TCP/IP 详解。 +物理层、链路层、网络层、运输层、应用层。 > [HTTP](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/HTTP.md) -参考 图解 HTTP,更多的是参考网上的文档,比如 MDN、维基百科等。 +方法、状态码、Cookie、缓存、连接管理、HTTPs、HTTP 2.0。 > [Socket](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Socket.md) -参考 Unix 网络编程。 +I/O 模型、I/O 多路复用。 ## 面向对象 :couple: > [设计模式](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/设计模式.md) -参考 Head First 设计模式、设计模式 可复用面向对象软件的基础,实现了 Gof 的 23 种设计模式。 +实现了 Gof 的 23 种设计模式。 > [面向对象思想](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/面向对象思想.md) -内容包括三大原则(继承、封装、多态)、类图、设计原则。 +三大原则(继承、封装、多态)、类图、设计原则。 ## 数据库 :floppy_disk: > [数据库系统原理](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/数据库系统原理.md) -参考 数据库系统原理。 +事务、锁、隔离级别、MVCC、间隙锁、范式。 > [SQL](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/SQL.md) -参考 SQL 必知必会。 +SQL 基本语法。 > [Leetcode-Database 题解](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Leetcode-Database%20题解.md) @@ -75,33 +75,33 @@ Leetcode 上数据库题目的解题记录。 > [MySQL](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/MySQL.md) -参考 高性能 MySQL。 +存储引擎、索引、查询优化、切分、复制。 > [Redis](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Redis.md) -参考 Redis 设计与实现、Redis 实战。 +五种数据类型、字典和跳跃表数据结构、使用场景、和 Memcache 的比较、淘汰策略、持久化、文件事件的 Reactor 模式、复制。 ## Java :coffee: > [Java 基础](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Java%20基础.md) -参考 Effective Java、Java 编程思想,也有部分内容参考官方文档以及 StackOverflow。 +不会涉及很多基本语法介绍,主要是一些实现原理以及关键特性。 > [Java 容器](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Java%20容器.md) -包含容器源码分析。 +源码分析:ArrayListVector、CopyOnWriteArrayList、LinkedList、HashMap、ConcurrentHashMap、LinkedHashMap、WeekHashMap。 > [Java 并发](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Java%20并发.md) -参考 Java 编程思想、深入理解 Java 虚拟机。 +线程使用方式、两种互斥同步方法、线程协作、JUC、线程安全、内存模型、锁优化。 > [Java 虚拟机](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Java%20虚拟机.md) -参考 深入理解 Java 虚拟机。 +运行时数据区域、垃圾收集、类加载。 > [Java I/O](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Java%20IO.md) -包含 NIO 的原理以及实例。 +NIO 的原理以及实例。 ## 系统设计 :bulb: @@ -141,11 +141,11 @@ Docker 基本原理。 > [正则表达式](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/正则表达式.md) -参考 正则表达式必知必会。 +正则表达式基本语法。 > [构建工具](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/构建工具.md) -构建工具的基本概念、主流构建工具介绍 +构建工具的基本概念、主流构建工具介绍。 ## 编码实践 :speak_no_evil: From 9cd8b3ae9631d73b5d94d4022b468e8a60682c04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B0=B8=E5=B7=9D?= Date: Fri, 3 Aug 2018 14:40:33 +0800 Subject: [PATCH 041/172] auto commit --- BOOKLIST.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BOOKLIST.md b/BOOKLIST.md index bdd8eb92..4805a7dc 100644 --- a/BOOKLIST.md +++ b/BOOKLIST.md @@ -79,4 +79,4 @@ - [JavaScript 语言精粹](https://book.douban.com/subject/3590768/) - [利用 Python 进行数据分析](https://book.douban.com/subject/25779298/) -- [概率论与数理统计](https://book.douban.com/subject/2201479/) \ No newline at end of file +- [概率论与数理统计](https://book.douban.com/subject/2201479/) From 2f4f1c814411214475372d73aac7fdf836fe55cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B0=B8=E5=B7=9D?= Date: Fri, 3 Aug 2018 14:44:06 +0800 Subject: [PATCH 044/172] auto commit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e43b0f98..a56b7514 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .DS_Store + From 4c69f7a7cc83c552655e27f72a7d91cd42ef1658 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=B0=B8=E5=B7=9D?= Date: Fri, 3 Aug 2018 15:31:36 +0800 Subject: [PATCH 045/172] auto commit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 87d4d460..39b43f30 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ > [剑指 Offer 题解](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/剑指%20offer%20题解.md) -目录根据原书第二版进行编排,代码和原书有所不同,尽量实现地比原书更加简洁。 +目录根据原书第二版进行编排,代码和原书有所不同,尽量比原书更简洁。 > [Leetcode 题解](https://github.com/CyC2018/InnterviewNotes/blob/master/notes/Leetcode%20题解.md) From 0e7655e7aeea75fe027849315d45691280067e82 Mon Sep 17 00:00:00 2001 From: Elong Date: Fri, 3 Aug 2018 18:42:53 +0800 Subject: [PATCH 046/172] =?UTF-8?q?Update=20Java=20=E5=9F=BA=E7=A1=80.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit equals()方法的文字描述修改 --- notes/Java 基础.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notes/Java 基础.md b/notes/Java 基础.md index 0bce5622..1e20ea55 100644 --- a/notes/Java 基础.md +++ b/notes/Java 基础.md @@ -586,7 +586,7 @@ protected void finalize() throws Throwable {} **1. equals() 与 == 的区别** - 对于基本类型,== 判断两个值是否相等,基本类型没有 equals() 方法。 -- 对于引用类型,== 判断两个实例是否引用同一个对象,而 equals() 判断引用的对象是否等价。 +- 对于引用类型,== 判断两个实例是否引用同一个对象,而 equals() 则是根据引用的对象的 equals() 方法的具体实现来进行比较。 ```java Integer x = new Integer(1); From bb6d5e49790664dd8b756cc11660fd4878c2b966 Mon Sep 17 00:00:00 2001 From: luocaodan Date: Sat, 4 Aug 2018 11:23:03 +0800 Subject: [PATCH 047/172] =?UTF-8?q?Update=20Java=20=E8=99=9A=E6=8B=9F?= =?UTF-8?q?=E6=9C=BA.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 应该是jre目录下,而不是jdk目录 --- notes/Java 虚拟机.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/notes/Java 虚拟机.md b/notes/Java 虚拟机.md index 3bb9f289..dbe4e070 100644 --- a/notes/Java 虚拟机.md +++ b/notes/Java 虚拟机.md @@ -627,9 +627,9 @@ public static void main(String[] args) { 从 Java 开发人员的角度看,类加载器可以划分得更细致一些: -- 启动类加载器(Bootstrap ClassLoader)此类加载器负责将存放在 <JAVA_HOME>\lib 目录中的,或者被 -Xbootclasspath 参数所指定的路径中的,并且是虚拟机识别的(仅按照文件名识别,如 rt.jar,名字不符合的类库即使放在 lib 目录中也不会被加载)类库加载到虚拟机内存中。启动类加载器无法被 Java 程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给启动类加载器,直接使用 null 代替即可。 +- 启动类加载器(Bootstrap ClassLoader)此类加载器负责将存放在 <JRE_HOME>\lib 目录中的,或者被 -Xbootclasspath 参数所指定的路径中的,并且是虚拟机识别的(仅按照文件名识别,如 rt.jar,名字不符合的类库即使放在 lib 目录中也不会被加载)类库加载到虚拟机内存中。启动类加载器无法被 Java 程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给启动类加载器,直接使用 null 代替即可。 -- 扩展类加载器(Extension ClassLoader)这个类加载器是由 ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将 <JAVA_HOME>/lib/ext 或者被 java.ext.dir 系统变量所指定路径中的所有类库加载到内存中,开发者可以直接使用扩展类加载器。 +- 扩展类加载器(Extension ClassLoader)这个类加载器是由 ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将 <JRE_HOME>/lib/ext 或者被 java.ext.dir 系统变量所指定路径中的所有类库加载到内存中,开发者可以直接使用扩展类加载器。 - 应用程序类加载器(Application ClassLoader)这个类加载器是由 AppClassLoader(sun.misc.Launcher$AppClassLoader)实现的。由于这个类加载器是 ClassLoader 中的 getSystemClassLoader() 方法的返回值,因此一般称为系统类加载器。它负责加载用户类路径(ClassPath)上所指定的类库,开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。 From b9f9e9807e771074fe13dd04b048782ac6a4444f Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sat, 4 Aug 2018 16:59:09 +0800 Subject: [PATCH 048/172] auto commit --- .gitignore | 2 +- notes/Java 基础.md | 2 +- notes/Java 并发.md | 4 +++- notes/Java 虚拟机.md | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index a56b7514..c91a56b6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ .DS_Store - +*.txt diff --git a/notes/Java 基础.md b/notes/Java 基础.md index 1e20ea55..f5133a6f 100644 --- a/notes/Java 基础.md +++ b/notes/Java 基础.md @@ -586,7 +586,7 @@ protected void finalize() throws Throwable {} **1. equals() 与 == 的区别** - 对于基本类型,== 判断两个值是否相等,基本类型没有 equals() 方法。 -- 对于引用类型,== 判断两个实例是否引用同一个对象,而 equals() 则是根据引用的对象的 equals() 方法的具体实现来进行比较。 +- 对于引用类型,== 判断两个实例是否引用同一个对象,而 equals() 判断引用的对象是否等价,根据引用的对象的 equals() 方法的具体实现来进行比较。 ```java Integer x = new Integer(1); diff --git a/notes/Java 并发.md b/notes/Java 并发.md index 627b824f..89ab7cac 100644 --- a/notes/Java 并发.md +++ b/notes/Java 并发.md @@ -1419,7 +1419,9 @@ public final int incrementAndGet() { } ``` -以下代码是 getAndAddInt() 源码,var1 指示对象内存地址,var2 指示该字段相对对象内存地址的偏移,var4 指示操作需要加的数值,这里为 1。通过 getIntVolatile(var1, var2) 得到旧的预期值,通过调用 compareAndSwapInt() 来进行 CAS 比较,如果 该字段内存地址中的值 ==var5,那么就更新内存地址为 var1+var2 的变量为 var5+var4。可以看到 getAndAddInt() 在一个循环中进行,发生冲突的做法是不断的进行重试。 +以下代码是 getAndAddInt() 源码,var1 指示对象内存地址,var2 指示该字段相对对象内存地址的偏移,var4 指示操作需要加的数值,这里为 1。通过 getIntVolatile(var1, var2) 得到旧的预期值,通过调用 compareAndSwapInt() 来进行 CAS 比较,如果该字段内存地址中的值 ==var5,那么就更新内存地址为 var1+var2 的变量为 var5+var4。 + +可以看到 getAndAddInt() 在一个循环中进行,发生冲突的做法是不断的进行重试。 ```java public final int getAndAddInt(Object var1, long var2, int var4) { diff --git a/notes/Java 虚拟机.md b/notes/Java 虚拟机.md index dbe4e070..ec33515e 100644 --- a/notes/Java 虚拟机.md +++ b/notes/Java 虚拟机.md @@ -627,7 +627,7 @@ public static void main(String[] args) { 从 Java 开发人员的角度看,类加载器可以划分得更细致一些: -- 启动类加载器(Bootstrap ClassLoader)此类加载器负责将存放在 <JRE_HOME>\lib 目录中的,或者被 -Xbootclasspath 参数所指定的路径中的,并且是虚拟机识别的(仅按照文件名识别,如 rt.jar,名字不符合的类库即使放在 lib 目录中也不会被加载)类库加载到虚拟机内存中。启动类加载器无法被 Java 程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给启动类加载器,直接使用 null 代替即可。 +- 启动类加载器(Bootstrap ClassLoader)此类加载器负责将存放在 <JAVA_HOME>\lib 目录中的,或者被 -Xbootclasspath 参数所指定的路径中的,并且是虚拟机识别的(仅按照文件名识别,如 rt.jar,名字不符合的类库即使放在 lib 目录中也不会被加载)类库加载到虚拟机内存中。启动类加载器无法被 Java 程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给启动类加载器,直接使用 null 代替即可。 - 扩展类加载器(Extension ClassLoader)这个类加载器是由 ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将 <JRE_HOME>/lib/ext 或者被 java.ext.dir 系统变量所指定路径中的所有类库加载到内存中,开发者可以直接使用扩展类加载器。 From 336fa4f50f8b14518edc95f8a79bb1d59c40521e Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sat, 4 Aug 2018 17:00:36 +0800 Subject: [PATCH 049/172] auto commit --- notes/Java 虚拟机.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/notes/Java 虚拟机.md b/notes/Java 虚拟机.md index ec33515e..69952f2e 100644 --- a/notes/Java 虚拟机.md +++ b/notes/Java 虚拟机.md @@ -627,9 +627,9 @@ public static void main(String[] args) { 从 Java 开发人员的角度看,类加载器可以划分得更细致一些: -- 启动类加载器(Bootstrap ClassLoader)此类加载器负责将存放在 <JAVA_HOME>\lib 目录中的,或者被 -Xbootclasspath 参数所指定的路径中的,并且是虚拟机识别的(仅按照文件名识别,如 rt.jar,名字不符合的类库即使放在 lib 目录中也不会被加载)类库加载到虚拟机内存中。启动类加载器无法被 Java 程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给启动类加载器,直接使用 null 代替即可。 +- 启动类加载器(Bootstrap ClassLoader)此类加载器负责将存放在 <JRE_HOME>\lib 目录中的,或者被 -Xbootclasspath 参数所指定的路径中的,并且是虚拟机识别的(仅按照文件名识别,如 rt.jar,名字不符合的类库即使放在 lib 目录中也不会被加载)类库加载到虚拟机内存中。启动类加载器无法被 Java 程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给启动类加载器,直接使用 null 代替即可。 -- 扩展类加载器(Extension ClassLoader)这个类加载器是由 ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将 <JRE_HOME>/lib/ext 或者被 java.ext.dir 系统变量所指定路径中的所有类库加载到内存中,开发者可以直接使用扩展类加载器。 +- 扩展类加载器(Extension ClassLoader)这个类加载器是由 ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将 <JAVA_HOME>/lib/ext 或者被 java.ext.dir 系统变量所指定路径中的所有类库加载到内存中,开发者可以直接使用扩展类加载器。 - 应用程序类加载器(Application ClassLoader)这个类加载器是由 AppClassLoader(sun.misc.Launcher$AppClassLoader)实现的。由于这个类加载器是 ClassLoader 中的 getSystemClassLoader() 方法的返回值,因此一般称为系统类加载器。它负责加载用户类路径(ClassPath)上所指定的类库,开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。 From fc97755cac62e8b12c3f0b0c45b06418947fa4b7 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sat, 4 Aug 2018 18:32:17 +0800 Subject: [PATCH 050/172] auto commit --- notes/Java 虚拟机.md | 38 +++++++++--------- pics/926c7438-c5e1-4b94-840a-dcb24ff1dafe.png | Bin 0 -> 19456 bytes pics/c9ad2bf4-5580-4018-bce4-1b9a71804d9c.png | Bin 0 -> 30720 bytes 3 files changed, 19 insertions(+), 19 deletions(-) create mode 100644 pics/926c7438-c5e1-4b94-840a-dcb24ff1dafe.png create mode 100644 pics/c9ad2bf4-5580-4018-bce4-1b9a71804d9c.png diff --git a/notes/Java 虚拟机.md b/notes/Java 虚拟机.md index 69952f2e..4382317b 100644 --- a/notes/Java 虚拟机.md +++ b/notes/Java 虚拟机.md @@ -1,7 +1,7 @@ * [一、运行时数据区域](#一运行时数据区域) * [程序计数器](#程序计数器) - * [虚拟机栈](#虚拟机栈) + * [Java 虚拟机栈](#java-虚拟机栈) * [本地方法栈](#本地方法栈) * [堆](#堆) * [方法区](#方法区) @@ -23,19 +23,19 @@ # 一、运行时数据区域 -

+

## 程序计数器 记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。 -## 虚拟机栈 +## Java 虚拟机栈 -每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。 +每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息,从调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。 -

+

-可以通过 -Xss 这个虚拟机参数来指定一个程序的 Java 虚拟机栈内存大小: +可以通过 -Xss 这个虚拟机参数来指定每个线程的 Java 虚拟机栈内存大小: ```java java -Xss=512M HackTheJava @@ -56,27 +56,22 @@ java -Xss=512M HackTheJava ## 堆 -所有对象实例都在这里分配内存。 +所有对象实例都在这里分配内存,是垃圾收集的主要区域("GC 堆")。 -是垃圾收集的主要区域("GC 堆")。现代的垃圾收集器基本都是采用分代收集算法,主要思想是针对不同的对象采取不同的垃圾回收算法。虚拟机把 Java 堆分成以下三块: +现代的垃圾收集器基本都是采用分代收集算法,针对不同的对象采取不同的垃圾回收算法,可以将堆分成两块: - 新生代(Young Generation) - 老年代(Old Generation) -- 永久代(Permanent Generation) -当一个对象被创建时,它首先进入新生代,之后有可能被转移到老年代中。 - -新生代存放着大量的生命很短的对象,因此新生代在三个区域中垃圾回收的频率最高。为了更高效地进行垃圾回收,把新生代继续划分成以下三个空间: +新生代可以继续划分成以下三个空间: - Eden(伊甸园) - From Survivor(幸存者) - To Survivor -

+堆不需要连续内存,并且可以动态增加其内存,增加失败会抛出 OutOfMemoryError 异常。 -Java 堆不需要连续内存,并且可以动态增加其内存,增加失败会抛出 OutOfMemoryError 异常。 - -可以通过 -Xms 和 -Xmx 两个虚拟机参数来指定一个程序的 Java 堆内存大小,第一个参数设置初始值,第二个参数设置最大值。 +可以通过 -Xms 和 -Xmx 两个虚拟机参数来指定一个程序的堆内存大小,第一个参数设置初始值,第二个参数设置最大值。 ```java java -Xms=1M -Xmx=2M HackTheJava @@ -86,11 +81,13 @@ java -Xms=1M -Xmx=2M HackTheJava 用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 -和 Java 堆一样不需要连续的内存,并且可以动态扩展,动态扩展失败一样会抛出 OutOfMemoryError 异常。 +和堆一样不需要连续的内存,并且可以动态扩展。 + +动态扩展失败一样会抛出 OutOfMemoryError 异常。 对这块区域进行垃圾回收的主要目标是对常量池的回收和对类的卸载,但是一般比较难实现。 -JDK 1.7 之前,HotSpot 虚拟机把它当成永久代来进行垃圾回收,JDK 1.8 之后,取消了永久代,用 metaspace(元数据)区替代。 +JDK 1.7 之前,HotSpot 虚拟机把它当成永久代来进行垃圾回收。但是从 JDK 1.7 开始,已经把原本放在永久代的字符串常量池移到 Native Method 中。 ## 运行时常量池 @@ -102,7 +99,9 @@ Class 文件中的常量池(编译器生成的各种字面量和符号引用 ## 直接内存 -在 JDK 1.4 中新加入了 NIO 类,它可以使用 Native 函数库直接分配堆外内存,然后通过一个存储在 Java 堆里的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在 Java 堆和 Native 堆中来回复制数据。 +在 JDK 1.4 中新加入了 NIO 类,它可以使用 Native 函数库直接分配堆外内存,然后通过一个存储在 Java 堆里的 DirectByteBuffer 对象作为这块内存的引用进行操作。 + +这样能在一些场景中显著提高性能,因为避免了在 Java 堆和 Native 堆中来回复制数据。 # 二、垃圾收集 @@ -751,6 +750,7 @@ public class FileSystemClassLoader extends ClassLoader { # 参考资料 - 周志明. 深入理解 Java 虚拟机 [M]. 机械工业出版社, 2011. +- [Chapter 2. The Structure of the Java Virtual Machine](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5.4) - [Jvm memory](https://www.slideshare.net/benewu/jvm-memory) - [Memory Architecture Of JVM(Runtime Data Areas)](https://hackthejava.wordpress.com/2015/01/09/memory-architecture-by-jvmruntime-data-areas/) - [JVM Run-Time Data Areas](https://www.programcreek.com/2013/04/jvm-run-time-data-areas/) diff --git a/pics/926c7438-c5e1-4b94-840a-dcb24ff1dafe.png b/pics/926c7438-c5e1-4b94-840a-dcb24ff1dafe.png new file mode 100644 index 0000000000000000000000000000000000000000..c6cdfd77d1e0d23e71e918e52320e4f7ec87e5c2 GIT binary patch literal 19456 zcmeIaXH-*N_b;l?W2ajvB0)v4&;+Chq9O#OiS#bLONUUSBE3YUgMf&LNbfa4YCw9I z8cFCqgd&85v!nRD?>Xat-h1vH_uLQn-VcsFB5Uon*6i~)=h~r9RG>8HE}uJg>==!L z{G+GGj{Su=cI^1eGpB(6Iqjk!4?K>$K7~F!R?vNA5%_V!>VfiuW5c1n-nNscgsA(zTN+(*id?yT@$Q4@>_>%oyWE}1_hG}IvC4+rf%4x(Ls$CSoK0>> zp7b)^yp-X{Eg#CZ@j_5D_F3AahB1+8_Fqi=H24#rPnEIbA&*72pZ}4goPC_x6ySL&U*Xt zRpjbEk5Y#mCAOE%W=1!DFPNyDy&H7>cHnBJYqz`Ye0SHV`)<3NIf}`@z+FVRyrZpp zW0STgQodGqs+|1I8=tu4?#y7F4XuFWFIKWIbN^lpZEyP*|Mo&66WjuC4ZWP3i|cL0 zO)Y+vAiYrrsguu`j`cz1Kmw6~NZpUT3MySJY02!P;?nM1+`Y}a9s-qot7E|B9HAvz zC)FXesiTY);6D$DoA4`G=cg%aOurjjg-4LC7&RL{(RWb5e^6-g%nc4iqTCTBN8P-j zAVY!y!=*4NYXTmh9nX(KJq9ni5Al9qnb#>f+q2%Rc<0YnYsz4Gc`T!Z5t~N7D+&#; zJduaEy!EBC{B2ic-IIlbu+cn^IYxg=%fHZA_xltG@H}#gf)%fnYZL6HJ!#k_2 z_SS!Bs&ql9{h@$u=U#9QPT;PKbp+z8)6Y0snqZly)y-;c_c##bomjRH9xa(kmXL&0 zcDN3R^^aDL_P>7mq3zriF1`TO8ZV!83r=lTmFYS)}SR zC$zUBUODwU_OV}MJDC=1zF2-nZ>LS^BX0_f7F^=3e;t7)7UhX$o7AS&S%OT zqToqYoXVZ*X5YXZ!O#15xmIHFULyxDs4nzpL5MDsHFKuBS;&`OA6Q*Sa0+(|ue_z% zC){&*BU30gXVxVDd)Iv?YgoLLxGO9mw5Xeds(TMb1(mqKoACWz3ofarLSZ1eyhIDx zGZt+1uH%{6Ka*&2c;ue*;$V6X)`dzCrO7)m$a#UPU@zfoP#BtJ(KvHQwI?KEBA@K3 zT;C~{&?I*xdYMh&Rx<%=v$PwTdQ0f zk)X+#68chpq+c&re!}?n5~)aGwbV)`xPt`K7|5pcXg^h2H(5Vzfx|kRXtnNoFk*6@ zhE6R?i1AW2SbV9u6+^ewV}Tooh`KFTxk?oin+{QfWHEw9<*wJD^ePytFp1f`2jSG~ZfO0nC>{q1gxRaxPeGR5tc4XypjT9>RH z`u$*yz6A}pFL_4!RXgQ%ymp;ttgZjVWpUtCS(Z{|7f1f;zkw?*&(cihb4>6rg=>B` z&JM`C%4SUc8n8q?QHt4T?_GL!8jb8Js+{yWl$3jipB=<_w&)nVIqSC|VR=K;1O5|} zun*4PAt*(BA=yb2BB+ylhVG=&A=+M#@$XyZz-xD!HlAs^I!nFEbW?4Y3 z_U)13S-7hV9?Nyiy!HY60ZsMNl=@`1B#-{is=^{|P3GN@;NKxHPM`qa<=UXG20O?Z^SLeF}lD(`VS7 zkk5I=!z|-!yz-2BSPJ$IDng5UJ|SX+(9H*y5_y_3KH~f<0#ei0sBnsVuGg`ey!RnPrXl>!{`QW78!qz=;CamVyUY9Z6;c# zzrI#+On)nb+*=aImngoRUn{0}ISNV~tC-w(D))rd&Ai@9330V|)qyvQ37%U{Kg~jd zocN_PcVw3XWp%|Q%_^K{p4GcKZuf}u9**K)L4Lvw>eeeV_+T}!kHP}C#OolW+DDWH z0^O1zx8miuFRZuz>Mi-@bD`wwEtm#i*!Gy2EvOA-uNd&{iTq6ODrPqzy7=n_rqIZm zJmMx3%yVY^8Ar~U$`p^9yXtG_J3H@DSMku5VjP-bArxdTxOc- z0>aPoEdzwWDqk!v^M;lpzT$7XP|&5^|!6jle%?JlIJ4@gWw)36{BiO zuF~AQX*`er7CW74`0B^{p5w52J-c7>xK{nKS{znBnQADGV!r1*0&`-9Q61 zCP5!hR<7dc7-P60X*+|~9q+Y&#xgs8hraWc&c>bbtmaI1wmWiZ{Q^wLQTJc_@sF64 zWC#am2*OX>3RN>BcCj>6)^va z4{h>zSv`xSxhRcrAZB-5&ndG{_gsJEmk#xDtVgMfJYm#iPLj#U-H01o%gQb;I8-}@jixFB4b>2;eba3M0L{9A3v2i z?Z*f!EK&Pb%F%B^TMu0)FrV!YnX)$8&P^c6jAtEYzL5rL-uTjED`%m)>o~e_S};tZSK}^&Of1&z_|B(_NG{4(UCP|C|zL@dfSd< z%RJKVN1cGFMI^d9)^=5wXUxCMJPO1)Oi%ftFp^eVn>77wRWK^WU*oZe!=H#QNRcsV zN!!BG@)UyrlmBK+`n|)7uI}zJ`05fB5J*(ds;BSA?ww|25I{`%?N06(*X}<&%G+Gi ziC3Q~KvBhGAl3gk_`iE=XL+wr_X(#L?hKl@vnJTm=zU zC#-Al32(QTnN77UXjO!K}DD)@m0g;L;b>B z9`Y*_U9xw=C0yV3XznUqXWpOPJMd!rnsrAdRzI6PO=ZxzM!&ivF_J}%xcn&!+L`}n zR1Oo&#DQKbRG_B{7GYF{J^7{Hw~9|ZQ0Wg`2;r?5Vk?mGAj$84YhSo)IjA195^h0#rptz z_e8EBx)~HM*sn#4jeJf`TMJBx6oh`}q!WUyjAbEzlCy5{MBa)IHnqP<9A}n%mFPjd z+wn{8UcfplyJ6H3YjNb27PH%oP4Jx_PL1e!^oV$Q=hVhRx=(DOxs86933G(@HiqnW z*y}=E2+_52)Bo^NCrsHPFuMJ#^w)!57W)`h0OKuS0o~THkK_>sg$IY`Mow_DjtZ^o zi?}d{Nf7+WzL4uA_tul|(~S1>2KGy#e+{52m=jG58$xxDWYNr@H?lGARam{*qLl`SBb?t&Vk(ndV)~;@+9^hhzDYu@B?f zt{2R0Hk;XKl)ZY{#+&as#wttQlA&wtR94*o`NLk_%ey=LC8N1UGT^z#M+&ni!i)%g z)n&4`U{(Ti%SQ`|)mYKRK_B*zKvQS3tYD8c;39CnAs97?i!S)auW47W!4G%g{Dt-8 z8j`vNAd0LJ&=Frq8aO6GnkyV_%Yo2?SQ=hisB_9%a)5zzTg^uIQX6_!lvPVs6KN=7 z^4fRZ2NRP{tWJ-C{0xA+fghmZW$KfFAXGdBCwobh95fAw(i-!dfzwjBBf0jAwWqNx z5D~)$mNFOcsV0Fk1N?^jhLgCZE^vygCjqbrj%PBrvdZ?|t;LkPe!B)D;`pxUqF~gQ!8caVK_FM$?|FB$I%W!iNO#MYdk4Y<^eWiJUZ>uq?CfIQ_OSjG zzua=qL1$0f&gwV^g93PN+zEV&Bd^N9yt$9+{_cVy4OW2O1Jy7>95+bTvLQaiTL%+CMOGVZY`34d9?eb95A&AOzwV5A4f&FGH8V#@?x#wp|V@ASQL? zRR=S||GR8OZW%3P?Za|7o&0>8*~xH@H;?7m2%LbnKijK>6GfAflA?RyWJ3SQ$W0^? zxw)tc*OT6BSN&GuFg~+0?wFvQBGMiyI;FEeyYl2PbH9xPL66Y!#AOzJWO9$A%?PHg z=LiCJ_N)buV?Wg4x_NW97!8UkDB!DJt64T5`l4xZ940_+d;o2ibv8hi1;%c2Z zJm@*(K}hd^&NHr`V(}d_KHN4ITo-QVmAkzDZ2 zn{ccz>9q95aiR4|Pt0tQ@bx(@;B77)p%-q>Ajk^{^VP9(i)hbLi-dM%(MfY!1$JrQ z?^nK%`w;%-#+pg#2QxP!kouoV^ii$phkNOwqFdzgdXoNL&*6b;?O=c3 zp*4Av|FGm>rH7m+uDzKJA?2iA2&6a;z#`nA>zfxkm8q6q`*XC%Uu(*jpj_L$c~@GR zFP%6sKLa7-ASe9w4w0xcGQUP6?Y!$&e} z^~)<#wRQaPvSgN{o8BCsSiG@-R@F_52v_xh{_-5nzqozZ@|L%LG?iOCm&EPc8 z9(@(0{&~%sN%~<5Hv~Jjw#p&{xb~13qSW5l2+DHaz&ix3IQ^j$w6^td9&pLq8zD+c zKoS7tsP#SpqR1@8)}9)p+Ve^m5UzsGj=3~)<@}zziib_4{@fkh(krs$$Q`6Q)ofw0 z=*>bjO+zSJk%A{C&2$)(OZH^5NCe2Ct7N(JRnYQ!QXlQ@&*{O#KIqv9yVv-Y5VwVm z+iqj0*z-hZmg;by!^p%_oLypyic= zDz~NdP-PC6R$)xd=fAQwd9|y29x`4b5F9pPd5l&7{?Uc0FS$8NkKm@ji-NKnPqx2) zeUUl_qepCScTUsHS$!Zb%FZ9W1&|Nni=cVAkCU%^^E#tEI!^f%n7b-wZ?PpsM%CFc zSz7oyW|tYQk$942YENf#Jg~hEJ-NC<70_=oJkG=Fp~{#*=)P@V8vH6QaHzk60%4r< zkNS%HYo03$o(rcnEiHS#>X{A~gYX8BuUVFNM+I+JWJRJySbW>1j1kz1HpKk4mW;D`0m?`^+m`wzesc3vPju-=NaUGkG?e*9N&JgKwH|w!Nnwb3JKATj3QPqb zT;?2hT~Ji~IjiiOavYMuTUJTY)v}I8n>{%^X?jogL8ml%M1?PX>0G2^}`XomG#=xQF0jb;%FIgEt4d_pYr@54{R|NU&l>>|cL_Qg4VZ zl1*Ca%M4_l>E$MuolL6IS5==rU$bF}A2rg=9WI@AT9n*{&PX6$^YK;RFP4~j54|?&*qLN>90>shtNO8vlRFBEXR&=e^_XyJ!etBB z@N+e3GJ@nr7G1Yg^(6`W)Fszba)C1AYkqX8g3p_ZfOyOGuD(V{!T0ctrC&O5AL6KY z_@R1#DR(utH3*iMtr(6reYA)FF2o}Bi1h86jXGhNHa6I@f#sRiOz*a>)Cl{XC}~EH zo63V1=`w?H#rj;U)<$ZsKgEhxupiyD_juZ|eXi4Sq5ad2Bt6W-6gNZ=?P9jnyug9@ zd~22rX|&pLs3xV*Hpa+D@1b)&>LbdBEh-_m=*E?0E{YWW08Dq)UdvWCd_UXcv6&2b zcwm;ri>LNy=4ZoQHk@Ggp}p~Vg+BY!q2Ol$D)R7Kn{{o@kBq;z1PTde8bJgkZjq$2 zi0X1!X8;p?ZM5v@Bk+F})Ho*6P1lV^Pi)&2vJICQcJu zyfj}{=n1Er^(MOKmsP-)Z~es34a)+$c{we?*njlk)z22=1KFhX^h$MBR%~(FC&_u| z=Yx{-#mv$oU%k^K`Shs^lsULm4o0+wK`NRZKGC?SF#t9ANR;6B2d8AYt0!#Hxuq~P z%7e!oZs{W?cTDNEsEfiw(JoAB+XZ_3RAY%Sr2}zwbY@BKwaGdE*o-$V$rK~qL|Di~ zBpYAco%Bpk?f(hr)lltN%~hnjLSY5%JG73)OtCgJ3~rYWG2q5rUMAH`%< zCo?h~?pS0A2zl>@foqrWT*5a|6rM&h3lA8!Joek7aowVBi*-GjGlb_y(-CfdQBgJZs2<4XbO(u9abkyAFsQ$Z)rqnx8dW4_Y{tP|!3ZOFFa8 z>n8#Qf7*W+hdS-|e10~+-x)T1FgjkC;40-j3ZxS6GxoYYQD*)P6HZMu z9*;!;L+zM+voqH4D;BB=t3j2F8O*XW8xmwxlqE0L+&5d3Pw+Y{rvm^REVhp>yW$#u zP#8*zgCx2*a^jV+GI%NX#-|ePK?DjP4@eH#oPlD|C1)kFb!1xumdgb)LL8>vddT6HAC?g zY%udPP9I4$@D|-#6X~f~!%T9n@=k3v@{$B`V$_CJW=~cFSH?`iDLnm4>`b zz8a?YKyhT$6HJ3rAXV%J_BVk`Aw(fUxGe_d_j~slt^;@G9%~aA`Fq6#Ij9O46j<42 zRTFQwE$P>oZ;U3ovdXAFu&FU<>6>y+qM1~Z6akeJ23}^jeBVv!4|ZDRg@*z=tG0#`Xz{ZNX%^Y*OY=~v)9mveG@nMZGAq7(g*^cZX^gtZ3#YiNu0ovb5f8Rr}X7Q}PHdpu#6k4G@z*+7OC5CFe+6%RZg_B$BcAA!)zJ-o8e&)rgMw!Z44O zF)rEh-CL4vQlyy`8{uwuUMns`Cb+Yw&kP}DnQeX=%fLXmgSWm08b|?ydcM_>Tw4}6 zKz5c|IOjt$X>NXw+juW5^)1`)Krk~9rsUWHa|?V{E~dnQkhpcd)q%=V5X8j9G+WZa z7enX!UD|+f!-U|v(XYrq znlsvnfC3S%H)VQ$B&sADx_fQ*TZYw0spA*>nZ9rheo)sLE9+E~(DrY@d=iyKh5e{$ zwmHJE)*}gSux+v&7dk}oLeOsU>?n`Ppquo876VP6BGDV(q39cy0GtYW z3ouX<^9wOqaQ?C+qxj2>Y#c-%ABevl#i!&(_FvaRhskX$_r+75_;zr)q)7~KkQoR2Q&p;ePSifAHjjQb1S=D; z2Fl)VWz}2Fp0TWNH=CVj1^Bj=$(}@IdSG2QmuxpvPhPHHnehEbCCt2YTQk{%xaeO6 z7a|vpHe_*qbmtCx-8TH{KAX=7jUi=$bj)6e7T2Jt^r*L|TN|DPs%`I!BDY|m?u!@-hvy=_7p z`#*~IX@mvwvQGx`7pbq&l&6)gvEU*i>c_ox_DXQP7f|Jam~K#V2K%YHQ6f3tdl26T zWshSgZv=a^`#$`Q+wnG=d3Rv@PMJ)|e`NROWXlW^!0QN{C+*T8Oih!v!_cnt-R*5{ zA$!o-0QQ4tc%nasICax=$}9U|5<^Ng6g>Rbp^T2wWan$lVNl5B-1MF{FT_xuCYan& ze-Q4wsA&8aNN)Ewf*}S6{(f+rsJ{&D6|t*@$em=rmTxbA=XiP{(9TlDNT{FYR&F8c zPLI^?yNJlhb`AviIwhVctE^0jCBSbVZqOY*8z~XIc4XSH41~NW zG@`=aV1Iw#yeCa+^Cu3GLO*y&0#fv`0}dxNn`h#!y6GU+&X8#$=8!CZC1|L)%3)lD zg^f)(`Yh)^cB2`bi^C^ljOMAoK3;k;s4eR_QPnr`be^A#kG|7X#&0;FQEl3&%}ZYUi`lcyp%(`#gv@r!|4z6L>g=X0W0U6O8rF39B* zkXT&biRUo3+itQ#B5BQlku4j8)y;Jq3U0K$)Iq?<@p|?;zu!CI%Fz#sNOBq+-5Y{p z;vHxDbf~phgA1N0T|^9}PUTKnDd4}~9LQK4nv>lT6)8J<*^CYE-dk86q}i;MM{cx* zh0VmEAR7I`n*}m)zBx1WeyyJkHUicRw2S~p;RLzf#_PaC&=HGaMH;QLSiwl}(yD8q zfqCuU!Ic5adJo?*Aee7boJPJ4u8#+v8-etF93)Zj=9RYtfFjJyq)Z(U4)5I|uGeVk zL1qqRJd(V9l=Hn=}yt>i^bd8XsT6`UtSaUH`NFNNpj5()e+F1@}+v()A6Z-zFUd!z|Klh zwCk~vTsKDAzlKk58*o=*s#VT8=$p&)!?#`-?#PXjdL5oVxwfdx{)Ays2Q8^yQm+if zS(G?qipChX{Sgk)+b7HIJ3!*dSAQRom%2HVNqirZ_&WLPxmH}i94n6Jl%~MNZI4qJ zj*DRh^d8Ek4Rc}lSNowL(&}TNs|SD#0h*WNb=pg~^GUPomxUX2^hN;hXMD5EjUltR zN&PNk+QAl?{`EaqVyGGxx#fQe`)E1#jBb+0OgD>;@YB;6u5t(e6I?Vc-)$7nipYVq zYko^hNUmGC`)J&-$6lnW1no7n1SfGD0w#WXJh0+D%ziF^-ktv-8FY@v?%mr-i{&TF zgB%el!4@cc@zveg89w1cg_8?(jRdWrU+gMfE@{n#)Fkw~F@5LZ1tDdoGiJ{#fD7Dy zYmM36A(LgUMK7*1+Di^}gZNxEHM61oM`=quB>1VWv zU^f3B=gP@;7O=o6(~w^>?Xi6w8m#&7LbKV8FjKR3s?ymgDF4NP>G&VM&`j=~5Of^h zFJV=TfX*v7Vcxxc*(Gu@GI!=%1#iDl9kgN*B8e3!0YN|<;}^o9#C_X>!IYE>i0xol zXF+$Hb88nTv)AA<70S2;Ru--8kSZV-Fd!-o!u7=501SX z5_8f)gTP|n;RcTtc#Lp4VE(?T!Y>YpyXH7w*sb}#tqJnlg35*yE<}MpRX$|~3P4hh zq302!Z(x9_8V2g3OmuC+`|JU2)nSi)iaP)zvVSa|2QR7hq`FK@J+#hJ01vZc1p>z2 z6J)sZyMO3oB_{C;?6$NKQ(0l?Zzg(cPqBTdR)#n|IS_&4_Z}|+Man798*YIFR+lZ1 z4_&L_%iMIJK}+*$+LULx9(t&R_-Fz2_Kvy!c1bjMqjuD9g|p6jk;5!%^P#gQR%cV@ z9RW z)<5W?iaKxP2EMcH2kOdjLHmKID%-#3HjEVV{5EdAkB_ShJU8ew|9km54JsWjUuDnQ zf8~Qn2N!i&SO&`lgyyg+cn*pM;$po7UQpb6XWRDz*4f8wjw9g|$?NUgf$L+)k9NIPti}oYl?nWk zieI5jM|^EX60FWnKl`9?5*bqcG#KYtNMy$AK#yEv3j*26YL#Jk4)e4+KbD z0qJq&`CZH)s0GU+(dW7ReXm~zjvo^UTe*@P+n)0VE%y=blfrZvKq*NTK5RpVZ$f>j zmi+XxmN#DO?yl6?RbR4?YNOtR)#q4dQ?!}t zL7;`%`iV~UTM0RTA%PR-IvLh?@<^gs`%ZZWk&IMJEFqna?r1kq+BuWA&g_?bMB=q%|fG1)a=OxSG9i&$Tc9qvHx-ZChE zP(!N%^|v7|i)Y5OFOFW#-41yt4PA|Y&azh@#qgnbrzKxo-@&+f5q_Feb0L+x%NRy} zoYGS;kkIY0A~{PsZwwaYh*@It%O?By`W1Q> zOcGp;+Ulfu{Vew^Z7`D8FW64~Y*4Ww&=sHhtKWVeXpIwa=+Ey-(O4H2voOQ002PF) z+hq##4bI#C7X(WxCl6d`*~5gFt5Gr%dguBp{Ce$snyu5zQp9WlQ0j3<@~U0m0BKcy z+0Q9pH))+Fii>lc$(gV2V?6tkM#uhqT6fz!Db=-3>tI92$}18d=Ga)HQOXiE=SobT zeR83{GmrWX6b$e!oCfdRJRV7Gc{+R5j?HI~ycGc;wLbk3(Ou1Qr}B$U)_Pr8;kkZN zS!Lm!)tID!Db(z(qcg5cF2(q?HB6v2Ik|U`!FqLhL(FzZ;c;QHyIYtBYQedhcJa1 zs-E;u>u=W00yNrDCFiQhbln45q-l2c{%=9l9S$-&@Cs6Zp1IJ9ldbRh7Eh795cK1v zzOv9K_m$Sm8|K8yvY`fB%Li&VJi%XVBpw^q`(pHC+d-tM$(Du93Zcs(WPbcB>3b~i zo@*R;LwZkc2ZzMC zR#~14kTkRds6Rw=48Dj`{be76cp<*4H8iSM&vkqXR%S&^Z=Xjf+yE`BGGdEYw4}%; z&DHI^*YV}j3krPrAytzXXiqq2}(8GlForZxnj3bGjuFMzse zBukBh9rk~0(0T4kFQ=`qqMzQqIaS!wH0xU9-a&T>#XjhQW$ zoTg$^I-f-;C%^?P-Bkc{y@Yk=LuMK2r6>8Ey88WNQ#Bgnq@u zp$+0XtEw-nbKq!DkX2}-e{uT~yhvlG2cG<*!!8a?D3@c*rVd0+l3 z07)M3U7cx!1>?I6;s(BQa$`eoBOy`h(EHz;f-E>7mm(r#fC|G-LTas6!z=;~&{z%% z=0mq-!qW_ga`TyPW@$r|7aGpGhQMt&5DGYfAJ|u&Y3C;Lz%c*M-0^caKX#-ANd9VC zEc{j(?9VC;V(~KY2kgOriBC~P#1g0GHFs9BB-=kUPGxhqM}enB=80=u&bjC{;6BP< z4_h94!t~UTLET-7=f#(Lis#K$6bn(p5!F>3 ztEiAZhEr4GE-$HEUvYuw)r=zqP(#m+fBN>l@P6HIz_MbjwqEt(v-yNL;_S{cA)tS_ zefH071XVQ(w67h*U#2cU(0BwG9!M&lc^>JocLw4r^WL#{JBbJ~T zg?8dO67+Z=@_U6^(lRc-EVfns**`j|>dcg#nvaRxe%Gplghd^!<02INWnuHV5>m^X zq`&raEH@$LFYUorbSQ~4_XF<9t*E)E*RSN0z@Q<1AJ=mCEiFl|GeafhILzXXY=j8) zH@W?l&n5>$)dJVf4`b2=0Hi+ZZo=eTtN;3?f(oO4{~?ZdBHub710R$oaz_}%9Q%t^ z5ANHuZt`i}*{>KInVY`{^Iz=83Op|>@8oPYt6BdYdpvL-+!Fu_Bo5TcMO4A&eX)3E zomL+yeBvV@W;K@t#rgZjwgg5&)*FKtkTgw|a?UN8f-dYWKcs$s%jA?+iEa5AIyK+t zRp0g+uQP%AvWrkEEo{ZP1;7Il|E12K_n=?bbnZ6R^*skQ*9JmY4khVN75e%RpB>VW8b71HaZ zDnEwoG4yH4FjdP%AJjd^XAk>33Y69(FfR zidgyUom%IUGHKP9o;xdaduMq8+FleW9!f^f}Cf zX3o}3k60A01*$5rX(SY z?f?k8)r+_fFDqgWcMdM%Zpq{j>ms6g5f=X*-J`dFJ0~=aRnhX0t;Z5_G-lXh(;NHi zte}==!C%SQug*jY!kNl}xWp56zcujLEfC2%&tIBjUP=o9ts(!0ym5k-|BrCDBlI@J zi{jq?FHQX)Ah)9pW)8LDggw{ZzJ$^?dmoHPjhHq)rew;0${hJ3ATK>dpc(DocBq9F zNceYRK<&n0_c}0l%=pvaW<+s+d~Y=FJHRKt_eu2d0229)Tw4$~Ot&|$XvCGD;@Q^g z>R2^GSYmbAFJ^NgXy$fqcJb<)f8`^N;iXFQX9b0jPD2hQhe@NG?$#J7?wfxXI_~#M zj8-^mpte=4t1od;^2}dtHWc8G?>49~Uh9(kGCT8I+)X))g<>-oqb^CfZ}7e4-dc-n zYIZ5Eo2pl0GMgkVGS9ZV3vQUgq(;82dKSby9A{+d?_igDmVi|AfVibx)R6ZcIIZzW zVi?~YyW%*|2TQV_5Y4NQMPkhK&HWzmj+a1H3V*!#?`gq`h~ug4A2TKws9lK2a_{=~ zeaF4OZtg{$j)>vj=8HV-!rNEGG?V8Fvt@Y?pWBR5^{i}tV)FRb{_Mcdr!5bc3{_l) z;rrZeM{_N9T`~N;*?#UiB1^l(PJwFrcc@puY6y13P1UqVk2--e9R=(BF90WZ`n8lh z%B9P?@LOeRBghRq?^{KA&W}A3@@4YX5qF=1;`d5s%PzBduolRAi1X zLFaakyTZUL8-Htm-ZtiL;@)DE0j$H`H*M6bkVHHFlg(xvHO+wUzjx4eo8`N`OkdUG z0{ijnQcXVQDdbWP5XUkeCr~1l0V^vkoO_I{76%#{j(NR+**^k+3f1-($j=tLeJn|E z?z@6}0cQP~X3xcOeQ6`i;M3=SwHUuS9fFo~tH$D6{&tCss{IeB&tJ#xgRX*D`(}Z< z0R6h;`I^Q(8gXv~@-(jC>rf99E8-5l>UynSKF)U3@46eE!ljaY@6onP)7(&?pW)c% zG5q%sK5a1hCx9?&H4K+Meol_?>}kQ7oi^7WzvIe|9(Q~~c$N8@i4E}>=tp<`JmH*< zZgddbvEA6_R{Ym1^uc#9NzuiIqTk{qrUnJ~Z3Kvj?l!N(Vevr2Ed6;NDA=|M@I(gJ zL@`2Fv$YqdZHghe+zUwzX10>!B@=|IBF zRd3GpdhY(c%HaWJyvuQ5ygJ$pxT=_!1a#2-S}vd)F}VcVRP-{-av7>fA`7|&^qOsL)cm7os{PQN9RuuY~SWrBHqZl@2y0^8k@NuXcQ{{+= z?A+Lk1u7LsRIQ@)QiJvx77&b#W&&&U9$7HA6WLyeRkOuPe~#_^Kd<2Zvz!DJ#I1AX zWdv2j6X3Rz4#`)p+b56G!bIWSqr8}-fegheM+5=nkkYD8;TXg6jsLZQtZIj!#x-Yh z_(p$g#(l8J2N6(VwQB-3*yZXl4&zbB$VzED{jJkuu-`QviV{(VHk0td ztULQn2f*@OL})AKhShA-QMcnSWD0J57Z5L;ONF3hlHC_3OVoo9pqQAOQSE)xsU>}{ zXCzo)0(EJ2vpbR_3KbDeD&X7zZda?!d@No0*x zYy891dNFSa>V3S!C`Y!o)BQgJC^y(@#@SI&wv$kAH+aI##;{bd!Y}n+q4-t)cx7!A z`0DbI-MP~$ai8{Gp6!Z@bTWITz&x%SfioL$F9J?~|pvv*fy{-Z)Qbw=0 z(QaemV#e2!*4v|o6}06lQjJw!I&&TI1OCP;YflNu8ZXFK!HyP`n<2j}yBg$_I$Oo_ zw`o=nGyRV9*STwPXkQG9}t zFSz4vom8}ABiNliba6Y4C+6o_G3zaCG?B8$3ZR<$d=m!dCMbY>00iJ)M(|&-^Sz#Y zTGmS5U((43Ebx2@mdC|`5RUofu7L!&cduA~GSmO@?k$`y%lL{8iaAw)5a}~hR*(A7 zjC=aW!6yyN8IQJQ65qJY_LeS>ifW2%F35giLRh{QD(fz4Hn;erQ1Rs%OzD5+bXYf3P@BaUk>=?b3Yo@Eq>)j)O>C@ z#-lt^%mnUK{x^5{KzZ;al$AU3&Z%_4%tL$J6U38lesNG!vHZVn;t89(KQ-XASOd6L z8n5ZzvjCrp#~Z2s+lb#OX;>}r8HFh~{+}Q4I$-U7P%(IL)Xe5VG(++3m&@~!5X?HQ~1$r@GcjKTkgXlYFbT+=N~2-{Fm(}e^&VuoB{1R z!wN?p=RZbq|32`0$o{T!-gVKr?)W3WSjfh+%B^lyfnLv*4$ z;h&+uni2kZl!4YvU9uL7&t5FGyTP@S+hcPn9_{U-$i4YP8;u|wtwR;J#AK=;g^JLclH#HOd z@#7*OZe5S8^7;eAOfF`{<>a{H)#Z;~UB|tO?Q1q?kLwm1sf#%QzQ$NJT#r22U&53& zx~R;*5*yR-leqIn7cGp4AI4)dmj_Fhmuq5vC;vzZs~W3w zTtNjNkoxh};}y`?W^}U6>uDSPfTjZvsb#vrVL}a)zcSs)cwv?HwG#Kw?n?}h{U?9~_%4vRROBAB1-@{3l?pbUU%HuJxZKnwBe>B^J8Ipd z@77{A$@eF0xE|P>bQj92feX#n~?3+)EEmlj28xxu0~4Dt0BDCVsSf+54kCq zHUCMU_Fuv<(Y=?t9ozbRR-~9cPZs#2zQZ(L!n`p850OXi9nMT*W6%7lKut4pT`ty z2NW9X{_7Q^Shcbd?|+Qg&D|Epmr;Fk_D{83luRDPZLzDz5}?|Z3NmjS;gy|<@^OPAia+N|H*zV_=L z)v*#KnU>5RpvlbEzv1_F)ng^+@FB3Xzf4FjkiGr-l#>~7ANK#fpLBXOb9j1lh=zc; X-A1B(z)C?@xx*G%*C`&+C)LL|Rmq>SsbSYgTAd5z%8wErf=~R&JZa5Qv z@3+tUo%6@u``X{W_WpxQnT(##^Ni=d$314Gnu`y$Sq+W-SYqMMA2Me{^Gt4*ZVoqM+-Bghc%M;Rkuqip~oO z$?aNEP8RNEwA+e3LfxJIsd9Qca(ZEU#?5RxJMGZv+Y1Nf8z!rGT|RQ$o;5xU(?_o4 zp^dSP1Qb=V7{P=nVciV)y2}F3^1jkn$!y4N$ep931gppp(-VFY$EBsatQ`1JGW5fz zw5h3mYrk}B{}Lj};I65qrRA}9eaBJS+>VUH5Jvc{7|oP}@EH~ZJc|JpBhw7yN#nlTlqfEcPK`_Nj5(DeT z(KS}6~d^D_UOk-PfcNaR7b|k~TZ|)wy8)cM{{CQOe!^=L?^- z%JnSkJyiZqrC14+9@V_xrq8YS<-5~v*57%mrQ-aT&u4u2i{CdS;aB1QqtRpQG%m}` zwY_aaV>x{iY_ahEU3+85wk+0Z8_>Tdl=DRiGSg=bJA%S({57TCtzq>difJiDJde8T zqG#>2lH#+?2C=xaOJ3RKcA4=~c4Lv~bJmMBopxh;2Wf45VOStg5z2=sTh#b%KHIZ(q2)+RL$YohXo#W27Ig@$t??rB3EDPv9oD;?)?bn ze^ik;azC~H@+{b1EJINQG#C#(_t*7bFM+~{T6t=@vEH)+b>F`;Bw}OtPD9h@qgdx$ zf^&&t>*kgsQN){kPHvZqho|;zm&T>z?7Ko!PA+S-Ny8)x?SB-;oRfTb6^@W8E)no7 zkX_#RZ3p?Gw&62(rwp0l1Wif`Kc}-Mu59-)AEq%>)p~^=M}Vg~423ipPh}cv8?e;m zMxUl9wrd2dg+DZsX-S-vd6Un)DB1XfV-C*zKDFw(+n=RdrCsdR+)8y%qE}iRF_czp zwUnk;lGCh|QMe@Ur+6pX4#jccn1E52G|lQ!rY5VUrTM;^((iy@FKs!9j(+a^S{O*ee{ zGZV{9V023;)@kg&8cV4Ywn$2{MvF8EvwgZHT| zU+W4oF^yBU|jR*W(0wfIhM%N1eCo4>8} z6(pr&-4>)AV}1Bs)a5OgoUo81nX2{f%klm!$$E{uVm!pJ@Vc+H?cl1rO|@9J@kRDp zXhEYpWNN#ma?Rgr0!335c!ecw;13zh8s7*v(1ZjOM4nM{j>6L{Hj^{S-IBaVv~K0c zyL|HHHd$V&?%_Z?-{YLm`dV;=)NS?h*nVVEJbypGWP1Om05{LqUp5f8?#;7gYJxNz zxYUD1r*#!PW+pslQd@lzCjf#BXpOZ$0FO|dx=M#22>U_uKFse~1G(h?P zC7F^OIsRPfLqm4^r2;?uyB@`8@rB7{2tDqzr)XppLfiWxQxj$osflEtH?}Xka^kA{WJ3f9+K2YkST}W z_@;Hv$GiQuYg8G<8@sNr9v-I#@^sfyhtxcyOs$DQpuwt6d1A^=R;9+STF*q7z7mB z3PAwH#&MLb(TmBjN)<<~#)Z()HYu9JqGU`H=yZgJ@ zcTcyrSSOx(+&{Ia)A+g~ai@2CJGx%Xe_YSH^>$j^_nk!GLFd-~`KTr8*=6q5$j^up z1l6K)>XMXFtoZpsm4n*eA1Z6~b!MGfoTB`EK2-*!hZ#vjLMQHLRd?HmjZ2>oQx+Bt z1!zE9cj4~E*tqM(o6S_K(5f-Z``*s2qeIwu7UJW0+KegR?9B#(MPc_i7B-QFP%RPv z*<1QMwB0OZvX5l4+ucTM(W7dXm8}$YIc!sQW(GDMMz!h|(74Os{&^;#;p#H%S5^(3 z#>Wt!bBb3VB*4X?CYsd$zD7|PoD6v_f~Rn|oy(t;o_s7i=yO9^TMH9AIr&3V$dDz) z#<{@rB0axTFj_BlMNcL{7P_B+QtVaFJ^VWBPR(zf^ziV+P5G7;Oj&yl6<+7?|0Jvi z^_t+Onoz2;L;v@_a4<_BO=J^XXg$uSnIpb#<6r8_!j?d$$O^ zpxK&8j+C;VUnIzdr(#xO;(BZN@1)kA5|>4V{`>pFJr<_=!~CF5{@%f`6R0`Qvif{*L?EOyO8V z>pb%N|6~%aq-7%UQex9N$7N@MJD=j3+=9JthrS#`FK>ZmRwaWZ77(iqhGXuO!o{dO;+dl7dC z0hVerCd69U@7~_MPXCNny8Q1m|Eb@}VR9U{GUz$`b19H6?~GvUE%@g2H<$2D;HJ+R z%zE)G;WA-*{E)0f_TD_`YX4JihQxZRZ|IRRUfr%+759AtrQ2kuU9SJ#Y*zgL$Hsj4 zb!?N`$H~xgD|1TTs2Zl+Wz6j94ppMe8lPmA&o!vTg1M$WEL>PuQQp)?*Xx0+zX zyJy0tUrBQ&>ahM_ANpU8LjPNW8w3y9eeJuXmT6@4QKYSbIB(1$z_Rt~PrY;WN`qmE z6Gxq+x9nifDV4B!k5JId8kgVHr!%a+-(2T;(xNESqu60AB|nG6zK)}+vGO!*bkUEh zkoCHk!bjmZdo`XDmZ`=?_+lFg-`r8hgPG#4;;vSC_lbKw0MoTI;Q%^(ne8)cdx#`< z^i;l-?)JjKy)&E)37%0iB&|<#H28J7+V?V{f1=sfNPckWP&4^wxARh!@vNvIk6%oJKl5?uBXRx1;gm~j~S z1FP73i_h1);5JNNjVog~^1`^1YwOT&{*d*pWfTzHs}OJZLSECSoS}}#4uk!B(YT~4 za?=mPbc!f6`9ZANH>hp{wNr*ndzi&k&by2GZSEI|RtDgkgHW?{E5HF9INIC>s@KSG z({XIUGBn;>h~B{l>D`l`6RdRgcY_HWX;J6rdqS(iKxGbKluQItq(ha@+b0&y34zcC z?e6C-7g-G?M>7JdXJ1}1ED6QqPgdx1?G1m#DOzs34zT^PJ*=*9jlA{asjo*`b-A}y zkGWa8B(Mm=Ah&f%#~%dkcY3aY+`2;JCznCUs1sq1U3YcU1uVF4Z#^ zTX@apyo8Hwu3!Dw%i>eRBNySUrFoWL`9d}QCc)==aB}Yiu!oAPnfFCE3w|jmO$p|4 zw-ppiqA}z}Moa2`?uJ0*EaiqhpK zB#QF17Gb01EC~A$JNoO;?$cdh{tlP0yex(-V;uv$vI1Yj4R``eXox3%ai1jwVJwG}jHZoU9I+- z?#RoDF&TS#G{lyPJH`|HIW6i9!pmb1_IE%u`32$}@wY7Sp^N6@Q75n^l_|0* z_`K`&;D3zyLqU*bU3ybk2Xg{N+GiJ3dAq=Ao=r(237fu71uU7a!wQ7L{xCs-J1{oc zA6XwGKbQYJ?*ZG>&fV&|H9dlMJATyfmjyB+2xi~QxY$3OyU{kHCfu}E+cxXowxdCo zKQ@n<`+GWnv>zXZKqZhGWy^@FJe_J}%WazNP>S+H3WzPusf&I@T{rbzSWm2E;FyAe zc?KgkXu9N#&kPfcD~Paee3Cs`MEIsHC(Yz!%Ut7Rzjm#+TeV}e#QHnA@UQdOxe#M8 zw^$kG&a0jR`xYpRe|xk&HqdK#P@5yamwhbunSUqz3xhJmnfOWXpI4^#SjhHsT(w>y z!Wgn4ydL<5swy%+9_gqjM1>^6M2OU4bZx&p#~hJ!vFjTsP#o8U@qs2#SBwXKF|WDJ zx8;1R+X_b5JWq=?G z9x88s3hbk?T5D>LyL2iMhw<7Pv-#dP#S&>zB4LOPsev$IPuyAfhGHr{M~fgG`5qe^nfCW&{VS-$zM z10>|YqAk*=egC=>CPczJM=JD42a1|OS0#WNPgWJOGKO5}t;Xjm-gyzZ_d`SJlP+?9 zQX8%41~zh)N%Iz9EfOX-g(C9TemmYZS1i0QCb0e)pg=&!(RWe2XGy1u=w)2_L525t zsItC&Pbpp#7j!zypvoh2Sz)Q&JlI41CO!1H8rwl5zxPpAH)0jCauduQf91}6(| z(r;!uRbXDvn%7kp7$DcjC@JPF%g5mu5KQ`?alh`9`dsQEtA1VdYgtUP$1-|kK*0N! z{SoETO32H6se1Li=g-7isyJaLf`G<%j-Bj|v)L6XPT- zPf7hQ2tsaLQr&;V2eR@r2ap(M(Zkpz6iAYPv0fAvnU0p3EV0xI@*2lgzwl~~){vPP=d zQ@P8K_{T7}E~e`&%aIIL^D>;XU+-7Kw^q2fPCDy^A2{cXr}y z&s9pa^ZQMK&j=Sf=RfnUmqm<%Hoh#~;EEy>j;l15B1Um=2J20Bv=t(IPULhRUT`Kq zN2SnH#J?^i+e{WdHN}>h({Jiay}aEIwmvdI4%iWJ`?46%#{V~5$Y!9GF%P0@F%%R~ zr&E2{gPR=iIS#kr&#mFYOcf|Nhp{ZuqLleS{Ap3dHUjd=7#*UcyNS*mJL1G{n$s); z$5lqwDq?QD{qTaho@g3`o1#C-;A&3K7il!uC_oy~6exBaVUzf2RbjJfQ#vObY(Klw;39JblDYl6Wi;oxjR~|95?09z5OGdRfD|fEl?Mzq)(lCL}dU za%%B~yU8{I3YnErC{TuIfiJ3i0}Y@56Zd5G@SZ_`eA>rHd&Tmqh2u8{k?#=v^4nRA zCaHc=0|JW>HQpDh>+UrN>zyD0jD{rkH!ksUe%}q(OABg?8~*H?kj2Fk0N=r>RS$OYaK!(PJ2TaJ;Htx+z^GvqCpoY0PJ>~JHhtOKOvKXcSiN9Td zcjOZL$`r+}=q@xJr`|8A!AUt>{4s3Q)RZI2Bvc#4yHN;Iff$i&8wtzYO& zHrX}9*y~>lXaCEck_ss z@EmnK-8pcbT(Her@>GW#NNMULf{$}6C^+^aq0B$A^ zz&_IVCp5M9!I-6i^ZQ7(=h;)=1d!YFv^Tzk~UN8v3OT{y72DyDei^XI$_ z6%Er9-LwJvh3x{z=`Qd6?kj1+5H=7^QBVevD6VMl%`%y2G>}k#?@l#v=s7+3{ngH% zLr9+bl*Vnq|NK@1SR1*M>2DuadnE{uzy4GeUAZdQ&$Ynqrm3$_3H*ybp4K_T@ApfM z1$&{HBD!1v?%HeG_7Kd8m#{K%V0$br3ggOzXexKF#H$MQ+N=#`GXS|i36p#r-->tp zEkTSnJ8er~nU2UKWk@(Qe65f5Q%|t{K-%26b#5C|3Tm-{^WJQJ1;v@_p-$U=o3Gge zf)Y4P;{rg9(7Lfpz)HrRbvMdZ-y}D0F@ts(o%CJ%b%3T}z)W{FB2DU85hx0b6PU2? z9)*2_dvrm*oTdGqKLuW*FlG2dx_wYk~z58l^<<;xAj z`7eu}x!pwmp4u0Rp!0rrd9Zfj+Z%O@toCHDW!uBO6GGOra!!ZJ)9|ae`ol;|+sE3h za71x1;$kCoVQW;L7H)mdR)(7AwBy+kyp^QHtMxNb@QEqgWTiew+@)lR6^DnzT=CG; zefg~*)b^YPtDvg`P4{Uc`I1cMCTUZ)ob#Vt?>REZ;3-purg?81zfy5U`Usc4gsT71;oP#<@JG9%XEkOsek5U)ZC5Ydj|kc- z?oLz(Ij*azKOvk&ACk5}TMaJso3xp!k~=$rFpZInBIBmm$;Kinrpu!_BFSs>h2WAfb2sM$QzarpAkqK`~Q9J z6EdjWJyv);QLOKzVV&ciBH=OOYWM3L0~wwn8yYVf=y;yGvZqz)pvM`vtyTOP;pKG4 z<^J{i_Jpl<)`vLI6-u5RwdW1?+Ww*BL5EoF$FNKzWe8NcdrLEVLU%pP9ci56)@{Le zah4_Sm=PcixD5F8v;BUsM{c7PGl?!pj`{VgQLaP&z7NSWofQJI%?@GL<fwfcQO2bNPzks0|VHh|+x(xL_{D@1#3tOhf99&q}o zF;}bAw3=%mZCVsgX4KQ3dAqpAvnJE!fFKFMi?D-AU+LoklI6PxmwaRB8!NsR_tXgl z#JKn8=WQSU(gc2$I&EqXcrw4MX!*dI&N6PMt-RG*A25cg_JHx2eY)&xrsGRgM2s9r zIozp|r~N+ISTz210TAG<<}Z8)$lI5HgUvU9O zrM(vnfMb{2|K7)gcfz@hgr?rL->{}WM7N=oL8<|A@ESnSq#7A8{Huk5?Bg%&mAO(% z*T_xCxBB=#S;Jmi{HH^6bKL^cntY(-T}&b1`~cq-EFr&h)hn?`(;PN37!+?=6 zC}P)Vk)_^Qg9M}Bvi)WOpdG$rOJ$1AoQj&o@d&Cxr&H#QAqKE&i&5(87=j0+&&y9D z>2+Uo5E|mlk%Y{sE6qz^bRHheweV&qFIhLxfkOny^tyajf9cW~z&@a+!hxBL-lp;A zWRT$9eA~~A>Y+Z2eHLBRHGlw4ot+h;(xbAY0e)ImN>lW%0-@8Q7H2E{0NicEg6Uge zDQDV|J!q-t*A|&kzfMJH=qXv~1vjIw!(`Sb){}MHYcz#8sO^}P7FjwsAtBKaHuZ-H zjT0=>P{afxteG{5!m#I;KJ_+%F;BN$ z@C%aL(wmKF)TP3qkV$IKYyGLhc#?|763)kIQIEqAY`I$*IAGcJg>s>@W|9SAyhD3% zm5xRcV-H5>w>F?jMnn1OeV&Q7Yu8Tr$zx3s(47}(P0lXxRe+H4^A-0+YSQ&KVT{P* z$HE|f(>bcsxl6mX!Y9Ym4?tfwE$WB}3Q2CZI!p^X*y{vn9kwP?>;&;5M)lMu4*C+s z@69;!+Z1+4P;7D#gxfCXmg$LhA&3p`otwiRsMv5=XN=reK) zVv>o;1tAv*vduHE9OiCTFIU*8qzxXqq#E8)1-I+%vyqs$+kB@N>ttIcV!(njI&ySX zzso|sqsH&QFdxl~hpc%&78zA>>2;UWT7Jyt#PNAeVdaIn8XtJ&HiYPV&b9iz?#=P~ zz;+1$m>%YSh??Y`o#EGJdSHy{CHoR5fU+?lJ|?m({yko#1I~>_o0wpgMLG`60E*y; zO3louyqu~S!ao9`@i6%j<15Of&e2I>Wj?jRD?~hSnD_Yiw9P=xfxBH+5pIau5c6!$ z1((RMAYqcnYll}3^3(i#yMm4*Q=h8co=eyJwb;rF@rDMjY}*6p;@+j}>v`BUA@&Dr zRSRIhG!iAoj8hohzg`hGtB1rT)xe*3tclK)pOwQpF2 zs;dr?%gH9%xji>9ttHF%k1v>-ykdz-?}+UqRq^?a-;?r)we59;IjULMLMqifqw<1O z?l;#2SL1EB%)AXWc6J4c-~l`j1_%`L(V!^~1L5CPVdXy_VZz}P{RP2iE|#P1(eh+1 z{|SH3S07?dva__}iUDsP2IgIlkrg8W&~IUpHFHVl-R(bh2eTSeIl7DN)>ksQtSx(T z_usItU*8U16%zoo7`-xNm@j!UQ^!hQGT2e=kTsXwA4nQ}yuEX`@ths+2O+6=uHoh6%07Xhi$+8Vb&1wcdI8tx6#=BI88J=e+jDVoTzQS5>++PGk`ne@vPT9Q%n$Mu*i z<6NtcPK$cXCne8q1~}^n`}mj0_eX^XUJj}n7A1anG}Q1LbNu0;?UTd2jTd>;j`gN3xko1sdvl{5mUTYLo9RppnnV)MIEK4fHjH4fXk;V zgPuV--^JI5SoBPIWc?-j57K~yw^(x^N6%2X&jzS&cQHs5wcM^bVSP3U#jKn&&2!;F zOtnw;=vt*-BB@gt$|rAc184BrOtd6#%3Rk{MpwA91UIW`2QAqzYek05Klik!4ip~d zF!LtLJ1XVK$I&XjqESJHrRX~P^{uL z-`O@#cI)Q{)j>DKm!?^BMO!MW7TNX+<|b`C--3Hf0s8Tw8=Bke`yuT_m7-+{CVs>#WRYQaDe{-4ElN#1&4r#YPjwNzW8D1JP>$^5w^txf={eh&+9#fax_pJ7peaKp4%f_o{&9|t&<+4L z7s2%$bK;D2oXeuGIX~wX8-aGQi=I6wA~wv&Sh~z{NDR!`&iKvYLH{bI+}vHz zO@}@&A4ro`%DKxm(~*$)dij!a5x1b%Nv)lB9pTNb?tm|<#Y5R}`o{5fVnui5*X*yR zPXT(lu3cfL7|?A1FQgbpBd>}?uc80Da^01eVD+t{W2n|>5GiH^O5fZ&C?y8_ua_^L z%&$>zOL-_7eRA|oMStLhwy=&_R)|dDS}*H-c+&ZIhucls+4tWm?VMw+L#rDTvYzYC z73i2(&dfX>0$kc>ilRHls=Dyazuq;LtP&Hm1Ha9aID-3JEM@hP9}@90K7|Y&k5t~k zsS3}~FF1KAIQiFF&Lm@hSYIK$+UX(bMpW8UeGbSbDmp>eW>@45R@dm-}#BHm$TEi0;P}K9t)<&d91tM z*E{|xzJ@s@l`O{Z#(c$O@{bsloG_x~H%ri3YPld#Et%h0!+e^>x7tAH>}%7qcV4pJ zyAzVtD6_f8$yu!Iu*42g)>!l7_@80xG(ubrrlY-UDdnR7TG^RCXnl`APIv|noe4X)T&6YSj7&TA)JnY=4xKKj zx8$JSIoy*>9FTowG$WRn)_d0UYF(f75hb&eNE2`p0MO|t=)WzLRXVaP_AxjZf+H?^ zBPvh%BlF&S=DaQIApeai-3~pwfCt%5!R3MnbLy#3$%^t{eh~qGb){ypVh^VJCjK#g zv~MmQH9#Es+;8k|giq+~)9gEU{F+vGAi;xqE#6!jX#aJkQ8I;6JPrD2n|H&wde24# zEeExg7b0_LsHudo*&=@>pGwet=`z`H7;Y_nw0&GDifb@~Tw4LStX%Z5AZ@R>rG^_L zmwlU=9`o;Ji*%1@G3%@;T`TD<{n%aIwLb z5bMRlM^>@|NE(gGJ2aW%&SB#!pA1NYs7Z+O=eTp9;>Zy>`NE32*!MBVB>=mm^cwoc(j~4ELl%Imkcr>uSL3Ax`0IZTmYNF>9KqbX z`^%Bszc7y}USc-pSXVH&_&p*`#PKsb_-a!B+XFmoGrrA`*hqLF1L5wl!>hPd=p{f} zkO4qBdsp9B$oyt*NqiQqTp~Tn-9A@zby#|x8o-_lx{YRu6f3Mbz{yhnTYv==0*e6> zqk*LEW1w00wV`Gw(Ut2X;P5;f;A%^`c-z0|%@e3u|Hbr6Q@B)72)2CS&<_ElS3%GbLSP^ma=g8~5+3r@inRhNg zBmg=Bd4GVKTx*zfrsD?41S);e_B@OL=LCwWQI2q{l}DW4j-=C~qB3#(<d2-Afl2qmAH~1H+=8j*sI3Gz_1I+dSq;D~uCAYhLq;6(KtZ^QlOkj<2khege1$ zfNU&zy5AyYls&RR0PtIaQusR2j|brG*E@!;H`jm)!zL%=&K@A-mf|WMzpK6}j-YK) zmEt}@mze-wZd8*nAIj)dvoM*VpJ|sGm%iT4XaojK9Tga1>#Gk}x-P7*M>->VoF!!z z#C(2L+l?0|Mgr4Vsa^KG0K_8?!VT`U`*qfIzdx^&nOIDnr($p zUlXTAWu!#`#8P<*PmcNGFWt>k%Q8_u4%bOEtG2c516lR|HI zn0@>Sz$^;ww_Z2t9n1^boei*#XL~M|1O%L_P86mJfInQ}Vht!50Zhrn3uqmh+h0OjW$xW8?8`T26$9c4Ums?M3T*9V}20JRO) zZLr8~j1naplKZdl)Bb^lR-v{`bxjyiwg2{`!xBarn$e|`i-X(j$@Qap@RhNh=Y4WxdRvLl4Qdj`==<$G- zHoHT&A5kOqlSVOh74ZOo8ZoYpco_eIl ziZ6Cx;yz1Zjn?Q|HhVlN;##&2s1bt^)2BV9TVwq^(3V397n;lLkH~ht0ME?HpRyll zk|nlRQ=EbDvizy%KGe9*QnC5gIZ(dEBdEk}gdw75#p}MqL^@WHlK4EXX7{DCHVAn-m!>@i~E!n7mkV%ul+RKe?)w3(0?}OTyR)IY1hv`S%(D>o2bM1r`jT?@Y=QJ zmmIlhMPvYFkkb5A^Mlydb+m;$b3CjQbvzH-o1{#E0_xHDf^fnTqXc^{>AE@6zx_)1 z^z=EtCcwj$OW*F!nNdJN%H4nZ2r`d67c_5B9Zm~3#P-nZVzom)(V%k=M_k(2;?xE3eC z#zl7_rTVV}hqiBrri8F2NpCglDg$=6w`Lku5j1n6QIBG`T)K_$i01Dm0wV z=4eaM(!I(y*}?@6HJRF_UkK!piS4pL(ExCWPP@d_F&MDXxs!4DMejPRo1o{efqjHr ztB2)tY3<0OE+@g`+J($?oR!R|RFMkOe%l9{(}*!EXz!0R_Wn>o1Hxq}Q+(z)M)r}M z=L=|cQ3poLctCx2lZwCLvju3V>7Wa=`&el`(o!fbN`-I;IWPvq!e6h)2O6UOPCeY% zlP4DL%;G@Z$FX1cyqCh?(3WZ3uxCjWRI1HQ{7-Mvz1c07!Oulld^A{r`OpK2Vh*|kA&4P7Q9`q9@{61##ipH3!X86Vi2p5*d z&YAsGRSmudF@T$vR=Jt!1qp#fzDKPNwC(xL{{|8fdWm3s{Ix>b-p(7YGgG-h={`}^ z*jwmYuHrHj7a9V!3fPi3j#aDnrpw@H%(-b8lQQAJ0RR$um&r#~cOmgwakk~Fg+6MP zDlt4YpWX^(xM@9KTfHEPzS#E|88Smro zR8QM?1jg6Nb4!)R>zPqmc~(&Q8j(VF6ONrm%=A|^AxB0}ckX_FJ<>L7LRN;<+6+*5 zQj78lfR673Oazq+}c@o531?@=f~ zlFV%-AQ8-HilWRoXnf>62>-+C+0MHY zJr){Foo3)Bay?lz@HO#yl6}%+fKt7D?+`7MC?6KC^^{t9XJoeyAkKKRDn~zp+FM)} zd5~f1GHFq5Ov=lB^o$u{Su*Maa3SgQ1Ve4|gA7b=@r}!MN431gX~|33DaiDvxu4;( zxG;6RfqBJ&)D!Xn)f03mBq0kky^$h8Jm>3Y?-eOttqa$D*-oF+JIS9+J3rTViZpQm z2==g!&&iR-NZ=Vao4?j}-G1~JG3w^pAnnj7I}v_wA^F@Ri>2%x%)?SFiu=X8h|!zd z^`3k7ouif=pnBdjaEwbY3yh2G;mT8gd4U_BayvfKWVJ^5Dn>#}J_&f#i9Y>_d z?^Uz3XNv82oMQeu>D$KWhVsVXiX7mqo%ku)H~#m+(jU!l8i}6FvLT+vpA%mfnvcyD zH2g}kQaNf4dQ`zMl&n7yCJ^`B5@N&dJJHr4Mv_r{f;HPe{BaIZI(Qu zV$vrmr1UwmgAhHWOy+lzd;L57XX;0Q_r4g3?86Gu?M>fZyP~ulXl!D$0fLhzgfbUp zQcY>ADlD_ALAqmvqL-lp)Bb93>En zA!!^+UAaz1E>_GkFU<}JAHQj%MP8poAfp0yClAG!kMyY`k^#4fU)pX!FNJxC?@zK@ zl9@?9d#w=C5AicN6|6UuPk}|~`N<03<4(bK+;W|A1N}EI^{x3p=m6q>%!2iLCfn0B z3Uhb*!~$*M0m5(q7u6`4%HeN?VwCDnL4U1lB0n$_X9NImFTtXqAOst5-BhOb;RXqy zK>>z}RPu1$B;#)cL002_pmhL$kpWmCy9ccn%ipC#fwexz=*~Hjo8Vyn=Y6v^KPOsWP>hL@#Z4wb~M%KGCOj|I7`{Azjl;mf!8TF94t2R z0u1UoGyXvLB`F|XZR?StwROP6a7-rt&4t#z0BDrpiDj#Nc?>qeZE1X@D_varLn8ym zStnJidiU(xCk=ZyHx5ryNV9Sg@y({^F0puz}Cd2Hf;IBClq+eC^j;K75=3_ zS{Q`9$*krK$54Ym-AM4$yl9? zZuuA8^+U(GzJK4>&e#|#R&W1_IVse5UATR)?b2U>YPRB|r$UT>I|fI)ZJ0i(1)mA7 zsqbB<3g>q178&#`e0f^A>=@qjIYP?nBERZ(^N=u0eu^YjX>XXSS@&8mJ-5+~scU;h zHdyxMX{=23rR|dTr+|6_ja?G+eB%iH9`DMJN3QKc@iYL9hf{0}+%LT!yK~9pqYtNl zr^4Zpz{=7Hrf6yU7@3JfImZ0TH6%Bk>rSp(wx8Sj970mZ9~s`^IQK;5b$u2gso=Kf z9GijXg|yeHl9=pIsmizP+oy#tj$`g&yRLDkJu*kP^|x6*bb6oKGorG`#JI#ne(vW= z4N(~PHL_-Nc2Mz#uSJFZq!m;l-o-l4^dP11?4mxKL$FJL1-HrK?7uzrT>!SOo$5R9 zCrNH>%q?+d{IgObk~~d3=dJig@{V?sXDkoXXb0r#Ay=qcl;f`A)`Xu}!|1-Z1eYI% z$ohP?i9+K!m*~1@WpQ!IIcT{%Evj7l^+cK7g_YGYEHL)YKKfn4T+?2HSWuHfulH@a zV!JcterqzZc93|bRGoVKF3fb`%kz6-P^Wz$HI8}y$aShu`C*UM&uVp-3WaHAtDgAF zz*i1orEiVITX{>J+OtN^o*fIC8?bJxo_j022*e`I&fPp8vv&@g+N%l>4+!g(IGwiV z9NPo*_Bh4&=}}0|Aw_4+)13|&g+1v=o7jo?76Ivhws#acR4G&cR2MBa&@RNWHF&Kb zgu-H`JQyy%J05Kf8@~Z3#`iBU0f6Hsp$Ist=?_S9%%m z9K!<~IZ%@N_*=oUlh>?q{H&v--iEI$6qw`iwqv(P-I$wb_o@5rJrieBxU_8oaC#e8 zyRKT@x=98VBWpP*OVIdLS-h25erwx8HT#iRw2Gr(F=Lm+Ht+O%Ua zb55sFZ60dRMQ`e)-Y31*iI?e871?dox7%m1FkhPT!dWew04t;9InifeiUR3V8`prMHQ$>y-*uJoOkoUzq$!i3 zpL@QWKzPr)v*$qBK_ZAev&PeTDxSTIz)s}f9Iznx0X+!Sl4**&*~M!yAu@^MU&?b~ zjW_1uH1V1X|E0!egS{)@)%h$yH3}`7#quUE9Vh>CH@g1Ol(Wm$@eu$87?H(yQ*W^-)h zCw-SEo{Y`jD0er)+r#C|8D@EmOZ9W_X+gHW!1jkeUI~S?@HT?yQ?jZ6??WlTtRwx7 zk{?8t0OBIDGMwsyeWOeYT20wN_E?=zhxZfrAehoV9b|3?pH+q z>D2G6^o4sS=R{1QZf3`Gj=nY3F$i&RwkaKZUVm}-WD6Q^3zgi{FmK*4AR=6I@yhbN z8+f(XKyt+nTKVa}F;SoUpRRhs>c+PH}z_A5Gmn*Yn}k zf5@Ru`9Z*)kLUzCw4GlkXT2of^D(W(*s}XJaL-&0X8Uq8UTe_5j+`Y-6cQ3RBR4&2 zBvIu06p5=4Mu&t#=}%bKY%?Noar)^>ZpF}Z1fwQ{>C2PYWCgQ=0Jk6Ar$zA-!7nIT z)#;;Lt|#A}&r-fuZNn@NM!39P(=iL|JRhbA)s19v#dnRtAWh?BC&uPs27v{B2>*~+ zSFYujs?bl*^DG?utKR0t%d_$eEf?nTG*a6xKi`2S3+B_WMwnDj))SO_Iz4B%1S8zQd$_bJTYA+WI|&~E_1l)1a0szxo%p*AxE()edz!+N zRqlc*wgG_~HnjUkxS2SRJOdm=<7LeN|B~bmR_*1)sToC3(?@V>Uhm~7YP>LV=}fj7 zpg83U>qr4brZVHM=pVN%MEMb4+WiQ-9J(+J+PxbUS0l& zH}h?$=+!L%`{xS#(0Gv)Jy4yY#M2DFy_$+I2KAGbOq4!G9ghotWL5egMBF?0=<2_{ zkqNMxGuK1-t~@p+792v>IsRIHG}=b)g+9xX>~^bBkmXubc=qM+5WIegUysK9gx^Y; z4iF>R?MQhtudU0|?GUer{AC;uC-=DRzP;TZXIPTt!Z!l==Dtr^`7DyJof%D5xy$VU zLU7S**YZ?#%Ag#$0r%@$E%JD_;E?2VX!?zsSwLHh>w7T*Mt~jT17&C%896SF%sID1 z3_UIjJ2U-@Bz9wd0+g2cdd|l;__ygk8`>)*oiA&=MtA6|+u4VL-lmf)J z+Q&fG?CZ@hMqG}q_pa;g6Ge%MNkBq&&0KU!Zeec*+&P>CM6O`O4^)Mw_% zBe9b07CAnF`&7%*o``(Jh>baeA(@P5)vHUltrY^#X!9k&_n2TGW?GLYI=H1d+cuHh zA%T1~Gc;;)n$YkUU>w~hiwdt;B=O(^?CpBbVz(xs_Q-a9 zlY`q6nav_(A|ynBD2Hf&Z{|atv#)xKQ;QsN+qI|Lf zXt!vaI~vkExtXG8Q{E#COK3sF9l&>Eu3A&Lbj?sGk={L5fB1fkA@I=&l&n3v|Ztm$U*68K_`VW%as)Bn@n zmxn{)etl1y&>|$HD2XClgzQA6W-Jj&l6^O1-&M3&L)OX8Fxf(~8(EWO$i7Z?#=eYw zW}bUS-{<|~xvuy9UDxxzzw7IETTF z^7J+(cn+oGadAxWY-a4XV%2Uh2Pj`22&*9J%2e3ppO;$9kk}g8_;VA#bUbOGHC7O+ z9J&-=*yuFdvvor_;YQUVP=4fRppI|0orgtn^P9e4{dC!V+x4c)v4JNE9;1B7EBRHf zaf2&^%k`&^Lm;y*c1aiV`sXoEMH!Kb9ibx}ai=S1qstnBJNiioq{DzkjOZT8Jd;0c zCz5dk8jyS(iGCru+*vl%&<=2oX4P7s6GEGVeLR-9wA+NMd$?mBxOFGOT zuL~~(BJXRm`9)^z0nvLs*l>HHXalbEf>#>cCLxgD+ek%^qpwjbz)b)Gxep9|eFnZG zX6+yhBN5y#ArMP1%>v`5(}>$3z{?GU5kVm7ln^=KVNl?-;9yl#^T7&L;{EIKk#4{2 zXeyGy7Xdc=&*!Ve$~YjB!0>z!RMe@JlaLikJ-uxz^70o%zUiMPF0)bwsD5L{&DcpE8S;P1R&SItshJV1VsJj^%rBx z0iS?FA&9Pn%u10j)W;}6C=lQ-Lh+LT;YnaTKW{R5gqqixgYc>&|5PtP+50F*MuEFG zC18!#Pqx-8pgT`i0(l5L`6In_ZoS?Aj1G{Z$NLONIv%Bb`2 zN6|uN*$)1LKt2MSEZ6|@>i;*tQm5L?ED`Zltr+luWSu|g{@M}1RZ1vCDuBhl93T`;CIkK*L?`7~y$#>R}*N)Kzk z$p+~F;0@&6`=o$Caz?&YxbKr#YZs%gf;*Q@tl$_lx4mwOMH=W zI2kym*aDXsbt(`>vVf5)9V&tVI5$jTj9(ouAxchzseE4^~gR;%ImVci6A?FX0iDkeq}N zdWgkedIL6>WAZ!y{0OWvzkna^|Jr7Yxwrbrt|i~y$A8bh8oy`PWK$=d5ijk0Pajr1 z!KJ0X`0ttb!MB=4ax}p_&S`3B84!td$S#3u(?pLcSeY@Iaj?}b>)EYMOsENhII&dE zq$hAmyR{;z`p^UJq_>yX9HcWWHWYiTjSXIDSY!symxA8tc8$|$Mq1Ki>+jy&E<$9+ zartRRDg4)dzgFemQiYf`Slpi-_2y#nr!TD5(Bjwfut5}txHydO58~!{?zr{2U)`d5 zf9)Yc7%bJ~?CvTiF7yK6mc_FTboK237;g4%uiYM$FdkmaP4|2=Xuzs*A)p|oztkbE z?Gs>KFTc$sY;~^`IKtjpebej0M5VWr88X#5_`dweRyQ9mRl|^2f!n-owcEN<7e~+G zwepHmG2UXnH`i+63g*i?{A5VL^gf$;Heb^Xb)Av2Gl11vzYkWb&!ubETxS+-^*3vY z<`=tz1j6W2RjY_AKw9uw^KxF4aqMYGGvkrG2r96Z{z2+m%_cZ@k1!^IOUQe-)dpr; zvrl9JCP&)ASal&`A40ta?CsW*j(`!e4@=Lat^Y|PZtx&jO#w(vhaS8tLp$e5IL-p# zvDumKtW9x~nCJmZTpX#;u^p`hN@+!}(`KP*3pnZJhZFjod_3_zIt|#=pN#)9y4=;d z7A#3&(PO3rm$B&C6Ay!DKNhS4+uUKDAxyO`$g@q*st@IO~X z3?B7`7;qAAvVvVUu8>zRjp+lc7QfYKUp^cE^!(lxT&X``~9Z98%( zNmE?9^ifD$xdLIWIi_bDYXd~k?5#%Cp)5OZr-X8s{dJt;GTd$0p0sZDBVPP9n-QW_ z5(FwLcyBbv;5u~$ua2hcap!4-33}Yg9bEgc9Wx3hzZ)1JSeefrU#3jx5{zkdpU-p^ zP(RVP^erye%aE7WqIp*z7h&L^r$#zfa@@S~ORvoy)Qb@i`j^Ja;^i-$VL2gf4Y`au zU-UhFtc#wx*J_D&)`^HU!fX321yOh@AD(JM(9L6WyB7j^6>#0peTmqwLuM5($>eN~ z-ZOU|x{?jeBu$1Mvzq=@(jZO^2*6HS!r0N~hS`k)GZ6z!0P4)f4l^mo&c~u`Zh@XI z=Z^-UOQ(xnN!Z->qQ-IY6D9p8`$Y_SkB$gi7SBy0xO24gD|ayC2rx`_*Xca>d;0e4 z7b4fEbKTm^eryJyRzxj(Tab?LuqDrI2SZW-jVzh<{*vKdwtPN3IG7{}_RId;%LzTC zreKA$tO4UOh@Veg_fCG?{#H@Nxh$;r&T#~j9y78Q7X&Ck-@VBZshRY26WLEjS{(Ux zQBy4TLYB_L5ECfzVWw8Cc2wB;P5%J-$JX-2r0gI#jW7RhvAA5}K*23T-ou2=EX3#ZIiUBOLMV6-%S0Ml)p9g(tdt zKfF1pZdu<*#MA-rshQ%NsO389ud8>UM!}zXV~ir%u!Q8|dzT2KTETG_h#u39^H@fy zb7bww0rPDo%rdWk8`&1!&<)yWDtX6o-`#y{xq-sy;L_DAry|)nd^aB>_=8Xe2wK9s zI;Tv1=NZMnJa)YgZN4_q-_$!0tP3T8xcdB-S=9<6aq2Ih-GGbD?Yph#M-LtRUb(v2 zWS9wi!v9yTs6qiH#4V59O7su1h4L|gAPu*N9Os*E= z#5G?WX7eNiVnIV0PhZ^2DAjS;8Q8m95E){!nTIK-RhOwqPKrhI2E>o-$_WMqJ&e&k zCbT#70Jn&sh1s|WorT!GA}`CvO~Y}_9<8NFm!Z&fO}rnc65cePwnEWx?06Xjn6=2Y z^>bK%K8OAEtq-@A$hm&aOHm3l$XH9@82^g}&U9=$|Jp|f7`8C&SSQQw#@u3T zG9@*1{{D(ijPr$^Ud^{%n~#GmQd&K#WHu(@tYoI>>~pT-l%}DNS;aV#(!% z_-Ac`&YY?4_x(xTy;QF1?jgae>tAisf-B=0hyj|Jt^J^v)jkao(hZOP(3Zxxdu{IH zOd*xB79VZW-rnQy0FUNi?uSBkg=l)zoIKE~o2q4QNwDoDF~fjM))}0-s##cWw=D;y zPqCW#ip9{-^( z;Er-dep881Kdt9KIagUCih-p`Y<>6u8*8(pnhTwxA0VHmak zO@IbycE`$bRhD{a&elBRFz`YJ{Na+k*a>cTT*aaU$~>0#^4y-5a|Y+o$D^?xBNL8L zZ>NQhR0h* zWr6o@rCfd+Z1++czahYvb2?6@K6$^7&umjwxgTDq+4~?ae}8SRp5mEcuYEXO>9eGO zRg8{+LNu!bH4LVeKRm7Ied*b~N`3$bF+v8SJ9Orw@i~T;U0v5rmkQWNqX;Jki&%>j z@w9j9F8QbH91{&6c>mr{T0WwnT|giY4*fd|kRvfGr}Vnt8w6`+COW^`Z7*obPNO;vWTFLPncX+A-2SH= zYL7kP@^nHXaG6R*xlOhCYRgqDG2=)}6>{Jl-`n04ZbE(NnhtW$0&sy$B20pnnv|iT&!5ZKM|a??`Rsbzfln)^M2by@mci@?&6a|eQ4VMy)dYthOa)~uj#w>Wj$(kG zVuT#8ZFv_jzO!fkJbBv2O(%C4Zw{8{cNzW%w!YEmSJ%Ua&)oo+h&C?p9fxmkW!XLN zEu~_&`I+%c-V|&3-)iy(Yj?U`XmS=U*N|tcO;XV2s%fbq6fAh{4ZOo!s7PV z(@x~8^NCmSO=khD0A3^BM7`pXN)%7xrtvE5`0NeCHR+9|k_lVxfdP{^mA4K;O?UU8 zM)=Tmd(6;zcjWlupZ(smN-9#}lUVIOjx-DhyPU|iq%U>sf^4Um%Z6JYw=CQ)oUhT6 zHxStw2;nAOAiWXkVRY0Ey8Q)QKm%g~%UYh_g5&7g%bt)Y7g}bFx!=Jrv~G9t!rF4X zNI^CgAlRQ`7hj`(W~H6E9%%woQ78<)lcuJ4CGsX5oa;MC{sE&kOfsWy7PqRWYOW97 zTUd>WLZ|PAoAY^S+H;O>)Wovf`Ewqe1=R>s-a(;T<%_Jy)RCw_QC;LX6{hl=VT(C{mFHjH5rg@_ArSLycd+qVsYneAHB@zH9uK_Caw2P)Li*GLeg=z zFY|7%zNboF-$oksM!<{`c`2ggW9_gEPsH=n-1PG%b6g!RjK-{dOu}uUr{?-6-p#di zA3BsDeSn~@=txjMPo><36ESk^>Q!b>I_wTnxE3hPV5?R zb17EqV%4Pgq2e5AtSv>>Y$$X$Iw6FZI{IGlJ^=QUnmVpUr`KXMVyZ7CubW+UfW?X; zMt67^a^E~1p~l`a2P*o|t!=g^ ziuT7z(eEW7!s99HwdzOo=Oaz3#(ycjHflVQ3{2ryfxY8JfoqpxYSDD+ao1*LXux$% zi4PV1O*G{p^uNmhOL!apyHo|h4ble9$qi|vy)}Gie()aK;5_K*J#_?@shO+y=_437 zd_aqfu@tGcRIm3m95Tysu*`skXlevf^pe;>fPxPG2kQvjR=@{jDu6);e*w}67zp4= zsA~X59ee>*1~}>9FK7bbsPn$s5k^jiDPEo35ah$HSIB9Z4r(s&WJ!gs%*RD-kMWM= zscve7?`BjxSXdAH%c=KnYuqH=a^jU%vOH&tk&Rx;3 zdN2jRNg^Gt0!PCCEO}XTY$@hQ6P5VMijo2Zhv|#b}y`z+K;0V(;_3%HqSG5x36+=jjE z52!OCx{aPoi(5_aH>wp~Us32H>nIGW9P2gwNAUQr5GzeHMn$p{_%QiL(E@zwc}p%O zp4Ah5;XRvP#+_Wcf&CsM#x|bk3Ee^$=WKWS=r>;(aL0YrG(G%#`sa5M4PWh{NPMQ{ zZ#AMbb=dFU6F)fgh}N^(2Luu&f8U5$ZNdl|K=ZJo5_H9Ef9*PN z_k}y?cR2rD=2x&n-Si{n7iI~Qf;{&QT5tM(8>6+o*vuQlJ&X-RePlF~AAjm^4U3|& zXP-0q-YM63MO5UJm*!=(t8F~(j5G~HU!23@p=QUuMeEJy3MB`pC+p~=*P#r0?fO}t zW6yuMFM0&!KVqp#-<_b~l3HlXkgv~~={5fJCPTIx|92a0&nns9T={)VEl*Guo1-dV zMKY51x2hD@2>2nM66SJX-=nG3lD~Q;@~J$s;97KSL^Eftnt);|o+188SpT$1#pF73 z+FZeRc&a1bD?@SC_npPmH+?twt@AXP)wf`Gn2p#ek&))}>DKGU6%A3c=(O z*u~Xb!bdjy0ZRCszg6?#Qbbfb|5`CJ(*B8nmFFIkvj^_;8(w%2e8@yy3pQ3jLD5KYWiveRVGT(EQNC769+a?Ua0?PP1Nv z%0J0Wnq6?t$gAVmY1Mj9)qsAEWf|!EP@ZOMR~F2bAZboN(UXe$ILMMHp6~tAGi48) z+T<^BfjfL9apL&&E({~qY4%b5(M2Ohk8Ca{lRt#c)VP`_@Eb5+(8N5d09>VgxO&lPrKUXBQd~2nGHH-e!kaTiF$Xz<I7?*mk*JaS}& zob;aJdSmDw-f^6b4%~~xGg5Pgh-J-Teb|z2vsNQqA9B1Z%!gUBU=NTIWg zNwWhWf@c632J^WfN`|yVOxp+$$Gpy*INB>50C~jM!QAxt+4qo zI-7y+nfiC-3VSCTW4n2*n%ij~W3an9yAw%7n<5k75}1?6hOT#-6ycL3y@G)S z;(gil>D1US!g#Kj)OT)ZKu=%@JU;Y-q|1l?PB5zx=*G}lxiatS-L);>ZxmD8g^^pP zA#)v`nQ#WF3xIss+}-<@doatVeM>BXsZ)&ay8tvGO=j8qi$JA&=v+5X%mRZHJ196* z>iu%N-xxURh+X;40}aTW6@G8l9-m0+z7FmcQDw_09ccSrW0I?nb-DRqqr|&8%n8|wwOfd>U%+4X zSXJeOjB``^<5jja)}8Dq+?cLjo4E3~6Q4%a!8AtYNu%|JFplgw%(C`GqL(gVKXIjm zhZEU8qP2_j=L4@fgWu=x;D5Hpw8GOW;L+2S;LYISJ-KWFU~mPq%Xe7iUw?F4MP!_q zF)i{MP1tydXprQAD$^BDh0t}k&XgcHPL>g?Gp5&>XRxArUgQOq3?QCsQd@qOY!~-c z5#}|0b-g9lbClF-mOc7!&KdJx5cmJB8EgLE^qyr6ZNL&nuwbF(Il6#n1UO+|6l`G) z%f2Mfx)won&NLR&aQM7fJKI($mx3$9NTZ>;G|9XM5UBPNAh#sve{CU1ZjVLBB*?OJg8?rA8ofq z$w?IXTO6#?mM{F}3UE!EGbEFsaSzrI!2H}oU=mI2BYl}}Pp~fGB&RSE2Z-(F z2(KKu*Iykb?p73gIk##Bvx&DqtC8JX=;}N{$#>*9mw8N5a2X85<>3zQJ<4slYO5Pf zC?WNV`b@XRx$u#bCG9?X$Kg}j+_uZcnV^0T+VIt|4w{CM*?LxSjGRNsJGa=nFMfYN z#&;(MS4SuJO|L~0l+vkQW9pg(@N@(GMYM{Jdw) zq2v7r1p<+(307+x;rG~ecl)3Z#hK8%J^4^$e7-4VK2JU7b4#F!L^x>?9Ytj7`V9+s zuG$$=wcakZcn%B$q}?D*WB1wc`6N7AJLnw$O@q8^4?*H3>%6kY*g((asy;gfa*n5{ z4Gz+TuNG;|fcVgu_q*MQRmtWv3b|(`HQ!c?wYSM0H~(;{&7kbOv)}m??yY zGk*zd2xQ`0=uJF9$+UzAPe%VG(bUJ}DJv5p?A>T)#xsfp;NI{5G5H*E7)`;kLshviy>#M9)mi&xr!6XGmrIx?QbXo z2-Ae@i;f-DsQxtWg#PNw3e?5qA>LQVX!F)a(foM7UE0WX2i$@LcoNet#nSnE9Q>>R zyrKP*lCL;VAVmh zDd`*!o`aS^G-bMojyOXERC%He4Hz#`J=6b-(R(rfSsJyA8Kv;8YPvPU+Ewpuw~GPtT^KRu!mkQ5GeSJzwi6 z!@Na~Xz7DoAr=4xb@TRb_Z*G)I)XP_M0HU$@|U{l!T#fxam^2u(?6l8VTw2edmL3` zbji$5PfxXZ@=lsFMKZIp311xG`f z+&ySO_9U;8HCi(~xAprA&^(#OaQQEF=m%?6hJn^!&GcJ{MdgS_jaICq(oC;OEXxlq zmLuaA5L<4?E_VZ!fI4M!irb^;@L1jhll*h_)32G1_?JKU@3VAVa(BK;`F-?_f#Y%l z8NSVh%{#4XCi7yInJ@=+zkbO9x0L_g_-)r?s~2Ctvwal{fXyS zc%;HK#=XDWeAAC%G=8;yy!K=#c5|h~9Pz5r_>_0Bx~jpwj=a0KD@MK)1RAbFgN1co z>FOq4GoN22`aRt}kJx&1+gF{GzD@V(l(zA5v$gdoR!$*nk1`S~Gv3ttCAMQ2t@OyG zk)^!z{ga6MS)2QI40Jm8Qq$*>)U@kv_)ih$JNNMJY*P!N@^d{br1-R(OJYseB>H0W zLuh|ya*zq`?=2XD9fQT7{5k;sw|Fp`=i>0F;C-(xrJ=t zRgEpLY0?Kt=Zj;vH5Y%C`(PkDi@gl_oxRK#nWI(mdAIQ&KnA6y=RrDhiUe}*I$UxD zG{8+f;pT}~(8AD&OoNzoPSe+q>>i2rO>$Xyt9n)@RZf}YMO6wk@4s*IP%#jLy<#Ao z>4_5K2xz(7Jq6CK)^XrkNqnGm0;$Ns!*EpvZKq-zOY0eIO&!5^+$X|iC_3F7;G9(P zAUQkH4ZDX^?9P&R6L@ppU)*BU3q@JP?@OBUE?7sl;%^snh?wxKr|;TiaH>Chrz5UN zP@#;H8(GWsO{tL2h_^5@9j&igzI1y~glWwASUz3{nqWNjQZZHF#py@RmhMd-Ob_o6 za9a-*d;Mbb>mE=YOYs5rJ4I*pP!u&|LXv$@T%d&~C(VPI!l5+=w2gGc10ML0YChpn z1RZ0geU4+h3oM|Yu91st?{W@bot8u&XO$W?o|5G3O=`LT=hd=Qq+)jX$tw|5S0iAR z!lUlC4DGVdRab~se$f_34+jh-h`I4y0neBGXpX}6BvanPp%8UnikA1_QFzaJ|8iaO zk>OPyd!X9OdrFZ2?0x=caN*~}0=91)!!7?Gas{Ri#s*sFSM|mQI!rYF6@n2&0-Cgi z6C{oceu48g2D2JN8}NMw@DhrI=LOz|fDs+ln z$|YyyH96lQ?<|}+4Tpv%3K_l@W&)l!MV=mcp|OEG>oW){(g>E2u)9!%SG8Vv+m0Sw+bV&=fi(r#@*y>wH(5mT&34|Iy|A&==e^KSI64(ZqAk&4!1wE;Le(hSK)V7%iF-Q#TS+(J*XsO@GuFYD!2spv3hnc47GaedG_f8fzn zRvM_%o1=^4AdYd2pZLu&?zK?R)ID0|X-h+%MHH$hTL*zrQ&KxA%531}P^&%*_x@D& zAf?Aaa}~J4{&+U*K9i71ToWYStd?l=-KHZc5MqFm0JOE_qd=A7zzY%^(Dx??!Tg?# z_>u@TcT#r#yrHu}3aDKaXL_3CODuEWNI^5DqB%VK4d0>Agdy}TwA9jb3DCsGNdn_A zY0sAgcWz`g&pOWTcFB}m)YM0!>v4W8ZLT1C|B>x*sYWHa?5y-|_&px&Yn=Fa)ccLi zAvmJx^6v(qkIL`N!rf=-Oo?-9zJ&v&A~=9GGY2#-Eh(1;b;0WGRAJUZ8M11P>EyWm z1npBbSZEsLu{Gi*b0lfeJwl$S@Z<4H%lRo(<^vbBKQ8w8@Ftg4i! V_~P~dod5qh|NnFT|9?FH{{a*g7ghiO literal 0 HcmV?d00001 From e610e0fb102c9b59c86a9d153f157866dd2db73a Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sat, 4 Aug 2018 19:21:15 +0800 Subject: [PATCH 051/172] auto commit --- notes/Java 虚拟机.md | 69 +++++++++++++---------------- pics/JNI-Java-Native-Interface.jpg | Bin 0 -> 39936 bytes 2 files changed, 31 insertions(+), 38 deletions(-) create mode 100644 pics/JNI-Java-Native-Interface.jpg diff --git a/notes/Java 虚拟机.md b/notes/Java 虚拟机.md index 4382317b..136ca5ad 100644 --- a/notes/Java 虚拟机.md +++ b/notes/Java 虚拟机.md @@ -23,7 +23,7 @@ # 一、运行时数据区域 -

+

## 程序计数器 @@ -33,7 +33,7 @@ 每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息,从调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。 -

+

可以通过 -Xss 这个虚拟机参数来指定每个线程的 Java 虚拟机栈内存大小: @@ -52,7 +52,9 @@ java -Xss=512M HackTheJava 与 Java 虚拟机栈类似,它们之间的区别只不过是本地方法栈为本地方法服务。 -

+本地方法一般是用其它语言(C、C++ 或汇编语言等)编写的, 并且被编译为基于本机硬件和操作系统的程序。 + +

## 堆 @@ -105,7 +107,9 @@ Class 文件中的常量池(编译器生成的各种字面量和符号引用 # 二、垃圾收集 -程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收。垃圾回收主要是针对 Java 堆和方法区进行。 +垃圾回收主要是针对堆和方法区进行。 + +程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收。 ## 判断一个对象是否存活 @@ -115,6 +119,8 @@ Class 文件中的常量池(编译器生成的各种字面量和符号引用 两个对象出现循环引用的情况下,此时引用计数器永远不为 0,导致无法对它们进行回收。 +正因为循环引用的存在,因此 Java 虚拟机不使用引用计数算法。 + ```java public class ReferenceCountingGC { public Object instance = null; @@ -128,8 +134,6 @@ public class ReferenceCountingGC { } ``` -正因为循环引用的存在,因此 Java 虚拟机不使用引用计数算法。 - ### 2. 可达性分析算法 通过 GC Roots 作为起始点进行搜索,能够到达到的对象都是存活的,不可达的对象可被回收。 @@ -151,7 +155,7 @@ Java 具有四种强度不同的引用类型。 **(一)强引用** -被强引用关联的对象不会被垃圾收集器回收。 +被强引用关联的对象不会被回收。 使用 new 一个新对象的方式来创建强引用。 @@ -161,7 +165,7 @@ Object obj = new Object(); **(二)软引用** -被软引用关联的对象,只有在内存不够的情况下才会被回收。 +被软引用关联的对象只有在内存不够的情况下才会被回收。 使用 SoftReference 类来创建软引用。 @@ -173,7 +177,7 @@ obj = null; // 使对象只被软引用关联 **(三)弱引用** -被弱引用关联的对象一定会被垃圾收集器回收,也就是说它只能存活到下一次垃圾收集。 +被弱引用关联的对象一定会被回收,也就是说它只能存活到下一次垃圾收集。 使用 WeakReference 类来实现弱引用。 @@ -187,7 +191,7 @@ obj = null; 又称为幽灵引用或者幻影引用。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用取得一个对象实例。 -为一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。 +为一个对象设置虚引用关联的唯一目的就是能在这个对象被回收时收到一个系统通知。 使用 PhantomReference 来实现虚引用。 @@ -199,20 +203,20 @@ obj = null; ### 4. 方法区的回收 -因为方法区主要存放永久代对象,而永久代对象的回收率比新生代差很多,因此在方法区上进行回收性价比不高。 +因为方法区主要存放永久代对象,而永久代对象的回收率比新生代低很多,因此在方法区上进行回收性价比不高。 主要是对常量池的回收和对类的卸载。 +在大量使用反射、动态代理、CGLib 等 ByteCode 框架、动态生成 JSP 以及 OSGi 这类频繁自定义 ClassLoader 的场景都需要虚拟机具备类卸载功能,以保证不会出现内存溢出。 + 类的卸载条件很多,需要满足以下三个条件,并且满足了也不一定会被卸载: -- 该类所有的实例都已经被回收,也就是 Java 堆中不存在该类的任何实例。 +- 该类所有的实例都已经被回收,也就是堆中不存在该类的任何实例。 - 加载该类的 ClassLoader 已经被回收。 -- 该类对应的 java.lang.Class 对象没有在任何地方被引用,也就无法在任何地方通过反射访问该类方法。 +- 该类对应的 Class 对象没有在任何地方被引用,也就无法在任何地方通过反射访问该类方法。 可以通过 -Xnoclassgc 参数来控制是否对类进行卸载。 -在大量使用反射、动态代理、CGLib 等 ByteCode 框架、动态生成 JSP 以及 OSGi 这类频繁自定义 ClassLoader 的场景都需要虚拟机具备类卸载功能,以保证不会出现内存溢出。 - ### 5. finalize() finalize() 类似 C++ 的析构函数,用来做关闭外部资源等工作。但是 try-finally 等方式可以做的更好,并且该方法运行代价高昂,不确定性大,无法保证各个对象的调用顺序,因此最好不要使用。 @@ -246,16 +250,18 @@ finalize() 类似 C++ 的析构函数,用来做关闭外部资源等工作。 主要不足是只使用了内存的一半。 -现在的商业虚拟机都采用这种收集算法来回收新生代,但是并不是将内存划分为大小相等的两块,而是分为一块较大的 Eden 空间和两块较小的 Survivor 空间,每次使用 Eden 空间和其中一块 Survivor。在回收时,将 Eden 和 Survivor 中还存活着的对象一次性复制到另一块 Survivor 空间上,最后清理 Eden 和使用过的那一块 Survivor。HotSpot 虚拟机的 Eden 和 Survivor 的大小比例默认为 8:1,保证了内存的利用率达到 90%。如果每次回收有多于 10% 的对象存活,那么一块 Survivor 空间就不够用了,此时需要依赖于老年代进行分配担保,也就是借用老年代的空间存储放不下的对象。 +现在的商业虚拟机都采用这种收集算法来回收新生代,但是并不是将新生代划分为大小相等的两块,而是分为一块较大的 Eden 空间和两块较小的 Survivor 空间,每次使用 Eden 空间和其中一块 Survivor。在回收时,将 Eden 和 Survivor 中还存活着的对象一次性复制到另一块 Survivor 空间上,最后清理 Eden 和使用过的那一块 Survivor。 + +HotSpot 虚拟机的 Eden 和 Survivor 的大小比例默认为 8:1,保证了内存的利用率达到 90%。如果每次回收有多于 10% 的对象存活,那么一块 Survivor 空间就不够用了,此时需要依赖于老年代进行分配担保,也就是借用老年代的空间存储放不下的对象。 ### 4. 分代收集 现在的商业虚拟机采用分代收集算法,它根据对象存活周期将内存划分为几块,不同块采用适当的收集算法。 -一般将 Java 堆分为新生代和老年代。 +一般将堆分为新生代和老年代。 - 新生代使用:复制算法 -- 老年代使用:标记 - 清理 或者 标记 - 整理 算法 +- 老年代使用:标记 - 清除 或者 标记 - 整理 算法 ## 垃圾收集器 @@ -263,8 +269,8 @@ finalize() 类似 C++ 的析构函数,用来做关闭外部资源等工作。 以上是 HotSpot 虚拟机中的 7 个垃圾收集器,连线表示垃圾收集器可以配合使用。 -- 单线程与并行(多线程):单线程指的是垃圾收集器只使用一个线程进行收集,而并行使用多个线程。 -- 串行与并发:串行指的是垃圾收集器与用户程序交替执行,这意味着在执行垃圾收集的时候需要停顿用户程序;并发指的是垃圾收集器和用户程序同时执行。除了 CMS 和 G1 之外,其它垃圾收集器都是以串行的方式执行。 +- 单线程与多线程:单线程指的是垃圾收集器只使用一个线程进行收集,而多线程使用多个线程; +- 串行与并行:串行指的是垃圾收集器与用户程序交替执行,这意味着在执行垃圾收集的时候需要停顿用户程序;并形指的是垃圾收集器和用户程序同时执行。除了 CMS 和 G1 之外,其它垃圾收集器都是以串行的方式执行。 ### 1. Serial 收集器 @@ -290,15 +296,15 @@ Serial 翻译为串行,也就是说它以串行的方式执行。 ### 3. Parallel Scavenge 收集器 -与 ParNew 一样是并行的多线程收集器。 +与 ParNew 一样是多线程收集器。 其它收集器关注点是尽可能缩短垃圾收集时用户线程的停顿时间,而它的目标是达到一个可控制的吞吐量,它被称为“吞吐量优先”收集器。这里的吞吐量指 CPU 用于运行用户代码的时间占总时间的比值。 停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能提升用户体验。而高吞吐量则可以高效率地利用 CPU 时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。 -提供了两个参数用于精确控制吞吐量,分别是控制最大垃圾收集停顿时间 -XX:MaxGCPauseMillis 参数以及直接设置吞吐量大小的 -XX:GCTimeRatio 参数(值为大于 0 且小于 100 的整数)。缩短停顿时间是以牺牲吞吐量和新生代空间来换取的:新生代空间变小,垃圾回收变得频繁,导致吞吐量下降。 +缩短停顿时间是以牺牲吞吐量和新生代空间来换取的:新生代空间变小,垃圾回收变得频繁,导致吞吐量下降。 -还提供了一个参数 -XX:+UseAdaptiveSizePolicy,这是一个开关参数,打开参数后,就不需要手工指定新生代的大小(-Xmn)、Eden 和 Survivor 区的比例(-XX:SurvivorRatio)、晋升老年代对象年龄(-XX:PretenureSizeThreshold)等细节参数了,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量,这种方式称为 GC 自适应的调节策略(GC Ergonomics)。 +可以通过一个开关参数打卡 GC 自适应的调节策略(GC Ergonomics),就不需要手工指定新生代的大小(-Xmn)、Eden 和 Survivor 区的比例、晋升老年代对象年龄等细节参数了。虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量,这种方式称为 。 ### 4. Serial Old 收集器 @@ -323,8 +329,6 @@ Serial 翻译为串行,也就是说它以串行的方式执行。 CMS(Concurrent Mark Sweep),Mark Sweep 指的是标记 - 清除算法。 -特点:并发收集、低停顿。 - 分为以下四个流程: - 初始标记:仅仅只是标记一下 GC Roots 能直接关联到的对象,速度很快,需要停顿。 @@ -344,7 +348,7 @@ CMS(Concurrent Mark Sweep),Mark Sweep 指的是标记 - 清除算法。 G1(Garbage-First),它是一款面向服务端应用的垃圾收集器,在多 CPU 和大内存的场景下有很好的性能。HotSpot 开发团队赋予它的使命是未来可以替换掉 CMS 收集器。 -Java 堆被分为新生代、老年代和永久代,其它收集器进行收集的范围都是整个新生代或者老年代,而 G1 可以直接对新生代和老年代一起回收。 +堆被分为新生代和老年代,其它收集器进行收集的范围都是整个新生代或者老年代,而 G1 可以直接对新生代和老年代一起回收。

@@ -372,18 +376,6 @@ G1 把堆划分成多个大小相等的独立区域(Region),新生代和 更详细内容请参考:[Getting Started with the G1 Garbage Collector](http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/G1GettingStarted/index.html) -### 8. 比较 - -| 收集器 | 单线程/并行 | 串行/并发 | 新生代/老年代 | 收集算法 | 目标 | 适用场景 | -| :---: | :---: | :---: | :---: | :---: | :---: | :---: | -| **Serial** | 单线程 | 串行 | 新生代 | 复制 | 响应速度优先 | 单 CPU 环境下的 Client 模式 | -| **Serial Old** | 单线程 | 串行 | 老年代 | 标记-整理 | 响应速度优先 | 单 CPU 环境下的 Client 模式、CMS 的后备预案 | -| **ParNew** | 并行 |串行 | 新生代 | 复制算法 | 响应速度优先 | 多 CPU 环境时在 Server 模式下与 CMS 配合 | -| **Parallel Scavenge** | 并行 | 串行 | 新生代 | 复制算法 | 吞吐量优先 | 在后台运算而不需要太多交互的任务 | -| **Parallel Old** | 并行 | 串行 | 老年代 | 标记-整理 | 吞吐量优先 | 在后台运算而不需要太多交互的任务 | -| **CMS** | 并行 | 并发 | 老年代 | 标记-清除 | 响应速度优先 | 集中在互联网站或 B/S 系统服务端上的 Java 应用 | -| **G1** | 并行 | 并发 | 新生代 + 老年代 | 标记-整理 + 复制算法 | 响应速度优先 | 面向服务端应用,将来替换 CMS | - ## 内存分配与回收策略 ### 1. Minor GC 和 Full GC @@ -752,6 +744,7 @@ public class FileSystemClassLoader extends ClassLoader { - 周志明. 深入理解 Java 虚拟机 [M]. 机械工业出版社, 2011. - [Chapter 2. The Structure of the Java Virtual Machine](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5.4) - [Jvm memory](https://www.slideshare.net/benewu/jvm-memory) +- [JNI Part1: Java Native Interface Introduction and “Hello World” application](http://electrofriends.com/articles/jni/jni-part1-java-native-interface/) - [Memory Architecture Of JVM(Runtime Data Areas)](https://hackthejava.wordpress.com/2015/01/09/memory-architecture-by-jvmruntime-data-areas/) - [JVM Run-Time Data Areas](https://www.programcreek.com/2013/04/jvm-run-time-data-areas/) - [Android on x86: Java Native Interface and the Android Native Development Kit](http://www.drdobbs.com/architecture-and-design/android-on-x86-java-native-interface-and/240166271) diff --git a/pics/JNI-Java-Native-Interface.jpg b/pics/JNI-Java-Native-Interface.jpg new file mode 100644 index 0000000000000000000000000000000000000000..28b45e2eeca627f17f7cd0e96a09a197874a07b3 GIT binary patch literal 39936 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

g8o<7Fayj(qwXrap;|{wYe-wYJ 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 literal 0 HcmV?d00001 diff --git a/pics/71f61bc3-582d-4c27-8bdd-dc7fb135bf8f.png b/pics/71f61bc3-582d-4c27-8bdd-dc7fb135bf8f.png new file mode 100644 index 0000000000000000000000000000000000000000..4e99159f155cea26f0e7dc6e4c669c45008d1cf0 GIT binary patch literal 24576 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