V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  geelaw  ›  全部回复第 39 页 / 共 173 页
回复总数  3454
1 ... 35  36  37  38  39  40  41  42  43  44 ... 173  
2020-10-12 23:30:04 +08:00
回复了 MeloForsaken 创建的主题 程序员 关于 synchronized 关键字的疑问
楼主看的文章里说 synchronized 锁有多种状态且会变化,然后又问 monitor (管程)锁是什么,显然是没有理解 synchronized 的原理、Java 对象结构、什么是 Java 对象的管程。

Java 对象的管程 = 可以用 synchronized 访问的那个同步机制,所谓 synchronized 不过是访问 monitor 的语法机制,而“synchronized 所用的锁会变化”就是说 Java 对象管程里的锁会变化。
2020-10-12 10:18:28 +08:00
回复了 XingWu 创建的主题 JavaScript 不懂就问: png 格式图片转成 jpeg,到底算什么类型的图片
区分三个概念:

- 识别文件处理程序的机制
- 文件格式
- 文件类型

“机制”在 Windows 世界里即 MIME 类型和扩展名,“格式”是通用、良定义概念,即所有有效文件内容构成的集合,楼主的问题在于不理解或者不能形成“类型”的良定义,且会混淆“格式”和“类型”的概念。

可以如此定义:文件是“A 类型”当且仅当它是 A 格式且具有正确识别 A 的处理程序的机制。

那么在 Windows 里,把磁盘上有效的 PNG 类型文件的扩展名改为 .jpg ,那么该文件仍然是 PNG 格式,但不再具有正确的识别机制,从而不是有效的 PNG 类型的文件,由于 PNG 格式和 JPEG 格式不相交,也可以推断该文件不是有效的 JPEG 格式的文件,从而也不可能是有效的 JPEG 类型的文件。

再举一个例子:考虑修改有效的 C++ 源代码类型的文件的扩展名为 .txt ,由于文本格式是 C++ 源代码格式的超集,可以判断修改后的文件仍然是有效的文本类型的文件,且仍然是有效的 C++ 源代码格式的文件,但不再是有效的 C++ 源代码类型的文件。

再举一个例子:考虑一个不使用扩展名和 MIME 类型的系统,在这个系统里修改扩展名不会对格式和类型产生任何影响。

@jinliming2 #31 在几乎所有现实的系统中,读取文件名比文件内容的前几个字节效率都要高很多倍。如果文件类型需要在 UI 上有所反映(例如不同类型的文件可以有不同的操作,而不仅仅是“打开”一个操作,或者不同类型的文件需要使用不同的图标等),那么通过文件内容识别绝对是糟糕透顶的设计。
另外几乎所有值得使用的浏览器都会在另存为的时候自动识别 MIME 类型并通过文件关联查询 MIME 类型对应的扩展名,然后帮用户加上。
2020-10-11 18:58:19 +08:00
回复了 1YsX1 创建的主题 C++ 请教一个简单的 C++并发文件写入冲突的问题。
@1YsX1 #4 这是双重理解错误。

1. FILE * 实际起效果的是“被指向的” FILE 结构,而不是 FILE * 本身,复制指针的值并不会复制 FILE 结构,因此操作的是同一个 FILE 。
2. fseek 传入的参数是 FILE * 而不是 FILE *&,并不存在“操作传入的变量”这种说法,它获得的永远是传入值的副本。把 fp 复制到 nowfp 再传入是多此一举,不会有任何效果。
2020-10-10 22:58:22 +08:00
回复了 golp2000 创建的主题 Python 如何向 word 里面插入一个分页符?
我觉得很诡异的是楼主都用 win32com 了居然没发现 VBA 和 win32com 都只是 COM 的投影罢了。
2020-10-09 18:11:33 +08:00
回复了 chengxiao 创建的主题 Go 编程语言 Aes 加密 CBC 模式的 Nopadding 填充在 GO 里怎么实现啊
为了数据安全最好还是不要对接这个系统,使用非伪随机的密钥以及使用密钥相关的 IV,都会破坏 AES 所有的安全保证。
2020-10-09 07:44:21 +08:00
回复了 lifetimeporn 创建的主题 分享发现 Win10 默认图标
直接不设置图标不就行了,还可以自适应系统更新后的图标变化。
2020-10-06 17:24:46 +08:00
回复了 mart1nN 创建的主题 数学 函数在某一点连续能否推出在该点的邻域连续?
@geelaw #3 Oops,太久没练习都生疏了。黎曼函数是那个只保留分母的……我提到的那个累积概率函数是严格单调且在且仅在无理数点连续的函数。
2020-10-06 17:22:33 +08:00
回复了 mart1nN 创建的主题 数学 函数在某一点连续能否推出在该点的邻域连续?
@LaureatePoet #2 如果你说的是 xD(x),它只在 0 连续。仅在无理点连续的函数构造不那么简单,需要弄一个 Q 上每点概率都非零的概率测度,然后考虑它的累积概率函数。

