2020-12-25

19 篇热帖

1. 感觉我们的春节假期完全是给城里人设计的。
完全没有感觉到有为我这种出门在外的打工人考虑。
首先今年的假期是 2-11 号到 2-16 号,也就是大年三十到年初六。二十九号依然是法定工作日。
首先我在上海工作
假如我工作地也在上海的话,那我可以美滋滋的在 29 号这天站好最后一班岗,然后大年三十这天贴贴对联,打扫一下卫生迎接新年。
而实际上我老家在山东,我如果大年三十这天回家,得坐五个小时的高铁到市里,再坐两个小时的大巴到县里,再坐一个小时大巴到村里。感觉好像只能回家吃年夜饭了。根本没有时间在老家四处逛逛,更没有时间搞上坟这样的传统习俗。而且,二十九号从工作中脱离出来后,大年三十还得舟车劳顿一天到家,中间不能休息两天,直接就春节了,我都没法以饱满的姿态迎接新的一年。
可能是刚开始打工不习惯吧,说不定以后见怪不怪了。
2. 小伙深夜到女友房间,发现竟然
事情是这样,我跟女友对于书房准备怎么布置,分歧很大,找了一些各自欣赏的图片,发现审美差距非常大,我是来吐槽 and 求评论的

她喜欢的风格


我喜欢的风格




她觉得那些环境昏暗,说我不注重美观。
我觉得她发的简直弱爆了,跟图书馆自习室差不多。
各位怎么看
3. 过年回家, 如果遇到亲戚朋友特别能哭穷怎么办?
其实自己也背着比较多的房贷和车贷,上有老,下有孩子,欠银行的钱比较多,亲戚哭穷都是欠了几万块,最高也才十来万,而我欠的是他们的几十倍。。。

当然,身边有一位同学哭穷相当惨,有一段时间经常给我说,“活着干啥?我还欠着这么多钱”,“以后杂活”等话,

而我安慰他之后,问他欠了多少钱。他说,“现在还有 3 万块没还”。 他是他家独子,自己不用买房,不用买车。

那一段时间,受到这位同学影响,有一种特别郁闷难受(类似抑郁的感觉),像我这种兄弟多,房子车子老婆全靠自己挣,还有是他 n 倍的银行贷款,我活着还干什么? 当有这种想法的时候,脑子一个激灵,我怎么会有轻生的念头?

反复安慰自己,好不容易熬到了现在,不能有这念头呀!

然后和这位同学坦言,“兄弟,别在和我哭穷了,我实在是比不上你,你有父母给你置办,你薪资也不低,而我?并且我已经魔障了,脑子里经常会有你的语言,活着干啥等,有轻生的念头,在和我这样说话,我只能把你拉黑了”。



坦言后,这位同学也打消哪些念头再也没有和我说自己要轻生,还经常一起研究折腾如何赚钱。
4. 超低访问量的小站用 sqlite 还是 mysql?存储数据占用的空间是一样的吗?主要以存图片为主。

如题~

5. 阿里现在的面试这么难了吗?

内推,二面面试官约了两天后要笔试(之前听说内推没有笔试),我不敢大意,想到工作三四年了,应该不会考察特别难的算法。查了一下别人分享的面试,要不是就是没有笔试, 要不是就是一些线性表,多线程顺序执行问题。我的算法基础还行,曾经也刷过题,线性表问题(比如反转链表,合并有序数组之类)、二叉树问题( BST 等)、排序算法( TopK,Nth 等等)、 手写 BlockingQueue 、LRU 、还是多线程问题,我觉得这些对我来说没什么问题。

到了约定时间,面试官给我发了一个在线编程的网页,打开后题目已经在那里了,看起来是实际问题而不是具体的算法数据结构之类。面试官说给你 40 分钟,你把这两道题写完,我说能不能用 IDEA,面试官说不能,然后就不说话了。毫无代码提示补全,完全白板编程,不仅如此,题目描述都很简单,但是却有五六个类,之间都有关系,我抓紧认真审题,光弄懂题目都花了十多分钟,我吃惊的发现这两道题竟然都和动态规划有关,我当时心凉了一半。第一道题是用滑动窗口(双指针)找到极值,我用吃奶的力气才做完(白板编程,还有多层循环的 continue,break )。第二道题,经过我的抽象,发现竟然是一道复杂的背包问题。

