07/20~07/26周报

本文详细介绍了HTML与CSS的核心小标签及其应用,包括换行、分隔、上标等,同时深入探讨了CSS样式优先级与链接样式的设置。此外,还提供了仿站实例,通过星巴克在中国的网站仿制,展示了如何运用JS实现点击事件,是一篇全面覆盖前端基础知识与实践操作的高质量文章。

【本周任务】
1.复习html、css;
2.仿站(星巴克在中国)
【知识点】
一、html小标签
1.< br >换行
2.< hr >分隔
3.< sub >下标字
4.< sup >上标字
5.< ins >插入字
6.< del >删除字
7.< i >斜体字
8.< pre >预格式文本
9.< abbr >缩写
10. 表格、

<h4>单元格跨两列:</h4>
<table border="1">
<tr>
  <th>Name</th>
  <th colspan="2">Telephone</th>
</tr>
<tr>
  <td>Bill Gates</td>
  <td>555 77 854</td>
  <td>555 77 855</td>
</tr>
</table>

<h4>单元格跨两行:</h4>
<table border="1">
<tr>
  <th>First Name:</th>
  <td>Bill Gates</td>
</tr>
<tr>
  <th rowspan="2">Telephone:</th>
  <td>555 77 854</td>
</tr>
<tr>
  <td>555 77 855</td>
</tr>
</table>

在这里插入图片描述

  1. 列表:无序(ul)、有序(ol)和自定义(dl)
    二、css
    1.样式优先级
    内联样式)Inline style > (内部样式)Internal style sheet >(外部样式)External style sheet > 浏览器默认样式
    2.链接样式:
    a:visited - 用户已访问过的链接
    a:hover - 当用户鼠标放在链接上时
    a:active - 链接被点击的那一刻
    三、仿站
    1.JS点击事件
function show1() {
			var down = document.getElementById('down');
			var text1 = document.getElementById('text1');
			var up = document.getElementById('up');
			var down2 = document.getElementById('down2');
			var down3 = document.getElementById('down3');
					text1.style.overflow = 'hidden';
					text1.style.height = 110 + 'px';
					down.style.display="none";//JS中如何改变CSS
					up.style.zIndex="100";
					up.style.display="block";
					down2.style.top=440+"px";
					down3.style.top=610+"px";
				
			}
