美文网首页
电商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