V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  CLMan  ›  全部回复第 4 页 / 共 7 页
回复总数  139
1  2  3  4  5  6  7  
两个内存大户,谈体验的话,都谈不上好。
296 天前
回复了 xlinux 创建的主题 git git 文件 EOL 的疑惑
@CLMan 补充一下,我实际测试过:

- eol 设定不存在强制效果,只会在提交时当本地文件的 eol 与设定和存档文件均不一致时才提示转换
- 如果本地文件的 eof 与存档文件的 eof 一致,即使违背了 eol 设定,那么 git 不会提示也不会转换
296 天前
回复了 xlinux 创建的主题 git git 文件 EOL 的疑惑
·EOL·是 end of line 的缩写,表示仓库中文本文件应当使用的换行符,可以通过`core.eol`( etc/gitconfig,~/.gitconfig )来设定,或者.gitattributes 的`* text=auto eol=lf`类似指令来设定,默认为 native 。

`core.autocrlf`( etc/gitconfig,~/.gitconfig )可以指定当文件的 eof 与设定不同时,是否在检出和提交代码时进行转换。

回答里的问题:

1. “在 windows 查看文件 a 、b 的 eol 格式都是 crlf”,因为你没在~/.gitconfig 中设定,所以使用 etc/gitconfig 里面的默认设定,如果你是手动安装的 git ,在你安装时的选项会最终保存在该文件,不同 client ,比如 github desktop 或者 fork 等,可能会使用它们自带的 git
2. “在 linux 查看文件 a 、b 的 eol 格式都是 lf”与 1 同理
3. “ZIP ,查看文件 a 为 crlf ,b 为 lf ”,ZIP 里面存储的是原始文件,并不会受到 autocrlf,eof 的设置影响

特别是 3 ,这些设置本质上是影响 git 这个软件的逻辑,并不会直接影响实际存储的数据
@drymonfidelia 在我本机上实测,可以正确设置 header 。
@drymonfidelia 我前面给出的方案修复了你代码里面的语法错误,你都不看一眼吗?
@CLMan 需要添加依赖(为了避免兼容性问题,与你使用的 tauri 版本保持一致,可以使用 IDE 的依赖管理功能查看)

[dependencies]
webview2-com = "0.19.1"
windows = "0.39.0"
你的思路没什么问题,但知识储备跟不上,这个问题涉及到 win32 api ,而且 rust 语言本身是一个很难学的语言。

下面是解决方案:
-----
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]

use tauri::Manager;
use webview2_com::{Microsoft::Web::WebView2::Win32::{ICoreWebView2WebResourceRequest, COREWEBVIEW2_WEB_RESOURCE_CONTEXT_ALL}, WebResourceRequestedEventHandler};
use windows::{core::HSTRING, Win32::System::WinRT::EventRegistrationToken};

