diff --git a/public/api/i/2025/07/04/10vqzk7-1.webp b/public/api/i/2025/07/04/10vqzk7-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/mg4kt3.jpg b/public/api/i/2025/07/04/mg4kt3.jpg old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/n684z8-1.png b/public/api/i/2025/07/04/n684z8-1.png old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/n6qbbl-1.webp b/public/api/i/2025/07/04/n6qbbl-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/qgo86j-1.webp b/public/api/i/2025/07/04/qgo86j-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/sbccw9-1.webp b/public/api/i/2025/07/04/sbccw9-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/sbg2qz-1.webp b/public/api/i/2025/07/04/sbg2qz-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/tw3x3m-1.webp b/public/api/i/2025/07/04/tw3x3m-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/tw5o8m-1.webp b/public/api/i/2025/07/04/tw5o8m-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/xk7aog-1.webp b/public/api/i/2025/07/04/xk7aog-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/xlygs0-1.webp b/public/api/i/2025/07/04/xlygs0-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/xn4xq1-1.webp b/public/api/i/2025/07/04/xn4xq1-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/xnwr77-1.webp b/public/api/i/2025/07/04/xnwr77-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/xosnm4-1.webp b/public/api/i/2025/07/04/xosnm4-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/xp40ty-1.webp b/public/api/i/2025/07/04/xp40ty-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/xv1jci-1.webp b/public/api/i/2025/07/04/xv1jci-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/xwlbys-1.webp b/public/api/i/2025/07/04/xwlbys-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/xwmrcf-1.webp b/public/api/i/2025/07/04/xwmrcf-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/y25xjy-1.webp b/public/api/i/2025/07/04/y25xjy-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/yr8711-1.webp b/public/api/i/2025/07/04/yr8711-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/yszvdc-1.webp b/public/api/i/2025/07/04/yszvdc-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/ytan3p-1.webp b/public/api/i/2025/07/04/ytan3p-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/yvphqt-1.webp b/public/api/i/2025/07/04/yvphqt-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/z5zcqb-1.webp b/public/api/i/2025/07/04/z5zcqb-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/04/zmif5z-1.webp b/public/api/i/2025/07/04/zmif5z-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/09/10wljqd-1.webp b/public/api/i/2025/07/09/10wljqd-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/09/10wlsuv-1.webp b/public/api/i/2025/07/09/10wlsuv-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/09/10wm03e-1.webp b/public/api/i/2025/07/09/10wm03e-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/09/10wm57b-1.webp b/public/api/i/2025/07/09/10wm57b-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/09/10wmnfv-1.webp b/public/api/i/2025/07/09/10wmnfv-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/09/10wmx74-1.webp b/public/api/i/2025/07/09/10wmx74-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/09/10wmxfn-1.webp b/public/api/i/2025/07/09/10wmxfn-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/14/10ps4z9-1.webp b/public/api/i/2025/07/14/10ps4z9-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10kn2xz-1.webp b/public/api/i/2025/07/18/10kn2xz-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10lr31h-1.webp b/public/api/i/2025/07/18/10lr31h-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10lrj5p-1.webp b/public/api/i/2025/07/18/10lrj5p-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10lrmof-1.webp b/public/api/i/2025/07/18/10lrmof-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10lrvwa-1.webp b/public/api/i/2025/07/18/10lrvwa-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10ls1dm-1.webp b/public/api/i/2025/07/18/10ls1dm-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10mvpvg-1.webp b/public/api/i/2025/07/18/10mvpvg-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10mvro2-1.webp b/public/api/i/2025/07/18/10mvro2-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10mvw5e-1.webp b/public/api/i/2025/07/18/10mvw5e-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10mw6vd-1.webp b/public/api/i/2025/07/18/10mw6vd-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10mwdnp-1.webp b/public/api/i/2025/07/18/10mwdnp-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10mwjcx-1.webp b/public/api/i/2025/07/18/10mwjcx-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10mwpa5-1.webp b/public/api/i/2025/07/18/10mwpa5-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10nn4ww-1.webp b/public/api/i/2025/07/18/10nn4ww-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10nn7eb-1.webp b/public/api/i/2025/07/18/10nn7eb-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10nngi3-1.webp b/public/api/i/2025/07/18/10nngi3-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10nnmfv-1.webp b/public/api/i/2025/07/18/10nnmfv-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10nnpgs-1.webp b/public/api/i/2025/07/18/10nnpgs-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10nntly-1.webp b/public/api/i/2025/07/18/10nntly-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10nnyst-1.webp b/public/api/i/2025/07/18/10nnyst-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10no08y-1.webp b/public/api/i/2025/07/18/10no08y-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10no6pp-1.webp b/public/api/i/2025/07/18/10no6pp-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10noe2w-1.webp b/public/api/i/2025/07/18/10noe2w-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10nojzj-1.webp b/public/api/i/2025/07/18/10nojzj-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10nomg3-1.webp b/public/api/i/2025/07/18/10nomg3-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10nozio-1.webp b/public/api/i/2025/07/18/10nozio-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10pzxij-1.webp b/public/api/i/2025/07/18/10pzxij-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10r4a6l-1.webp b/public/api/i/2025/07/18/10r4a6l-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10r4hzg-1.webp b/public/api/i/2025/07/18/10r4hzg-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10rp8v3-1.webp b/public/api/i/2025/07/18/10rp8v3-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10rqupi-1.webp b/public/api/i/2025/07/18/10rqupi-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10rskv8-1.webp b/public/api/i/2025/07/18/10rskv8-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10rukfc-1.webp b/public/api/i/2025/07/18/10rukfc-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10t1y6z-1.webp b/public/api/i/2025/07/18/10t1y6z-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10vy5ev-1.webp b/public/api/i/2025/07/18/10vy5ev-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10vz716-1.webp b/public/api/i/2025/07/18/10vz716-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10vzeqy-1.webp b/public/api/i/2025/07/18/10vzeqy-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10vzg41-1.webp b/public/api/i/2025/07/18/10vzg41-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10vzxk4-1.webp b/public/api/i/2025/07/18/10vzxk4-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10y3u6x-1.webp b/public/api/i/2025/07/18/10y3u6x-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/10y44ei-1.webp b/public/api/i/2025/07/18/10y44ei-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/126rx40-1.webp b/public/api/i/2025/07/18/126rx40-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/127feyd-1.webp b/public/api/i/2025/07/18/127feyd-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/12an835-1.webp b/public/api/i/2025/07/18/12an835-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/12avz19-1.webp b/public/api/i/2025/07/18/12avz19-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/12awf70-1.webp b/public/api/i/2025/07/18/12awf70-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/12b1jr4-1.webp b/public/api/i/2025/07/18/12b1jr4-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/12b818c-1.webp b/public/api/i/2025/07/18/12b818c-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/12c4ix7-1.webp b/public/api/i/2025/07/18/12c4ix7-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/12c4ooa-1.webp b/public/api/i/2025/07/18/12c4ooa-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/zn3t6t-1.webp b/public/api/i/2025/07/18/zn3t6t-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/zp1mhy-1.webp b/public/api/i/2025/07/18/zp1mhy-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/18/zp41hc-1.webp b/public/api/i/2025/07/18/zp41hc-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/nf6h83-1.webp b/public/api/i/2025/07/19/nf6h83-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/p9zr81-1.webp b/public/api/i/2025/07/19/p9zr81-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/pesc98-1.webp b/public/api/i/2025/07/19/pesc98-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/pfuo04-1.webp b/public/api/i/2025/07/19/pfuo04-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/phht75-1.webp b/public/api/i/2025/07/19/phht75-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/pl5aca-1.webp b/public/api/i/2025/07/19/pl5aca-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/pldpst-1.webp b/public/api/i/2025/07/19/pldpst-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/plo11d-1.webp b/public/api/i/2025/07/19/plo11d-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/plwl0i-1.webp b/public/api/i/2025/07/19/plwl0i-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/pmk3s0-1.webp b/public/api/i/2025/07/19/pmk3s0-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/pn3s6u-1.webp b/public/api/i/2025/07/19/pn3s6u-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/rek2t9-1.webp b/public/api/i/2025/07/19/rek2t9-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/repxn1-1.webp b/public/api/i/2025/07/19/repxn1-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/rfx8t3-1.webp b/public/api/i/2025/07/19/rfx8t3-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/sbddqg-1.webp b/public/api/i/2025/07/19/sbddqg-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/shhncj-1.webp b/public/api/i/2025/07/19/shhncj-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/squh53-1.webp b/public/api/i/2025/07/19/squh53-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/sqxtqj-1.webp b/public/api/i/2025/07/19/sqxtqj-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/sqzp5w-1.webp b/public/api/i/2025/07/19/sqzp5w-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/srg062-1.webp b/public/api/i/2025/07/19/srg062-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/srhn4e-1.webp b/public/api/i/2025/07/19/srhn4e-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/u32dv8-1.webp b/public/api/i/2025/07/19/u32dv8-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/19/uje4vo-1.webp b/public/api/i/2025/07/19/uje4vo-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/22/10vrb6t-1.webp b/public/api/i/2025/07/22/10vrb6t-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/26/w2nt42-1.webp b/public/api/i/2025/07/26/w2nt42-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/26/w8e77e-1.webp b/public/api/i/2025/07/26/w8e77e-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/26/x7qqjv-1.webp b/public/api/i/2025/07/26/x7qqjv-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/26/zjj9sd-1.webp b/public/api/i/2025/07/26/zjj9sd-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/27/qllmzm-1.webp b/public/api/i/2025/07/27/qllmzm-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/27/qne5sq-1.webp b/public/api/i/2025/07/27/qne5sq-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/27/qp4v65-1.webp b/public/api/i/2025/07/27/qp4v65-1.webp old mode 100644 new mode 100755 diff --git a/public/api/i/2025/07/28/sd8zrp.webp b/public/api/i/2025/07/28/sd8zrp.webp new file mode 100644 index 0000000..7a1444c Binary files /dev/null and b/public/api/i/2025/07/28/sd8zrp.webp differ diff --git a/public/api/i/2025/07/28/sfkvri.webp b/public/api/i/2025/07/28/sfkvri.webp new file mode 100644 index 0000000..7fee584 Binary files /dev/null and b/public/api/i/2025/07/28/sfkvri.webp differ diff --git a/public/api/i/2025/07/28/si308s.webp b/public/api/i/2025/07/28/si308s.webp new file mode 100644 index 0000000..9edbfcd Binary files /dev/null and b/public/api/i/2025/07/28/si308s.webp differ diff --git a/public/api/i/2025/07/28/sj8wqs.webp b/public/api/i/2025/07/28/sj8wqs.webp new file mode 100644 index 0000000..27850a8 Binary files /dev/null and b/public/api/i/2025/07/28/sj8wqs.webp differ diff --git a/public/api/i/2025/07/28/skj7xz.webp b/public/api/i/2025/07/28/skj7xz.webp new file mode 100644 index 0000000..125f0a1 Binary files /dev/null and b/public/api/i/2025/07/28/skj7xz.webp differ diff --git a/public/api/i/cache/20250714.jpg b/public/api/i/cache/20250714.jpg old mode 100644 new mode 100755 diff --git a/public/api/i/cache/20250718.jpg b/public/api/i/cache/20250718.jpg old mode 100644 new mode 100755 diff --git a/public/api/i/cache/20250719.jpg b/public/api/i/cache/20250719.jpg old mode 100644 new mode 100755 diff --git a/public/api/i/cache/20250728.jpg b/public/api/i/cache/20250728.jpg new file mode 100644 index 0000000..29a2fee Binary files /dev/null and b/public/api/i/cache/20250728.jpg differ diff --git a/public/api/i/cache/EasyImage_int_2ef4014b263d46a49d6b32e7f8f61a92.workcontrol.txt b/public/api/i/cache/EasyImage_int_2ef4014b263d46a49d6b32e7f8f61a92.workcontrol.txt new file mode 100644 index 0000000..330e7a9 Binary files /dev/null and b/public/api/i/cache/EasyImage_int_2ef4014b263d46a49d6b32e7f8f61a92.workcontrol.txt differ diff --git a/public/api/i/cache/EasyImage_int_31b1782fd9edd73ebe8b0b7f432cc72a.workcontrol.txt b/public/api/i/cache/EasyImage_int_31b1782fd9edd73ebe8b0b7f432cc72a.workcontrol.txt old mode 100644 new mode 100755 diff --git a/public/api/i/cache/EasyImage_int_4e37e326dd17dc84bc60c328e2336c7d.workcontrol.txt b/public/api/i/cache/EasyImage_int_4e37e326dd17dc84bc60c328e2336c7d.workcontrol.txt new file mode 100644 index 0000000..01c74e7 Binary files /dev/null and b/public/api/i/cache/EasyImage_int_4e37e326dd17dc84bc60c328e2336c7d.workcontrol.txt differ diff --git a/public/api/i/cache/EasyImage_int_4e903caeabc91ab7b477ea724d4e26c6.workcontrol.txt b/public/api/i/cache/EasyImage_int_4e903caeabc91ab7b477ea724d4e26c6.workcontrol.txt new file mode 100644 index 0000000..91f9ff0 Binary files /dev/null and b/public/api/i/cache/EasyImage_int_4e903caeabc91ab7b477ea724d4e26c6.workcontrol.txt differ diff --git a/public/api/i/cache/EasyImage_int_4f8dbdb939d8b8b7b9a67405d005a26f.workcontrol.txt b/public/api/i/cache/EasyImage_int_4f8dbdb939d8b8b7b9a67405d005a26f.workcontrol.txt old mode 100644 new mode 100755 diff --git a/public/api/i/cache/EasyImage_int_686a102ef7badc364c9c3f45490f6bb0.workcontrol.txt b/public/api/i/cache/EasyImage_int_686a102ef7badc364c9c3f45490f6bb0.workcontrol.txt new file mode 100644 index 0000000..3967c77 Binary files /dev/null and b/public/api/i/cache/EasyImage_int_686a102ef7badc364c9c3f45490f6bb0.workcontrol.txt differ diff --git a/public/api/i/cache/EasyImage_int_6d706db8574807203a518239ea008d52.workcontrol.txt b/public/api/i/cache/EasyImage_int_6d706db8574807203a518239ea008d52.workcontrol.txt old mode 100644 new mode 100755 diff --git a/public/api/i/cache/EasyImage_int_6dcc4acd7e6c08e4242767bb31d67eea.workcontrol.txt b/public/api/i/cache/EasyImage_int_6dcc4acd7e6c08e4242767bb31d67eea.workcontrol.txt old mode 100644 new mode 100755 diff --git a/public/api/i/cache/EasyImage_int_86a53b9febf7805c567af7c21c1e4ed7.workcontrol.txt b/public/api/i/cache/EasyImage_int_86a53b9febf7805c567af7c21c1e4ed7.workcontrol.txt old mode 100644 new mode 100755 diff --git a/public/api/i/cache/EasyImage_int_96c9e161dadad285b5fd41c38a278a09.workcontrol.txt b/public/api/i/cache/EasyImage_int_96c9e161dadad285b5fd41c38a278a09.workcontrol.txt new file mode 100644 index 0000000..81559c4 Binary files /dev/null and b/public/api/i/cache/EasyImage_int_96c9e161dadad285b5fd41c38a278a09.workcontrol.txt differ diff --git a/public/api/i/cache/EasyImage_int_982743f194af936d61701aa2701df764.workcontrol.txt b/public/api/i/cache/EasyImage_int_982743f194af936d61701aa2701df764.workcontrol.txt old mode 100644 new mode 100755 diff --git a/public/api/i/cache/EasyImage_int_9c1b10f5c0b8d12a1dedfaeaac2835cd.workcontrol.txt b/public/api/i/cache/EasyImage_int_9c1b10f5c0b8d12a1dedfaeaac2835cd.workcontrol.txt old mode 100644 new mode 100755 diff --git a/public/api/i/cache/EasyImage_int_b1f6e2f03b868058a008f7173638e6ee.workcontrol.txt b/public/api/i/cache/EasyImage_int_b1f6e2f03b868058a008f7173638e6ee.workcontrol.txt old mode 100644 new mode 100755 diff --git a/public/api/i/cache/EasyImage_int_b93422408a6c3c271dcdcc0e04f994ee.workcontrol.txt b/public/api/i/cache/EasyImage_int_b93422408a6c3c271dcdcc0e04f994ee.workcontrol.txt old mode 100644 new mode 100755 diff --git a/public/api/i/cache/EasyImage_int_bba9211e27ed931b1013654448339742.workcontrol.txt b/public/api/i/cache/EasyImage_int_bba9211e27ed931b1013654448339742.workcontrol.txt old mode 100644 new mode 100755 diff --git a/public/api/i/cache/EasyImage_int_c53a0d71337ef22c54e47fcb5cb9e208.workcontrol.txt b/public/api/i/cache/EasyImage_int_c53a0d71337ef22c54e47fcb5cb9e208.workcontrol.txt old mode 100644 new mode 100755 diff --git a/public/api/i/cache/EasyImage_int_db0b79373ed3230216ad69a812800b74.workcontrol.txt b/public/api/i/cache/EasyImage_int_db0b79373ed3230216ad69a812800b74.workcontrol.txt old mode 100644 new mode 100755 diff --git a/public/api/i/cache/index.html b/public/api/i/cache/index.html old mode 100644 new mode 100755 diff --git a/public/api/i/cache/timthumb_cacheLastCleanTime.touch b/public/api/i/cache/timthumb_cacheLastCleanTime.touch old mode 100644 new mode 100755 diff --git a/public/config/EasyIamge.lock b/public/config/EasyIamge.lock old mode 100644 new mode 100755 diff --git a/public/config/api_key.php b/public/config/api_key.php old mode 100644 new mode 100755 diff --git a/public/config/config.guest.php b/public/config/config.guest.php old mode 100644 new mode 100755 diff --git a/public/config/config.manager.php b/public/config/config.manager.php old mode 100644 new mode 100755 diff --git a/public/config/config.php b/public/config/config.php old mode 100644 new mode 100755 diff --git a/public/config/install.lock b/public/config/install.lock old mode 100644 new mode 100755 diff --git a/src/content/posts/Java/Spring/SpringBean生命周期.md b/src/content/posts/Java/Spring/SpringBean生命周期.md new file mode 100644 index 0000000..3457872 --- /dev/null +++ b/src/content/posts/Java/Spring/SpringBean生命周期.md @@ -0,0 +1,158 @@ +--- +title: SpringBean生命周期 +published: 2025-07-28 +description: '' +image: '' +tags: ["Spring","Java"] +category: 'Java > Spring' +draft: false +lang: '' +--- + +# Bean 的生命周期 + +![image](https://blog.meowrain.cn/api/i/2025/07/28/skj7xz.webp) + +Bean生命周期可以粗略的划分为五大步: + +第一步:实例化Bean +第二步:Bean属性赋值 +第三步:初始化Bean +第四步:使用Bean +第五步:销毁Bean +![image](https://blog.meowrain.cn/api/i/2025/07/28/si308s.webp) + +```java +package com.powercode.spring6.beans; + +public class User { + private String name; + public User() { + System.out.println("1.实例化Bean"); + } + + public void setName(String name) { + this.name = name; + System.out.println("2.Bean属性赋值"); + } + + public void initBean(){ + System.out.println("3.初始化Bean"); + } + + public void destroyBean(){ + System.out.println("5.销毁Bean"); + } + +} + +``` + +``` +2024-01-11 12:21:23 618 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@183e8023 +2024-01-11 12:21:23 715 [main] DEBUG org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loaded 1 bean definitions from class path resource [spring12.xml] +2024-01-11 12:21:23 732 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'userBean' +1.实例化Bean +2.Bean属性赋值 +3.初始化Bean +4.使用Bean +2024-01-11 12:21:23 774 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Closing org.springframework.context.support.ClassPathXmlApplicationContext@183e8023, started on Thu Jan 11 12:21:23 CST 2024 +5.销毁Bean +2024-01-11 12:21:23 774 [main] DEBUG org.springframework.beans.factory.support.DisposableBeanAdapter - Custom destroy method 'destroyBean' on bean with name 'userBean' completed + +进程已结束,退出代码为 0 + +``` + +![image](https://blog.meowrain.cn/api/i/2025/07/28/sd8zrp.webp) + +## Bean后处理器 +加上后处理器就变成七步了: +![image](https://blog.meowrain.cn/api/i/2025/07/28/sj8wqs.webp) + + +### BeanPostProcessor 的核心作用 +BeanPostProcessor 本身并不属于某个特定 Bean 的生命周期,而是作用于容器中所有 Bean 的 “全局处理器”。它的核心功能是:在 Bean 完成实例化和属性赋值后、初始化方法(如 afterPropertiesSet() 或 init-method)执行前后,对 Bean 进行加工或增强。 + +上图中检查Bean是否实现了Aware的相关接口是什么意思? + + +## Aware相关接口 +Aware相关的接口包括:BeanNameAware、BeanClassLoaderAware、BeanFactoryAware + +当Bean实现了BeanNameAware,Spring会将Bean的名字传递给Bean。 +当Bean实现了BeanClassLoaderAware,Spring会将加载该Bean的类加载器传递给Bean。 +当Bean实现了BeanFactoryAware,Spring会将Bean工厂对象传递给Bean。 +测试以上10步,可以让User类实现5个接口,并实现所有方法: +- BeanNameAware +- BeanClassLoaderAware +- BeanFactoryAware +- InitializingBean +- DisposableBean + +## InitializingBean 的核心作用 +当一个 Bean 实现了 InitializingBean 接口后,Spring 容器会在该 Bean 的所有属性都被成功设置(即完成属性注入)之后,自动调用其 afterPropertiesSet() 方法。这一特性使得开发者可以在 Bean 正式投入使用前,进行一些必要的初始化操作,例如数据校验、资源加载、状态初始化等。 + +## DisposableBean核心作用 +DisposableBean 是 Spring 提供的销毁回调接口,其核心作用是在 Bean 即将被容器销毁前,触发自定义的清理操作。 +![image](https://blog.meowrain.cn/api/i/2025/07/28/sfkvri.webp) + +```java +package com.powercode.spring6.beans; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.*; + +/** + * @author 动力节点 + * @version 1.0 + * @className User + * @since 1.0 + **/ +public class User implements BeanNameAware, BeanClassLoaderAware, BeanFactoryAware, InitializingBean, DisposableBean { + private String name; + + public User() { + System.out.println("1.实例化Bean"); + } + + public void setName(String name) { + this.name = name; + System.out.println("2.Bean属性赋值"); + } + + public void initBean(){ + System.out.println("6.初始化Bean"); + } + + public void destroyBean(){ + System.out.println("10.销毁Bean"); + } + + @Override + public void setBeanClassLoader(ClassLoader classLoader) { + System.out.println("3.类加载器:" + classLoader); + } + + @Override + public void setBeanFactory(BeanFactory beanFactory) throws BeansException { + System.out.println("3.Bean工厂:" + beanFactory); + } + + @Override + public void setBeanName(String name) { + System.out.println("3.bean名字:" + name); + } + + @Override + public void destroy() throws Exception { + System.out.println("9.DisposableBean destroy"); + } + + @Override + public void afterPropertiesSet() throws Exception { + System.out.println("5.afterPropertiesSet执行"); + } +} +``` + diff --git a/src/content/posts/Java/Spring/Spring常见面试题.md b/src/content/posts/Java/Spring/Spring常见面试题.md new file mode 100644 index 0000000..7c02154 --- /dev/null +++ b/src/content/posts/Java/Spring/Spring常见面试题.md @@ -0,0 +1,172 @@ +--- +title: Spring常见面试题 +published: 2025-07-28 +description: '' +image: '' +tags: ["Spring","Java"] +category: 'Java > Spring' +draft: false +lang: '' +--- + +# @Autowired 和 @Resource 的区别是什么? + +@Autowired属于Spring内置的注解,默认的注入方式是byType,也就是根据类型匹配,当有多个实现时 +byType就没办法正确注入了,这个时候可以结合@Qualifier注解一起使用,指定注入的名称。当然也可以使用byName,也就是根据名称注入,但是需要结合@Qualifier注解一起使用。 + +@Resource 是Java自带注解,属于J2EE的,默认注入方式是byName,也就是根据名称注入,当找不到与名称匹配的bean时,根据类型注入。当然也可以结合@Qualifier注解一起使用,指定注入的名称。 + +@Resource 有两个比较重要且日常开发常用的属性:name(名称)、type(类型)。 +如果仅指定 name 属性则注入方式为byName,如果仅指定type属性则注入方式为byType,如果同时指定name 和type属性(不建议这么做)则注入方式为byType+byName。 + +@Autowired 支持在构造函数、方法、字段和参数上使用。 +@Resource 主要用于字段和方法上的注入,不支持在构造函数或参数上使用。 + + +# Bean 的生命周期 + +![image](https://blog.meowrain.cn/api/i/2025/07/28/skj7xz.webp) + +Bean生命周期可以粗略的划分为五大步: + +第一步:实例化Bean +第二步:Bean属性赋值 +第三步:初始化Bean +第四步:使用Bean +第五步:销毁Bean +![image](https://blog.meowrain.cn/api/i/2025/07/28/si308s.webp) + +```java +package com.powercode.spring6.beans; + +public class User { + private String name; + public User() { + System.out.println("1.实例化Bean"); + } + + public void setName(String name) { + this.name = name; + System.out.println("2.Bean属性赋值"); + } + + public void initBean(){ + System.out.println("3.初始化Bean"); + } + + public void destroyBean(){ + System.out.println("5.销毁Bean"); + } + +} + +``` + +``` +2024-01-11 12:21:23 618 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@183e8023 +2024-01-11 12:21:23 715 [main] DEBUG org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loaded 1 bean definitions from class path resource [spring12.xml] +2024-01-11 12:21:23 732 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'userBean' +1.实例化Bean +2.Bean属性赋值 +3.初始化Bean +4.使用Bean +2024-01-11 12:21:23 774 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Closing org.springframework.context.support.ClassPathXmlApplicationContext@183e8023, started on Thu Jan 11 12:21:23 CST 2024 +5.销毁Bean +2024-01-11 12:21:23 774 [main] DEBUG org.springframework.beans.factory.support.DisposableBeanAdapter - Custom destroy method 'destroyBean' on bean with name 'userBean' completed + +进程已结束,退出代码为 0 + +``` + +![image](https://blog.meowrain.cn/api/i/2025/07/28/sd8zrp.webp) + +## Bean后处理器 +加上后处理器就变成七步了: +![image](https://blog.meowrain.cn/api/i/2025/07/28/sj8wqs.webp) + + +### BeanPostProcessor 的核心作用 +BeanPostProcessor 本身并不属于某个特定 Bean 的生命周期,而是作用于容器中所有 Bean 的 “全局处理器”。它的核心功能是:在 Bean 完成实例化和属性赋值后、初始化方法(如 afterPropertiesSet() 或 init-method)执行前后,对 Bean 进行加工或增强。 + +上图中检查Bean是否实现了Aware的相关接口是什么意思? + + +## Aware相关接口 +Aware相关的接口包括:BeanNameAware、BeanClassLoaderAware、BeanFactoryAware + +当Bean实现了BeanNameAware,Spring会将Bean的名字传递给Bean。 +当Bean实现了BeanClassLoaderAware,Spring会将加载该Bean的类加载器传递给Bean。 +当Bean实现了BeanFactoryAware,Spring会将Bean工厂对象传递给Bean。 +测试以上10步,可以让User类实现5个接口,并实现所有方法: +- BeanNameAware +- BeanClassLoaderAware +- BeanFactoryAware +- InitializingBean +- DisposableBean + +## InitializingBean 的核心作用 +当一个 Bean 实现了 InitializingBean 接口后,Spring 容器会在该 Bean 的所有属性都被成功设置(即完成属性注入)之后,自动调用其 afterPropertiesSet() 方法。这一特性使得开发者可以在 Bean 正式投入使用前,进行一些必要的初始化操作,例如数据校验、资源加载、状态初始化等。 + +## DisposableBean核心作用 +DisposableBean 是 Spring 提供的销毁回调接口,其核心作用是在 Bean 即将被容器销毁前,触发自定义的清理操作。 +![image](https://blog.meowrain.cn/api/i/2025/07/28/sfkvri.webp) + +```java +package com.powercode.spring6.beans; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.*; + +/** + * @author 动力节点 + * @version 1.0 + * @className User + * @since 1.0 + **/ +public class User implements BeanNameAware, BeanClassLoaderAware, BeanFactoryAware, InitializingBean, DisposableBean { + private String name; + + public User() { + System.out.println("1.实例化Bean"); + } + + public void setName(String name) { + this.name = name; + System.out.println("2.Bean属性赋值"); + } + + public void initBean(){ + System.out.println("6.初始化Bean"); + } + + public void destroyBean(){ + System.out.println("10.销毁Bean"); + } + + @Override + public void setBeanClassLoader(ClassLoader classLoader) { + System.out.println("3.类加载器:" + classLoader); + } + + @Override + public void setBeanFactory(BeanFactory beanFactory) throws BeansException { + System.out.println("3.Bean工厂:" + beanFactory); + } + + @Override + public void setBeanName(String name) { + System.out.println("3.bean名字:" + name); + } + + @Override + public void destroy() throws Exception { + System.out.println("9.DisposableBean destroy"); + } + + @Override + public void afterPropertiesSet() throws Exception { + System.out.println("5.afterPropertiesSet执行"); + } +} +``` +