美文网首页
电商go语言笔试题答案

电商go语言笔试题答案

作者: 严先生你瞎说 | 来源:发表于2021-07-13 23:06 被阅读0次

    正题就是:电商go语言职位笔试题答案。为什么标题是这个,我也不知道呀!

    【拼装n个m大小的字符串数组的字符串组合】(详细业务见下方代码注释)
    有递归的方式(递归太挑使用场合了,用的不好我怕挨打,所以不写就不会挨打)
    嵌套循环的方式(面试官说要ijk变量临时加加减减,判断来来回回,我也许要半天才能实现但是我觉得是浪费时间)
    这里介绍我的拆分方法(就是将大问题拆解为简单的局部问题,粗暴相加)。

    该实现自我标榜的优点是:
    1,可以改成多线程,或者分布式节点执行,以此支持大数据量的拆分并发计算,中间值的存储可以更加丰富,不会出现栈溢出,如字符串加到一定体量,可以改为存到数据库,数组下标里存记录id,最终输出时根据id串联输出,规避内存占用大的缺点。
    2,除了扩展性,最最突出的莫过于实现简单易懂。只要记住分而治之(当然下方可能没有实现这个逻辑但有这个核心),n*m都转换成两两相加,这个实现起来毫不费力,怎么写都不会错。分而治之的思想也是拆解常见问题的方式。

    那,总结起来就是:简单可爱,不信就往下看:

    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 组装数组 </br>
     * 拼装n个m大小的数组的字符串组合</br>
     * 即每个数组中选取一个元素,组成字符串的个数,比如以下main中的组合是3*3*3*4=108 </br>
     * 如 a11,a21,a31,an1 ...  a13,a22,a31,anm ... a13,a23,a33,anm </br>
     */
    public class ArrayMaker {
    
        public static void main(String[] args) {
            //构造数据源
            String[] ary1 = new String[]{"a11","a12","a13"};
            String[] ary2 = new String[]{"a21","a22","a23"};
            String[] ary3 = new String[]{"a31","a32","a33"};
            String[] aryn = new String[]{"an1","an2","an3","anm"};
            List<String[]> list = new ArrayList<String[]>();
            list.add(ary1);
            list.add(ary2);
            list.add(ary3);
            list.add(aryn);
    
            //按照规则,开始合并生成字符串数组
            //只有一个线程,就简单的二个值累加一下吧,
            //真的拆分要先切分数据源,体现出拆分,再到结果的分布式合并。
            //直接强硬地取初始值
            String[] ary = list.get(0);
            for(int idx=1;idx<list.size();idx++){
                ary = plusArray(ary,list.get(idx));
            }
            //打印结果
            for(String str : ary){
                System.out.println(str);
            }
            //核对下总数是否是 ary1.length 一直乘以到 aryn.length
            System.out.println(ary.length);
        }
    
        //合二为一
        public static String[] plusArray(String[] ary,String[] aryAnother){
            if(aryAnother==null){
                return ary;
            }
            String[] aryPlus = new String[ary.length*aryAnother.length];
            StringBuffer sbf = new StringBuffer();
            int idx = 0;
            for(String str : ary){
                for(String strAnother : aryAnother){
                    sbf.append(str).append(",").append(strAnother);
                    aryPlus[idx]= sbf.toString();
                    System.out.println(sbf);
                    idx ++;
                    sbf = new StringBuffer();
                }
            }
            return aryPlus;
        }
    }
    

    下方吐槽,君可旁观

    近日,面试了几下,那些个题目,搞得我摸不准,不是因为难,说是简单可我也没答对呀,真是尴尬,为了缓解淡淡的忧伤,所以我就写文章吐槽。。。。。。。

    比如,哪些走索引(然后列出了一些where 条件判断),无非就是考察sql怎么写高效,能看懂执行计划,知道高效的写法其实也就差不多了,至于那些千奇百怪的写法小心要请挖掘机来填。

    比如,String的各种初始化,反反复复赋值来来回回变着花样初始化,问你一共产生了多少个对象。估计大多数人都只有模糊的规则,比如:什么时候堆中创建了两个字符串值,什么时候是指向的同一个。

    各种父子类,相互赋值,变着花样初始化,调用父子类的同名方法,问你输出什么。

    有一个大事务里面,多个方法,同步的,异步的,远程的,问你开启了多少个数据库连接。我还真的答错了,因为我从未见过这样的代码。最后告诉我,事务不要这样写,这好像是我的台词。

    以上,要是我们组内开发真的写这样那样千奇百怪的代码,先批评,再问他什么是主流的普通的实现,什么又是优雅的实现。然后大家写一样风格的代码然后一起迭代到更优雅的实现,这也是天下间所有程序员的追求,走大路开大船住大house赚大票子。

    好,说的是流程制度和题目本身,人其实都还挺好的,面试双方各种情况都有,十之八九都是过眼云烟,有些还挺乐呵。

    如果还有奇怪的代码,先问他java是值传递还是引用传递,然后问他php和java哪个好,go和scala哪个好。其实以上这些问题最常见于上个10年里的线下java培训班,归根结底也不是我要吐槽,是最近有同事笔试面试,以我代他们吐槽。

    相关文章

      网友评论

          本文标题:电商go语言笔试题答案

          本文链接:https://www.haomeiwen.com/subject/fdqepltx.html