煲汤大全

1、【桂圆红枣银耳汤】 材料:银耳、红枣、桂圆、冰糖、水 做法: 1、银耳用清水泡发后,剪去蒂部,撕碎成小朵。 2、红枣与桂圆用清水泡发后,洗净沥干。 3、将桂圆、红枣、银耳倒入高压锅中,加入清水,倒入冰糖。 4、盖上锅盖,大火烧上汽后改小火,压20-25分钟即可 2、【排骨汤这样做才营养】 主料:白萝卜、排骨、姜片,八角,葱。 方法: ①萝卜切成每约三厘米厚片; ②排骨飞水,即放入沸水中略煮,而后用冷水冲干净,以便去油去血水; ③汤锅装水,将排骨冷水下锅,加姜片八角葱料酒少许,用高压锅煮20分钟; ④倒入汤锅,把浮沫除去,放萝卜; ⑤再20分后放盐 3、【瓜仔香菇鸡汤】 做法: 1、干香菇30克洗淨,泡入水中至软;鸡腿块200克洗净备用; 2、取鍋,放入花瓜50克、鸡腿块、泡开的干香菇、酱油15克和水800毫升放入高压锅起气五分钟即可 4、【养肝排毒绿豆莲子薏米粥】 1、薏米摊开,挑去黑仁及杂质; 2、绿豆挑去坏豆和杂质; 3、莲子逐颗检查去芯; 4、三种食材混合洗净,清水浸泡2小时以上; 5、【金菇花蛤汤】 做法: 1、金针菇切除根部后洗净,用盐水汆烫后捞出备用; 2、生姜洗净切片; 3、把高汤倒入锅内,蛤蜊吐净沙后放入,豆腐切块,放入同煮,随后加入金针菇及生姜片; 4.待蛤蜊壳张开后,加入精盐调味,关火,并撒入胡椒粉即可 5、将浸泡好的米和豆一同放入锅中加水,水量高于米5cm; 6、大火煮开,转小火煮至薏米软烂,稍冷却后调入蜂蜜即可 6、【春笋火腿汤】 新鲜的春笋,剥干净皮、切滚刀块。锅中加入少许的盐,水烧开后下入春笋焯2分钟后捞出,浸入凉水中备用。这样处理过的竹笋就没有涩味了。鲜香菇切块,火腿切片,锅中放入凉水,倒入香菇和火腿片先烧10分钟,然后下入春笋烧两分钟即可 7、猴头菇排骨汤 原料:排骨、猴头菇、瓠子、葱、姜、盐, 做法: 1、锅中放油热后倒生姜爆香 2、倒排骨翻炒至变色 3、倒高压锅中 4、放高压锅加葱水煮开水开后再煮20分钟关火 5、猴头菇洗净 6、用手撕成小块泡至猴头菇变软 7、放开水中焯一下去苦味取出 8、猴头菇倒入排骨汤中 9、再倒切成滚刀状的瓠子煮至瓠子熟,加少许盐即可 8、【番茄卷心菜牛肉汤】 1、番茄洗净,切成方块;卷心菜择洗干净,切成薄片;牛肉洗净,切成薄片。 2、锅置火上,放入牛肉,加清水至没过牛肉为度,旺火烧开,将浮沫撇去,然后放入猪油、料酒烧。 3、至牛肉快熟时,将番茄、卷心菜倒入炖至菜熟,加入精盐、味精,再略炖片刻即可 9、【棒骨汤】 1、棒骨处理下,用刀斩开。 2、清洗棒骨,冷水下锅煮。放入姜片,胡椒去腥。煮开五分钟后。 3、换清水煮温后再放入棒骨,重新放入姜片,枸杞,红枣。大火煮开后调小火。 4、白萝卜,胡萝卜,山药,清洗去皮,切成块状。 5、一个小时后再放入以上切好的各种块状蔬菜,调入盐。6装入容器即可 10、【益气宁神汤】 1、鹌鹑洗净待用; 2、汤料备好; 3、汤料用清水浸透洗净待用; 4、把鹌鹑放进炖盅里; 5、把泡洗净的汤料及姜片放到炖盅里,加上适量清水; 6、蒸锅里放入水,放支架(放布也行); 7、然后把炖盅放在支架上,盖上炖盅盖和蒸锅盖,武火烧开后,文火慢炖一小时; 8、加入适量盐即可食用 11、【猪肝蛋汤】 原料:猪肝、鸡蛋、葱、姜、盐。 做法: 1、猪肝用水洗净,泡水30分钟备用; 2、切成片;...

