开云体育

ctrl + shift + ? for shortcuts
© 2025 开云体育

(20201225) Hot Posts


 

开云体育

2020-12-25 Hot Posts

?

Hacker News

Tell HN: Merry Christmas

V2EX


完全没有感觉到有为我这种出门在外的打工人考虑。
首先今年的假期是 2-11 号到 2-16 号,也就是大年三十到年初六。二十九号依然是法定工作日。
首先我在上海工作
假如我工作地也在上海的话,那我可以美滋滋的在 29 号这天站好最后一班岗,然后大年三十这天贴贴对联,打扫一下卫生迎接新年。
而实际上我老家在山东,我如果大年叁十这天回家,得坐五个小时的高铁到市里,再坐两个小时的大巴到县里,再坐一个小时大巴到村里。感觉好像只能回家吃年夜饭了。根本没有时间在老家四处逛逛,更没有时间搞上坟这样的传统习俗。而且,二十九号从工作中脱离出来后,大年叁十还得舟车劳顿一天到家,中间不能休息两天,直接就春节了,我都没法以饱满的姿态迎接新的一年。
可能是刚开始打工不习惯吧,说不定以后见怪不怪了。

事情是这样,我跟女友对于书房准备怎么布置,分歧很大,找了一些各自欣赏的图片,发现审美差距非常大,我是来吐槽 and 求评论的

她喜欢的风格


我喜欢的风格




她觉得那些环境昏暗,说我不注重美观。
我觉得她发的简直弱爆了,跟图书馆自习室差不多。
各位怎么看

其实自己也背着比较多的房贷和车贷,上有老,下有孩子,欠银行的钱比较多,亲戚哭穷都是欠了几万块,最高也才十来万,而我欠的是他们的几十倍。。。

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

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

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

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

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



坦言后,这位同学也打消哪些念头再也没有和我说自己要轻生,还经常一起研究折腾如何赚钱。

如题词


我的开发机配置:
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

内推,二面面试官约了两天后要笔试(之前听说内推没有笔试),我不敢大意,想到工作三四年了,应该不会考察特别难的算法。查了一下别人分享的面试,要不是就是没有笔试, 要不是就是一些线性表,多线程顺序执行问题。我的算法基础还行,曾经也刷过题,线性表问题(比如反转链表,合并有序数组之类)、二叉树问题( 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;
    }

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


这两天机器刚到,首先测试了一波 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 文件也改了就是不生效


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


经常看见有人说 Windows 很多程序都需要 UAC 权限才能安装,Linux 下不仅 apt 安装全部程序都需要 root 权限,连 pip 安装模块都要 root 权限,没有普及的安全软件,恶意代码不是更容易被执行,这安全性体现在哪里呢?
?