小工具搬运工 - 2021年10月
type: channel
link: http://www.atoc.cc/wp/index.php/2021/10/
description: 搬运一些实用的小工具
items: Java 和 C# 最大的不同是什么？
items: 当孩子问「为什么小朋友不小心碰到我，却不向我道歉」时，该怎么回答呢？
items: 删库跑路的程序员
items: windows10查看电脑已经保存的wifi密码

Java 和 C# 最大的不同是什么？
type: item
date: 2021-10-17T01:48:00+08:00
description: 作者：知乎用户 链接：https://www.zhihu.com/question/20451584/answer/2220757276 来源：知乎 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。 我觉得抛开语法而谈，最主要的还是对底层的控制能力不同。C# 一开始虽然借鉴 Java，但是目的完全不是为了造一个 better Java，而是造一个 better C++。游戏引擎们偏爱 C# 也是有这一层原因在里面，这一点高赞回答中 @MaxwellGeng 的回答已经足够能说清了。 比如在 C# 里面你能干的： var x = new int[10]; fixed (int* p = x) { Console.WriteLine(*((long*)p - 1)); // 10 } 上述代码会输出 10，为什么？因为 .NET 中数组的长度存储于数组第一个元素之前的 8 字节内存中。如果你再接着输出 ((long)p - 2)，将会直接得到这个对象的 TypeHandle 地址： Console.WriteLine((long)typeof(int[]).TypeHandle.Value == *((long*)p - 2)); // True 然后拿着这个指针又接着能去访问对象的 MethodTable。 再有你还可以手动在栈上分配空间： var x = stackalloc int[2]; // 或者 Span<int> x = stackalloc int[2]; 做安全访存 x[0] = 3; x[1] = 1; Console.WriteLine(x[0] + x[1]); // 4 接着你想绕过 GC 直接手动分配堆内存： var array = (int*)NativeMemory.Alloc(10, sizeof(int)); array[0] = 1; array[1] = 3; Console.WriteLine(array[0] + array[1]); // 4 NativeMemory.Free(array); 上述调用等价于你在 C 语言中调用的 malloc，此外还有 AllocAligned、Realloc、AllocZeroed 等等，可以直接控制内存对齐。接下来你想创建一个显式内存布局的结构 Foo： var obj = new Foo(); obj.Float = 1; Console.WriteLine(obj.Int); // 1065353216 Console.WriteLine(obj.Bytes[0]); // 0 Console.WriteLine(obj.Bytes[1]); // 0 Console.WriteLine(obj.Bytes[2]); // 128 Console.WriteLine(obj.Bytes[3]); // 63 [StructLayout(LayoutKind.Explicit)] struct Foo { [FieldOffset(0)] public int Int; [FieldOffset(0)] public float Float; [FieldOffset(0)] public unsafe fixed byte Bytes[4]; } 然后你就成功模拟出了一个 C 的 Union，之所以会有上面的输出，是因为单精度浮点数 1 的二进制表示为 0x00111111100000000000000000000000，以小端方式存储后占 4 个字节，分别是 0x00000000、0x00000000、0x10000000、0x00111111。进一步，你还能直接从内存数据没有任何拷贝开销地构造对象： var data = stackalloc byte[] { 0, 0, 128, 63 }; var foo = Unsafe.AsRef<Foo>(data); Console.WriteLine(foo.Float); // 1 [StructLayout(LayoutKind.Explicit)] struct Foo { [FieldOffset(0)] public int Int; [FieldOffset(0)] public float Float; [FieldOffset(0)] public unsafe fixed byte Bytes[4]; } 甚至这样： var data = 1065353216; var foo = Unsafe.AsRef<Foo>(&data); Console.WriteLine(foo.Float); // 1 [StructLayout(LayoutKind.E…

