如果有一家程序员餐厅,那么进店应该如何点菜?

哈哈,你的想法很有趣!去年我在杭州遇到一家程序员主题餐厅,果然如你所说。
但我是一个纯粹的爱瓜人士,所以大部分笑话我都听不懂,所以我也只是附和而已。

当时我们选择了Java盒子,只是觉得那里的氛围很合适。
所有的墙上都挂满了 JVM 之类的图表,还有有趣的问题和答案,比如:“为什么我们在 Java 中不能有多重继承?”小哥特服务员过来问道:“需要继承菜单吗?还是直接创建订单实例?我当时一头雾水,但还是跟着乐禾点了“多股烤鱼”。
服务员说:“这个需要加同步锁,不然很容易锁!”我随即笑了起来,不知道他是在说鱼还是别的什么。

他们订购的方式确实很特别。
朋友让服务员用Python写一个点菜函数,坚持要加异常语句。
服务员确实做了,但字迹太复杂,最后还是点了。
但这个过程真的很令人兴奋。

他们的菜单也非常精致。
我们尝试了“非凡炸鸡”,服务员说上面有“尝试捕捉酱汁”,实际上是番茄酱。
还有一个“浮点错误汤”。
提供的份量确实不准确。
这估计是故意的吧哈哈我们点了“无限循环冰淇淋”,结果发现我们实际上可以无限续杯。
我们吃到肚子疼才停下来,哈哈。

但是有些事情他们做得不太好。
有一种菜叫尖椒炒饭。
服务员花了很长时间解释,但我们还是不太明白那是什么,所以我们最后点了最简单的。
我认为像这样的餐厅最好有某种“翻译服务”,否则非程序员会感到困惑。

总的来说,这种类型的餐厅确实很有趣,但是你需要找到合适的人一起玩,否则你自己可能会感到困惑。
但如果遇到懂行的朋友,那肯定是新体验。
下次有机会的话我一定带朋友来尝尝,哈哈。

PHP和MySQL搭建美食网站的菜品推荐功能

说实话,你写的已经很完整了。
但是你需要了解如何使用PHP和MySQL来推荐食物。
不要一步一步地去弥补薄弱环节。

我们先来谈谈数据库。
这款手表的设计是不言自明的。
菜品、品类、用户都相当标准。
键位于两个表中:user_preferences 和 user_history。
通过使用用户ID链接类别ID和菜肴ID,您可以捕获用户的想法。
当时我不明白为什么他们不直接使用用户ID和菜品ID来创建表,但是这样拆分表可能更方便。
不管怎样,核心思想是正确的:记住用户想看什么、想买什么。

从算法上来说,你提到的三种方法都非常好。
我们首先推荐类别。
这是最简单的。
例如,如果用户喜欢川菜,则可以直接查看user_preferences表来查找对应的菜系。
代码非常简单,只需要使用JOIN即可。

第二个推荐是有历史根据的,非常个人化。
例如,用户昨天看到了一些麻辣火锅,那么今天我们推荐了类似的火锅。
要获取最近查看的信息,请使用 ORDER BYuh.viewed_at DESC。
但要注意不要反复按压。
您应该添加 WHERE 子句或检查用户上次看到这道菜的时间。

第三个建议来自评估。
这很简单:ORDER BY 评估 DESC。
但说实话,仅仅看收视率是不够的。
也许用户喜欢看到高价的产品。
所以一般都是把分数合并起来。

第四个总体推荐,这是最好的。
首先按用户偏好进行过滤,然后按历史记录和评分进行排序。
你写的SQL很周到。
使用子查询计算 view_count 并执行 ORDER BY。
但是,此查询可能需要很长时间,因此您需要添加索引。

就性能而言,索引是必须的。
索引外键(例如 user_id、category_id、dish_id)可以明显更快。
分页也非常重要。
例如,您只能在一个页面上显示 5 条推荐。
不要一次性推动它们。
缓存更为关键。
使用Redis存储热门推荐,这样您就不必每次都检查数据库。

从隐私角度来看,匿名化至关重要。
不要直接使用用户 ID,使用哈希值或类似的东西。
还应该实施访问控制,以便任何人都无法检查用户数据。
对此要小心。

在用户体验方面,前端交互流畅。
通过使用 Vue.js 或 React 动态加载数据,用户只需滑动一下即可看到更多推荐。
你不仅需要修复一些东西,还必须让它变得有点随机。
否则,用户会厌倦每天看到同样的东西。
用户还可以点赞和不喜欢。
这个反馈对于算法优化非常重要。

我们不会总结任何其他内容。
无论如何,就是这样。
精心设计的数据库是基础。
算法必须与真实的用户行为相结合。
性能和隐私不得受到损害。
最终,用户体验必须是流畅的。
在实践中,这可能是一项艰巨的任务,因为必须根据数据量和用户反馈不断调整参数。