题目大致是 n 个背包,m 个物品, 每个背包可以有某些物品任意件, 找出最少的背包包含所有的物品。 注: 此题一定有解。

    //经过我的抽象大致是这样的,重量和数量问题不用考虑
    public static class Product{}
    public static class Package{}
    //此物品是否在包裹中
    public boolean productInPackage(Package packet, Product product) { ***** }

    //完成此方法: 每个背包可以有某些物品任意件,找出最少的背包包含所有的物品
    public Map<Product, Package> findLeastPackages(List<Product> products, List<Package> packages) {}

心里真的拔凉拔凉的。时间到了我第二题只做到一半(找到了所有背包中所有的物品),后面时间不够,集合的交叉并补也记得不是很清楚了。而且只有大致的思路。也没想到最优的解法。

我 JDK 重要源码学了一遍又一半,HotSpot 源码也有所涉猎,研究 JDK 的 BlockingQueue 、ConcurrentLinkedQueue 、WorkStealingQueue,JCtools 的 SPSC 、MPSC 、MPMC,Disruptor RingBuffer, 学习各种 lock-free 算法和结构,心想自己技术水平还算可以,没想到折戟在这里。

不知道是不是内推的这个部门不招人( JD 描述还是 9 月份),自己一直对阿里有好感,但是一面面试官的傲慢,二面出这种题目白板编程,感觉自己被耍了。我只是面一个 P6 而已,现在也是公司的一个技术小 leader,每天 5 点多就能下班了,笔试晚上 9 点半还能听到对面的人在讨论需求。说实话这些对我有影响,但不是最重要的,我想去阿里因为我对自己和技术还有追求。当然最想去阿里中间件团队,但是据说特别难,所以选择了曲线救国的方法。可是遭遇这一遭。

自己的解法,笔试结束后用 IDEA 花了近 2 个小时才写完,又花了一些时间优化了代码,但是不知道还有什么简单或最优的解法。


    public static class Product{}
    public static class Package{}
    public boolean productInPackage(Package packet, Product product) {}

    // n 个背包, m 个物品, 每个背包可以有某些物品任意件, 找出最少的背包包含所有的物品  注: 此题一定有解
    //不考虑背包的权重、背包中物品权重、物品数量和重量
    public Map<Product, Package> findLeastPackages(List<Product> products, List<Package> packages) {

        if (products == null || products.isEmpty() || packages == null || packages.isEmpty()) {
            return null;
        }

        Set<Product> productSet = new HashSet<>(products);
        Set<Package> packageSet = new HashSet<>(packages);

        int productsSize = productSet.size();
        int packagesSize = packageSet.size();

        //返回值
        Map<Product, Package> priorityPackages = new HashMap<>(productsSize);

        //包裹 <=> 包裹里物品的双向对应
        //可以使用 Guava 的 Bimap
        Map<Package, Set<Product>> allPackages = new HashMap<>(packagesSize);
        Map<Set<Product>, Package> productSetPackage = new HashMap<>(packagesSize);

        //寻找到包含数量物品种类最大的包裹
        Package maxProductsPackage = null;
        Set<Product> productTempSet = null;

        for (Package aPackage : packageSet) {

            if (aPackage == null) {
                continue;
            }

            //初始化 aPackage
            allPackages.put(aPackage, (productTempSet = new HashSet<>()));
            productSetPackage.put(productTempSet, aPackage);

            for (Product product : productSet) {
                if (product == null) {
                    continue;
                }

                //物品在背包中, 放入背包
                if (productInPackage(aPackage, product)) {
                    allPackages.get(aPackage).add(product);
                }
            }

            if (maxProductsPackage == null) {
                maxProductsPackage = aPackage;
            } else {
                maxProductsPackage = allPackages.get(aPackage).size() >= allPackages.get(maxProductsPackage).size() ? aPackage : maxProductsPackage;
            }
        }

        //已经找到背包有哪些物品
        //开始集合运算

        //maxProductsPackage 种类最多, 说明这个一定是最优里面的
        //maxProductsPackage 包含所有种类 直接返回
        if (allPackages.get(maxProductsPackage).size() == productSet.size()) {
            for (Product product : productSet) {
                priorityPackages.put(product, maxProductsPackage);
            }

            return priorityPackages;
        }

        //todo 机试的就写道这里  主要记不太清楚集合的交叉并补 API,时间也不足  (40 分钟白板写代码)
        //没有使用 lambda 、Stream API 主要是记忆问题(白板写代码), 还有通过数组包装局部变量, 还有多层循环 break


        // 1.删除 maxProductsPackage 子集的包裹
        // 2.找到其他包裹和 maxProductsPackage 差值最大的包裹, 并取并集作为新的 maxProductsPackage
        // 3.判断 maxProductsPackage 是否包含所有物品, 是的话返回, 不是的话重复第一步直到找到结果或集合为空(一定有答案)

        Set<Product> maxProducts = allPackages.get(maxProductsPackage);
        Set<Product> secondMaxProducts = null;

        //删除最大包裹
        allPackages.remove(maxProductsPackage);

        //留下来的包裹 [不在最大包裹之内, 有差值, 但不是差值最大的]  找到差值最大的合并到 maxProducts, 然后转移到 mergeSets
        HashSet<Set<Product>> remainSets = new HashSet<>(allPackages.values());

        //和最大包裹差值最大的, 已经合并到最大包裹内 [结果一定在这个里面]
        Set<Set<Product>> mergeSets = new HashSet<>(packagesSize);
        mergeSets.add(maxProducts);

        while (maxProducts.size() != productsSize) {

            //如果 remainSets 为空,且 maxProducts.size() != productsSize 说明没有答案[不会发生]
            //可以把所有包裹相加去重后如果!= productsSize, 说明没有答案, 这样可以更快排除,这里只是以防万一
            if (remainSets.isEmpty()) {
                return null;
            }

            //寻找次大的包裹, 不需要比较优先级 [使用 iterator 模式删除元素, 优化循环]
            Iterator<Set<Product>> iterator = remainSets.iterator();

            while (iterator.hasNext()) {

                Set<Product> next = iterator.next();
                next.removeAll(maxProducts);

                //是 maxProducts 的子集
                if (next.isEmpty()) {
                    iterator.remove();
                    continue;
                }

                //初始化 secondMaxProducts    可以删除次大元素减小集合
                if (secondMaxProducts == null) {
                    secondMaxProducts = next;
                } else {
                    secondMaxProducts = next.size() > secondMaxProducts.size() ? next : secondMaxProducts;
                }
            }

            // 已经找完,退出循环
            if (secondMaxProducts == null || secondMaxProducts.size() == 0) {
                break;
            }

            // 把 secondMaxProducts 加入到 maxProducts
            ////更新 maxProducts
            maxProducts.addAll(secondMaxProducts);

            //更新 mergeSets
            mergeSets.add(secondMaxProducts);

            //删除此元素
            remainSets.remove(secondMaxProducts);
            secondMaxProducts = null;
        }

        //mergeSets 即为所求
        mergeSets.forEach(set -> set.forEach(product -> priorityPackages.put(product, productSetPackage.get(set))));
        return priorityPackages;
    }
