Cache Aside

Question & Answer 1. 什么是 cache aside 模式 Cache aside 可能是最常用的缓存方法。此策略规定缓存必须位于一侧,并且应用程序将直接与缓存和数据库通信。 Cache aside通常是通用的,最适合读取密集型工作负载。 缓存流程 查询策略 +---------------------+ | 查询缓存数据 | +---------------------+ | v +---------------------+ | 缓存命中?(是/否) | +---------------------+ | | |是 |否 v v +---------+ +---------------------+ | 返回数据 | | 查询数据库 | +---------+ +---------------------+ | v +---------------------+ | 将数据写入缓存 | +---------------------+ | v +---------------------+ | 返回数据 | +---------------------+ 更新策略 +---------------------+ | 数据更新请求 | +---------------------+ | v +---------------------+ | 更新数据库 | +---------------------+ | v +---------------------+ | 删除缓存或使之失效 | +---------------------+ 2....

November 29, 2024 · 1 min · LwQ

Efficient AI Practice

Question 针对prompt engineering 的特点,描述在使用 gemini 时应该怎么做从而获取更加准确的答案 Answer 明确且具体的问题 避免模糊不清的提问:尽量使用明确的动词和名词,避免使用“大概”、“可能”等模糊词语。 提供背景信息:如果问题涉及到特定的领域或知识,提供相关的背景信息能帮助模型更好地理解你的需求。 限定回答范围:如果希望得到特定类型的答案(例如:总结、比较、分析),明确提出你的要求。 多次尝试,微调Prompt 不断迭代:如果第一次得到的答案不理想,可以尝试修改Prompt,例如调整关键词、改变提问方式等。 拆分问题:如果问题过于复杂,可以尝试将其拆分成几个小问题,逐一解决。 提供反馈:如果模型的回答与你的预期不符,可以提供具体的反馈,帮助模型改进。 充分利用Gemini的优势 上下文理解:Gemini具有强大的上下文理解能力,你可以将相关信息(例如:文章、对话记录)作为Prompt的一部分,帮助模型更好地理解你的问题。 多模态能力:如果有图片、视频等多模态信息,可以尝试将它们融入到Prompt中,获取更全面的答案。 推理能力:Gemini具备一定的推理能力,你可以提出一些需要推理的问题,例如“根据以下信息,你认为……?” 注意Prompt的技巧 使用引导词:使用“请”、“告诉我”、“解释一下”等引导词,可以帮助模型更好地理解你的意图。 使用限定词:使用“简要”、“详细”、“举例说明”等限定词,可以控制答案的长度和风格。 使用开放式问题:如果希望得到更深入的答案,可以尝试使用开放式问题,例如“你认为……的原因是什么?” 参考 what is prompt-engineering

September 25, 2024 · 1 min · LwQ

Database Normalization

目标 试图搞清楚1NF、2NF、3NF的规范含义 试图找到一种范式与非范式之间的平衡应用与日常开发 题目 给定以下数据表,参考数据库设计范式进行结构优化,可以输出ER图或者表定义 表结构 CREATE TABLE Orders ( order_id INT PRIMARY KEY, -- 订单ID customer_name VARCHAR(255), -- 客户名称 customer_address VARCHAR(255), -- 客户地址 order_date DATETIME, -- 订单日期 product_id INT, -- 产品ID product_name VARCHAR(255), -- 产品名称 quantity INT, -- 数量 unit_price DECIMAL(10, 2), -- 单价 total_price DECIMAL(10, 2), -- 总价 sales_rep_id INT, -- 销售代表ID sales_rep_name VARCHAR(255), -- 销售代表名称 sales_rep_phone VARCHAR(20), -- 销售代表电话 delivery_date DATETIME, -- 交货日期 payment_method VARCHAR(50), -- 支付方式 payment_status VARCHAR(50) -- 支付状态 ); 表数据例子 order_id customer_name customer_address order_date product_id product_name quantity unit_price total_price sales_rep_id sales_rep_name sales_rep_phone delivery_date payment_method payment_status 1 A 华盛顿特区宾夕法尼亚大道1600号 2023-08-01 14:00:00 101 笔记本电脑 2 800....

August 29, 2024 · 2 min · LwQ

Docker Storage

Q1:docker 数据管理有哪几种方式,各有什么特点 volume 由docker管理,不应被其他进程更改 持久化的 可由多个容器复用 支持卷驱动(可远程存储) bind mount 可在宿主机任意位置 可被其他进程更改 持久化的 可由多个容器复用 tmpfs mount 存储在宿主机内存中,可快速读写,不会写入持久存储设备 容器停止或重启时,tmpfs的数据可以自动清除 Q2:每种数据管理方式使用场景举一个例子 volume 挂载数据库数据文件 bind mount 挂载配置文件 tmpfs mount 用做缓存目录,如nginx的proxy_cache_path 参考 https://docs.docker.com/storage/

July 25, 2024 · 1 min · LwQ

Go Trace

Q1:请使用 runtime/trace 包,写一个使用trace的例子 启动两个goroutine,记录trace func main() { f, err := os.Create("trace.out") if err != nil { log.Fatalf("failed to create trace file: %v", err) } defer f.Close() if err := trace.Start(f); err != nil { log.Fatalf("failed to start trace: %v", err) } defer trace.Stop() var wg sync.WaitGroup wg.Add(2) go wait(&wg) go sum(&wg) wg.Wait() } func wait(wg *sync.WaitGroup) { defer wg.Done() time.Sleep(2 * time.Second) } func sum(wg *sync.WaitGroup) { defer wg.Done() i, s := 0, 0 ch := time....

May 29, 2024 · 1 min · LwQ

Go插件的使用

Q1:说明 go plugin 使用场景,并编写一个使用 plugin 的 demo Go plugin支持将Go包编译为共享库(.so)的形式单独发布,主程序可以在运行时动态加载这些编译为动态共享库文件的go plugin,从中提取导出(exported)变量或函数的符号并在主程序的包中使用。Go plugin的这种特性为Go开发人员提供更多的灵活性,我们可以用之实现支持热插拔的插件系统。 demo 通过不同插件实现io.StringWriter,可将输出保存到不同地方 plugin/plugin.go package main import ( "fmt" "log" "os" ) func init() { log.Println("stdoutStringWriter init") } type stdoutStringWriter struct{} func (w *stdoutStringWriter) WriteString(s string) (n int, err error) { return fmt.Fprint(os.Stdout, s) } var StringWriter stdoutStringWriter main.go package main import ( "io" "log" "plugin" ) func main() { log.SetFlags(log.Lshortfile | log.LstdFlags) p, err := plugin.Open("./plugin/plugin.so") if err != nil { panic(err) } w, err := p....

May 29, 2024 · 1 min · LwQ