2024-01-09 · 2 min

C++内存错误检测利器--AddressSanitizer

一、概述 1、常见内存问题场景 野指针: 指针未初始化就使用(非法的随机值)、指针越界非法访问,或指向一个已释放的对象等。 内存泄露: 申请的堆内存使用完毕后忘记释放,内存还占着,但地址丢失,自己已经不能控制这块内存,而系统也不能再次将它分配给需要的程序。内存泄漏次数多了就会导致内存溢出。 内存溢出: Out Of Memory,简称OOM,指系统已经不能再分配出你所需要的空间。 内存踩踏: 指访问了不合法的地址(访问了不属于自己的地址),如果访问的地址是其他变量的地址并进行了修改,就会破坏别人的数据,从而导致程序运行异常。常发生在buffer overflow,野指针操作,write after free等场景。 2、常见内存检测工具 在AddressSanitizer出现之前,市面上就已经存在了许多内存检测器,例如: Dr.Memory:检测未初始化的内存访问、double free、use after free 等错误 Mudflap:检测指针的解引用,静态插桩 Insure++:检测内存泄漏 Valgrind:可以检测非常多的内存错误 其中,Dr.Memory、Insure++ 和 Mudflap 虽然在运行时造成的额外损耗比较少,但是检测场景有限;Valgrind 虽然能够在许多场景的检测出错误,但是它实现了自己的一套 ISA 并在其之上运行目标程序,因此它会严重拖慢目标程序的速度。而 AddressSanitizer 在设计时就综合考虑了检测场景、速度的影响因素,结合了 Mudflap 的静态插桩、Valgrind 的多场景检测能力,故本文主要讲解AddressSanitizer。 3、什么是AddressSanitizer AddressSanitizer即地址消毒技术,简称ASan,是一个快速的内存错误检测工具。它可以用来检测内存问题,例如缓冲区溢出或对悬空指针的非法访问等。 检测类型: Use after free(dangling pointer dereference): 释放后使用(堆上分配的空间free之后被再次使用)。 Heap buffer overflow: 堆缓冲区溢出(访问的区域在堆上, 且超过了分配的空间)。 Stack buffer overflow: 栈缓冲区溢出(访问的区域在栈上, 且超过了分配给它的空间)。 Global buffer overflow: 全局缓冲区溢出(访问的区域是全局变量, 且超过了分配给它的空间)。 Use after return: Return后使用(函数在栈上的局部变量在函数返回后被使用默认不开启)。 Use after scope: 在作用域外使用(局部变量离开作用域以后继续使用)。 Initialization order bugs: 初始化顺序错误(检查全局变量或静态变量初始化的时候有没有利用未初始化的变量,默认不开启)。 Memory leaks: 内存泄漏(未释放堆上分配的内存)。 据谷歌的工程师介绍 ,ASan 已在 chromium 项目上检测出了300多个潜在的未知bug,而且在使用 ASan 作为内存错误检测工具对程序性能损耗也是及其可观的。根据检测结果显示可能导致性能降低2倍左右,比Valgrind(官方给的数据大概是降低10-50倍)快了一个数量级。而且相比于Valgrind只能检查到堆内存的越界访问和悬空指针的访问,ASan 不仅可以检测到堆内存的越界和悬空指针的访问,还能检测到栈和全局对象的越界访问。这也是 ASan 在众多内存检测工具的比较上出类拔萃的重要原因,基本上现在 C/C++ 项目都会使用ASan来保证产品质量,尤其是大项目中更为需要。...