极限存在和去心邻域连续是完全不同的概念,产生这样的错觉是非常严重的想当然。正确的直观:每个点的极限都只和这个点的去心邻域有关,而任意两个不同的点都可以找到分别的去心邻域使之不相交,特别地,这包括一个点的任意一个去心邻域里的任意一个点。因此一点处的极限不可能导出该点任何去心邻域里任何点的极限性质。
2020-10-06 17:12:49 +08:00
回复了 zxCoder 创建的主题 JavaScript 闭包为什么叫闭包
https://i.loli.net/2020/10/06/h6lNvGms2EU7DjS.png

另一个类比:匿名函数 = CPU (提供逻辑),匿名函数所捕捉的变量 = 主存等其他设备(提供环境),闭包 = 可以使用的电脑。
2020-10-06 05:35:50 +08:00
回复了 fuse 创建的主题 问与答 为了方便添加公钥到各个机器, 公布公钥有风险吗
@Mutoo #11 有不代表现在有人用。

@threebr #14 正确的说法是“我们不知道如何在合理时间内破解”。

@helloworld000 #17 不可以,反过来用会丧失所有安全性。如果你看了任何暗示公私钥可以交换的“科普”,最好忘记。

@fuse #23 即使是最 naive 的 80 位安全性,几千万应该也不够在 10 年之内破解出来。

公钥在使用过程中本来就可以公开的,放不放在 GitHub 上对真正对目标有兴趣的攻击者区别不大。比较大的问题是如何确保从互联网得到的公钥是自己想要加的那个,而不是篡改过的。GitHub 应该还是信得过,“其他便于获取”的地方就不一定了,得看哪儿。
请问你说的是 C++ 的 operator ()、C# 的委托、Python 的可调用类型、JavaScript 的 function 吗?
@lxilu #1 idiom
2020-10-03 20:58:22 +08:00
回复了 lxilu 创建的主题 C# Java Stream.iterate() generate() builder() C#怎么搞?
很简单,使用一个 struct 包装之,在优化全开的情况下可以做到零额外开销:

public static class Helper
{
public struct FluentList<T>
{
public readonly List<T> List;
public FluentList(List<T> that) { List = that; }
public FluentList<T> Add(T item) { List.Add(item); return this; }
// Add other methods as needed.
}
public static FluentList<T> AsFluent<T>(this List<T> that) { return new FluentList<T>(that); }
}

// Consumer
var list = new List<int>().AsFluent().Add(1).Add(2).List;

另外生成无限默认值比较好的方法是自己写一个实现,很简单:

public sealed class InfiniteStream<T> : IEnumerable<T>, IEnumerator<T>
{
public InfiniteStream<T> GetEnumerator() { return this; }
public IEnumerator<T> IEnumerable<T>.GetEnumerator() { return this; }
public IEnumerator IEnumerable.GetEnumerator() { return this; }

public void Reset() { }
public bool MoveNext() { return true; }
public T Current { get { return default(T); } }
public object IEnumerator.Current { get { return default(T); } }
public void Dispose() { }

private InfiniteStream() { }
public static readonly InfiniteStream<T> Instance = new InfiniteStream<T>();
}

如果需要也可以写一个 struct 版本的。
2020-10-03 19:54:25 +08:00
回复了 richards64 创建的主题 程序员 一个感觉难以理解的的 C#代码片段,想知道这是为什么
@lights #11 显然这里一共 new 了 5 个东西,一个是提供状态的对象(即编译器生成的),接下来每次赋值给委托的时候都 new 了一个 Action 。每个 Action 都引用了同一个状态对象的同一个方法,至于为什么同一个状态对象,这是因为 i 的 scope 只进入了一次。这里的 for 循环等价于

