V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  CLMan  ›  全部回复第 5 页 / 共 8 页
回复总数  149
1  2  3  4  5  6  7  8  
2024-01-29 00:02:16 +08:00
回复了 yazoox 创建的主题 程序员 LeetCode 怎么刷题比较快速高效,还容易复习/复盘?
我服了,随便按个键就自动回复了,啥设定啊。
------
每个题独立的包或者模块,我刷题主要用 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 文档记录,怎么顺手怎么来。
2024-01-28 23:45:09 +08:00
回复了 yazoox 创建的主题 程序员 LeetCode 怎么刷题比较快速高效,还容易复习/复盘?
每个题独立的包或者模块,我刷题主用 Go ,也用过 Rust ,共存在一个项目里面。

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

```
2024-01-28 23:12:21 +08:00
回复了 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 系的命令行效果。
2024-01-17 23:13:17 +08:00
回复了 tlerbao 创建的主题 程序员 到底要不要统一管理 API
WEB API 本来就天然适合封装(模块化):

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

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

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

云服务厂商在提供服务时,在提供 WEB API 的同时,同时提供封装的 SDK 也是差不多的道理。是因为用户存在相关需求,用 SDK 能降低开发成本。
2024-01-15 21:33:47 +08:00
回复了 Cat7373 创建的主题 魔兽争霸 2024 了,游戏界出现魔兽争霸 3 的替代品了嘛
如果是指 RTS ,暴雪用星际 2 证明了 RTS 这类硬核游戏已经不适合当前的游戏消费人群,后续也没什么游戏厂商原意在这方向投资。

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

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

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

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

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

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

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

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

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

如果你只是要弄清楚基本概念,那就从操作系统层面入手,比如《操作系统导论》相关章节。再往下深挖就是 ISA ,硬件原理(我自我认知没这知识背景,没研究这东西)。
纯函数式语言工程界都没怎么用,工程语言也就吸收点函数式语法糖,和正宗的函数式语言差远了,学生时代可以学,面向工作时代就没必要了。

JVM 上的其它语言(主动)学习的价值其实都不大,因为它们就是用来替代 Java 的,用的框架、编译结果都没啥区别。招 Java 写后端的公司也不可能让你进去写 Kotin (你跑路了怎么维护)。例外情况是,安卓开发需要学习 Kotin ,用 Spark 需要学习 Scala 。
2024-01-02 16:43:25 +08:00
回复了 dc2002007 创建的主题 React react ui 组件库选择
写 Windows 桌面应用(electron,tauri,wails)可以用微软官方的 fluent ui:

https://github.com/microsoft/fluentui
2024-01-01 14:24:28 +08:00
回复了 dcsuibian 创建的主题 TypeScript 想问问大家 TypeScript 中关于 null 处理的方式
1. strictNullChecks 肯定得开启吧,开启后 TS 就是 null safe 的语言了
2. 我是去年才学得 TS ,`declare`是不是属于被边缘化的语法,我在 handbook 中没学过,自己项目也从未使用
3. 类型允许 null 就应该增加检测 null 的代码,除非是逻辑需要,不应该用断言`!.`
4. 除开与外界的交互,项目中应该只使用 null 或者 undefined 一种来表示空(google style guide)
2024-01-01 02:26:02 +08:00
回复了 purenothingform 创建的主题 Android WebView 竟然貌似不支持 js async 函数?
@CLMan 更正,“promise 不应该在 aysnc 函数里面使用”是错误的,应该是 async 函数不需要手动返回 promise 。

看了下 4 楼代码,确实学到了许多,特别是 promise 和 async 函数之间的关系。很多场合,async 函数还是没法替代 promise ,需要手撸 promise 。
2024-01-01 01:59:54 +08:00
回复了 purenothingform 创建的主题 Android WebView 竟然貌似不支持 js async 函数?
@CLMan 看了下,4 楼的代码写的比我好。
2024-01-01 01:55:48 +08:00
回复了 purenothingform 创建的主题 Android WebView 竟然貌似不支持 js async 函数?
promise 是 es6 加的底层 API ,async 是 es8 加的语法糖。

promise 不应该在 aysnc 函数里面使用,async 返回值会自动包装为 Promise 。

promise 的问题是不够直观,写起来心智负担较大,能用 async 和 await 就尽量别用 promise 。

```
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

async function waitUntilPresent(w, callback) {
while (w.main === undefined) {
console.log("sleep");
await sleep(100);
}
callback(w.main);
}

setTimeout(()=>{
window.main = "hello";
},1000);

await waitUntilPresent(window, main => {
console.log(main);
});
```
2023-06-08 12:19:40 +08:00
回复了 yuanyuandeqiu 创建的主题 Java Java 优先队列问题
@boatrain1111 我作为一个过来者,认为他犯了初学者的毛病,指出来有什么问题?除此之外,我揣测了他什么?
个人是缺乏了解一些最佳实践,因此只能用最基本的功能。
2023-06-07 21:56:44 +08:00
回复了 hj960511 创建的主题 程序员 银行类的研发工作岗位在哪里才可以找到,比如农业银行?
1. 名校硕士校招
2. 大厂出身社招
3. 外包跳甲方,难而且收入不如 1,2
2023-06-07 21:35:32 +08:00
回复了 yuanyuandeqiu 创建的主题 Java Java 优先队列问题
@CLMan 更正“不补充该领域的专业知识”,应该为“补充该领域的专业知识”
更正“看看其它语言是如何封装也是一个不错的思路”,应该为“了解其它语言是如何封装也很有帮助”
1  2  3  4  5  6  7  8  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1941 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 30ms · UTC 15:03 · PVG 23:03 · LAX 07:03 · JFK 10:03
Developed with CodeLauncher
♥ Do have faith in what you're doing.