2023-12-05 · 3 min

C++ Map添加元素相同key是否覆盖

1 问题描述 C++的标准库关联容器map是不允许有key相同的键值对存在的。那么当key已经存在的情况下,我们再次插入相同的key,那么key的value会被覆盖吗? 2 编码测试 测试代码: #include <map> #include <string> #include <iostream> using std::map; using std::string; using std::cout; using std::endl; using std::make_pair; /** * 测试map的插入覆盖特性 * 注意众多的using声明 */ int main() { map<string, string> testMap; testMap.insert(make_pair("bkey","bval")); cout << "before convert: " << testMap["bkey"] << endl; //insert方式,重复的key会直接被放弃,而不是进行覆盖(这一点与Java不同) testMap.insert(make_pair("bkey","cval")); cout <<"insert convert test: " << testMap["bkey"] << endl; //[]方式是可以覆盖的 testMap["bkey"] = "dval"; cout <<"[] convert test:" << testMap["bkey"] << endl; return 0; } 测试结果:...

2023-12-05 · 1 min

IDS、IPS和防火墙区别

IDS IDS(Intrusion Detection System入侵检测系统)是一种可以监视网络和系统活动的设备或应用程序,用于检测恶意活动或违反政策的行为。IDS主要有两种类型:网络入侵检测系统(NIDS)和主机入侵检测系统(HIDS)。NIDS监视整个网络的流量,而HIDS则监视单个主机。旁路部署。 IDS工作原理 IDS(入侵检测系统)工作的基本原理是监视网络或系统的活动,分析数据以检测潜在的安全威胁和异常行为。 IDS通过监视网络流量或系统活动来检测潜在的入侵。这包括检查传入和传出的数据包、网络连接、主机活动等。 IDS使用事先定义好的特征或模式,通常称为签名,来识别已知的攻击模式。这些签名是攻击行为的指标,例如特定的网络流量模式、恶意软件的特定代码等。 IDS还可以使用基于异常的检测方法,通过学习正常的系统或网络活动,来检测与正常行为不一致的模式。这有助于发现未知的威胁或新型攻击。 IDS还可以分析系统日志、审计跟踪以及其他记录的信息,以查找可能的异常或可疑活动。这可以包括登录尝试、文件访问、系统配置更改等。 当 IDS检测到潜在的威胁或异常活动时,它会生成警报。这些警报可以是实时的,也可以是存储在日志中等待管理员审查的。 管理员会收到 IDS 生成的警报,并根据警报的严重性和性质采取适当的响应措施。响应可能包括进一步调查、隔离受影响的系统或网络、阻止攻击源等。 IDS类型 网络入侵检测系统(NIDS): 监测整个网络上的流量,检测与已知攻击模式相匹配的活动。 主机入侵检测系统(HIDS): 安装在单个主机上,监测该主机上的活动,以检测是否有异常或潜在的入侵。 基于协议的入侵检测系统: 关注网络协议的使用,检测是否存在协议级别的异常活动。 基于应用协议的入侵检测系统: 专注于检测与特定应用程序协议相关的入侵行为。 混合入侵检测系统: 结合了多种入侵检测技术,以提高检测的准确性和全面性。 IDS的主要优点是能够提供深度的网络流量分析。它可以检测到一些防火墙可能无法识别的攻击,例如基于应用程序的攻击。然而,IDS不能阻止攻击,只能检测到攻击。 IPS IPS(Intrusion Protection System 入侵防御系统)是IDS的一个升级版本,它不仅可以检测到攻击,还可以阻止攻击。当IPS检测到恶意活动时,它可以采取一系列的响应措施,例如阻断网络连接或重新配置网络设备,以阻止攻击。串行部署。 IPS工作原理 IPS(入侵防御系统)是入侵检测系统(IDS)的演进,它不仅能够检测潜在的威胁,还能够采取主动措施来防止这些威胁。 IPS实时监视网络流量,对传入和传出的数据包进行深度分析。这包括检查数据包的头部信息、有效负载和其他相关信息。 IPS使用基于签名的检测方法,其中预定义的签名或模式用于识别已知的攻击模式。这可以涵盖特定的网络流量特征、恶意代码的签名等。 IPS执行行为分析,通过观察网络流量的行为模式来检测潜在的威胁。这可以包括异常的数据流量、连接模式或其他与正常行为不一致的情况。 IPS还使用异常检测方法,学习正常的系统或网络活动模式,并在检测到与正常行为不一致的模式时发出警报。 当 IPS检测到潜在的威胁时,它可以采取多种操作,例如阻止流量、向系统管理员发出警报、终止连接等。这取决于配置的策略和威胁的严重性。 IPS生成日志和报告,记录检测到的威胁、采取的行动以及其他相关信息。这些日志对于后续的分析和调查非常有价值。 IPS类型 网络入侵防御系统(NIPS): 在网络层面上防御,监测和阻止整个网络上的攻击。 主机入侵防御系统(HIPS): 在主机层面上防御,保护单个主机或终端设备免受攻击。 网络行为分析(NBA): 通过分析网络流量和行为来检测潜在的威胁,具有一定的智能和学习能力。 无线入侵防御系统(WIPS): 专注于保护无线网络,检测并防止无线网络中的入侵活动。 IPS的一个主要优点是它可以实时阻止攻击,这对于防止数据泄露或系统损坏至关重要。然而,IPS需要更多的资源来运行,因为它需要实时分析网络流量,并在检测到攻击时立即采取行动。 IPS 致命的缺点是同样硬件的情况下,性能比 IDS 低的多。实际应用中,误杀漏杀和 IDS 一样,主要是签名库决定的。但是随着 UDP 协议的广泛使用,IPS 在 UDP 上的误杀率可能会高于 IDS。 防火墙 防火墙是一种网络安全设备,它可以控制进出网络的流量。防火墙根据预定义的安全策略,允许或阻止特定的数据包通过。防火墙可以是硬件设备,也可以是软件应用程序。 防火墙工作原理 防火墙的工作原理涉及检查网络流量并根据预定义的规则来决定是否允许或阻止数据包的传输。 防火墙监视网络流量,检查传入和传出的数据包。数据包是网络通信的基本单位,包含有关通信的信息,如源地址、目标地址、端口号和协议。 防火墙将每个数据包与预定义的规则进行比较,这些规则定义了允许或阻止特定类型的流量。规则可以基于源地址、目标地址、端口号、协议类型等因素进行配置。 如果数据包符合规则,防火墙将根据配置的规则允许数据包通过。如果数据包不符合规则,防火墙可以采取不同的行动,例如阻止数据包、记录事件或发出警告。...