6. 有哪位的开发机升级到 Big Sur 的了,老机器会不会很卡?
我的开发机配置:
iMac (Retina 4K, 21.5-inch, 2017)
3.4 GHz Quad-Core Intel Core i5
8 GB 2400 MHz DDR4

低配置机器不知道升 Big Sur,会不会很卡...
Xcode 目前是 12.2 版本,正在升级 12.3
7. 2021 年 Linux 发行版推荐?

目前用的笔记本是 ThinkPad,系统是 Windows 10,主要写 Java 。

求大佬们推荐一下 Linux 发行版

Manjaro, Arch or Elementary OS?

8. Google voice 被回收了

我一直在用,甚至被回收的前一天还接收了豆瓣的登录验证码,怎么突然就把号停了??还能找回吗?
V2erForiOS

9. 台式电脑主机有蟑螂,买了瓶杀虫气雾剂。可以直接喷么?

各位 V 友救命啊,最近总感觉公司电脑有一股莫名的臭味,打开一看,好家伙,住了一家子蟑螂,什么八大姑七大姨。买了瓶杀虫气雾剂,准备今天开喷干死它
想问几个问题:
1.杀虫气雾剂是否有效?
2.用杀虫气雾剂可以喷台式电脑主机么?可以的话我需要注意什么?
3.大家有啥妙招么电脑主机有蟑螂?(公司电脑,拆机,换机暂时不现实)
救命啊..............

10. M1 可以当主力开发了

这两天机器刚到,首先测试了一波 Docker,我本身是搞 PHP 的,所以拿 Laradock 测试了一番。

运行了几个容器, Nginx 、MySQL (不支持)、mariadb 、redis 、elasticsearch 、kibana

除了 MySQL 不支持其他都支持。 所以我们可以使用 mariadb 来进行代替。 另外 workspace nvm 一直报错,workspace 容器装不了 node 和 yarn,所以需要去掉 设置为 false WORKSPACE_INSTALL_NODE=falseWORKSPACE_INSTALL_YARN=false

Docker

Docker

不知道为啥 node 就是装不上,已经设置代理、镜像 hosts 文件也改了就是不生效

11. PHP 越来越靠近编译型语言了

