【💰】vscode 在连接到 wsl 时后左边资源管理器显示如何屏蔽掉左边的 dot(.)开头文件(已尽力版)
为了把这个去掉甚至充了个 pro,
但是 opus 在写了那个 files.exclude 文件将各种 dot 文件屏蔽掉了
但是始终未能得到解决,这里也是力竭了
(图片好像不太会贴)
我一般都是直接打开项目的但是有时要做一些文件整理看到一堆 dot 文件就是很烦但纯终端笨人又难以适应
希望有佬遇到过相同的事
金币仍然给各位拉满了希望不吝指教
xiaohack博客专注前沿科技动态与实用技术干货分享,涵盖 AI 代理、大模型应用、编程工具、文档解析、SEO 实战、自动化部署等内容,提供开源项目教程、科技资讯日报、工具使用指南,助力开发者、AI 爱好者获取前沿技术与实战经验。
为了把这个去掉甚至充了个 pro,
但是 opus 在写了那个 files.exclude 文件将各种 dot 文件屏蔽掉了
但是始终未能得到解决,这里也是力竭了
(图片好像不太会贴)
我一般都是直接打开项目的但是有时要做一些文件整理看到一堆 dot 文件就是很烦但纯终端笨人又难以适应
希望有佬遇到过相同的事
金币仍然给各位拉满了希望不吝指教
机器是 512g 的,nas 划了 1T 做时间机器备份,今天又报空间不足了,但是页面上明明写着老旧备份会在空间不足时删除,这机制看着没用啊
顺便说一下这是第二次了,上一次我是清了整个时间机器盘,重新备份的
很羡慕软件大佬可以开论坛,搞社区;学习硬件久了,感觉软件能够输出的东西更加丰富多彩,硬件很局限!
坐标🐻厂,单解,打算仲裁,但担心后续的背调,请问各位大佬后续会有影响么?
https://github.com/ImSingee/git-plus
单一二进制直接运行,或是也打了一个 docker 镜像可用;建议运行在 NAS
从当年 GitHub 封了俄罗斯以后就一直想有这么个备份工具吧,之前靠一堆 bash 脚本完成的,现在算是借 AI 的手用 Go 重写了又做了个 Web 页面

1. 支持备份自己的 Repo 、Star 的 Repo 和 Watch 的 Repo
算是做了两方面的考量,一是自己写的代码存档下(防止被封号),二是自己收藏/关注的存档下(防止删库等)

2. 记录所有的变更历史
可能是自己误操作,也可能是收藏的 repo 出了什么变故;有的时候库可能还在,但 branch 被覆盖了
现有的工具遇到这种情况大都没做特殊处理,需要靠自己跑 reflog 或是按时间去找 commit
我的设计是,完整记录所有分支头的 commit 变化 —— 随意回滚

3. 定时同步
可选的定时同步,可以每天固定跑一次

期货功能
其实还有一些功能在计划中,比如索引所有的仓库来搜索、仓库有更新发通知(参考 ReleaseBot),也包括支持更多源(如 Gitlab )等,感兴趣的话也可以直接回复这个帖子,等发布了我 at 告知
约的时间是近四天内,无论选系统推荐的时间或是其它任何时间均是预约火爆,
我不死心,约 4 月 30 日系统推荐的时间总不火爆吧,很遗憾,依然是销售火爆。
问 Plus 客服说让我换时间约或约系统推荐时间除此无它。