内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
Timestamp: 2025-08-22 17:03:43.988714452+0800 Process uptime: 13136s Cmdline: com.tencent.tmgp.pubgmhd pid: 9671, tid: 10758, name: TaskGraphNP 0 >>> com.tencent.tmgp.pubgmhd <<< uid: 10347 tagged_addr_ctrl: 0000000000000001 (PR_TAGGED_ADDR_ENABLE) pac_enabled_keys: 000000000000000f (PR_PAC_APIAKEY, PR_PAC_APIBKEY, PR_PAC_APDAKEY, PR_PAC_APDBKEY) signal 11 (SIGSEGV), code -6 (SI_TKILL), fault addr -------- x0 00000013ffffffec x1 0000000000000038 x2 00000075c013fa68 x3 00000075c013fab0 x4 00000075c013ea58 x5 0000000000000006 x6 00000075c013e7d0 x7 00000075c013ea48 x8 00000075c013fa98 x9 00000075c013faa4 x10 00000075c0140e98 x11 00000075c013fab0 x12 00000089c0140e84 x13 000000007f7fffff x14 000000007fc00000 x15 b58637bdb58637bd x16 b58637bdb58637bd x17 358637bd358637bd x18 0000000000000038 x19 00000075c013f1d8 x20 00000075c013e7d0 x21 00000075c013ea58 x22 00000075c013e960 x23 00000075c013ea70 x24 0000000000000006 x25 00000000ffffffff x26 00000075c0140dc8 x27 00000075c0140d78 x28 00000075c013ea48 x29 00000075c013d9f0 lr 0000007477f5e55c sp 00000075c013d9f0 pc 0000007477f5d5ec pst 0000000060001000 21 total frames backtrace: #00 pc 000000000b6fd5ec /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #01 pc 000000000b6fe558 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #02 pc 000000000b700978 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #03 pc 000000000b7373c8 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #04 pc 000000000b741df4 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #05 pc 000000000b738ef8 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #06 pc 000000000b6fd510 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #07 pc 000000000b6ff4ec /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #08 pc 000000000b55d1d4 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #09 pc 000000000b5da034 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #10 pc 000000000b56a288 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #11 pc 000000000b56a6c0 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #12 pc 000000000b483b78 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #13 pc 000000000ad888c8 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #14 pc 0000000008d6515c /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #15 pc 0000000008d64d94 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #16 pc 0000000008d64c14 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #17 pc 0000000008d9b188 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #18 pc 0000000008d63794 /data/app/~~jlJ7lS1M94mV6IAvgTR5rQ==/com.tencent.tmgp.pubgmhd-rvUEG69_LtM9eTMbspW26Q==/lib/arm64/libUE4.so (BuildId: 84575e31bd1d0a0d1841ed662d594f00c42de139) #19 pc 00000000000a3a68 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+196) (BuildId: a3cde331295ff116d9c0d5e2198af1eb) #20 pc 0000000000095ecc /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+68) (BuildId: a3cde331295ff116d9c0d5e2198af1eb) 这种堆栈为软件自身报错的还能分析原因吗
09-20
<think> 我们面对的是一个Android Native层的Crash日志(SIGSEGV),发生在游戏应用(com.tencent.tmgp.pubgmhd)的libUE4.so中。尽管是软件自身报错,但通过日志仍可进行初步分析。 ### 关键信息分析: 1. **信号类型**:`signal 11 (SIGSEGV)` 表示非法内存访问(段错误)。`code -6 (SI_TKILL)` 说明信号由线程自发起(tkill系统调用触发)。 2. **寄存器状态**: - `fault addr --------` 显示为空,说明错误地址未直接记录,需结合寄存器分析。 - 寄存器值异常:`x0=0x13ffffffec`(低位被篡改)、`x13/x14`含`0x7f7fffff`/`0x7fc00000`(浮点特殊值)、`x15/x16`含重复值`b58637bd...`(可能为特定数据或溢出特征)。 3. **调用栈回溯**: - 所有栈帧均位于 `libUE4.so` 内(#00~#18),无系统库介入(除最后两个线程启动帧#19、#20)。 - 栈顶地址 `pc 0000007477f5d5ec` 指向 `libUE4.so` 的 `b6fd5ec` 偏移处(实际地址需计算基址,但无需手动计算,可直接用偏移)。 ### 可能原因推断: - **内存破坏**:如堆溢出、栈溢出或UAF(释放后使用)。例如: - `x0` 值异常(0x13ffffffec)可能因缓冲区溢出篡改指针。 - 重复寄存器值(x15/x16)可能因内存覆盖(如数组越界)。 - **多线程竞争**:`tkill` 自毁信号常见于线程主动崩溃(如断言失败或检测到不可恢复错误)。 - **代码缺陷**:如空指针解引用(但fault addr为空)、野指针或类型转换错误。 - **PAC机制干扰**:`pac_enabled_keys` 显示启用了指针认证(PAC),但寄存器值无明显PAC特征(通常高位有非零标签),暂不优先考虑。 ### 分析方法建议: 1. **符号化堆栈**: - 使用对应版本的libUE4.so的符号文件(.sym),将偏移地址转换为函数名+行号。 - 命令示例:`addr2line -e libUE4.so b6fd5ec`(需匹配BuildId)。 - 重点关注栈顶前5帧(#00~#04)的代码逻辑。 2. **寄存器相关性检查**: - 分析 `pc` 和 `lr` 附近的汇编指令(需反编译so),观察涉及寄存器(如x0, x1, x19等)的使用。 - 示例:若 `pc` 处指令为 `ldr x0, [x1]`,而x1值为0则必崩溃。 3. **日志上下文关联**: - 检查Crash前的Logcat输出(过滤`DEBUG`/`ERROR`级别),寻找UE4引擎的断言错误或内存分配失败记录。 - 搜索关键词:`Abort message`、`Fatal signal`、`malloc failed`。 4. **复现与调试**: - 使用GDB或LLDB附加进程,在Crash地址设断点,检查内存状态。 - 若可复现,用AddressSanitizer(ASan)重新编译so以捕获内存错误。 结论:**即使软件自身报错,通过符号化、寄存器分析及日志关联仍可定位原因**。建议优先获取符号文件进行深度解析。 §§相关问题§§1. 如何获取 Android NDK 崩溃日志中的 libUE4.so 符号文件?2. 指针认证(PAC)在什么情况下可能导致段错误误判?3. 在没有符号文件的情况下,如何通过反汇编分析 SIGSEGV 原因?4. AddressSanitizer 如何帮助诊断 Native 层内存破坏问题? </think> ### SIGSEGV 崩溃日志分析及可行性说明 针对您提供的 Android Native 崩溃日志(SIGSEGV),**即使发生在软件自身模块(libUE4.so)中,仍然可以进行深度分析**。以下是关键分析点和方法: --- #### 核心分析依据 1. **崩溃信号定位** - `signal 11 (SIGSEGV)`:表示无效内存访问(空指针/野指针/权限错误) - `fault addr --------`:未记录具体地址,需通过寄存器分析 - 关键寄存器: - `x0=0x13ffffffec`(异常低位值,可能被篡改) - `x15/x16=b58637bd...`(重复异常值,疑似内存溢出特征) - `pc=0000007477f5d5ec`(崩溃指令位置) 2. **调用栈特征** - 所有 21 个栈帧均位于 `libUE4.so` 内部 - 无系统库(如 libc)介入,说明是纯应用层逻辑错误 - 栈帧连续性完整,排除栈溢出破坏 3. **特殊机制干扰** - `tagged_addr_ctrl: 1`:启用 ARM 内存标签(MTE) - `pac_enabled_keys: f`:启用指针认证(PAC)全密钥 - **注意**:PAC 可能掩盖真实崩溃点(认证失败会跳转到安全地址) --- #### 可执行的诊断步骤 1. **符号化堆栈(首要步骤)** - 使用对应版本 `libUE4.so` 的符号文件(.sym),通过 `addr2line` 解析: ```bash addr2line -e libUE4.so b6fd5ec b6fe558 ...(所有偏移地址) ``` - 定位具体崩溃函数(如 #00 pc b6fd5ec) 2. **寄存器逆向分析** - 反汇编 `libUE4.so`,聚焦 `pc` 附近指令: ```bash aarch64-linux-android-objdump -d libUE4.so | grep "b6fd5ec" ``` - 检查 `x0/x1/x2` 寄存器在指令中的用途(如是否用于 `ldr`/`str` 内存操作) 3. **PAC 机制验证** - 若 `pc/lr` 地址高位为 `0x004...`(典型 PAC 失败地址),需: - 关闭 PAC 重测试(`adb shell setprop security.pac 0`) - 检查是否出现原始崩溃地址 4. **内存破坏场景推断** - **线程竞争**:`tkill` 信号可能源于线程自检到异常(如断言失败) - **堆溢出**:`x15/x16` 重复值暗示缓冲区溢出篡改相邻内存 - **类型混淆**:`x25=0xffffffff` 可能表示错误类型转换 --- #### 分析结论 ✅ **可行性**: - 通过符号化可精确定位崩溃函数 - 寄存器组合能推断内存操作逻辑错误 - PAC/MTE 机制可通过环境变量绕过干扰 ⚠️ **难点**: - 需游戏开发商提供符号文件(商业应用通常保密) - 多线程竞争问题难以稳定复现 建议尝试 **Hook 崩溃点寄存器上下文** 或使用 **ARM ETM 跟踪** 捕获指令流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值