fn main() {
tauri::Builder::default()
.setup(|app| {
let main_window = app.get_window("main").unwrap();
main_window.with_webview(|webview| unsafe {
let core = webview.controller().CoreWebView2().unwrap();
let mut _token: EventRegistrationToken = EventRegistrationToken::default();
core.AddWebResourceRequestedFilter(&HSTRING::from("*"), COREWEBVIEW2_WEB_RESOURCE_CONTEXT_ALL).unwrap();
core.add_WebResourceRequested(
&WebResourceRequestedEventHandler::create(Box::new(move |_webview, args| {
if let Some(args) = args {
let request: ICoreWebView2WebResourceRequest = args.Request().unwrap();
request
.Headers()
.unwrap()
.SetHeader(&HSTRING::from("key1"), &HSTRING::from("value1"))
.unwrap();
}
Ok(())
})), &mut _token).unwrap();
}).unwrap();
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
用一个你没学过的(复杂)语言,干一件你不熟悉的事情(使用 tauri 框架),然后怪这东西太难用了。
301 天前
回复了 wednesdayco 创建的主题 TypeScript 这种的类型是不是实现不了(TypeScript)
好奇什么场景需要这么复杂的类型定义呢?

或者说类似问题的类型约束的严谨性和代码简洁应该如何取舍?

我个人是把 TS 当作一个不太完美的类型约束工具,更倾向于代码简洁性。
https://imgur.com/a/YiUkw4T

上面丢失了层次,给个图像(这是之前没用 go mod ,后来添加了 go.mod )。

用啥都能刷吧,主要是层次清晰就 OK ,Go 和 Rust 都挺适合用 vscode 写,语言官方自带测试工具,写单元测试也容易。

个人更喜欢用 Go ,不需要任何语法负担。

至于复习,我个人刷题主要是练习题感,并没有期望面试遇到原题,复习更多是从系统的数据结构与算法知识层面。
我服了,随便按个键就自动回复了,啥设定啊。
------
每个题独立的包或者模块,我刷题主要用 Go ,也用过 Rust ,共存在一个项目里面。

结构如下( question1,question2 替换为对应问题的 url 路径,连字符 rust 用_,go 用-):
```
go.mod
Cargo.toml
src/
array/
question1/
solution_test.go
question2.rs
mod.rs
dp/
hash/
...
lib.rs
```
示例代码( contains-duplicate-iii.rs ):
```
struct Solution {}

// https://leetcode-cn.com/problems/contains-duplicate-iii/
// 参考题解: https://leetcode-cn.com/problems/contains-duplicate-iii/solution/cun-zai-zhong-fu-yuan-su-iii-by-leetcode-bbkt/
// 考点:滑动窗口、桶排序
//
// 一种朴素算法是计算所有可能的差值,时间复杂度为 kN ,空间复杂度为 O(1)
//
// 事实上,我们可以用空间换时间来改善算法。将数域根据其值划分所属空间,使用 hash 表记录当前空间的一个值
// 在一次迭代所有值时,当前值可能:
// 1. 所属空间有值,返回 true
// 2. 所属上一个空间有值,两者差满足条件,返回 true
// 3. 所属下一个空间有值,两者差满足条件,返回 true
// 4. 将当前值记录到其空间中,同时维护窗口为大小 k:移动窗口并删除不在窗口内的值
//
//
// 算法时间复杂度 O(N),空间复杂度主要是 hash 表的大小:O(min(k,N))

impl Solution {
fn get_id(n: i64, w: i64) -> i32 {
if n >= 0 {
(n / w) as i32 //0~w-1 属于 0
} else {
((n + 1) / w - 1) as i32 //-w~-1 属于 -1
}
}
pub fn contains_nearby_almost_duplicate(nums: Vec<i32>, k: i32, t: i32) -> bool {
use std::collections::HashMap;
let mut buckets: HashMap<i32, i32> = HashMap::new();
let w: i64 = t as i64 + 1;
// 省略实现代码
false
}
}

#[cfg(test)]
mod tests {
use crate::array::contains_duplicate_iii::Solution;

#[test]
fn test() {
let nums = vec![2147483647, -1, 2147483647];
let k = 1;
let t = 2147483647;

let ans = Solution::contains_nearby_almost_duplicate(nums, k, t);
assert!(!ans)
}
}
```
Go 版本就是需要一个单独的文件夹(包),里面代码也差不多,包括实现代码和测试代码。

只要遵循特定语言的组织结构,测试规范,缝合其它语言进去也很容易。题目介绍、解题思路,可以放到代码里面,也可以单独用 markdown 文档记录,怎么顺手怎么来。
每个题独立的包或者模块,我刷题主用 Go ,也用过 Rust ,共存在一个项目里面。

结构如下:
```
go.mod
Cargo.toml
array
question1

```
303 天前
回复了 firhome 创建的主题 Windows 如何让 windows 命令行如 mac 般丝滑?
命令行,不仅仅是 shell(cmd,powershell,bash,zsh...),还包括一系列命令行工具,Linux,MacOS 用户熟悉的是 Unix Tools 。

CMD 是 DOS 系统的延续,powershell 是 Winodws 从 Vista 重新设计的一款 shell 。由于 Winodws 主要面向消费者市场,且后续进入 GUI 时代,因此 DOS 系的 shell 和命令行套件就渐渐没啥人用了。而 Unix 系的 shell 和套件由于 linux 在服务端的流行,因此成为了主流。

shell 本质上只是一个程序,powershell 里面启动 git bash ,与 bash 里面启动 zsh ,或者任意 shell 里面启动 Python 没有什么区别。

用 cmd,powershell 意味着你需要从头学一个 shell ,除非是项目需求,个人是不建议学这两个东西,应用面太窄。

Windows 上的 git 提供了 bash ,以及部分 UNIX Tools 。

msys2 或者 cygwin 相比 git ,提供了 bash 以及完整的 Unix Tools 。

但无论是 git 还是 msys2,cygwin ,与 windows 不太搭,包括样式、启动速度、以及存在一些兼容性问题,比如需要用 winpty 来执行 python 命令。

wsl2 需要开启 Hyper-V ,对性能存在一些影响。由于是采用虚拟化方案,跨文件系统的 IO 性能较差。

总之,目前没有一个完美的解决方案,能平替 Linux/MacOS 下的 Unix 系的命令行效果。
314 天前
回复了 tlerbao 创建的主题 程序员 到底要不要统一管理 API
WEB API 本来就天然适合封装(模块化):

- WEB 请求存在大量与应用本身无关的细节,这些细节不应该与业务逻辑混合在一起
- 需要多个地方调用相同的 WEB 请求
- 多个 WEB 请求需要复用处理鉴权、错误处理( HTTP 状态、自定义错误代码)的逻辑

将 API 理解成远程调用的话,就更能理解为啥要封装了。

将访问外部 API 接口进行统一管理是一个很自然的想法,你疑惑为啥要这么做,可能是因为你接触的问题复杂度不够或者你习惯了麻烦。

云服务厂商在提供服务时,在提供 WEB API 的同时,同时提供封装的 SDK 也是差不多的道理。是因为用户存在相关需求,用 SDK 能降低开发成本。
如果是指 RTS ,暴雪用星际 2 证明了 RTS 这类硬核游戏已经不适合当前的游戏消费人群,后续也没什么游戏厂商原意在这方向投资。

如果是指 RPG ,war3 的一些 RPG 已经孵化出了独立的游戏类别:

- DOTA ,影响了后续的 DOTA2,LOL,王者荣耀
- 战三国,影响了后续的 DOTA 自走棋,云顶之弈

RPG 的 war3 虽然经典,但已经是“百足之虫,至死不僵”,这么多年来已经有更好的平替游戏以及其它游戏了。

此外,现在的 RPG 的 war3 ,不考虑外部竞争,存在两个致命缺点:

- 游戏本体因为引擎的限制,在怪物数量较多时以及第三方 hacker patch 的滥用下,性能很差,没法做到向低端硬件兼容(优秀的例子是拳头游戏)
- 在网易的官方平台主导下,所有 RPG 地图全向金钱看齐,沦为了国产页游级别的充钱加属性的流水线产品

这两个致命缺点,加速了 RPG 的 war3 的游戏寿命衰减,旧玩家脱坑,也没有什么新玩家。
317 天前
回复了 guotie 创建的主题 软件 为什么我没觉得 obsidian 有多好?
如果你只是把它当成一个 Markdown 文件管理器的话,目前没有比这更好的软件了。

在用 Obsidian 之前,我是用 VSCode 来编辑我的笔记,vscode 没法实现 `编辑即预览` 效果。

Obsidian 可以平替 VSCode ,除了默认的图片路径是私有格式需要修改为 Markdown ,其它都是开箱即用。除了 Markdown ,我没用它任何私有功能,以及第三方插件。

我是用 Git ,每个笔记本我只需要备份.obsidian/app.json ,.obsidian 下的其它配置写入.gitignore 里面。
317 天前
回复了 weidaizi 创建的主题 分享创造 个人数据冷备方案及配套小工具
之前也计划过用 Go 写类似的软件,用来避免电脑里面保存的 exe 啥的被篡改(没装杀毒软件,有点疑心病),这下可以借鉴下楼主的思路。
319 天前
回复了 nnegier 创建的主题 Java Java 有讲锁比较深入浅出的书吗?
XXX 语言 YYY 知识,其实就是 YYY 领域知识,而只不过 XXX 语言自己封装了一套。没有基础的或者基础不牢的新人,就很容易陷入 XXX 语言提供的封装的 API 里面,去死记硬背文档、API 说明、实现代码,缺乏跳出该语言去学习 YYY 领域知识的视野。

如果你只是要弄清楚基本概念,那就从操作系统层面入手,比如《操作系统导论》相关章节。再往下深挖就是 ISA ,硬件原理(我自我认知没这知识背景,没研究这东西)。
1  2  3  4  5  6  7  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5818 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 03:07 · PVG 11:07 · LAX 19:07 · JFK 22:07
Developed with CodeLauncher
♥ Do have faith in what you're doing.