Hermes 搭建可视化 web-dashboard 界面官网 hermes【https://hermes-agent.nousresearch.com/docs/user-guide/feature...】 查询当前版本是否和官网一致 升级版本 原因是 hermes 安全控制不允许本机之外访问,解决通过 nginx 代理。 编译环境 编译 启动 重启 nginx 服务 访问如下地址 如果不能访问确认端口是否启用 重启 hermes dashboard 后台启动命令Hermes 搭建可视化 web-dashboard 界面
官网升级版本配置解决通过 nginx 代理
升级版本
hermes versionhermes update配置 hermes dashboard
http://192.168.0.107:9119/hermes dashboard --host 0.0.0.0安装 nginx
curl -o nginx-1.26.2.tar.gz http://nginx.org/download/nginx-1.26.2.tar.gz
tar -zxvf nginx-1.26.2.tar.gz
cd nginx-1.26.2# 安装开发工具组(包含 gcc、make 等所有编译必需工具)
sudo yum groupinstall "Development Tools" -y./configure --prefix=/usr/local/nginx --with-http_ssl_module
make
sudo make installsudo /usr/local/nginx/sbin/nginx配置代理
cd /usr/local/nginx/conf/
vim nginx.confserver {
listen 9118;
#server_name 你的内网IP;
server_name 192.168.0.107
location / {
proxy_pass http://127.0.0.1:9119;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
# 注意:此处已移除 auth_basic 相关配置
}
}./nginx -s reloadhttp://192.168.0.107:9118/netstat -tlnp | grep 9119nohup hermes dashboard > /tmp/hermes-dashboard.log 2>&1 &
一、什么是配置中心? 配置中心,是把会变化的配置从程序里搬到程序外,并且能被集中、统一、可控地管理。 二、Go轻量级配置中心Consul的使用 1. 在配置中心配置一个KV “config/golang\_per\_day/50” 2. 编码 3. 运行程序 4. 在Consul中修改“config/golang\_per\_day/50”的值为 5. 程序里立马就热更新了配置 三、Consul做配置中心的优缺点 1. 优点: 2. 缺点: 四、比喻 Go 代码,是你真正掌握的东西。它决定了你能不能跑、会不会 panic、有没有并发安全。 Consul 配置,是你对现实的妥协方案。它不提升你的能力,只决定你在什么条件下不至于崩溃。 *源码地址* 1、公众号“Codee君”回复“每日一Go”获取源码 2、https://pan.baidu.com/s/1B6pgLWfSgMngVeFfSTcPdg?pwd=jc1s 如果您喜欢这篇文章,请您(点赞、分享、亮爱心),万分感谢!package main
import (
"bytes"
"fmt"
"log"
"os"
"os/signal"
"sync"
"syscall"
"github.com/gin-gonic/gin"
"github.com/hashicorp/consul/api"
"github.com/spf13/viper"
)
const (
srvName = "golang_per_day_50"
srvHost = "192.168.1.31" //这里写自己的 IP 地址,否则docker里的Consul无法访问到
srvPort = 8080
srvID = "golang_per_day_50-192.168.1.31:8080"
)
var (
appConfig *Config
lock sync.RWMutex
)
type Config struct {
Consul ConsulConfig `mapstructure:"consul" json:"consul"`
Redis RedisConfig `mapstructure:"redis" json:"redis"`
}
type RedisConfig struct {
Host string `mapstructure:"host" json:"host"`
Port int `mapstructure:"port" json:"port"`
Db int `mapstructure:"db" json:"db"`
Password string `mapstructure:"password" json:"password"`
}
type ConsulConfig struct {
Host string `mapstructure:"host" json:"host"`
Port int `mapstructure:"port" json:"port"`
}
func main() {
r := gin.Default()
// 定义一个 ping 接口
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
// 1. 定义健康检查接口
r.GET("/health", func(c *gin.Context) {
c.JSON(200, gin.H{
"status": "ok",
})
})
// 2. 读取配置中心的配置,这里用Consul
config := api.DefaultConfig()
config.Address = "192.168.1.31:8500" // Consul 的地址
client, _ := api.NewClient(config)
kvPath := "config/golang_per_day/50"
loadConfig(client, kvPath)
go watchConfig(client, kvPath)
// 3. 注册服务到 Consul
registerToConsul()
// 4. 启动 Gin 服务
go func() {
if err := r.Run(fmt.Sprintf(":%d", srvPort)); err != nil {
log.Fatal("服务启动失败: ", err)
}
}()
// 5. 优雅退出:监听信号注销服务
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
// 退出前注销服务
deregisterFromConsul()
log.Println("服务已退出并从 Consul 注销")
}
// 注册逻辑
func registerToConsul() {
config := api.DefaultConfig()
config.Address = fmt.Sprintf("%s:%d", appConfig.Consul.Host, appConfig.Consul.Port) // Consul 的地址
client, _ := api.NewClient(config)
registration := &api.AgentServiceRegistration{
ID: srvID,
Name: srvName,
Address: srvHost,
Port: srvPort,
Check: &api.AgentServiceCheck{
HTTP: fmt.Sprintf("http://%s:%d/health", srvHost, srvPort),
Interval: "5s", // 每 5 秒检查一次
Timeout: "3s", // 超时时间
},
}
err := client.Agent().ServiceRegister(registration)
if err != nil {
log.Fatal("注册失败: ", err)
}
log.Println("服务注册成功!")
}
// 注销逻辑
func deregisterFromConsul() {
config := api.DefaultConfig()
client, _ := api.NewClient(config)
_ = client.Agent().ServiceDeregister(srvID)
}
// 读取配置中心的 Redis 配置
func loadConfig(client *api.Client, path string) {
pair, _, err := client.KV().Get(path, nil)
if err != nil {
log.Fatal("读取配置失败: ", err)
}
v := viper.New()
v.SetConfigType("yaml")
err = v.ReadConfig(bytes.NewBuffer(pair.Value))
if err != nil {
log.Fatal("读取配置失败: ", err)
}
newConfig := Config{}
err = v.Unmarshal(&newConfig)
if err != nil {
log.Fatal("解析配置失败: ", err)
}
lock.Lock()
defer lock.Unlock()
appConfig = &newConfig
log.Println("Redis 配置更新: ", appConfig)
}
// 监听 Consul K/V 变化
func watchConfig(client *api.Client, path string) {
var lastIndex uint64
for {
// Consul 的 WaitIndex 机制:如果有变化会立即返回,否则阻塞直到超时
pair, meta, err := client.KV().Get(path, &api.QueryOptions{
WaitIndex: lastIndex,
})
if err != nil {
log.Printf("监听出错: %v", err)
continue
}
if pair != nil && meta.LastIndex > lastIndex {
lastIndex = meta.LastIndex
loadConfig(client, path)
}
}
}$ go run .
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET /ping --> main.main.func1 (3 handlers)
[GIN-debug] GET /health --> main.main.func2 (3 handlers)
2025/12/25 00:00:58 Redis 配置更新: &{{127.0.0.1 8500} { 6379 2 123456}}
2025/12/25 00:00:59 Redis 配置更新: &{{127.0.0.1 8500} { 6379 2 123456}}
2025/12/25 00:00:59 服务注册成功!
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://github.com/gin-gonic/gin/blob/master/docs/doc.md#dont-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :8080
[GIN] 2025/12/25 - 00:00:59 | 200 | 0s | 192.168.1.31 | GET "/health"consul:
host: 127.0.0.1
port: 8500
redis:
addr: 192.168.1.31
port: 6379
password: "123456"
db: 22人生,本质上是一套 Go 程序 + Consul 配置中心
Hermes 搭建可视化 web-dashboard 界面官网 hermes【https://hermes-agent.nousresearch.com/docs/user-guide/feature...】 查询当前版本是否和官网一致 升级版本 原因是 hermes 安全控制不允许本机之外访问,解决通过 nginx 代理。 编译环境 编译 启动 重启 nginx 服务 访问如下地址 如果不能访问确认端口是否启用 重启 hermes dashboard 后台启动命令Hermes 搭建可视化 web-dashboard 界面
官网升级版本配置解决通过 nginx 代理
升级版本
hermes versionhermes update配置 hermes dashboard
http://192.168.0.107:9119/hermes dashboard --host 0.0.0.0安装 nginx
curl -o nginx-1.26.2.tar.gz http://nginx.org/download/nginx-1.26.2.tar.gz
tar -zxvf nginx-1.26.2.tar.gz
cd nginx-1.26.2# 安装开发工具组(包含 gcc、make 等所有编译必需工具)
sudo yum groupinstall "Development Tools" -y./configure --prefix=/usr/local/nginx --with-http_ssl_module
make
sudo make installsudo /usr/local/nginx/sbin/nginx配置代理
cd /usr/local/nginx/conf/
vim nginx.confserver {
listen 9118;
#server_name 你的内网IP;
server_name 192.168.0.107
location / {
proxy_pass http://127.0.0.1:9119;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
# 注意:此处已移除 auth_basic 相关配置
}
}./nginx -s reloadhttp://192.168.0.107:9118/netstat -tlnp | grep 9119nohup hermes dashboard > /tmp/hermes-dashboard.log 2>&1 &
GitHub Trending 上突然冒出一个叫 这让我想起了自己亏掉的那只新能源股票——当时如果能听听巴菲特怎么说、木头姐怎么看,也许结果会不一样。这个项目似乎给了普通人一个「召唤大师」的机会。 于是,我决定花一个周末,把它跑起来,真实地感受一遍。 项目安装不算复杂,但有几个关键坑需要留意: 环境变量是第一个坑:项目需要 OpenAI / Anthropic / DeepSeek 等 API Key。我只申请了 DeepSeek(便宜且国内友好),在 如果你完全不想花钱,可以用 第一次运行,我选了最简单的单股票回测模式,测试标的:NVDA(英伟达),时间跨度 2026-03-01 到 2026-03-31。 在 终端开始疯狂输出日志——14 位大师 Agent 逐一被唤醒: 整个过程大约 2 分半钟,不用写一行代码,就把一整套多 Agent 投资决策流程跑通了。 如果嫌终端不够直观,可以启动前端: 打开 我试着搭建了一个「保守派委员会」:格雷厄姆(估值)+ 巴菲特(护城河)+ 塔勒布(风险),然后回测可口可乐(KO)。结果 Portfolio Manager 给出的「买入」置信度只有 42%——确实很保守。 项目还支持一次性分析多只股票(通过 我试了一个小组合: 过去我用过的 AI 投资工具,绝大多数是黑盒——输入股票代码,输出「买入/卖出」。但这个项目会把每一位大师的判断依据全部打印出来。 比如巴菲特 Agent 对 NVDA 的完整推理(简化版): 你可以像审阅实习生作业一样去检查每个 Agent 的逻辑。这种透明度,让学习投资知识的过程变得异常高效。 我试了 对于那些只想学习多 Agent 架构、不想绑定付费 API 的人来说,这是个巨大的加分项。 项目内置了 我回测了巴菲特 Agent 单独决策 vs. 全体 Agent 投票决策。结果显示:全体投票的夏普比率更高,但最大回撤也更大(因为塔勒布 Agent 会引入对冲策略,在下跌市场中反而增加波动)。这种反直觉的结果,只有跑过回测才能发现。 所有 Agent 的输入都来自公开财务数据、技术指标和新闻情绪。如果你问它:「某公司 CEO 今天发了一条奇怪的推文,该怎么办?」——它做不到。项目目前没有接入实时社交媒体流或非结构化事件数据。 这是一个心理层面的遗憾。当 14 位大师同时给出结论时,你很难不产生「这一定是对的」的错觉。项目作者已经在 README 里写了三次「仅供教育研究」,但我还是看到有人问「可以用真钱吗?」——这很危险。 如果你也想玩这个项目,我的建议是: 跑完这个项目的那天晚上,我没有去开任何模拟交易。反而花了两个小时,仔细读了格雷厄姆的《聪明的投资者》——因为巴菲特 Agent 在分析时引用了书里的一句话:「市场短期是投票机,长期是称重机。」 也许,这才是 AI Hedge Fund 最大的价值:它不是在帮你赚钱,而是在逼你去理解,那些真正赚到钱的人,到底是怎么想的。 项目地址:https://github.com/virattt/ai-hedge-fund ⚠️ 本文仅为技术体验分享,不构成任何投资建议。实盘交易有风险,请自行承担后果。从零跑通这个GitHub 55k星项目,到底能学到什么?
一、为什么我非要试试这个项目
ai-hedge-fund 的项目。点进去一看:54.9k stars,14 位传奇投资大师 + 5 位专业分析师,全部封装成 AI Agent,还开源。本文所有操作均在 macOS + Python 3.11 环境下完成,无任何真实资金交易。
二、使用过程:从克隆到第一次决策
2.1 安装与配置(≈15 分钟)
# 1. 克隆项目
git clone https://github.com/virattt/ai-hedge-fund.git
cd ai-hedge-fund
# 2. 后端安装(Python)
cd backend
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# 3. 前端安装(可选,建议装)
cd ../frontend
npm installbackend/.env 中写入:LLM_PROVIDER=deepseek
DEEPSEEK_API_KEY=sk-xxxxx--ollama 跑本地模型,但推理速度会慢很多。2.2 跑通第一个回测(≈3 分钟)
backend 目录下执行:python main.py --ticker NVDA --start-date 2026-03-01 --end-date 2026-03-31[Agent: Warren Buffett] 开始分析 NVDA...
估值:PE 偏高,但护城河极宽(CUDA生态),建议持有。
[Agent: Cathie Wood] 开始分析 NVDA...
认为 AI 芯片需求爆发,未来 5 年 CAGR 超 30%,强烈买入。
[Agent: Michael Burry] 开始分析 NVDA...
发现机构持仓过度集中,存在拥挤交易风险,建议减仓。
[Agent: Nassim Taleb] 开始分析 NVDA...
警告供应链地缘政治风险,建议买入价外看跌期权对冲。
...
[Portfolio Manager] 汇总所有信号:
买入: 6 票 | 持有: 8 票 | 卖出: 0 票
最终决策:HOLD(持有)
建议仓位:当前持仓的 15%2.3 可视化界面:拖拽一个投资委员会
cd frontend
npm run devhttp://localhost:5173,你会看到一个流程图编辑器(React Flow)。每个 Agent 都是一个可拖拽的节点,你可以:2.4 跑通多股票 + 实盘模拟(更接近真实)
--tickers 参数),以及接入实时数据(需配置 yfinance 或 Alpha Vantage)。AAPL, MSFT, TSLA, META,回测过去 6 个月。最终 Portfolio Manager 给出的结论是增持 MSFT、减持 TSLA。虽然这只是一个模拟,但看着 19 个 Agent 一步步推理出这个结论的过程,比直接看 K 线图有意思多了。三、真实感受:三个惊喜 + 两个遗憾
✅ 惊喜 1:Agent 的「思考过程」比结论更值钱
最终:持有,等待估值回归✅ 惊喜 2:跑本地模型也能用,成本极低
--ollama 模式(用的 llama3.2 量化版),单次分析耗时从 2 分钟变成了 8 分钟,但结论基本一致。这意味着完全不花一分钱 API 费用,就能在家里跑一个「虚拟投资委员会」。✅ 惊喜 3:回测模块出乎意料地严谨
backtest.py,不仅记录每次决策的信号,还会计算:❌ 遗憾 1:无法处理「非财务信息」
❌ 遗憾 2:容易让人「过度信任」
四、一点不成熟的建议
--ticker KO --start-date 2026-03-01 --end-date 2026-03-01,跑通了再玩复杂的。写在最后
上篇文章中提到的 关于 若需通过 若需通过手机APP连接本地大模型,可参考文章《手机直连本地大模型!不用云服务、不花一分钱,全家都能用》。 ChatWise与 访问ChatWise官网,点击“Download 26.4.3”按钮下载安装包(注: 安装包下载完成后,右键点击安装包文件,选择“以管理员身份运行”。 点击界面右下角的设置按钮,还可配置 除 浏览器插件类可选择 若以上工具均无法满足需求,也可借助gradio自行开发专属的前言
OpenWebUI它仅提供网页端使用方式(无独立 APP)。本文将介绍如何通过桌面客户端连接部署在本地的大模型。OpenWebUI的基本使用和开发环境搭建,可参考文章《Ollama+OpenWebUI 最佳组合:本地大模型可视化交互方案》。OpenWebUI手机网页端连接本地大模型,可参考文章《不花一分钱!把本地大模型装进手机,全家共享+权限管控全攻略》。ChatWise
OpenWebUI类似,均为AI聊天交互工具,不同的是ChatWise是一款桌面客户端,提供图形化操作界面。ChatWise基于Tauri框架开发,属于桌面图形化应用,无法在无图形化界面的系统中运行。ChatWise的高级功能需付费使用,基础功能则完全免费,满足日常连接本地大模型的需求已足够。安装ChatWise
下载Windows版本的安装包
ChatWise为桌面图形化应用,无图形化界面的系统无法运行)。本文以Windows系统为例,下载对应版本的安装包并完成安装。安装ChatWise
使用ChatWise
设置大模型的参数
常用功能
配置MCP
MCP功能。配置常用提示词
其他类似ChatWise的软件
ChatWise外,同类工具还有Cherry Studio、AnythingLLM。Page Assist、ollama-client。WebUI界面。
RT ,所里案子越来越多不好整理,干脆弄个系统录进去,最好是 PHP 写的因为只会一点这个其他的不会
effect-solutions 这个包,现在最新的是 0.5.2 ,npmmirror 上面还是 0.4.13

