Luyu Huang's Blog
  • Home
  • Archives
  • Tags
  • Links
  • About
  • Feed

Promise 和 Deferred

1. 引言 这篇文章笔者想讨论一下 JavaScript 中的 Promise 和 Python Twisted 中的 Deferred(jQuery 中也有 Deferred, 它们的思路是一致的). 它们很有趣, 也有点复杂. 在协程被广泛应用之前, 它们在网络编程中起到了重要的作用. 在此之前, 我们先来看看一些基本概念. 2. 从请求说起 请求和响应 我们在进行网络编程的时候, 总是会用到
February 9, 2020
#featured #design

三个思路相通的最大面积问题

笔者在 LeetCode 上看到了三个非常有意思的最大面积问题, 这里来分享一下. 1. 接雨水 题目源自Leetcode: 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 trapping-rain-water 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水
January 16, 2020
#algorithms #leetcode

2019 Annual Summary

On September 15, 2017, the first day I joined the company, I told myself that I joined a good company which has a good treatment but I was not feeling happy at all. I had plenty of worry and confusion
January 1, 2020
#essays #english

通过弹幕背单词

众所周知, 对于程序员来说, 最重要的语言不是 C, 不是 C++, 不是 Java, 而是英语. 十分不幸的是, 鄙人极其不擅长英语, 尤其是背单词: 背完即忘. 我需要的是高频重复. 所以我决定采取点措施, 然后就做了这个: DWords. 它可以单词变成屏幕上的弹幕, 用起来就像这样: screenshot 这样在工作写代码的时候就会时不时地飘过来一个弹幕, 不断地强化重复记忆. 我认
January 1, 2020
#tools

如何优雅地实现一个新手引导系统

笔者最近要在项目中实现一个新手引导系统. 新手引导其实上是一个比较复杂的系统, 与许多具体的功能紧密相关, 其中涉及到的特殊处理也比较多. 这篇文章我想谈谈新手引导的设计思路, 尽量不涉及具体的引擎框架和实现. 事件驱动 整个新手引导的流程应是事件驱动的. 比如说当宠物功能开启时在宠物功能按钮上显示引导提示, 当点击 A 按钮时把引导提示移动到 B 按钮上. 对于特殊的事件, 我们可以在必要的地方
December 21, 2019
#design

[翻译] Jekyll 手把手教学

本文由 Luyu Huang 翻译, 原文地址 https://jekyllrb.com/docs/step-by-step/01-setup/. 欢迎提 issue 来帮助我改进翻译 1. 配置 欢迎来到 Jekyll 的手把手教学. 这个教程的目标是让你从只有一点点 web 开发经验到能够构建一个 Jekyll 站点 – 不依赖于默认的主题. 现在就开始吧! 安装 Jekyll 是使用 R
November 28, 2019
#tools #featured #translations

安全地传递密码

前端要想安全地将密码传递给后端, 应该按照以下几步操作: 前端 1. 将明文密码作 md5 哈希; 2. 将哈希过的密码拼上一段随即生成的, 固定长度的盐; 3. 将上一步的结果使用后端的公钥加密并传递给后端. 后端 1. 将前端传递过来的密码用私钥解密; 2. 去盐. 因为盐是固定长度的, 所以直接裁剪即可; 3. 再次随机生成一段盐; 4. 将第2步去盐后的密码拼上第3步生成的盐, 并作 md
November 27, 2019
#experience

行为树及其实现

在笔者的项目中 NPC 要有自动化的行为, 例如怪物的巡逻, 寻敌和攻击, 宠物的跟随和战斗等. 完成这些需求最好的做法是使用行为树(Behavior Tree). 笔者查阅资料, 研究并实现了一个行为树, 可以满足游戏中相关的需求. 这里笔者简单作一些总结和分享, 推荐想要深入研究的同学去看文章最下面的参考资料, 这个一个非常好的行为树教程. 行为树的结构 顾名思义, 行为树首先是一棵树, 它有
November 18, 2019
#design

使用协程处理耗时过程

游戏服务器常常有一些耗时的操作, 比如说给全服玩家发放奖励. 如果直接写一个循环, 遍历全服玩家, 给每个玩家发放奖励, 那么整个过程可能持续几分钟, 十几分钟甚至几十分钟, 整个进程都阻塞在这个过程中了. 解决这个问题的一种做法是使用定时器, 比如说每处理完 50 个玩家, 就停 1 秒, 1 秒后继续处理, 就像这样: 123456789101112131415function deal(li
November 7, 2019
#lua

关于容错和断言的一些思考

实际项目中的代码总是多多少少会有一些问题的. 面对一些问题, 我们有两种做法: 一种是容错, 把错误自行消化掉, 让代码能够继续往下运行; 另一种是加断言, 让错误发生时抛出异常, 把错误暴露出来, 并且能中断当前过程, 避免后续行为未定义. 这两种策略中, 笔者更偏爱后者. 因为无脑的容错最后会导致问题的根源不被解决, 使问题堆积, 导致代码腐败. 毕竟解决问题的第一步是面对问题, 而不是回避它
November 4, 2019
#experience
1…56789

Search

© 2026 Luyu Huang's Blog, Powered by Hexo Fluid