当孩子问「为什么小朋友不小心碰到我，却不向我道歉」时，该怎么回答呢？
type: item
date: 2021-10-16T16:48:00+08:00
description: 链接：https://www.zhihu.com/question/468899632/answer/2170139482 您还是没参透道歉的核心，是给自个儿消灾避祸的护身符，不是对别人的要求。 因为本质上讲，道歉它一分不值。 类似于道歉时说的“对不起”，以及其它客套话比如“劳驾”“您”“借过”"谢谢"“excuse me”……它们的作用都类似。 有的叫情绪支付，有的是情绪预付。 我在街上走，你挡在我前头了，我说劳驾您借过一下，你肯定就让开了，我也就走过去了 这就是预付，我希望你有个行为，用客气话支配你，则你心甘情愿的实施这个行为。 同样我在街上走你挡路，我说你属螃蟹的哈横在路中间，给爷爬！ 你回过头来眉毛都立起来了，这一架跑不了。 而道歉，则是滞后于自己的行为给别人造成损失，伴随发生的支付措施。 我不小心碰你一下，你疼了，我说对不起，你也就不挑事了。 其实你疼还是疼，我的道歉又不是念白魔法咒语，给你疗不了伤，只是你心情舒畅了而已。 而且，我碰你一下，也道歉了，你还是逼逼赖赖没完没了，则周围的舆论肯定是向着我的。 “人家都给你道歉了，不依不饶这是想碰瓷啊！” 对不对？所以道歉在小事上，能给自己少惹麻烦，也能争取舆论支持。 孩子要是不懂这个，你领着他去超市买根冰棍吃，问问他，刚才看见爹给你结账了吧，我不结账超市能放我走吗？ 孩子说不能。 你告诉他道歉就是结账，结小事对别人负面影响的账。 有人偏不爱结，轻则背后挨骂，重则当场挨打。 所以嘴甜，是让自个身子少受罪的办法，把客气话看成情绪上的零钱就好，你自己有这笔零钱就安心，能帮你平不少小麻烦。 别人没有它，你崩替他操这个心，而应该用悲悯的视角看待这人，因为你掐指一算，他这辈子得有大把时间浪费在跟人撕逼上，遇上比他还横的，挨揍都在意料之中。 你说这人可怜不可怜。 你还得告诉孩子，道歉对于你来说，小账可以平，大债跑不了。 你不小心把人2块钱的豆浆碰洒了，你道歉了，人家兴许不跟你计较。 反过来你一把给人小2k的飞天茅台给cei了，错非对面姓马，否则你十六国语言道歉，也逃不开赔偿。 所以儿贼，领悟道歉的精髓了么？ 道歉在大事上，死罪可免，活罪难逃，情绪能平，逃单不行。 所以面对道歉，除了看态度，也得看战损比。 比方说刚才内个小孩平衡车压你脚，你疼一下，他也说对不起了。 你低头一看，1000块钱的鞋压坏了。这时该怎么办？ 先把情绪债还上：“没关系，脚没事”。 你也客客气气。 然后再就事论事：“我这鞋上礼拜刚买的迪士尼限量版，998，您看按折旧给700合适吗，不成咱还可以商量。” 这叫一码归一码，不叫得理不让人，孔孟二位老先生在天上看着，都不会说你失了这个“礼”。 所以道歉，你就当是兜里零钱看待就对了，且只用于自己对外支付，因为道歉收到的好处都是自己揣着的。 小事你擅于道歉，逢凶化吉。 大事对方哪怕给你道歉，也得账目明细。 而小事别人不道歉，说明这人不但傻，而且穷，穷的连情绪上的零钱都掏不出来。 这零钱欠多了，自有老天催债。毕竟这世界上睚眦必报的狠人，还是有的，迟早碰上一位教他做事，他就舒坦啦。 扫描二维码，在手机上阅读！