一个镜像站出这种错误实在是太恶心了,换腾讯的源了
面向对象包括封装、继承、组合、多态,其中最不好理解,也最强悍的就是多态。可以说掌握了多态就掌握了面向对象以及设计模式的精髓。
但是 java 里面的多态实现太过于严苛,以致于其他语言都无法完全模拟。请看下面的代码,用其他语言实现的时候总难以达到类似效果。
/*
多态:即同一个行为具有多个不同表现形式或形态的能力。
表现形式为,子类重写父类方法,实现类实现接口方法,子类重写抽象类方法等。
多态三个必要条件:继承、重写、父类引用指向子类对象。多态有效消除类型之间的耦合,并提供灵活的可扩展方案。
本例子简单清晰明了的 Java 多态,能看懂这个例子就懂了什么是多态。
*/
// 父类 A
class A {
public String show(D object) {
return ("A and D");
}
public String show(A object) {
return ("A and A");
}
// 默认注释掉。可开关注释测试下
// public String show(B object) {
// return ("A and B");
// }
}
// 子类 B
class B extends A {
public String show(B object) {
return ("B and B");
}
public String show(A object) {
return ("B and A");
}
}
// 孙子类 C
class C extends B {
}
// 孙子类 D
class D extends B {
}
// 测试验证
public class PolymorphismSimple {
public static void main(String[] args) {
// 父类声明自己
A a = new A();
// 父类声明子类
A ab = new B();
// 子类声明自己
B b = new B();
C c = new C();
D d = new D();
// 1) A and A 。b 的类型是 B ,也是 B 的实例,A 里没有 show(B)方法,但有 show(A)方法。B 的父类是 A ,因此定位到 A.show(A)。
System.out.println("1) " + a.show(b));
// 2) A and A 。c 的类型是 C ,也是 C 的实例,C 继承 B ,B 继承 A 。A 里没有 show(C)方法,也没有 show(B)方法,最后指向 A.show(A)。
System.out.println("2) " + a.show(c));
// 3) A and D, d 的类型是 D ,也是 D 的实例,D 继承 B ,B 继承 A 。A 里有 show(D)方法,直接定位到 A.show(D)。
System.out.println("3) " + a.show(d));
// 4) B and A, ab 是 B 的实例,但用 A 声明,即向上转型得到的类型是 A ,运行时才能确定具体该调用哪个方法。
// ab 是 B 的实例对象,但引用类型是 A 。类型是在编译时确定,因此从类型开始定位方法。
// A 类中没有 show(B)方法,但有 show(A)方法,因为 A 是 B 的父类,ab 也是 A 的实例,于是定位到 A.show(A)方法。
// 由于 B 是 A 的子类,且 B 重写了 A 的 show(A),A 的方法被覆盖了,于是定位到 B.show(A),这就是动态绑定。
// 虽然 B 中有 show(B)方法,但是因为 ab 的类型是 A ,编译时根据类型定位到 A 的方法,而不是 B 。
// 以下几种可开关打开/注释代码测试下。
// -
// 若 A 里有 show(A)和 show(B),B 里有 show(B)有 show(A),则编译时关联到 A.show(B),因 B 覆盖了 A.show(B),动态绑定到 B.show(B)。
// -
// 若 A 里有 show(A)和 show(B),B 里无 show(B)有 show(A),则编译时关联到 A.show(B),因 B 无覆盖,则直接调用 A.show(B)。
// -
// 若 A 里有 show(A)无 show(B),B 里无 show(B)有 show(A),则编译时关联到 A.show(A),因 B 覆盖了 A.show(A),动态绑定到 B.show(A)。
// -
// 若 A 里有 show(A)无 show(B),B 里无 show(A)有 show(B),则编译时关联到 A.show(A),因 B 无覆盖,则直接调用 A.show(A)。
// 查找顺序为:编译时根据引用类型确定所属类 -> 根据重载参数类型定位(类型按子->父->祖逐级往上查找)到类的具体方法(包括继承的方法) ->
// 运行时实例对象覆盖(覆盖只有子->父一层)了引用类型的同名方法 -> 定位到实例对象的方法。
System.out.println("4) " + ab.show(b));
// 5) B and A 。ab 是 B 的实例,类型是 A 。从 A 类没找到 show(C)方法,也没找到 A.show(B)方法,找到 A.show(A)方法。A.show(A)被 B.show(A)覆盖,因此调用 B.show(A)。
System.out.println("5) " + ab.show(c));
// 6) A and D 。A 里面有 show(D)的方法,直接定位到。
System.out.println("6) " + ab.show(d));
// 7) B and B 。B 里面有 show(B)的方法,直接定位到。
System.out.println("7) " + b.show(b));
// 8) B and B 。B 没有 show(c)方法,但有 show(B)方法。C 继承自 B ,父类型是 B ,因此调用 B.show(B)。
System.out.println("8) " + b.show(c));
// 9) A and D 。B 中没有 show(D)方法,B 继承 A ,A 里有 show(D), 故调用 A.show(D)方法。
System.out.println("9) " + b.show(d));
// 10) B and A 。父类声明子类,存在向上转型。A 里有 show(A),被 B.show(A)覆盖了,因此定位到 B.show(A)。
System.out.println("10) " + ab.show(a));
}
}
/**
* 测试结果
* 1) A and A
* 2) A and A
* 3) A and D
* 4) B and A
* 5) B and A
* 6) A and D
* 7) B and B
* 8) B and B
* 9) A and D
* 10) B and A
*/
idea 太重了
.net >> java/ webpack >> vite(顺带着)
大方向是 springboot/人大金仓(postgresql)
主要是业务层面:
ORM/权限控制/轻量 OA/多租户(可能还涉及业务定制) 都有什么选项?
之前了解过 renren ,看过代码感觉质量一般,而且是 MySQL native 的,有点负担
2026 年当下,还需不需要找此类框架,还是直接 Vibe coding ?
如果是 vibe coding ,也要有个参考的架构,我水平有限问问大家
————————————————————————
关于前端,目前心仪 TDesign ,有没有生产深度用过的 V 友,有没有坑?