for (init; cond; next) body;

{ // 1
init;
while (cond)
{ // 2
body;
goto_continue:
next;
} // 2
} // 1

循环变量 i 的 scope 是 1,而 scope 1 只进入了一次,所以只有一个状态对象。

如果你改成

foreach (int i in new int[] { 0,1,2,3 })

则在较新的 C# 编译器下会得到 0 1 2 3,因为这等价于

{ // 1
var coll = new int[] { 0,1,2,3 };
for (int idx = 0; idx < coll.Length; ++idx)
{ // 2
int i = coll[idx];
foos[i] = () => Console.WriteLine(i);
} // 2
} // 1

因为 i 的 scope 变成了 for 的里面,所以会进入 4 次,因此有 4 个不同的状态对象被创建,每个 Action 都会引用各自状态对象的方法。
@liminghui #4 更好的方法是关掉所有客户端的“在发件箱保存副本”,因为几乎所有现代邮件提供商都会保存发信副本。如果关掉网页里的设置,会导致网页上发出去的邮件没有存档吧。
2020-09-26 11:43:14 +08:00
回复了 wensonsmith 创建的主题 问与答 菜单名称后面为什么要加三个点?
@daozhihun #6 这个理解是错误的。正确理解是 #2 ( Windows 的规则也是这样)。

另外楼主截图里的菜单不符合正确规则,例如 System Preferences 和 App Store 都不需要加省略号,因为这两个命令就是打开 System Preferences 和 App Store 。

一个更简单的理解是:需要省略号,当且仅当菜单名字没有完整描述命令,且未描述的部分由用户选择。比如 Force Quit (some app)、Restart (and possibly reopen apps afterwards)。
@kiko #6 用 VBScript 可以实现“如果已经打开则转到窗口”的功能,因为文件夹的“打开”命令就是这样实现的。
于是可以这么写:

Set shapp = CreateObject("Shell.Application")
shapp.Open WScript.Arguments(0)

保存,比如保存为 C:\ShellExecute.vbs 。
然后建立快捷方式 wscript.exe "C:\ShellExecute.vbs" "C:\文件夹路径",比如保存到桌面,命名为 打开文件夹。
接着可以修改快捷方式的图标、快捷键啦等等,也可以固定到任务栏。

这个代码实际上可以打开任意文件。也有 JScript 版本:

var shapp = new ActiveXObject("Shell.Application");
shapp.Open(WScript.arguments(0));

扩展名必须是 .js 才能被 wscript.exe 正确解读。
> 希望是一个永远存在的任务栏图标按钮,点一下就打开这个文件夹。

2 楼的方法即可。

> 任务栏设置了自动合并同类按钮,打开多个文件夹会合并在一起,希望能建一个独立的快捷方式,不会被合并到其他打开文件夹的按钮上。

这个是不可能做到的,除非你自己实现一个 IShellFolder 或者自己实现一个 explorer host 。分组是根据 AUMID 确定的,除了先前提到的两个方法,无法改变一个 explorer 窗口的 AUMID 。
父类方法是指用 super 调用的基类中方法(的版本)。

例如
class B { public void Foo() { } }
class D extends B { @Override public void Foo() { super.Foo(); } }
这里面 super.Foo 调用 B.Foo 是编译时决定的。
2020-09-20 01:24:56 +08:00
回复了 1ver 创建的主题 Windows Windows 有没有这样的软件,集成在任务栏搜索框的词典
没有,在 Windows 8/8.1 和早期 Windows 10 是有的,这个功能已经被砍掉了。

虽然新版的 Windows 10 不能集成 Cortana 了,但是可以使用 deskband,这个至少从 Windows XP 以来到最新的 Windows 10 都是支持的。

https://docs.microsoft.com/en-us/windows/win32/shell/band-objects#desk-bands
1 ... 35  36  37  38  39  40  41  42  43  44 ... 173  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4617 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 57ms · UTC 09:54 · PVG 17:54 · LAX 02:54 · JFK 05:54
Developed with CodeLauncher
♥ Do have faith in what you're doing.