2023-11-28 · 1 min

SCRAM认证机制

简介 SCRAM是一套包含服务器和客户端双向确认的用户认证体系,配合信道加密可以比较好的抵御中间人、拖库、伪造等攻击。 SCRAM是密码学中的一种认证机制,全称Salted Challenge Response Authentication Mechanism(加盐挑战响应验证机制)。它适用于使用基于“用户名:密码”这种简单认证模型的连接协议。SCRAM是一个抽象的机制,在其设计中需要用到一个哈希函数,这个哈希函数是客户端和服务端协商好的,包含在具体的机制名称中。比如SCRAM-SHA1,使用SHA1作为其哈希函数。 SCRAM是一套包含服务器和客户端双向确认的用户认证体系,配合信道加密可以比较好的抵御中间人、拖库、伪造等攻击。 相关字段 定义: Hash(content)指安全Hash函数,如SHA256。 HMAC()指使用Hash(content)作为基础实现的HMAC函数,如HMAC(SHA256,Key,Content)。 UserIdentify:仅用于登录签名的用户身份标识字符串,每次登录时可根据业务任意选用用户名、手机号、邮箱、三方ID等,下次登录可以选另一种,仅作为本次通讯的标识之一使用。 Password = Hash(明文密码) Salt:随机生成的盐。 Iteration:加盐计算时的迭代次数。 SaltedPassword = pbkdf2(Password, Salt, Iteration),已加盐的密码。 ClientNonce:客户端在Step1时随机生成的字符串,用于对本次交互签名。 ServerNonce:服务器在Step1时随机生成的字符串,用于对本次交互签名。 MixNonce = ClientNonce | ServerNonce,ClientNonce和ServerNonce的_按位或_结果。 ServerPub:用于服务器签名的公钥,不用保密,但也别改。 ClientPub:用于客户端签名的公钥,不用保密,但也别改。 ServerSignedPassword = HMAC(ServerPub, SaltedPassword) ClientSignedPassword = HMAC(ClientPub, SaltedPassword) HashedClientSignedPassword = Hash(ClientSignedPassword) Auth = UserIdentify + ClientNonce + Salt + MixNonce + MixNonce,直接连接即可,用于构造本次通讯上下文的签名。 SignedAuth = HMAC(Auth, HashedClientSignedPassword) ServerProof = HMAC(ClientSignedPassword, Auth),服务器给客户端的_身份证明_。 ClientProof = ClientSignedPassword XOR SignedAuth,客户端给服务器的_身份证明_。 工作流程 Client-Step1 客户端发送UserIdentify、ClientNonce给服务器端。...

