Engagement
很多个人项目在一开始都很轻,但真正变得难维护,通常不是因为功能多,而是因为每个决定都没有留下边界。
我更喜欢先梳理页面目标。首页回答“我是谁、这里写什么”,文章页回答“这一篇内容是否值得继续读”,归档页回答“内容是否容易回看”。
当这些问题先被回答,组件才会自然出现,而不是为了抽象而抽象。
文章的 title、desc、date、tags 和 category 不只是展示字段,它们决定了列表如何聚合、读者如何筛选,也决定了站点未来能否低成本扩展搜索、订阅与推荐。
一个博客如果能被持续更新,靠的不是一次性做出多完整的功能,而是每次增加内容时都不会重新发明流程。
这也是我喜欢极简系统的原因: 它给未来留出了空间。
#include <iostream>
#include <random>
#include <chrono>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {
}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {
}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {
}
};
class Solution {
public:
bool isValidBST(TreeNode* root) {
if(!root) return true;
bool l = isValidBST(root->left);
bool r = isValidBST(root->right);
if(!l || !r) return false;
if(root->left && root->left->val >= root->val) return false;
if(root->right && root->right->val >= root->val) return false;
return true;
}
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
Solution s;
TreeNode *root = new TreeNode(2);
root->left = new TreeNode(1);
root->right = new TreeNode(3);
s.isValidBST(root);
// cout << p << endl;
return 0;
}