删库跑路的程序员
type: item
date: 2021-10-16T15:46:00+08:00
description: 作者：无念 链接：https://www.zhihu.com/question/483752248/answer/2127520344 来源：知乎 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。 因为删库跑路，我坐牢了。 公司老板经营不善，拖欠工资半年，我终于忍无可忍，提出离职。 而老板居然说：爱走就走，一毛没有。滚吧！ 我气愤的直接设置了全盘删除的自动任务，明天凌晨定时执行。然后直接走了。 收拾自己的东西离开了公司。隔天老板发现这事，报了警。 老板以我的行为对公司造成了几百万损失的名义把我告上法院。 最后，我进了牢房。 狱友们问我：你怎么进来的？ 我答：我写代码写进来的。 狱友们：你牛逼啊！ 我只好惭愧的接受了赞扬。 进了监狱，其他人都是劳动改造，做些低端工作，而我作为技术人才，那就不一样了。我接着996写代码。 首先是管理监狱数据的小哥，要清点监狱人员的资料，居然用的是Excel表格。 他整理起来太累了，向领导抱怨。 领导就说：xx不是写代码的吗，让他来帮帮你。 然后我就被提了出来，替小哥整资料。整着整着觉得不对劲，我一个程序员，我凭什么手动整理资料？ 然后我就打开了Excel函数，快速写了几个方法，把所有数据分门别类的处理完毕。 就在我靠着电脑椅打哈欠的时候，小哥回来了。发现我已经完成了。 小哥惊了，大声道：这是我平常一个月的工作量，你这就完了？ 我不屑一顾的笑了笑，点头道：没错。 小哥举起了大拇指，赞道：不愧是程序员。牛逼！ 然后我以为我会被放回牢房了。 结果，领导又找上了我…… ——点赞高于五十了，加更加更。 领导：小x啊，我这边有点事情，你帮忙做一下。要是做好了呢，我可以给你申请减刑。 我略微激动，居然能减刑，当场拍胸脯：没问题，有什么事就让我来吧。 然后领导把我带到了办公室，告诉我：这系统莫名其妙就坏了，帮忙看看？ 我心里开始发毛，又不是我写的系统，让我看问题，我勒个去，我有可能看不出来啊。 但是来都来了，牛也吹了，就只能硬着头皮看下去了。 捣鼓了一会儿，大概明白了，这是个管理数据的系统。现在数据查询完全废了。报错还挺明显，就直接弹出了具体的失败原因。 看了下详细报错，我恍然大悟：这**谁干的，往纯数字的id信息里面插了中文！ 领导：那依你看，怎么修？ 我拉过键盘，迅速操作，把记录调出来，将相关的几条记录修正。然后系统恢复了顺利运行。 领导看了看，夸赞道：小x你可真厉害啊！ 我得意的笑了笑。然后越看那几行数据越眼熟。 等下，这不是我刚刚造的数据吗？那小哥整理数据就是为了导入到这个系统？ 我去，是我插的中文！写函数的时候手抖了啊！ 隐隐冒着冷汗，我昂然挺立，推翻了刚才的结论：这其实还是这系统的稳定性不够高，做系统的人没有做好防护啊。 越说越顺嘴，我大声到：要是我来做，这系统肯定不会这样崩！ 但是，心里想了想，可能是换个方式崩。 领导看了我一眼，似乎发现了我前后不一致的说辞。但是并没有再说话。 我呆了一会儿，有点虚，主动咨询领导：我现在可以回去了嘛？ 领导：可以，可以。 领导叫来小哥，把我送回去。还嘱咐着，给我换个好点的牢房。 但我心里寻思，这牢房还能有什么好的。 走出办公室前，还听领导在那边跟其他人聊什么，监狱改造，技术创收，充分发挥技术人才的价值…… 我就知道，这事儿，还没完。 等下，我的减刑呢？领导不会忘了吧！啊！！！ ——点赞超一百了，加更加更。 小哥带着我回牢房，我看着这路不对啊。 我问道：这是去哪？ 小哥答：带你去高级间。 我沉默了，还真换牢房了。原本的狱友们远离了，颇有点怀念呢。 进了新牢房，开局第一问：你咋进来的？ 我：写代码写进来的。 狱友：哦豁，牛啊！ 我：你呢？ 狱友：我也是。 我：……合着你刚才是夸自己呢。 狱友：那可不。看着狱友昂扬的头，我有些困惑。 于是我详细说道：我是被欠薪了，所以删库跑路，被告了。你呢？ 狱友：我是产品经理要我写个五彩斑斓的黑色，我把他狗头打爆了！ 我瞬间躲远了。好家伙，暴力狂。 但是多想想，我点头道：打得好！胡乱提需求的产品经理确实该打。 狱友猛的靠过来，握住我的手：同道中人啊。 我尴尬的笑着，不敢反驳。我才不是怕被打呢。 过了两天，小哥又来找我了。 小哥在门口招呼着：张工、x工，跟我来，领导有事找你们。 张工就是我狱友，而我就是x工。我们听到招呼，也就服从指挥的跟着走了。 在办公室见到了领导，领导笑呵呵的说到：小x，小张，你们来了啊。 领导接着说道：我这次找你们来，是想你们给他们做做培训，学习一下编程技术。让他们在里面能学技术，出去能融入社会。 张工瞬间不屑之色冲上脸庞，喊到：就他们那群没文化的，大字不识几个，怎么教的来！ 我沉默着，我心里赞同狱友的想法。教好学生都要教很久的内容，更何况教一群可能没基础，而且也没向学之心的人。 领导被张工怼了，…

windows10查看电脑已经保存的wifi密码
type: item
date: 2021-10-05T01:24:00+08:00
description: 1，打开windows的命令窗口，输入 netsh wlan show profiles,如下图，这个命令仅仅只是查看一下电脑保存的所有的wifi名字 2，需要查看密码的话，则需要输入这个命令， netsh wlan show profile name=”需要查询的密码的wifi名字” key=clear,这样子就会在关键内容那边显示密码了 扫描二维码，在手机上阅读！