2023-11-03 · 1 min

Win10下WSL安装Centos7子系统

1、控制面板设置 控制面板-程序和功能-启用或关闭Windows功能,勾选如下选项并重启 2、下载CentOS系统 下载地址:https://github.com/wsldl-pg/CentWSL/releases 选择自己对应的系统版本就好,我选择的是如下版本 3、解压 1、以管理员身份运行CentOS.exe,过程有点慢,要稍等一下,执行完窗口会自动关闭 2、目录下会自动创建两个文件夹rootfs和temp 3、验证是否安装成功,cmd命令行输入 wsl,出现如下所示,说明安装成功,大功告成,一台Linux虚拟主机创建完成 4、扩展 资源管理器输入\\wsl$,出现如下页面,可以清晰查看该虚拟主机下所有系统文件

2023-08-09 · 1 min

Docker容器资源的占用情况

1、启动容器并限制资源 启动一个centos容器,限制其内存为1G ,可用cpu数为2 docker run --name os1 -it -m 1024m或者1g --cpus=2 centos:latest bash 2、查看容器状态 docker top 容器名: 查看容器的进程,不加容器名即查看所有 docker stats 容器名:查看容器的CPU,内存,IO 等使用信息 docker stats (不带任何参数选项) docker stats --no-stream (只返回当前的状态) docker stats --no-stream 容器ID/Name (只输出指定的容器) docker stats --format “table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" (格式化输出的结果) 输出的主要了内容 [CONTAINER]:以短格式显示容器的 ID。 [CPU %]:CPU 的使用情况。 [MEM USAGE / LIMIT]:当前使用的内存和最大可以使用的内存。 [MEM %]:以百分比的形式显示内存使用情况。 [NET I/O]:网络 I/O 数据。 [BLOCK I/O]:磁盘 I/O 数据。 [PIDS]:PID 号。 获取容器的CPU消耗排行前五 docker stats --no-stream|awk '{print $3," "$1,$2}'|sort -h |tail -n 5 获取容器的内存消耗排行前五个...

2023-08-09 · 1 min