php7,8 支持变量类型约束了,开源框架也都在慢慢引入类型约束,感觉之前 php 的优势就是简单,快速开发,引入变量约束,四不像的感觉

12. Linux 比 Windows 安全主要体现在哪里?
经常看见有人说 Windows 很多程序都需要 UAC 权限才能安装,Linux 下不仅 apt 安装全部程序都需要 root 权限,连 pip 安装模块都要 root 权限,没有普及的安全软件,恶意代码不是更容易被执行,这安全性体现在哪里呢?
13. 为什么好多高可用方案都是 3 个节点?为什么是 3?

比如 eureka, 不清楚为什么不是 2,或者 4 ?

14. 你会关注技术名词中的大小写么
比如
Java java JAVA
GitHub Github github
MySQL Mysql mysql
PHP php Php
CPU Cpu cpu

经常会看到有人提醒, 应该是 XXX 不是 xxx, 实际阅读中 xxx 对阅读的体验影响也不大, 想听听大家怎么看待这件事
15. IDE 主题什么颜色对眼睛好

最近眼睛很疲劳,之前 IDE 一直是黑底,后来听说白底好,换了白底,几个月后眼睛疲劳的很,不知道和 IDE 的主题颜色有没有关系,现在又换回了黑底。

16. 我想在玄关墙上挂一个小的屏幕,展示 TodoList,有什么低成本方案呢?
想到了几个方案:
1 、二手 iPad Mini,但是没想好怎么从墙上引出一个 USB 线,并且不影响美观
2 、电子墨水屏 + 浏览器,耗电低,但还得配置一个树莓派主机,还是需要 USB 线

感觉到了最后,我需要的是一个怎么在墙上引出一个 USB 面板且不丑的方案,似乎买一个 USB 插座面板替换到现有插座面板比较靠谱。

或者小爱触屏音箱这类产品比较适合?
17. 2020 年最后一个问题

如何成为一个高情商的人?

我认为这个是可以后天习得的,想找相关的书籍学习下,但搜不到具体的。

而知乎一堆“高情商这样说”的固定话术。。感觉偏技,有点水分

求大佬指教,还是我对情商有误解?

18. 驾照没到手就买了一辆 10 年的外省二手车

过程

12 月 7 号,通过某平台认识一个玩车的网友,然后当天就托他帮我找一台车,于是故事就此发生。在简单确定了车型和预算之后他那边的朋友就开始找车了,这个时候我才考完科目二。

12 月 8 号,科目三道路驾驶考试,这是我第三次考了,前两次都挂了。第一次考试路线都没记熟就去考了,刚拐完两个路口就懵了,理所当然地挂掉了。第二次补考很可惜,两次机会,第一次挂在停车距离超过了 50cm,第二次停车的时候转向灯灭了我没注意补上,就这样结束了考试。第三次 90 分过了。

在中间这段时间就是漫长的等待和背科目四的题库了...

12 月 16 号考完科四,下午直接车管所领证。拿到证的时候索然无味,回想起我和小姐姐们在夕阳下练科目二的时光,就像我逝去的青春,短暂又快乐,悄无声息地结束了。

12 月 18 号,网友通知我找到一辆车了,10 年上牌的,简单看了下发来的照片几乎没考虑也没问什么问题就确定了。

12 月 19 号转账全款,拍了收款收据,我把身份证寄过去,计划是 21 号提档把车运过来。

12 月 20 号,网友说出现意外情况,车主订的新车延期提车了想等到下个月再提档,心咯噔了一下。没办法只能等吧,我就说好吧。

12 月 21 号,网友说已经劝车主这个月提档了。

12 月 23 号,网友通知我车主提档完了,在沟通完发什么板车运过来后,在昨天晚上开始发车了。距离我这大概 1000 多公里

总结

车型:10 年上牌 三菱翼神 手豪 2.0 手动挡

车价:5W

家人朋友意见:狗血淋头

我知道买贵了,也知道这个价位可以买到很多更好的车或者全新车,但是挺喜欢这款的。希望车到的时候我不会后悔吧。

19. 30 了,如何让自己变得温文尔雅一些

老婆不只一次吐槽我提意见很像吵架

我个人也很苦恼这个问题,一直想改,但是很多时间无意识的提高了说话音量

主要在以下场景我会无意识的提高话说音量

  • 熟人,越熟机率越高,有点类似于 “爱之深,责之切”
  • 对方做错了,或者不该那样做,然后我有更好的方案时
  • 玩嗨了

包括工作场所,有时候也会无意的提高说话音量

目前主要是有意识的控制,但是效果不明显,有更好的方式吗?