2024-06-20
生活
00

准则一:股市不可能天天挣钱的,尤其是A股,所以一定要多观察再买入

准则二:买股票不要临时起意从而买入,一定是按照自己的买入体系,提前分析看好的

准则三: 同一个票短期内一旦卖出后,及时出现反转,也一定不要再买入了

准则四: 下跌破位的票,一定不能留恋,破五日线后,如果几条线距离很近可以拿着,要是距离比较远,打死都要走,最多撑到十日线(找到一只票的支撑均线)

2024-07-08
linux相关
00

提示

以下内容的目的,只是为了学习合法的知识

准备
  • 域名
  • 国外服务器(目前使用的是搬瓦工的服务器)
申请域名证书
服务搭建
  1. 通过gost搭建http2服务
2024-06-05
linux相关
00

centos安装supervisor详细教程

解释说明

sh
supervisor:要安装的软件的名称。 supervisord:装好supervisor软件后,supervisord用于启动supervisor服务。 supervisorctl:用于管理supervisor配置文件中program。

安装

使用yum命令安装 切换为root用户

sh
yum install epel-release # 如果已安装EPEL源,请跳过 yum install -y supervisor systemctl enable supervisord # 开机自启动 systemctl start supervisord # 启动supervisord服务 systemctl status supervisord # 查看supervisord服务状态 ps -ef|grep supervisord # 查看是否存在supervisord进程
2026-01-11
其他
00

相关信息

TCP粘包和拆包理解

  • tcp粘包的原因
    • tcp本身是面向流的协议,是没有消息边界的
    • TCP 为了效率,会把多个小的数据包合并成一个大的发出去(Nagle 算法);
    • 接收方处理不够快,多个包积压在接收缓冲区里,一次性读出来了
  • 拆包
    • 数据包太大,超过了 MSS(最大报文段长度),
    • IP 层进行了分片,导致一个完整的消息被切断成两半发送。
    • 解决方案
      • 包设置固定长度
      • 增加分隔符
      • 消息头带长度(Length Field Based)(把包分成“头”和“体”)
      • 自定义序列化协议
        • 使用 Protobuf、JSON 等。虽然它们本身不解决粘包,但通常配合方案 C 使用
2025-12-16
技术
00

相关信息

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

js
package main import ( "fmt" ) // 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 // 最近公共祖先的定义:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x, // 满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” // 例如,如下二叉树: Integer[] levelOrder = {3,5,1,6,2,0,8,null,null,7,4}; // 3 // 5 1 // 6 2 0 8 // 7 4 type TreeNode struct { Val int Left *TreeNode Right *TreeNode } func main() { // 构建二叉树 root := &TreeNode{Val: 3} root.Left = &TreeNode{Val: 5} root.Right = &TreeNode{Val: 1} root.Left.Left = &TreeNode{Val: 6} root.Left.Right = &TreeNode{Val: 2} root.Right.Left = &TreeNode{Val: 0} root.Right.Right = &TreeNode{Val: 8} root.Left.Right.Left = &TreeNode{Val: 7} root.Left.Right.Right = &TreeNode{Val: 4} // 测试最近公共祖先 p := root.Left.Right.Left q := root.Left.Right.Right lca := lowestCommonAncestor(root, p, q) fmt.Println("最近公共祖先:", lca.Val) // fmt.Println("Hello world!") } func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode { if root == nil || root == p || root == q { return root } left := lowestCommonAncestor(root.Left, p, q) right := lowestCommonAncestor(root.Right, p, q) if left != nil && right != nil { return root } if left != nil { return left } return right }