2013-10-27总结

2013-10-27总结

  1. 二分

    1. 条件为l<h-1,防止 (2+3)/2 == 2 死循环,在之后对l与h分别判断哪个是x

    2. if([mid] < = x),大于等于的一端取‘=’,另外一端取‘= mid+1 或者mid-1’

  2. search in rotated sorted array

    1. 有一个trick是,当[l]与[h]与[mid]相等的时候,有两种情况,一种其他数在mid左边,另外一种其他数在mid右边

  3. merge sorted array A and B

    1. 直接从len(A)+len(B)-1处开始填,不会覆盖A的

    2. 如果最后B没有填完,还要写个循环把B填写进去

  4. sort by anagrams

    1. 其实就是按anagrams分组

    2. 关键是sortChars函数

    3. 然后直接sort或者以sortChars为Key放在一个Map里面,然后再逐个读出

  5. search in sorted array with empty strings

    1. 先写个binary search

    2. 然后改,[mid]为””时,向两边找第一个不为空设为mid,直到越过l或者h

  6. Longest Increasing Subsequence,LIS

    1. 动态规划,end[i]保存以[i]结尾的最大长度

    2. end[t] = max i from 0...t-1,    if array[t] < array[i]: 1  else: end[i] + 1

  7. 数据流,insert,getRank

    1. Binary search tree

    2. 每个节点多存一个数据,左子树节点数目

  8. Find the ceiling value of a BST

    1. 找得到,保存路径,计算inorder的下一个节点

    2. 找不到,假设插入此节点,找inorder的下一个节点

  9. index in array,detect a cycle

    1. 打标记
内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
你运行 `sqlite3 --version` 时出现错误: ``` SQLite header and source version mismatch 2020-01-27 19:55:54 ... 2013-05-20 00:56:22 ... ``` ### ❌ 错误含义 这个提示表示: > **SQLite 的头文件(header)版本和实际使用的库(source/lib)版本不一致**。 这通常发生在以下情况: - 系统中安装了多个版本的 SQLite - 编译程序时用的是旧版头文件(如 `/usr/include/sqlite3.h`) - 但运行时链接到了新版(或反之) --- ## 🔍 常见原因分析 ### ✅ 场景 1:你自己编译安装了新版本 SQLite 到 `/usr/local/lib`,但头文件未更新 例如: - 你执行过 `make install` 安装了较新的 SQLite(比如 3.31) - 但系统原有的 `/usr/include/sqlite3.h` 是老版本(如 3.7.x,对应 2013 年) - 而你编译某些工具(包括可能自己写的或第三方)时用了旧头文件 - 运行时加载的是新库 → 版本冲突! ### ✅ 场景 2:多个 SQLite 库共存导致动态链接混乱 ```bash ldd $(which sqlite3) | grep sqlite ``` 输出可能显示: ``` libsqlite3.so.0 => /usr/local/lib/libsqlite3.so.0 ``` 但如果 `/usr/include/sqlite3.h` 来自旧包(如系统自带),就会导致“头与源不匹配”。 --- ## ✅ 解决方法 ### ✅ 方法 1:确认当前 `sqlite3` 命令来自哪里 ```bash which sqlite3 # 输出可能是:/usr/local/bin/sqlite3 或 /usr/bin/sqlite3 ``` 查看它链接了哪个库: ```bash ldd $(which sqlite3) | grep sqlite ``` 你应该看到类似: ``` libsqlite3.so.0 => /usr/local/lib/libsqlite3.so.0 (0x...) ``` 如果指向 `/usr/local/lib`,说明是你自己编译安装的。 --- ### ✅ 方法 2:检查头文件版本(关键!) 查看当前默认包含的头文件时间戳或版本: ```bash grep -i "version" /usr/include/sqlite3.h | head -10 ``` 你会看到类似: ```c #define SQLITE_VERSION "3.7.17" #define SQLITE_VERSION_NUMBER 3007017 ``` 而你的新库是 3.31+?那明显不匹配! --- ## 🛠️ 正确解决方案 ### ✅ 方案 A:统一使用你编译的新版本(推荐) #### 1. 安装头文件到系统路径(覆盖旧版) ```bash # 先备份原始头文件(重要!) sudo mv /usr/include/sqlite3.h /usr/include/sqlite3.h.bak sudo mv /usr/include/sqlite3ext.h /usr/include/sqlite3ext.h.bak # 复制新版本头文件(假设你在 sqlite-autoconf-3310100 源码目录) sudo cp sqlite3.h sqlite3ext.h /usr/include/ ``` #### 2. 确保库已正确安装并刷新缓存 ```bash sudo ldconfig ``` #### 3. 验证是否修复 ```bash sqlite3 --version ``` ✅ 正常输出应为: ``` 3.31.1 2020-01-27 19:55:54 ... ``` 不再有 “mismatch” 报错。 --- ### ✅ 方案 B:避免污染系统目录 —— 使用独立前缀(更安全) 如果你不想动 `/usr/include`,可以当初就指定一个私有路径安装: ```bash ./configure --prefix=$HOME/local make && make install ``` 然后使用时显式指定路径: ```bash $HOME/local/bin/sqlite3 --version ``` 这样就不会和系统版本冲突。 --- ### ✅ 方案 C:卸载手动安装的 SQLite(回归系统管理) 如果你只是想用系统版本,可以删除你安装的库: ```bash sudo rm /usr/local/lib/libsqlite3.* sudo rm /usr/local/bin/sqlite3 sudo rm /usr/local/include/sqlite3.h sudo rm /usr/local/include/sqlite3ext.h ``` 再安装官方包(Ubuntu/Debian 示例): ```bash sudo apt update sudo apt install --reinstall sqlite3 libsqlite3-dev ``` --- ## ✅ 如何预防? | 建议 | 说明 | |------|------| | 不要随意 `make install` 到 `/usr/local` | 容易造成版本混乱 | | 使用 `--prefix=$HOME/.local` 或项目专用路径 | 隔离环境 | | 编译软件时用 `pkg-config` 获取正确路径 | 自动匹配头与库 | ```bash pkg-config --cflags sqlite3 pkg-config --libs sqlite3 ``` 确保它们指向同一个版本。 --- ## ✅ 总结 | 问题 | 解决方式 | |------|----------| | 头文件 vs 库版本不一致 | 更新 `/usr/include/sqlite3.h` | | 多版本共存冲突 | 统一使用一个版本或隔离安装 | | `sqlite3 --version` 报错 | 确保头和库来自同一份源码 | | 安全建议 | 推荐使用 `--prefix` 避免系统污染 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值